From 181073f6d9a6df64bb108e75f7e0dbc66f11c436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cu=CC=9Bo=CC=9Bng=20Nguye=CC=82=CC=83n?= Date: Fri, 22 Sep 2023 20:46:40 +0700 Subject: [PATCH 1/2] Format --- package.json | 2 +- pnpm-lock.yaml | 34 ++++++++++++++--------------- src/lib/export.ts | 42 ++++++++++++++++++++---------------- src/lib/firestore-helpers.ts | 4 +++- src/lib/import.ts | 9 ++++---- tests/helpers.spec.ts | 6 +++--- 6 files changed, 52 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 5f79daa..1835e29 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@types/chai": "^4.3.6", "@types/color": "^3.0.4", "@types/mocha": "^10.0.1", - "@types/node": "^20.6.2", + "@types/node": "^20.6.3", "chai": "^4.3.8", "firebase-mock": "^2.3.2", "gts": "^5.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20130ed..d5675a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,8 +29,8 @@ devDependencies: specifier: ^10.0.1 version: 10.0.1 '@types/node': - specifier: ^20.6.2 - version: 20.6.2 + specifier: ^20.6.3 + version: 20.6.3 chai: specifier: ^4.3.8 version: 4.3.8 @@ -45,7 +45,7 @@ devDependencies: version: 10.2.0 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + version: 10.9.1(@types/node@20.6.3)(typescript@5.2.2) typescript: specifier: ^5.2.2 version: 5.2.2 @@ -278,7 +278,7 @@ packages: engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.6 - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false optional: true @@ -451,7 +451,7 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false /@types/chai@4.3.6: @@ -477,13 +477,13 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.6.3 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: false @@ -501,7 +501,7 @@ packages: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false optional: true @@ -512,7 +512,7 @@ packages: /@types/jsonwebtoken@9.0.1: resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false /@types/linkify-it@3.0.2: @@ -555,8 +555,8 @@ packages: resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} dev: true - /@types/node@20.6.2: - resolution: {integrity: sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==} + /@types/node@20.6.3: + resolution: {integrity: sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -574,7 +574,7 @@ packages: resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} dependencies: '@types/glob': 8.1.0 - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false optional: true @@ -586,7 +586,7 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.6.3 dev: false /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.2.2): @@ -1580,7 +1580,7 @@ packages: '@fastify/busboy': 1.2.1 '@firebase/database-compat': 0.3.4 '@firebase/database-types': 0.10.4 - '@types/node': 20.6.2 + '@types/node': 20.6.3 jsonwebtoken: 9.0.0 jwks-rsa: 3.0.1 node-forge: 1.3.1 @@ -2997,7 +2997,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.6.2 + '@types/node': 20.6.3 long: 5.2.2 dev: false optional: true @@ -3407,7 +3407,7 @@ packages: engines: {node: '>=8'} dev: true - /ts-node@10.9.1(@types/node@20.6.2)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.6.3)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -3426,7 +3426,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 20.6.2 + '@types/node': 20.6.3 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 diff --git a/src/lib/export.ts b/src/lib/export.ts index 904bfae..8b2a5e7 100644 --- a/src/lib/export.ts +++ b/src/lib/export.ts @@ -21,10 +21,11 @@ const exportData = async ( if (isRootOfDatabase(startingRef)) { dataPromise = () => Promise.resolve({}); } else { - dataPromise = () => (startingRef) - .get() - .then(snapshot => snapshot.data()) - .then(data => serializeSpecialTypes(data)); + dataPromise = () => + (startingRef) + .get() + .then(snapshot => snapshot.data()) + .then(data => serializeSpecialTypes(data)); } return await batchExecutor([collectionsPromise, dataPromise]).then(res => { return {__collections__: res[0], ...res[1]}; @@ -71,22 +72,25 @@ const getDocuments = async ( const allDocuments = await safelyGetDocumentReferences(collectionRef, logs); allDocuments.forEach(doc => { documentPromises.push( - () => new Promise(async resolve => { - const docSnapshot = await doc.get(); - const docDetails: any = {}; - if (docSnapshot.exists) { - docDetails[docSnapshot.id] = serializeSpecialTypes( - docSnapshot.data() + () => + new Promise(async resolve => { + const docSnapshot = await doc.get(); + const docDetails: any = {}; + if (docSnapshot.exists) { + docDetails[docSnapshot.id] = serializeSpecialTypes( + docSnapshot.data() + ); + } else { + docDetails[docSnapshot.id] = { + '_import-export-flag-doesnotexists_': true, + }; + } + docDetails[docSnapshot.id]['__collections__'] = await getCollections( + docSnapshot.ref, + logs ); - } else { - docDetails[docSnapshot.id] = {'_import-export-flag-doesnotexists_': true}; - } - docDetails[docSnapshot.id]['__collections__'] = await getCollections( - docSnapshot.ref, - logs - ); - resolve(docDetails); - }) + resolve(docDetails); + }) ); }); (await batchExecutor(documentPromises)).forEach((res: any) => { diff --git a/src/lib/firestore-helpers.ts b/src/lib/firestore-helpers.ts index 0d08e99..d7db2f6 100644 --- a/src/lib/firestore-helpers.ts +++ b/src/lib/firestore-helpers.ts @@ -56,7 +56,9 @@ const batchExecutor = async function ( ) { const res: T[] = []; while (promises.length > 0) { - const temp = await Promise.all(promises.splice(0, batchSize).map(fn => fn())); + const temp = await Promise.all( + promises.splice(0, batchSize).map(fn => fn()) + ); res.push(...temp); } return res; diff --git a/src/lib/import.ts b/src/lib/import.ts index ca89564..ffaba66 100644 --- a/src/lib/import.ts +++ b/src/lib/import.ts @@ -24,8 +24,8 @@ const importData = ( const collectionPromises: Array<() => Promise> = []; for (const collection in collections) { if (collections.hasOwnProperty(collection)) { - collectionPromises.push( - () => setDocuments( + collectionPromises.push(() => + setDocuments( collections[collection], startingRef.collection(collection), mergeWithExisting, @@ -86,7 +86,7 @@ const setDocuments = ( } const {__collections__, ...documents} = data[documentKey]; const documentData: any = unserializeSpecialTypes(documents); - if(!documentData['_import-export-flag-doesnotexists_']){ + if (!documentData['_import-export-flag-doesnotexists_']) { batch.set(startingRef.doc(documentKey), documentData, { merge: mergeWithExisting, }); @@ -97,7 +97,8 @@ const setDocuments = ( return batchExecutor(chunkPromises) .then(() => { return collections.map(col => { - return () => setDocuments(col.collection, col.path, mergeWithExisting, logs); + return () => + setDocuments(col.collection, col.path, mergeWithExisting, logs); }); }) .then(subCollectionPromises => batchExecutor(subCollectionPromises, 1)) diff --git a/tests/helpers.spec.ts b/tests/helpers.spec.ts index ce88ea9..150724b 100644 --- a/tests/helpers.spec.ts +++ b/tests/helpers.spec.ts @@ -72,12 +72,13 @@ describe('Helpers', () => { it('should have the final chunk size the same as the remainder of the chunk_size', () => { const startingArraySize = 100; - for(let chunkSize = 1; chunkSize <= startingArraySize; ++chunkSize){ + for (let chunkSize = 1; chunkSize <= startingArraySize; ++chunkSize) { let expectedRemainder = startingArraySize % chunkSize; const expectedLengthOfChunks = Math.floor(startingArraySize / chunkSize) + (expectedRemainder === 0 ? 0 : 1); - expectedRemainder = expectedRemainder === 0 ? chunkSize : expectedRemainder + expectedRemainder = + expectedRemainder === 0 ? chunkSize : expectedRemainder; const startingArray = new Array(startingArraySize).fill(null); const chunks = array_chunks(startingArray, chunkSize); expect(chunks).to.have.lengthOf(Math.floor(expectedLengthOfChunks)); @@ -85,7 +86,6 @@ describe('Helpers', () => { const lastItem = chunks.pop(); expect(lastItem).to.have.lengthOf(expectedRemainder); } - }); }); From ea2f595b13a5741f361278c6be4e8d37195abaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cu=CC=9Bo=CC=9Bng=20Nguye=CC=82=CC=83n?= Date: Sat, 12 Aug 2023 09:19:32 +0700 Subject: [PATCH 2/2] Change to @google-cloud/firestore --- package.json | 8 +- pnpm-lock.yaml | 554 ++--------------------------------- src/bin/firestore-clear.ts | 11 - src/bin/firestore-import.ts | 12 - src/lib/clear.ts | 6 +- src/lib/export.ts | 6 +- src/lib/firestore-helpers.ts | 27 +- src/lib/helpers.ts | 16 +- tests/helpers.spec.ts | 55 +--- 9 files changed, 59 insertions(+), 636 deletions(-) diff --git a/package.json b/package.json index 1835e29..775a8ed 100644 --- a/package.json +++ b/package.json @@ -35,20 +35,20 @@ "firestore-export": "./dist/bin/firestore-export.js" }, "engines": { - "node": ">=8.0" + "node": ">=16.0" }, "preferGlobal": true, "dependencies": { + "@google-cloud/firestore": "^6.7.0", "colors": "^1.4.0", "commander": "^11.0.0", - "enquirer": "^2.4.1", - "firebase-admin": "^11.10.1" + "enquirer": "^2.4.1" }, "devDependencies": { "@types/chai": "^4.3.6", "@types/color": "^3.0.4", "@types/mocha": "^10.0.1", - "@types/node": "^20.6.3", + "@types/node": "^20.6.5", "chai": "^4.3.8", "firebase-mock": "^2.3.2", "gts": "^5.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5675a2..573ac69 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@google-cloud/firestore': + specifier: ^6.7.0 + version: 6.7.0 colors: specifier: ^1.4.0 version: 1.4.0 @@ -14,9 +17,6 @@ dependencies: enquirer: specifier: ^2.4.1 version: 2.4.1 - firebase-admin: - specifier: ^11.10.1 - version: 11.10.1 devDependencies: '@types/chai': @@ -29,8 +29,8 @@ devDependencies: specifier: ^10.0.1 version: 10.0.1 '@types/node': - specifier: ^20.6.3 - version: 20.6.3 + specifier: ^20.6.5 + version: 20.6.5 chai: specifier: ^4.3.8 version: 4.3.8 @@ -45,7 +45,7 @@ devDependencies: version: 10.2.0 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.6.3)(typescript@5.2.2) + version: 10.9.1(@types/node@20.6.5)(typescript@5.2.2) typescript: specifier: ^5.2.2 version: 5.2.2 @@ -68,7 +68,6 @@ packages: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: false - optional: true /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} @@ -90,7 +89,6 @@ packages: dependencies: '@babel/types': 7.21.4 dev: false - optional: true /@babel/types@7.21.4: resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} @@ -100,7 +98,6 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 dev: false - optional: true /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -146,73 +143,9 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@fastify/busboy@1.2.1: - resolution: {integrity: sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==} - engines: {node: '>=14'} - dependencies: - text-decoding: 1.0.0 - dev: false - - /@firebase/app-types@0.9.0: - resolution: {integrity: sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==} - dev: false - - /@firebase/auth-interop-types@0.2.1: - resolution: {integrity: sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==} - dev: false - - /@firebase/component@0.6.4: - resolution: {integrity: sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA==} - dependencies: - '@firebase/util': 1.9.3 - tslib: 2.5.0 - dev: false - - /@firebase/database-compat@0.3.4: - resolution: {integrity: sha512-kuAW+l+sLMUKBThnvxvUZ+Q1ZrF/vFJ58iUY9kAcbX48U03nVzIF6Tmkf0p3WVQwMqiXguSgtOPIB6ZCeF+5Gg==} - dependencies: - '@firebase/component': 0.6.4 - '@firebase/database': 0.14.4 - '@firebase/database-types': 0.10.4 - '@firebase/logger': 0.4.0 - '@firebase/util': 1.9.3 - tslib: 2.5.0 - dev: false - - /@firebase/database-types@0.10.4: - resolution: {integrity: sha512-dPySn0vJ/89ZeBac70T+2tWWPiJXWbmRygYv0smT5TfE3hDrQ09eKMF3Y+vMlTdrMWq7mUdYW5REWPSGH4kAZQ==} - dependencies: - '@firebase/app-types': 0.9.0 - '@firebase/util': 1.9.3 - dev: false - - /@firebase/database@0.14.4: - resolution: {integrity: sha512-+Ea/IKGwh42jwdjCyzTmeZeLM3oy1h0mFPsTy6OqCWzcu/KFqRAr5Tt1HRCOBlNOdbh84JPZC47WLU18n2VbxQ==} - dependencies: - '@firebase/auth-interop-types': 0.2.1 - '@firebase/component': 0.6.4 - '@firebase/logger': 0.4.0 - '@firebase/util': 1.9.3 - faye-websocket: 0.11.4 - tslib: 2.5.0 - dev: false - - /@firebase/logger@0.4.0: - resolution: {integrity: sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==} - dependencies: - tslib: 2.5.0 - dev: false - - /@firebase/util@1.9.3: - resolution: {integrity: sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==} - dependencies: - tslib: 2.5.0 - dev: false - - /@google-cloud/firestore@6.6.1: - resolution: {integrity: sha512-Z41j2h0mrgBH9qNIVmbRLqGKc6XmdJtWipeKwdnGa/bPTP1gn2SGTrYyWnpfsLMEtzKSYieHPSkAFp5kduF2RA==} + /@google-cloud/firestore@6.7.0: + resolution: {integrity: sha512-bkH2jb5KkQSUa+NAvpip9HQ+rpYhi77IaqHovWuN07adVmvNXX08gPpvPWEzoXYa/wDjEVI7LiAtCWkJJEYTNg==} engines: {node: '>=12.0.0'} - requiresBuild: true dependencies: fast-deep-equal: 3.1.3 functional-red-black-tree: 1.0.1 @@ -222,65 +155,14 @@ packages: - encoding - supports-color dev: false - optional: true - - /@google-cloud/paginator@3.0.7: - resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==} - engines: {node: '>=10'} - dependencies: - arrify: 2.0.1 - extend: 3.0.2 - dev: false - optional: true - - /@google-cloud/projectify@3.0.0: - resolution: {integrity: sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==} - engines: {node: '>=12.0.0'} - dev: false - optional: true - - /@google-cloud/promisify@3.0.1: - resolution: {integrity: sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==} - engines: {node: '>=12'} - dev: false - optional: true - - /@google-cloud/storage@6.9.5: - resolution: {integrity: sha512-fcLsDA8YKcGuqvhk0XTjJGVpG9dzs5Em8IcUjSjspYvERuHYqMy9CMChWapSjv3Lyw//exa3mv4nUxPlV93BnA==} - engines: {node: '>=12'} - requiresBuild: true - dependencies: - '@google-cloud/paginator': 3.0.7 - '@google-cloud/projectify': 3.0.0 - '@google-cloud/promisify': 3.0.1 - abort-controller: 3.0.0 - async-retry: 1.3.3 - compressible: 2.0.18 - duplexify: 4.1.2 - ent: 2.2.0 - extend: 3.0.2 - gaxios: 5.1.0 - google-auth-library: 8.7.0 - mime: 3.0.0 - mime-types: 2.1.35 - p-limit: 3.1.0 - retry-request: 5.0.2 - teeny-request: 8.0.3 - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - optional: true /@grpc/grpc-js@1.8.14: resolution: {integrity: sha512-w84maJ6CKl5aApCMzFll0hxtFNT6or9WwMslobKaqWUEf1K+zhlL43bSQhFreyYWIWR+Z0xnVFC1KtLm4ZpM/A==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.6 - '@types/node': 20.6.3 + '@types/node': 20.6.5 dev: false - optional: true /@grpc/proto-loader@0.7.6: resolution: {integrity: sha512-QyAXR8Hyh7uMDmveWxDSUcJr9NAWaZ2I6IXgAYvQmfflwouTM+rArE2eEaCtLlRqO81j7pRLCt81IefUei6Zbw==} @@ -293,7 +175,6 @@ packages: protobufjs: 7.2.3 yargs: 16.2.0 dev: false - optional: true /@humanwhocodes/config-array@0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} @@ -337,7 +218,6 @@ packages: dependencies: lodash: 4.17.21 dev: false - optional: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -375,22 +255,18 @@ packages: /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} dev: false - optional: true /@protobufjs/base64@1.1.2: resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} dev: false - optional: true /@protobufjs/codegen@2.0.4: resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} dev: false - optional: true /@protobufjs/eventemitter@1.1.0: resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} dev: false - optional: true /@protobufjs/fetch@1.1.0: resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} @@ -398,38 +274,26 @@ packages: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 dev: false - optional: true /@protobufjs/float@1.0.2: resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} dev: false - optional: true /@protobufjs/inquire@1.1.0: resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} dev: false - optional: true /@protobufjs/path@1.1.2: resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} dev: false - optional: true /@protobufjs/pool@1.1.0: resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} dev: false - optional: true /@protobufjs/utf8@1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - optional: true - - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: false - optional: true /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} @@ -447,13 +311,6 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 20.6.3 - dev: false - /@types/chai@4.3.6: resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} dev: true @@ -474,56 +331,24 @@ packages: '@types/color-convert': 2.0.0 dev: true - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - dependencies: - '@types/node': 20.6.3 - dev: false - - /@types/express-serve-static-core@4.17.33: - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} - dependencies: - '@types/node': 20.6.3 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: false - - /@types/express@4.17.17: - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.33 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 - dev: false - /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.6.3 + '@types/node': 20.6.5 dev: false - optional: true /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/jsonwebtoken@9.0.1: - resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} - dependencies: - '@types/node': 20.6.3 - dev: false - /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} dev: false - optional: true /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} dev: false - optional: true /@types/markdown-it@12.2.3: resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} @@ -531,21 +356,14 @@ packages: '@types/linkify-it': 3.0.2 '@types/mdurl': 1.0.2 dev: false - optional: true /@types/mdurl@1.0.2: resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} dev: false - optional: true - - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - dev: false /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: false - optional: true /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} @@ -555,40 +373,24 @@ packages: resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} dev: true - /@types/node@20.6.3: - resolution: {integrity: sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==} + /@types/node@20.6.5: + resolution: {integrity: sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: false - - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: false - /@types/rimraf@3.0.2: resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} dependencies: '@types/glob': 8.1.0 - '@types/node': 20.6.3 + '@types/node': 20.6.5 dev: false - optional: true /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@types/serve-static@1.15.1: - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} - dependencies: - '@types/mime': 3.0.1 - '@types/node': 20.6.3 - dev: false - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.2.2): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -725,7 +527,6 @@ packages: dependencies: event-target-shim: 5.0.1 dev: false - optional: true /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -733,16 +534,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.10.0 - dev: true - - /acorn-jsx@5.3.2(acorn@8.8.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.8.2 - dev: false - optional: true /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -753,12 +544,12 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -768,7 +559,6 @@ packages: transitivePeerDependencies: - supports-color dev: false - optional: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -842,26 +632,17 @@ packages: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} dev: false - optional: true /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - dependencies: - retry: 0.13.1 - dev: false - optional: true - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false - optional: true /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} @@ -871,7 +652,6 @@ packages: /bignumber.js@9.1.1: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: false - optional: true /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -881,7 +661,6 @@ packages: /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: false - optional: true /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} @@ -953,7 +732,6 @@ packages: dependencies: lodash: 4.17.21 dev: false - optional: true /chai@4.3.8: resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==} @@ -1055,14 +833,6 @@ packages: engines: {node: '>=16'} dev: false - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - optional: true - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1174,7 +944,6 @@ packages: readable-stream: 3.6.2 stream-shift: 1.0.1 dev: false - optional: true /ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -1190,7 +959,6 @@ packages: dependencies: once: 1.4.0 dev: false - optional: true /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} @@ -1200,15 +968,9 @@ packages: strip-ansi: 6.0.1 dev: false - /ent@2.2.0: - resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} - dev: false - optional: true - /entities@2.1.0: resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} dev: false - optional: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1229,7 +991,6 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: false - optional: true /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} @@ -1248,7 +1009,6 @@ packages: optionalDependencies: source-map: 0.6.1 dev: false - optional: true /eslint-config-prettier@8.8.0(eslint@8.45.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} @@ -1334,16 +1094,9 @@ packages: engines: {node: '>=4'} dev: true - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - optional: true - /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /eslint@8.45.0: resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==} @@ -1391,16 +1144,6 @@ packages: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.0 - dev: false - optional: true - /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1408,14 +1151,12 @@ packages: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: false - optional: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -1447,7 +1188,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} dev: false - optional: true /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -1482,7 +1222,6 @@ packages: /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: false - optional: true /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -1521,7 +1260,6 @@ packages: /fast-text-encoding@1.0.6: resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} dev: false - optional: true /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -1529,13 +1267,6 @@ packages: reusify: 1.0.4 dev: true - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -1573,26 +1304,6 @@ packages: path-exists: 4.0.0 dev: true - /firebase-admin@11.10.1: - resolution: {integrity: sha512-atv1E6GbuvcvWaD3eHwrjeP5dAVs+EaHEJhu9CThMzPY6In8QYDiUR6tq5SwGl4SdA/GcAU0nhwWc/FSJsAzfQ==} - engines: {node: '>=14'} - dependencies: - '@fastify/busboy': 1.2.1 - '@firebase/database-compat': 0.3.4 - '@firebase/database-types': 0.10.4 - '@types/node': 20.6.3 - jsonwebtoken: 9.0.0 - jwks-rsa: 3.0.1 - node-forge: 1.3.1 - uuid: 9.0.0 - optionalDependencies: - '@google-cloud/firestore': 6.6.1 - '@google-cloud/storage': 6.9.5 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - /firebase-auto-ids@1.1.0: resolution: {integrity: sha512-q35BzhEDEO7iuvgV/5ou7nZhTbhOTG3Oau/pn6K/U1Ua76HtuJE5tH+0Op8a4B+c8nl6Q80rGwQhLvYbQvOxGQ==} dev: true @@ -1675,7 +1386,6 @@ packages: /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: false - optional: true /gaxios@5.1.0: resolution: {integrity: sha512-aezGIjb+/VfsJtIcHGcBSerNEDdfdHeMros+RbYbGpmonKWQCOVOes0LVZhn1lDtIgq55qq0HaxymIoae3Fl/A==} @@ -1689,7 +1399,6 @@ packages: - encoding - supports-color dev: false - optional: true /gcp-metadata@5.2.0: resolution: {integrity: sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==} @@ -1701,7 +1410,6 @@ packages: - encoding - supports-color dev: false - optional: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} @@ -1761,7 +1469,6 @@ packages: minimatch: 5.1.6 once: 1.4.0 dev: false - optional: true /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} @@ -1799,7 +1506,6 @@ packages: - encoding - supports-color dev: false - optional: true /google-gax@3.6.0: resolution: {integrity: sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw==} @@ -1825,7 +1531,6 @@ packages: - encoding - supports-color dev: false - optional: true /google-p12-pem@4.0.1: resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} @@ -1834,12 +1539,10 @@ packages: dependencies: node-forge: 1.3.1 dev: false - optional: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: false - optional: true /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1856,7 +1559,6 @@ packages: - encoding - supports-color dev: false - optional: true /gts@5.0.1(typescript@5.2.2): resolution: {integrity: sha512-wanVTOI5CRVHQRwn2Fpux4IUUF6f6E3WbhfR+k9PB/hGS8OsmSjo2z0gy6kgsXwqjPqKEhC2w/9jIl/VP7NXCQ==} @@ -1923,22 +1625,6 @@ packages: lru-cache: 6.0.0 dev: true - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: false - - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: false - optional: true - /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -1948,7 +1634,6 @@ packages: transitivePeerDependencies: - supports-color dev: false - optional: true /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -2094,7 +1779,6 @@ packages: /is-stream-ended@0.1.4: resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} dev: false - optional: true /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -2121,10 +1805,6 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /jose@4.14.0: - resolution: {integrity: sha512-LSA/XenLPwqk6e2L+PSUNuuY9G4NGsvjRWz6sJcUBmzTLEPJqQh46FHSUxnAQ64AWOkRO6bSXpy3yXuEKZkbIA==} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -2141,7 +1821,6 @@ packages: dependencies: xmlcreate: 2.0.4 dev: false - optional: true /jsdoc@4.0.2: resolution: {integrity: sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==} @@ -2164,14 +1843,12 @@ packages: strip-json-comments: 3.1.1 underscore: 1.13.6 dev: false - optional: true /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: bignumber.js: 9.1.1 dev: false - optional: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -2191,24 +1868,6 @@ packages: hasBin: true dev: true - /jsonwebtoken@9.0.0: - resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} - engines: {node: '>=12', npm: '>=6'} - dependencies: - jws: 3.2.2 - lodash: 4.17.21 - ms: 2.1.3 - semver: 7.4.0 - dev: false - - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false - /jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} dependencies: @@ -2216,28 +1875,6 @@ packages: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 dev: false - optional: true - - /jwks-rsa@3.0.1: - resolution: {integrity: sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==} - engines: {node: '>=14'} - dependencies: - '@types/express': 4.17.17 - '@types/jsonwebtoken': 9.0.1 - debug: 4.3.4(supports-color@8.1.1) - jose: 4.14.0 - limiter: 1.1.5 - lru-memoizer: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: false - - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - dev: false /jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} @@ -2245,7 +1882,6 @@ packages: jwa: 2.0.0 safe-buffer: 5.2.1 dev: false - optional: true /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -2257,7 +1893,6 @@ packages: dependencies: graceful-fs: 4.2.11 dev: false - optional: true /levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} @@ -2266,7 +1901,6 @@ packages: prelude-ls: 1.1.2 type-check: 0.3.2 dev: false - optional: true /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -2276,10 +1910,6 @@ packages: type-check: 0.4.0 dev: true - /limiter@1.1.5: - resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - dev: false - /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -2289,7 +1919,6 @@ packages: dependencies: uc.micro: 1.0.6 dev: false - optional: true /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} @@ -2320,7 +1949,6 @@ packages: /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false - optional: true /lodash.clone@4.5.0: resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==} @@ -2328,6 +1956,7 @@ packages: /lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: true /lodash.clonedeepwith@4.5.0: resolution: {integrity: sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==} @@ -2467,12 +2096,10 @@ packages: /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false - optional: true /long@5.2.2: resolution: {integrity: sha512-FcRNYR7XWu4a9dHZfBTTpRy66IJgAg1dkRSQHQfrLKbTi8I7Awop0fUNqvcWPOSwu0/VX0CSDWlCcQz1LFUdoA==} dev: false - optional: true /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} @@ -2480,26 +2107,12 @@ packages: get-func-name: 2.0.0 dev: true - /lru-cache@4.0.2: - resolution: {integrity: sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: false - /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - /lru-memoizer@2.2.0: - resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==} - dependencies: - lodash.clonedeep: 4.5.0 - lru-cache: 4.0.2 - dev: false - /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -2523,7 +2136,6 @@ packages: '@types/markdown-it': 12.2.3 markdown-it: 12.3.2 dev: false - optional: true /markdown-it@12.3.2: resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} @@ -2535,19 +2147,16 @@ packages: mdurl: 1.0.1 uc.micro: 1.0.6 dev: false - optional: true /marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} hasBin: true dev: false - optional: true /mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: false - optional: true /meow@9.0.0: resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} @@ -2584,27 +2193,6 @@ packages: picomatch: 2.3.1 dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - optional: true - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - optional: true - - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: false - optional: true - /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -2638,7 +2226,6 @@ packages: dependencies: brace-expansion: 2.0.1 dev: false - optional: true /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} @@ -2652,14 +2239,12 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false - optional: true /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true dev: false - optional: true /mocha@10.2.0: resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} @@ -2694,6 +2279,7 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -2729,7 +2315,6 @@ packages: dependencies: whatwg-url: 5.0.0 dev: false - optional: true /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} @@ -2778,7 +2363,6 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} dev: false - optional: true /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2820,7 +2404,6 @@ packages: type-check: 0.3.2 word-wrap: 1.2.3 dev: false - optional: true /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -2851,6 +2434,7 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} @@ -2933,7 +2517,6 @@ packages: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: false - optional: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2959,7 +2542,6 @@ packages: dependencies: protobufjs: 7.2.3 dev: false - optional: true /protobufjs-cli@1.1.1(protobufjs@7.2.3): resolution: {integrity: sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==} @@ -2970,7 +2552,7 @@ packages: dependencies: chalk: 4.1.2 escodegen: 1.14.3 - espree: 9.5.1 + espree: 9.6.1 estraverse: 5.3.0 glob: 8.1.0 jsdoc: 4.0.2 @@ -2980,7 +2562,6 @@ packages: tmp: 0.2.1 uglify-js: 3.17.4 dev: false - optional: true /protobufjs@7.2.3: resolution: {integrity: sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==} @@ -2997,14 +2578,9 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.6.3 + '@types/node': 20.6.5 long: 5.2.2 dev: false - optional: true - - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: false /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} @@ -3053,7 +2629,6 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: false - optional: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -3084,7 +2659,6 @@ packages: dependencies: lodash: 4.17.21 dev: false - optional: true /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -3117,13 +2691,6 @@ packages: transitivePeerDependencies: - supports-color dev: false - optional: true - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - optional: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -3246,17 +2813,9 @@ packages: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true - /stream-events@1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - dependencies: - stubs: 3.0.0 - dev: false - optional: true - /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: false - optional: true /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -3271,7 +2830,6 @@ packages: dependencies: safe-buffer: 5.2.1 dev: false - optional: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -3300,11 +2858,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stubs@3.0.0: - resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - dev: false - optional: true - /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -3337,25 +2890,6 @@ packages: tslib: 2.6.1 dev: true - /teeny-request@8.0.3: - resolution: {integrity: sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==} - engines: {node: '>=12'} - dependencies: - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - node-fetch: 2.6.9 - stream-events: 1.0.5 - uuid: 9.0.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - optional: true - - /text-decoding@1.0.0: - resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==} - dev: false - /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -3382,13 +2916,11 @@ packages: dependencies: rimraf: 3.0.2 dev: false - optional: true /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} dev: false - optional: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -3400,14 +2932,13 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false - optional: true /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /ts-node@10.9.1(@types/node@20.6.3)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.6.5)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -3426,7 +2957,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 20.6.3 + '@types/node': 20.6.5 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -3442,10 +2973,6 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - dev: false - /tslib@2.6.1: resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} dev: true @@ -3466,7 +2993,6 @@ packages: dependencies: prelude-ls: 1.1.2 dev: false - optional: true /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -3514,19 +3040,16 @@ packages: /uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: false - optional: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true dev: false - optional: true /underscore@1.13.6: resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} dev: false - optional: true /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -3542,18 +3065,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - optional: true - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - optional: true - - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true - dev: false /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -3569,21 +3080,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false - optional: true - - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -3591,7 +3087,6 @@ packages: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: false - optional: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -3605,7 +3100,6 @@ packages: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: false - optional: true /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} @@ -3633,16 +3127,11 @@ packages: /xmlcreate@2.0.4: resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==} dev: false - optional: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: false - /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -3685,3 +3174,4 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true diff --git a/src/bin/firestore-clear.ts b/src/bin/firestore-clear.ts index 3e81508..24d474e 100755 --- a/src/bin/firestore-clear.ts +++ b/src/bin/firestore-clear.ts @@ -2,7 +2,6 @@ import {Command} from 'commander'; import colors from 'colors'; import process from 'process'; -import * as admin from 'firebase-admin'; import { getDBReferenceFromPath, getFirestoreDBReference, @@ -33,16 +32,6 @@ const noWait = commander.opts()[params.yesToNoWait.key]; (async () => { const db = getFirestoreDBReference(); const pathReference = getDBReferenceFromPath(db, nodePath); - const nodeLocation = - (< - | FirebaseFirestore.DocumentReference - | FirebaseFirestore.CollectionReference - >pathReference).path || '[database root]'; - const projectID = - process.env.FIRESTORE_EMULATOR_HOST || - (admin.apps[0]?.options.credential as any).projectId; - const deleteText = `About to clear all data from '${projectID}' firestore starting at '${nodeLocation}'.`; - console.log(`\n\n${colors.bold(colors.blue(deleteText))}`); if (!unattendedConfirmation) { console.log( colors.bgYellow( diff --git a/src/bin/firestore-import.ts b/src/bin/firestore-import.ts index 215fea9..7154eec 100755 --- a/src/bin/firestore-import.ts +++ b/src/bin/firestore-import.ts @@ -3,7 +3,6 @@ import {Command} from 'commander'; import {prompt} from 'enquirer'; import colors from 'colors'; import process from 'process'; -import * as admin from 'firebase-admin'; import fs from 'fs'; import {firestoreImport} from '../lib'; import { @@ -57,17 +56,6 @@ const unattendedConfirmation = commander.opts()[params.yesToImport.key]; const str = new TextDecoder().decode(buffer); const data = JSON.parse(str); if (!unattendedConfirmation) { - const nodeLocation = - (< - | FirebaseFirestore.DocumentReference - | FirebaseFirestore.CollectionReference - >pathReference).path || '[database root]'; - const projectID = - process.env.FIRESTORE_EMULATOR_HOST || - (admin.apps[0]?.options.credential as any).projectId; - const importText = `About to import data '${backupFile}' to the '${projectID}' firestore at '${nodeLocation}'.`; - - console.log(`\n\n${colors.bold(colors.blue(importText))}`); console.log( colors.bgYellow( colors.blue( diff --git a/src/lib/clear.ts b/src/lib/clear.ts index c9ce3cc..0363250 100644 --- a/src/lib/clear.ts +++ b/src/lib/clear.ts @@ -5,12 +5,12 @@ import { safelyGetCollectionsSnapshot, safelyGetDocumentReferences, } from './firestore-helpers'; -import * as admin from 'firebase-admin'; import DocumentReference = FirebaseFirestore.DocumentReference; +import {Firestore} from '@google-cloud/firestore'; const clearData = async ( startingRef: - | admin.firestore.Firestore + | Firestore | FirebaseFirestore.DocumentReference | FirebaseFirestore.CollectionReference, logs = false @@ -30,7 +30,7 @@ const clearData = async ( }; const clearCollections = async ( - startingRef: admin.firestore.Firestore | FirebaseFirestore.DocumentReference, + startingRef: Firestore | FirebaseFirestore.DocumentReference, logs = false ) => { const collectionPromises: Array<() => Promise> = []; diff --git a/src/lib/export.ts b/src/lib/export.ts index 8b2a5e7..aeaa01d 100644 --- a/src/lib/export.ts +++ b/src/lib/export.ts @@ -1,3 +1,4 @@ +import {Firestore} from '@google-cloud/firestore'; import { batchExecutor, isLikeDocument, @@ -5,12 +6,11 @@ import { safelyGetCollectionsSnapshot, safelyGetDocumentReferences, } from './firestore-helpers'; -import * as admin from 'firebase-admin'; import {serializeSpecialTypes} from './helpers'; const exportData = async ( startingRef: - | admin.firestore.Firestore + | Firestore | FirebaseFirestore.DocumentReference | FirebaseFirestore.CollectionReference, logs = false @@ -39,7 +39,7 @@ const exportData = async ( }; const getCollections = async ( - startingRef: admin.firestore.Firestore | FirebaseFirestore.DocumentReference, + startingRef: Firestore | FirebaseFirestore.DocumentReference, logs = false ) => { const collectionNames: Array = []; diff --git a/src/lib/firestore-helpers.ts b/src/lib/firestore-helpers.ts index d7db2f6..21a63aa 100644 --- a/src/lib/firestore-helpers.ts +++ b/src/lib/firestore-helpers.ts @@ -1,21 +1,16 @@ -import * as admin from 'firebase-admin'; -import {applicationDefault} from 'firebase-admin/app'; +import {Firestore} from '@google-cloud/firestore'; const SLEEP_TIME = 1000; -const getFirestoreDBReference = (): admin.firestore.Firestore => { - admin.initializeApp({ - credential: applicationDefault(), - }); - - return admin.firestore(); +const getFirestoreDBReference = (): Firestore => { + return new Firestore(); }; const getDBReferenceFromPath = ( - db: admin.firestore.Firestore, + db: Firestore, dataPath?: string ): - | admin.firestore.Firestore + | Firestore | FirebaseFirestore.DocumentReference | FirebaseFirestore.CollectionReference => { let startingRef; @@ -31,7 +26,7 @@ const getDBReferenceFromPath = ( const isLikeDocument = ( ref: - | admin.firestore.Firestore + | Firestore | FirebaseFirestore.DocumentReference | FirebaseFirestore.CollectionReference ): ref is FirebaseFirestore.DocumentReference => { @@ -40,11 +35,11 @@ const isLikeDocument = ( const isRootOfDatabase = ( ref: - | admin.firestore.Firestore + | Firestore | FirebaseFirestore.DocumentReference | FirebaseFirestore.CollectionReference -): ref is admin.firestore.Firestore => { - return (ref).batch !== undefined; +): ref is Firestore => { + return (ref).batch !== undefined; }; const sleep = (timeInMS: number): Promise => @@ -65,7 +60,7 @@ const batchExecutor = async function ( }; const safelyGetCollectionsSnapshot = async ( - startingRef: admin.firestore.Firestore | FirebaseFirestore.DocumentReference, + startingRef: Firestore | FirebaseFirestore.DocumentReference, logs = false ): Promise => { let collectionsSnapshot, @@ -121,7 +116,7 @@ const safelyGetDocumentReferences = async ( }; type anyFirebaseRef = - | admin.firestore.Firestore + | Firestore | FirebaseFirestore.DocumentReference | FirebaseFirestore.CollectionReference; diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index b7fa195..2d1617d 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -1,9 +1,9 @@ -import * as admin from 'firebase-admin'; import {ITimestamp} from '../interfaces/ITimestamp'; import {IGeopoint} from '../interfaces/IGeopoint'; import {IDocumentReference} from '../interfaces/IDocumentReference'; -import DocumentReference = admin.firestore.DocumentReference; -import GeoPoint = admin.firestore.GeoPoint; +import firestore = require('@google-cloud/firestore'); +import {DocumentReference, GeoPoint} from '@google-cloud/firestore'; +import {getFirestoreDBReference} from './firestore-helpers'; // From https://stackoverflow.com/questions/8495687/split-array-into-chunks const array_chunks = ( @@ -20,7 +20,7 @@ const serializeSpecialTypes = (data: any) => { const cleaned: any = {}; Object.keys(data).map(key => { let rawValue = data[key]; - if (rawValue instanceof admin.firestore.Timestamp) { + if (rawValue instanceof firestore.Timestamp) { rawValue = { __datatype__: 'timestamp', value: { @@ -66,9 +66,9 @@ const unserializeSpecialTypes = (data: any): any => { rawValue = rawValue as ITimestamp; if (rawValue.value instanceof String) { const millis = Date.parse(rawValue.value); - rawValue = new admin.firestore.Timestamp(millis / 1000, 0); + rawValue = new firestore.Timestamp(millis / 1000, 0); } else { - rawValue = new admin.firestore.Timestamp( + rawValue = new firestore.Timestamp( rawValue.value._seconds, rawValue.value._nanoseconds ); @@ -76,14 +76,14 @@ const unserializeSpecialTypes = (data: any): any => { break; case 'geopoint': rawValue = rawValue as IGeopoint; - rawValue = new admin.firestore.GeoPoint( + rawValue = new firestore.GeoPoint( rawValue.value._latitude, rawValue.value._longitude ); break; case 'documentReference': rawValue = rawValue as IDocumentReference; - rawValue = admin.firestore().doc(rawValue.value); + rawValue = getFirestoreDBReference().doc(rawValue.value); break; } } else { diff --git a/tests/helpers.spec.ts b/tests/helpers.spec.ts index 150724b..97b6a74 100644 --- a/tests/helpers.spec.ts +++ b/tests/helpers.spec.ts @@ -1,3 +1,4 @@ +import firestore from '@google-cloud/firestore'; import { array_chunks, serializeSpecialTypes, @@ -5,62 +6,23 @@ import { } from '../src/lib/helpers'; import {expect} from 'chai'; import 'mocha'; -import * as admin from 'firebase-admin'; const special = { object: { name: 'object', - timestamp: new admin.firestore.Timestamp(1541579025, 0), + timestamp: new firestore.Timestamp(1541579025, 0), }, array: { 0: 1, 1: new Date(), }, - timestamp: new admin.firestore.Timestamp(1541579025, 0), - geopoint: new admin.firestore.GeoPoint(12.3433, -111.324), + timestamp: new firestore.Timestamp(1541579025, 0), + geopoint: new firestore.GeoPoint(12.3433, -111.324), number: 234234.234, }; const sampleExportedDoc = require('./sampleExportedDoc.json'); -const serialized = { - object: { - name: 'object', - timestamp: { - __datatype__: 'timestamp', - value: { - _seconds: 1541579025, - _nanoseconds: 0, - }, - }, - }, - array: { - '0': 1, - '1': { - __datatype__: 'timestamp', - value: { - _seconds: 1541579025, - _nanoseconds: 0, - }, - }, - }, - timestamp: { - __datatype__: 'timestamp', - value: { - _seconds: 1541579025, - _nanoseconds: 0, - }, - }, - geopoint: { - __datatype__: 'geopoint', - value: { - _latitude: 12.3433, - _longitude: -111.324, - }, - }, - number: 234234.234, -}; - describe('Helpers', () => { describe('array_chunks', () => { it('should break up an array into the right amount of chunks', () => { @@ -106,19 +68,18 @@ describe('Helpers', () => { }); describe('unserializeSpecialTypes', () => { - admin.initializeApp(); const results = unserializeSpecialTypes(sampleExportedDoc); expect(results.sampleExportedDoc.timestamp).to.be.an.instanceof( - admin.firestore.Timestamp + firestore.Timestamp ); expect(results.sampleExportedDoc.geopoint).to.be.an.instanceof( - admin.firestore.GeoPoint + firestore.GeoPoint ); expect(results.sampleExportedDoc.documentRef).to.be.an.instanceof( - admin.firestore.DocumentReference + firestore.DocumentReference ); expect(results.sampleExportedDoc.documentRef).to.be.an.instanceof( - admin.firestore.DocumentReference + firestore.DocumentReference ); }); });