@furystack/mongodb-store 9.0.1 → 9.0.3
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.
- package/esm/mongodb-store.d.ts +13 -1
- package/esm/mongodb-store.d.ts.map +1 -1
- package/esm/mongodb-store.js +14 -8
- package/esm/mongodb-store.js.map +1 -1
- package/esm/store-manager-helpers.d.ts +1 -1
- package/esm/store-manager-helpers.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/mongodb-store.ts +30 -14
package/esm/mongodb-store.d.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import type { FindOptions, PhysicalStore, PartialResult, FilterType, WithOptionalId, CreateResult } from '@furystack/core';
|
|
2
2
|
import type { Constructable } from '@furystack/inject';
|
|
3
|
+
import { EventHub } from '@furystack/utils';
|
|
3
4
|
import type { MongoClient, Collection } from 'mongodb';
|
|
4
5
|
/**
|
|
5
6
|
* TypeORM Store implementation for FuryStack
|
|
6
7
|
*/
|
|
7
|
-
export declare class MongodbStore<T extends object, TPrimaryKey extends keyof T, TWriteableData = WithOptionalId<T, TPrimaryKey>>
|
|
8
|
+
export declare class MongodbStore<T extends object, TPrimaryKey extends keyof T, TWriteableData = WithOptionalId<T, TPrimaryKey>> extends EventHub<{
|
|
9
|
+
onEntityAdded: {
|
|
10
|
+
entity: T;
|
|
11
|
+
};
|
|
12
|
+
onEntityUpdated: {
|
|
13
|
+
id: T[TPrimaryKey];
|
|
14
|
+
change: Partial<T>;
|
|
15
|
+
};
|
|
16
|
+
onEntityRemoved: {
|
|
17
|
+
key: T[TPrimaryKey];
|
|
18
|
+
};
|
|
19
|
+
}> implements PhysicalStore<T, TPrimaryKey, TWriteableData> {
|
|
8
20
|
private readonly options;
|
|
9
21
|
readonly primaryKey: TPrimaryKey;
|
|
10
22
|
readonly model: Constructable<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb-store.d.ts","sourceRoot":"","sources":["../src/mongodb-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,YAAY,EACb,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAU,UAAU,EAAgD,MAAM,SAAS,CAAA;AAI5G;;GAEG;AACH,qBAAa,YAAY,
|
|
1
|
+
{"version":3,"file":"mongodb-store.d.ts","sourceRoot":"","sources":["../src/mongodb-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,YAAY,EACb,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAU,UAAU,EAAgD,MAAM,SAAS,CAAA;AAI5G;;GAEG;AACH,qBAAa,YAAY,CACrB,CAAC,SAAS,MAAM,EAChB,WAAW,SAAS,MAAM,CAAC,EAC3B,cAAc,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAEjD,SAAQ,QAAQ,CAAC;IACf,aAAa,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;IAC5B,eAAe,EAAE;QAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;IAC3D,eAAe,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAA;CACzC,CACD,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC;IA6EtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IA3E1B,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,SAAgB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAe;IAElC,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,WAAW;IA4BN,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAsBjC,OAAO,EAAE;QACxB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;QACvB,UAAU,EAAE,WAAW,CAAA;QACvB,EAAE,EAAE,MAAM,CAAA;QACV,UAAU,EAAE,MAAM,CAAA;QAClB,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;KACxC;IAMU,GAAG,CAAC,GAAG,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAqB3D,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC9C,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAsB5C,OAAO,CAAC,aAAa;IAOR,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQzE,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD,OAAO;CAGrB"}
|
package/esm/mongodb-store.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { EventHub } from '@furystack/utils';
|
|
1
2
|
import { ObjectId } from 'mongodb';
|
|
2
3
|
import { Lock } from 'semaphore-async-await';
|
|
3
4
|
/**
|
|
4
5
|
* TypeORM Store implementation for FuryStack
|
|
5
6
|
*/
|
|
6
|
-
export class MongodbStore {
|
|
7
|
+
export class MongodbStore extends EventHub {
|
|
7
8
|
options;
|
|
8
9
|
primaryKey;
|
|
9
10
|
model;
|
|
@@ -74,6 +75,7 @@ export class MongodbStore {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
constructor(options) {
|
|
78
|
+
super();
|
|
77
79
|
this.options = options;
|
|
78
80
|
this.primaryKey = options.primaryKey;
|
|
79
81
|
this.model = options.model;
|
|
@@ -81,14 +83,16 @@ export class MongodbStore {
|
|
|
81
83
|
async add(...entries) {
|
|
82
84
|
const collection = await this.getCollection();
|
|
83
85
|
const result = await collection.insertMany(entries.map((e) => ({ ...e })));
|
|
86
|
+
const created = this.primaryKey === '_id'
|
|
87
|
+
? Object.values(result.insertedIds).map((insertedId, index) => this.stringifyResultId({ _id: insertedId, ...entries[index] }))
|
|
88
|
+
: Object.values(result.insertedIds).map((insertedId, index) => {
|
|
89
|
+
const entity = { _id: insertedId, ...entries[index] };
|
|
90
|
+
const { _id, ...r } = entity;
|
|
91
|
+
return r;
|
|
92
|
+
});
|
|
93
|
+
created.forEach((entity) => this.emit('onEntityAdded', { entity }));
|
|
84
94
|
return {
|
|
85
|
-
created
|
|
86
|
-
? Object.values(result.insertedIds).map((insertedId, index) => this.stringifyResultId({ _id: insertedId, ...entries[index] }))
|
|
87
|
-
: Object.values(result.insertedIds).map((insertedId, index) => {
|
|
88
|
-
const entity = { _id: insertedId, ...entries[index] };
|
|
89
|
-
const { _id, ...r } = entity;
|
|
90
|
-
return r;
|
|
91
|
-
}),
|
|
95
|
+
created,
|
|
92
96
|
};
|
|
93
97
|
}
|
|
94
98
|
async update(id, data) {
|
|
@@ -97,6 +101,7 @@ export class MongodbStore {
|
|
|
97
101
|
if (updateResult.matchedCount < 1) {
|
|
98
102
|
throw Error(`Entity not found with id '${id}', cannot update!`);
|
|
99
103
|
}
|
|
104
|
+
this.emit('onEntityUpdated', { id, change: data });
|
|
100
105
|
}
|
|
101
106
|
async count(filter) {
|
|
102
107
|
const collection = await this.getCollection();
|
|
@@ -138,6 +143,7 @@ export class MongodbStore {
|
|
|
138
143
|
async remove(...keys) {
|
|
139
144
|
const collection = await this.getCollection();
|
|
140
145
|
await collection.deleteMany(this.createIdFilter(...keys));
|
|
146
|
+
keys.forEach((key) => this.emit('onEntityRemoved', { key }));
|
|
141
147
|
}
|
|
142
148
|
async dispose() {
|
|
143
149
|
/** */
|
package/esm/mongodb-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb-store.js","sourceRoot":"","sources":["../src/mongodb-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mongodb-store.js","sourceRoot":"","sources":["../src/mongodb-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,6 @@ export declare const useMongoDb: <T extends object>({ injector, model, primaryKe
|
|
|
28
28
|
/**
|
|
29
29
|
* Optional options for the MongoDb Client
|
|
30
30
|
*/
|
|
31
|
-
options?: MongoClientOptions
|
|
31
|
+
options?: MongoClientOptions;
|
|
32
32
|
}) => void;
|
|
33
33
|
//# sourceMappingURL=store-manager-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-manager-helpers.d.ts","sourceRoot":"","sources":["../src/store-manager-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIjD,eAAO,MAAM,UAAU;
|
|
1
|
+
{"version":3,"file":"store-manager-helpers.d.ts","sourceRoot":"","sources":["../src/store-manager-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIjD,eAAO,MAAM,UAAU,qFAQpB;IACD;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,CAAA;IACnB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B,SAUA,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/mongodb-store",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.3",
|
|
4
4
|
"description": "MongoDB Store implementation for FuryStack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://github.com/furystack/furystack",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@furystack/core": "^14.0.
|
|
41
|
-
"@furystack/inject": "^11.0.
|
|
42
|
-
"@furystack/utils": "^
|
|
43
|
-
"mongodb": "6.
|
|
40
|
+
"@furystack/core": "^14.0.3",
|
|
41
|
+
"@furystack/inject": "^11.0.2",
|
|
42
|
+
"@furystack/utils": "^7.0.1",
|
|
43
|
+
"mongodb": "6.6.1",
|
|
44
44
|
"semaphore-async-await": "^1.5.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@types/node": "^20.11
|
|
48
|
-
"typescript": "^5.4.
|
|
49
|
-
"vitest": "^1.
|
|
47
|
+
"@types/node": "^20.12.11",
|
|
48
|
+
"typescript": "^5.4.5",
|
|
49
|
+
"vitest": "^1.6.0"
|
|
50
50
|
},
|
|
51
51
|
"gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
|
|
52
52
|
}
|
package/src/mongodb-store.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type {
|
|
|
7
7
|
CreateResult,
|
|
8
8
|
} from '@furystack/core'
|
|
9
9
|
import type { Constructable } from '@furystack/inject'
|
|
10
|
+
import { EventHub } from '@furystack/utils'
|
|
10
11
|
import type { MongoClient, Filter, Collection, Sort, OptionalUnlessRequiredId, UpdateFilter } from 'mongodb'
|
|
11
12
|
import { ObjectId } from 'mongodb'
|
|
12
13
|
import { Lock } from 'semaphore-async-await'
|
|
@@ -15,10 +16,16 @@ import { Lock } from 'semaphore-async-await'
|
|
|
15
16
|
* TypeORM Store implementation for FuryStack
|
|
16
17
|
*/
|
|
17
18
|
export class MongodbStore<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
>
|
|
19
|
+
T extends object,
|
|
20
|
+
TPrimaryKey extends keyof T,
|
|
21
|
+
TWriteableData = WithOptionalId<T, TPrimaryKey>,
|
|
22
|
+
>
|
|
23
|
+
extends EventHub<{
|
|
24
|
+
onEntityAdded: { entity: T }
|
|
25
|
+
onEntityUpdated: { id: T[TPrimaryKey]; change: Partial<T> }
|
|
26
|
+
onEntityRemoved: { key: T[TPrimaryKey] }
|
|
27
|
+
}>
|
|
28
|
+
implements PhysicalStore<T, TPrimaryKey, TWriteableData>
|
|
22
29
|
{
|
|
23
30
|
public readonly primaryKey: TPrimaryKey
|
|
24
31
|
|
|
@@ -103,31 +110,39 @@ export class MongodbStore<
|
|
|
103
110
|
mongoClient: () => Promise<MongoClient>
|
|
104
111
|
},
|
|
105
112
|
) {
|
|
113
|
+
super()
|
|
106
114
|
this.primaryKey = options.primaryKey
|
|
107
115
|
this.model = options.model
|
|
108
116
|
}
|
|
109
117
|
public async add(...entries: TWriteableData[]): Promise<CreateResult<T>> {
|
|
110
118
|
const collection = await this.getCollection()
|
|
111
119
|
const result = await collection.insertMany(entries.map((e) => ({ ...e }) as any as OptionalUnlessRequiredId<T>))
|
|
120
|
+
|
|
121
|
+
const created =
|
|
122
|
+
this.primaryKey === '_id'
|
|
123
|
+
? Object.values(result.insertedIds).map((insertedId, index) =>
|
|
124
|
+
this.stringifyResultId({ _id: insertedId, ...entries[index] }),
|
|
125
|
+
)
|
|
126
|
+
: (Object.values(result.insertedIds).map((insertedId, index) => {
|
|
127
|
+
const entity = { _id: insertedId, ...entries[index] }
|
|
128
|
+
const { _id, ...r } = entity
|
|
129
|
+
return r
|
|
130
|
+
}) as any as T[])
|
|
131
|
+
|
|
132
|
+
created.forEach((entity) => this.emit('onEntityAdded', { entity }))
|
|
133
|
+
|
|
112
134
|
return {
|
|
113
|
-
created
|
|
114
|
-
this.primaryKey === '_id'
|
|
115
|
-
? Object.values(result.insertedIds).map((insertedId, index) =>
|
|
116
|
-
this.stringifyResultId({ _id: insertedId, ...entries[index] }),
|
|
117
|
-
)
|
|
118
|
-
: (Object.values(result.insertedIds).map((insertedId, index) => {
|
|
119
|
-
const entity = { _id: insertedId, ...entries[index] }
|
|
120
|
-
const { _id, ...r } = entity
|
|
121
|
-
return r
|
|
122
|
-
}) as any as T[]),
|
|
135
|
+
created,
|
|
123
136
|
}
|
|
124
137
|
}
|
|
125
138
|
public async update(id: T[TPrimaryKey], data: Partial<T>): Promise<void> {
|
|
126
139
|
const collection = await this.getCollection()
|
|
127
140
|
const updateResult = await collection.updateOne(this.createIdFilter(id), { $set: data } as UpdateFilter<T>)
|
|
141
|
+
|
|
128
142
|
if (updateResult.matchedCount < 1) {
|
|
129
143
|
throw Error(`Entity not found with id '${id}', cannot update!`)
|
|
130
144
|
}
|
|
145
|
+
this.emit('onEntityUpdated', { id, change: data })
|
|
131
146
|
}
|
|
132
147
|
public async count(filter?: FilterType<T>): Promise<number> {
|
|
133
148
|
const collection = await this.getCollection()
|
|
@@ -175,6 +190,7 @@ export class MongodbStore<
|
|
|
175
190
|
public async remove(...keys: Array<T[TPrimaryKey]>): Promise<void> {
|
|
176
191
|
const collection = await this.getCollection()
|
|
177
192
|
await collection.deleteMany(this.createIdFilter(...keys))
|
|
193
|
+
keys.forEach((key) => this.emit('onEntityRemoved', { key }))
|
|
178
194
|
}
|
|
179
195
|
public async dispose() {
|
|
180
196
|
/** */
|