@furystack/sequelize-store 5.0.1 → 5.0.2
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/sequelize-store.d.ts +13 -1
- package/esm/sequelize-store.d.ts.map +1 -1
- package/esm/sequelize-store.js +10 -4
- package/esm/sequelize-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/sequelize-store.ts +22 -8
package/esm/sequelize-store.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { FindOptions, PhysicalStore, PartialResult, FilterType, WithOptionalId, CreateResult } from '@furystack/core';
|
|
2
2
|
import type { Constructable } from '@furystack/inject';
|
|
3
3
|
import type { Sequelize, ModelStatic, Model } from 'sequelize';
|
|
4
|
+
import { EventHub } from '@furystack/utils';
|
|
4
5
|
export interface SequelizeStoreSettings<T extends object, M extends Model<T>, TPrimaryKey extends keyof T> {
|
|
5
6
|
/**
|
|
6
7
|
* The Model to use
|
|
@@ -26,7 +27,18 @@ export interface SequelizeStoreSettings<T extends object, M extends Model<T>, TP
|
|
|
26
27
|
/**
|
|
27
28
|
* TypeORM Store implementation for FuryStack
|
|
28
29
|
*/
|
|
29
|
-
export declare class SequelizeStore<T extends object, M extends Model<T>, TPrimaryKey extends keyof T, TWriteableData = WithOptionalId<T, TPrimaryKey>>
|
|
30
|
+
export declare class SequelizeStore<T extends object, M extends Model<T>, TPrimaryKey extends keyof T, TWriteableData = WithOptionalId<T, TPrimaryKey>> extends EventHub<{
|
|
31
|
+
onEntityAdded: {
|
|
32
|
+
entity: T;
|
|
33
|
+
};
|
|
34
|
+
onEntityUpdated: {
|
|
35
|
+
id: T[TPrimaryKey];
|
|
36
|
+
change: Partial<T>;
|
|
37
|
+
};
|
|
38
|
+
onEntityRemoved: {
|
|
39
|
+
key: T[TPrimaryKey];
|
|
40
|
+
};
|
|
41
|
+
}> implements PhysicalStore<T, TPrimaryKey, TWriteableData> {
|
|
30
42
|
private readonly options;
|
|
31
43
|
readonly primaryKey: TPrimaryKey;
|
|
32
44
|
readonly model: Constructable<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequelize-store.d.ts","sourceRoot":"","sources":["../src/sequelize-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,SAAS,EAAE,WAAW,EAAE,KAAK,EAA4B,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"sequelize-store.d.ts","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"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"}
|
package/esm/sequelize-store.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Lock } from 'semaphore-async-await';
|
|
2
|
+
import { EventHub } from '@furystack/utils';
|
|
2
3
|
/**
|
|
3
4
|
* TypeORM Store implementation for FuryStack
|
|
4
5
|
*/
|
|
5
|
-
export class SequelizeStore {
|
|
6
|
+
export class SequelizeStore extends EventHub {
|
|
6
7
|
options;
|
|
7
8
|
primaryKey;
|
|
8
9
|
model;
|
|
@@ -32,6 +33,7 @@ export class SequelizeStore {
|
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
constructor(options) {
|
|
36
|
+
super();
|
|
35
37
|
this.options = options;
|
|
36
38
|
this.primaryKey = options.primaryKey;
|
|
37
39
|
this.model = options.model;
|
|
@@ -39,9 +41,11 @@ export class SequelizeStore {
|
|
|
39
41
|
}
|
|
40
42
|
async add(...entries) {
|
|
41
43
|
const model = await this.getModel();
|
|
42
|
-
const
|
|
44
|
+
const createdModels = await model.bulkCreate(entries);
|
|
45
|
+
const created = createdModels.map((c) => c.toJSON());
|
|
46
|
+
created.forEach((entity) => this.emit('onEntityAdded', { entity }));
|
|
43
47
|
return {
|
|
44
|
-
created
|
|
48
|
+
created,
|
|
45
49
|
};
|
|
46
50
|
}
|
|
47
51
|
async update(id, data) {
|
|
@@ -50,6 +54,7 @@ export class SequelizeStore {
|
|
|
50
54
|
if (result[0] < 1) {
|
|
51
55
|
throw Error('Entity not found');
|
|
52
56
|
}
|
|
57
|
+
this.emit('onEntityUpdated', { id, change: data });
|
|
53
58
|
}
|
|
54
59
|
async count(filter) {
|
|
55
60
|
const model = await this.getModel();
|
|
@@ -81,9 +86,10 @@ export class SequelizeStore {
|
|
|
81
86
|
async remove(...keys) {
|
|
82
87
|
const model = await this.getModel();
|
|
83
88
|
await model.destroy({ where: { [this.primaryKey]: keys } });
|
|
89
|
+
keys.forEach((key) => this.emit('onEntityRemoved', { key }));
|
|
84
90
|
}
|
|
85
91
|
async dispose() {
|
|
86
|
-
|
|
92
|
+
await super.dispose();
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
//# sourceMappingURL=sequelize-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequelize-store.js","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"sequelize-store.js","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,6 @@ export declare const useSequelize: <T extends object, M extends ModelStatic<Mode
|
|
|
21
21
|
/**
|
|
22
22
|
* A callback for model initialization
|
|
23
23
|
*/
|
|
24
|
-
initModel?: (
|
|
24
|
+
initModel?: (sequelize: Sequelize) => Promise<void>;
|
|
25
25
|
}) => void;
|
|
26
26
|
//# 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,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAIvE,eAAO,MAAM,YAAY;
|
|
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,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAIvE,eAAO,MAAM,YAAY,oJAOtB;IACD,QAAQ,EAAE,QAAQ,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;IAEvB;;OAEG;IACH,cAAc,EAAE,CAAC,CAAA;IAEjB;;OAEG;IACH,UAAU,EAAE,GAAG,CAAA;IACf;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IAEH,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAA;CACpD,SAUA,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/sequelize-store",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.2",
|
|
4
4
|
"description": "Sequelize-based Store implementation for FuryStack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -35,17 +35,17 @@
|
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://github.com/furystack/furystack",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@furystack/core": "^14.0.
|
|
39
|
-
"@furystack/inject": "^11.0.
|
|
40
|
-
"@furystack/utils": "^
|
|
38
|
+
"@furystack/core": "^14.0.2",
|
|
39
|
+
"@furystack/inject": "^11.0.1",
|
|
40
|
+
"@furystack/utils": "^7.0.0",
|
|
41
41
|
"semaphore-async-await": "^1.5.1",
|
|
42
|
-
"sequelize": "^6.37.
|
|
42
|
+
"sequelize": "^6.37.3"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^20.
|
|
45
|
+
"@types/node": "^20.12.7",
|
|
46
46
|
"sqlite3": "5.1.7",
|
|
47
|
-
"typescript": "^5.4.
|
|
48
|
-
"vitest": "^1.
|
|
47
|
+
"typescript": "^5.4.5",
|
|
48
|
+
"vitest": "^1.5.0"
|
|
49
49
|
},
|
|
50
50
|
"typings": "./types/index.d.ts"
|
|
51
51
|
}
|
package/src/sequelize-store.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
import type { Constructable } from '@furystack/inject'
|
|
10
10
|
import type { Sequelize, ModelStatic, Model, WhereOptions, Attributes } from 'sequelize'
|
|
11
11
|
import { Lock } from 'semaphore-async-await'
|
|
12
|
+
import { EventHub } from '@furystack/utils'
|
|
12
13
|
|
|
13
14
|
export interface SequelizeStoreSettings<T extends object, M extends Model<T>, TPrimaryKey extends keyof T> {
|
|
14
15
|
/**
|
|
@@ -38,11 +39,17 @@ export interface SequelizeStoreSettings<T extends object, M extends Model<T>, TP
|
|
|
38
39
|
* TypeORM Store implementation for FuryStack
|
|
39
40
|
*/
|
|
40
41
|
export class SequelizeStore<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
>
|
|
42
|
+
T extends object,
|
|
43
|
+
M extends Model<T>,
|
|
44
|
+
TPrimaryKey extends keyof T,
|
|
45
|
+
TWriteableData = WithOptionalId<T, TPrimaryKey>,
|
|
46
|
+
>
|
|
47
|
+
extends EventHub<{
|
|
48
|
+
onEntityAdded: { entity: T }
|
|
49
|
+
onEntityUpdated: { id: T[TPrimaryKey]; change: Partial<T> }
|
|
50
|
+
onEntityRemoved: { key: T[TPrimaryKey] }
|
|
51
|
+
}>
|
|
52
|
+
implements PhysicalStore<T, TPrimaryKey, TWriteableData>
|
|
46
53
|
{
|
|
47
54
|
public readonly primaryKey: TPrimaryKey
|
|
48
55
|
|
|
@@ -80,15 +87,20 @@ export class SequelizeStore<
|
|
|
80
87
|
}
|
|
81
88
|
|
|
82
89
|
constructor(private readonly options: SequelizeStoreSettings<T, M, TPrimaryKey>) {
|
|
90
|
+
super()
|
|
83
91
|
this.primaryKey = options.primaryKey
|
|
84
92
|
this.model = options.model
|
|
85
93
|
this.sequelizeModel = options.sequelizeModel
|
|
86
94
|
}
|
|
87
95
|
public async add(...entries: TWriteableData[]): Promise<CreateResult<T>> {
|
|
88
96
|
const model = await this.getModel()
|
|
89
|
-
const
|
|
97
|
+
const createdModels = await model.bulkCreate(entries as any)
|
|
98
|
+
|
|
99
|
+
const created = createdModels.map((c) => c.toJSON() as T)
|
|
100
|
+
|
|
101
|
+
created.forEach((entity) => this.emit('onEntityAdded', { entity }))
|
|
90
102
|
return {
|
|
91
|
-
created
|
|
103
|
+
created,
|
|
92
104
|
}
|
|
93
105
|
}
|
|
94
106
|
public async update(id: T[TPrimaryKey], data: Partial<T>): Promise<void> {
|
|
@@ -98,6 +110,7 @@ export class SequelizeStore<
|
|
|
98
110
|
if (result[0] < 1) {
|
|
99
111
|
throw Error('Entity not found')
|
|
100
112
|
}
|
|
113
|
+
this.emit('onEntityUpdated', { id, change: data })
|
|
101
114
|
}
|
|
102
115
|
public async count(filter?: FilterType<T>): Promise<number> {
|
|
103
116
|
const model = await this.getModel()
|
|
@@ -134,8 +147,9 @@ export class SequelizeStore<
|
|
|
134
147
|
public async remove(...keys: Array<T[TPrimaryKey]>): Promise<void> {
|
|
135
148
|
const model = await this.getModel()
|
|
136
149
|
await model.destroy({ where: { [this.primaryKey]: keys } } as any)
|
|
150
|
+
keys.forEach((key) => this.emit('onEntityRemoved', { key }))
|
|
137
151
|
}
|
|
138
152
|
public async dispose() {
|
|
139
|
-
|
|
153
|
+
await super.dispose()
|
|
140
154
|
}
|
|
141
155
|
}
|