From 44395bdeac77bedef6cb7c48b5583b92d09acd92 Mon Sep 17 00:00:00 2001 From: Hezekiah Hendry Date: Thu, 29 Jun 2023 22:55:27 -0400 Subject: [PATCH 01/19] fix(JSONProvider): `Method.Random[Key]` behaviour --- packages/json/src/lib/JSONProvider.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/json/src/lib/JSONProvider.ts b/packages/json/src/lib/JSONProvider.ts index 690a483c..3e30eba5 100644 --- a/packages/json/src/lib/JSONProvider.ts +++ b/packages/json/src/lib/JSONProvider.ts @@ -553,13 +553,16 @@ export class JSONProvider extends JoshProvider Date: Thu, 29 Jun 2023 22:56:17 -0400 Subject: [PATCH 02/19] fix(MapProvider): `Method.Random[Key]` behaviour --- packages/map/src/lib/MapProvider.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/map/src/lib/MapProvider.ts b/packages/map/src/lib/MapProvider.ts index 722a89a4..bd1378d6 100644 --- a/packages/map/src/lib/MapProvider.ts +++ b/packages/map/src/lib/MapProvider.ts @@ -488,16 +488,20 @@ export class MapProvider extends JoshProvider): Payload.Random { - if (this.cache.size === 0) return { ...payload, data: [] }; - const { count, duplicates } = payload; - if (this.cache.size < count) { + if (!duplicates && this.cache.size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random })); return payload; } + if (this.cache.size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random, context: { duplicates, count } })); + + return payload; + } + payload.data = []; const keys = Array.from(this.cache.keys()); From 906db5e6829c948178a3a3bb341d294fa1639dac Mon Sep 17 00:00:00 2001 From: Hezekiah Hendry Date: Thu, 29 Jun 2023 22:57:40 -0400 Subject: [PATCH 03/19] fix(MariaProvider): `Method.Random[Key]` behaviour --- packages/maria/src/lib/MariaProvider.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/maria/src/lib/MariaProvider.ts b/packages/maria/src/lib/MariaProvider.ts index 86ba1a1e..79b572e3 100644 --- a/packages/maria/src/lib/MariaProvider.ts +++ b/packages/maria/src/lib/MariaProvider.ts @@ -520,13 +520,18 @@ export class MariaProvider extends JoshProvider Date: Thu, 29 Jun 2023 22:58:28 -0400 Subject: [PATCH 04/19] fix(PostgreSQLProvider): `Method.Random[Key]` behaviour --- packages/postgresql/src/lib/PostgreSQLProvider.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/postgresql/src/lib/PostgreSQLProvider.ts b/packages/postgresql/src/lib/PostgreSQLProvider.ts index 80aca79f..e929eca6 100644 --- a/packages/postgresql/src/lib/PostgreSQLProvider.ts +++ b/packages/postgresql/src/lib/PostgreSQLProvider.ts @@ -509,13 +509,18 @@ export class PostgreSQLProvider extends JoshProvider Date: Thu, 29 Jun 2023 23:00:16 -0400 Subject: [PATCH 05/19] fix(SQLiteProvider): `Method.Random[Key]` behaviour --- packages/sqlite/src/lib/SQLiteProvider.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/sqlite/src/lib/SQLiteProvider.ts b/packages/sqlite/src/lib/SQLiteProvider.ts index 18fab048..aca185f4 100644 --- a/packages/sqlite/src/lib/SQLiteProvider.ts +++ b/packages/sqlite/src/lib/SQLiteProvider.ts @@ -572,13 +572,16 @@ export class SQLiteProvider extends JoshProvider Date: Fri, 30 Jun 2023 22:18:37 -0600 Subject: [PATCH 06/19] fix: duplicates > unique Except mongo dan fix your stuff --- .../src/lib/constants/benchmark-tests.ts | 12 ++-- packages/json/src/lib/JSONProvider.ts | 39 +++++++------ packages/map/src/lib/MapProvider.ts | 38 +++++++------ packages/maria/src/lib/MariaProvider.ts | 37 +++++++------ packages/mongo/src/lib/MongoProvider.ts | 6 ++ .../postgresql/src/lib/PostgreSQLProvider.ts | 35 +++++++----- packages/redis/src/lib/RedisProvider.ts | 55 +++++++++++++++---- packages/sqlite/src/lib/SQLiteProvider.ts | 39 +++++++------ 8 files changed, 164 insertions(+), 97 deletions(-) diff --git a/benchmarks/src/lib/constants/benchmark-tests.ts b/benchmarks/src/lib/constants/benchmark-tests.ts index 3bc44463..8d042a61 100644 --- a/benchmarks/src/lib/constants/benchmark-tests.ts +++ b/benchmarks/src/lib/constants/benchmark-tests.ts @@ -390,7 +390,7 @@ export const BENCHMARK_TESTS: Benchmark.Test[] = [ } }, { - name: `${Method.Random} (Duplicates)`, + name: `${Method.Random} (Unique)`, beforeAll: async ({ provider, entries }) => { await provider[Method.SetMany]({ @@ -402,7 +402,7 @@ export const BENCHMARK_TESTS: Benchmark.Test[] = [ }, run: async ({ provider }) => { - await provider[Method.Random]({ method: Method.Random, errors: [], count: 5, duplicates: true }); + await provider[Method.Random]({ method: Method.Random, errors: [], count: 5, unique: true }); } }, { @@ -418,11 +418,11 @@ export const BENCHMARK_TESTS: Benchmark.Test[] = [ }, run: async ({ provider }) => { - await provider[Method.Random]({ method: Method.Random, errors: [], count: 5, duplicates: false }); + await provider[Method.Random]({ method: Method.Random, errors: [], count: 5, unique: false }); } }, { - name: `${Method.RandomKey} (Duplicates)`, + name: `${Method.RandomKey} (Unique)`, beforeAll: async ({ provider, entries }) => { await provider[Method.SetMany]({ @@ -434,7 +434,7 @@ export const BENCHMARK_TESTS: Benchmark.Test[] = [ }, run: async ({ provider }) => { - await provider[Method.RandomKey]({ method: Method.RandomKey, errors: [], count: 5, duplicates: true }); + await provider[Method.RandomKey]({ method: Method.RandomKey, errors: [], count: 5, unique: true }); } }, { @@ -450,7 +450,7 @@ export const BENCHMARK_TESTS: Benchmark.Test[] = [ }, run: async ({ provider }) => { - await provider[Method.RandomKey]({ method: Method.RandomKey, errors: [], count: 5, duplicates: false }); + await provider[Method.RandomKey]({ method: Method.RandomKey, errors: [], count: 5, unique: false }); } }, { diff --git a/packages/json/src/lib/JSONProvider.ts b/packages/json/src/lib/JSONProvider.ts index 3e30eba5..fc290f05 100644 --- a/packages/json/src/lib/JSONProvider.ts +++ b/packages/json/src/lib/JSONProvider.ts @@ -550,63 +550,70 @@ export class JSONProvider extends JoshProvider): Promise> { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = await this.handler.size(); - if (!duplicates && size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random }, { size })); return payload; } if (size === 0) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random }, { duplicates, count })); + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random }, { unique, count })); + + return payload; } payload.data = []; const keys = await this.handler.keys(); - if (duplicates) { - while (payload.data.length < count) { - const key = keys[Math.floor(Math.random() * size)]; - - payload.data.push((await this.handler.get(key))!); - } - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push((await this.handler.get(key))!); + } else { + while (payload.data.length < count) { + const key = keys[Math.floor(Math.random() * size)]; + + payload.data.push((await this.handler.get(key))!); + } } return payload; } public async [Method.RandomKey](payload: Payload.RandomKey): Promise { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = await this.handler.size(); - if (size === 0) return { ...payload, data: [] }; - if (size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey }, { size })); return payload; } + if (size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.RandomKey }, { size })); + + return payload; + } + payload.data = []; const keys = await this.handler.keys(); - if (duplicates) { - while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(key); + } else { + while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); } return payload; diff --git a/packages/map/src/lib/MapProvider.ts b/packages/map/src/lib/MapProvider.ts index bd1378d6..56fd215c 100644 --- a/packages/map/src/lib/MapProvider.ts +++ b/packages/map/src/lib/MapProvider.ts @@ -488,16 +488,16 @@ export class MapProvider extends JoshProvider): Payload.Random { - const { count, duplicates } = payload; + const { count, unique } = payload; - if (!duplicates && this.cache.size < count) { + if (unique && this.cache.size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random })); return payload; } if (this.cache.size === 0) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random, context: { duplicates, count } })); + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random, context: { unique, count } })); return payload; } @@ -506,46 +506,50 @@ export class MapProvider extends JoshProvider(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(this.cache.get(key)!); + } else { + while (payload.data.length < count) { + const key = keys[Math.floor(Math.random() * keys.length)]; + + payload.data.push(this.cache.get(key)!); + } } return payload; } public [Method.RandomKey](payload: Payload.RandomKey): Payload.RandomKey { - if (this.cache.size === 0) return { ...payload, data: [] }; - - const { count, duplicates } = payload; + const { count, unique } = payload; - if (this.cache.size < count) { + if (unique && this.cache.size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey })); return payload; } + if (this.cache.size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.RandomKey })); + + return payload; + } + payload.data = []; const keys = Array.from(this.cache.keys()); - if (duplicates) { - while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * keys.length)]); - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(key); + } else { + while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * keys.length)]); } return payload; diff --git a/packages/maria/src/lib/MariaProvider.ts b/packages/maria/src/lib/MariaProvider.ts index 79b572e3..89c6a9a1 100644 --- a/packages/maria/src/lib/MariaProvider.ts +++ b/packages/maria/src/lib/MariaProvider.ts @@ -517,17 +517,17 @@ export class MariaProvider extends JoshProvider): Promise> { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = await this.handler.size(); - if (size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random })); return payload; } if (size === 0) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random, context: { duplicates, count } })); + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random, context: { unique, count } })); return payload; } @@ -536,46 +536,51 @@ export class MariaProvider extends JoshProvider(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push((await this.handler.get(key))!); + } else { + while (payload.data.length < count) { + const key = keys[Math.floor(Math.random() * size)]; + + payload.data.push((await this.handler.get(key))!); + } } return payload; } public async [Method.RandomKey](payload: Payload.RandomKey): Promise { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = await this.handler.size(); - if (size === 0) return { ...payload, data: [] }; - if (size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey })); return payload; } + if (size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.RandomKey })); + + return payload; + } + payload.data = []; const keys = await this.handler.keys(); - if (duplicates) { - while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(key); + } else { + while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); } return payload; diff --git a/packages/mongo/src/lib/MongoProvider.ts b/packages/mongo/src/lib/MongoProvider.ts index 147c3e9a..4135a366 100644 --- a/packages/mongo/src/lib/MongoProvider.ts +++ b/packages/mongo/src/lib/MongoProvider.ts @@ -601,6 +601,12 @@ export class MongoProvider extends JoshProvider): Promise> { const docCount = await this.collection.countDocuments({}); + // TODO: @dan-online fix this yourself idk how this work + // Basically just this: + // if(unique && size < count) throw InvalidCount + // if (size === 0) throw MissingData + // Also try no to get an infinite loop with unique off and count > size + if (docCount === 0) return { ...payload, data: [] }; if (docCount < payload.count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random })); diff --git a/packages/postgresql/src/lib/PostgreSQLProvider.ts b/packages/postgresql/src/lib/PostgreSQLProvider.ts index e929eca6..3c6c0785 100644 --- a/packages/postgresql/src/lib/PostgreSQLProvider.ts +++ b/packages/postgresql/src/lib/PostgreSQLProvider.ts @@ -506,10 +506,10 @@ export class PostgreSQLProvider extends JoshProvider): Promise> { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = await this.handler.size(); - if (!duplicates && size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random })); return payload; @@ -525,46 +525,51 @@ export class PostgreSQLProvider extends JoshProvider(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push((await this.handler.get(key))!); + } else { + while (payload.data.length < count) { + const key = keys[Math.floor(Math.random() * size)]; + + payload.data.push((await this.handler.get(key))!); + } } return payload; } public async [Method.RandomKey](payload: Payload.RandomKey): Promise { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = await this.handler.size(); - if (size === 0) return { ...payload, data: [] }; - if (size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey })); return payload; } + if (size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.RandomKey })); + + return payload; + } + payload.data = []; const keys = await this.handler.keys(); - if (duplicates) { - while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(key); + } else { + while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); } return payload; diff --git a/packages/redis/src/lib/RedisProvider.ts b/packages/redis/src/lib/RedisProvider.ts index 86310847..69961c28 100644 --- a/packages/redis/src/lib/RedisProvider.ts +++ b/packages/redis/src/lib/RedisProvider.ts @@ -540,24 +540,42 @@ export class RedisProvider extends JoshProvider): Promise> { const docCount = (await this[Method.Size]({ method: Method.Size, errors: [] })).data || 0; + const { unique } = payload; - if (docCount === 0) return { ...payload, data: [] }; - if (docCount < payload.count) { + if (unique && docCount < payload.count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random }, { count: payload.count, docCount })); return payload; } + if (docCount === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random }, { count: payload.count, docCount })); + + return payload; + } + const keys = await this[Method.Keys]({ method: Method.Keys, errors: [] }); keys.data = keys.data || []; payload.data = []; - for (let i = 0; i < payload.count; i++) { - const key = keys.data[Math.floor(Math.random() * keys.data.length)]; - const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path: [] }); + if (unique) { + const randomKeys = new Set(); + + while (randomKeys.size < docCount) randomKeys.add(keys.data[Math.floor(Math.random() * keys.data.length)]); - payload.data.push(getPayload.data as StoredValue); + for (const key of randomKeys) { + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path: [] }); + + payload.data.push(getPayload.data as StoredValue); + } + } else { + for (let i = 0; i < payload.count; i++) { + const key = keys.data[Math.floor(Math.random() * keys.data.length)]; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path: [] }); + + payload.data.push(getPayload.data as StoredValue); + } } return payload; @@ -565,22 +583,37 @@ export class RedisProvider extends JoshProvider { const docCount = (await this[Method.Size]({ method: Method.Size, errors: [] })).data || 0; + const { unique } = payload; - if (docCount === 0) return { ...payload, data: [] }; - if (docCount < payload.count) { + if (unique && docCount < payload.count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey }, { count: payload.count, docCount })); return payload; } + if (docCount === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random }, { count: payload.count, docCount })); + + return payload; + } + const keys = await this[Method.Keys]({ method: Method.Keys, errors: [] }); keys.data = keys.data || []; payload.data = []; - for (let i = 0; i < payload.count; i++) { - const key = keys.data[Math.floor(Math.random() * keys.data.length)]; - payload.data.push(key); + if (unique) { + const randomKeys = new Set(); + + while (randomKeys.size < docCount) randomKeys.add(keys.data[Math.floor(Math.random() * keys.data.length)]); + + payload.data = Array.from(randomKeys); + } else { + for (let i = 0; i < payload.count; i++) { + const key = keys.data[Math.floor(Math.random() * keys.data.length)]; + + payload.data.push(key); + } } return payload; diff --git a/packages/sqlite/src/lib/SQLiteProvider.ts b/packages/sqlite/src/lib/SQLiteProvider.ts index aca185f4..eed917d3 100644 --- a/packages/sqlite/src/lib/SQLiteProvider.ts +++ b/packages/sqlite/src/lib/SQLiteProvider.ts @@ -569,63 +569,70 @@ export class SQLiteProvider extends JoshProvider): Payload.Random { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = this.handler.size(); - if (size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random }, { size })); return payload; } if (size === 0) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random }, { duplicates, count })); + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random }, { unique, count })); + + return payload; } payload.data = []; const keys = this.handler.keys(); - if (duplicates) { - while (payload.data.length < count) { - const key = keys[Math.floor(Math.random() * size)]; - - payload.data.push(this.handler.get(key)!); - } - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(this.handler.get(key)!); + } else { + while (payload.data.length < count) { + const key = keys[Math.floor(Math.random() * size)]; + + payload.data.push(this.handler.get(key)!); + } } return payload; } public [Method.RandomKey](payload: Payload.RandomKey): Payload.RandomKey { - const { count, duplicates } = payload; + const { count, unique } = payload; const size = this.handler.size(); - if (size === 0) return { ...payload, data: [] }; - if (size < count) { + if (unique && size < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey }, { size })); return payload; } + if (size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.RandomKey }, { size })); + + return payload; + } + payload.data = []; const keys = this.handler.keys(); - if (duplicates) { - while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); - } else { + if (unique) { const randomKeys = new Set(); while (randomKeys.size < count) randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); for (const key of randomKeys) payload.data.push(key); + } else { + while (payload.data.length < count) payload.data.push(keys[Math.floor(Math.random() * size)]); } return payload; From d7dc815a1b47fcac2c0d98335826ce90be722588 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Fri, 30 Jun 2023 23:07:22 -0600 Subject: [PATCH 07/19] chore: bump @joshdb/providers --- packages/json/package.json | 2 +- packages/map/package.json | 2 +- packages/maria/package.json | 2 +- packages/mongo/package.json | 2 +- packages/postgresql/package.json | 2 +- packages/redis/package.json | 2 +- packages/sqlite/package.json | 2 +- yarn.lock | 24 +++++++++++++++++------- 8 files changed, 24 insertions(+), 14 deletions(-) diff --git a/packages/json/package.json b/packages/json/package.json index 2e1efd53..db544bfc 100644 --- a/packages/json/package.json +++ b/packages/json/package.json @@ -27,7 +27,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "@sapphire/async-queue": "^1.5.0", "@sapphire/snowflake": "^3.5.1", "@sapphire/utilities": "^3.12.0", diff --git a/packages/map/package.json b/packages/map/package.json index 1eb1237a..f3caf8b6 100644 --- a/packages/map/package.json +++ b/packages/map/package.json @@ -26,7 +26,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "@sapphire/utilities": "^3.12.0", "better-serialize": "^1.0.0", "property-helpers": "^2.0.0" diff --git a/packages/maria/package.json b/packages/maria/package.json index 18584f07..84e8d226 100644 --- a/packages/maria/package.json +++ b/packages/maria/package.json @@ -26,7 +26,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "@sapphire/snowflake": "^3.5.1", "better-serialize": "^1.0.0", "mariadb": "^3.2.0" diff --git a/packages/mongo/package.json b/packages/mongo/package.json index f28ef43f..f11bf299 100644 --- a/packages/mongo/package.json +++ b/packages/mongo/package.json @@ -27,7 +27,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "@sapphire/utilities": "^3.12.0", "better-serialize": "^1.0.0", "mongodb": "~5.6.0", diff --git a/packages/postgresql/package.json b/packages/postgresql/package.json index 2bc85228..f575b042 100644 --- a/packages/postgresql/package.json +++ b/packages/postgresql/package.json @@ -28,7 +28,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "@sapphire/snowflake": "^3.5.1", "@sapphire/utilities": "^3.12.0", "better-serialize": "^1.0.0", diff --git a/packages/redis/package.json b/packages/redis/package.json index 5ef808b6..1c88ff00 100644 --- a/packages/redis/package.json +++ b/packages/redis/package.json @@ -24,7 +24,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "better-serialize": "^1.0.0", "redis": "^4.6.7", "uuid": "^9.0.0" diff --git a/packages/sqlite/package.json b/packages/sqlite/package.json index 8a5a82f8..9d392906 100644 --- a/packages/sqlite/package.json +++ b/packages/sqlite/package.json @@ -26,7 +26,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.095d141.0", "@sapphire/utilities": "^3.12.0", "better-serialize": "^1.0.0", "better-sqlite3": "^8.4.0", diff --git a/yarn.lock b/yarn.lock index 8bd9770c..540f22eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -626,7 +626,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.5.1 "@sapphire/utilities": ^3.12.0 @@ -645,7 +645,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@sapphire/utilities": ^3.12.0 "@vitest/coverage-v8": ^0.32.2 better-serialize: ^1.0.0 @@ -662,7 +662,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@sapphire/snowflake": ^3.5.1 "@vitest/coverage-v8": ^0.32.2 better-serialize: ^1.0.0 @@ -679,7 +679,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@sapphire/utilities": ^3.12.0 "@vitest/coverage-v8": ^0.32.2 better-serialize: ^1.0.0 @@ -697,7 +697,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@sapphire/snowflake": ^3.5.1 "@sapphire/utilities": ^3.12.0 "@vitest/coverage-v8": ^0.32.2 @@ -710,6 +710,16 @@ __metadata: languageName: unknown linkType: soft +"@joshdb/provider@npm:2.0.0-next.095d141.0": + version: 2.0.0-next.095d141.0 + resolution: "@joshdb/provider@npm:2.0.0-next.095d141.0" + dependencies: + "@sapphire/utilities": ^3.12.0 + reflect-metadata: ^0.1.13 + checksum: 6b052d5c9fff01c054484d340966a1350ab06358c8a6480bbd4b8220f61a08ba4899ac95684f6252471454b9a410bf4ef62d848bac391643206c6a39d2f32de7 + languageName: node + linkType: hard + "@joshdb/provider@npm:2.0.0-next.a699598.0": version: 2.0.0-next.a699598.0 resolution: "@joshdb/provider@npm:2.0.0-next.a699598.0" @@ -726,7 +736,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@types/uuid": ^9.0.2 "@vitest/coverage-v8": ^0.32.2 better-serialize: ^1.0.0 @@ -744,7 +754,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.1.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.095d141.0 "@sapphire/utilities": ^3.12.0 "@vitest/coverage-v8": ^0.32.2 better-serialize: ^1.0.0 From 7e95a82cddd52b3cf099a8d071e888d71463ef1e Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Tue, 25 Jan 2022 09:23:34 -0700 Subject: [PATCH 08/19] feat: add @joshdb/indexeddb --- packages/indexeddb/.cliff-jumperrc.yml | 3 + packages/indexeddb/.typedoc-json-parserrc.yml | 1 + packages/indexeddb/CHANGELOG.md | 3 + packages/indexeddb/README.md | 33 + packages/indexeddb/cliff.toml | 67 + packages/indexeddb/jest.config.mjs | 16 + packages/indexeddb/package.json | 63 + packages/indexeddb/rollup.config.ts | 34 + packages/indexeddb/src/index.ts | 1 + packages/indexeddb/src/lib/DbHandler.ts | 123 + .../indexeddb/src/lib/IndexedDBProvider.ts | 410 ++++ packages/indexeddb/src/tsconfig.json | 11 + packages/indexeddb/test.txt | 1187 ++++++++++ .../indexeddb/tests/lib/DbHandler.test.ts | 83 + .../tests/lib/IndexedDBProvider.test.ts | 8 + packages/indexeddb/tests/tsconfig.json | 15 + packages/indexeddb/tsconfig.eslint.json | 8 + packages/indexeddb/typedoc.json | 7 + yarn.lock | 2087 ++++++++++++++++- 19 files changed, 4065 insertions(+), 95 deletions(-) create mode 100644 packages/indexeddb/.cliff-jumperrc.yml create mode 100644 packages/indexeddb/.typedoc-json-parserrc.yml create mode 100644 packages/indexeddb/CHANGELOG.md create mode 100644 packages/indexeddb/README.md create mode 100644 packages/indexeddb/cliff.toml create mode 100644 packages/indexeddb/jest.config.mjs create mode 100644 packages/indexeddb/package.json create mode 100644 packages/indexeddb/rollup.config.ts create mode 100644 packages/indexeddb/src/index.ts create mode 100644 packages/indexeddb/src/lib/DbHandler.ts create mode 100644 packages/indexeddb/src/lib/IndexedDBProvider.ts create mode 100644 packages/indexeddb/src/tsconfig.json create mode 100644 packages/indexeddb/test.txt create mode 100644 packages/indexeddb/tests/lib/DbHandler.test.ts create mode 100644 packages/indexeddb/tests/lib/IndexedDBProvider.test.ts create mode 100644 packages/indexeddb/tests/tsconfig.json create mode 100644 packages/indexeddb/tsconfig.eslint.json create mode 100644 packages/indexeddb/typedoc.json diff --git a/packages/indexeddb/.cliff-jumperrc.yml b/packages/indexeddb/.cliff-jumperrc.yml new file mode 100644 index 00000000..11f8cd0d --- /dev/null +++ b/packages/indexeddb/.cliff-jumperrc.yml @@ -0,0 +1,3 @@ +name: indexeddb +org: joshdb +packagePath: packages/indexeddb diff --git a/packages/indexeddb/.typedoc-json-parserrc.yml b/packages/indexeddb/.typedoc-json-parserrc.yml new file mode 100644 index 00000000..92d0e01d --- /dev/null +++ b/packages/indexeddb/.typedoc-json-parserrc.yml @@ -0,0 +1 @@ +json: 'docs/api.json' diff --git a/packages/indexeddb/CHANGELOG.md b/packages/indexeddb/CHANGELOG.md new file mode 100644 index 00000000..6361e43e --- /dev/null +++ b/packages/indexeddb/CHANGELOG.md @@ -0,0 +1,3 @@ +# Changelog + +All notable changes to this project will be documented in this file. diff --git a/packages/indexeddb/README.md b/packages/indexeddb/README.md new file mode 100644 index 00000000..c81cafe0 --- /dev/null +++ b/packages/indexeddb/README.md @@ -0,0 +1,33 @@ +
+ +![Josh Logo](https://evie.codes/josh-light.png) + +# @joshdb/indexeddb + +**A provider for `@joshdb/core`** + +[![GitHub](https://img.shields.io/github/license/josh-development/providers)](https://github.com/josh-development/providers/blob/main/LICENSE.md) +[![codecov](https://codecov.io/gh/josh-development/providers/branch/main/graph/badge.svg?token=JnJcjxqT3k)](https://codecov.io/gh/josh-development/providers) +[![npm](https://img.shields.io/npm/v/@joshdb/indexeddb?color=crimson&logo=npm&style=flat-square)](https://www.npmjs.com/package/@joshdb/indexeddb) + +[![Support Server](https://discord.com/api/guilds/298508738623438848/embed.png?style=banner2)](https://discord.gg/N7ZKH3P) + +
+ +## Description + +A Josh provider + +## Features + +- Written in TypeScript +- Offers CommonJS and ESM bundles +- Fully tested + +## Installation + +You can use the following command to install this package, or replace `npm install` with your package manager of choice. + +```sh +npm install @joshdb/indexeddb +``` diff --git a/packages/indexeddb/cliff.toml b/packages/indexeddb/cliff.toml new file mode 100644 index 00000000..001b137b --- /dev/null +++ b/packages/indexeddb/cliff.toml @@ -0,0 +1,67 @@ +[changelog] +header = """ +# Changelog + +All notable changes to this project will be documented in this file. + +""" +body = """ +{% if version %}\ + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/utilities/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/utilities/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) +{% else %}\ + # [unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ## {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}\ + **{{commit.scope}}:** \ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/utilities/commit/{{ commit.id }}))\ + {% if commit.breaking %}\ + + + {% raw %} {% endraw %} ### πŸ’₯ Breaking Changes: + \ + {% for breakingChange in commit.footers %}\ + {% raw %} {% endraw %} - {{ breakingChange }} +\ + {% endfor %}\ + {% endif %}\ + {% endfor %} +{% endfor %} + +""" +trim = true +footer = "" + +[git] +conventional_commits = true +filter_unconventional = true +commit_parsers = [ + { message = "^feat", group = "πŸš€ Features" }, + { message = "^fix", group = "πŸ› Bug Fixes" }, + { message = "^docs", group = "πŸ“ Documentation" }, + { message = "^perf", group = "πŸƒ Performance" }, + { message = "^refactor", group = "🏠 Refactor" }, + { message = ".*deprecated", body = ".*deprecated", group = "🚨 Deprecation" }, + { message = "^revert", skip = true }, + { message = "^style", group = "πŸͺž Styling" }, + { message = "^test", group = "πŸ§ͺ Testing" }, + { message = "^chore", skip = true }, + { message = "^ci", skip = true }, + { body = ".*security", group = "πŸ›‘οΈ Security" }, +] +filter_commits = true +tag_pattern = "@joshdb/indexeddb@[0-9]*" +ignore_tags = "" +topo_order = false +sort_commits = "newest" diff --git a/packages/indexeddb/jest.config.mjs b/packages/indexeddb/jest.config.mjs new file mode 100644 index 00000000..759089a6 --- /dev/null +++ b/packages/indexeddb/jest.config.mjs @@ -0,0 +1,16 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +const config = { + displayName: 'unit test', + preset: 'ts-jest', + testMatch: ['/tests/**/*.test.ts'], + collectCoverageFrom: ['/src/**/*.ts'], + setupFilesAfterEnv: ['jest-extended/all'], + globals: { + 'ts-jest': { + tsconfig: '/tests/tsconfig.json' + } + }, + coveragePathIgnorePatterns: [] +}; + +export default config; diff --git a/packages/indexeddb/package.json b/packages/indexeddb/package.json new file mode 100644 index 00000000..c5d12899 --- /dev/null +++ b/packages/indexeddb/package.json @@ -0,0 +1,63 @@ +{ + "name": "@joshdb/indexeddb", + "version": "2.0.0", + "description": "A Josh provider", + "author": "Γ‰velyne Lachance (https://evie.codes/)", + "contributors": [ + "WilsontheWolf (https://wilson.antti.codes/)", + "DanCodes (https://dancodes.online/)" + ], + "license": "Apache-2.0", + "main": "dist/index.js", + "module": "dist/index.mjs", + "browser": "dist/index.umd.js", + "unpkg": "dist/index.umd.js", + "types": "dist/index.d.ts", + "exports": { + "import": "./dist/index.mjs", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "sideEffects": false, + "scripts": { + "test": "jest --verbose", + "docs": "typedoc-json-parser", + "lint": "eslint src tests --ext ts --fix -c ../../.eslintrc", + "build": "rollup -c rollup.config.ts", + "prepack": "rollup-type-bundler", + "bump": "cliff-jumper", + "check-update": "cliff-jumper --dry-run" + }, + "dependencies": { + "@joshdb/provider": "1.1.0-next.24ef775.0", + "property-helpers": "^1.1.0" + }, + "devDependencies": { + "@favware/cliff-jumper": "^1.8.5", + "@favware/rollup-type-bundler": "^1.0.9", + "fake-indexeddb": "^4.0.0", + "jest": "^28.1.3", + "typedoc": "^0.23.9", + "typedoc-json-parser": "^2.0.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/josh-development/providers.git" + }, + "files": [ + "dist", + "!dist/*tsbuildinfo" + ], + "engines": { + "node": ">=16.6.0", + "npm": ">=7.0.0" + }, + "keywords": [], + "bugs": { + "url": "https://github.com/josh-development/providers/issues" + }, + "homepage": "https://josh.evie.dev", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/indexeddb/rollup.config.ts b/packages/indexeddb/rollup.config.ts new file mode 100644 index 00000000..3031a35c --- /dev/null +++ b/packages/indexeddb/rollup.config.ts @@ -0,0 +1,34 @@ +import { resolve } from 'path'; +import cleaner from 'rollup-plugin-cleaner'; +import typescript from 'rollup-plugin-typescript2'; +import versionInjector from 'rollup-plugin-version-injector'; + +export default { + input: 'src/index.ts', + output: [ + { + file: './dist/index.js', + format: 'cjs', + exports: 'named', + sourcemap: true + }, + { + file: './dist/index.mjs', + format: 'es', + exports: 'named', + sourcemap: true + }, + { + file: './dist/index.umd.js', + format: 'umd', + name: 'JoshIndexedDBProvider', + exports: 'named', + sourcemap: true, + globals: { + '@joshdb/provider': 'JoshProvider' + } + } + ], + external: ['@joshdb/provider'], + plugins: [cleaner({ targets: ['./dist'] }), typescript({ tsconfig: resolve(process.cwd(), 'src', 'tsconfig.json') }), versionInjector()] +}; diff --git a/packages/indexeddb/src/index.ts b/packages/indexeddb/src/index.ts new file mode 100644 index 00000000..ee50cb6c --- /dev/null +++ b/packages/indexeddb/src/index.ts @@ -0,0 +1 @@ +export * from './lib/IndexedDBProvider'; diff --git a/packages/indexeddb/src/lib/DbHandler.ts b/packages/indexeddb/src/lib/DbHandler.ts new file mode 100644 index 00000000..66c55e53 --- /dev/null +++ b/packages/indexeddb/src/lib/DbHandler.ts @@ -0,0 +1,123 @@ +export default class DbHandler { + private idb: IDBFactory; + private db!: IDBDatabase; + + public constructor() { + if (!indexedDB) { + throw new Error("Your browser doesn't support a stable version of IndexedDB. Josh is unable to run without one."); + } + + this.idb = indexedDB; + } + + public init() { + const request = this.idb.open('josh'); + + return new Promise((resolve, reject) => { + request.onerror = reject; + + request.onupgradeneeded = () => { + const db = request.result; + + if (!db.objectStoreNames.contains('store')) { + db.createObjectStore('store', { keyPath: 'key' }); + } + }; + + request.onsuccess = () => { + this.db = request.result; + resolve(); + }; + }); + } + + public async set(key: string, value: unknown) { + const all = this.open(); + const doc = { + key, + value + }; + + const request = all.put(doc); + + await this.handleEvents(request); + } + + public async get(key: string) { + const all = this.open(); + const request = all.get(key); + const result = await this.handleEvents(request); + + // @ts-ignore it exists f you TS + return result?.value; + } + + public async getAll() { + const all = this.open(); + const request = all.getAll(); + const docs = await this.handleEvents(request); + const final = {}; + + // @ts-ignore TS GO AWAY + docs.forEach((x) => { + // @ts-ignore TS GO AWAY + final[x.key] = x.value; + }); + + return final; + } + + public async getKeys() { + const all = this.open(); + const request = all.getAllKeys(); + + return this.handleEvents(request); + } + + public async count() { + const all = this.open(); + const request = all.count(); + const data = await this.handleEvents(request); + + if (typeof data !== 'number') throw new Error('Something is amiss!!!'); + + return data; + } + + public async delete(key: string) { + const all = this.open(); + const request = all.delete(key); + + return this.handleEvents(request); + } + + public async clear() { + const all = this.open(); + const request = all.clear(); + + return this.handleEvents(request); + } + + public async has(key: string) { + return (await this.get(key)) !== undefined; + } + + private handleEvents(request: IDBRequest) { + return new Promise((res, rej) => { + request.onsuccess = () => { + res(request.result); + }; + + request.onerror = () => { + rej(new Error(request.error?.toString())); + }; + }); + } + + private open() { + const transaction = this.db.transaction('store', 'readwrite'); + const all = transaction.objectStore('store'); + + return all; + } +} diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts new file mode 100644 index 00000000..b9ab3cc1 --- /dev/null +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -0,0 +1,410 @@ +import { CommonIdentifiers, JoshProvider, MathOperator, Method, Payloads } from '@joshdb/provider'; +import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; +import DbHandler from './DbHandler'; + +export class IndexedDBProvider extends JoshProvider { + public declare options: IndexedDBProvider.Options; + + private db: DbHandler; + public constructor(options: IndexedDBProvider.Options) { + super(options); + this.db = new DbHandler(); + } + + public async [Method.Each](payload: Payloads.Each): Promise> { + await this.check(); + + const { hook } = payload; + const data = await this.db.getAll(); + // @ts-expect-error 2322 Start making sense. + Object.entries(data).forEach(([key, value]) => hook(value, key)); + + return payload; + } + + public async [Method.DeleteMany](payload: Payloads.DeleteMany): Promise { + await this.check(); + + for (const key of payload.keys) { + await this.db.delete(key); + } + + return payload; + } + + public async [Method.Delete](payload: Payloads.Delete): Promise { + await this.check(); + + const { key, path } = payload; + + if (path.length) { + const value = await this.db.get(key); + deleteProperty(value, path); + await this.db.set(key, value); + } else { + await this.db.delete(key); + } + + return payload; + } + + public async [Method.AutoKey](payload: Payloads.AutoKey): Promise { + await this.check(); + + payload.data = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); + + return payload; + } + + public async [Method.Values](payload: Payloads.Values): Promise> { + await this.check(); + + payload.data = Object.values(await this.db.getAll()); + + return payload; + } + + public async [Method.Math](payload: Payloads.Math): Promise { + await this.check(); + + const { key, path, operator, operand } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, key, path }); + + // @ts-expect-error 2532 No it's not + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.error = this.error({ identifier: CommonIdentifiers.MissingData }); + return payload; + } + + let { data } = getPayload; + + if (typeof data !== 'number') { + payload.error = this.error({ identifier: CommonIdentifiers.InvalidDataType }); + return payload; + } + + switch (operator) { + case MathOperator.Addition: + data += operand; + + break; + + case MathOperator.Subtraction: + data -= operand; + + break; + + case MathOperator.Multiplication: + data *= operand; + + break; + + case MathOperator.Division: + data /= operand; + + break; + + case MathOperator.Remainder: + data %= operand; + + break; + + case MathOperator.Exponent: + data **= operand; + + break; + } + + await this[Method.Set]({ method: Method.Set, key, path, value: data }); + + return payload; + } + + public async [Method.Dec](payload: Payloads.Dec): Promise { + await this.check(); + + const { key, path } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, key, path }); + // @ts-expect-error 2532 No it's not + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.error = this.error({ identifier: CommonIdentifiers.MissingData }); + return payload; + } + + const { data } = getPayload; + + if (typeof data !== 'number') { + payload.error = this.error({ identifier: CommonIdentifiers.InvalidDataType }); + return payload; + } + + await this[Method.Set]({ method: Method.Set, key, path, value: data - 1 }); + + return payload; + } + + public async [Method.Inc](payload: Payloads.Inc): Promise { + await this.check(); + + const { key, path } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, key, path }); + // @ts-expect-error 2532 No it's not + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.error = this.error({ identifier: CommonIdentifiers.MissingData }); + return payload; + } + + const { data } = getPayload; + + if (typeof data !== 'number') { + payload.error = this.error({ identifier: CommonIdentifiers.InvalidDataType }); + return payload; + } + + await this[Method.Set]({ method: Method.Set, key, path, value: data + 1 }); + + return payload; + } + + public async [Method.Keys](payload: Payloads.Keys): Promise { + await this.check(); + + // @ts-expect-error 2532 Trust me bro + payload.data = await this.db.getKeys(); + + return payload; + } + + public async [Method.RandomKey](payload: Payloads.RandomKey): Promise { + await this.check(); + + const keys = await this.db.getKeys(); + + // @ts-expect-error 2532 Trust me bro + if (keys.length !== 0) { + // @ts-expect-error 2532 Trust me bro + payload.data = [keys[Math.floor(Math.random() * keys.length)]]; + } + + return payload; + } + + public async [Method.Random](payload: Payloads.Random): Promise> { + await this.check(); + + // @ts-expect-error 2532 STFU + const key = await this.randomKey(payload); + if (key.data) { + payload.data = await Promise.all(key.data.map((key) => this.db.get(key))); + } + + return payload; + } + + public async init(context: JoshProvider.Context): Promise { + context = await super.init(context); + await this.db.init(); + + return context; + } + + public async [Method.Get](payload: Payloads.Get): Promise> { + await this.check(); + + const { key, path } = payload; + const value = await this.db.get(key); + + payload.data = path.length === 0 ? value : getProperty(value, path); + + return payload; + } + + public async [Method.Entries](payload: Payloads.Entries): Promise> { + await this.check(); + + payload.data = await this.db.getAll(); + + return payload; + } + + public async [Method.GetMany](payload: Payloads.GetMany): Promise> { + await this.check(); + // according to old method this could be made into an index search + + const { keys } = payload; + const data: { [key: string]: StoredValue } = await this.db.getAll(); + + payload.data = {}; + + Object.entries(data).forEach(([key, val]) => { + if (keys.includes(key)) { + // @ts-expect-error 2532 No it's not + payload.data[key] = val; + } + }); + + return payload; + } + + public async [Method.Set](payload: Payloads.Set): Promise> { + await this.check(); + + const { key, value, path } = payload; + let data = (await this.db.get(key)) || {}; + + if (path.length === 0) { + data = value; + } else { + setProperty(data, path, value); + } + + await this.db.set(key, data); + + return payload; + } + + public async [Method.SetMany](payload: Payloads.SetMany): Promise { + await this.check(); + + const { entries, overwrite } = payload; + + for (const entry of entries) { + const [{ key, path }, value] = entry; + const found = await this.get({ key, method: Method.Get, path }); + + if (!found || (found && overwrite)) { + await this.set({ key, value, path, method: Method.Set }); + } + } + + return payload; + } + + public async [Method.Clear](payload: Payloads.Clear): Promise { + await this.check(); + await this.db.clear(); + + return payload; + } + + public async [Method.Has](payload: Payloads.Has): Promise { + await this.check(); + + const { key, path } = payload; + + if (await this.db.has(key)) { + payload.data = true; + + if (path.length !== 0) payload.data = hasProperty(await this.db.get(key), path); + } else payload.data = false; + + return payload; + } + + public async [Method.Size](payload: Payloads.Size): Promise { + await this.check(); + payload.data = await this.db.count(); + + return payload; + } + + public async [Method.Push](payload: Payloads.Push): Promise> { + await this.check(); + return payload; + } + + public async [Method.Ensure](payload: Payloads.Ensure): Promise> { + await this.check(); + return payload; + } + + public async [Method.Every](payload: Payloads.Every.ByHook): Promise>; + public async [Method.Every](payload: Payloads.Every.ByValue): Promise; + public async [Method.Every](payload: Payloads.Every): Promise> { + await this.check(); + return payload; + } + + public async [Method.Filter](payload: Payloads.Filter.ByHook): Promise>; + public async [Method.Filter](payload: Payloads.Filter.ByValue): Promise>; + public async [Method.Filter](payload: Payloads.Filter): Promise> { + await this.check(); + return payload; + } + + public async [Method.Find](payload: Payloads.Find.ByHook): Promise>; + public async [Method.Find](payload: Payloads.Find.ByValue): Promise>; + public async [Method.Find](payload: Payloads.Find): Promise> { + await this.check(); + return payload; + } + + public async [Method.Map](payload: Payloads.Map.ByHook): Promise>; + public async [Method.Map](payload: Payloads.Map.ByPath): Promise>; + public async [Method.Map](payload: Payloads.Map): Promise> { + await this.check(); + return payload; + } + + public async [Method.Partition](payload: Payloads.Partition.ByHook): Promise>; + public async [Method.Partition](payload: Payloads.Partition.ByValue): Promise>; + public async [Method.Partition](payload: Payloads.Partition): Promise> { + await this.check(); + return payload; + } + + public async [Method.Remove](payload: Payloads.Remove.ByHook): Promise>; + public async [Method.Remove](payload: Payloads.Remove.ByValue): Promise; + public async [Method.Remove](payload: Payloads.Remove): Promise> { + await this.check(); + return payload; + } + + public async [Method.Some](payload: Payloads.Some.ByHook): Promise>; + public async [Method.Some](payload: Payloads.Some.ByValue): Promise; + public async [Method.Some](payload: Payloads.Some): Promise> { + await this.check(); + return payload; + } + + public async [Method.Update](payload: Payloads.Update): Promise> { + await this.check(); + return payload; + } + + protected fetchVersion(context: JoshProvider.Context) { + context; + return this.resolveVersion('[VI]{version}[/VI]'); + } + + private async check(key: string | null = null, type: string[] | null = null, path: string[] = []) { + if (!this.db) throw new Error('Database has been closed'); + if (!key || !type) return; + + const value = await this.get({ method: Method.Get, key, path }); + + if (value === null) { + throw new Error( + `The document "${key}" of path "${path}" was not found in the database` + // 'JoshTypeError', + ); + } + + const valueType = value.constructor.name; + + if (!type.includes(valueType)) { + throw new Error( + `The property ${path ? `${path} ` : ''}in key "${key}" is not of type "${type.join('" or "')}"(key was of type "${valueType}")` + // 'JoshTypeError', + ); + } + } + + public get version(): JoshProvider.Semver { + return this.resolveVersion('[VI]{version}[/VI]'); + } +} + +export namespace IndexedDBProvider { + export interface Options {} +} diff --git a/packages/indexeddb/src/tsconfig.json b/packages/indexeddb/src/tsconfig.json new file mode 100644 index 00000000..608b05a6 --- /dev/null +++ b/packages/indexeddb/src/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "../dist", + "composite": true, + "tsBuildInfoFile": "../dist/.tsbuildinfo", + "lib": ["DOM"] + }, + "include": ["."] +} diff --git a/packages/indexeddb/test.txt b/packages/indexeddb/test.txt new file mode 100644 index 00000000..60ba9980 --- /dev/null +++ b/packages/indexeddb/test.txt @@ -0,0 +1,1187 @@ +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +Debugger attached. +PASS unit test tests/lib/DbHandler.test.ts + DbHandler + is a class + βœ“ GIVEN typeof DbHandler THEN returns function (1 ms) + βœ“ GIVEN typeof ...prototype THEN returns object + Can manipulate data. + βœ“ Can set and subsequently get data (5 ms) + βœ“ Can get all data (2 ms) + βœ“ Can get all keys (2 ms) + βœ“ Can delete data (1 ms) + βœ“ Can has data (1 ms) + βœ“ Can count data (4 ms) + βœ“ Can clear data + +FAIL unit test tests/lib/IndexedDBProvider.test.ts + IndexedDBProvider - Serialization Enabled + is a class + βœ“ GIVEN typeof IndexedDBProvider THEN returns function (1 ms) + βœ“ GIVEN typeof ...prototype THEN returns object (1 ms) + can manipulate provider data + autoKey + βœ“ GIVEN ... THEN returns payload w/ generated key as data AND increments autoKeyCount (1 ms) + βœ“ each value of autoKey should be unique (1 ms) + clear + βœ“ GIVEN provider w/o data THEN provider data cleared (2 ms) + βœ“ GIVEN provider w/ data THEN provider data cleared (2 ms) + dec + βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error (2 ms) + βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error + βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ number at key THEN decremented number at key (2 ms) + βœ“ GIVEN provider w/ number at path THEN decremented number at path (2 ms) + delete + βœ“ GIVEN provider w/ value at key THEN deletes value at key (1 ms) + βœ“ GIVEN provider w/ value at path THEN deletes value at path (1 ms) + βœ“ GIVEN provider w/ value at nested path THEN deletes value at nested path (2 ms) + ensure + βœ• GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key (1 ms) + βœ• GIVEN provider w/ value at key THEN returns payload w/ data as value at key + entries + βœ“ GIVEN provider w/o data THEN returns payload w/o data from getAll + βœ“ GIVEN provider w/ data THEN returns payload w/ data from getAll (1 ms) + every + 0 + βœ• GIVEN provider w/o data THEN returns payload(true) (2 ms) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload(true) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + βœ• GIVEN provider w/o data w/o path THEN returns payload(true) + βœ• GIVEN provider w/ data w/o path THEN returns payload(true) (1 ms) + filter + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data from filter (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload w/o data from filter (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) + find + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data from find (2 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data from find (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload w/o data from find (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/o data from find + get + βœ“ GIVEN provider w/o data THEN returns payload w/o data from get + βœ“ GIVEN provider w/ value at key THEN returns payload w/ data from get at key (1 ms) + βœ“ GIVEN provider w/ value at path THEN returns payload w/ data from get at path (1 ms) + getMany + βœ“ GIVEN provider w/o data THEN returns payload w/o data from getMany + βœ“ GIVEN provider w/ data THEN returns payload w/ data from getMany (1 ms) + has + βœ“ GIVEN provider w/o data at key THEN returns payload(false) (1 ms) + βœ“ GIVEN provider w/o data at path THEN returns payload(false) (1 ms) + βœ“ GIVEN provider w/ data at key THEN returns payload(true) (1 ms) + βœ“ GIVEN provider w/ data at path THEN returns payload(true) (1 ms) + inc + βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) + βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error + βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ number at key THEN incremented number at key (1 ms) + βœ“ GIVEN provider w/ number at path THEN incremented number at key and path (1 ms) + keys + βœ“ GIVEN provider w/o data THEN returns payload w/o data from keys (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data from keys + map + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data from map (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data from map (2 ms) + 2 + βœ• GIVEN provider w/o data THEN returns payload w/o data from map + βœ• GIVEN provider w/ data THEN returns payload w/ data from map (1 ms) + βœ• GIVEN provider w/ data at path THEN returns payload w/ data from map (1 ms) + math + βœ“ GIVEN provider w/o data THEN returns payload w/ error (1 ms) + βœ“ GIVEN provider w/o data at path THEN returns payload w/ error (1 ms) + βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ error (1 ms) + βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ error (1 ms) + partition + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data (2 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload w/o data + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + push + βœ• GIVEN provider w/o data THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/o data at path THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + βœ• GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ array at key THEN returns payload AND pushes value to array at key (1 ms) + βœ“ GIVEN provider w/ array at path THEN returns payload AND pushes value to array at path (1 ms) + random + βœ“ GIVEN provider w/o data THEN returns payload w/o data from random + βœ“ GIVEN provider w/ data THEN returns payload w/ data from random (1 ms) + randomKey + βœ“ GIVEN provider w/o data THEN returns payload w/o data from randomKey (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data from randomKey (1 ms) + remove + 0 + βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (3 ms) + 1 + βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error + βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) + βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (1 ms) + set + βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key + βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key and path (2 ms) + setMany + βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key + βœ“ GIVEN provider w/ data THEN returns payload AND does not set value at key (2 ms) + size + βœ“ GIVEN provider w/o data THEN returns payload(0) (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload(1) + some + 0 + βœ• GIVEN provider w/o data THEN returns payload(false) (1 ms) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload(false) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + βœ• GIVEN provider w/o data w/o path THEN returns payload(false) (1 ms) + βœ• GIVEN provider w/ data w/o path THEN returns payload(true) (1 ms) + update + βœ• GIVEN provider w/o data THEN returns payload w/ missing data error + βœ“ GIVEN provider w/ data at key THEN returns payload w/ data AND updates value at key (1 ms) + βœ“ GIVEN provider w/ data at path THEN returns payload w/ data AND updates value at path + values + βœ“ GIVEN provider w/o data THEN returns payload w/o data (2 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data + each + βœ“ GIVEN provider w/o data THEN loops 0 times (1 ms) + βœ“ GIVEN provider w/ data THEN loops x times THEN clears (1 ms) + IndexedDBProvider - Serialization Disabled + is a class + βœ“ GIVEN typeof IndexedDBProvider THEN returns function + βœ“ GIVEN typeof ...prototype THEN returns object + can manipulate provider data + autoKey + βœ“ GIVEN ... THEN returns payload w/ generated key as data AND increments autoKeyCount + βœ“ each value of autoKey should be unique (1 ms) + clear + βœ“ GIVEN provider w/o data THEN provider data cleared + βœ“ GIVEN provider w/ data THEN provider data cleared (1 ms) + dec + βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) + βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error + βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ number at key THEN decremented number at key + βœ“ GIVEN provider w/ number at path THEN decremented number at path (1 ms) + delete + βœ“ GIVEN provider w/ value at key THEN deletes value at key (1 ms) + βœ“ GIVEN provider w/ value at path THEN deletes value at path (1 ms) + βœ“ GIVEN provider w/ value at nested path THEN deletes value at nested path (1 ms) + ensure + βœ• GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key (1 ms) + βœ• GIVEN provider w/ value at key THEN returns payload w/ data as value at key + entries + βœ“ GIVEN provider w/o data THEN returns payload w/o data from getAll (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data from getAll + every + 0 + βœ• GIVEN provider w/o data THEN returns payload(true) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload(true) (1 ms) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + βœ• GIVEN provider w/o data w/o path THEN returns payload(true) (1 ms) + βœ• GIVEN provider w/ data w/o path THEN returns payload(true) (1 ms) + filter + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data from filter + βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload w/o data from filter (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) + find + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data from find + βœ• GIVEN provider w/ data THEN returns payload w/ data from find (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload w/o data from find (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/o data from find + get + βœ“ GIVEN provider w/o data THEN returns payload w/o data from get (1 ms) + βœ“ GIVEN provider w/ value at key THEN returns payload w/ data from get at key (2 ms) + βœ“ GIVEN provider w/ value at path THEN returns payload w/ data from get at path + getMany + βœ“ GIVEN provider w/o data THEN returns payload w/o data from getMany (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data from getMany (1 ms) + has + βœ“ GIVEN provider w/o data at key THEN returns payload(false) + βœ“ GIVEN provider w/o data at path THEN returns payload(false) (1 ms) + βœ“ GIVEN provider w/ data at key THEN returns payload(true) (1 ms) + βœ“ GIVEN provider w/ data at path THEN returns payload(true) (1 ms) + inc + βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error + βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error (1 ms) + βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ number at key THEN incremented number at key (1 ms) + βœ“ GIVEN provider w/ number at path THEN incremented number at key and path (1 ms) + keys + βœ“ GIVEN provider w/o data THEN returns payload w/o data from keys + βœ“ GIVEN provider w/ data THEN returns payload w/ data from keys (1 ms) + map + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data from map + βœ• GIVEN provider w/ data THEN returns payload w/ data from map (1 ms) + 2 + βœ• GIVEN provider w/o data THEN returns payload w/o data from map (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data from map + βœ• GIVEN provider w/ data at path THEN returns payload w/ data from map (1 ms) + math + βœ“ GIVEN provider w/o data THEN returns payload w/ error (1 ms) + βœ“ GIVEN provider w/o data at path THEN returns payload w/ error (1 ms) + βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ error (1 ms) + βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ error (1 ms) + partition + 0 + βœ• GIVEN provider w/o data THEN returns payload w/o data + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload w/o data + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) + push + βœ• GIVEN provider w/o data THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/o data at path THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + βœ• GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) + βœ“ GIVEN provider w/ array at key THEN returns payload AND pushes value to array at key + βœ“ GIVEN provider w/ array at path THEN returns payload AND pushes value to array at path (1 ms) + random + βœ“ GIVEN provider w/o data THEN returns payload w/o data from random (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data from random + randomKey + βœ“ GIVEN provider w/o data THEN returns payload w/o data from randomKey (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload w/ data from randomKey + remove + 0 + βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (2 ms) + 1 + βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) + βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (2 ms) + set + βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key + βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key and path + setMany + βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key (1 ms) + βœ“ GIVEN provider w/ data THEN returns payload AND does not set value at key (1 ms) + size + βœ“ GIVEN provider w/o data THEN returns payload(0) + βœ“ GIVEN provider w/ data THEN returns payload(1) (1 ms) + some + 0 + βœ• GIVEN provider w/o data THEN returns payload(false) (1 ms) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + 1 + βœ• GIVEN provider w/o data THEN returns payload(false) + βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) + βœ• GIVEN provider w/o data w/o path THEN returns payload(false) (1 ms) + βœ• GIVEN provider w/ data w/o path THEN returns payload(true) + update + βœ• GIVEN provider w/o data THEN returns payload w/ missing data error (1 ms) + βœ“ GIVEN provider w/ data at key THEN returns payload w/ data AND updates value at key + βœ“ GIVEN provider w/ data at path THEN returns payload w/ data AND updates value at path (1 ms) + values + βœ“ GIVEN provider w/o data THEN returns payload w/o data + βœ“ GIVEN provider w/ data THEN returns payload w/ data (1 ms) + each + βœ“ GIVEN provider w/o data THEN loops 0 times + βœ“ GIVEN provider w/ data THEN loops x times THEN clears (1 ms) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key + + expect(received).toBe(expected) // Object.is equality + + Expected: "defaultValue" + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:290:26) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/ value at key THEN returns payload w/ data as value at key + + expect(received).toBe(expected) // Object.is equality + + Expected: "value" + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:311:26) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:358:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:381:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:398:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:422:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:437:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:461:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:479:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:filter": "value"} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:495:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:512:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:filter": {"path": "value"}} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:529:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find + + expect(received).toEqual(expected) // deep equality + + Expected: [null, null] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:548:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from find + + expect(received).toEqual(expected) // deep equality + + Expected: ["test:find", "value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:564:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find + + expect(received).toEqual(expected) // deep equality + + Expected: [null, null] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:581:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/o data from find + + expect(received).toEqual(expected) // deep equality + + Expected: ["test:find", {"path": "value"}] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:598:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map + + expect(received).toEqual(expected) // deep equality + + Expected: [] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:897:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map + + expect(received).toEqual(expected) // deep equality + + Expected: ["value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:913:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map + + expect(received).toEqual(expected) // deep equality + + Expected: [] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:929:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map + + expect(received).toEqual(expected) // deep equality + + Expected: ["value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:945:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data at path THEN returns payload w/ data from map + + expect(received).toEqual(expected) // deep equality + + Expected: ["value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:961:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1084:36) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:partition": "value"} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1106:36) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1128:36) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1152:36) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:partition": "value"} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1176:36) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1200:36) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1216:27) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data at path THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1234:27) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1252:27) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1270:27) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1389:29) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1414:29) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key + + expect(received).toEqual(expected) // deep equality + + - Expected - 1 + + Received + 3 + + - Array [] + + Array [ + + "value", + + ] + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1451:37) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1471:29) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1496:29) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key + + expect(received).toEqual(expected) // deep equality + + - Expected - 1 + + Received + 3 + + - Array [] + + Array [ + + "value", + + ] + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1533:37) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(false) + + expect(received).toBe(expected) // Object.is equality + + Expected: false + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1683:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1703:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(false) + + expect(received).toBe(expected) // Object.is equality + + Expected: false + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1720:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1737:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(false) + + expect(received).toBe(expected) // Object.is equality + + Expected: false + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1757:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1779:28) + + ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί update β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1794:27) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key + + expect(received).toBe(expected) // Object.is equality + + Expected: "defaultValue" + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:290:26) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/ value at key THEN returns payload w/ data as value at key + + expect(received).toBe(expected) // Object.is equality + + Expected: "value" + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:311:26) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:358:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:381:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:398:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:422:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:437:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:461:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:479:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:filter": "value"} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:495:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:512:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:filter": {"path": "value"}} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:529:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find + + expect(received).toEqual(expected) // deep equality + + Expected: [null, null] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:548:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from find + + expect(received).toEqual(expected) // deep equality + + Expected: ["test:find", "value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:564:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find + + expect(received).toEqual(expected) // deep equality + + Expected: [null, null] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:581:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/o data from find + + expect(received).toEqual(expected) // deep equality + + Expected: ["test:find", {"path": "value"}] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:598:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map + + expect(received).toEqual(expected) // deep equality + + Expected: [] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:897:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map + + expect(received).toEqual(expected) // deep equality + + Expected: ["value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:913:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map + + expect(received).toEqual(expected) // deep equality + + Expected: [] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:929:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map + + expect(received).toEqual(expected) // deep equality + + Expected: ["value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:945:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data at path THEN returns payload w/ data from map + + expect(received).toEqual(expected) // deep equality + + Expected: ["value"] + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:961:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1084:36) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:partition": "value"} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1106:36) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1128:36) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1152:36) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {"test:partition": "value"} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1176:36) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data + + expect(received).toEqual(expected) // deep equality + + Expected: {} + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1200:36) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1216:27) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data at path THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1234:27) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1252:27) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1270:27) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1389:29) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1414:29) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key + + expect(received).toEqual(expected) // deep equality + + - Expected - 1 + + Received + 3 + + - Array [] + + Array [ + + "value", + + ] + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1451:37) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1471:29) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1496:29) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key + + expect(received).toEqual(expected) // deep equality + + - Expected - 1 + + Received + 3 + + - Array [] + + Array [ + + "value", + + ] + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1533:37) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(false) + + expect(received).toBe(expected) // Object.is equality + + Expected: false + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1683:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1703:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(false) + + expect(received).toBe(expected) // Object.is equality + + Expected: false + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1720:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1737:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(false) + + expect(received).toBe(expected) // Object.is equality + + Expected: false + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1757:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) + + expect(received).toBe(expected) // Object.is equality + + Expected: true + Received: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1779:28) + + ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί update β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error + + expect(received).toBeInstanceOf(expected) + + Expected constructor: Error + + Received value has no prototype + Received value: undefined + + at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1794:27) + +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Test Suites: 1 failed, 1 passed, 2 total +Tests: 88 failed, 121 passed, 209 total +Snapshots: 0 total +Time: 3.043 s +Ran all test suites. +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... +Waiting for the debugger to disconnect... diff --git a/packages/indexeddb/tests/lib/DbHandler.test.ts b/packages/indexeddb/tests/lib/DbHandler.test.ts new file mode 100644 index 00000000..73886dbc --- /dev/null +++ b/packages/indexeddb/tests/lib/DbHandler.test.ts @@ -0,0 +1,83 @@ +import 'fake-indexeddb/auto'; +import DbHandler from '../../src/lib/DbHandler'; + +describe('DbHandler', () => { + describe('is a class', () => { + test(`GIVEN typeof DbHandler THEN returns function`, () => { + expect(typeof DbHandler).toBe('function'); + }); + + test('GIVEN typeof ...prototype THEN returns object', () => { + expect(typeof DbHandler.prototype).toBe('object'); + }); + }); + + describe('Can manipulate data.', () => { + const handler = new DbHandler(); + + beforeAll(async () => { + await handler.init(); + }); + + beforeEach(async () => { + await handler.clear(); + }); + + test('Can set and subsequently get data', async () => { + await handler.set('string', 'hello world'); + await handler.set('num', 420); + await handler.set('obj', { hello: 'world' }); + await handler.set('array', [1, 2, 3]); + expect(await handler.get('string')).toEqual('hello world'); + expect(await handler.get('num')).toEqual(420); + expect(await handler.get('obj')).toEqual({ hello: 'world' }); + expect(await handler.get('array')).toEqual([1, 2, 3]); + }); + + test('Can get all data', async () => { + expect(await handler.getAll()).toEqual({}); + await handler.set('string', 'hello world'); + await handler.set('num', 420); + await handler.set('obj', { hello: 'world' }); + await handler.set('array', [1, 2, 3]); + expect(await handler.getAll()).toEqual({ num: 420, obj: { hello: 'world' }, string: 'hello world', array: [1, 2, 3] }); + }); + + test('Can get all keys', async () => { + expect(await handler.getKeys()).toEqual([]); + await handler.set('string', 'hello world'); + await handler.set('num', 420); + await handler.set('obj', { hello: 'world' }); + await handler.set('array', [1, 2, 3]); + expect(await handler.getKeys()).toEqual(['array', 'num', 'obj', 'string']); + }); + + test('Can delete data', async () => { + await handler.set('string', 'hello world'); + await handler.delete('string'); + expect(await handler.get('string')).toBeUndefined(); + }); + + test('Can has data', async () => { + expect(await handler.has('string')).toEqual(false); + await handler.set('string', 'hello world'); + expect(await handler.has('string')).toEqual(true); + }); + + test('Can count data', async () => { + expect(await handler.count()).toEqual(0); + await handler.set('string', 'hello world'); + await handler.set('string2', 'hello world'); + await handler.set('string3', 'hello world'); + expect(await handler.count()).toEqual(3); + }); + + test('Can clear data', async () => { + await handler.set('string', 'hello world'); + await handler.set('string2', 'hello world'); + await handler.set('string3', 'hello world'); + await handler.clear(); + expect(await handler.count()).toEqual(0); + }); + }); +}); diff --git a/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts b/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts new file mode 100644 index 00000000..fb9960e1 --- /dev/null +++ b/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts @@ -0,0 +1,8 @@ +import { runProviderTest } from '@joshdb/provider'; +import 'fake-indexeddb/auto'; +import { IndexedDBProvider } from '../../src'; + +runProviderTest({ + providerConstructor: IndexedDBProvider, + providerOptions: {} +}); diff --git a/packages/indexeddb/tests/tsconfig.json b/packages/indexeddb/tests/tsconfig.json new file mode 100644 index 00000000..16409bb1 --- /dev/null +++ b/packages/indexeddb/tests/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "./build", + "tsBuildInfoFile": "./build/.tsbuildinfo", + "lib": ["DOM"] + }, + "include": ["./"], + "references": [ + { + "path": "../src" + } + ] +} diff --git a/packages/indexeddb/tsconfig.eslint.json b/packages/indexeddb/tsconfig.eslint.json new file mode 100644 index 00000000..23fb482d --- /dev/null +++ b/packages/indexeddb/tsconfig.eslint.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true + }, + "include": ["src", "tests"] +} diff --git a/packages/indexeddb/typedoc.json b/packages/indexeddb/typedoc.json new file mode 100644 index 00000000..308c2b62 --- /dev/null +++ b/packages/indexeddb/typedoc.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["src/index.ts"], + "json": "docs/api.json", + "tsconfig": "src/tsconfig.json", + "treatWarningsAsErrors": true +} diff --git a/yarn.lock b/yarn.lock index 540f22eb..ef8cd984 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,6 +1,3 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - __metadata: version: 6 cacheKey: 8 @@ -465,6 +462,66 @@ __metadata: languageName: node linkType: hard +"@favware/cliff-jumper@npm:^1.8.5, @favware/cliff-jumper@npm:^1.8.6": + version: 1.8.6 + resolution: "@favware/cliff-jumper@npm:1.8.6" + dependencies: + "@sapphire/result": ^2.4.0 + "@sapphire/utilities": ^3.9.2 + colorette: ^2.0.19 + commander: ^9.4.0 + conventional-changelog-angular: ^5.0.13 + conventional-recommended-bump: ^6.1.0 + js-yaml: ^4.1.0 + semver: ^7.3.7 + typescript: ^4.7.4 + bin: + cj: ./dist/cli.js + cliff-jumper: ./dist/cli.js + checksum: 088fe16d5bcc974a3a854042887ca3b4585d4afd62c687404fa8c305a7ebef5526069477734d01200cc8ff353c4575bb5a7e887be48e60de52f9d6771c43b5d4 + languageName: node + linkType: hard + +"@favware/cliff-jumper@npm:^1.8.5, @favware/cliff-jumper@npm:^1.8.7": + version: 1.8.7 + resolution: "@favware/cliff-jumper@npm:1.8.7" + dependencies: + "@favware/conventional-changelog-angular": ^5.0.15 + "@sapphire/result": ^2.6.4 + "@sapphire/utilities": 3.11.2 + colorette: ^2.0.20 + commander: ^10.0.1 + conventional-recommended-bump: ^6.1.0 + git-cliff: ^1.2.0 + js-yaml: ^4.1.0 + semver: ^7.5.1 + bin: + cj: ./dist/cli.js + cliff-jumper: ./dist/cli.js + checksum: 2c802a490dc9d2b39efd344056442533f55e1c1fb2cd9e472ccabd412446b783958c49ba58a928500e20c3ed2249d532d9f895e1cced486105ad2ac3442d31da + languageName: node + linkType: hard + +"@favware/cliff-jumper@npm:^2.0.1": + version: 2.0.1 + resolution: "@favware/cliff-jumper@npm:2.0.1" + dependencies: + "@favware/conventional-changelog-angular": ^5.0.15 + "@sapphire/result": ^2.6.4 + "@sapphire/utilities": 3.12.0 + colorette: ^2.0.20 + commander: ^10.0.1 + conventional-recommended-bump: ^7.0.1 + git-cliff: ^1.2.0 + js-yaml: ^4.1.0 + semver: ^7.5.1 + bin: + cj: ./dist/cli.js + cliff-jumper: ./dist/cli.js + checksum: 60f1f38ff5d66609054aee3f5bf477fe04783468aa45ce1b1b8c46efbed286fa0110fe81eaad4babe68c5483373931866c80fdf77db81cc0cbda24c8de339e71 + languageName: node + linkType: hard + "@favware/cliff-jumper@npm:^2.1.1": version: 2.1.1 resolution: "@favware/cliff-jumper@npm:2.1.1" @@ -522,7 +579,25 @@ __metadata: languageName: node linkType: hard -"@favware/rollup-type-bundler@npm:^1.0.11": +"@favware/rollup-type-bundler@npm:^1.0.10, @favware/rollup-type-bundler@npm:^1.0.9": + version: 1.0.10 + resolution: "@favware/rollup-type-bundler@npm:1.0.10" + dependencies: + "@sapphire/utilities": ^3.9.2 + colorette: ^2.0.19 + commander: ^9.4.0 + js-yaml: ^4.1.0 + rollup: ^2.78.1 + rollup-plugin-dts: ^4.2.2 + typescript: ^4.7.4 + bin: + rollup-type-bundler: ./dist/cli.js + rtb: ./dist/cli.js + checksum: f2f6b42d2cd5a67d1e9aabb25cfe925a00e922a2b17c0c0ae9b2f0bd574bbb2073e8e8824bbd5072fdf3a8f91c3eb6fbe2d582014222fd2ddeffbfa9950bf1fd + languageName: node + linkType: hard + +"@favware/rollup-type-bundler@npm:^1.0.11, @favware/rollup-type-bundler@npm:^1.0.9": version: 1.0.11 resolution: "@favware/rollup-type-bundler@npm:1.0.11" dependencies: @@ -604,6 +679,468 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/console@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + slash: ^3.0.0 + checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a + languageName: node + linkType: hard + +"@jest/console@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/console@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 + slash: ^3.0.0 + checksum: 83cf779973b4bf5a3ff66bf206b705f588e339627222bbd3c60c40a37d663f5ea36dce1a9642aebf703c3802e9669141c2c36e9477f2f3637f612b0cc5617498 + languageName: node + linkType: hard + +"@jest/core@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/core@npm:28.1.3" + dependencies: + "@jest/console": ^28.1.3 + "@jest/reporters": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.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: ^28.1.3 + jest-config: ^28.1.3 + jest-haste-map: ^28.1.3 + jest-message-util: ^28.1.3 + jest-regex-util: ^28.0.2 + jest-resolve: ^28.1.3 + jest-resolve-dependencies: ^28.1.3 + jest-runner: ^28.1.3 + jest-runtime: ^28.1.3 + jest-snapshot: ^28.1.3 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + jest-watcher: ^28.1.3 + micromatch: ^4.0.4 + pretty-format: ^28.1.3 + rimraf: ^3.0.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: cb79f34bafc4637e7130df12257f5b29075892a2be2c7f45c6d4c0420853e80b5dae11016e652530eb234f4c44c00910cdca3c2cd86275721860725073f7d9b4 + languageName: node + linkType: hard + +"@jest/core@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/core@npm:29.0.2" + dependencies: + "@jest/console": ^29.0.2 + "@jest/reporters": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 + "@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.0.0 + jest-config: ^29.0.2 + jest-haste-map: ^29.0.2 + jest-message-util: ^29.0.2 + jest-regex-util: ^29.0.0 + jest-resolve: ^29.0.2 + jest-resolve-dependencies: ^29.0.2 + jest-runner: ^29.0.2 + jest-runtime: ^29.0.2 + jest-snapshot: ^29.0.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 + jest-watcher: ^29.0.2 + micromatch: ^4.0.4 + pretty-format: ^29.0.2 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: b6c9bd3d3a54ba7fe1fcedf6ff78ece7ce56fda9346d63f886341d503757ff632c95d19765ae777fd01a0cf57665d0108747be7d9e250366c6980d3bddbce10b + languageName: node + linkType: hard + +"@jest/environment@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/environment@npm:28.1.3" + dependencies: + "@jest/fake-timers": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + jest-mock: ^28.1.3 + checksum: 14c496b84aef951df33128cea68988e9de43b2e9d62be9f9c4308d4ac307fa345642813679f80d0a4cedeb900cf6f0b6bb2b92ce089528e8721f72295fdc727f + languageName: node + linkType: hard + +"@jest/environment@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/environment@npm:29.0.2" + dependencies: + "@jest/fake-timers": ^29.0.2 + "@jest/types": ^29.0.2 + "@types/node": "*" + jest-mock: ^29.0.2 + checksum: 2ab0cd404e34f649c6534035f93f2a6660cd7b6ab136c85035af7923e4b0511fcc0b18123e69c9c5fc4ee4e4645f8af5efde5eb53c704f011e264ff34bcacb6e + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/expect-utils@npm:28.1.3" + dependencies: + jest-get-type: ^28.0.2 + checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/expect-utils@npm:29.0.2" + dependencies: + jest-get-type: ^29.0.0 + checksum: 12bb317b1dc0afe7cd0a0c4e1281dee6a7f1a5d74f85154e54bef79ad983da0c2adba9998b65d95bc8655bc0a535f566b0a83ea068bbdca33c33c1dd6fdae195 + languageName: node + linkType: hard + +"@jest/expect@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/expect@npm:28.1.3" + dependencies: + expect: ^28.1.3 + jest-snapshot: ^28.1.3 + checksum: 4197f6fdddc33dc45ba4e838f992fc61839c421d7aed0dfe665ef9c2f172bb1df8a8cac9cecee272b40e744a326da521d5e182709fe82a0b936055bfffa3b473 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/expect@npm:29.0.2" + dependencies: + expect: ^29.0.2 + jest-snapshot: ^29.0.2 + checksum: 03a4d3b5995d2c92c6a7b25ac914147e5cf325b5e054f7364ea8d879da2b40d7c7e1e941dcf65c7f0f38805e4dc83eb861d309bbf4e727f99f41f89b9dcb9185 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/fake-timers@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@sinonjs/fake-timers": ^9.1.2 + "@types/node": "*" + jest-message-util: ^28.1.3 + jest-mock: ^28.1.3 + jest-util: ^28.1.3 + checksum: cec14d5b14913a54dce64a62912c5456235f5d90b509ceae19c727565073114dae1aaf960ac6be96b3eb94789a3a758b96b72c8fca7e49a6ccac415fbc0321e1 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/fake-timers@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 + "@sinonjs/fake-timers": ^9.1.2 + "@types/node": "*" + jest-message-util: ^29.0.2 + jest-mock: ^29.0.2 + jest-util: ^29.0.2 + checksum: 995b76a099707e91b0851c7c52d91beed3b8bbedca28faf88ff257af7f17d5e752e0fd901676fe2db0d917491b9557d6ca1a1a07ad992b02346275af7cafdd18 + languageName: node + linkType: hard + +"@jest/globals@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/globals@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/expect": ^28.1.3 + "@jest/types": ^28.1.3 + checksum: 3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd + languageName: node + linkType: hard + +"@jest/globals@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/globals@npm:29.0.2" + dependencies: + "@jest/environment": ^29.0.2 + "@jest/expect": ^29.0.2 + "@jest/types": ^29.0.2 + jest-mock: ^29.0.2 + checksum: becea3f7fef9a6bf45d1f9cb280ab590c03bdd07e6276fc9aa99ff0800fae2fd9030f13dd1f18192c084b48871e33accfaf5e88ec9903bd727df9b0965356bcd + languageName: node + linkType: hard + +"@jest/reporters@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/reporters@npm:28.1.3" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@jridgewell/trace-mapping": ^0.3.13 + "@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: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + jest-worker: ^28.1.3 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + terminal-link: ^2.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: a7440887ce837922cbeaa64c3232eb48aae02aa9123f29fc4280ad3e1afe4b35dcba171ba1d5fd219037c396c5152d9c2d102cff1798dd5ae3bd33ac4759ae0a + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/reporters@npm:29.0.2" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 + "@jridgewell/trace-mapping": ^0.3.15 + "@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: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 + jest-worker: ^29.0.2 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + terminal-link: ^2.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: e5378e0d6ea30d9a1d5fa3126638eae7316ecfdf67fa95e3449b6698c73c1437a7565dbffaf93becc4d6647f3042db6497d77c10431e1f492b33f1fb7c3b3dc0 + languageName: node + linkType: hard + +"@jest/schemas@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/schemas@npm:28.1.3" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + +"@jest/source-map@npm:^28.1.2": + version: 28.1.2 + resolution: "@jest/source-map@npm:28.1.2" + dependencies: + "@jridgewell/trace-mapping": ^0.3.13 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/source-map@npm:29.0.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: dd97bc5826cf68d6eb5565383816332f800476232fd12800bd027a259cbf3ef216f1633405f3ad0861dde3b12a7886301798c078b334f6d3012044d43abcf4f6 + languageName: node + linkType: hard + +"@jest/test-result@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/test-result@npm:28.1.3" + dependencies: + "@jest/console": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/test-result@npm:29.0.2" + dependencies: + "@jest/console": ^29.0.2 + "@jest/types": ^29.0.2 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: be375eb8c2daf6dba46434a8a0339ee1a0d08c6c8c2ad2062b6c60a310bb6dc8242a7cfdec1536e883a0016889d159b0ddb909772f13b10e8bd45b7322aeabde + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/test-sequencer@npm:28.1.3" + dependencies: + "@jest/test-result": ^28.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + slash: ^3.0.0 + checksum: 13f8905e6d1ec8286694146f7be3cf90eff801bbdea5e5c403e6881444bb390ed15494c7b9948aa94bd7e9c9a851e0d3002ed6e7371d048b478596e5b23df953 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/test-sequencer@npm:29.0.2" + dependencies: + "@jest/test-result": ^29.0.2 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.0.2 + slash: ^3.0.0 + checksum: 718b839eb711f660e44e585a8cc859650b33f32622710cd7bc4ee91fab9a35775fb271faaf6dde24012af062c8831a1ec239224134b99d9b913bb06ea07fb4f9 + languageName: node + linkType: hard + +"@jest/transform@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/transform@npm:28.1.3" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^28.1.3 + "@jridgewell/trace-mapping": ^0.3.13 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^1.4.0 + fast-json-stable-stringify: ^2.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + jest-regex-util: ^28.0.2 + jest-util: ^28.1.3 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.1 + checksum: dadf618936e0aa84342f07f532801d5bed43cdf95d1417b929e4f8782c872cff1adc84096d5a287a796d0039a2691c06d8450cce5a713a8b52fbb9f872a1e760 + languageName: node + linkType: hard + +"@jest/transform@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/transform@npm:29.0.2" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.0.2 + "@jridgewell/trace-mapping": ^0.3.15 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^1.4.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.0.2 + jest-regex-util: ^29.0.0 + jest-util: ^29.0.2 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.1 + checksum: 4a8fdd6e7fc48b0d211912428e0731027cc653507c05040b974a338d06b53238a2e1629dbd13a196d9562983291b2e0fd80790514fb2b8e80557cd33437e6be1 + languageName: node + linkType: hard + +"@jest/types@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/types@npm:28.1.3" + dependencies: + "@jest/schemas": ^28.1.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 + checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 + languageName: node + linkType: hard + +"@jest/types@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/types@npm:29.0.2" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: f093f4548f8022f5ac9d1edf712edbb5c8edb101017f4afd95b9f9eb978328d099dcb77e2f1893a6dfeb9a7dfdd6cc589b2d83829490cee7e9afa9166c2945bd + languageName: node + linkType: hard + "@joshdb/eslint-config@npm:1.1.0-next.a699598.0": version: 1.1.0-next.a699598.0 resolution: "@joshdb/eslint-config@npm:1.1.0-next.a699598.0" @@ -620,6 +1157,21 @@ __metadata: languageName: node linkType: hard +"@joshdb/indexeddb@workspace:packages/indexeddb": + version: 0.0.0-use.local + resolution: "@joshdb/indexeddb@workspace:packages/indexeddb" + dependencies: + "@favware/cliff-jumper": ^1.8.5 + "@favware/rollup-type-bundler": ^1.0.9 + "@joshdb/provider": 1.1.0-next.24ef775.0 + fake-indexeddb: ^4.0.0 + jest: ^28.1.3 + property-helpers: ^1.1.0 + typedoc: ^0.23.9 + typedoc-json-parser: ^2.0.1 + languageName: unknown + linkType: soft + "@joshdb/json@workspace:packages/json": version: 0.0.0-use.local resolution: "@joshdb/json@workspace:packages/json" @@ -710,6 +1262,33 @@ __metadata: languageName: unknown linkType: soft +"@joshdb/provider@npm:1.1.0-next.24ef775.0": + version: 1.1.0-next.24ef775.0 + resolution: "@joshdb/provider@npm:1.1.0-next.24ef775.0" + dependencies: + "@sapphire/utilities": ^3.7.0 + checksum: 48f9395122d299687aee65afdccfe3f7389fc11a0a96a1b805fce6e5ff393c7fe9ba114ae668d7c380b5e20451513664248e77d4d431dded012593b89c38b0b7 + languageName: node + linkType: hard + +"@joshdb/provider@npm:1.1.0-next.98baf42.0": + version: 1.1.0-next.98baf42.0 + resolution: "@joshdb/provider@npm:1.1.0-next.98baf42.0" + dependencies: + "@sapphire/utilities": ^3.8.0 + checksum: 3328afc7b362dfa1bf36e0d6aa22bf34464c236f5cc93606d7058f3dd786922e6ec8335a9bb9eeb27915d4af107eb5a6d174ab0d7bc4d27697677689af3dc62d + languageName: node + linkType: hard + +"@joshdb/provider@npm:1.1.0-next.ffebf9f.0": + version: 1.1.0-next.ffebf9f.0 + resolution: "@joshdb/provider@npm:1.1.0-next.ffebf9f.0" + dependencies: + "@sapphire/utilities": ^3.7.0 + checksum: 48f9395122d299687aee65afdccfe3f7389fc11a0a96a1b805fce6e5ff393c7fe9ba114ae668d7c380b5e20451513664248e77d4d431dded012593b89c38b0b7 + languageName: node + linkType: hard + "@joshdb/provider@npm:2.0.0-next.095d141.0": version: 2.0.0-next.095d141.0 resolution: "@joshdb/provider@npm:2.0.0-next.095d141.0" @@ -720,11 +1299,30 @@ __metadata: languageName: node linkType: hard -"@joshdb/provider@npm:2.0.0-next.a699598.0": - version: 2.0.0-next.a699598.0 - resolution: "@joshdb/provider@npm:2.0.0-next.a699598.0" +"@joshdb/provider@npm:2.0.0-next.865d0de.0": + version: 2.0.0-next.865d0de.0 + resolution: "@joshdb/provider@npm:2.0.0-next.865d0de.0" dependencies: - "@sapphire/utilities": ^3.11.2 + "@favware/cliff-jumper": ^2.0.1 + "@favware/rollup-type-bundler": ^1.0.11 + "@joshdb/provider": 2.0.0-next.a699598.0 + "@sapphire/snowflake": ^3.5.1 + "@sapphire/utilities": ^3.11.2 + "@vitest/coverage-v8": ^0.32.0 + better-serialize: ^1.0.0 + postgres: ^3.3.5 + property-helpers: ^2.0.0 + typedoc: ^0.24.8 + typedoc-json-parser: ^8.1.2 + vitest: ^0.32.0 + languageName: unknown + linkType: soft + +"@joshdb/provider@npm:2.0.0-next.a699598.0": + version: 2.0.0-next.a699598.0 + resolution: "@joshdb/provider@npm:2.0.0-next.a699598.0" + dependencies: + "@sapphire/utilities": ^3.11.2 reflect-metadata: ^0.1.13 checksum: 38585c16f83a7fe433102c0cbfcccfe1c5d42c8fbad2fd1d9d41d84ba08624637ef150a26cd434b4b5f6acaf710ee0c6418da7c4717f773f3a5dc5f3fb0f60c2 languageName: node @@ -831,6 +1429,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.15 + resolution: "@jridgewell/trace-mapping@npm:0.3.15" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" @@ -1046,6 +1654,45 @@ __metadata: languageName: node linkType: hard +"@sapphire/utilities@npm:^3.7.0, @sapphire/utilities@npm:^3.9.3": + version: 3.9.3 + resolution: "@sapphire/utilities@npm:3.9.3" + checksum: 9f3f977fd5c0677d5f79136e9cb68ade3317cfba3e87bb58689f4af68233a807af34eb6092ad262c946d5eaf5c4a76cd534b0b395ebbaf0f0912dd80e174f912 + languageName: node + linkType: hard + +"@sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.2": + version: 3.9.2 + resolution: "@sapphire/utilities@npm:3.9.2" + checksum: eeef33b03b802e931ada752b8c335cc8bde4017f8029b577b0247e3f3d2b57bf5f1936b2c8c29aef5e2c6975d9b162363e4c5c434c4fead0bba74253d067b4d9 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.34 + resolution: "@sinclair/typebox@npm:0.24.34" + checksum: 35adcc7698fe751951e75fefe748a1d6e928afa3e52c153d1984a9d47c2a4f39e89f6adf727daef5cc12a58c71c2a0f63e3d88d105e4435252cfb68231518687 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^1.7.0": + version: 1.8.3 + resolution: "@sinonjs/commons@npm:1.8.3" + dependencies: + type-detect: 4.0.8 + checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^9.1.2": + version: 9.1.2 + resolution: "@sinonjs/fake-timers@npm:9.1.2" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -1767,6 +2414,123 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-jest@npm:28.1.3" + dependencies: + "@jest/transform": ^28.1.3 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^28.1.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 57ccd2296e1839687b5df2fd138c3d00717e0369e385254b012ccd4ee70e75f5d5c8e6cfcdf92d155015b468cfebb847b38e69bb5805d8aaf730e20575127cc6 + languageName: node + linkType: hard + +"babel-jest@npm:^29.0.2": + version: 29.0.2 + resolution: "babel-jest@npm:29.0.2" + dependencies: + "@jest/transform": ^29.0.2 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.0.2 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 33bd0b002237b1d015ee015b16f659660bf80880409b190c0e78132e7cc2a4b3443805ced9c40690d613ba425d18b4f241ffe406ed6878d4394b68e01519ede8 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + 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 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-plugin-jest-hoist@npm:28.1.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 648d89f9d80f6450ce7e50d0c32eb91b7f26269b47c3e37aaf2e0f2f66a980978345bd6b8c9b8c3aa6a8252ad2bc2c9fb50630e9895622c9a0972af5f70ed20e + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.0.2": + version: 29.0.2 + resolution: "babel-plugin-jest-hoist@npm:29.0.2" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: e02ab2c56b471940bc147d75808f6fb5d18b81382088beb36088d2fee8c5f9699b2a814a98884539191d43871d66770928e09c268c095ec39aad5766c3337f34 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + 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 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-preset-jest@npm:28.1.3" + dependencies: + babel-plugin-jest-hoist: ^28.1.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.0.2": + version: 29.0.2 + resolution: "babel-preset-jest@npm:29.0.2" + dependencies: + babel-plugin-jest-hoist: ^29.0.2 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 485db525f4cd38c02c29edcd7240dd232e8d6dbcaef88bfa4765ad3057ed733512f1b7aad06f4bf9661afefeb0ada2c4e259d130113b0289d7db574f82bbd4f8 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -1774,6 +2538,13 @@ __metadata: languageName: node linkType: hard +"base64-arraybuffer-es6@npm:^0.7.0": + version: 0.7.0 + resolution: "base64-arraybuffer-es6@npm:0.7.0" + checksum: 6d2fd114df49201b476cea5d470504e5d4e8c4cd42544152b312c9bdcb824313086fe83f1ffc34262e9e276b82d46aefc6e63bb85553f016932061137b355cdf + languageName: node + linkType: hard + "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -2519,6 +3290,15 @@ __metadata: languageName: node linkType: hard +"domexception@npm:^1.0.1": + version: 1.0.1 + resolution: "domexception@npm:1.0.1" + dependencies: + webidl-conversions: ^4.0.2 + checksum: f564a9c0915dcb83ceefea49df14aaed106b1468fbe505119e8bcb0b77e242534f3aba861978537c0fc9dc6f35b176d0ffc77b3e342820fb27a8f215e7ae4d52 + languageName: node + linkType: hard + "dot-prop@npm:^5.1.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -2947,6 +3727,13 @@ __metadata: languageName: node linkType: hard +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + "expand-template@npm:^2.0.3": version: 2.0.3 resolution: "expand-template@npm:2.0.3" @@ -2954,6 +3741,41 @@ __metadata: languageName: node linkType: hard +"expect@npm:^28.0.0, expect@npm:^28.1.3": + version: 28.1.3 + resolution: "expect@npm:28.1.3" + dependencies: + "@jest/expect-utils": ^28.1.3 + jest-get-type: ^28.0.2 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d + languageName: node + linkType: hard + +"expect@npm:^29.0.2": + version: 29.0.2 + resolution: "expect@npm:29.0.2" + dependencies: + "@jest/expect-utils": ^29.0.2 + jest-get-type: ^29.0.0 + jest-matcher-utils: ^29.0.2 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 + checksum: 1e2a3707cd27c3485cb2ed0f1793cfca9efa67ec1e18ca3dc36c5d09e7219ba05e948d3e91bdaa01cc2f8cf1def5711ca0e484ba665e755f9d0aeba4884eab83 + languageName: node + linkType: hard + +"fake-indexeddb@npm:^4.0.0": + version: 4.0.0 + resolution: "fake-indexeddb@npm:4.0.0" + dependencies: + realistic-structured-clone: ^3.0.0 + checksum: 6f61d5ed77915cbb4b5c22f030f7017318edc84dbde0b24bd4e82fb4c311f30d02f890cb144aee6e7f296a917f3393ae3d989a28af6a304a3c2b2471ca7de151 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -3688,150 +4510,1041 @@ __metadata: languageName: node linkType: hard -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: ^1.0.0 + checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.1": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.5": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + languageName: node + linkType: hard + +"jackspeak@npm:^2.0.3": + version: 2.2.1 + resolution: "jackspeak@npm:2.2.1" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df + languageName: node + linkType: hard + +"jest-changed-files@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-changed-files@npm:28.1.3" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: c78af14a68b9b19101623ae7fde15a2488f9b3dbe8cca12a05c4a223bc9bfd3bf41ee06830f20fb560c52434435d6153c9cc6cf450b1f7b03e5e7f96a953a6a6 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-changed-files@npm:29.0.0" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: 5642ace8cd1e7e4f9e3ee423b97d0b018b00ad85ea7e5864592b4657e8500ef56ec50d2189229b912223046bbf31c9196c8ef2442a917be9726a5911d40db1b2 + languageName: node + linkType: hard + +"jest-circus@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-circus@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/expect": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^28.1.3 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-runtime: ^28.1.3 + jest-snapshot: ^28.1.3 + jest-util: ^28.1.3 + p-limit: ^3.1.0 + pretty-format: ^28.1.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: b635e60a9c92adaefc3f24def8eba691e7c2fdcf6c9fa640cddf2eb8c8b26ee62eab73ebb88798fd7c52a74c1495a984e39b748429b610426f02e9d3d56e09b2 + languageName: node + linkType: hard + +"jest-circus@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-circus@npm:29.0.2" + dependencies: + "@jest/environment": ^29.0.2 + "@jest/expect": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/types": ^29.0.2 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.0.2 + jest-matcher-utils: ^29.0.2 + jest-message-util: ^29.0.2 + jest-runtime: ^29.0.2 + jest-snapshot: ^29.0.2 + jest-util: ^29.0.2 + p-limit: ^3.1.0 + pretty-format: ^29.0.2 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 334a74c067a8d42eb37f059a5279c58a2d10134530e4996c4d87d8bc7849bd1a141f683b6599735eac8fe30bee3ad18f2233881d0bf2363282a9f596c9f9abab + languageName: node + linkType: hard + +"jest-cli@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-cli@npm:28.1.3" + dependencies: + "@jest/core": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/types": ^28.1.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^28.1.3 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: fb424576bf38346318daddee3fcc597cd78cb8dda1759d09c529d8ba1a748f2765c17b00671072a838826e59465a810ff8a232bc6ba2395c131bf3504425a363 + languageName: node + linkType: hard + +"jest-cli@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-cli@npm:29.0.2" + dependencies: + "@jest/core": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/types": ^29.0.2 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^29.0.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 765ca44584279d5ee6fe053ed39a298f6b48d98732e80657081e8ca086927ad5c6fb3ac15a878a2929e100982f3c1bffaf02e3f5966bf41167822fc3954b64bc + languageName: node + linkType: hard + +"jest-config@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-config@npm:28.1.3" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^28.1.3 + "@jest/types": ^28.1.3 + babel-jest: ^28.1.3 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^28.1.3 + jest-environment-node: ^28.1.3 + jest-get-type: ^28.0.2 + jest-regex-util: ^28.0.2 + jest-resolve: ^28.1.3 + jest-runner: ^28.1.3 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^28.1.3 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: ddabffd3a3a8cb6c2f58f06cdf3535157dbf8c70bcde3e5c3de7bee6a8d617840ffc8cffb0083e38c6814f2a08c225ca19f58898efaf4f351af94679f22ce6bc + languageName: node + linkType: hard + +"jest-config@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-config@npm:29.0.2" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.0.2 + "@jest/types": ^29.0.2 + babel-jest: ^29.0.2 + 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.0.2 + jest-environment-node: ^29.0.2 + jest-get-type: ^29.0.0 + jest-regex-util: ^29.0.0 + jest-resolve: ^29.0.2 + jest-runner: ^29.0.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.0.2 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 899a5d2996f9e6b3520dcae49283b85bbddb65dcdf3f08fa97dc8da6b2be410531519e53be825185904eae6960d7055f8082d02485fa1dbb5c3781ebfcfda938 + languageName: node + linkType: hard + +"jest-diff@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-diff@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^28.1.1 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 + languageName: node + linkType: hard + +"jest-diff@npm:^29.0.0": + version: 29.0.1 + resolution: "jest-diff@npm:29.0.1" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.0.0 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.1 + checksum: f6f80ab9af14dee8046342d074ab64b1c0c4eb5d4a5d71aec0c71eba0192be1864fc5c270a33c6163184561b1fe516c0e2ecd3f21b267340cf710bab61441b3d + languageName: node + linkType: hard + +"jest-diff@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-diff@npm:29.0.2" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.0.0 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.2 + checksum: fbf4f4a2502b4a5b46233fbcd77cc664de452d1612ebad670c3a4d1920985b16abdef3ebe7ce692efc3c7da8312f1b7253a4bb9027e98db1fb3c92cd53324aa9 + languageName: node + linkType: hard + +"jest-docblock@npm:^28.1.1": + version: 28.1.1 + resolution: "jest-docblock@npm:28.1.1" + dependencies: + detect-newline: ^3.0.0 + checksum: 22fca68d988ecb2933bc65f448facdca85fc71b4bd0a188ea09a5ae1b0cc3a049a2a6ec7e7eaa2542c1d5cb5e5145e420a3df4fa280f5070f486c44da1d36151 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-docblock@npm:29.0.0" + dependencies: + detect-newline: ^3.0.0 + checksum: b4f81426cc0dffb05b873d3cc373a1643040be62d72cce4dfed499fbcb57c55ac02c44af7aba5e7753915ff5e85b8d6030456981156eaea20be1cb57d2719904 + languageName: node + linkType: hard + +"jest-each@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-each@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + chalk: ^4.0.0 + jest-get-type: ^28.0.2 + jest-util: ^28.1.3 + pretty-format: ^28.1.3 + checksum: 5c5b8ccb1484e58b027bea682cfa020a45e5bf5379cc7c23bdec972576c1dc3c3bf03df2b78416cefc1a58859dd33b7cf5fff54c370bc3c0f14a3e509eb87282 + languageName: node + linkType: hard + +"jest-each@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-each@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 + chalk: ^4.0.0 + jest-get-type: ^29.0.0 + jest-util: ^29.0.2 + pretty-format: ^29.0.2 + checksum: e64222fd050cbb057a8043c2546615f7ed0da22c59f54da0762e717b72489c686bf0f3be43973d74e50f0245dd4d39dcdb86b3553335fbe70e9684f73f3cf99d + languageName: node + linkType: hard + +"jest-environment-node@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-environment-node@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/fake-timers": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + jest-mock: ^28.1.3 + jest-util: ^28.1.3 + checksum: 1048fe306a6a8b0880a4c66278ebb57479f29c12cff89aab3aa79ab77a8859cf17ab8aa9919fd21c329a7db90e35581b43664e694ad453d5b04e00f3c6420469 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-environment-node@npm:29.0.2" + dependencies: + "@jest/environment": ^29.0.2 + "@jest/fake-timers": ^29.0.2 + "@jest/types": ^29.0.2 + "@types/node": "*" + jest-mock: ^29.0.2 + jest-util: ^29.0.2 + checksum: 7c95aa56b9b24e859e03e0625f55e2b44c99629c7a18762681066c0a837e176405cd9bb81353b32838e2f70f4620259b2cbfb49cda36bdd1276e58e4fb384386 + languageName: node + linkType: hard + +"jest-extended@npm:^3.1.0": + version: 3.1.0 + resolution: "jest-extended@npm:3.1.0" + dependencies: + jest-diff: ^29.0.0 + jest-get-type: ^29.0.0 + peerDependencies: + jest: ">=27.2.5" + checksum: 1656670f7c58419f2ab1ff177db03b79e974faae88b4bdeaa4188fe962a623d77a78df0f9f06dc8a8a945c6e8d081fa48a8d3cf220434cc2ef7831dfa4ee9413 + languageName: node + linkType: hard + +"jest-get-type@npm:^28.0.2": + version: 28.0.2 + resolution: "jest-get-type@npm:28.0.2" + checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd + languageName: node + linkType: hard + +"jest-get-type@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-get-type@npm:29.0.0" + checksum: 9abdd11d69788963a92fb9d813a7b887654ecc8f3a3c8bf83166d33aaf4d57ed380e74ab8ef106f57565dd235446ca6ebc607679f0c516c4633e6d09f0540a2b + languageName: node + linkType: hard + +"jest-haste-map@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-haste-map@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^28.0.2 + jest-util: ^28.1.3 + jest-worker: ^28.1.3 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: d05fdc108645fc2b39fcd4001952cc7a8cb550e93494e98c1e9ab1fc542686f6ac67177c132e564cf94fe8f81503f3f8db8b825b9b713dc8c5748aec63ba4688 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-haste-map@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.0.0 + jest-util: ^29.0.2 + jest-worker: ^29.0.2 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df + languageName: node + linkType: hard + +"jest-leak-detector@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-leak-detector@npm:28.1.3" + dependencies: + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: 2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-leak-detector@npm:29.0.2" + dependencies: + jest-get-type: ^29.0.0 + pretty-format: ^29.0.2 + checksum: bc10d75bc6dccf82f47d1d77bb90875726327aff1b3a9a095f063d84be550cb401a287d58effd363b934ecc3ad8f2e555cad476e5435fef13dc82fee2e1367b6 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-matcher-utils@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + jest-diff: ^28.1.3 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-matcher-utils@npm:29.0.2" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.0.2 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.2 + checksum: bc266a28e4d0035ae6e3c8e494056cf8253a128b93447114b7fdb9d311520a999bc83e6f6d445f3b57f67236af99e916dca9acbfb0a93f437b89ec586f711a0d + languageName: node + linkType: hard + +"jest-message-util@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-message-util@npm:28.1.3" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^28.1.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^28.1.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-message-util@npm:29.0.2" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.0.2 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.0.2 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: f75215e1a022b3063bbe5757db5c87d3dc0c0cc43a5afcfbb15f137872d51aa98e4238c0c77302ef1e2296701660e338510e644abde2d0e3ae42f62d4bad7abd + languageName: node + linkType: hard + +"jest-mock@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-mock@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/node": "*" + checksum: a573bf8e5f12f4c29c661266c31b5c6b69a28d3195b83049983bce025b2b1a0152351567e89e63b102ef817034c2a3aa97eda4e776f3bae2aee54c5765573aa7 + languageName: node + linkType: hard + +"jest-mock@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-mock@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 + "@types/node": "*" + checksum: e4d2fe7e254fbb0dfa4f0b9278a9dba3db3c928bdfaf1c05dcb5afb8cacbb31070df896c643c9215a43bf0837181c5d1fd523af6ed3bf637ef225aaa5e6205a4 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.2 + resolution: "jest-pnp-resolver@npm:1.2.2" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 + languageName: node + linkType: hard + +"jest-regex-util@npm:^28.0.2": + version: 28.0.2 + resolution: "jest-regex-util@npm:28.0.2" + checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add languageName: node linkType: hard -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 +"jest-regex-util@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-regex-util@npm:29.0.0" + checksum: dce16394c357213008e6f84f2288f77c64bba59b7cb48ea614e85c5aae036a7e46dbfd1f45aa08180b7e7c576102bf4f8f0ff8bc60fb9721fb80874adc3ae0ea languageName: node linkType: hard -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d +"jest-resolve-dependencies@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-resolve-dependencies@npm:28.1.3" + dependencies: + jest-regex-util: ^28.0.2 + jest-snapshot: ^28.1.3 + checksum: 4eea9ec33aefc1c71dc5956391efbcc7be76bda986b366ab3931d99c5f7ed01c9ebd7520e405ea2c76e1bb2c7ce504be6eca2b9831df16564d1e625500f3bfe7 languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" +"jest-resolve-dependencies@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-resolve-dependencies@npm:29.0.2" dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + jest-regex-util: ^29.0.0 + jest-snapshot: ^29.0.2 + checksum: 98107bd4fc651a5ff80531e44aa49f9c5216e5ed46ebb568ffcd2e2f8632d05f4678ce09fbce6ab2a71df3c240f5022d826092ee5840f000946f072c8a83aa3c languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 +"jest-resolve@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-resolve@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + jest-pnp-resolver: ^1.2.2 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + resolve: ^1.20.0 + resolve.exports: ^1.1.0 + slash: ^3.0.0 + checksum: df61a490c93f4f4cf52135e43d6a4fcacb07b0b7d4acc6319e9289529c1d14f2d8e1638e095dbf96f156834802755e38db68caca69dba21a3261ee711d4426b6 languageName: node linkType: hard -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a +"jest-resolve@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-resolve@npm:29.0.2" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.0.2 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 + resolve: ^1.20.0 + resolve.exports: ^1.1.0 + slash: ^3.0.0 + checksum: 857a79b1c4e8d6ddca54f318d2612a8cae528f6749e8e612e7b1e1213482a5abd0b89551c842f5193b3cf06544fc67535a533f07295eb69d6991bf6cf8d58423 languageName: node linkType: hard -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 +"jest-runner@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-runner@npm:28.1.3" + dependencies: + "@jest/console": ^28.1.3 + "@jest/environment": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.10.2 + graceful-fs: ^4.2.9 + jest-docblock: ^28.1.1 + jest-environment-node: ^28.1.3 + jest-haste-map: ^28.1.3 + jest-leak-detector: ^28.1.3 + jest-message-util: ^28.1.3 + jest-resolve: ^28.1.3 + jest-runtime: ^28.1.3 + jest-util: ^28.1.3 + jest-watcher: ^28.1.3 + jest-worker: ^28.1.3 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 32405cd970fa6b11e039192dae699fd1bcc6f61f67d50605af81d193f24dd4373b25f5fcc1c571a028ec1b02174e8a4b6d0d608772063fb06f08a5105693533b + languageName: node + linkType: hard + +"jest-runner@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-runner@npm:29.0.2" + dependencies: + "@jest/console": ^29.0.2 + "@jest/environment": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.10.2 + graceful-fs: ^4.2.9 + jest-docblock: ^29.0.0 + jest-environment-node: ^29.0.2 + jest-haste-map: ^29.0.2 + jest-leak-detector: ^29.0.2 + jest-message-util: ^29.0.2 + jest-resolve: ^29.0.2 + jest-runtime: ^29.0.2 + jest-util: ^29.0.2 + jest-watcher: ^29.0.2 + jest-worker: ^29.0.2 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: e1a74ef52156b4ce41119db4467df868a4bcba467f2a2fa1e0a8cf63866ccb1e5f49341c7e12bb4f3f6a06d5e0ae0f359649f295cf6b6a19b70e41ee314278d4 + languageName: node + linkType: hard + +"jest-runtime@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-runtime@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/fake-timers": ^28.1.3 + "@jest/globals": ^28.1.3 + "@jest/source-map": ^28.1.2 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + execa: ^5.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + jest-message-util: ^28.1.3 + jest-mock: ^28.1.3 + jest-regex-util: ^28.0.2 + jest-resolve: ^28.1.3 + jest-snapshot: ^28.1.3 + jest-util: ^28.1.3 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: b17c40af858e74dafa4f515ef3711c1e9ef3d4ad7d74534ee0745422534bc04fd166d4eceb62a3aa7dc951505d6f6d2a81d16e90bebb032be409ec0500974a36 languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 +"jest-runtime@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-runtime@npm:29.0.2" + dependencies: + "@jest/environment": ^29.0.2 + "@jest/fake-timers": ^29.0.2 + "@jest/globals": ^29.0.2 + "@jest/source-map": ^29.0.0 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 + "@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.0.2 + jest-message-util: ^29.0.2 + jest-mock: ^29.0.2 + jest-regex-util: ^29.0.0 + jest-resolve: ^29.0.2 + jest-snapshot: ^29.0.2 + jest-util: ^29.0.2 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: 0b0a1a23ae2b2ca9e1b4dacd45bc2ae66fb47dd0e5cbea275398e0eb6b892c784546011fad59bd7572998b1b1442cff30bdbe9e02493c1bbc5d6be01cec1c5f8 + languageName: node + linkType: hard + +"jest-snapshot@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-snapshot@npm:28.1.3" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^28.1.3 + graceful-fs: ^4.2.9 + jest-diff: ^28.1.3 + jest-get-type: ^28.0.2 + jest-haste-map: ^28.1.3 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + natural-compare: ^1.4.0 + pretty-format: ^28.1.3 + semver: ^7.3.5 + checksum: 2a46a5493f1fb50b0a236a21f25045e7f46a244f9f3ae37ef4fbcd40249d0d68bb20c950ce77439e4e2cac985b05c3061c90b34739bf6069913a1199c8c716e1 + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-snapshot@npm:29.0.2" + 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.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 + "@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.0.2 + graceful-fs: ^4.2.9 + jest-diff: ^29.0.2 + jest-get-type: ^29.0.0 + jest-haste-map: ^29.0.2 + jest-matcher-utils: ^29.0.2 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 + natural-compare: ^1.4.0 + pretty-format: ^29.0.2 + semver: ^7.3.5 + checksum: a5cc84626b36b3cd649c11fac96f81dcc9f1b24b7969418d1a8c7c3ce792a90cc013e6077b38daf807de1f37b2eee8223c390f7c7a34517935896807f3b9529b languageName: node linkType: hard -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 +"jest-util@npm:^28.0.0, jest-util@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-util@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 +"jest-util@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-util@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: ee7a264ac9968f5c2fc6d79b7b76c8df4b22762e3c45c92a35e66e81b9fb45c341b03e5e18d8c4de4cd19ab7faf70a67ec419e6b57b5dfc61b84e96719649838 languageName: node linkType: hard -"is-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "is-stream@npm:3.0.0" - checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 +"jest-validate@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-validate@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^28.0.2 + leven: ^3.1.0 + pretty-format: ^28.1.3 + checksum: 95e0513b3803c3372a145cda86edbdb33d9dfeaa18818176f2d581e821548ceac9a179f065b6d4671a941de211354efd67f1fff8789a4fb89962565c85f646db languageName: node linkType: hard -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" +"jest-validate@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-validate@npm:29.0.2" dependencies: - text-extensions: ^1.0.0 - checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 + "@jest/types": ^29.0.2 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.0.0 + leven: ^3.1.0 + pretty-format: ^29.0.2 + checksum: 6d33bee7209aa735257e26b2eb887f3fd8fc4c6a072e52e97c3a51d4a90797e657dbe88a4df6de717aae3509e9979398f3b2ab2d7be5b26c30eaaa0dd0783b46 languageName: node linkType: hard -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 +"jest-watcher@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-watcher@npm:28.1.3" + dependencies: + "@jest/test-result": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.10.2 + jest-util: ^28.1.3 + string-length: ^4.0.1 + checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 +"jest-watcher@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-watcher@npm:29.0.2" + dependencies: + "@jest/test-result": ^29.0.2 + "@jest/types": ^29.0.2 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.10.2 + jest-util: ^29.0.2 + string-length: ^4.0.1 + checksum: 3e2c02e545facffbe8e0b845e8e6d21db893aa9ed706d6ce9673553c86757dbb8aec5cbe37fb2e17599d0165b08f471fe9194d906d4251c1729e5edb4f45af9a languageName: node linkType: hard -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" +"jest-worker@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-worker@npm:28.1.3" dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^3.0.0 - supports-color: ^7.1.0 - checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca languageName: node linkType: hard -"istanbul-lib-source-maps@npm:^4.0.1": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" +"jest-worker@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-worker@npm:29.0.2" dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: e67fd41a25208235e27af4ad6d4b6d7a3f4eac45e4a27ba60f6c9a5ca85e0367bfcfb54d1425710b11b5a8342cf64ab8745e02a94dca106ff6d20144e9e6e175 languageName: node linkType: hard -"istanbul-reports@npm:^3.1.5": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" +"jest@npm:^28.1.3": + version: 28.1.3 + resolution: "jest@npm:28.1.3" dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + "@jest/core": ^28.1.3 + "@jest/types": ^28.1.3 + import-local: ^3.0.2 + jest-cli: ^28.1.3 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: b9dcb542eb7c16261c281cdc2bf37155dbb3f1205bae0b567f05051db362c85ddd4b765f126591efb88f6d298eb10336d0aa6c7d5373b4d53f918137a9a70182 languageName: node linkType: hard -"jackspeak@npm:^2.0.3": - version: 2.2.1 - resolution: "jackspeak@npm:2.2.1" +"jest@npm:^29.0.2": + version: 29.0.2 + resolution: "jest@npm:29.0.2" dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": + "@jest/core": ^29.0.2 + "@jest/types": ^29.0.2 + import-local: ^3.0.2 + jest-cli: ^29.0.2 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: optional: true - checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df + bin: + jest: bin/jest.js + checksum: b2af093f34e2e835141ba8ef3e4b3cc03e51eb05b1ed438071500ecfbf2e8681a85ef44cb331087b3f835cc050731a26b03bd40f98f2e8927a50b2e1a5806636 languageName: node linkType: hard @@ -4099,6 +5812,13 @@ __metadata: languageName: node linkType: hard +"lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.7.0": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + "lodash@npm:^4.17.15, lodash@npm:^4.17.20": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -5266,6 +6986,17 @@ __metadata: languageName: node linkType: hard +"realistic-structured-clone@npm:^3.0.0": + version: 3.0.0 + resolution: "realistic-structured-clone@npm:3.0.0" + dependencies: + domexception: ^1.0.1 + typeson: ^6.1.0 + typeson-registry: ^1.0.0-alpha.20 + checksum: b4521b299c8dc320a5e3ef44678f80a92b0f1837901a5fbd1c7be06808110fb0b591b417114306ec55b44ef47fd17968aacca079afc9665afbe1c528026295ec + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -5402,7 +7133,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -6124,6 +7855,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^2.1.0": + version: 2.1.0 + resolution: "tr46@npm:2.1.0" + dependencies: + punycode: ^2.1.1 + checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + languageName: node + linkType: hard + "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -6362,6 +8102,72 @@ __metadata: languageName: node linkType: hard +"typedoc-json-parser@npm:^2.0.1, typedoc-json-parser@npm:^2.3.1": + version: 2.3.1 + resolution: "typedoc-json-parser@npm:2.3.1" + dependencies: + "@favware/colorette-spinner": ^1.0.0 + colorette: ^2.0.19 + commander: ^9.4.0 + js-yaml: ^4.1.0 + tslib: ^2.4.0 + typedoc: ^0.23.10 + bin: + typedoc-json-parser: ./dist/bin/index.js + checksum: 9223c36cc93cc9c71b710532080b282c3c4e5ff9836474d2af6701058bd3073f4078d4286f08572de7e32983db9967a4d71d37c0250382130f8e738636d3406b + languageName: node + linkType: hard + +"typedoc-json-parser@npm:^2.0.1, typedoc-json-parser@npm:^2.3.2": + version: 2.3.2 + resolution: "typedoc-json-parser@npm:2.3.2" + dependencies: + "@favware/colorette-spinner": ^1.0.0 + colorette: ^2.0.19 + commander: ^9.4.0 + js-yaml: ^4.1.0 + tslib: ^2.4.0 + typedoc: ^0.23.10 + bin: + typedoc-json-parser: ./dist/bin/index.js + checksum: 9223c36cc93cc9c71b710532080b282c3c4e5ff9836474d2af6701058bd3073f4078d4286f08572de7e32983db9967a4d71d37c0250382130f8e738636d3406b + languageName: node + linkType: hard + +"typedoc-json-parser@npm:^3.1.0": + version: 3.1.0 + resolution: "typedoc-json-parser@npm:3.1.0" + dependencies: + "@favware/colorette-spinner": ^1.0.1 + "@sapphire/node-utilities": ^1.0.0 + colorette: ^2.0.20 + commander: ^10.0.1 + js-yaml: ^4.1.0 + tslib: ^2.5.2 + typedoc: ^0.24.7 + bin: + typedoc-json-parser: ./dist/bin/index.js + checksum: d4b7feb654dbff856412ae143b47741323f46c1ebafe72ca7522820e1f352f745f19ac42d3ff37c519e24632b93fc167ed509a613849b715bdfd12d30917eb53 + languageName: node + linkType: hard + +"typedoc-json-parser@npm:^8.1.2": + version: 8.1.2 + resolution: "typedoc-json-parser@npm:8.1.2" + dependencies: + "@favware/colorette-spinner": ^1.0.1 + "@sapphire/node-utilities": ^1.0.0 + colorette: ^2.0.20 + commander: ^11.0.0 + js-yaml: ^4.1.0 + tslib: ^2.5.3 + typedoc: ^0.24.8 + bin: + typedoc-json-parser: ./dist/bin/index.js + checksum: d4b7feb654dbff856412ae143b47741323f46c1ebafe72ca7522820e1f352f745f19ac42d3ff37c519e24632b93fc167ed509a613849b715bdfd12d30917eb53 + languageName: node + linkType: hard + "typedoc-json-parser@npm:^8.2.0": version: 8.2.0 resolution: "typedoc-json-parser@npm:8.2.0" @@ -6379,6 +8185,54 @@ __metadata: languageName: node linkType: hard +"typedoc@npm:^0.23.10, typedoc@npm:^0.23.9": + version: 0.23.10 + resolution: "typedoc@npm:0.23.10" + dependencies: + lunr: ^2.3.9 + marked: ^4.0.19 + minimatch: ^5.1.0 + shiki: ^0.11.1 + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x + bin: + typedoc: bin/typedoc + checksum: 720b5fa9846fcb2d0e3a763bc01b8f856d7e1c80ac50d2efd85dd850f61b98c4f52b7519a86ff2c59cebc7ab1e19e92cab31a25082d4574ab9a6f93e660e5369 + languageName: node + linkType: hard + +"typedoc@npm:^0.23.14, typedoc@npm:^0.23.9": + version: 0.23.14 + resolution: "typedoc@npm:0.23.14" + dependencies: + lunr: ^2.3.9 + marked: ^4.3.0 + minimatch: ^9.0.0 + shiki: ^0.14.1 + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x + bin: + typedoc: bin/typedoc + checksum: a46a14497f789fb3594e6c3af2e45276934ac46df40b7ed15a504ee51dc7a8013a2ffb3a54fd73abca6a2b71f97d3ec9ad356fa9aa81d29743e4645a965a2ae0 + languageName: node + linkType: hard + +"typedoc@npm:^0.24.7": + version: 0.24.7 + resolution: "typedoc@npm:0.24.7" + dependencies: + lunr: ^2.3.9 + marked: ^4.3.0 + minimatch: ^9.0.0 + shiki: ^0.14.1 + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x + bin: + typedoc: bin/typedoc + checksum: 9ae433566cb02b96deb9eb2a9f5b23d1b199f5aeb61ca8c7e2653ff5d339fbfb4d526e024febab4f3278332978814aaa0885f1d5925ba21a441d93a611510ac3 + languageName: node + linkType: hard + "typedoc@npm:^0.24.8": version: 0.24.8 resolution: "typedoc@npm:0.24.8" @@ -6435,6 +8289,24 @@ __metadata: languageName: node linkType: hard +"typeson-registry@npm:^1.0.0-alpha.20": + version: 1.0.0-alpha.39 + resolution: "typeson-registry@npm:1.0.0-alpha.39" + dependencies: + base64-arraybuffer-es6: ^0.7.0 + typeson: ^6.0.0 + whatwg-url: ^8.4.0 + checksum: c6b629697acf4652aecfff7be760356d764600afc9beca253278bbfc44fae0fe635b7619201b83e497cdc30645cbce7614d12a04b5726d9b8b505f73e6a3fc2a + languageName: node + linkType: hard + +"typeson@npm:^6.0.0, typeson@npm:^6.1.0": + version: 6.1.0 + resolution: "typeson@npm:6.1.0" + checksum: 00a77b03ac8f704acb103307bad9295fe47d6b304c386297f078ec3be63875c0b81e022a4815edb9dc2c7da0a72a431345411d35c755a8510af4a420e9e46cdc + languageName: node + linkType: hard + "ufo@npm:^1.1.2": version: 1.1.2 resolution: "ufo@npm:1.1.2" @@ -6682,6 +8554,20 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 + languageName: node + linkType: hard + +"webidl-conversions@npm:^6.1.0": + version: 6.1.0 + resolution: "webidl-conversions@npm:6.1.0" + checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -6716,6 +8602,17 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^8.4.0": + version: 8.7.0 + resolution: "whatwg-url@npm:8.7.0" + dependencies: + lodash: ^4.7.0 + tr46: ^2.1.0 + webidl-conversions: ^6.1.0 + checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + languageName: node + linkType: hard + "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" From b33508fb18224c7c4fa6d938f009e627a2092127 Mon Sep 17 00:00:00 2001 From: Hezekiah Hendry Date: Wed, 7 Jun 2023 16:13:29 -0400 Subject: [PATCH 09/19] chore(indexeddb): update workspaces --- packages/indexeddb/jest.config.mjs | 16 - packages/indexeddb/package.json | 18 +- .../indexeddb/src/lib/IndexedDBProvider.ts | 7 +- packages/indexeddb/test.txt | 1187 ---------- packages/indexeddb/tests/tsconfig.json | 1 + packages/indexeddb/vitest.config.ts | 11 + yarn.lock | 2004 ++--------------- 7 files changed, 159 insertions(+), 3085 deletions(-) delete mode 100644 packages/indexeddb/jest.config.mjs delete mode 100644 packages/indexeddb/test.txt create mode 100644 packages/indexeddb/vitest.config.ts diff --git a/packages/indexeddb/jest.config.mjs b/packages/indexeddb/jest.config.mjs deleted file mode 100644 index 759089a6..00000000 --- a/packages/indexeddb/jest.config.mjs +++ /dev/null @@ -1,16 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -const config = { - displayName: 'unit test', - preset: 'ts-jest', - testMatch: ['/tests/**/*.test.ts'], - collectCoverageFrom: ['/src/**/*.ts'], - setupFilesAfterEnv: ['jest-extended/all'], - globals: { - 'ts-jest': { - tsconfig: '/tests/tsconfig.json' - } - }, - coveragePathIgnorePatterns: [] -}; - -export default config; diff --git a/packages/indexeddb/package.json b/packages/indexeddb/package.json index c5d12899..e1ea49c0 100644 --- a/packages/indexeddb/package.json +++ b/packages/indexeddb/package.json @@ -20,7 +20,7 @@ }, "sideEffects": false, "scripts": { - "test": "jest --verbose", + "test": "vitest run", "docs": "typedoc-json-parser", "lint": "eslint src tests --ext ts --fix -c ../../.eslintrc", "build": "rollup -c rollup.config.ts", @@ -29,16 +29,16 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "1.1.0-next.24ef775.0", - "property-helpers": "^1.1.0" + "@joshdb/provider": "2.0.0-next.a699598.0", + "property-helpers": "^2.0.0" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.5", - "@favware/rollup-type-bundler": "^1.0.9", - "fake-indexeddb": "^4.0.0", - "jest": "^28.1.3", - "typedoc": "^0.23.9", - "typedoc-json-parser": "^2.0.1" + "@favware/cliff-jumper": "^2.0.1", + "@favware/rollup-type-bundler": "^1.0.11", + "@vitest/coverage-v8": "^0.32.0", + "typedoc": "^0.24.8", + "typedoc-json-parser": "^8.1.2", + "vitest": "^0.32.0" }, "repository": { "type": "git", diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index b9ab3cc1..1f9a18a8 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -1,5 +1,5 @@ import { CommonIdentifiers, JoshProvider, MathOperator, Method, Payloads } from '@joshdb/provider'; -import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; +import { PROPERTY_NOT_FOUND, deleteProperty, getProperty, hasProperty, setProperty } from 'property-helpers'; import DbHandler from './DbHandler'; export class IndexedDBProvider extends JoshProvider { @@ -16,6 +16,7 @@ export class IndexedDBProvider extends JoshProvider hook(value, key)); @@ -39,6 +40,7 @@ export class IndexedDBProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider this.db.get(key))); } diff --git a/packages/indexeddb/test.txt b/packages/indexeddb/test.txt deleted file mode 100644 index 60ba9980..00000000 --- a/packages/indexeddb/test.txt +++ /dev/null @@ -1,1187 +0,0 @@ -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -Debugger attached. -PASS unit test tests/lib/DbHandler.test.ts - DbHandler - is a class - βœ“ GIVEN typeof DbHandler THEN returns function (1 ms) - βœ“ GIVEN typeof ...prototype THEN returns object - Can manipulate data. - βœ“ Can set and subsequently get data (5 ms) - βœ“ Can get all data (2 ms) - βœ“ Can get all keys (2 ms) - βœ“ Can delete data (1 ms) - βœ“ Can has data (1 ms) - βœ“ Can count data (4 ms) - βœ“ Can clear data - -FAIL unit test tests/lib/IndexedDBProvider.test.ts - IndexedDBProvider - Serialization Enabled - is a class - βœ“ GIVEN typeof IndexedDBProvider THEN returns function (1 ms) - βœ“ GIVEN typeof ...prototype THEN returns object (1 ms) - can manipulate provider data - autoKey - βœ“ GIVEN ... THEN returns payload w/ generated key as data AND increments autoKeyCount (1 ms) - βœ“ each value of autoKey should be unique (1 ms) - clear - βœ“ GIVEN provider w/o data THEN provider data cleared (2 ms) - βœ“ GIVEN provider w/ data THEN provider data cleared (2 ms) - dec - βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error (2 ms) - βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error - βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ number at key THEN decremented number at key (2 ms) - βœ“ GIVEN provider w/ number at path THEN decremented number at path (2 ms) - delete - βœ“ GIVEN provider w/ value at key THEN deletes value at key (1 ms) - βœ“ GIVEN provider w/ value at path THEN deletes value at path (1 ms) - βœ“ GIVEN provider w/ value at nested path THEN deletes value at nested path (2 ms) - ensure - βœ• GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key (1 ms) - βœ• GIVEN provider w/ value at key THEN returns payload w/ data as value at key - entries - βœ“ GIVEN provider w/o data THEN returns payload w/o data from getAll - βœ“ GIVEN provider w/ data THEN returns payload w/ data from getAll (1 ms) - every - 0 - βœ• GIVEN provider w/o data THEN returns payload(true) (2 ms) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload(true) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - βœ• GIVEN provider w/o data w/o path THEN returns payload(true) - βœ• GIVEN provider w/ data w/o path THEN returns payload(true) (1 ms) - filter - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data from filter (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload w/o data from filter (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) - find - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data from find (2 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data from find (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload w/o data from find (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/o data from find - get - βœ“ GIVEN provider w/o data THEN returns payload w/o data from get - βœ“ GIVEN provider w/ value at key THEN returns payload w/ data from get at key (1 ms) - βœ“ GIVEN provider w/ value at path THEN returns payload w/ data from get at path (1 ms) - getMany - βœ“ GIVEN provider w/o data THEN returns payload w/o data from getMany - βœ“ GIVEN provider w/ data THEN returns payload w/ data from getMany (1 ms) - has - βœ“ GIVEN provider w/o data at key THEN returns payload(false) (1 ms) - βœ“ GIVEN provider w/o data at path THEN returns payload(false) (1 ms) - βœ“ GIVEN provider w/ data at key THEN returns payload(true) (1 ms) - βœ“ GIVEN provider w/ data at path THEN returns payload(true) (1 ms) - inc - βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) - βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error - βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ number at key THEN incremented number at key (1 ms) - βœ“ GIVEN provider w/ number at path THEN incremented number at key and path (1 ms) - keys - βœ“ GIVEN provider w/o data THEN returns payload w/o data from keys (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data from keys - map - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data from map (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data from map (2 ms) - 2 - βœ• GIVEN provider w/o data THEN returns payload w/o data from map - βœ• GIVEN provider w/ data THEN returns payload w/ data from map (1 ms) - βœ• GIVEN provider w/ data at path THEN returns payload w/ data from map (1 ms) - math - βœ“ GIVEN provider w/o data THEN returns payload w/ error (1 ms) - βœ“ GIVEN provider w/o data at path THEN returns payload w/ error (1 ms) - βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ error (1 ms) - βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ error (1 ms) - partition - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data (2 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload w/o data - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - push - βœ• GIVEN provider w/o data THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/o data at path THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - βœ• GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ array at key THEN returns payload AND pushes value to array at key (1 ms) - βœ“ GIVEN provider w/ array at path THEN returns payload AND pushes value to array at path (1 ms) - random - βœ“ GIVEN provider w/o data THEN returns payload w/o data from random - βœ“ GIVEN provider w/ data THEN returns payload w/ data from random (1 ms) - randomKey - βœ“ GIVEN provider w/o data THEN returns payload w/o data from randomKey (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data from randomKey (1 ms) - remove - 0 - βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (3 ms) - 1 - βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error - βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) - βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (1 ms) - set - βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key - βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key and path (2 ms) - setMany - βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key - βœ“ GIVEN provider w/ data THEN returns payload AND does not set value at key (2 ms) - size - βœ“ GIVEN provider w/o data THEN returns payload(0) (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload(1) - some - 0 - βœ• GIVEN provider w/o data THEN returns payload(false) (1 ms) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload(false) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - βœ• GIVEN provider w/o data w/o path THEN returns payload(false) (1 ms) - βœ• GIVEN provider w/ data w/o path THEN returns payload(true) (1 ms) - update - βœ• GIVEN provider w/o data THEN returns payload w/ missing data error - βœ“ GIVEN provider w/ data at key THEN returns payload w/ data AND updates value at key (1 ms) - βœ“ GIVEN provider w/ data at path THEN returns payload w/ data AND updates value at path - values - βœ“ GIVEN provider w/o data THEN returns payload w/o data (2 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data - each - βœ“ GIVEN provider w/o data THEN loops 0 times (1 ms) - βœ“ GIVEN provider w/ data THEN loops x times THEN clears (1 ms) - IndexedDBProvider - Serialization Disabled - is a class - βœ“ GIVEN typeof IndexedDBProvider THEN returns function - βœ“ GIVEN typeof ...prototype THEN returns object - can manipulate provider data - autoKey - βœ“ GIVEN ... THEN returns payload w/ generated key as data AND increments autoKeyCount - βœ“ each value of autoKey should be unique (1 ms) - clear - βœ“ GIVEN provider w/o data THEN provider data cleared - βœ“ GIVEN provider w/ data THEN provider data cleared (1 ms) - dec - βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) - βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error - βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ number at key THEN decremented number at key - βœ“ GIVEN provider w/ number at path THEN decremented number at path (1 ms) - delete - βœ“ GIVEN provider w/ value at key THEN deletes value at key (1 ms) - βœ“ GIVEN provider w/ value at path THEN deletes value at path (1 ms) - βœ“ GIVEN provider w/ value at nested path THEN deletes value at nested path (1 ms) - ensure - βœ• GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key (1 ms) - βœ• GIVEN provider w/ value at key THEN returns payload w/ data as value at key - entries - βœ“ GIVEN provider w/o data THEN returns payload w/o data from getAll (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data from getAll - every - 0 - βœ• GIVEN provider w/o data THEN returns payload(true) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload(true) (1 ms) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - βœ• GIVEN provider w/o data w/o path THEN returns payload(true) (1 ms) - βœ• GIVEN provider w/ data w/o path THEN returns payload(true) (1 ms) - filter - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data from filter - βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload w/o data from filter (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data from filter (1 ms) - find - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data from find - βœ• GIVEN provider w/ data THEN returns payload w/ data from find (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload w/o data from find (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/o data from find - get - βœ“ GIVEN provider w/o data THEN returns payload w/o data from get (1 ms) - βœ“ GIVEN provider w/ value at key THEN returns payload w/ data from get at key (2 ms) - βœ“ GIVEN provider w/ value at path THEN returns payload w/ data from get at path - getMany - βœ“ GIVEN provider w/o data THEN returns payload w/o data from getMany (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data from getMany (1 ms) - has - βœ“ GIVEN provider w/o data at key THEN returns payload(false) - βœ“ GIVEN provider w/o data at path THEN returns payload(false) (1 ms) - βœ“ GIVEN provider w/ data at key THEN returns payload(true) (1 ms) - βœ“ GIVEN provider w/ data at path THEN returns payload(true) (1 ms) - inc - βœ“ GIVEN provider w/o data at key THEN returns payload w/ missing data error - βœ“ GIVEN provider w/o data at path THEN returns payload w/ missing data error (1 ms) - βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ number at key THEN incremented number at key (1 ms) - βœ“ GIVEN provider w/ number at path THEN incremented number at key and path (1 ms) - keys - βœ“ GIVEN provider w/o data THEN returns payload w/o data from keys - βœ“ GIVEN provider w/ data THEN returns payload w/ data from keys (1 ms) - map - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data from map - βœ• GIVEN provider w/ data THEN returns payload w/ data from map (1 ms) - 2 - βœ• GIVEN provider w/o data THEN returns payload w/o data from map (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data from map - βœ• GIVEN provider w/ data at path THEN returns payload w/ data from map (1 ms) - math - βœ“ GIVEN provider w/o data THEN returns payload w/ error (1 ms) - βœ“ GIVEN provider w/o data at path THEN returns payload w/ error (1 ms) - βœ“ GIVEN provider w/ invalid type at key THEN returns payload w/ error (1 ms) - βœ“ GIVEN provider w/ invalid type at path THEN returns payload w/ error (1 ms) - partition - 0 - βœ• GIVEN provider w/o data THEN returns payload w/o data - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload w/o data - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - βœ• GIVEN provider w/ data THEN returns payload w/ data (1 ms) - push - βœ• GIVEN provider w/o data THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/o data at path THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - βœ• GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error (1 ms) - βœ“ GIVEN provider w/ array at key THEN returns payload AND pushes value to array at key - βœ“ GIVEN provider w/ array at path THEN returns payload AND pushes value to array at path (1 ms) - random - βœ“ GIVEN provider w/o data THEN returns payload w/o data from random (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data from random - randomKey - βœ“ GIVEN provider w/o data THEN returns payload w/o data from randomKey (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload w/ data from randomKey - remove - 0 - βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (2 ms) - 1 - βœ• GIVEN provider w/o data at key THEN returns payload w/ missing data error (1 ms) - βœ• GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - βœ• GIVEN provider w/ array at key THEN returns payload AND removes value from array at key (2 ms) - set - βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key - βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key and path - setMany - βœ“ GIVEN provider w/o data THEN returns payload AND sets value at key (1 ms) - βœ“ GIVEN provider w/ data THEN returns payload AND does not set value at key (1 ms) - size - βœ“ GIVEN provider w/o data THEN returns payload(0) - βœ“ GIVEN provider w/ data THEN returns payload(1) (1 ms) - some - 0 - βœ• GIVEN provider w/o data THEN returns payload(false) (1 ms) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - 1 - βœ• GIVEN provider w/o data THEN returns payload(false) - βœ• GIVEN provider w/ data THEN returns payload(true) (1 ms) - βœ• GIVEN provider w/o data w/o path THEN returns payload(false) (1 ms) - βœ• GIVEN provider w/ data w/o path THEN returns payload(true) - update - βœ• GIVEN provider w/o data THEN returns payload w/ missing data error (1 ms) - βœ“ GIVEN provider w/ data at key THEN returns payload w/ data AND updates value at key - βœ“ GIVEN provider w/ data at path THEN returns payload w/ data AND updates value at path (1 ms) - values - βœ“ GIVEN provider w/o data THEN returns payload w/o data - βœ“ GIVEN provider w/ data THEN returns payload w/ data (1 ms) - each - βœ“ GIVEN provider w/o data THEN loops 0 times - βœ“ GIVEN provider w/ data THEN loops x times THEN clears (1 ms) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key - - expect(received).toBe(expected) // Object.is equality - - Expected: "defaultValue" - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:290:26) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/ value at key THEN returns payload w/ data as value at key - - expect(received).toBe(expected) // Object.is equality - - Expected: "value" - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:311:26) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:358:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:381:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:398:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:422:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:437:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:461:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:479:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:filter": "value"} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:495:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:512:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:filter": {"path": "value"}} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:529:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find - - expect(received).toEqual(expected) // deep equality - - Expected: [null, null] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:548:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from find - - expect(received).toEqual(expected) // deep equality - - Expected: ["test:find", "value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:564:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find - - expect(received).toEqual(expected) // deep equality - - Expected: [null, null] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:581:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/o data from find - - expect(received).toEqual(expected) // deep equality - - Expected: ["test:find", {"path": "value"}] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:598:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map - - expect(received).toEqual(expected) // deep equality - - Expected: [] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:897:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map - - expect(received).toEqual(expected) // deep equality - - Expected: ["value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:913:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map - - expect(received).toEqual(expected) // deep equality - - Expected: [] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:929:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map - - expect(received).toEqual(expected) // deep equality - - Expected: ["value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:945:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data at path THEN returns payload w/ data from map - - expect(received).toEqual(expected) // deep equality - - Expected: ["value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:961:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1084:36) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:partition": "value"} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1106:36) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1128:36) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1152:36) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:partition": "value"} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1176:36) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1200:36) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1216:27) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data at path THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1234:27) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1252:27) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1270:27) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1389:29) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1414:29) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key - - expect(received).toEqual(expected) // deep equality - - - Expected - 1 - + Received + 3 - - - Array [] - + Array [ - + "value", - + ] - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1451:37) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1471:29) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1496:29) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key - - expect(received).toEqual(expected) // deep equality - - - Expected - 1 - + Received + 3 - - - Array [] - + Array [ - + "value", - + ] - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1533:37) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(false) - - expect(received).toBe(expected) // Object.is equality - - Expected: false - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1683:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1703:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(false) - - expect(received).toBe(expected) // Object.is equality - - Expected: false - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1720:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1737:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(false) - - expect(received).toBe(expected) // Object.is equality - - Expected: false - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1757:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1779:28) - - ● IndexedDBProvider - Serialization Enabled β€Ί can manipulate provider data β€Ί update β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1794:27) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/o data at key THEN returns payload w/ data as defaultValue AND sets default value at key - - expect(received).toBe(expected) // Object.is equality - - Expected: "defaultValue" - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:290:26) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί ensure β€Ί GIVEN provider w/ value at key THEN returns payload w/ data as value at key - - expect(received).toBe(expected) // Object.is equality - - Expected: "value" - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:311:26) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:358:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:381:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:398:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:422:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:437:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί every β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:461:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:479:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:filter": "value"} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:495:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:512:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί filter β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data from filter - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:filter": {"path": "value"}} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:529:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find - - expect(received).toEqual(expected) // deep equality - - Expected: [null, null] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:548:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from find - - expect(received).toEqual(expected) // deep equality - - Expected: ["test:find", "value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:564:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data from find - - expect(received).toEqual(expected) // deep equality - - Expected: [null, null] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:581:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί find β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/o data from find - - expect(received).toEqual(expected) // deep equality - - Expected: ["test:find", {"path": "value"}] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:598:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map - - expect(received).toEqual(expected) // deep equality - - Expected: [] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:897:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map - - expect(received).toEqual(expected) // deep equality - - Expected: ["value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:913:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/o data THEN returns payload w/o data from map - - expect(received).toEqual(expected) // deep equality - - Expected: [] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:929:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data THEN returns payload w/ data from map - - expect(received).toEqual(expected) // deep equality - - Expected: ["value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:945:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί map β€Ί 2 β€Ί GIVEN provider w/ data at path THEN returns payload w/ data from map - - expect(received).toEqual(expected) // deep equality - - Expected: ["value"] - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:961:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload w/o data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1084:36) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:partition": "value"} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1106:36) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1128:36) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload w/o data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1152:36) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {"test:partition": "value"} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1176:36) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί partition β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload w/ data - - expect(received).toEqual(expected) // deep equality - - Expected: {} - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1200:36) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1216:27) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/o data at path THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1234:27) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1252:27) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί push β€Ί GIVEN provider w/ invalid type at path THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1270:27) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1389:29) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1414:29) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 0 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key - - expect(received).toEqual(expected) // deep equality - - - Expected - 1 - + Received + 3 - - - Array [] - + Array [ - + "value", - + ] - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1451:37) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/o data at key THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1471:29) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ invalid type at key THEN returns payload w/ invalid type error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1496:29) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί remove β€Ί 1 β€Ί GIVEN provider w/ array at key THEN returns payload AND removes value from array at key - - expect(received).toEqual(expected) // deep equality - - - Expected - 1 - + Received + 3 - - - Array [] - + Array [ - + "value", - + ] - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1533:37) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/o data THEN returns payload(false) - - expect(received).toBe(expected) // Object.is equality - - Expected: false - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1683:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 0 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1703:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data THEN returns payload(false) - - expect(received).toBe(expected) // Object.is equality - - Expected: false - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1720:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1737:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/o data w/o path THEN returns payload(false) - - expect(received).toBe(expected) // Object.is equality - - Expected: false - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1757:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί some β€Ί 1 β€Ί GIVEN provider w/ data w/o path THEN returns payload(true) - - expect(received).toBe(expected) // Object.is equality - - Expected: true - Received: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1779:28) - - ● IndexedDBProvider - Serialization Disabled β€Ί can manipulate provider data β€Ί update β€Ί GIVEN provider w/o data THEN returns payload w/ missing data error - - expect(received).toBeInstanceOf(expected) - - Expected constructor: Error - - Received value has no prototype - Received value: undefined - - at Object. (node_modules/@joshdb/provider/src/tests/runProviderTest.ts:1794:27) - -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Test Suites: 1 failed, 1 passed, 2 total -Tests: 88 failed, 121 passed, 209 total -Snapshots: 0 total -Time: 3.043 s -Ran all test suites. -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... -Waiting for the debugger to disconnect... diff --git a/packages/indexeddb/tests/tsconfig.json b/packages/indexeddb/tests/tsconfig.json index 16409bb1..016ad86a 100644 --- a/packages/indexeddb/tests/tsconfig.json +++ b/packages/indexeddb/tests/tsconfig.json @@ -4,6 +4,7 @@ "rootDir": "./", "outDir": "./build", "tsBuildInfoFile": "./build/.tsbuildinfo", + "types": ["vitest/globals"], "lib": ["DOM"] }, "include": ["./"], diff --git a/packages/indexeddb/vitest.config.ts b/packages/indexeddb/vitest.config.ts new file mode 100644 index 00000000..2dd4d4f2 --- /dev/null +++ b/packages/indexeddb/vitest.config.ts @@ -0,0 +1,11 @@ +import { resolve } from 'node:path'; +import { createVitestConfig } from '../../scripts/vitest.config'; + +export default createVitestConfig({ + test: { + coverage: { + reportsDirectory: '../../coverage' + } + }, + resolve: { alias: [{ find: '@joshdb/provider/tests', replacement: resolve('../../node_modules/@joshdb/provider/tests') }] } +}); diff --git a/yarn.lock b/yarn.lock index ef8cd984..5784c885 100644 --- a/yarn.lock +++ b/yarn.lock @@ -462,46 +462,6 @@ __metadata: languageName: node linkType: hard -"@favware/cliff-jumper@npm:^1.8.5, @favware/cliff-jumper@npm:^1.8.6": - version: 1.8.6 - resolution: "@favware/cliff-jumper@npm:1.8.6" - dependencies: - "@sapphire/result": ^2.4.0 - "@sapphire/utilities": ^3.9.2 - colorette: ^2.0.19 - commander: ^9.4.0 - conventional-changelog-angular: ^5.0.13 - conventional-recommended-bump: ^6.1.0 - js-yaml: ^4.1.0 - semver: ^7.3.7 - typescript: ^4.7.4 - bin: - cj: ./dist/cli.js - cliff-jumper: ./dist/cli.js - checksum: 088fe16d5bcc974a3a854042887ca3b4585d4afd62c687404fa8c305a7ebef5526069477734d01200cc8ff353c4575bb5a7e887be48e60de52f9d6771c43b5d4 - languageName: node - linkType: hard - -"@favware/cliff-jumper@npm:^1.8.5, @favware/cliff-jumper@npm:^1.8.7": - version: 1.8.7 - resolution: "@favware/cliff-jumper@npm:1.8.7" - dependencies: - "@favware/conventional-changelog-angular": ^5.0.15 - "@sapphire/result": ^2.6.4 - "@sapphire/utilities": 3.11.2 - colorette: ^2.0.20 - commander: ^10.0.1 - conventional-recommended-bump: ^6.1.0 - git-cliff: ^1.2.0 - js-yaml: ^4.1.0 - semver: ^7.5.1 - bin: - cj: ./dist/cli.js - cliff-jumper: ./dist/cli.js - checksum: 2c802a490dc9d2b39efd344056442533f55e1c1fb2cd9e472ccabd412446b783958c49ba58a928500e20c3ed2249d532d9f895e1cced486105ad2ac3442d31da - languageName: node - linkType: hard - "@favware/cliff-jumper@npm:^2.0.1": version: 2.0.1 resolution: "@favware/cliff-jumper@npm:2.0.1" @@ -579,25 +539,7 @@ __metadata: languageName: node linkType: hard -"@favware/rollup-type-bundler@npm:^1.0.10, @favware/rollup-type-bundler@npm:^1.0.9": - version: 1.0.10 - resolution: "@favware/rollup-type-bundler@npm:1.0.10" - dependencies: - "@sapphire/utilities": ^3.9.2 - colorette: ^2.0.19 - commander: ^9.4.0 - js-yaml: ^4.1.0 - rollup: ^2.78.1 - rollup-plugin-dts: ^4.2.2 - typescript: ^4.7.4 - bin: - rollup-type-bundler: ./dist/cli.js - rtb: ./dist/cli.js - checksum: f2f6b42d2cd5a67d1e9aabb25cfe925a00e922a2b17c0c0ae9b2f0bd574bbb2073e8e8824bbd5072fdf3a8f91c3eb6fbe2d582014222fd2ddeffbfa9950bf1fd - languageName: node - linkType: hard - -"@favware/rollup-type-bundler@npm:^1.0.11, @favware/rollup-type-bundler@npm:^1.0.9": +"@favware/rollup-type-bundler@npm:^1.0.11": version: 1.0.11 resolution: "@favware/rollup-type-bundler@npm:1.0.11" dependencies: @@ -679,468 +621,6 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a - languageName: node - linkType: hard - -"@jest/console@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/console@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^29.0.2 - jest-util: ^29.0.2 - slash: ^3.0.0 - checksum: 83cf779973b4bf5a3ff66bf206b705f588e339627222bbd3c60c40a37d663f5ea36dce1a9642aebf703c3802e9669141c2c36e9477f2f3637f612b0cc5617498 - languageName: node - linkType: hard - -"@jest/core@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/core@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/reporters": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.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: ^28.1.3 - jest-config: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-resolve-dependencies: ^28.1.3 - jest-runner: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - jest-watcher: ^28.1.3 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - rimraf: ^3.0.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: cb79f34bafc4637e7130df12257f5b29075892a2be2c7f45c6d4c0420853e80b5dae11016e652530eb234f4c44c00910cdca3c2cd86275721860725073f7d9b4 - languageName: node - linkType: hard - -"@jest/core@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/core@npm:29.0.2" - dependencies: - "@jest/console": ^29.0.2 - "@jest/reporters": ^29.0.2 - "@jest/test-result": ^29.0.2 - "@jest/transform": ^29.0.2 - "@jest/types": ^29.0.2 - "@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.0.0 - jest-config: ^29.0.2 - jest-haste-map: ^29.0.2 - jest-message-util: ^29.0.2 - jest-regex-util: ^29.0.0 - jest-resolve: ^29.0.2 - jest-resolve-dependencies: ^29.0.2 - jest-runner: ^29.0.2 - jest-runtime: ^29.0.2 - jest-snapshot: ^29.0.2 - jest-util: ^29.0.2 - jest-validate: ^29.0.2 - jest-watcher: ^29.0.2 - micromatch: ^4.0.4 - pretty-format: ^29.0.2 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: b6c9bd3d3a54ba7fe1fcedf6ff78ece7ce56fda9346d63f886341d503757ff632c95d19765ae777fd01a0cf57665d0108747be7d9e250366c6980d3bddbce10b - languageName: node - linkType: hard - -"@jest/environment@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/environment@npm:28.1.3" - dependencies: - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - jest-mock: ^28.1.3 - checksum: 14c496b84aef951df33128cea68988e9de43b2e9d62be9f9c4308d4ac307fa345642813679f80d0a4cedeb900cf6f0b6bb2b92ce089528e8721f72295fdc727f - languageName: node - linkType: hard - -"@jest/environment@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/environment@npm:29.0.2" - dependencies: - "@jest/fake-timers": ^29.0.2 - "@jest/types": ^29.0.2 - "@types/node": "*" - jest-mock: ^29.0.2 - checksum: 2ab0cd404e34f649c6534035f93f2a6660cd7b6ab136c85035af7923e4b0511fcc0b18123e69c9c5fc4ee4e4645f8af5efde5eb53c704f011e264ff34bcacb6e - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/expect-utils@npm:29.0.2" - dependencies: - jest-get-type: ^29.0.0 - checksum: 12bb317b1dc0afe7cd0a0c4e1281dee6a7f1a5d74f85154e54bef79ad983da0c2adba9998b65d95bc8655bc0a535f566b0a83ea068bbdca33c33c1dd6fdae195 - languageName: node - linkType: hard - -"@jest/expect@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect@npm:28.1.3" - dependencies: - expect: ^28.1.3 - jest-snapshot: ^28.1.3 - checksum: 4197f6fdddc33dc45ba4e838f992fc61839c421d7aed0dfe665ef9c2f172bb1df8a8cac9cecee272b40e744a326da521d5e182709fe82a0b936055bfffa3b473 - languageName: node - linkType: hard - -"@jest/expect@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/expect@npm:29.0.2" - dependencies: - expect: ^29.0.2 - jest-snapshot: ^29.0.2 - checksum: 03a4d3b5995d2c92c6a7b25ac914147e5cf325b5e054f7364ea8d879da2b40d7c7e1e941dcf65c7f0f38805e4dc83eb861d309bbf4e727f99f41f89b9dcb9185 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/fake-timers@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@sinonjs/fake-timers": ^9.1.2 - "@types/node": "*" - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: cec14d5b14913a54dce64a62912c5456235f5d90b509ceae19c727565073114dae1aaf960ac6be96b3eb94789a3a758b96b72c8fca7e49a6ccac415fbc0321e1 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/fake-timers@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - "@sinonjs/fake-timers": ^9.1.2 - "@types/node": "*" - jest-message-util: ^29.0.2 - jest-mock: ^29.0.2 - jest-util: ^29.0.2 - checksum: 995b76a099707e91b0851c7c52d91beed3b8bbedca28faf88ff257af7f17d5e752e0fd901676fe2db0d917491b9557d6ca1a1a07ad992b02346275af7cafdd18 - languageName: node - linkType: hard - -"@jest/globals@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/globals@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/types": ^28.1.3 - checksum: 3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd - languageName: node - linkType: hard - -"@jest/globals@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/globals@npm:29.0.2" - dependencies: - "@jest/environment": ^29.0.2 - "@jest/expect": ^29.0.2 - "@jest/types": ^29.0.2 - jest-mock: ^29.0.2 - checksum: becea3f7fef9a6bf45d1f9cb280ab590c03bdd07e6276fc9aa99ff0800fae2fd9030f13dd1f18192c084b48871e33accfaf5e88ec9903bd727df9b0965356bcd - languageName: node - linkType: hard - -"@jest/reporters@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/reporters@npm:28.1.3" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 - "@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: ^5.1.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - terminal-link: ^2.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: a7440887ce837922cbeaa64c3232eb48aae02aa9123f29fc4280ad3e1afe4b35dcba171ba1d5fd219037c396c5152d9c2d102cff1798dd5ae3bd33ac4759ae0a - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/reporters@npm:29.0.2" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.0.2 - "@jest/test-result": ^29.0.2 - "@jest/transform": ^29.0.2 - "@jest/types": ^29.0.2 - "@jridgewell/trace-mapping": ^0.3.15 - "@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: ^5.1.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^29.0.2 - jest-util: ^29.0.2 - jest-worker: ^29.0.2 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - terminal-link: ^2.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: e5378e0d6ea30d9a1d5fa3126638eae7316ecfdf67fa95e3449b6698c73c1437a7565dbffaf93becc4d6647f3042db6497d77c10431e1f492b33f1fb7c3b3dc0 - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/schemas@npm:29.0.0" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb - languageName: node - linkType: hard - -"@jest/source-map@npm:^28.1.2": - version: 28.1.2 - resolution: "@jest/source-map@npm:28.1.2" - dependencies: - "@jridgewell/trace-mapping": ^0.3.13 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/source-map@npm:29.0.0" - dependencies: - "@jridgewell/trace-mapping": ^0.3.15 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: dd97bc5826cf68d6eb5565383816332f800476232fd12800bd027a259cbf3ef216f1633405f3ad0861dde3b12a7886301798c078b334f6d3012044d43abcf4f6 - languageName: node - linkType: hard - -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/test-result@npm:29.0.2" - dependencies: - "@jest/console": ^29.0.2 - "@jest/types": ^29.0.2 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: be375eb8c2daf6dba46434a8a0339ee1a0d08c6c8c2ad2062b6c60a310bb6dc8242a7cfdec1536e883a0016889d159b0ddb909772f13b10e8bd45b7322aeabde - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-sequencer@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - slash: ^3.0.0 - checksum: 13f8905e6d1ec8286694146f7be3cf90eff801bbdea5e5c403e6881444bb390ed15494c7b9948aa94bd7e9c9a851e0d3002ed6e7371d048b478596e5b23df953 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/test-sequencer@npm:29.0.2" - dependencies: - "@jest/test-result": ^29.0.2 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.2 - slash: ^3.0.0 - checksum: 718b839eb711f660e44e585a8cc859650b33f32622710cd7bc4ee91fab9a35775fb271faaf6dde24012af062c8831a1ec239224134b99d9b913bb06ea07fb4f9 - languageName: node - linkType: hard - -"@jest/transform@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/transform@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: dadf618936e0aa84342f07f532801d5bed43cdf95d1417b929e4f8782c872cff1adc84096d5a287a796d0039a2691c06d8450cce5a713a8b52fbb9f872a1e760 - languageName: node - linkType: hard - -"@jest/transform@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/transform@npm:29.0.2" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.0.2 - "@jridgewell/trace-mapping": ^0.3.15 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.2 - jest-regex-util: ^29.0.0 - jest-util: ^29.0.2 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: 4a8fdd6e7fc48b0d211912428e0731027cc653507c05040b974a338d06b53238a2e1629dbd13a196d9562983291b2e0fd80790514fb2b8e80557cd33437e6be1 - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.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 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - -"@jest/types@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/types@npm:29.0.2" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: f093f4548f8022f5ac9d1edf712edbb5c8edb101017f4afd95b9f9eb978328d099dcb77e2f1893a6dfeb9a7dfdd6cc589b2d83829490cee7e9afa9166c2945bd - languageName: node - linkType: hard - "@joshdb/eslint-config@npm:1.1.0-next.a699598.0": version: 1.1.0-next.a699598.0 resolution: "@joshdb/eslint-config@npm:1.1.0-next.a699598.0" @@ -1161,14 +641,14 @@ __metadata: version: 0.0.0-use.local resolution: "@joshdb/indexeddb@workspace:packages/indexeddb" dependencies: - "@favware/cliff-jumper": ^1.8.5 - "@favware/rollup-type-bundler": ^1.0.9 - "@joshdb/provider": 1.1.0-next.24ef775.0 - fake-indexeddb: ^4.0.0 - jest: ^28.1.3 - property-helpers: ^1.1.0 - typedoc: ^0.23.9 - typedoc-json-parser: ^2.0.1 + "@favware/cliff-jumper": ^2.0.1 + "@favware/rollup-type-bundler": ^1.0.11 + "@joshdb/provider": 2.0.0-next.a699598.0 + "@vitest/coverage-v8": ^0.32.0 + property-helpers: ^2.0.0 + typedoc: ^0.24.8 + typedoc-json-parser: ^8.1.2 + vitest: ^0.32.0 languageName: unknown linkType: soft @@ -1429,16 +909,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.15 - resolution: "@jridgewell/trace-mapping@npm:0.3.15" - dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 - languageName: node - linkType: hard - "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" @@ -1640,6 +1110,13 @@ __metadata: languageName: node linkType: hard +"@sapphire/utilities@npm:3.11.2, @sapphire/utilities@npm:^3.11.0, @sapphire/utilities@npm:^3.11.2": + version: 3.11.2 + resolution: "@sapphire/utilities@npm:3.11.2" + checksum: af06b3f52156af397a3be564f992bedefd728ea2d44fee8ffdc00242de0454075e722091cc213d4ad2fb4ef5c3b78740bf5e7f75242851d31a56206f51a8f403 + languageName: node + linkType: hard + "@sapphire/utilities@npm:3.12.0, @sapphire/utilities@npm:^3.12.0": version: 3.12.0 resolution: "@sapphire/utilities@npm:3.12.0" @@ -1654,45 +1131,13 @@ __metadata: languageName: node linkType: hard -"@sapphire/utilities@npm:^3.7.0, @sapphire/utilities@npm:^3.9.3": - version: 3.9.3 - resolution: "@sapphire/utilities@npm:3.9.3" - checksum: 9f3f977fd5c0677d5f79136e9cb68ade3317cfba3e87bb58689f4af68233a807af34eb6092ad262c946d5eaf5c4a76cd534b0b395ebbaf0f0912dd80e174f912 - languageName: node - linkType: hard - -"@sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.2": +"@sapphire/utilities@npm:^3.9.2": version: 3.9.2 resolution: "@sapphire/utilities@npm:3.9.2" checksum: eeef33b03b802e931ada752b8c335cc8bde4017f8029b577b0247e3f3d2b57bf5f1936b2c8c29aef5e2c6975d9b162363e4c5c434c4fead0bba74253d067b4d9 languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.34 - resolution: "@sinclair/typebox@npm:0.24.34" - checksum: 35adcc7698fe751951e75fefe748a1d6e928afa3e52c153d1984a9d47c2a4f39e89f6adf727daef5cc12a58c71c2a0f63e3d88d105e4435252cfb68231518687 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.3 - resolution: "@sinonjs/commons@npm:1.8.3" - dependencies: - type-detect: 4.0.8 - checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^9.1.2": - version: 9.1.2 - resolution: "@sinonjs/fake-timers@npm:9.1.2" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -2414,123 +1859,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-jest@npm:28.1.3" - dependencies: - "@jest/transform": ^28.1.3 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^28.1.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 57ccd2296e1839687b5df2fd138c3d00717e0369e385254b012ccd4ee70e75f5d5c8e6cfcdf92d155015b468cfebb847b38e69bb5805d8aaf730e20575127cc6 - languageName: node - linkType: hard - -"babel-jest@npm:^29.0.2": - version: 29.0.2 - resolution: "babel-jest@npm:29.0.2" - dependencies: - "@jest/transform": ^29.0.2 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.0.2 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 33bd0b002237b1d015ee015b16f659660bf80880409b190c0e78132e7cc2a4b3443805ced9c40690d613ba425d18b4f241ffe406ed6878d4394b68e01519ede8 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - 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 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-plugin-jest-hoist@npm:28.1.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 648d89f9d80f6450ce7e50d0c32eb91b7f26269b47c3e37aaf2e0f2f66a980978345bd6b8c9b8c3aa6a8252ad2bc2c9fb50630e9895622c9a0972af5f70ed20e - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.0.2": - version: 29.0.2 - resolution: "babel-plugin-jest-hoist@npm:29.0.2" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: e02ab2c56b471940bc147d75808f6fb5d18b81382088beb36088d2fee8c5f9699b2a814a98884539191d43871d66770928e09c268c095ec39aad5766c3337f34 - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - 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 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-preset-jest@npm:28.1.3" - dependencies: - babel-plugin-jest-hoist: ^28.1.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d - languageName: node - linkType: hard - -"babel-preset-jest@npm:^29.0.2": - version: 29.0.2 - resolution: "babel-preset-jest@npm:29.0.2" - dependencies: - babel-plugin-jest-hoist: ^29.0.2 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 485db525f4cd38c02c29edcd7240dd232e8d6dbcaef88bfa4765ad3057ed733512f1b7aad06f4bf9661afefeb0ada2c4e259d130113b0289d7db574f82bbd4f8 - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2538,13 +1866,6 @@ __metadata: languageName: node linkType: hard -"base64-arraybuffer-es6@npm:^0.7.0": - version: 0.7.0 - resolution: "base64-arraybuffer-es6@npm:0.7.0" - checksum: 6d2fd114df49201b476cea5d470504e5d4e8c4cd42544152b312c9bdcb824313086fe83f1ffc34262e9e276b82d46aefc6e63bb85553f016932061137b355cdf - languageName: node - linkType: hard - "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -3290,15 +2611,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^1.0.1": - version: 1.0.1 - resolution: "domexception@npm:1.0.1" - dependencies: - webidl-conversions: ^4.0.2 - checksum: f564a9c0915dcb83ceefea49df14aaed106b1468fbe505119e8bcb0b77e242534f3aba861978537c0fc9dc6f35b176d0ffc77b3e342820fb27a8f215e7ae4d52 - languageName: node - linkType: hard - "dot-prop@npm:^5.1.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -3727,13 +3039,6 @@ __metadata: languageName: node linkType: hard -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - "expand-template@npm:^2.0.3": version: 2.0.3 resolution: "expand-template@npm:2.0.3" @@ -3741,41 +3046,6 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.0.0, expect@npm:^28.1.3": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d - languageName: node - linkType: hard - -"expect@npm:^29.0.2": - version: 29.0.2 - resolution: "expect@npm:29.0.2" - dependencies: - "@jest/expect-utils": ^29.0.2 - jest-get-type: ^29.0.0 - jest-matcher-utils: ^29.0.2 - jest-message-util: ^29.0.2 - jest-util: ^29.0.2 - checksum: 1e2a3707cd27c3485cb2ed0f1793cfca9efa67ec1e18ca3dc36c5d09e7219ba05e948d3e91bdaa01cc2f8cf1def5711ca0e484ba665e755f9d0aeba4884eab83 - languageName: node - linkType: hard - -"fake-indexeddb@npm:^4.0.0": - version: 4.0.0 - resolution: "fake-indexeddb@npm:4.0.0" - dependencies: - realistic-structured-clone: ^3.0.0 - checksum: 6f61d5ed77915cbb4b5c22f030f7017318edc84dbde0b24bd4e82fb4c311f30d02f890cb144aee6e7f296a917f3393ae3d989a28af6a304a3c2b2471ca7de151 - languageName: node - linkType: hard - "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -4463,1088 +3733,197 @@ __metadata: languageName: node linkType: hard -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"ini@npm:^1.3.4, ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f - languageName: node - linkType: hard - -"is-core-module@npm:^2.12.0, is-core-module@npm:^2.5.0": - version: 2.12.1 - resolution: "is-core-module@npm:2.12.1" - dependencies: - has: ^1.0.3 - checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "is-obj@npm:2.0.0" - checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"is-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "is-stream@npm:3.0.0" - checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 - languageName: node - linkType: hard - -"is-text-path@npm:^1.0.1": - version: 1.0.1 - resolution: "is-text-path@npm:1.0.1" - dependencies: - text-extensions: ^1.0.0 - checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^3.0.0 - supports-color: ^7.1.0 - checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.1": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.5": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 - languageName: node - linkType: hard - -"jackspeak@npm:^2.0.3": - version: 2.2.1 - resolution: "jackspeak@npm:2.2.1" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df - languageName: node - linkType: hard - -"jest-changed-files@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-changed-files@npm:28.1.3" - dependencies: - execa: ^5.0.0 - p-limit: ^3.1.0 - checksum: c78af14a68b9b19101623ae7fde15a2488f9b3dbe8cca12a05c4a223bc9bfd3bf41ee06830f20fb560c52434435d6153c9cc6cf450b1f7b03e5e7f96a953a6a6 - languageName: node - linkType: hard - -"jest-changed-files@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-changed-files@npm:29.0.0" - dependencies: - execa: ^5.0.0 - p-limit: ^3.1.0 - checksum: 5642ace8cd1e7e4f9e3ee423b97d0b018b00ad85ea7e5864592b4657e8500ef56ec50d2189229b912223046bbf31c9196c8ef2442a917be9726a5911d40db1b2 - languageName: node - linkType: hard - -"jest-circus@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-circus@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - is-generator-fn: ^2.0.0 - jest-each: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - p-limit: ^3.1.0 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: b635e60a9c92adaefc3f24def8eba691e7c2fdcf6c9fa640cddf2eb8c8b26ee62eab73ebb88798fd7c52a74c1495a984e39b748429b610426f02e9d3d56e09b2 - languageName: node - linkType: hard - -"jest-circus@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-circus@npm:29.0.2" - dependencies: - "@jest/environment": ^29.0.2 - "@jest/expect": ^29.0.2 - "@jest/test-result": ^29.0.2 - "@jest/types": ^29.0.2 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - is-generator-fn: ^2.0.0 - jest-each: ^29.0.2 - jest-matcher-utils: ^29.0.2 - jest-message-util: ^29.0.2 - jest-runtime: ^29.0.2 - jest-snapshot: ^29.0.2 - jest-util: ^29.0.2 - p-limit: ^3.1.0 - pretty-format: ^29.0.2 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 334a74c067a8d42eb37f059a5279c58a2d10134530e4996c4d87d8bc7849bd1a141f683b6599735eac8fe30bee3ad18f2233881d0bf2363282a9f596c9f9abab - languageName: node - linkType: hard - -"jest-cli@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-cli@npm:28.1.3" - dependencies: - "@jest/core": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - import-local: ^3.0.2 - jest-config: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - prompts: ^2.0.1 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: fb424576bf38346318daddee3fcc597cd78cb8dda1759d09c529d8ba1a748f2765c17b00671072a838826e59465a810ff8a232bc6ba2395c131bf3504425a363 - languageName: node - linkType: hard - -"jest-cli@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-cli@npm:29.0.2" - dependencies: - "@jest/core": ^29.0.2 - "@jest/test-result": ^29.0.2 - "@jest/types": ^29.0.2 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - import-local: ^3.0.2 - jest-config: ^29.0.2 - jest-util: ^29.0.2 - jest-validate: ^29.0.2 - prompts: ^2.0.1 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 765ca44584279d5ee6fe053ed39a298f6b48d98732e80657081e8ca086927ad5c6fb3ac15a878a2929e100982f3c1bffaf02e3f5966bf41167822fc3954b64bc - languageName: node - linkType: hard - -"jest-config@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-config@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^28.1.3 - "@jest/types": ^28.1.3 - babel-jest: ^28.1.3 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^28.1.3 - jest-environment-node: ^28.1.3 - jest-get-type: ^28.0.2 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-runner: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^28.1.3 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: ddabffd3a3a8cb6c2f58f06cdf3535157dbf8c70bcde3e5c3de7bee6a8d617840ffc8cffb0083e38c6814f2a08c225ca19f58898efaf4f351af94679f22ce6bc - languageName: node - linkType: hard - -"jest-config@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-config@npm:29.0.2" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.0.2 - "@jest/types": ^29.0.2 - babel-jest: ^29.0.2 - 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.0.2 - jest-environment-node: ^29.0.2 - jest-get-type: ^29.0.0 - jest-regex-util: ^29.0.0 - jest-resolve: ^29.0.2 - jest-runner: ^29.0.2 - jest-util: ^29.0.2 - jest-validate: ^29.0.2 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^29.0.2 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 899a5d2996f9e6b3520dcae49283b85bbddb65dcdf3f08fa97dc8da6b2be410531519e53be825185904eae6960d7055f8082d02485fa1dbb5c3781ebfcfda938 - languageName: node - linkType: hard - -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 - languageName: node - linkType: hard - -"jest-diff@npm:^29.0.0": - version: 29.0.1 - resolution: "jest-diff@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.0.0 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: f6f80ab9af14dee8046342d074ab64b1c0c4eb5d4a5d71aec0c71eba0192be1864fc5c270a33c6163184561b1fe516c0e2ecd3f21b267340cf710bab61441b3d - languageName: node - linkType: hard - -"jest-diff@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-diff@npm:29.0.2" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.0.0 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.2 - checksum: fbf4f4a2502b4a5b46233fbcd77cc664de452d1612ebad670c3a4d1920985b16abdef3ebe7ce692efc3c7da8312f1b7253a4bb9027e98db1fb3c92cd53324aa9 - languageName: node - linkType: hard - -"jest-docblock@npm:^28.1.1": - version: 28.1.1 - resolution: "jest-docblock@npm:28.1.1" - dependencies: - detect-newline: ^3.0.0 - checksum: 22fca68d988ecb2933bc65f448facdca85fc71b4bd0a188ea09a5ae1b0cc3a049a2a6ec7e7eaa2542c1d5cb5e5145e420a3df4fa280f5070f486c44da1d36151 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-docblock@npm:29.0.0" - dependencies: - detect-newline: ^3.0.0 - checksum: b4f81426cc0dffb05b873d3cc373a1643040be62d72cce4dfed499fbcb57c55ac02c44af7aba5e7753915ff5e85b8d6030456981156eaea20be1cb57d2719904 - languageName: node - linkType: hard - -"jest-each@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-each@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - jest-util: ^28.1.3 - pretty-format: ^28.1.3 - checksum: 5c5b8ccb1484e58b027bea682cfa020a45e5bf5379cc7c23bdec972576c1dc3c3bf03df2b78416cefc1a58859dd33b7cf5fff54c370bc3c0f14a3e509eb87282 - languageName: node - linkType: hard - -"jest-each@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-each@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - chalk: ^4.0.0 - jest-get-type: ^29.0.0 - jest-util: ^29.0.2 - pretty-format: ^29.0.2 - checksum: e64222fd050cbb057a8043c2546615f7ed0da22c59f54da0762e717b72489c686bf0f3be43973d74e50f0245dd4d39dcdb86b3553335fbe70e9684f73f3cf99d - languageName: node - linkType: hard - -"jest-environment-node@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-environment-node@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: 1048fe306a6a8b0880a4c66278ebb57479f29c12cff89aab3aa79ab77a8859cf17ab8aa9919fd21c329a7db90e35581b43664e694ad453d5b04e00f3c6420469 - languageName: node - linkType: hard - -"jest-environment-node@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-environment-node@npm:29.0.2" - dependencies: - "@jest/environment": ^29.0.2 - "@jest/fake-timers": ^29.0.2 - "@jest/types": ^29.0.2 - "@types/node": "*" - jest-mock: ^29.0.2 - jest-util: ^29.0.2 - checksum: 7c95aa56b9b24e859e03e0625f55e2b44c99629c7a18762681066c0a837e176405cd9bb81353b32838e2f70f4620259b2cbfb49cda36bdd1276e58e4fb384386 - languageName: node - linkType: hard - -"jest-extended@npm:^3.1.0": - version: 3.1.0 - resolution: "jest-extended@npm:3.1.0" - dependencies: - jest-diff: ^29.0.0 - jest-get-type: ^29.0.0 - peerDependencies: - jest: ">=27.2.5" - checksum: 1656670f7c58419f2ab1ff177db03b79e974faae88b4bdeaa4188fe962a623d77a78df0f9f06dc8a8a945c6e8d081fa48a8d3cf220434cc2ef7831dfa4ee9413 - languageName: node - linkType: hard - -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - -"jest-get-type@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-get-type@npm:29.0.0" - checksum: 9abdd11d69788963a92fb9d813a7b887654ecc8f3a3c8bf83166d33aaf4d57ed380e74ab8ef106f57565dd235446ca6ebc607679f0c516c4633e6d09f0540a2b - languageName: node - linkType: hard - -"jest-haste-map@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-haste-map@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: d05fdc108645fc2b39fcd4001952cc7a8cb550e93494e98c1e9ab1fc542686f6ac67177c132e564cf94fe8f81503f3f8db8b825b9b713dc8c5748aec63ba4688 - languageName: node - linkType: hard - -"jest-haste-map@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-haste-map@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.0.0 - jest-util: ^29.0.2 - jest-worker: ^29.0.2 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df - languageName: node - linkType: hard - -"jest-leak-detector@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-leak-detector@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-leak-detector@npm:29.0.2" - dependencies: - jest-get-type: ^29.0.0 - pretty-format: ^29.0.2 - checksum: bc10d75bc6dccf82f47d1d77bb90875726327aff1b3a9a095f063d84be550cb401a287d58effd363b934ecc3ad8f2e555cad476e5435fef13dc82fee2e1367b6 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-matcher-utils@npm:29.0.2" +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" dependencies: - chalk: ^4.0.0 - jest-diff: ^29.0.2 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.2 - checksum: bc266a28e4d0035ae6e3c8e494056cf8253a128b93447114b7fdb9d311520a999bc83e6f6d445f3b57f67236af99e916dca9acbfb0a93f437b89ec586f711a0d + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd languageName: node linkType: hard -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard -"jest-message-util@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-message-util@npm:29.0.2" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.0.2 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.0.2 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: f75215e1a022b3063bbe5757db5c87d3dc0c0cc43a5afcfbb15f137872d51aa98e4238c0c77302ef1e2296701660e338510e644abde2d0e3ae42f62d4bad7abd +"ini@npm:^1.3.4, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 languageName: node linkType: hard -"jest-mock@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-mock@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - checksum: a573bf8e5f12f4c29c661266c31b5c6b69a28d3195b83049983bce025b2b1a0152351567e89e63b102ef817034c2a3aa97eda4e776f3bae2aee54c5765573aa7 +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard -"jest-mock@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-mock@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - "@types/node": "*" - checksum: e4d2fe7e254fbb0dfa4f0b9278a9dba3db3c928bdfaf1c05dcb5afb8cacbb31070df896c643c9215a43bf0837181c5d1fd523af6ed3bf637ef225aaa5e6205a4 +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f languageName: node linkType: hard -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.2 - resolution: "jest-pnp-resolver@npm:1.2.2" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 +"is-core-module@npm:^2.12.0, is-core-module@npm:^2.5.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: ^1.0.3 + checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 languageName: node linkType: hard -"jest-regex-util@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 languageName: node linkType: hard -"jest-regex-util@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-regex-util@npm:29.0.0" - checksum: dce16394c357213008e6f84f2288f77c64bba59b7cb48ea614e85c5aae036a7e46dbfd1f45aa08180b7e7c576102bf4f8f0ff8bc60fb9721fb80874adc3ae0ea +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 languageName: node linkType: hard -"jest-resolve-dependencies@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve-dependencies@npm:28.1.3" - dependencies: - jest-regex-util: ^28.0.2 - jest-snapshot: ^28.1.3 - checksum: 4eea9ec33aefc1c71dc5956391efbcc7be76bda986b366ab3931d99c5f7ed01c9ebd7520e405ea2c76e1bb2c7ce504be6eca2b9831df16564d1e625500f3bfe7 +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-resolve-dependencies@npm:29.0.2" +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" dependencies: - jest-regex-util: ^29.0.0 - jest-snapshot: ^29.0.2 - checksum: 98107bd4fc651a5ff80531e44aa49f9c5216e5ed46ebb568ffcd2e2f8632d05f4678ce09fbce6ab2a71df3c240f5022d826092ee5840f000946f072c8a83aa3c + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 languageName: node linkType: hard -"jest-resolve@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-pnp-resolver: ^1.2.2 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: df61a490c93f4f4cf52135e43d6a4fcacb07b0b7d4acc6319e9289529c1d14f2d8e1638e095dbf96f156834802755e38db68caca69dba21a3261ee711d4426b6 +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 languageName: node linkType: hard -"jest-resolve@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-resolve@npm:29.0.2" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.2 - jest-pnp-resolver: ^1.2.2 - jest-util: ^29.0.2 - jest-validate: ^29.0.2 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: 857a79b1c4e8d6ddca54f318d2612a8cae528f6749e8e612e7b1e1213482a5abd0b89551c842f5193b3cf06544fc67535a533f07295eb69d6991bf6cf8d58423 +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a languageName: node linkType: hard -"jest-runner@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runner@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/environment": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.10.2 - graceful-fs: ^4.2.9 - jest-docblock: ^28.1.1 - jest-environment-node: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-leak-detector: ^28.1.3 - jest-message-util: ^28.1.3 - jest-resolve: ^28.1.3 - jest-runtime: ^28.1.3 - jest-util: ^28.1.3 - jest-watcher: ^28.1.3 - jest-worker: ^28.1.3 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: 32405cd970fa6b11e039192dae699fd1bcc6f61f67d50605af81d193f24dd4373b25f5fcc1c571a028ec1b02174e8a4b6d0d608772063fb06f08a5105693533b - languageName: node - linkType: hard - -"jest-runner@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-runner@npm:29.0.2" - dependencies: - "@jest/console": ^29.0.2 - "@jest/environment": ^29.0.2 - "@jest/test-result": ^29.0.2 - "@jest/transform": ^29.0.2 - "@jest/types": ^29.0.2 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.10.2 - graceful-fs: ^4.2.9 - jest-docblock: ^29.0.0 - jest-environment-node: ^29.0.2 - jest-haste-map: ^29.0.2 - jest-leak-detector: ^29.0.2 - jest-message-util: ^29.0.2 - jest-resolve: ^29.0.2 - jest-runtime: ^29.0.2 - jest-util: ^29.0.2 - jest-watcher: ^29.0.2 - jest-worker: ^29.0.2 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: e1a74ef52156b4ce41119db4467df868a4bcba467f2a2fa1e0a8cf63866ccb1e5f49341c7e12bb4f3f6a06d5e0ae0f359649f295cf6b6a19b70e41ee314278d4 - languageName: node - linkType: hard - -"jest-runtime@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runtime@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/globals": ^28.1.3 - "@jest/source-map": ^28.1.2 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: b17c40af858e74dafa4f515ef3711c1e9ef3d4ad7d74534ee0745422534bc04fd166d4eceb62a3aa7dc951505d6f6d2a81d16e90bebb032be409ec0500974a36 +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 languageName: node linkType: hard -"jest-runtime@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-runtime@npm:29.0.2" - dependencies: - "@jest/environment": ^29.0.2 - "@jest/fake-timers": ^29.0.2 - "@jest/globals": ^29.0.2 - "@jest/source-map": ^29.0.0 - "@jest/test-result": ^29.0.2 - "@jest/transform": ^29.0.2 - "@jest/types": ^29.0.2 - "@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.0.2 - jest-message-util: ^29.0.2 - jest-mock: ^29.0.2 - jest-regex-util: ^29.0.0 - jest-resolve: ^29.0.2 - jest-snapshot: ^29.0.2 - jest-util: ^29.0.2 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: 0b0a1a23ae2b2ca9e1b4dacd45bc2ae66fb47dd0e5cbea275398e0eb6b892c784546011fad59bd7572998b1b1442cff30bdbe9e02493c1bbc5d6be01cec1c5f8 - languageName: node - linkType: hard - -"jest-snapshot@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-snapshot@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^28.1.3 - graceful-fs: ^4.2.9 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - jest-haste-map: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - natural-compare: ^1.4.0 - pretty-format: ^28.1.3 - semver: ^7.3.5 - checksum: 2a46a5493f1fb50b0a236a21f25045e7f46a244f9f3ae37ef4fbcd40249d0d68bb20c950ce77439e4e2cac985b05c3061c90b34739bf6069913a1199c8c716e1 - languageName: node - linkType: hard - -"jest-snapshot@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-snapshot@npm:29.0.2" - 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.0.2 - "@jest/transform": ^29.0.2 - "@jest/types": ^29.0.2 - "@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.0.2 - graceful-fs: ^4.2.9 - jest-diff: ^29.0.2 - jest-get-type: ^29.0.0 - jest-haste-map: ^29.0.2 - jest-matcher-utils: ^29.0.2 - jest-message-util: ^29.0.2 - jest-util: ^29.0.2 - natural-compare: ^1.4.0 - pretty-format: ^29.0.2 - semver: ^7.3.5 - checksum: a5cc84626b36b3cd649c11fac96f81dcc9f1b24b7969418d1a8c7c3ce792a90cc013e6077b38daf807de1f37b2eee8223c390f7c7a34517935896807f3b9529b +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 languageName: node linkType: hard -"jest-util@npm:^28.0.0, jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 languageName: node linkType: hard -"jest-util@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-util@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: ee7a264ac9968f5c2fc6d79b7b76c8df4b22762e3c45c92a35e66e81b9fb45c341b03e5e18d8c4de4cd19ab7faf70a67ec419e6b57b5dfc61b84e96719649838 +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 languageName: node linkType: hard -"jest-validate@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-validate@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - leven: ^3.1.0 - pretty-format: ^28.1.3 - checksum: 95e0513b3803c3372a145cda86edbdb33d9dfeaa18818176f2d581e821548ceac9a179f065b6d4671a941de211354efd67f1fff8789a4fb89962565c85f646db +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 languageName: node linkType: hard -"jest-validate@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-validate@npm:29.0.2" +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" dependencies: - "@jest/types": ^29.0.2 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^29.0.0 - leven: ^3.1.0 - pretty-format: ^29.0.2 - checksum: 6d33bee7209aa735257e26b2eb887f3fd8fc4c6a072e52e97c3a51d4a90797e657dbe88a4df6de717aae3509e9979398f3b2ab2d7be5b26c30eaaa0dd0783b46 + text-extensions: ^1.0.0 + checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 languageName: node linkType: hard -"jest-watcher@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^28.1.3 - string-length: ^4.0.1 - checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 languageName: node linkType: hard -"jest-watcher@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-watcher@npm:29.0.2" - dependencies: - "@jest/test-result": ^29.0.2 - "@jest/types": ^29.0.2 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^29.0.2 - string-length: ^4.0.1 - checksum: 3e2c02e545facffbe8e0b845e8e6d21db893aa9ed706d6ce9673553c86757dbb8aec5cbe37fb2e17599d0165b08f471fe9194d906d4251c1729e5edb4f45af9a +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 languageName: node linkType: hard -"jest-worker@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b languageName: node linkType: hard -"jest-worker@npm:^29.0.2": - version: 29.0.2 - resolution: "jest-worker@npm:29.0.2" +"istanbul-lib-source-maps@npm:^4.0.1": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: e67fd41a25208235e27af4ad6d4b6d7a3f4eac45e4a27ba60f6c9a5ca85e0367bfcfb54d1425710b11b5a8342cf64ab8745e02a94dca106ff6d20144e9e6e175 + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 languageName: node linkType: hard -"jest@npm:^28.1.3": - version: 28.1.3 - resolution: "jest@npm:28.1.3" +"istanbul-reports@npm:^3.1.5": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" dependencies: - "@jest/core": ^28.1.3 - "@jest/types": ^28.1.3 - import-local: ^3.0.2 - jest-cli: ^28.1.3 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: b9dcb542eb7c16261c281cdc2bf37155dbb3f1205bae0b567f05051db362c85ddd4b765f126591efb88f6d298eb10336d0aa6c7d5373b4d53f918137a9a70182 + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 languageName: node linkType: hard -"jest@npm:^29.0.2": - version: 29.0.2 - resolution: "jest@npm:29.0.2" +"jackspeak@npm:^2.0.3": + version: 2.2.1 + resolution: "jackspeak@npm:2.2.1" dependencies: - "@jest/core": ^29.0.2 - "@jest/types": ^29.0.2 - import-local: ^3.0.2 - jest-cli: ^29.0.2 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": optional: true - bin: - jest: bin/jest.js - checksum: b2af093f34e2e835141ba8ef3e4b3cc03e51eb05b1ed438071500ecfbf2e8681a85ef44cb331087b3f835cc050731a26b03bd40f98f2e8927a50b2e1a5806636 + checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df languageName: node linkType: hard @@ -5812,13 +4191,6 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.7.0": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - "lodash@npm:^4.17.15, lodash@npm:^4.17.20": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -6986,17 +5358,6 @@ __metadata: languageName: node linkType: hard -"realistic-structured-clone@npm:^3.0.0": - version: 3.0.0 - resolution: "realistic-structured-clone@npm:3.0.0" - dependencies: - domexception: ^1.0.1 - typeson: ^6.1.0 - typeson-registry: ^1.0.0-alpha.20 - checksum: b4521b299c8dc320a5e3ef44678f80a92b0f1837901a5fbd1c7be06808110fb0b591b417114306ec55b44ef47fd17968aacca079afc9665afbe1c528026295ec - languageName: node - linkType: hard - "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -7133,7 +5494,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -7855,15 +6216,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -8102,55 +6454,6 @@ __metadata: languageName: node linkType: hard -"typedoc-json-parser@npm:^2.0.1, typedoc-json-parser@npm:^2.3.1": - version: 2.3.1 - resolution: "typedoc-json-parser@npm:2.3.1" - dependencies: - "@favware/colorette-spinner": ^1.0.0 - colorette: ^2.0.19 - commander: ^9.4.0 - js-yaml: ^4.1.0 - tslib: ^2.4.0 - typedoc: ^0.23.10 - bin: - typedoc-json-parser: ./dist/bin/index.js - checksum: 9223c36cc93cc9c71b710532080b282c3c4e5ff9836474d2af6701058bd3073f4078d4286f08572de7e32983db9967a4d71d37c0250382130f8e738636d3406b - languageName: node - linkType: hard - -"typedoc-json-parser@npm:^2.0.1, typedoc-json-parser@npm:^2.3.2": - version: 2.3.2 - resolution: "typedoc-json-parser@npm:2.3.2" - dependencies: - "@favware/colorette-spinner": ^1.0.0 - colorette: ^2.0.19 - commander: ^9.4.0 - js-yaml: ^4.1.0 - tslib: ^2.4.0 - typedoc: ^0.23.10 - bin: - typedoc-json-parser: ./dist/bin/index.js - checksum: 9223c36cc93cc9c71b710532080b282c3c4e5ff9836474d2af6701058bd3073f4078d4286f08572de7e32983db9967a4d71d37c0250382130f8e738636d3406b - languageName: node - linkType: hard - -"typedoc-json-parser@npm:^3.1.0": - version: 3.1.0 - resolution: "typedoc-json-parser@npm:3.1.0" - dependencies: - "@favware/colorette-spinner": ^1.0.1 - "@sapphire/node-utilities": ^1.0.0 - colorette: ^2.0.20 - commander: ^10.0.1 - js-yaml: ^4.1.0 - tslib: ^2.5.2 - typedoc: ^0.24.7 - bin: - typedoc-json-parser: ./dist/bin/index.js - checksum: d4b7feb654dbff856412ae143b47741323f46c1ebafe72ca7522820e1f352f745f19ac42d3ff37c519e24632b93fc167ed509a613849b715bdfd12d30917eb53 - languageName: node - linkType: hard - "typedoc-json-parser@npm:^8.1.2": version: 8.1.2 resolution: "typedoc-json-parser@npm:8.1.2" @@ -8289,24 +6592,6 @@ __metadata: languageName: node linkType: hard -"typeson-registry@npm:^1.0.0-alpha.20": - version: 1.0.0-alpha.39 - resolution: "typeson-registry@npm:1.0.0-alpha.39" - dependencies: - base64-arraybuffer-es6: ^0.7.0 - typeson: ^6.0.0 - whatwg-url: ^8.4.0 - checksum: c6b629697acf4652aecfff7be760356d764600afc9beca253278bbfc44fae0fe635b7619201b83e497cdc30645cbce7614d12a04b5726d9b8b505f73e6a3fc2a - languageName: node - linkType: hard - -"typeson@npm:^6.0.0, typeson@npm:^6.1.0": - version: 6.1.0 - resolution: "typeson@npm:6.1.0" - checksum: 00a77b03ac8f704acb103307bad9295fe47d6b304c386297f078ec3be63875c0b81e022a4815edb9dc2c7da0a72a431345411d35c755a8510af4a420e9e46cdc - languageName: node - linkType: hard - "ufo@npm:^1.1.2": version: 1.1.2 resolution: "ufo@npm:1.1.2" @@ -8554,20 +6839,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -8602,17 +6873,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^8.4.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e - languageName: node - linkType: hard - "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" From c13a42283291b8f8ed7dee22f6497718f941c959 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Sat, 17 Jun 2023 23:21:14 -0600 Subject: [PATCH 10/19] feat: some random stuff --- packages/indexeddb/package.json | 3 +- packages/indexeddb/src/lib/DbHandler.ts | 27 +-- .../indexeddb/src/lib/IndexedDBProvider.ts | 224 ++++++++++-------- packages/indexeddb/src/lib/helpers.ts | 15 ++ .../tests/lib/IndexedDBProvider.test.ts | 2 +- yarn.lock | 91 ++++++- 6 files changed, 245 insertions(+), 117 deletions(-) create mode 100644 packages/indexeddb/src/lib/helpers.ts diff --git a/packages/indexeddb/package.json b/packages/indexeddb/package.json index e1ea49c0..a92e031a 100644 --- a/packages/indexeddb/package.json +++ b/packages/indexeddb/package.json @@ -4,7 +4,7 @@ "description": "A Josh provider", "author": "Γ‰velyne Lachance (https://evie.codes/)", "contributors": [ - "WilsontheWolf (https://wilson.antti.codes/)", + "WilsontheWolf (https://shorty.systems/)", "DanCodes (https://dancodes.online/)" ], "license": "Apache-2.0", @@ -36,6 +36,7 @@ "@favware/cliff-jumper": "^2.0.1", "@favware/rollup-type-bundler": "^1.0.11", "@vitest/coverage-v8": "^0.32.0", + "fake-indexeddb": "^4.0.1", "typedoc": "^0.24.8", "typedoc-json-parser": "^8.1.2", "vitest": "^0.32.0" diff --git a/packages/indexeddb/src/lib/DbHandler.ts b/packages/indexeddb/src/lib/DbHandler.ts index 66c55e53..e081dec0 100644 --- a/packages/indexeddb/src/lib/DbHandler.ts +++ b/packages/indexeddb/src/lib/DbHandler.ts @@ -1,13 +1,13 @@ -export default class DbHandler { +export default class DbHandler { private idb: IDBFactory; private db!: IDBDatabase; public constructor() { - if (!indexedDB) { + if (!globalThis.indexedDB) { throw new Error("Your browser doesn't support a stable version of IndexedDB. Josh is unable to run without one."); } - this.idb = indexedDB; + this.idb = globalThis.indexedDB; } public init() { @@ -31,7 +31,7 @@ export default class DbHandler { }); } - public async set(key: string, value: unknown) { + public async set(key: string, value: Value) { const all = this.open(); const doc = { key, @@ -43,35 +43,34 @@ export default class DbHandler { await this.handleEvents(request); } - public async get(key: string) { + public async get(key: string): Promise { const all = this.open(); const request = all.get(key); - const result = await this.handleEvents(request); + const result = (await this.handleEvents(request)) as { + value: Value | undefined; // Its shit like this why I don't like TS + }; - // @ts-ignore it exists f you TS return result?.value; } - public async getAll() { + public async getAll(): Promise<{ [key: string]: Value }> { const all = this.open(); const request = all.getAll(); - const docs = await this.handleEvents(request); - const final = {}; + const docs = (await this.handleEvents(request)) as { key: string; value: Value }[]; + const final: { [key: string]: Value } = {}; // Why can't this be inferred from usage???? - // @ts-ignore TS GO AWAY docs.forEach((x) => { - // @ts-ignore TS GO AWAY final[x.key] = x.value; }); return final; } - public async getKeys() { + public async getKeys(): Promise { const all = this.open(); const request = all.getAllKeys(); - return this.handleEvents(request); + return (await this.handleEvents(request)) as string[]; } public async count() { diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index 1f9a18a8..e94fa0bb 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -1,6 +1,8 @@ -import { CommonIdentifiers, JoshProvider, MathOperator, Method, Payloads } from '@joshdb/provider'; -import { PROPERTY_NOT_FOUND, deleteProperty, getProperty, hasProperty, setProperty } from 'property-helpers'; +// // @ts-nocheck +import { CommonIdentifiers, JoshProvider, MathOperator, Method, Payload, resolveVersion, type Semver } from '@joshdb/provider'; +import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; import DbHandler from './DbHandler'; +import { handleSubCallFail } from './helpers'; export class IndexedDBProvider extends JoshProvider { public declare options: IndexedDBProvider.Options; @@ -8,10 +10,14 @@ export class IndexedDBProvider extends JoshProvider(); } - public async [Method.Each](payload: Payloads.Each): Promise> { + public get version(): Semver { + return resolveVersion('[VI]{version}[/VI]'); + } + + public async [Method.Each](payload: Payload.Each): Promise> { await this.check(); const { hook } = payload; @@ -23,7 +29,7 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.DeleteMany](payload: Payload.DeleteMany): Promise { await this.check(); for (const key of payload.keys) { @@ -33,7 +39,7 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.Delete](payload: Payload.Delete): Promise { await this.check(); const { key, path } = payload; @@ -50,7 +56,7 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.AutoKey](payload: Payload.AutoKey): Promise { await this.check(); payload.data = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); @@ -58,7 +64,7 @@ export class IndexedDBProvider extends JoshProvider(payload: Payloads.Values): Promise> { + public async [Method.Values](payload: Payload.Values): Promise> { await this.check(); payload.data = Object.values(await this.db.getAll()); @@ -66,22 +72,22 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.Math](payload: Payload.Math): Promise { await this.check(); const { key, path, operator, operand } = payload; - const getPayload = await this[Method.Get]({ method: Method.Get, key, path }); + const getPayload = await this[Method.Get]({ method: Method.Get, key, path, errors: [] }); - // @ts-expect-error 2532 No it's not + if (handleSubCallFail(getPayload, payload)) return payload; if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { - payload.error = this.error({ identifier: CommonIdentifiers.MissingData }); + payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; return payload; } let { data } = getPayload; if (typeof data !== 'number') { - payload.error = this.error({ identifier: CommonIdentifiers.InvalidDataType }); + payload.errors = [this.error({ identifier: CommonIdentifiers.InvalidDataType })]; return payload; } @@ -117,83 +123,92 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.Dec](payload: Payload.Dec): Promise { await this.check(); const { key, path } = payload; - const getPayload = await this[Method.Get]({ method: Method.Get, key, path }); - - // @ts-expect-error 2532 No it's not - if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { - payload.error = this.error({ identifier: CommonIdentifiers.MissingData }); - return payload; - } - - const { data } = getPayload; - - if (typeof data !== 'number') { - payload.error = this.error({ identifier: CommonIdentifiers.InvalidDataType }); - return payload; - } + const mathPayload = await this[Method.Math]({ + method: Method.Math, + key, + path, + operand: 1, + operator: MathOperator.Subtraction, + errors: [] + }); - await this[Method.Set]({ method: Method.Set, key, path, value: data - 1 }); + handleSubCallFail(mathPayload, payload); return payload; } - public async [Method.Inc](payload: Payloads.Inc): Promise { + public async [Method.Inc](payload: Payload.Inc): Promise { await this.check(); const { key, path } = payload; - const getPayload = await this[Method.Get]({ method: Method.Get, key, path }); - - // @ts-expect-error 2532 No it's not - if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { - payload.error = this.error({ identifier: CommonIdentifiers.MissingData }); - return payload; - } - - const { data } = getPayload; - - if (typeof data !== 'number') { - payload.error = this.error({ identifier: CommonIdentifiers.InvalidDataType }); - return payload; - } + const mathPayload = await this[Method.Math]({ + method: Method.Math, + key, + path, + operand: 1, + operator: MathOperator.Addition, + errors: [] + }); - await this[Method.Set]({ method: Method.Set, key, path, value: data + 1 }); + handleSubCallFail(mathPayload, payload); return payload; } - public async [Method.Keys](payload: Payloads.Keys): Promise { + public async [Method.Keys](payload: Payload.Keys): Promise { await this.check(); - // @ts-expect-error 2532 Trust me bro payload.data = await this.db.getKeys(); return payload; } - public async [Method.RandomKey](payload: Payloads.RandomKey): Promise { + public async [Method.RandomKey](payload: Payload.RandomKey): Promise { await this.check(); + const { count, duplicates } = payload; + const unique = !duplicates; // Duplicates is too hard for my head to work around + + payload.data = []; + const keys = await this.db.getKeys(); - // @ts-expect-error 2532 Trust me bro - if (keys.length !== 0) { - // @ts-expect-error 2532 Trust me bro - payload.data = [keys[Math.floor(Math.random() * keys.length)]]; + console.log('Hey shitass', keys.length, count, unique && keys.length < count); + + if (unique && keys.length > count) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount })); + return payload; + } + + if (keys.length === 0) { + return payload; + } + + if (unique && keys.length === count) { + payload.data = keys; + return payload; + } + + while (payload.data.length < count) { + const rand = keys[Math.floor(Math.random() * keys.length)]; + + if (unique && payload.data.includes(rand)) continue; + payload.data.push(rand); } return payload; } - public async [Method.Random](payload: Payloads.Random): Promise> { + public async [Method.Random](payload: Payload.Random): Promise> { await this.check(); // @ts-expect-error 2532 STFU @@ -206,14 +221,14 @@ export class IndexedDBProvider extends JoshProvider { + public override async init(context: JoshProvider.Context): Promise { context = await super.init(context); await this.db.init(); return context; } - public async [Method.Get](payload: Payloads.Get): Promise> { + public async [Method.Get](payload: Payload.Get): Promise> { await this.check(); const { key, path } = payload; @@ -224,7 +239,7 @@ export class IndexedDBProvider extends JoshProvider): Promise> { + public async [Method.Entries](payload: Payload.Entries): Promise> { await this.check(); payload.data = await this.db.getAll(); @@ -232,7 +247,7 @@ export class IndexedDBProvider extends JoshProvider): Promise> { + public async [Method.GetMany](payload: Payload.GetMany): Promise> { await this.check(); // according to old method this could be made into an index search @@ -251,7 +266,7 @@ export class IndexedDBProvider extends JoshProvider(payload: Payloads.Set): Promise> { + public async [Method.Set](payload: Payload.Set): Promise> { await this.check(); const { key, value, path } = payload; @@ -268,31 +283,30 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.SetMany](payload: Payload.SetMany): Promise { await this.check(); const { entries, overwrite } = payload; - for (const entry of entries) { - const [{ key, path }, value] = entry; - const found = await this.get({ key, method: Method.Get, path }); + for (const { key, path, value } of entries) { + const found = overwrite ? false : await this[Method.Get]({ key, method: Method.Get, path, errors: [] }); - if (!found || (found && overwrite)) { - await this.set({ key, value, path, method: Method.Set }); + if (!found) { + handleSubCallFail(await this[Method.Set]({ key, value, path, method: Method.Set, errors: [] }), payload); } } return payload; } - public async [Method.Clear](payload: Payloads.Clear): Promise { + public async [Method.Clear](payload: Payload.Clear): Promise { await this.check(); await this.db.clear(); return payload; } - public async [Method.Has](payload: Payloads.Has): Promise { + public async [Method.Has](payload: Payload.Has): Promise { await this.check(); const { key, path } = payload; @@ -306,87 +320,101 @@ export class IndexedDBProvider extends JoshProvider { + public async [Method.Size](payload: Payload.Size): Promise { await this.check(); payload.data = await this.db.count(); return payload; } - public async [Method.Push](payload: Payloads.Push): Promise> { + public async [Method.Push](payload: Payload.Push): Promise> { await this.check(); return payload; } - public async [Method.Ensure](payload: Payloads.Ensure): Promise> { + public async [Method.Ensure](payload: Payload.Ensure): Promise> { await this.check(); + + const { key, defaultValue } = payload; + + payload.data = defaultValue; + + const getPayload = await this[Method.Get]({ method: Method.Get, key, errors: [], path: [] }); + + if (handleSubCallFail(getPayload, payload)) return payload; + if (getPayload.data !== undefined && getPayload.data !== PROPERTY_NOT_FOUND) { + payload.data = getPayload.data; + } else { + handleSubCallFail(await this[Method.Set]({ method: Method.Set, key, path: [], value: defaultValue, errors: [] }), payload); + } + return payload; } - public async [Method.Every](payload: Payloads.Every.ByHook): Promise>; - public async [Method.Every](payload: Payloads.Every.ByValue): Promise; - public async [Method.Every](payload: Payloads.Every): Promise> { + public async [Method.Every](payload: Payload.Every.ByHook): Promise>; + public async [Method.Every](payload: Payload.Every.ByValue): Promise; + public async [Method.Every](payload: Payload.Every): Promise> { await this.check(); return payload; } - public async [Method.Filter](payload: Payloads.Filter.ByHook): Promise>; - public async [Method.Filter](payload: Payloads.Filter.ByValue): Promise>; - public async [Method.Filter](payload: Payloads.Filter): Promise> { + public async [Method.Filter](payload: Payload.Filter.ByHook): Promise>; + public async [Method.Filter](payload: Payload.Filter.ByValue): Promise>; + public async [Method.Filter](payload: Payload.Filter): Promise> { await this.check(); return payload; } - public async [Method.Find](payload: Payloads.Find.ByHook): Promise>; - public async [Method.Find](payload: Payloads.Find.ByValue): Promise>; - public async [Method.Find](payload: Payloads.Find): Promise> { + public async [Method.Find](payload: Payload.Find.ByHook): Promise>; + public async [Method.Find](payload: Payload.Find.ByValue): Promise>; + public async [Method.Find](payload: Payload.Find): Promise> { await this.check(); return payload; } - public async [Method.Map](payload: Payloads.Map.ByHook): Promise>; - public async [Method.Map](payload: Payloads.Map.ByPath): Promise>; - public async [Method.Map](payload: Payloads.Map): Promise> { + public async [Method.Map](payload: Payload.Map.ByHook): Promise>; + public async [Method.Map](payload: Payload.Map.ByPath): Promise>; + public async [Method.Map](payload: Payload.Map): Promise> { await this.check(); return payload; } - public async [Method.Partition](payload: Payloads.Partition.ByHook): Promise>; - public async [Method.Partition](payload: Payloads.Partition.ByValue): Promise>; - public async [Method.Partition](payload: Payloads.Partition): Promise> { + public async [Method.Partition](payload: Payload.Partition.ByHook): Promise>; + public async [Method.Partition](payload: Payload.Partition.ByValue): Promise>; + public async [Method.Partition](payload: Payload.Partition): Promise> { await this.check(); return payload; } - public async [Method.Remove](payload: Payloads.Remove.ByHook): Promise>; - public async [Method.Remove](payload: Payloads.Remove.ByValue): Promise; - public async [Method.Remove](payload: Payloads.Remove): Promise> { + public async [Method.Remove](payload: Payload.Remove.ByHook): Promise>; + public async [Method.Remove](payload: Payload.Remove.ByValue): Promise; + public async [Method.Remove](payload: Payload.Remove): Promise> { await this.check(); return payload; } - public async [Method.Some](payload: Payloads.Some.ByHook): Promise>; - public async [Method.Some](payload: Payloads.Some.ByValue): Promise; - public async [Method.Some](payload: Payloads.Some): Promise> { + public async [Method.Some](payload: Payload.Some.ByHook): Promise>; + public async [Method.Some](payload: Payload.Some.ByValue): Promise; + public async [Method.Some](payload: Payload.Some): Promise> { await this.check(); return payload; } - public async [Method.Update](payload: Payloads.Update): Promise> { + public async [Method.Update](payload: Payload.Update): Promise> { await this.check(); return payload; } - protected fetchVersion(context: JoshProvider.Context) { - context; - return this.resolveVersion('[VI]{version}[/VI]'); + protected fetchVersion() { + return this.version; } private async check(key: string | null = null, type: string[] | null = null, path: string[] = []) { if (!this.db) throw new Error('Database has been closed'); if (!key || !type) return; - const value = await this.get({ method: Method.Get, key, path }); + // I don't really know what exactly this check does. + const value = await this.get({ method: Method.Get, key, path, errors: [] }); if (value === null) { throw new Error( @@ -404,10 +432,6 @@ export class IndexedDBProvider extends JoshProvider { + if (res.errors.length) { + res.errors.forEach((err) => { + payload.errors.push(err); + }); + + return true; + } + + return false; +}; + +export { handleSubCallFail }; diff --git a/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts b/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts index fb9960e1..f3e9ea40 100644 --- a/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts +++ b/packages/indexeddb/tests/lib/IndexedDBProvider.test.ts @@ -1,4 +1,4 @@ -import { runProviderTest } from '@joshdb/provider'; +import { runProviderTest } from '@joshdb/provider/tests'; import 'fake-indexeddb/auto'; import { IndexedDBProvider } from '../../src'; diff --git a/yarn.lock b/yarn.lock index 5784c885..b88fb2b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -645,6 +645,7 @@ __metadata: "@favware/rollup-type-bundler": ^1.0.11 "@joshdb/provider": 2.0.0-next.a699598.0 "@vitest/coverage-v8": ^0.32.0 + fake-indexeddb: ^4.0.1 property-helpers: ^2.0.0 typedoc: ^0.24.8 typedoc-json-parser: ^8.1.2 @@ -1866,6 +1867,13 @@ __metadata: languageName: node linkType: hard +"base64-arraybuffer-es6@npm:^0.7.0": + version: 0.7.0 + resolution: "base64-arraybuffer-es6@npm:0.7.0" + checksum: 6d2fd114df49201b476cea5d470504e5d4e8c4cd42544152b312c9bdcb824313086fe83f1ffc34262e9e276b82d46aefc6e63bb85553f016932061137b355cdf + languageName: node + linkType: hard + "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -2611,6 +2619,15 @@ __metadata: languageName: node linkType: hard +"domexception@npm:^1.0.1": + version: 1.0.1 + resolution: "domexception@npm:1.0.1" + dependencies: + webidl-conversions: ^4.0.2 + checksum: f564a9c0915dcb83ceefea49df14aaed106b1468fbe505119e8bcb0b77e242534f3aba861978537c0fc9dc6f35b176d0ffc77b3e342820fb27a8f215e7ae4d52 + languageName: node + linkType: hard + "dot-prop@npm:^5.1.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -3046,6 +3063,15 @@ __metadata: languageName: node linkType: hard +"fake-indexeddb@npm:^4.0.1": + version: 4.0.1 + resolution: "fake-indexeddb@npm:4.0.1" + dependencies: + realistic-structured-clone: ^3.0.0 + checksum: dd1c82111e3b97c262a647a29dc012209f8c3bed0fbe7ae9630927772842fe8d3276794ff196d0021a5e60563a25a4323eca622a6a7bc6575b62e074328a0c90 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -4191,7 +4217,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.15, lodash@npm:^4.17.20": +"lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -5358,6 +5384,17 @@ __metadata: languageName: node linkType: hard +"realistic-structured-clone@npm:^3.0.0": + version: 3.0.0 + resolution: "realistic-structured-clone@npm:3.0.0" + dependencies: + domexception: ^1.0.1 + typeson: ^6.1.0 + typeson-registry: ^1.0.0-alpha.20 + checksum: b4521b299c8dc320a5e3ef44678f80a92b0f1837901a5fbd1c7be06808110fb0b591b417114306ec55b44ef47fd17968aacca079afc9665afbe1c528026295ec + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -6216,6 +6253,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^2.1.0": + version: 2.1.0 + resolution: "tr46@npm:2.1.0" + dependencies: + punycode: ^2.1.1 + checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + languageName: node + linkType: hard + "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -6592,6 +6638,24 @@ __metadata: languageName: node linkType: hard +"typeson-registry@npm:^1.0.0-alpha.20": + version: 1.0.0-alpha.39 + resolution: "typeson-registry@npm:1.0.0-alpha.39" + dependencies: + base64-arraybuffer-es6: ^0.7.0 + typeson: ^6.0.0 + whatwg-url: ^8.4.0 + checksum: c6b629697acf4652aecfff7be760356d764600afc9beca253278bbfc44fae0fe635b7619201b83e497cdc30645cbce7614d12a04b5726d9b8b505f73e6a3fc2a + languageName: node + linkType: hard + +"typeson@npm:^6.0.0, typeson@npm:^6.1.0": + version: 6.1.0 + resolution: "typeson@npm:6.1.0" + checksum: 00a77b03ac8f704acb103307bad9295fe47d6b304c386297f078ec3be63875c0b81e022a4815edb9dc2c7da0a72a431345411d35c755a8510af4a420e9e46cdc + languageName: node + linkType: hard + "ufo@npm:^1.1.2": version: 1.1.2 resolution: "ufo@npm:1.1.2" @@ -6839,6 +6903,20 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 + languageName: node + linkType: hard + +"webidl-conversions@npm:^6.1.0": + version: 6.1.0 + resolution: "webidl-conversions@npm:6.1.0" + checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -6873,6 +6951,17 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^8.4.0": + version: 8.7.0 + resolution: "whatwg-url@npm:8.7.0" + dependencies: + lodash: ^4.7.0 + tr46: ^2.1.0 + webidl-conversions: ^6.1.0 + checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + languageName: node + linkType: hard + "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" From 14633960ee56b17be4641f488f04a75e93d52b0b Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Thu, 29 Jun 2023 23:56:55 -0600 Subject: [PATCH 11/19] fix: code cleanup and random(Key) --- packages/indexeddb/src/lib/IndexedDBProvider.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index e94fa0bb..766a461d 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -177,22 +177,20 @@ export class IndexedDBProvider extends JoshProvider count) { + if (unique && keys.length < count) { payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount })); return payload; } if (keys.length === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData })); return payload; } + payload.data = []; + if (unique && keys.length === count) { payload.data = keys; return payload; From 9d1b10325d3ede1b7de42cd0b2c320e4feb61553 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Fri, 30 Jun 2023 00:06:56 -0600 Subject: [PATCH 12/19] feat: map --- .../indexeddb/src/lib/IndexedDBProvider.ts | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index 766a461d..33ebf5e8 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -1,5 +1,15 @@ // // @ts-nocheck -import { CommonIdentifiers, JoshProvider, MathOperator, Method, Payload, resolveVersion, type Semver } from '@joshdb/provider'; +import { + CommonIdentifiers, + isMapByHookPayload, + isMapByPathPayload, + JoshProvider, + MathOperator, + Method, + Payload, + resolveVersion, + type Semver +} from '@joshdb/provider'; import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; import DbHandler from './DbHandler'; import { handleSubCallFail } from './helpers'; @@ -374,6 +384,24 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Map.ByPath): Promise>; public async [Method.Map](payload: Payload.Map): Promise> { await this.check(); + payload.data = []; + + if (isMapByHookPayload(payload)) { + const { hook } = payload; + + for (const [key, value] of Object.entries(await this.db.getAll())) payload.data.push(await hook(value, key)); + } + + if (isMapByPathPayload(payload)) { + const { path } = payload; + + for (const value of Object.values(await this.db.getAll())) { + const data = getProperty(value, path); + + if (data !== PROPERTY_NOT_FOUND) payload.data.push(data); + } + } + return payload; } From 56464605077bd4210734150803898335aefeff13 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Fri, 30 Jun 2023 00:20:41 -0600 Subject: [PATCH 13/19] feat: filter & find --- .../indexeddb/src/lib/IndexedDBProvider.ts | 86 ++++++++++++++++++- packages/indexeddb/src/lib/helpers.ts | 6 +- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index 33ebf5e8..557e25f8 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -1,6 +1,10 @@ // // @ts-nocheck import { CommonIdentifiers, + isFilterByHookPayload, + isFilterByValuePayload, + isFindByHookPayload, + isFindByValuePayload, isMapByHookPayload, isMapByPathPayload, JoshProvider, @@ -12,7 +16,7 @@ import { } from '@joshdb/provider'; import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; import DbHandler from './DbHandler'; -import { handleSubCallFail } from './helpers'; +import { handleSubCallFail, isPrimitive } from './helpers'; export class IndexedDBProvider extends JoshProvider { public declare options: IndexedDBProvider.Options; @@ -370,6 +374,36 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Filter](payload: Payload.Filter): Promise> { await this.check(); + payload.data = {}; + + if (isFilterByHookPayload(payload)) { + const { hook } = payload; + + for (const [key, value] of Object.entries(await this.db.getAll())) if (await hook(value, key)) payload.data[key] = value; + } + + if (isFilterByValuePayload(payload)) { + const { path, value } = payload; + + for (const [key, storedValue] of Object.entries(await this.db.getAll())) { + const data = getProperty(storedValue, path, false); + + if (data === PROPERTY_NOT_FOUND) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Filter }, { key, path })); + + return payload; + } + + if (!isPrimitive(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Filter }, { key, path, type: 'primitive' })); + + return payload; + } + + if (data === value) payload.data[key] = storedValue; + } + } + return payload; } @@ -377,6 +411,56 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Find](payload: Payload.Find): Promise> { await this.check(); + payload.data = [null, null]; + + if (isFindByHookPayload(payload)) { + const { hook } = payload; + + for (const [key, value] of Object.entries(await this.db.getAll())) { + const result = await hook(value, key); + + if (!result) continue; + + payload.data = [key, value]; + + break; + } + } + + if (isFindByValuePayload(payload)) { + const { path, value } = payload; + + if (!isPrimitive(value)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Find }, { path, type: 'primitive' })); + + return payload; + } + + for (const [key, storedValue] of Object.entries(await this.db.getAll())) { + if (payload.data[0] !== null && payload.data[1] !== null) break; + + const data = getProperty(storedValue, path, false); + + if (data === PROPERTY_NOT_FOUND) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Find }, { key, path })); + + return payload; + } + + if (!isPrimitive(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Find }, { key, path, type: 'primitive' })); + + return payload; + } + + if (data !== value) continue; + + payload.data = [key, storedValue]; + + break; + } + } + return payload; } diff --git a/packages/indexeddb/src/lib/helpers.ts b/packages/indexeddb/src/lib/helpers.ts index 62da164f..4a2584b9 100644 --- a/packages/indexeddb/src/lib/helpers.ts +++ b/packages/indexeddb/src/lib/helpers.ts @@ -12,4 +12,8 @@ const handleSubCallFail = (res: Payload, payload: Payload) => { return false; }; -export { handleSubCallFail }; +const isPrimitive = (val: any) => { + return (typeof val !== 'object' && typeof val !== 'function') || val === null; +}; + +export { handleSubCallFail, isPrimitive }; From 36f4b8987edfc35fc40e7f472883b80f04b5c042 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Fri, 30 Jun 2023 21:09:59 -0600 Subject: [PATCH 14/19] feat: metadata, version and random changes --- packages/indexeddb/src/lib/DbHandler.ts | 64 ++++++++++++++++++- .../indexeddb/src/lib/IndexedDBProvider.ts | 24 ++++--- packages/indexeddb/src/lib/helpers.ts | 6 +- .../indexeddb/tests/lib/DbHandler.test.ts | 35 +++++++++- 4 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/indexeddb/src/lib/DbHandler.ts b/packages/indexeddb/src/lib/DbHandler.ts index e081dec0..3a315d69 100644 --- a/packages/indexeddb/src/lib/DbHandler.ts +++ b/packages/indexeddb/src/lib/DbHandler.ts @@ -1,3 +1,6 @@ +import type { JoshProvider, Semver } from '@joshdb/provider'; +import { version } from './helpers'; + export default class DbHandler { private idb: IDBFactory; private db!: IDBDatabase; @@ -10,8 +13,9 @@ export default class DbHandler { this.idb = globalThis.indexedDB; } - public init() { - const request = this.idb.open('josh'); + public init(context: JoshProvider.Context) { + const { name } = context; + const request = this.idb.open(`joshdb-${name}`, 1); return new Promise((resolve, reject) => { request.onerror = reject; @@ -19,13 +23,24 @@ export default class DbHandler { request.onupgradeneeded = () => { const db = request.result; + if (!db.objectStoreNames.contains('meta')) { + db.createObjectStore('meta', { keyPath: 'key' }); + } + if (!db.objectStoreNames.contains('store')) { db.createObjectStore('store', { keyPath: 'key' }); } }; - request.onsuccess = () => { + request.onsuccess = async () => { this.db = request.result; + + const storedVersion = (await this.getMetadata('version')) as Semver | undefined; + + if (!storedVersion) { + await this.setMetadata('version', version); + } + resolve(); }; }); @@ -101,6 +116,42 @@ export default class DbHandler { return (await this.get(key)) !== undefined; } + public async getMetadata(key: string): Promise { + const all = this.openMetadata(); + const request = all.get(key); + const result = (await this.handleEvents(request)) as { + value: unknown | undefined; // Its shit like this why I don't like TS + }; + + return result?.value; + } + + public async setMetadata(key: string, value: unknown) { + const all = this.openMetadata(); + const doc = { + key, + value + }; + + const request = all.put(doc); + + await this.handleEvents(request); + } + + public async deleteMetadata(key: string) { + const all = this.openMetadata(); + const request = all.delete(key); + + return this.handleEvents(request); + } + + public async clearMetadata() { + const all = this.openMetadata(); + const request = all.clear(); + + return this.handleEvents(request); + } + private handleEvents(request: IDBRequest) { return new Promise((res, rej) => { request.onsuccess = () => { @@ -119,4 +170,11 @@ export default class DbHandler { return all; } + + private openMetadata() { + const transaction = this.db.transaction('meta', 'readwrite'); + const all = transaction.objectStore('meta'); + + return all; + } } diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index 557e25f8..e95eb893 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -11,24 +11,33 @@ import { MathOperator, Method, Payload, - resolveVersion, type Semver } from '@joshdb/provider'; import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; import DbHandler from './DbHandler'; -import { handleSubCallFail, isPrimitive } from './helpers'; +import { handleSubCallFail, isPrimitive, version } from './helpers'; export class IndexedDBProvider extends JoshProvider { + public version: Semver = version; public declare options: IndexedDBProvider.Options; private db: DbHandler; + public constructor(options: IndexedDBProvider.Options) { super(options); this.db = new DbHandler(); } - public get version(): Semver { - return resolveVersion('[VI]{version}[/VI]'); + public deleteMetadata(key: string): void { + return this.db.deleteMetadata(key); + } + + public getMetadata(key: string): unknown { + return this.db.getMetadata(key); + } + + public setMetadata(key: string, value: unknown): void { + return this.db.setMetadata(key, value); } public async [Method.Each](payload: Payload.Each): Promise> { @@ -189,8 +198,7 @@ export class IndexedDBProvider extends JoshProvider { await this.check(); - const { count, duplicates } = payload; - const unique = !duplicates; // Duplicates is too hard for my head to work around + const { count, unique } = payload; const keys = await this.db.getKeys(); if (unique && keys.length < count) { @@ -234,8 +242,8 @@ export class IndexedDBProvider extends JoshProvider { + await this.db.init(context); context = await super.init(context); - await this.db.init(); return context; } @@ -516,7 +524,7 @@ export class IndexedDBProvider extends JoshProvider { if (res.errors.length) { @@ -16,4 +16,6 @@ const isPrimitive = (val: any) => { return (typeof val !== 'object' && typeof val !== 'function') || val === null; }; -export { handleSubCallFail, isPrimitive }; +const version = resolveVersion('[VI]{version}[/VI]'); + +export { handleSubCallFail, isPrimitive, version }; diff --git a/packages/indexeddb/tests/lib/DbHandler.test.ts b/packages/indexeddb/tests/lib/DbHandler.test.ts index 73886dbc..443de151 100644 --- a/packages/indexeddb/tests/lib/DbHandler.test.ts +++ b/packages/indexeddb/tests/lib/DbHandler.test.ts @@ -16,7 +16,7 @@ describe('DbHandler', () => { const handler = new DbHandler(); beforeAll(async () => { - await handler.init(); + await handler.init({ name: 'test' }); }); beforeEach(async () => { @@ -80,4 +80,37 @@ describe('DbHandler', () => { expect(await handler.count()).toEqual(0); }); }); + + describe('Can manipulate metadata.', () => { + const handler = new DbHandler(); + + beforeAll(async () => { + await handler.init({ name: 'meta-test' }); + }); + + beforeEach(async () => { + await handler.clear(); + }); + + test('Can set and subsequently get metadata', async () => { + await handler.setMetadata('string', 'hello world'); + await handler.setMetadata('num', 420); + await handler.setMetadata('obj', { hello: 'world' }); + await handler.setMetadata('array', [1, 2, 3]); + expect(await handler.getMetadata('string')).toEqual('hello world'); + expect(await handler.getMetadata('num')).toEqual(420); + expect(await handler.getMetadata('obj')).toEqual({ hello: 'world' }); + expect(await handler.getMetadata('array')).toEqual([1, 2, 3]); + }); + + test('Can clear metadata', async () => { + await handler.setMetadata('string', 'hello world'); + await handler.setMetadata('string2', 'hello world'); + await handler.setMetadata('string3', 'hello world'); + await handler.clearMetadata(); + expect(await handler.getMetadata('string')).toBeUndefined(); + expect(await handler.getMetadata('string2')).toBeUndefined(); + expect(await handler.getMetadata('string3')).toBeUndefined(); + }); + }); }); From c4e48d257e579ed17e69da2059ba40517a897469 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Fri, 30 Jun 2023 23:38:50 -0600 Subject: [PATCH 15/19] fix: yarn --- yarn.lock | 850 ++++++++++++------------------------------------------ 1 file changed, 186 insertions(+), 664 deletions(-) diff --git a/yarn.lock b/yarn.lock index b88fb2b4..95d8c19b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,7 +1,17 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.1": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -13,29 +23,29 @@ __metadata: linkType: hard "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.18.6": - version: 7.21.4 - resolution: "@babel/code-frame@npm:7.21.4" + version: 7.22.5 + resolution: "@babel/code-frame@npm:7.22.5" dependencies: - "@babel/highlight": ^7.18.6 - checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c + "@babel/highlight": ^7.22.5 + checksum: cfe804f518f53faaf9a1d3e0f9f74127ab9a004912c3a16fda07fb6a633393ecb9918a053cb71804204c1b7ec3d49e1699604715e2cfb0c9f7bc4933d324ebb6 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a +"@babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-identifier@npm:7.22.5" + checksum: 7f0f30113474a28298c12161763b49de5018732290ca4de13cdaefd4fd0d635a6fe3f6686c37a02905fb1e64f21a5ee2b55140cf7b070e729f1bd66866506aea languageName: node linkType: hard -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" +"@babel/highlight@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/highlight@npm:7.22.5" dependencies: - "@babel/helper-validator-identifier": ^7.18.6 + "@babel/helper-validator-identifier": ^7.22.5 chalk: ^2.0.0 js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + checksum: f61ae6de6ee0ea8d9b5bcf2a532faec5ab0a1dc0f7c640e5047fc61630a0edb88b18d8c92eb06566d30da7a27db841aca11820ecd3ebe9ce514c9350fbed39c4 languageName: node linkType: hard @@ -424,34 +434,27 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.0.3": - version: 2.0.3 - resolution: "@eslint/eslintrc@npm:2.0.3" +"@eslint/eslintrc@npm:^2.1.0": + version: 2.1.0 + resolution: "@eslint/eslintrc@npm:2.1.0" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.5.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 - checksum: ddc51f25f8524d8231db9c9bf03177e503d941a332e8d5ce3b10b09241be4d5584a378a529a27a527586bfbccf3031ae539eb891352033c340b012b4d0c81d92 + checksum: d5ed0adbe23f6571d8c9bb0ca6edf7618dc6aed4046aa56df7139f65ae7b578874e0d9c796df784c25bda648ceb754b6320277d828c8b004876d7443b8dc018c languageName: node linkType: hard -"@eslint/js@npm:8.41.0": - version: 8.41.0 - resolution: "@eslint/js@npm:8.41.0" - checksum: af013d70fe8d0429cdf5cd8b5dcc6fc384ed026c1eccb0cfe30f5849b968ab91645111373fd1b83282b38955b1bdfbe667c1a7dbda3b06cae753521223cad775 - languageName: node - linkType: hard - -"@eslint/js@npm:8.43.0": - version: 8.43.0 - resolution: "@eslint/js@npm:8.43.0" - checksum: 580487a09c82ac169744d36e4af77bc4f582c9a37749d1e9481eb93626c8f3991b2390c6e4e69e5642e3b6e870912b839229a0e23594fae348156ea5a8ed7e2e +"@eslint/js@npm:8.44.0": + version: 8.44.0 + resolution: "@eslint/js@npm:8.44.0" + checksum: fc539583226a28f5677356e9f00d2789c34253f076643d2e32888250e509a4e13aafe0880cb2425139051de0f3a48d25bfc5afa96b7304f203b706c17340e3cf languageName: node linkType: hard @@ -462,27 +465,7 @@ __metadata: languageName: node linkType: hard -"@favware/cliff-jumper@npm:^2.0.1": - version: 2.0.1 - resolution: "@favware/cliff-jumper@npm:2.0.1" - dependencies: - "@favware/conventional-changelog-angular": ^5.0.15 - "@sapphire/result": ^2.6.4 - "@sapphire/utilities": 3.12.0 - colorette: ^2.0.20 - commander: ^10.0.1 - conventional-recommended-bump: ^7.0.1 - git-cliff: ^1.2.0 - js-yaml: ^4.1.0 - semver: ^7.5.1 - bin: - cj: ./dist/cli.js - cliff-jumper: ./dist/cli.js - checksum: 60f1f38ff5d66609054aee3f5bf477fe04783468aa45ce1b1b8c46efbed286fa0110fe81eaad4babe68c5483373931866c80fdf77db81cc0cbda24c8de339e71 - languageName: node - linkType: hard - -"@favware/cliff-jumper@npm:^2.1.1": +"@favware/cliff-jumper@npm:^2.0.1, @favware/cliff-jumper@npm:^2.1.1": version: 2.1.1 resolution: "@favware/cliff-jumper@npm:2.1.1" dependencies: @@ -557,13 +540,6 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.11.10": version: 0.11.10 resolution: "@humanwhocodes/config-array@npm:0.11.10" @@ -575,17 +551,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.8": - version: 0.11.8 - resolution: "@humanwhocodes/config-array@npm:0.11.8" - dependencies: - "@humanwhocodes/object-schema": ^1.2.1 - debug: ^4.1.1 - minimatch: ^3.0.5 - checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3 - languageName: node - linkType: hard - "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -743,33 +708,6 @@ __metadata: languageName: unknown linkType: soft -"@joshdb/provider@npm:1.1.0-next.24ef775.0": - version: 1.1.0-next.24ef775.0 - resolution: "@joshdb/provider@npm:1.1.0-next.24ef775.0" - dependencies: - "@sapphire/utilities": ^3.7.0 - checksum: 48f9395122d299687aee65afdccfe3f7389fc11a0a96a1b805fce6e5ff393c7fe9ba114ae668d7c380b5e20451513664248e77d4d431dded012593b89c38b0b7 - languageName: node - linkType: hard - -"@joshdb/provider@npm:1.1.0-next.98baf42.0": - version: 1.1.0-next.98baf42.0 - resolution: "@joshdb/provider@npm:1.1.0-next.98baf42.0" - dependencies: - "@sapphire/utilities": ^3.8.0 - checksum: 3328afc7b362dfa1bf36e0d6aa22bf34464c236f5cc93606d7058f3dd786922e6ec8335a9bb9eeb27915d4af107eb5a6d174ab0d7bc4d27697677689af3dc62d - languageName: node - linkType: hard - -"@joshdb/provider@npm:1.1.0-next.ffebf9f.0": - version: 1.1.0-next.ffebf9f.0 - resolution: "@joshdb/provider@npm:1.1.0-next.ffebf9f.0" - dependencies: - "@sapphire/utilities": ^3.7.0 - checksum: 48f9395122d299687aee65afdccfe3f7389fc11a0a96a1b805fce6e5ff393c7fe9ba114ae668d7c380b5e20451513664248e77d4d431dded012593b89c38b0b7 - languageName: node - linkType: hard - "@joshdb/provider@npm:2.0.0-next.095d141.0": version: 2.0.0-next.095d141.0 resolution: "@joshdb/provider@npm:2.0.0-next.095d141.0" @@ -780,25 +718,6 @@ __metadata: languageName: node linkType: hard -"@joshdb/provider@npm:2.0.0-next.865d0de.0": - version: 2.0.0-next.865d0de.0 - resolution: "@joshdb/provider@npm:2.0.0-next.865d0de.0" - dependencies: - "@favware/cliff-jumper": ^2.0.1 - "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 - "@sapphire/snowflake": ^3.5.1 - "@sapphire/utilities": ^3.11.2 - "@vitest/coverage-v8": ^0.32.0 - better-serialize: ^1.0.0 - postgres: ^3.3.5 - property-helpers: ^2.0.0 - typedoc: ^0.24.8 - typedoc-json-parser: ^8.1.2 - vitest: ^0.32.0 - languageName: unknown - linkType: soft - "@joshdb/provider@npm:2.0.0-next.a699598.0": version: 2.0.0-next.a699598.0 resolution: "@joshdb/provider@npm:2.0.0-next.a699598.0" @@ -947,16 +866,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" - dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 - languageName: node - linkType: hard - "@npmcli/fs@npm:^3.1.0": version: 3.1.0 resolution: "@npmcli/fs@npm:3.1.0" @@ -966,16 +875,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 - languageName: node - linkType: hard - "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -1111,34 +1010,13 @@ __metadata: languageName: node linkType: hard -"@sapphire/utilities@npm:3.11.2, @sapphire/utilities@npm:^3.11.0, @sapphire/utilities@npm:^3.11.2": - version: 3.11.2 - resolution: "@sapphire/utilities@npm:3.11.2" - checksum: af06b3f52156af397a3be564f992bedefd728ea2d44fee8ffdc00242de0454075e722091cc213d4ad2fb4ef5c3b78740bf5e7f75242851d31a56206f51a8f403 - languageName: node - linkType: hard - -"@sapphire/utilities@npm:3.12.0, @sapphire/utilities@npm:^3.12.0": +"@sapphire/utilities@npm:3.12.0, @sapphire/utilities@npm:^3.11.0, @sapphire/utilities@npm:^3.11.2, @sapphire/utilities@npm:^3.12.0, @sapphire/utilities@npm:^3.9.2": version: 3.12.0 resolution: "@sapphire/utilities@npm:3.12.0" checksum: 002f15263f157fdbb0603c233a43a5660cd3b45a4f3fddaa9d7066d187eec23f473ee42c8d071b0e3dec4e22b08bed337fb7eb336a02b59743a78ebc8922004e languageName: node linkType: hard -"@sapphire/utilities@npm:^3.11.0, @sapphire/utilities@npm:^3.11.2, @sapphire/utilities@npm:^3.9.2": - version: 3.11.2 - resolution: "@sapphire/utilities@npm:3.11.2" - checksum: af06b3f52156af397a3be564f992bedefd728ea2d44fee8ffdc00242de0454075e722091cc213d4ad2fb4ef5c3b78740bf5e7f75242851d31a56206f51a8f403 - languageName: node - linkType: hard - -"@sapphire/utilities@npm:^3.9.2": - version: 3.9.2 - resolution: "@sapphire/utilities@npm:3.9.2" - checksum: eeef33b03b802e931ada752b8c335cc8bde4017f8029b577b0247e3f3d2b57bf5f1936b2c8c29aef5e2c6975d9b162363e4c5c434c4fead0bba74253d067b4d9 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -1235,9 +1113,9 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 20.2.5 - resolution: "@types/node@npm:20.2.5" - checksum: 38ce7c7e9d76880dc632f71d71e0d5914fcda9d5e9a7095d6c339abda55ca4affb0f2a882aeb29398f8e09d2c5151f0b6586c81c8ccdfe529c34b1ea3337425e + version: 20.3.3 + resolution: "@types/node@npm:20.3.3" + checksum: 7a0d00800451ca8cd8df63a8cc218c697edadb3143bf46cd6afeb974542a6a1665c3679459be0016c29216ccfed6616b7e55851747527dfa71c5608d9157528c languageName: node linkType: hard @@ -1249,9 +1127,9 @@ __metadata: linkType: hard "@types/node@npm:^18.16.18": - version: 18.16.18 - resolution: "@types/node@npm:18.16.18" - checksum: d32d8a0a04cd3f5ecb361bcb42f3a07623881ac90d680e06bf626defb3c663a94860d11690babe607cfe67265eceeb8a59ba5fe40c0e49f5a1b01e0088640469 + version: 18.16.19 + resolution: "@types/node@npm:18.16.19" + checksum: 63c31f09616508aa7135380a4c79470a897b75f9ff3a70eb069e534dfabdec3f32fb0f9df5939127f1086614d980ddea0fa5e8cc29a49103c4f74cd687618aaf languageName: node linkType: hard @@ -1303,31 +1181,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.59.2, @typescript-eslint/eslint-plugin@npm:^5.59.7": - version: 5.59.8 - resolution: "@typescript-eslint/eslint-plugin@npm:5.59.8" - 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 - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 3e05cd06149ec3741c3c2fb638e2d19a55687b4614a5c8820433db82997687650297e51c17828d320162ccf4241798cf5712c405561e7605cb17e984a6967f7b - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^5.60.1": +"@typescript-eslint/eslint-plugin@npm:^5.59.2, @typescript-eslint/eslint-plugin@npm:^5.59.7, @typescript-eslint/eslint-plugin@npm:^5.60.1": version: 5.60.1 resolution: "@typescript-eslint/eslint-plugin@npm:5.60.1" dependencies: @@ -1351,24 +1205,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.59.2, @typescript-eslint/parser@npm:^5.59.7": - version: 5.59.8 - resolution: "@typescript-eslint/parser@npm:5.59.8" - 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 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: bac9f09d8552086ceb882a7b87ce4d98dfaa41579249216c75d97e3fc07af33cddc4cbbd07a127a5823c826a258882643aaf658bec19cb2a434002b55c5f0d12 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^5.60.1": +"@typescript-eslint/parser@npm:^5.59.2, @typescript-eslint/parser@npm:^5.59.7, @typescript-eslint/parser@npm:^5.60.1": version: 5.60.1 resolution: "@typescript-eslint/parser@npm:5.60.1" dependencies: @@ -1385,16 +1222,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.59.8": - version: 5.59.8 - resolution: "@typescript-eslint/scope-manager@npm:5.59.8" - dependencies: - "@typescript-eslint/types": 5.59.8 - "@typescript-eslint/visitor-keys": 5.59.8 - checksum: e1e810ee991cfeb433330b04ee949bb6784abe4dbdb7d9480aa7a7536671b4fec914b7803edf662516c8ecb1b31dcff126797f9923270a529c26e2b00b0ea96f - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/scope-manager@npm:5.60.1" @@ -1405,23 +1232,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.59.8": - version: 5.59.8 - resolution: "@typescript-eslint/type-utils@npm:5.59.8" - dependencies: - "@typescript-eslint/typescript-estree": 5.59.8 - "@typescript-eslint/utils": 5.59.8 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: d9fde31397da0f0e62a5568f64bad99d06bcd324b7e3aac7fd997a3d045a0fe4c084b2e85d440e0a39645acd2269ad6593f196399c2c0f880d293417fec894e3 - languageName: node - linkType: hard - "@typescript-eslint/type-utils@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/type-utils@npm:5.60.1" @@ -1439,13 +1249,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.59.8": - version: 5.59.8 - resolution: "@typescript-eslint/types@npm:5.59.8" - checksum: 559473d5601c849eb0da1874a2ac67c753480beed484ad6f6cda62fa6023273f2c3005c7f2864d9c2afb7c6356412d0d304b57db10c53597207f18a7f6cd4f18 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/types@npm:5.60.1" @@ -1453,24 +1256,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.59.8": - version: 5.59.8 - resolution: "@typescript-eslint/typescript-estree@npm:5.59.8" - 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 - peerDependenciesMeta: - typescript: - optional: true - checksum: d93371cc866f573a6a1ddc0eb10d498a8e59f36763a99ce21da0737fff2b4c942eef1587216aad273f8d896ebc0b19003677cba63a27d2646aa2c087638963eb - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/typescript-estree@npm:5.60.1" @@ -1489,24 +1274,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.59.8": - version: 5.59.8 - resolution: "@typescript-eslint/utils@npm:5.59.8" - 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 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: cbaa057485c7f52c45d0dfb4f5a8e9273abccb1c52dcb4426a79f9e71d2c1062cf2525bad6d4aca5ec42db3fe723d749843bcade5a323bde7fbe4b5d5b5d5c3b - languageName: node - linkType: hard - "@typescript-eslint/utils@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/utils@npm:5.60.1" @@ -1525,16 +1292,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.59.8": - version: 5.59.8 - resolution: "@typescript-eslint/visitor-keys@npm:5.59.8" - dependencies: - "@typescript-eslint/types": 5.59.8 - eslint-visitor-keys: ^3.3.0 - checksum: 6bfa7918dbb0e08d8a7404aeeef7bcd1a85736dc8d01614d267c0c5ec10f94d2746b50a945bf5c82c54fda67926e8deaeba8565c919da17f725fc11209ef8987 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.60.1": version: 5.60.1 resolution: "@typescript-eslint/visitor-keys@npm:5.60.1" @@ -1545,7 +1302,7 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-v8@npm:^0.32.2": +"@vitest/coverage-v8@npm:^0.32.0, @vitest/coverage-v8@npm:^0.32.2": version: 0.32.2 resolution: "@vitest/coverage-v8@npm:0.32.2" dependencies: @@ -1655,12 +1412,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.4.1, acorn@npm:^8.8.0, acorn@npm:^8.8.2": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" +"acorn@npm:^8.4.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.9.0 + resolution: "acorn@npm:8.9.0" bin: acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + checksum: 25dfb94952386ecfb847e61934de04a4e7c2dc21c2e700fc4e2ef27ce78cb717700c4c4f279cd630bb4774948633c3859fc16063ec8573bda4568e0a312e6744 languageName: node linkType: hard @@ -2005,32 +1762,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 - tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 - languageName: node - linkType: hard - "cacache@npm:^17.0.0": version: 17.1.3 resolution: "cacache@npm:17.1.3" @@ -2437,14 +2168,14 @@ __metadata: linkType: hard "cosmiconfig@npm:^8.0.0": - version: 8.1.3 - resolution: "cosmiconfig@npm:8.1.3" + version: 8.2.0 + resolution: "cosmiconfig@npm:8.2.0" dependencies: import-fresh: ^3.2.1 js-yaml: ^4.1.0 parse-json: ^5.0.0 path-type: ^4.0.0 - checksum: b3d277bc3a8a9e649bf4c3fc9740f4c52bf07387481302aa79839f595045368903bf26ea24a8f7f7b8b180bf46037b027c5cb63b1391ab099f3f78814a147b2b + checksum: 836d5d8efa750f3fb17b03d6ca74cd3154ed025dffd045304b3ef59637f662bde1e5dc88f8830080d180ec60841719cf4ea2ce73fb21ec694b16865c478ff297 languageName: node linkType: hard @@ -2850,63 +2581,14 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.39.0, eslint@npm:^8.41.0": - version: 8.41.0 - resolution: "eslint@npm:8.41.0" +"eslint@npm:^8.39.0, eslint@npm:^8.41.0, eslint@npm:^8.43.0": + version: 8.44.0 + resolution: "eslint@npm:8.44.0" 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 - checksum: 09979a6f8451dcc508a7005b6670845c8a518376280b3fd96657a406b8b6ef29d0e480d1ba11b4eb48da93d607e0c55c9b877676fe089d09973ec152354e23b2 - languageName: node - linkType: hard - -"eslint@npm:^8.43.0": - version: 8.43.0 - resolution: "eslint@npm:8.43.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.4.0 - "@eslint/eslintrc": ^2.0.3 - "@eslint/js": 8.43.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 @@ -2918,7 +2600,7 @@ __metadata: escape-string-regexp: ^4.0.0 eslint-scope: ^7.2.0 eslint-visitor-keys: ^3.4.1 - espree: ^9.5.2 + espree: ^9.6.0 esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 @@ -2938,24 +2620,24 @@ __metadata: lodash.merge: ^4.6.2 minimatch: ^3.1.2 natural-compare: ^1.4.0 - optionator: ^0.9.1 + 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 - checksum: 55654ce00b0d128822b57526e40473d0497c7c6be3886afdc0b41b6b0dfbd34d0eae8159911b18451b4db51a939a0e6d2e117e847ae419086884fc3d4fe23c7c + checksum: d06309ce4aafb9d27d558c8e5e5aa5cba3bbec3ce8ceccbc7d4b7a35f2b67fd40189159155553270e2e6febeb69bd8a3b60d6241c8f5ddc2ef1702ccbd328501 languageName: node linkType: hard -"espree@npm:^9.5.2": - version: 9.5.2 - resolution: "espree@npm:9.5.2" +"espree@npm:^9.6.0": + version: 9.6.0 + resolution: "espree@npm:9.6.0" dependencies: - acorn: ^8.8.0 + acorn: ^8.9.0 acorn-jsx: ^5.3.2 eslint-visitor-keys: ^3.4.1 - checksum: 6506289d6eb26471c0b383ee24fee5c8ae9d61ad540be956b3127be5ce3bf687d2ba6538ee5a86769812c7c552a9d8239e8c4d150f9ea056c6d5cbe8399c03c1 + checksum: 1287979510efb052a6a97c73067ea5d0a40701b29adde87bbe2d3eb1667e39ca55e8129e20e2517fed3da570150e7ef470585228459a8f3e3755f45007a1c662 languageName: node linkType: hard @@ -3063,6 +2745,13 @@ __metadata: languageName: node linkType: hard +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + "fake-indexeddb@npm:^4.0.1": version: 4.0.1 resolution: "fake-indexeddb@npm:4.0.1" @@ -3087,15 +2776,15 @@ __metadata: linkType: hard "fast-glob@npm:^3.2.9": - version: 3.2.12 - resolution: "fast-glob@npm:3.2.12" + version: 3.3.0 + resolution: "fast-glob@npm:3.3.0" 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 - checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + checksum: 20df62be28eb5426fe8e40e0d05601a63b1daceb7c3d87534afcad91bdcf1e4b1743cf2d5247d6e225b120b46df0b9053a032b2691ba34ee121e033acd81f547 languageName: node linkType: hard @@ -3234,7 +2923,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": +"fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: @@ -3475,17 +3164,17 @@ __metadata: linkType: hard "glob@npm:^10.2.2, glob@npm:^10.2.5": - version: 10.2.6 - resolution: "glob@npm:10.2.6" + version: 10.3.1 + resolution: "glob@npm:10.3.1" dependencies: foreground-child: ^3.1.0 jackspeak: ^2.0.3 minimatch: ^9.0.1 minipass: ^5.0.0 || ^6.0.2 - path-scurry: ^1.7.0 + path-scurry: ^1.10.0 bin: glob: dist/cjs/src/bin.js - checksum: 94c5964bfa9df95207a69a3bd9b07b99ea7b5ba1f36dd73a8914378cee9436a205b9b5bdff58872abc238684ea7f4b4936e932155b8885250818bcc8d5321ddf + checksum: 19c8c2805658b1002fecf0722cd609a33153d756a0d5260676bd0e9c5e6ef889ec9cce6d3dac0411aa90bce8de3d14f25b6f5589a3292582cccbfeddd0e98cc4 languageName: node linkType: hard @@ -3503,19 +3192,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 - languageName: node - linkType: hard - "global-dirs@npm:^0.1.1": version: 0.1.1 resolution: "global-dirs@npm:0.1.1" @@ -3638,7 +3314,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": +"http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 @@ -3752,13 +3428,6 @@ __metadata: languageName: node linkType: hard -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -4261,10 +3930,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^9.1.1": - version: 9.1.1 - resolution: "lru-cache@npm:9.1.1" - checksum: 4d703bb9b66216bbee55ead82a9682820a2b6acbdfca491b235390b1ef1056000a032d56dfb373fdf9ad4492f1fa9d04cc9a05a77f25bd7ce6901d21ad9b68b7 +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.0 + resolution: "lru-cache@npm:10.0.0" + checksum: 18f101675fe283bc09cda0ef1e3cc83781aeb8373b439f086f758d1d91b28730950db785999cd060d3c825a8571c03073e8c14512b6655af2188d623031baf50 languageName: node linkType: hard @@ -4309,31 +3978,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c - languageName: node - linkType: hard - -"make-fetch-happen@npm:^11.0.0": +"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.3": version: 11.1.1 resolution: "make-fetch-happen@npm:11.1.1" dependencies: @@ -4488,21 +4133,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - "minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": - version: 9.0.1 - resolution: "minimatch@npm:9.0.1" + version: 9.0.2 + resolution: "minimatch@npm:9.0.2" dependencies: brace-expansion: ^2.0.1 - checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 + checksum: 2eb12e2047a062fdb973fb51b9803f2455e3a00977858c038d66646d303a5a15bbcbc6ed5a2fc403bc869b1309f829ed3acd881d3246faf044ea7a494974b924 languageName: node linkType: hard @@ -4533,21 +4169,6 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 - languageName: node - linkType: hard - "minipass-fetch@npm:^3.0.0": version: 3.0.3 resolution: "minipass-fetch@npm:3.0.3" @@ -4600,7 +4221,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -4640,7 +4261,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -4650,14 +4271,14 @@ __metadata: linkType: hard "mlly@npm:^1.2.0": - version: 1.3.0 - resolution: "mlly@npm:1.3.0" + version: 1.4.0 + resolution: "mlly@npm:1.4.0" dependencies: - acorn: ^8.8.2 - pathe: ^1.1.0 + acorn: ^8.9.0 + pathe: ^1.1.1 pkg-types: ^1.0.3 ufo: ^1.1.2 - checksum: aea2a99131b1a1f02a733219317b6466156e150473e0a2f490802eaf2dc66940a21bb68e0ddd5c003360263e674e7dd0bd02da6520c740e6d16fa0edf5efa46e + checksum: ebf2e2b5cfb4c6e45e8d0bbe82710952247023f12626cb0997c41b1bb6e57c8b6fc113aa709228ad511382ab0b4eebaab759806be0578093b3635d3e940bd63b languageName: node linkType: hard @@ -4776,17 +4397,17 @@ __metadata: linkType: hard "node-abi@npm:^3.3.0": - version: 3.40.0 - resolution: "node-abi@npm:3.40.0" + version: 3.45.0 + resolution: "node-abi@npm:3.45.0" dependencies: semver: ^7.3.5 - checksum: 8f4ef0d9ac82352465e7e7a8ce3915dae49c0fd19d6cb49a93140ff587b612166443531111a60d25e479a18e6e6b9af09698c7870babe0f44aa54287aeaf5eef + checksum: 18c4305d7de5f1132741a2a66ba652941518210d02c9268702abe97ce1c166db468b4fc3e85fff04b9c19218c2e47f4e295f9a46422dc834932f4e11443400cd languageName: node linkType: hard "node-fetch@npm:^2.6.11": - version: 2.6.11 - resolution: "node-fetch@npm:2.6.11" + version: 2.6.12 + resolution: "node-fetch@npm:2.6.12" dependencies: whatwg-url: ^5.0.0 peerDependencies: @@ -4794,18 +4415,19 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3 + checksum: 3bc1655203d47ee8e313c0d96664b9673a3d4dd8002740318e9d27d14ef306693a4b2ef8d6525775056fd912a19e23f3ac0d7111ad8925877b7567b29a625592 languageName: node linkType: hard "node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" dependencies: env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 + make-fetch-happen: ^11.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 @@ -4814,7 +4436,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 languageName: node linkType: hard @@ -4951,17 +4573,17 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" 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 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard @@ -5082,13 +4704,13 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.7.0": - version: 1.9.2 - resolution: "path-scurry@npm:1.9.2" +"path-scurry@npm:^1.10.0": + version: 1.10.0 + resolution: "path-scurry@npm:1.10.0" dependencies: - lru-cache: ^9.1.1 + lru-cache: ^9.1.1 || ^10.0.0 minipass: ^5.0.0 || ^6.0.2 - checksum: 92888dfb68e285043c6d3291c8e971d5d2bc2f5082f4d7b5392896f34be47024c9d0a8b688dd7ae6d125acc424699195474927cb4f00049a9b1ec7c4256fa8e0 + checksum: 3b66a4a6ab66e45755b577c966ecf0da92d3e068b3c992d8f69aa2cc908ef4eda9358253e9b4f86cad43d3ad810ec445be164105975f5cb3fdab68459c59dc6e languageName: node linkType: hard @@ -5099,10 +4721,10 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.0": - version: 1.1.0 - resolution: "pathe@npm:1.1.0" - checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 +"pathe@npm:^1.1.0, pathe@npm:^1.1.1": + version: 1.1.1 + resolution: "pathe@npm:1.1.1" + checksum: 34ab3da2e5aa832ebc6a330ffe3f73d7ba8aec6e899b53b8ec4f4018de08e40742802deb12cf5add9c73b7bf719b62c0778246bd376ca62b0fb23e0dde44b759 languageName: node linkType: hard @@ -5257,13 +4879,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -5622,8 +5237,8 @@ __metadata: linkType: hard "rollup@npm:^3.21.0": - version: 3.23.0 - resolution: "rollup@npm:3.23.0" + version: 3.26.0 + resolution: "rollup@npm:3.26.0" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -5631,7 +5246,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 0721065cf725c5611815be61d2b01f20b4d0027e17035f6e76384d38396b56cf6ed21a3db78eb004d9db4d24c8a6a19da4563b4ff96b5dd36f0a0f7a3baf85e8 + checksum: 2d00f1ec8f5b3e84b005b7158446aacfbe669b61a55cea26d4cfb7014fed9169d78dffa8f845c8ef2c8cbc596b9de6e9f925597b87e7ef9b7de4c7da21f188ad languageName: node linkType: hard @@ -5746,13 +5361,13 @@ __metadata: linkType: hard "semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.1": - version: 7.5.1 - resolution: "semver@npm:7.5.1" + version: 7.5.3 + resolution: "semver@npm:7.5.3" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: d16dbedad53c65b086f79524b9ef766bf38670b2395bdad5c957f824dcc566b624988013564f4812bcace3f9d405355c3635e2007396a39d1bffc71cfec4a2fc + checksum: 9d58db16525e9f749ad0a696a1f27deabaa51f66e91d2fa2b0db3de3e9644e8677de3b7d7a03f4c15bc81521e0c3916d7369e0572dbde250d9bedf5194e2a8a7 languageName: node linkType: hard @@ -5780,14 +5395,14 @@ __metadata: linkType: hard "shiki@npm:^0.14.1": - version: 0.14.2 - resolution: "shiki@npm:0.14.2" + version: 0.14.3 + resolution: "shiki@npm:0.14.3" dependencies: ansi-sequence-parser: ^1.1.0 jsonc-parser: ^3.2.0 vscode-oniguruma: ^1.7.0 vscode-textmate: ^8.0.0 - checksum: f2a14302b1803617e3ff1b751a5c87b4af4ad15214dc00e9215402e42940a84a0b956cf55d628f25dbf1296b18e277b8529571cd9359b971ac599a0ab11303e7 + checksum: a4dd98e3b2a5dd8be207448f111ffb9ad2ed6c530f215714d8b61cbf91ec3edbabb09109b8ec58a26678aacd24e8161d5a9bc0c1fa1b4f64b27ceb180cbd0c89 languageName: node linkType: hard @@ -5986,15 +5601,6 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" - dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb - languageName: node - linkType: hard - "stackback@npm:0.0.2": version: 0.0.2 resolution: "stackback@npm:0.0.2" @@ -6330,21 +5936,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0": - version: 2.5.2 - resolution: "tslib@npm:2.5.2" - checksum: 4d3c1e238b94127ed0e88aa0380db3c2ddae581dc0f4bae5a982345e9f50ee5eda90835b8bfba99b02df10a5734470be197158c36f9129ac49fdc14a6a9da222 - languageName: node - linkType: hard - -"tslib@npm:^2.5.3": - version: 2.5.3 - resolution: "tslib@npm:2.5.3" - checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c - languageName: node - linkType: hard - -"tslib@npm:^2.6.0": +"tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.5.3, tslib@npm:^2.6.0": version: 2.6.0 resolution: "tslib@npm:2.6.0" checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f @@ -6371,58 +5963,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:1.10.6": - version: 1.10.6 - resolution: "turbo-darwin-64@npm:1.10.6" +"turbo-darwin-64@npm:1.10.7": + version: 1.10.7 + resolution: "turbo-darwin-64@npm:1.10.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.10.6": - version: 1.10.6 - resolution: "turbo-darwin-arm64@npm:1.10.6" +"turbo-darwin-arm64@npm:1.10.7": + version: 1.10.7 + resolution: "turbo-darwin-arm64@npm:1.10.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.10.6": - version: 1.10.6 - resolution: "turbo-linux-64@npm:1.10.6" +"turbo-linux-64@npm:1.10.7": + version: 1.10.7 + resolution: "turbo-linux-64@npm:1.10.7" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.10.6": - version: 1.10.6 - resolution: "turbo-linux-arm64@npm:1.10.6" +"turbo-linux-arm64@npm:1.10.7": + version: 1.10.7 + resolution: "turbo-linux-arm64@npm:1.10.7" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.10.6": - version: 1.10.6 - resolution: "turbo-windows-64@npm:1.10.6" +"turbo-windows-64@npm:1.10.7": + version: 1.10.7 + resolution: "turbo-windows-64@npm:1.10.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.10.6": - version: 1.10.6 - resolution: "turbo-windows-arm64@npm:1.10.6" +"turbo-windows-arm64@npm:1.10.7": + version: 1.10.7 + resolution: "turbo-windows-arm64@npm:1.10.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard "turbo@npm:^1.10.6": - version: 1.10.6 - resolution: "turbo@npm:1.10.6" - dependencies: - turbo-darwin-64: 1.10.6 - turbo-darwin-arm64: 1.10.6 - turbo-linux-64: 1.10.6 - turbo-linux-arm64: 1.10.6 - turbo-windows-64: 1.10.6 - turbo-windows-arm64: 1.10.6 + version: 1.10.7 + resolution: "turbo@npm:1.10.7" + dependencies: + turbo-darwin-64: 1.10.7 + turbo-darwin-arm64: 1.10.7 + turbo-linux-64: 1.10.7 + turbo-linux-arm64: 1.10.7 + turbo-windows-64: 1.10.7 + turbo-windows-arm64: 1.10.7 dependenciesMeta: turbo-darwin-64: optional: true @@ -6438,7 +6030,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 920985d59b088e3e203450ee42446a4e0efa7de3a6455828146089e0e9efc4981e52998f7c13fcb730158e652d84bfc49149ebe33ab4a4cc033db7ab32934390 + checksum: 58329caf13b5fef284ccfc21bd1f841023122371d75d2202be809a385aade84fd886cf5c2093323c115c497d503c9c34e1f7ae09e13d06d1dcb4b649883f60dd languageName: node linkType: hard @@ -6500,24 +6092,7 @@ __metadata: languageName: node linkType: hard -"typedoc-json-parser@npm:^8.1.2": - version: 8.1.2 - resolution: "typedoc-json-parser@npm:8.1.2" - dependencies: - "@favware/colorette-spinner": ^1.0.1 - "@sapphire/node-utilities": ^1.0.0 - colorette: ^2.0.20 - commander: ^11.0.0 - js-yaml: ^4.1.0 - tslib: ^2.5.3 - typedoc: ^0.24.8 - bin: - typedoc-json-parser: ./dist/bin/index.js - checksum: d4b7feb654dbff856412ae143b47741323f46c1ebafe72ca7522820e1f352f745f19ac42d3ff37c519e24632b93fc167ed509a613849b715bdfd12d30917eb53 - languageName: node - linkType: hard - -"typedoc-json-parser@npm:^8.2.0": +"typedoc-json-parser@npm:^8.1.2, typedoc-json-parser@npm:^8.2.0": version: 8.2.0 resolution: "typedoc-json-parser@npm:8.2.0" dependencies: @@ -6534,54 +6109,6 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.23.10, typedoc@npm:^0.23.9": - version: 0.23.10 - resolution: "typedoc@npm:0.23.10" - dependencies: - lunr: ^2.3.9 - marked: ^4.0.19 - minimatch: ^5.1.0 - shiki: ^0.11.1 - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x - bin: - typedoc: bin/typedoc - checksum: 720b5fa9846fcb2d0e3a763bc01b8f856d7e1c80ac50d2efd85dd850f61b98c4f52b7519a86ff2c59cebc7ab1e19e92cab31a25082d4574ab9a6f93e660e5369 - languageName: node - linkType: hard - -"typedoc@npm:^0.23.14, typedoc@npm:^0.23.9": - version: 0.23.14 - resolution: "typedoc@npm:0.23.14" - dependencies: - lunr: ^2.3.9 - marked: ^4.3.0 - minimatch: ^9.0.0 - shiki: ^0.14.1 - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x - bin: - typedoc: bin/typedoc - checksum: a46a14497f789fb3594e6c3af2e45276934ac46df40b7ed15a504ee51dc7a8013a2ffb3a54fd73abca6a2b71f97d3ec9ad356fa9aa81d29743e4645a965a2ae0 - languageName: node - linkType: hard - -"typedoc@npm:^0.24.7": - version: 0.24.7 - resolution: "typedoc@npm:0.24.7" - dependencies: - lunr: ^2.3.9 - marked: ^4.3.0 - minimatch: ^9.0.0 - shiki: ^0.14.1 - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x - bin: - typedoc: bin/typedoc - checksum: 9ae433566cb02b96deb9eb2a9f5b23d1b199f5aeb61ca8c7e2653ff5d339fbfb4d526e024febab4f3278332978814aaa0885f1d5925ba21a441d93a611510ac3 - languageName: node - linkType: hard - "typedoc@npm:^0.24.8": version: 0.24.8 resolution: "typedoc@npm:0.24.8" @@ -6598,13 +6125,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.6.4 || ^5.0.0, typescript@npm:^5.0.3, typescript@npm:^5.0.4, typescript@npm:~5.0.4": - version: 5.0.4 - resolution: "typescript@npm:5.0.4" +"typescript@npm:^4.6.4 || ^5.0.0, typescript@npm:^5.0.3, typescript@npm:^5.0.4": + version: 5.1.6 + resolution: "typescript@npm:5.1.6" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + checksum: b2f2c35096035fe1f5facd1e38922ccb8558996331405eb00a5111cc948b2e733163cc22fab5db46992aba7dd520fff637f2c1df4996ff0e134e77d3249a7350 languageName: node linkType: hard @@ -6618,13 +6145,23 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin, typescript@patch:typescript@^5.0.3#~builtin, typescript@patch:typescript@^5.0.4#~builtin, typescript@patch:typescript@~5.0.4#~builtin": +"typescript@npm:~5.0.4": version: 5.0.4 - resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=b5f058" + resolution: "typescript@npm:5.0.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: d26b6ba97b6d163c55dbdffd9bbb4c211667ebebc743accfeb2c8c0154aace7afd097b51165a72a5bad2cf65a4612259344ff60f8e642362aa1695c760d303ac + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + languageName: node + linkType: hard + +"typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin, typescript@patch:typescript@^5.0.3#~builtin, typescript@patch:typescript@^5.0.4#~builtin": + version: 5.1.6 + resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=5da071" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: f53bfe97f7c8b2b6d23cf572750d4e7d1e0c5fff1c36d859d0ec84556a827b8785077bc27676bf7e71fae538e517c3ecc0f37e7f593be913d884805d931bc8be languageName: node linkType: hard @@ -6638,6 +6175,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@~5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=b5f058" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: d26b6ba97b6d163c55dbdffd9bbb4c211667ebebc743accfeb2c8c0154aace7afd097b51165a72a5bad2cf65a4612259344ff60f8e642362aa1695c760d303ac + languageName: node + linkType: hard + "typeson-registry@npm:^1.0.0-alpha.20": version: 1.0.0-alpha.39 resolution: "typeson-registry@npm:1.0.0-alpha.39" @@ -6663,15 +6210,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -6681,15 +6219,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" @@ -6821,7 +6350,7 @@ __metadata: languageName: node linkType: hard -"vitest@npm:^0.32.2": +"vitest@npm:^0.32.0, vitest@npm:^0.32.2": version: 0.32.2 resolution: "vitest@npm:0.32.2" dependencies: @@ -6994,13 +6523,6 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f - languageName: node - linkType: hard - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" From 77563c2140a539754516861d5b53217376490869 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Sat, 8 Jul 2023 23:26:59 -0600 Subject: [PATCH 16/19] feat: rest of the provider stuff --- .../indexeddb/src/lib/IndexedDBProvider.ts | 205 +++++++++++++++++- 1 file changed, 204 insertions(+), 1 deletion(-) diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index e95eb893..e4c8dc62 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -1,12 +1,20 @@ // // @ts-nocheck import { CommonIdentifiers, + isEveryByHookPayload, + isEveryByValuePayload, isFilterByHookPayload, isFilterByValuePayload, isFindByHookPayload, isFindByValuePayload, isMapByHookPayload, isMapByPathPayload, + isPartitionByHookPayload, + isPartitionByValuePayload, + isRemoveByHookPayload, + isRemoveByValuePayload, + isSomeByHookPayload, + isSomeByValuePayload, JoshProvider, MathOperator, Method, @@ -349,6 +357,26 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Push): Promise> { await this.check(); + const { key, path, value } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (handleSubCallFail(getPayload, payload)) return payload; + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; + return payload; + } + + const { data } = getPayload; + + if (!Array.isArray(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Push }, { key, path, type: 'array' })); + + return payload; + } + + data.push(value); + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data }); + return payload; } @@ -375,6 +403,45 @@ export class IndexedDBProvider extends JoshProvider; public async [Method.Every](payload: Payload.Every): Promise> { await this.check(); + payload.data = true; + + if ((await this.db.count()) === 0) return payload; + if (isEveryByHookPayload(payload)) { + const { hook } = payload; + + for (const [key, value] of Object.entries(await this.db.getAll())) { + const result = await hook(value, key); + + if (result) continue; + + payload.data = false; + } + } + + if (isEveryByValuePayload(payload)) { + const { path, value } = payload; + + for (const [key, storedValue] of Object.entries(await this.db.getAll())) { + const data = getProperty(storedValue, path); + + if (data === PROPERTY_NOT_FOUND) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Every }, { key, path })); + + return payload; + } + + if (!isPrimitive(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Every }, { key, path, type: 'primitive' })); + + return payload; + } + + if (data === value) continue; + + payload.data = false; + } + } + return payload; } @@ -501,6 +568,44 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Partition](payload: Payload.Partition): Promise> { await this.check(); + payload.data = { truthy: {}, falsy: {} }; + + if (isPartitionByHookPayload(payload)) { + const { hook } = payload; + + for (const [key, value] of Object.entries(await this.db.getAll())) { + const result = await hook(value, key); + + if (result) payload.data.truthy[key] = value; + else payload.data.falsy[key] = value; + } + } + + if (isPartitionByValuePayload(payload)) { + const { path, value } = payload; + + for (const [key, storedValue] of Object.entries(await this.db.getAll())) { + const data = getProperty(storedValue, path); + + if (data === PROPERTY_NOT_FOUND) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Partition }, { key, path })); + + return payload; + } + + if (!isPrimitive(data)) { + payload.errors.push( + this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Partition }, { key, path, type: 'primitive' }) + ); + + return payload; + } + + if (value === data) payload.data.truthy[key] = storedValue; + else payload.data.falsy[key] = storedValue; + } + } + return payload; } @@ -508,6 +613,49 @@ export class IndexedDBProvider extends JoshProvider; public async [Method.Remove](payload: Payload.Remove): Promise> { await this.check(); + if (isRemoveByHookPayload(payload)) { + const { key, path, hook } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (handleSubCallFail(getPayload, payload)) return payload; + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; + return payload; + } + + const { data } = getPayload; + + if (!Array.isArray(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Remove }, { key, path, type: 'array' })); + + return payload; + } + + const filterValues = await Promise.all(data.map((value) => hook(value, key))); + + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data.filter((_, index) => !filterValues[index]) }); + } + + if (isRemoveByValuePayload(payload)) { + const { key, path, value } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (handleSubCallFail(getPayload, payload)) return payload; + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; + return payload; + } + const { data } = getPayload; + + if (!Array.isArray(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Remove }, { key, path, type: 'array' })); + + return payload; + } + + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data.filter((storedValue) => value !== storedValue) }); + } + return payload; } @@ -515,16 +663,71 @@ export class IndexedDBProvider extends JoshProvider; public async [Method.Some](payload: Payload.Some): Promise> { await this.check(); + payload.data = false; + + if (isSomeByHookPayload(payload)) { + const { hook } = payload; + + for (const [key, value] of Object.entries(await this.db.getAll())) { + const result = await hook(value, key); + + if (!result) continue; + + payload.data = true; + + break; + } + } + + if (isSomeByValuePayload(payload)) { + const { path, value } = payload; + + for (const [key, storedValue] of Object.entries(await this.db.getAll())) { + const data = getProperty(storedValue, path); + + if (data === PROPERTY_NOT_FOUND) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Some }, { key, path })); + + return payload; + } + + if (!isPrimitive(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Some }, { key, path, type: 'primitive' })); + + return payload; + } + + if (data !== value) continue; + + payload.data = true; + + break; + } + } + return payload; } public async [Method.Update](payload: Payload.Update): Promise> { await this.check(); + const { key, hook } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path: [] }); + + if (handleSubCallFail(getPayload, payload)) return payload; + if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { + payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; + return payload; + } + + const { data } = getPayload; + + await this[Method.Set]({ method: Method.Set, errors: [], key, path: [], value: await hook(data, key) }); + return payload; } protected fetchVersion() { - return this.getMetadata('version'); + return this.getMetadata('version') as Semver; } private async check(key: string | null = null, type: string[] | null = null, path: string[] = []) { From 71d94e75c67208f69f9f6c566bbfc2e53410d1f5 Mon Sep 17 00:00:00 2001 From: WilsontheWolf <33164598+WilsontheWolf@users.noreply.github.com> Date: Sun, 9 Jul 2023 00:13:51 -0600 Subject: [PATCH 17/19] fix: random bs --- packages/indexeddb/package.json | 2 +- .../indexeddb/src/lib/IndexedDBProvider.ts | 134 +++++------------- yarn.lock | 12 +- 3 files changed, 50 insertions(+), 98 deletions(-) diff --git a/packages/indexeddb/package.json b/packages/indexeddb/package.json index a92e031a..0a8854c1 100644 --- a/packages/indexeddb/package.json +++ b/packages/indexeddb/package.json @@ -29,7 +29,7 @@ "check-update": "cliff-jumper --dry-run" }, "dependencies": { - "@joshdb/provider": "2.0.0-next.a699598.0", + "@joshdb/provider": "2.0.0-next.1c9d8d9.0", "property-helpers": "^2.0.0" }, "devDependencies": { diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index e4c8dc62..7e97ab32 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -1,4 +1,3 @@ -// // @ts-nocheck import { CommonIdentifiers, isEveryByHookPayload, @@ -27,42 +26,45 @@ import { handleSubCallFail, isPrimitive, version } from './helpers'; export class IndexedDBProvider extends JoshProvider { public version: Semver = version; + public declare options: IndexedDBProvider.Options; - private db: DbHandler; + public migrations: JoshProvider.Migration[] = []; + + private _db: DbHandler; + + private get db(): DbHandler { + if (!this._db) throw new Error('Database is not initialized. Make sure you called Josh.init();'); + + return this._db; + } public constructor(options: IndexedDBProvider.Options) { super(options); - this.db = new DbHandler(); + this._db = new DbHandler(); } - public deleteMetadata(key: string): void { - return this.db.deleteMetadata(key); + public async deleteMetadata(key: string): Promise { + await this.db.deleteMetadata(key); } - public getMetadata(key: string): unknown { + public async getMetadata(key: string): Promise { return this.db.getMetadata(key); } - public setMetadata(key: string, value: unknown): void { - return this.db.setMetadata(key, value); + public async setMetadata(key: string, value: unknown): Promise { + await this.db.setMetadata(key, value); } public async [Method.Each](payload: Payload.Each): Promise> { - await this.check(); - const { hook } = payload; - const data = await this.db.getAll(); - // @ts-expect-error 2322 Start making sense. - Object.entries(data).forEach(([key, value]) => hook(value, key)); + for (const [key, value] of Object.entries(await this.db.getAll())) await hook(value, key); return payload; } public async [Method.DeleteMany](payload: Payload.DeleteMany): Promise { - await this.check(); - for (const key of payload.keys) { await this.db.delete(key); } @@ -71,8 +73,6 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); - const { key, path } = payload; if (path.length) { @@ -88,24 +88,18 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); - payload.data = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); return payload; } public async [Method.Values](payload: Payload.Values): Promise> { - await this.check(); - payload.data = Object.values(await this.db.getAll()); return payload; } public async [Method.Math](payload: Payload.Math): Promise { - await this.check(); - const { key, path, operator, operand } = payload; const getPayload = await this[Method.Get]({ method: Method.Get, key, path, errors: [] }); @@ -160,8 +154,6 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); - const { key, path } = payload; const mathPayload = await this[Method.Math]({ method: Method.Math, @@ -178,8 +170,6 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); - const { key, path } = payload; const mathPayload = await this[Method.Math]({ method: Method.Math, @@ -196,16 +186,12 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); - payload.data = await this.db.getKeys(); return payload; } public async [Method.RandomKey](payload: Payload.RandomKey): Promise { - await this.check(); - const { count, unique } = payload; const keys = await this.db.getKeys(); @@ -237,13 +223,11 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Random): Promise> { - await this.check(); - - // @ts-expect-error 2532 STFU - const key = await this.randomKey(payload); + // @ts-expect-error 2345 I can do this + const key = await this[Method.RandomKey](payload); if (key.data) { - payload.data = await Promise.all(key.data.map((key) => this.db.get(key))); + payload.data = await Promise.all(key.data.map((key) => this.db.get(key) as Promise)); } return payload; @@ -257,26 +241,30 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Get): Promise> { - await this.check(); - const { key, path } = payload; const value = await this.db.get(key); - payload.data = path.length === 0 ? value : getProperty(value, path); + if (path.length === 0) { + payload.data = value; + return payload; + } + + const val = getProperty(value, path); + + if (val !== PROPERTY_NOT_FOUND) { + payload.data = val; + } return payload; } public async [Method.Entries](payload: Payload.Entries): Promise> { - await this.check(); - payload.data = await this.db.getAll(); return payload; } public async [Method.GetMany](payload: Payload.GetMany): Promise> { - await this.check(); // according to old method this could be made into an index search const { keys } = payload; @@ -284,10 +272,9 @@ export class IndexedDBProvider extends JoshProvider { + Object.entries(data).forEach(([key, value]) => { if (keys.includes(key)) { - // @ts-expect-error 2532 No it's not - payload.data[key] = val; + payload.data![key] = value; } }); @@ -295,25 +282,19 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Set): Promise> { - await this.check(); + const { key, path, value } = payload; - const { key, value, path } = payload; - let data = (await this.db.get(key)) || {}; + if (path.length === 0) await this.db.set(key, value as unknown as StoredValue); + else { + const storedValue = await this.db.get(key); - if (path.length === 0) { - data = value; - } else { - setProperty(data, path, value); + await this.db.set(key, setProperty(storedValue, path, value)); } - await this.db.set(key, data); - return payload; } public async [Method.SetMany](payload: Payload.SetMany): Promise { - await this.check(); - const { entries, overwrite } = payload; for (const { key, path, value } of entries) { @@ -328,15 +309,12 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); await this.db.clear(); return payload; } public async [Method.Has](payload: Payload.Has): Promise { - await this.check(); - const { key, path } = payload; if (await this.db.has(key)) { @@ -349,14 +327,12 @@ export class IndexedDBProvider extends JoshProvider { - await this.check(); payload.data = await this.db.count(); return payload; } public async [Method.Push](payload: Payload.Push): Promise> { - await this.check(); const { key, path, value } = payload; const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); @@ -381,8 +357,6 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Ensure): Promise> { - await this.check(); - const { key, defaultValue } = payload; payload.data = defaultValue; @@ -402,7 +376,6 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Every](payload: Payload.Every.ByValue): Promise; public async [Method.Every](payload: Payload.Every): Promise> { - await this.check(); payload.data = true; if ((await this.db.count()) === 0) return payload; @@ -448,7 +421,6 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Filter](payload: Payload.Filter.ByValue): Promise>; public async [Method.Filter](payload: Payload.Filter): Promise> { - await this.check(); payload.data = {}; if (isFilterByHookPayload(payload)) { @@ -485,7 +457,6 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Find](payload: Payload.Find.ByValue): Promise>; public async [Method.Find](payload: Payload.Find): Promise> { - await this.check(); payload.data = [null, null]; if (isFindByHookPayload(payload)) { @@ -542,7 +513,6 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Map.ByHook): Promise>; public async [Method.Map](payload: Payload.Map.ByPath): Promise>; public async [Method.Map](payload: Payload.Map): Promise> { - await this.check(); payload.data = []; if (isMapByHookPayload(payload)) { @@ -567,7 +537,6 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Partition](payload: Payload.Partition.ByValue): Promise>; public async [Method.Partition](payload: Payload.Partition): Promise> { - await this.check(); payload.data = { truthy: {}, falsy: {} }; if (isPartitionByHookPayload(payload)) { @@ -612,7 +581,6 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Remove.ByHook): Promise>; public async [Method.Remove](payload: Payload.Remove.ByValue): Promise; public async [Method.Remove](payload: Payload.Remove): Promise> { - await this.check(); if (isRemoveByHookPayload(payload)) { const { key, path, hook } = payload; const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); @@ -662,7 +630,6 @@ export class IndexedDBProvider extends JoshProvider): Promise>; public async [Method.Some](payload: Payload.Some.ByValue): Promise; public async [Method.Some](payload: Payload.Some): Promise> { - await this.check(); payload.data = false; if (isSomeByHookPayload(payload)) { @@ -709,7 +676,6 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Update): Promise> { - await this.check(); const { key, hook } = payload; const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path: [] }); @@ -727,31 +693,7 @@ export class IndexedDBProvider extends JoshProvider) || version; } } diff --git a/yarn.lock b/yarn.lock index 95d8c19b..e1640955 100644 --- a/yarn.lock +++ b/yarn.lock @@ -608,7 +608,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^2.0.1 "@favware/rollup-type-bundler": ^1.0.11 - "@joshdb/provider": 2.0.0-next.a699598.0 + "@joshdb/provider": 2.0.0-next.1c9d8d9.0 "@vitest/coverage-v8": ^0.32.0 fake-indexeddb: ^4.0.1 property-helpers: ^2.0.0 @@ -718,6 +718,16 @@ __metadata: languageName: node linkType: hard +"@joshdb/provider@npm:2.0.0-next.1c9d8d9.0": + version: 2.0.0-next.1c9d8d9.0 + resolution: "@joshdb/provider@npm:2.0.0-next.1c9d8d9.0" + dependencies: + "@sapphire/utilities": ^3.12.0 + reflect-metadata: ^0.1.13 + checksum: 122a365773c15dcb61c620e4f20099ca6753477cde5d88181f34d4a8ab4a487ab2edfa50cc58af38b04456e4b29319671eb60da1719893804ba4fa172c204e94 + languageName: node + linkType: hard + "@joshdb/provider@npm:2.0.0-next.a699598.0": version: 2.0.0-next.a699598.0 resolution: "@joshdb/provider@npm:2.0.0-next.a699598.0" From da56d4d3c5abe94a70cfec07194d98edf924540e Mon Sep 17 00:00:00 2001 From: Hezekiah Hendry Date: Fri, 28 Jul 2023 01:12:31 -0700 Subject: [PATCH 18/19] refactor(indexeddb): restructure code --- packages/indexeddb/package.json | 1 + packages/indexeddb/src/lib/DatabaseHandler.ts | 278 +++++++ packages/indexeddb/src/lib/DbHandler.ts | 180 ----- .../indexeddb/src/lib/IndexedDBProvider.ts | 709 ++++++++++-------- packages/indexeddb/src/lib/helpers.ts | 21 - .../tests/lib/DatabaseHandler.test.ts | 202 +++++ .../indexeddb/tests/lib/DbHandler.test.ts | 116 --- yarn.lock | 1 + 8 files changed, 890 insertions(+), 618 deletions(-) create mode 100644 packages/indexeddb/src/lib/DatabaseHandler.ts delete mode 100644 packages/indexeddb/src/lib/DbHandler.ts delete mode 100644 packages/indexeddb/src/lib/helpers.ts create mode 100644 packages/indexeddb/tests/lib/DatabaseHandler.test.ts delete mode 100644 packages/indexeddb/tests/lib/DbHandler.test.ts diff --git a/packages/indexeddb/package.json b/packages/indexeddb/package.json index 0a8854c1..8ae3688a 100644 --- a/packages/indexeddb/package.json +++ b/packages/indexeddb/package.json @@ -30,6 +30,7 @@ }, "dependencies": { "@joshdb/provider": "2.0.0-next.1c9d8d9.0", + "@sapphire/utilities": "^3.12.0", "property-helpers": "^2.0.0" }, "devDependencies": { diff --git a/packages/indexeddb/src/lib/DatabaseHandler.ts b/packages/indexeddb/src/lib/DatabaseHandler.ts new file mode 100644 index 00000000..ab1f3185 --- /dev/null +++ b/packages/indexeddb/src/lib/DatabaseHandler.ts @@ -0,0 +1,278 @@ +import type { Semver } from '@joshdb/provider'; + +export class DatabaseHandler { + private options: DatabaseHandler.Options; + + private factory = globalThis.indexedDB; + + private _database?: IDBDatabase; + + public constructor(options: DatabaseHandler.Options) { + this.options = options; + } + + private get database(): IDBDatabase { + if (this._database instanceof IDBDatabase) return this._database; + + throw new Error('Database not initialized. This is probably because init() was not called.'); + } + + public async init(): Promise { + const { name, version } = this.options; + const request = this.factory.open(name, 1); + + await new Promise((resolve, reject) => { + request.onerror = reject; + + request.onupgradeneeded = () => { + const database = request.result; + + if (!database.objectStoreNames.contains('metadata')) { + database.createObjectStore('metadata', { keyPath: 'key' }); + } + + if (!database.objectStoreNames.contains('entries')) { + database.createObjectStore('entries', { keyPath: 'key' }); + } + }; + + request.onsuccess = async () => { + this._database = request.result; + + const storedVersion = await this.getMetadata('version'); + + if (!storedVersion) { + await this.setMetadata('version', version); + } + + const autoKey = await this.getMetadata('autoKey'); + + if (typeof autoKey !== 'number') { + await this.setMetadata('autoKey', 0); + } + + resolve(); + }; + }); + } + + public async getMetadata(key: string): Promise { + const metadataStore = this.openMetadata(); + const request = metadataStore.get(key); + + const row = await this.handleRequest>>(request); + + return row?.value; + } + + public async setMetadata(key: string, value: unknown): Promise { + const metadataStore = this.openMetadata(); + const request = metadataStore.put({ key, value }); + + await this.handleRequest(request); + } + + public async deleteMetadata(key: string): Promise { + const metadataStore = this.openMetadata(); + const request = metadataStore.delete(key); + + await this.handleRequest(request); + } + + public async clear(): Promise { + const entriesStore = this.openEntries(); + + await this.handleRequest(entriesStore.clear()); + + const metadataStore = this.openMetadata(); + + await this.handleRequest(metadataStore.clear()); + await this.setMetadata('autoKey', 0); + + const { version } = this.options; + + await this.setMetadata('version', version); + } + + public async delete(key: string): Promise { + const exists = await this.has(key); + + if (!exists) return false; + + const entriesStore = this.openEntries(); + const request = entriesStore.delete(key); + + await this.handleRequest(request); + + return true; + } + + public async deleteMany(keys: string[]): Promise { + const entriesStore = this.openEntries(); + const requests = keys.map((key) => entriesStore.delete(key)); + + for (const request of requests) { + await this.handleRequest(request); + } + } + + public async entries(): Promise<[string, StoredValue][]> { + const entriesStore = this.openEntries(); + const request = entriesStore.getAll(); + const data = await this.handleRequest[]>(request); + const entries = data.map(({ key, value }) => [key, value] as [string, StoredValue]); + + return entries; + } + + public async get(key: string): Promise { + const entriesStore = this.openEntries(); + const request = entriesStore.get(key); + const row = await this.handleRequest>>(request); + + return row?.value; + } + + public async getMany(keys: string[]): Promise> { + const entriesStore = this.openEntries(); + const entries: Record = {}; + + for (const key of keys) { + const request = entriesStore.get(key); + const row = await this.handleRequest>>(request); + + entries[key] = row?.value ?? null; + } + + return entries; + } + + public async has(key: string): Promise { + const cursorRequest = this.openEntries().openKeyCursor(); + + return new Promise((resolve, reject) => { + cursorRequest.onsuccess = (event) => { + const target = event.target as IDBRequest; + const cursor = target.result; + + if (cursor) { + console.log(cursor.key, key); + + if (cursor.key === key) { + return resolve(true); + } + + cursor.continue(); + } else { + resolve(false); + } + }; + + cursorRequest.onerror = () => { + reject(cursorRequest.error); + }; + }); + } + + public async keys(): Promise { + const entriesStore = this.openEntries(); + const request = entriesStore.getAllKeys(); + + return this.handleRequest(request); + } + + public async set(key: string, value: Value): Promise { + const entriesStore = this.openEntries(); + const request = entriesStore.put({ key, value }); + + await this.handleRequest(request); + } + + public async setMany(entries: [string, StoredValue][], overwrite: boolean): Promise { + const entriesStore = this.openEntries(); + + for (const [key, value] of entries) { + if (!overwrite) { + const request = entriesStore.add({ key, value }); + + await this.handleRequest(request); + } else { + const request = entriesStore.put({ key, value }); + + await this.handleRequest(request); + } + } + } + + public async size(): Promise { + const entriesStore = this.openEntries(); + const request = entriesStore.count(); + + return this.handleRequest(request); + } + + public async values(): Promise { + const cursorRequest = this.openEntries().openCursor(); + const values: StoredValue[] = []; + + await new Promise((resolve, reject) => { + cursorRequest.onsuccess = () => { + const cursor = cursorRequest.result; + + if (!cursor) { + return resolve(); + } + + const { value } = cursor.value as DatabaseHandler.Row; + + values.push(value); + + cursor.continue(); + }; + + cursorRequest.onerror = () => { + reject(cursorRequest.error); + }; + }); + + return values; + } + + private async handleRequest(request: IDBRequest): Promise { + return new Promise((resolve, reject) => { + request.onsuccess = () => { + resolve(request.result); + }; + + request.onerror = () => { + reject(request.error); + }; + }); + } + + private openEntries() { + const transaction = this.database.transaction('entries', 'readwrite'); + + return transaction.objectStore('entries'); + } + + private openMetadata() { + const transaction = this.database.transaction('metadata', 'readwrite'); + + return transaction.objectStore('metadata'); + } +} + +export namespace DatabaseHandler { + export interface Options { + name: string; + + version: Semver; + } + + export interface Row { + key: string; + + value: T; + } +} diff --git a/packages/indexeddb/src/lib/DbHandler.ts b/packages/indexeddb/src/lib/DbHandler.ts deleted file mode 100644 index 3a315d69..00000000 --- a/packages/indexeddb/src/lib/DbHandler.ts +++ /dev/null @@ -1,180 +0,0 @@ -import type { JoshProvider, Semver } from '@joshdb/provider'; -import { version } from './helpers'; - -export default class DbHandler { - private idb: IDBFactory; - private db!: IDBDatabase; - - public constructor() { - if (!globalThis.indexedDB) { - throw new Error("Your browser doesn't support a stable version of IndexedDB. Josh is unable to run without one."); - } - - this.idb = globalThis.indexedDB; - } - - public init(context: JoshProvider.Context) { - const { name } = context; - const request = this.idb.open(`joshdb-${name}`, 1); - - return new Promise((resolve, reject) => { - request.onerror = reject; - - request.onupgradeneeded = () => { - const db = request.result; - - if (!db.objectStoreNames.contains('meta')) { - db.createObjectStore('meta', { keyPath: 'key' }); - } - - if (!db.objectStoreNames.contains('store')) { - db.createObjectStore('store', { keyPath: 'key' }); - } - }; - - request.onsuccess = async () => { - this.db = request.result; - - const storedVersion = (await this.getMetadata('version')) as Semver | undefined; - - if (!storedVersion) { - await this.setMetadata('version', version); - } - - resolve(); - }; - }); - } - - public async set(key: string, value: Value) { - const all = this.open(); - const doc = { - key, - value - }; - - const request = all.put(doc); - - await this.handleEvents(request); - } - - public async get(key: string): Promise { - const all = this.open(); - const request = all.get(key); - const result = (await this.handleEvents(request)) as { - value: Value | undefined; // Its shit like this why I don't like TS - }; - - return result?.value; - } - - public async getAll(): Promise<{ [key: string]: Value }> { - const all = this.open(); - const request = all.getAll(); - const docs = (await this.handleEvents(request)) as { key: string; value: Value }[]; - const final: { [key: string]: Value } = {}; // Why can't this be inferred from usage???? - - docs.forEach((x) => { - final[x.key] = x.value; - }); - - return final; - } - - public async getKeys(): Promise { - const all = this.open(); - const request = all.getAllKeys(); - - return (await this.handleEvents(request)) as string[]; - } - - public async count() { - const all = this.open(); - const request = all.count(); - const data = await this.handleEvents(request); - - if (typeof data !== 'number') throw new Error('Something is amiss!!!'); - - return data; - } - - public async delete(key: string) { - const all = this.open(); - const request = all.delete(key); - - return this.handleEvents(request); - } - - public async clear() { - const all = this.open(); - const request = all.clear(); - - return this.handleEvents(request); - } - - public async has(key: string) { - return (await this.get(key)) !== undefined; - } - - public async getMetadata(key: string): Promise { - const all = this.openMetadata(); - const request = all.get(key); - const result = (await this.handleEvents(request)) as { - value: unknown | undefined; // Its shit like this why I don't like TS - }; - - return result?.value; - } - - public async setMetadata(key: string, value: unknown) { - const all = this.openMetadata(); - const doc = { - key, - value - }; - - const request = all.put(doc); - - await this.handleEvents(request); - } - - public async deleteMetadata(key: string) { - const all = this.openMetadata(); - const request = all.delete(key); - - return this.handleEvents(request); - } - - public async clearMetadata() { - const all = this.openMetadata(); - const request = all.clear(); - - return this.handleEvents(request); - } - - private handleEvents(request: IDBRequest) { - return new Promise((res, rej) => { - request.onsuccess = () => { - res(request.result); - }; - - request.onerror = () => { - rej(new Error(request.error?.toString())); - }; - }); - } - - private open() { - const transaction = this.db.transaction('store', 'readwrite'); - const all = transaction.objectStore('store'); - - return all; - } - - private openMetadata() { - const transaction = this.db.transaction('meta', 'readwrite'); - const all = transaction.objectStore('meta'); - - return all; - } -} diff --git a/packages/indexeddb/src/lib/IndexedDBProvider.ts b/packages/indexeddb/src/lib/IndexedDBProvider.ts index 7e97ab32..898496de 100644 --- a/packages/indexeddb/src/lib/IndexedDBProvider.ts +++ b/packages/indexeddb/src/lib/IndexedDBProvider.ts @@ -10,6 +10,7 @@ import { isMapByPathPayload, isPartitionByHookPayload, isPartitionByValuePayload, + isPayloadWithData, isRemoveByHookPayload, isRemoveByValuePayload, isSomeByHookPayload, @@ -18,356 +19,156 @@ import { MathOperator, Method, Payload, + resolveVersion, type Semver } from '@joshdb/provider'; +import { isPrimitive } from '@sapphire/utilities'; import { deleteProperty, getProperty, hasProperty, PROPERTY_NOT_FOUND, setProperty } from 'property-helpers'; -import DbHandler from './DbHandler'; -import { handleSubCallFail, isPrimitive, version } from './helpers'; +import { DatabaseHandler } from './DatabaseHandler'; export class IndexedDBProvider extends JoshProvider { - public version: Semver = version; - public declare options: IndexedDBProvider.Options; - public migrations: JoshProvider.Migration[] = []; - - private _db: DbHandler; + public get version() { + return process.env.NODE_ENV === 'test' ? { major: 2, minor: 0, patch: 0 } : resolveVersion('[VI]{version}[/VI]'); + } - private get db(): DbHandler { - if (!this._db) throw new Error('Database is not initialized. Make sure you called Josh.init();'); + public migrations: JoshProvider.Migration[] = []; - return this._db; - } + private _handler?: DatabaseHandler; public constructor(options: IndexedDBProvider.Options) { super(options); - this._db = new DbHandler(); - } - - public async deleteMetadata(key: string): Promise { - await this.db.deleteMetadata(key); } - public async getMetadata(key: string): Promise { - return this.db.getMetadata(key); - } + private get handler(): DatabaseHandler { + if (this._handler instanceof DatabaseHandler) return this._handler; - public async setMetadata(key: string, value: unknown): Promise { - await this.db.setMetadata(key, value); + throw this.error(IndexedDBProvider.Identifiers.DatabaseHandlerNotFound); } - public async [Method.Each](payload: Payload.Each): Promise> { - const { hook } = payload; - - for (const [key, value] of Object.entries(await this.db.getAll())) await hook(value, key); - - return payload; - } - - public async [Method.DeleteMany](payload: Payload.DeleteMany): Promise { - for (const key of payload.keys) { - await this.db.delete(key); + public override async init(context: JoshProvider.Context): Promise { + if ('indexedDB' in globalThis === false) { + throw this.error(IndexedDBProvider.Identifiers.MissingIndexedDB); } - return payload; - } + const { name } = context; - public async [Method.Delete](payload: Payload.Delete): Promise { - const { key, path } = payload; + this._handler = new DatabaseHandler({ name, version: this.version }); - if (path.length) { - const value = await this.db.get(key); + await this.handler.init(); - deleteProperty(value, path); - await this.db.set(key, value); - } else { - await this.db.delete(key); - } + context = await super.init(context); - return payload; + return context; } - public async [Method.AutoKey](payload: Payload.AutoKey): Promise { - payload.data = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); - - return payload; + public async deleteMetadata(key: string): Promise { + await this.handler.deleteMetadata(key); } - public async [Method.Values](payload: Payload.Values): Promise> { - payload.data = Object.values(await this.db.getAll()); - - return payload; + public async getMetadata(key: string): Promise { + return this.handler.getMetadata(key) as Promise; } - public async [Method.Math](payload: Payload.Math): Promise { - const { key, path, operator, operand } = payload; - const getPayload = await this[Method.Get]({ method: Method.Get, key, path, errors: [] }); - - if (handleSubCallFail(getPayload, payload)) return payload; - if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { - payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; - return payload; - } - - let { data } = getPayload; - - if (typeof data !== 'number') { - payload.errors = [this.error({ identifier: CommonIdentifiers.InvalidDataType })]; - return payload; - } - - switch (operator) { - case MathOperator.Addition: - data += operand; - - break; - - case MathOperator.Subtraction: - data -= operand; - - break; - - case MathOperator.Multiplication: - data *= operand; - - break; - - case MathOperator.Division: - data /= operand; - - break; - - case MathOperator.Remainder: - data %= operand; - - break; + public async setMetadata(key: string, value: unknown): Promise { + await this.handler.setMetadata(key, value); + } - case MathOperator.Exponent: - data **= operand; + public async [Method.AutoKey](payload: Payload.AutoKey): Promise { + let autoKey = await this.getMetadata('autoKey'); - break; - } + autoKey++; + payload.data = autoKey.toString(); - handleSubCallFail(await this[Method.Set]({ method: Method.Set, key, path, value: data, errors: [] }), payload); + await this.setMetadata('autoKey', autoKey); return payload; } - public async [Method.Dec](payload: Payload.Dec): Promise { - const { key, path } = payload; - const mathPayload = await this[Method.Math]({ - method: Method.Math, - key, - path, - operand: 1, - operator: MathOperator.Subtraction, - errors: [] - }); - - handleSubCallFail(mathPayload, payload); + public async [Method.Clear](payload: Payload.Clear): Promise { + await this.handler.clear(); return payload; } - public async [Method.Inc](payload: Payload.Inc): Promise { + public async [Method.Dec](payload: Payload.Dec): Promise { const { key, path } = payload; - const mathPayload = await this[Method.Math]({ - method: Method.Math, - key, - path, - operand: 1, - operator: MathOperator.Addition, - errors: [] - }); - - handleSubCallFail(mathPayload, payload); - - return payload; - } - - public async [Method.Keys](payload: Payload.Keys): Promise { - payload.data = await this.db.getKeys(); - - return payload; - } + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); - public async [Method.RandomKey](payload: Payload.RandomKey): Promise { - const { count, unique } = payload; - const keys = await this.db.getKeys(); + if (!isPayloadWithData(getPayload)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Dec }, { key, path })); - if (unique && keys.length < count) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount })); return payload; } - if (keys.length === 0) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData })); - return payload; - } + const { data } = getPayload; - payload.data = []; + if (typeof data !== 'number') { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Dec }, { key, path, type: 'number' })); - if (unique && keys.length === count) { - payload.data = keys; return payload; } - while (payload.data.length < count) { - const rand = keys[Math.floor(Math.random() * keys.length)]; - - if (unique && payload.data.includes(rand)) continue; - payload.data.push(rand); - } + this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data - 1 }); return payload; } - public async [Method.Random](payload: Payload.Random): Promise> { - // @ts-expect-error 2345 I can do this - const key = await this[Method.RandomKey](payload); - - if (key.data) { - payload.data = await Promise.all(key.data.map((key) => this.db.get(key) as Promise)); - } - - return payload; - } - - public override async init(context: JoshProvider.Context): Promise { - await this.db.init(context); - context = await super.init(context); - - return context; - } - - public async [Method.Get](payload: Payload.Get): Promise> { + public async [Method.Delete](payload: Payload.Delete): Promise { const { key, path } = payload; - const value = await this.db.get(key); if (path.length === 0) { - payload.data = value; - return payload; + await this.handler.delete(key); } - const val = getProperty(value, path); + if (await this.handler.has(key)) { + const value = await this.handler.get(key); - if (val !== PROPERTY_NOT_FOUND) { - payload.data = val; + deleteProperty(value, path); + await this.handler.set(key, value); } return payload; } - public async [Method.Entries](payload: Payload.Entries): Promise> { - payload.data = await this.db.getAll(); - - return payload; - } - - public async [Method.GetMany](payload: Payload.GetMany): Promise> { - // according to old method this could be made into an index search - + public async [Method.DeleteMany](payload: Payload.DeleteMany): Promise { const { keys } = payload; - const data: { [key: string]: StoredValue } = await this.db.getAll(); - - payload.data = {}; - Object.entries(data).forEach(([key, value]) => { - if (keys.includes(key)) { - payload.data![key] = value; - } - }); + await this.handler.deleteMany(keys); return payload; } - public async [Method.Set](payload: Payload.Set): Promise> { - const { key, path, value } = payload; - - if (path.length === 0) await this.db.set(key, value as unknown as StoredValue); - else { - const storedValue = await this.db.get(key); - - await this.db.set(key, setProperty(storedValue, path, value)); - } - - return payload; - } - - public async [Method.SetMany](payload: Payload.SetMany): Promise { - const { entries, overwrite } = payload; - - for (const { key, path, value } of entries) { - const found = overwrite ? false : await this[Method.Get]({ key, method: Method.Get, path, errors: [] }); + public async [Method.Each](payload: Payload.Each): Promise> { + const { hook } = payload; - if (!found) { - handleSubCallFail(await this[Method.Set]({ key, value, path, method: Method.Set, errors: [] }), payload); - } + for (const [key, value] of await this.handler.entries()) { + await hook(value, key); } return payload; } - public async [Method.Clear](payload: Payload.Clear): Promise { - await this.db.clear(); - - return payload; - } - - public async [Method.Has](payload: Payload.Has): Promise { - const { key, path } = payload; - - if (await this.db.has(key)) { - payload.data = true; - - if (path.length !== 0) payload.data = hasProperty(await this.db.get(key), path); - } else payload.data = false; - - return payload; - } - - public async [Method.Size](payload: Payload.Size): Promise { - payload.data = await this.db.count(); - - return payload; - } - - public async [Method.Push](payload: Payload.Push): Promise> { - const { key, path, value } = payload; - const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); - - if (handleSubCallFail(getPayload, payload)) return payload; - if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { - payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; - return payload; - } - - const { data } = getPayload; + public async [Method.Ensure](payload: Payload.Ensure): Promise> { + const { key, defaultValue } = payload; - if (!Array.isArray(data)) { - payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Push }, { key, path, type: 'array' })); + payload.data = defaultValue; - return payload; + if (await this.handler.has(key)) { + payload.data = await this.handler.get(key); + } else { + await this.handler.set(key, defaultValue); } - data.push(value); - await this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data }); - return payload; } - public async [Method.Ensure](payload: Payload.Ensure): Promise> { - const { key, defaultValue } = payload; - - payload.data = defaultValue; - - const getPayload = await this[Method.Get]({ method: Method.Get, key, errors: [], path: [] }); + public async [Method.Entries](payload: Payload.Entries): Promise> { + payload.data = {}; - if (handleSubCallFail(getPayload, payload)) return payload; - if (getPayload.data !== undefined && getPayload.data !== PROPERTY_NOT_FOUND) { - payload.data = getPayload.data; - } else { - handleSubCallFail(await this[Method.Set]({ method: Method.Set, key, path: [], value: defaultValue, errors: [] }), payload); + for (const [key, value] of await this.handler.entries()) { + payload.data[key] = value; } return payload; @@ -378,14 +179,21 @@ export class IndexedDBProvider extends JoshProvider): Promise> { payload.data = true; - if ((await this.db.count()) === 0) return payload; + const size = await this.handler.size(); + + if (size === 0) { + return payload; + } + if (isEveryByHookPayload(payload)) { const { hook } = payload; - for (const [key, value] of Object.entries(await this.db.getAll())) { + for (const [key, value] of await this.handler.entries()) { const result = await hook(value, key); - if (result) continue; + if (result) { + continue; + } payload.data = false; } @@ -394,7 +202,7 @@ export class IndexedDBProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider(payload: Payload.Get): Promise> { + const { key, path } = payload; + + if (path.length === 0) { + if (await this.handler.has(key)) { + payload.data = await this.handler.get(key); + } + } else { + const data = getProperty(await this.handler.get(key), path); + + if (data !== PROPERTY_NOT_FOUND) { + payload.data = data; + } + } + + return payload; + } + + public async [Method.GetMany](payload: Payload.GetMany): Promise> { + const { keys } = payload; + + payload.data = await this.handler.getMany(keys); + + return payload; + } + + public async [Method.Has](payload: Payload.Has): Promise { + const { key, path } = payload; + + payload.data = (await this.handler.has(key)) ?? hasProperty(await this.handler.get(key), path); + + return payload; + } + + public async [Method.Inc](payload: Payload.Inc): Promise { + const { key, path } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (!isPayloadWithData(getPayload)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Inc }, { key, path })); + + return payload; + } + + const { data } = getPayload; + + if (typeof data !== 'number') { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Inc }, { key, path, type: 'number' })); + + return payload; + } + + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data + 1 }); + + return payload; + } + + public async [Method.Keys](payload: Payload.Keys): Promise { + payload.data = await this.handler.keys(); + + return payload; + } + public async [Method.Map](payload: Payload.Map.ByHook): Promise>; public async [Method.Map](payload: Payload.Map.ByPath): Promise>; public async [Method.Map](payload: Payload.Map): Promise> { @@ -518,22 +403,81 @@ export class IndexedDBProvider extends JoshProvider(value, path); - if (data !== PROPERTY_NOT_FOUND) payload.data.push(data); + if (data !== PROPERTY_NOT_FOUND) { + payload.data.push(data); + } } } return payload; } + public async [Method.Math](payload: Payload.Math): Promise { + const { key, path, operator, operand } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (!isPayloadWithData(getPayload)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Math }, { key, path })); + + return payload; + } + + let { data } = getPayload; + + if (typeof data !== 'number') { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Math }, { key, path, type: 'number' })); + + return payload; + } + + switch (operator) { + case MathOperator.Addition: + data += operand; + + break; + + case MathOperator.Subtraction: + data -= operand; + + break; + + case MathOperator.Multiplication: + data *= operand; + + break; + + case MathOperator.Division: + data /= operand; + + break; + + case MathOperator.Remainder: + data %= operand; + + break; + + case MathOperator.Exponent: + data **= operand; + + break; + } + + this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data }); + + return payload; + } + public async [Method.Partition](payload: Payload.Partition.ByHook): Promise>; public async [Method.Partition](payload: Payload.Partition.ByValue): Promise>; public async [Method.Partition](payload: Payload.Partition): Promise> { @@ -542,18 +486,21 @@ export class IndexedDBProvider extends JoshProvider(storedValue, path); if (data === PROPERTY_NOT_FOUND) { @@ -570,8 +517,115 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Push): Promise> { + const { key, path, value } = payload; + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (!isPayloadWithData(getPayload)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Push }, { key, path })); + + return payload; + } + + const { data } = getPayload; + + if (!Array.isArray(data)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidDataType, method: Method.Push }, { key, path, type: 'array' })); + + return payload; + } + + data.push(value); + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value: data }); + + return payload; + } + + public async [Method.Random](payload: Payload.Random): Promise> { + const { count, unique } = payload; + const size = await this.handler.size(); + + if (unique && size < count) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.Random })); + + return payload; + } + + if (size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Random, context: { unique, count } })); + + return payload; + } + + payload.data = []; + + const keys = await this.handler.keys(); + + if (unique) { + const randomKeys = new Set(); + + while (randomKeys.size < count) { + randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); + } + + for (const key of randomKeys) { + payload.data.push((await this.handler.get(key))!); + } + } else { + while (payload.data.length < count) { + const key = keys[Math.floor(Math.random() * keys.length)]; + + payload.data.push((await this.handler.get(key))!); + } + } + + return payload; + } + + public async [Method.RandomKey](payload: Payload.RandomKey): Promise { + const { count, unique } = payload; + const size = await this.handler.size(); + + if (unique && size < count) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.InvalidCount, method: Method.RandomKey })); + + return payload; + } + + if (size === 0) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.RandomKey })); + + return payload; + } + + payload.data = []; + + const keys = Array.from(await this.handler.keys()); + + if (unique) { + const randomKeys = new Set(); + + while (randomKeys.size < count) { + randomKeys.add(keys[Math.floor(Math.random() * keys.length)]); + } + + for (const key of randomKeys) { + payload.data.push(key); + } + } else { + while (payload.data.length < count) { + payload.data.push(keys[Math.floor(Math.random() * keys.length)]); } } @@ -583,11 +637,11 @@ export class IndexedDBProvider extends JoshProvider(payload: Payload.Remove): Promise> { if (isRemoveByHookPayload(payload)) { const { key, path, hook } = payload; - const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + const getPayload = await this[Method.Get]({ method: Method.Get, errors: [], key, path }); + + if (!isPayloadWithData(getPayload)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Remove }, { key, path })); - if (handleSubCallFail(getPayload, payload)) return payload; - if (getPayload.data === undefined || getPayload.data === PROPERTY_NOT_FOUND) { - payload.errors = [this.error({ identifier: CommonIdentifiers.MissingData })]; return payload; } @@ -608,11 +662,12 @@ export class IndexedDBProvider extends JoshProvider extends JoshProvider(payload: Payload.Set): Promise> { + const { key, path, value } = payload; + + if (path.length === 0) { + await this.handler.set(key, value as unknown as StoredValue); + } else { + const storedValue = await this.handler.get(key); + + await this.handler.set(key, setProperty(storedValue, path, value)); + } + + return payload; + } + + public async [Method.SetMany](payload: Payload.SetMany): Promise { + const { entries, overwrite } = payload; + + for (const { key, path, value } of entries) { + if (overwrite) { + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value }); + } else if (!(await this[Method.Has]({ method: Method.Has, errors: [], key, path })).data) { + await this[Method.Set]({ method: Method.Set, errors: [], key, path, value }); + } + } + + return payload; + } + + public async [Method.Size](payload: Payload.Size): Promise { + payload.data = await this.handler.size(); + + return payload; + } + public async [Method.Some](payload: Payload.Some.ByHook): Promise>; public async [Method.Some](payload: Payload.Some.ByValue): Promise; public async [Method.Some](payload: Payload.Some): Promise> { @@ -635,10 +724,12 @@ export class IndexedDBProvider extends JoshProvider extends JoshProvider extends JoshProvider extends JoshProvider(getPayload)) { + payload.errors.push(this.error({ identifier: CommonIdentifiers.MissingData, method: Method.Update }, { key })); + return payload; } @@ -692,11 +785,25 @@ export class IndexedDBProvider extends JoshProvider): Promise> { + payload.data = await this.handler.values(); + + return payload; + } + protected fetchVersion() { - return (this.getMetadata('version') as Promise) || version; + return this.getMetadata('version'); } } export namespace IndexedDBProvider { export interface Options {} + + export enum Identifiers { + DatabaseHandlerNotFound = 'databaseHandlerNotFound', + + MissingIndexedDB = 'missingIndexedDB', + + NotInitialized = 'notInitialized' + } } diff --git a/packages/indexeddb/src/lib/helpers.ts b/packages/indexeddb/src/lib/helpers.ts deleted file mode 100644 index acbf6102..00000000 --- a/packages/indexeddb/src/lib/helpers.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { resolveVersion, type Payload } from '@joshdb/provider'; - -const handleSubCallFail = (res: Payload, payload: Payload) => { - if (res.errors.length) { - res.errors.forEach((err) => { - payload.errors.push(err); - }); - - return true; - } - - return false; -}; - -const isPrimitive = (val: any) => { - return (typeof val !== 'object' && typeof val !== 'function') || val === null; -}; - -const version = resolveVersion('[VI]{version}[/VI]'); - -export { handleSubCallFail, isPrimitive, version }; diff --git a/packages/indexeddb/tests/lib/DatabaseHandler.test.ts b/packages/indexeddb/tests/lib/DatabaseHandler.test.ts new file mode 100644 index 00000000..81337655 --- /dev/null +++ b/packages/indexeddb/tests/lib/DatabaseHandler.test.ts @@ -0,0 +1,202 @@ +import 'fake-indexeddb/auto'; +import { DatabaseHandler } from '../../src/lib/DatabaseHandler'; + +describe('DatabaseHandler', () => { + describe('is a class', () => { + test('GIVEN typeof DatabaseHandler THEN returns function', () => { + expect(typeof DatabaseHandler).toBe('function'); + }); + + test('GIVEN typeof ...prototype THEN returns object', () => { + expect(typeof DatabaseHandler.prototype).toBe('object'); + }); + }); + + describe('can manipulate data', () => { + const handler = new DatabaseHandler({ name: 'test', version: { major: 2, minor: 0, patch: 0 } }); + + beforeAll(async () => { + await handler.init(); + }); + + beforeEach(async () => { + await handler.clear(); + }); + + describe('with clear method', () => { + test('GIVEN no data THEN resolves', async () => { + await expect(handler.clear()).resolves.toBeUndefined(); + await expect(handler.size()).resolves.toBe(0); + }); + + test('GIVEN data THEN clears data', async () => { + await handler.set('key', 'value'); + await expect(handler.size()).resolves.toBe(1); + await expect(handler.clear()).resolves.toBeUndefined(); + await expect(handler.size()).resolves.toBe(0); + }); + }); + + describe('with delete method', () => { + test('GIVEN no data THEN returns false', async () => { + await expect(handler.delete('key')).resolves.toBe(false); + }); + + test('GIVEN data THEN returns true AND deletes value', async () => { + await handler.set('key', 'value'); + await expect(handler.delete('key')).resolves.toBe(true); + }); + }); + + describe('with deleteMany method', () => { + test('GIVEN no data THEN does nothing', async () => { + await expect(handler.deleteMany(['key'])).resolves.toBeUndefined(); + }); + + test('GIVEN data THEN deletes value', async () => { + await handler.set('key', 'value'); + + await expect(handler.deleteMany(['key'])).resolves.toBeUndefined(); + + await expect(handler.has('key')).resolves.toBe(false); + }); + + test('GIVEN data THEN deletes values', async () => { + await handler.set('key', 'value'); + await handler.set('key2', 'value'); + + await expect(handler.deleteMany(['key', 'key2'])).resolves.toBeUndefined(); + + await expect(handler.has('key')).resolves.toBe(false); + await expect(handler.has('key2')).resolves.toBe(false); + }); + }); + + describe('with entries method', () => { + test('GIVEN no data THEN returns empty array', async () => { + await expect(handler.entries()).resolves.toEqual([]); + }); + + test('GIVEN data THEN returns array', async () => { + await handler.set('key', 'value'); + await expect(handler.entries()).resolves.toEqual([['key', 'value']]); + }); + }); + + describe('with get method', () => { + test('GIVEN no data THEN returns undefined', async () => { + await expect(handler.get('key')).resolves.toBeUndefined(); + }); + + test('GIVEN data THEN returns value', async () => { + await handler.set('key', 'value'); + await expect(handler.get('key')).resolves.toBe('value'); + }); + }); + + describe('with getMany method', () => { + test('GIVEN no data THEN returns empty array', async () => { + await expect(handler.getMany(['key'])).resolves.toEqual({ key: null }); + }); + + test('GIVEN data THEN returns value', async () => { + await handler.set('key', 'value'); + await expect(handler.getMany(['key'])).resolves.toEqual({ key: 'value' }); + }); + + test('GIVEN data THEN returns values', async () => { + await handler.set('key', 'value'); + await handler.set('key2', 'value'); + await expect(handler.getMany(['key', 'key2'])).resolves.toEqual({ key: 'value', key2: 'value' }); + }); + }); + + describe('with has method', () => { + test('GIVEN no data THEN returns false', async () => { + await expect(handler.has('key')).resolves.toBe(false); + }); + + test('GIVEN data THEN returns true', async () => { + await handler.set('key', 'value'); + await expect(handler.has('key')).resolves.toBe(true); + }); + }); + + describe('with keys method', () => { + test('with no data THEN returns empty array', async () => { + await expect(handler.keys()).resolves.toEqual([]); + }); + + test('with data THEN returns array', async () => { + await handler.set('key', 'value'); + await expect(handler.keys()).resolves.toEqual(['key']); + }); + }); + + describe('with set method', () => { + test('GIVEN no data THEN sets value', async () => { + await expect(handler.set('key', 'value')).resolves.toBeUndefined(); + await expect(handler.has('key')).resolves.toBe(true); + }); + }); + + describe('with setMany method', () => { + test('GIVEN no data THEN sets values', async () => { + await expect(handler.setMany([['key', 'value']], true)).resolves.toBeUndefined(); + + await expect(handler.has('key')).resolves.toBe(true); + }); + + test('GIVEN data THEN sets value', async () => { + await handler.set('key', 'value'); + await expect(handler.setMany([['key', 'value']], true)).resolves.toBeUndefined(); + + await expect(handler.has('key')).resolves.toBe(true); + }); + + test('GIVEN data THEN skips value', async () => { + await handler.set('key', 'value'); + await expect(handler.setMany([['key', 'value2']], false)).resolves.toBeUndefined(); + + await expect(handler.get('key')).resolves.toBe('value'); + }); + + test('GIVEN data THEN sets values', async () => { + await expect( + handler.setMany( + [ + ['key', 'value'], + ['key2', 'value'] + ], + true + ) + ).resolves.toBeUndefined(); + + await expect(handler.has('key')).resolves.toBe(true); + await expect(handler.has('key2')).resolves.toBe(true); + }); + }); + + describe('with size method', () => { + test('GIVEN no data THEN returns 0', async () => { + await expect(handler.size()).resolves.toBe(0); + }); + + test('GIVEN data THEN returns 1', async () => { + await handler.set('key', 'value'); + await expect(handler.size()).resolves.toBe(1); + }); + }); + + describe('with values method', () => { + test('GIVEN no data THEN returns empty array', async () => { + await expect(handler.values()).resolves.toEqual([]); + }); + + test('GIVEN data THEN returns array', async () => { + await handler.set('key', 'value'); + await expect(handler.values()).resolves.toEqual(['value']); + }); + }); + }); +}); diff --git a/packages/indexeddb/tests/lib/DbHandler.test.ts b/packages/indexeddb/tests/lib/DbHandler.test.ts deleted file mode 100644 index 443de151..00000000 --- a/packages/indexeddb/tests/lib/DbHandler.test.ts +++ /dev/null @@ -1,116 +0,0 @@ -import 'fake-indexeddb/auto'; -import DbHandler from '../../src/lib/DbHandler'; - -describe('DbHandler', () => { - describe('is a class', () => { - test(`GIVEN typeof DbHandler THEN returns function`, () => { - expect(typeof DbHandler).toBe('function'); - }); - - test('GIVEN typeof ...prototype THEN returns object', () => { - expect(typeof DbHandler.prototype).toBe('object'); - }); - }); - - describe('Can manipulate data.', () => { - const handler = new DbHandler(); - - beforeAll(async () => { - await handler.init({ name: 'test' }); - }); - - beforeEach(async () => { - await handler.clear(); - }); - - test('Can set and subsequently get data', async () => { - await handler.set('string', 'hello world'); - await handler.set('num', 420); - await handler.set('obj', { hello: 'world' }); - await handler.set('array', [1, 2, 3]); - expect(await handler.get('string')).toEqual('hello world'); - expect(await handler.get('num')).toEqual(420); - expect(await handler.get('obj')).toEqual({ hello: 'world' }); - expect(await handler.get('array')).toEqual([1, 2, 3]); - }); - - test('Can get all data', async () => { - expect(await handler.getAll()).toEqual({}); - await handler.set('string', 'hello world'); - await handler.set('num', 420); - await handler.set('obj', { hello: 'world' }); - await handler.set('array', [1, 2, 3]); - expect(await handler.getAll()).toEqual({ num: 420, obj: { hello: 'world' }, string: 'hello world', array: [1, 2, 3] }); - }); - - test('Can get all keys', async () => { - expect(await handler.getKeys()).toEqual([]); - await handler.set('string', 'hello world'); - await handler.set('num', 420); - await handler.set('obj', { hello: 'world' }); - await handler.set('array', [1, 2, 3]); - expect(await handler.getKeys()).toEqual(['array', 'num', 'obj', 'string']); - }); - - test('Can delete data', async () => { - await handler.set('string', 'hello world'); - await handler.delete('string'); - expect(await handler.get('string')).toBeUndefined(); - }); - - test('Can has data', async () => { - expect(await handler.has('string')).toEqual(false); - await handler.set('string', 'hello world'); - expect(await handler.has('string')).toEqual(true); - }); - - test('Can count data', async () => { - expect(await handler.count()).toEqual(0); - await handler.set('string', 'hello world'); - await handler.set('string2', 'hello world'); - await handler.set('string3', 'hello world'); - expect(await handler.count()).toEqual(3); - }); - - test('Can clear data', async () => { - await handler.set('string', 'hello world'); - await handler.set('string2', 'hello world'); - await handler.set('string3', 'hello world'); - await handler.clear(); - expect(await handler.count()).toEqual(0); - }); - }); - - describe('Can manipulate metadata.', () => { - const handler = new DbHandler(); - - beforeAll(async () => { - await handler.init({ name: 'meta-test' }); - }); - - beforeEach(async () => { - await handler.clear(); - }); - - test('Can set and subsequently get metadata', async () => { - await handler.setMetadata('string', 'hello world'); - await handler.setMetadata('num', 420); - await handler.setMetadata('obj', { hello: 'world' }); - await handler.setMetadata('array', [1, 2, 3]); - expect(await handler.getMetadata('string')).toEqual('hello world'); - expect(await handler.getMetadata('num')).toEqual(420); - expect(await handler.getMetadata('obj')).toEqual({ hello: 'world' }); - expect(await handler.getMetadata('array')).toEqual([1, 2, 3]); - }); - - test('Can clear metadata', async () => { - await handler.setMetadata('string', 'hello world'); - await handler.setMetadata('string2', 'hello world'); - await handler.setMetadata('string3', 'hello world'); - await handler.clearMetadata(); - expect(await handler.getMetadata('string')).toBeUndefined(); - expect(await handler.getMetadata('string2')).toBeUndefined(); - expect(await handler.getMetadata('string3')).toBeUndefined(); - }); - }); -}); diff --git a/yarn.lock b/yarn.lock index e1640955..c6d42301 100644 --- a/yarn.lock +++ b/yarn.lock @@ -609,6 +609,7 @@ __metadata: "@favware/cliff-jumper": ^2.0.1 "@favware/rollup-type-bundler": ^1.0.11 "@joshdb/provider": 2.0.0-next.1c9d8d9.0 + "@sapphire/utilities": ^3.12.0 "@vitest/coverage-v8": ^0.32.0 fake-indexeddb: ^4.0.1 property-helpers: ^2.0.0 From f68964cd6dc4cbb59a8fbd207e1924d351d53c45 Mon Sep 17 00:00:00 2001 From: Hezekiah Hendry Date: Sun, 10 Sep 2023 00:38:32 -0400 Subject: [PATCH 19/19] chore(git-cliff): update config --- packages/indexeddb/cliff.toml | 52 +++++++++++++++------------------- packages/json/cliff.toml | 33 +++++++++++---------- packages/map/cliff.toml | 33 +++++++++++---------- packages/maria/cliff.toml | 33 +++++++++++---------- packages/mongo/cliff.toml | 33 +++++++++++---------- packages/postgresql/cliff.toml | 33 +++++++++++---------- packages/redis/cliff.toml | 33 +++++++++++---------- packages/sqlite/cliff.toml | 33 +++++++++++---------- 8 files changed, 135 insertions(+), 148 deletions(-) diff --git a/packages/indexeddb/cliff.toml b/packages/indexeddb/cliff.toml index 001b137b..e281775c 100644 --- a/packages/indexeddb/cliff.toml +++ b/packages/indexeddb/cliff.toml @@ -7,38 +7,32 @@ All notable changes to this project will be documented in this file. """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/utilities/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/utilities/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} - - {% if commit.scope %}\ - **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/utilities/commit/{{ commit.id }}))\ - {% if commit.breaking %}\ - - - {% raw %} {% endraw %} ### πŸ’₯ Breaking Changes: - \ - {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %} - {{ breakingChange }} -\ - {% endfor %}\ - {% endif %}\ - {% endfor %} -{% endfor %} - + ## {{ group | upper_first }} + {% for commit in commits %} + - {% if commit.scope %}\ + **{{commit.scope}}:** \ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% if commit.breaking %}\ + {% for breakingChange in commit.footers %}\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ + {% endfor %}\ + {% endif %}\ + {% endfor %} +{% endfor %}\n """ trim = true footer = "" diff --git a/packages/json/cliff.toml b/packages/json/cliff.toml index 6af1d12d..0698da18 100644 --- a/packages/json/cliff.toml +++ b/packages/json/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true diff --git a/packages/map/cliff.toml b/packages/map/cliff.toml index b769aa86..f5f587a5 100644 --- a/packages/map/cliff.toml +++ b/packages/map/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true diff --git a/packages/maria/cliff.toml b/packages/maria/cliff.toml index c2f9a048..5e7fadf0 100644 --- a/packages/maria/cliff.toml +++ b/packages/maria/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true diff --git a/packages/mongo/cliff.toml b/packages/mongo/cliff.toml index 76d0d725..0ae321f1 100644 --- a/packages/mongo/cliff.toml +++ b/packages/mongo/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true diff --git a/packages/postgresql/cliff.toml b/packages/postgresql/cliff.toml index 7637e28f..0dd7d040 100644 --- a/packages/postgresql/cliff.toml +++ b/packages/postgresql/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true diff --git a/packages/redis/cliff.toml b/packages/redis/cliff.toml index c631d32c..8b3dd76d 100644 --- a/packages/redis/cliff.toml +++ b/packages/redis/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true diff --git a/packages/sqlite/cliff.toml b/packages/sqlite/cliff.toml index dedad3ea..512a3952 100644 --- a/packages/sqlite/cliff.toml +++ b/packages/sqlite/cliff.toml @@ -6,32 +6,31 @@ All notable changes to this project will be documented in this file.\n """ body = """ {% if version %}\ - # [{{ version | trim_start_matches(pat="v") }}]\ - {% if previous %}\ - {% if previous.version %}\ - (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ - {% else %}\ - (https://github.com/josh-development/providers/tree/{{ version }})\ - {% endif %}\ - {% endif %} \ - - ({{ timestamp | date(format="%Y-%m-%d") }}) + # [{{ version | trim_start_matches(pat="v") }}]\ + {% if previous %}\ + {% if previous.version %}\ + (https://github.com/josh-development/providers/compare/{{ previous.version }}...{{ version }})\ + {% else %}\ + (https://github.com/josh-development/providers/tree/{{ version }})\ + {% endif %}\ + {% endif %} \ + - ({{ timestamp | date(format="%Y-%m-%d") }}) {% else %}\ - # [unreleased] + # [unreleased] {% endif %}\ {% for group, commits in commits | group_by(attribute="group") %} - ## {{ group | upper_first }} - {% for commit in commits %} + ## {{ group | upper_first }} + {% for commit in commits %} - {% if commit.scope %}\ **{{commit.scope}}:** \ - {% endif %}\ - {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ + {% endif %}\ + {{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}](https://github.com/josh-development/providers/commit/{{ commit.id }}))\ {% if commit.breaking %}\ - \n\n {% raw %} {% endraw %}### πŸ’₯ Breaking Changes:\n\n\ {% for breakingChange in commit.footers %}\ - {% raw %} {% endraw %}- {{ breakingChange }}\n\ + \n{% raw %} {% endraw %}- πŸ’₯ **{{ breakingChange.token }}{{ breakingChange.separator }}** {{ breakingChange.value }}\ {% endfor %}\ {% endif %}\ - {% endfor %} + {% endfor %} {% endfor %}\n """ trim = true