@ddd-ts/store-inmemory 0.0.31 → 0.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,8 @@ export declare class InMemoryStore<M extends IIdentifiable> implements Store<M>
9
9
  readonly collection: string;
10
10
  readonly database: InMemoryDatabase;
11
11
  readonly serializer: ISerializer<M>;
12
- constructor(collection: string, database: InMemoryDatabase, serializer: ISerializer<M>);
12
+ readonly $name?: string | undefined;
13
+ constructor(collection: string, database: InMemoryDatabase, serializer: ISerializer<M>, $name?: string | undefined);
13
14
  filter(predicate: (model: M) => boolean, trx?: InMemoryTransaction): Promise<M[]>;
14
15
  clear(): void;
15
16
  save(model: M, trx?: InMemoryTransaction): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory.store.d.ts","sourceRoot":"","sources":["../../src/store/in-memory.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;aAEnD,UAAU,EAAE,MAAM;aAClB,QAAQ,EAAE,gBAAgB;aAC1B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gBAF1B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAGtC,MAAM,CACV,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAChC,GAAG,CAAC,EAAE,mBAAmB,GACxB,OAAO,CAAC,CAAC,EAAE,CAAC;IAcf,KAAK;IAIC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAc1E,OAAO,CAAC,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAW1C,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKjE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,QAAQ;IAIP,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC;CAKrC"}
1
+ {"version":3,"file":"in-memory.store.d.ts","sourceRoot":"","sources":["../../src/store/in-memory.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,aAAa,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;aAEnD,UAAU,EAAE,MAAM;aAClB,QAAQ,EAAE,gBAAgB;aAC1B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;aAC1B,KAAK,CAAC,EAAE,MAAM;gBAHd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAC1B,KAAK,CAAC,EAAE,MAAM,YAAA;IAG1B,MAAM,CACV,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAChC,GAAG,CAAC,EAAE,mBAAmB,GACxB,OAAO,CAAC,CAAC,EAAE,CAAC;IAiBf,KAAK;IAIC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiB1E,OAAO,CAAC,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAc1C,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKjE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,QAAQ;IAIP,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC;CAKrC"}
@@ -9,14 +9,19 @@ class InMemoryStore {
9
9
  collection;
10
10
  database;
11
11
  serializer;
12
- constructor(collection, database, serializer) {
12
+ $name;
13
+ constructor(collection, database, serializer, $name) {
13
14
  this.collection = collection;
14
15
  this.database = database;
15
16
  this.serializer = serializer;
17
+ this.$name = $name;
16
18
  }
17
19
  async filter(predicate, trx) {
18
20
  const filtered = await Promise.all(this.database.loadAll(this.collection).map(async (e) => {
19
- const deserialized = await this.serializer.deserialize(e.data.data);
21
+ const deserialized = await this.serializer.deserialize({
22
+ ...(this.$name ? { $name: this.$name } : {}),
23
+ ...e.data.data,
24
+ });
20
25
  if (!predicate(deserialized)) {
21
26
  return undefined;
22
27
  }
@@ -29,7 +34,8 @@ class InMemoryStore {
29
34
  this.database.clear(this.collection);
30
35
  }
31
36
  async save(model, trx) {
32
- await this.database.save(this.collection, model.id.serialize(), await this.serializer.serialize(model), trx?.transaction);
37
+ const serialized = await this.serializer.serialize(model);
38
+ await this.database.save(this.collection, model.id.serialize(), { ...(this.$name ? { $name: this.$name } : {}), ...serialized }, trx?.transaction);
33
39
  }
34
40
  async saveAll(models, trx) {
35
41
  await Promise.all(models.map((m) => this.save(m, trx)));
@@ -39,13 +45,19 @@ class InMemoryStore {
39
45
  if (!serialized) {
40
46
  return undefined;
41
47
  }
42
- return this.serializer.deserialize(serialized);
48
+ return this.serializer.deserialize({
49
+ ...(this.$name ? { $name: this.$name } : {}),
50
+ ...serialized,
51
+ });
43
52
  }
44
53
  loadAll(trx) {
45
54
  const serialized = this.database.loadAll(this.collection);
46
55
  return Promise.all(serialized.map(async (s) => {
47
56
  trx?.transaction.markRead(this.collection, s.id, s.data.savedAt);
48
- return this.serializer.deserialize(s.data.data);
57
+ return this.serializer.deserialize({
58
+ ...(this.$name ? { $name: this.$name } : {}),
59
+ ...s.data.data,
60
+ });
49
61
  }));
50
62
  }
51
63
  async loadMany(ids, trx) {
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory.store.js","sourceRoot":"","sources":["../../src/store/in-memory.store.ts"],"names":[],"mappings":"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","sourcesContent":["import { ISerializer, Store, type IIdentifiable } from \"@ddd-ts/core\";\nimport { InMemoryDatabase } from \"./in-memory.database\";\nimport { InMemoryTransaction } from \"../in-memory.transaction\";\n/**\n * This in memory store is a copy store. It stores a copy of the actual model.\n * It is the recommended inmemory store to use, as it reflects more closely the behaviour of a real store.\n */\nexport class InMemoryStore<M extends IIdentifiable> implements Store<M> {\n constructor(\n public readonly collection: string,\n public readonly database: InMemoryDatabase,\n public readonly serializer: ISerializer<M>,\n ) {}\n\n async filter(\n predicate: (model: M) => boolean,\n trx?: InMemoryTransaction,\n ): Promise<M[]> {\n const filtered = await Promise.all(\n this.database.loadAll(this.collection).map(async (e) => {\n const deserialized = await this.serializer.deserialize(e.data.data);\n if (!predicate(deserialized)) {\n return undefined;\n }\n trx?.transaction.markRead(this.collection, e.id, e.data.savedAt);\n return deserialized;\n }),\n );\n return filtered.filter((e): e is NonNullable<typeof e> => Boolean(e));\n }\n\n clear() {\n this.database.clear(this.collection);\n }\n\n async save(model: M, trx?: InMemoryTransaction): Promise<void> {\n await this.database.save(\n this.collection,\n model.id.serialize(),\n await this.serializer.serialize(model),\n trx?.transaction,\n );\n }\n\n async saveAll(models: M[], trx?: InMemoryTransaction): Promise<void> {\n await Promise.all(models.map((m) => this.save(m, trx)));\n }\n\n async load(id: M[\"id\"], trx?: InMemoryTransaction): Promise<M | undefined> {\n const serialized = await this.database.load(\n this.collection,\n id.serialize(),\n trx?.transaction,\n );\n\n if (!serialized) {\n return undefined;\n }\n\n return this.serializer.deserialize(serialized);\n }\n\n loadAll(trx?: InMemoryTransaction): Promise<M[]> {\n const serialized = this.database.loadAll(this.collection);\n\n return Promise.all(\n serialized.map(async (s) => {\n trx?.transaction.markRead(this.collection, s.id, s.data.savedAt);\n return this.serializer.deserialize(s.data.data);\n }),\n );\n }\n\n async loadMany(ids: M[\"id\"][], trx?: InMemoryTransaction): Promise<M[]> {\n const result = await Promise.all(ids.map((id) => this.load(id, trx)));\n return result.filter((m) => m !== undefined) as M[];\n }\n\n async delete(id: M[\"id\"], trx?: InMemoryTransaction): Promise<void> {\n this.database.delete(this.collection, id.serialize(), trx?.transaction);\n }\n\n async countAll() {\n return this.database.countAll(this.collection);\n }\n\n async *streamAll(): AsyncIterable<M> {\n for (const item of await this.filter(() => true)) {\n yield item;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"in-memory.store.js","sourceRoot":"","sources":["../../src/store/in-memory.store.ts"],"names":[],"mappings":"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","sourcesContent":["import { ISerializer, Store, type IIdentifiable } from \"@ddd-ts/core\";\nimport { InMemoryDatabase } from \"./in-memory.database\";\nimport { InMemoryTransaction } from \"../in-memory.transaction\";\n/**\n * This in memory store is a copy store. It stores a copy of the actual model.\n * It is the recommended inmemory store to use, as it reflects more closely the behaviour of a real store.\n */\nexport class InMemoryStore<M extends IIdentifiable> implements Store<M> {\n constructor(\n public readonly collection: string,\n public readonly database: InMemoryDatabase,\n public readonly serializer: ISerializer<M>,\n public readonly $name?: string,\n ) {}\n\n async filter(\n predicate: (model: M) => boolean,\n trx?: InMemoryTransaction,\n ): Promise<M[]> {\n const filtered = await Promise.all(\n this.database.loadAll(this.collection).map(async (e) => {\n const deserialized = await this.serializer.deserialize({\n ...(this.$name ? { $name: this.$name } : {}),\n ...e.data.data,\n });\n if (!predicate(deserialized)) {\n return undefined;\n }\n trx?.transaction.markRead(this.collection, e.id, e.data.savedAt);\n return deserialized;\n }),\n );\n return filtered.filter((e): e is NonNullable<typeof e> => Boolean(e));\n }\n\n clear() {\n this.database.clear(this.collection);\n }\n\n async save(model: M, trx?: InMemoryTransaction): Promise<void> {\n const serialized = await this.serializer.serialize(model);\n await this.database.save(\n this.collection,\n model.id.serialize(),\n { ...(this.$name ? { $name: this.$name } : {}), ...serialized },\n trx?.transaction,\n );\n }\n\n async saveAll(models: M[], trx?: InMemoryTransaction): Promise<void> {\n await Promise.all(models.map((m) => this.save(m, trx)));\n }\n\n async load(id: M[\"id\"], trx?: InMemoryTransaction): Promise<M | undefined> {\n const serialized = await this.database.load(\n this.collection,\n id.serialize(),\n trx?.transaction,\n );\n\n if (!serialized) {\n return undefined;\n }\n\n return this.serializer.deserialize({\n ...(this.$name ? { $name: this.$name } : {}),\n ...serialized,\n });\n }\n\n loadAll(trx?: InMemoryTransaction): Promise<M[]> {\n const serialized = this.database.loadAll(this.collection);\n\n return Promise.all(\n serialized.map(async (s) => {\n trx?.transaction.markRead(this.collection, s.id, s.data.savedAt);\n return this.serializer.deserialize({\n ...(this.$name ? { $name: this.$name } : {}),\n ...s.data.data,\n });\n }),\n );\n }\n\n async loadMany(ids: M[\"id\"][], trx?: InMemoryTransaction): Promise<M[]> {\n const result = await Promise.all(ids.map((id) => this.load(id, trx)));\n return result.filter((m) => m !== undefined) as M[];\n }\n\n async delete(id: M[\"id\"], trx?: InMemoryTransaction): Promise<void> {\n this.database.delete(this.collection, id.serialize(), trx?.transaction);\n }\n\n async countAll() {\n return this.database.countAll(this.collection);\n }\n\n async *streamAll(): AsyncIterable<M> {\n for (const item of await this.filter(() => true)) {\n yield item;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-ts/store-inmemory",
3
- "version": "0.0.31",
3
+ "version": "0.0.32",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -8,11 +8,11 @@
8
8
  "build": "tsc"
9
9
  },
10
10
  "dependencies": {
11
- "@ddd-ts/core": "0.0.31"
11
+ "@ddd-ts/core": "0.0.32"
12
12
  },
13
13
  "devDependencies": {
14
- "@ddd-ts/tools": "0.0.31",
15
- "@ddd-ts/types": "0.0.31",
14
+ "@ddd-ts/tools": "0.0.32",
15
+ "@ddd-ts/types": "0.0.32",
16
16
  "@types/jest": "^29.5.1",
17
17
  "@types/node": "^20.12.4"
18
18
  }