@furystack/repository 7.0.0 → 7.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-set-setting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-set-setting.js","sourceRoot":"","sources":["../src/data-set-setting.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import type { Injector } from '@furystack/inject';
2
2
  import type { FindOptions, PartialResult, FilterType, WithOptionalId, CreateResult } from '@furystack/core';
3
- import type { DataSetSettings } from './data-set-setting';
3
+ import type { DataSetSettings } from './data-set-setting.js';
4
4
  import type { Disposable } from '@furystack/utils';
5
5
  import { ObservableValue } from '@furystack/utils';
6
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"data-set.d.ts","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,qBAAa,OAAO,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CACjG,YAAW,UAAU;aA+KO,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;IA7K7E,OAAO;IAMd;;OAEG;IACI,UAAU,EAAE,WAAW,CAAyC;IAEvE;;;;;OAKG;IACU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAuB5F;;OAEG;IACH,SAAgB,aAAa;kBAAmC,QAAQ;gBAAU,CAAC;OAAK;IAExF;;;;;OAKG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9F;;OAEG;IACH,SAAgB,eAAe;kBAAmC,QAAQ;YAAM,CAAC,CAAC,MAAM,CAAC,CAAC;gBAAU,QAAQ,CAAC,CAAC;OAAK;IAEnH;;;;;OAKG;IACU,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/E;;;;;OAKG;IACU,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC9C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAW5C;;;;;;OAMG;IACU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAiBjF;;;;;OAKG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3E;;OAEG;IACH,SAAgB,eAAe;kBACnB,QAAQ;aACb,CAAC,CAAC,WAAW,CAAC;OACjB;gBAEwB,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;CACrF"}
1
+ {"version":3,"file":"data-set.d.ts","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,qBAAa,OAAO,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CACjG,YAAW,UAAU;aA+KO,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;IA7K7E,OAAO;IAMd;;OAEG;IACI,UAAU,EAAE,WAAW,CAAyC;IAEvE;;;;;OAKG;IACU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAuB5F;;OAEG;IACH,SAAgB,aAAa;kBAAmC,QAAQ;gBAAU,CAAC;OAAK;IAExF;;;;;OAKG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9F;;OAEG;IACH,SAAgB,eAAe;kBAAmC,QAAQ;YAAM,CAAC,CAAC,MAAM,CAAC,CAAC;gBAAU,QAAQ,CAAC,CAAC;OAAK;IAEnH;;;;;OAKG;IACU,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAU/E;;;;;OAKG;IACU,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC9C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAW5C;;;;;;OAMG;IACU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAiBjF;;;;;OAKG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB3E;;OAEG;IACH,SAAgB,eAAe;kBACnB,QAAQ;aACb,CAAC,CAAC,WAAW,CAAC;OACjB;gBAEwB,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC;CACrF"}
@@ -0,0 +1,161 @@
1
+ import { AuthorizationError } from '@furystack/core';
2
+ import { ObservableValue } from '@furystack/utils';
3
+ /**
4
+ * An authorized Repository Store instance
5
+ */
6
+ export class DataSet {
7
+ dispose() {
8
+ this.onEntityAdded.dispose();
9
+ this.onEntityRemoved.dispose();
10
+ this.onEntityUpdated.dispose();
11
+ }
12
+ /**
13
+ * Adds an entity to the DataSet
14
+ * @param injector The injector from the context
15
+ * @param entities The entities to add
16
+ * @returns The CreateResult with the created entities
17
+ */
18
+ async add(injector, ...entities) {
19
+ await Promise.all(entities.map(async (entity) => {
20
+ if (this.settings.authorizeAdd) {
21
+ const result = await this.settings.authorizeAdd({ injector, entity });
22
+ if (!result.isAllowed) {
23
+ throw new AuthorizationError(result.message);
24
+ }
25
+ }
26
+ }));
27
+ const parsed = await Promise.all(entities.map(async (entity) => {
28
+ return this.settings.modifyOnAdd ? await this.settings.modifyOnAdd({ injector, entity }) : entity;
29
+ }));
30
+ const createResult = await this.settings.physicalStore.add(...parsed);
31
+ createResult.created.map((entity) => this.onEntityAdded.setValue({ injector, entity }));
32
+ return createResult;
33
+ }
34
+ /**
35
+ * Updates an entity in the store
36
+ * @param injector The injector from the context
37
+ * @param id The identifier of the entity
38
+ * @param change The update
39
+ */
40
+ async update(injector, id, change) {
41
+ if (this.settings.authorizeUpdate) {
42
+ const result = await this.settings.authorizeUpdate({ injector, change });
43
+ if (!result.isAllowed) {
44
+ throw new AuthorizationError(result.message);
45
+ }
46
+ }
47
+ if (this.settings.authorizeUpdateEntity) {
48
+ const entity = await this.settings.physicalStore.get(id);
49
+ if (entity) {
50
+ const result = await this.settings.authorizeUpdateEntity({ injector, change, entity });
51
+ if (!result.isAllowed) {
52
+ throw new AuthorizationError(result.message);
53
+ }
54
+ }
55
+ }
56
+ const parsed = this.settings.modifyOnUpdate
57
+ ? await this.settings.modifyOnUpdate({ injector, id, entity: change })
58
+ : change;
59
+ await this.settings.physicalStore.update(id, parsed);
60
+ this.onEntityUpdated.setValue({ injector, change: parsed, id });
61
+ }
62
+ /**
63
+ * Returns a Promise with the entity count
64
+ * @param injector The Injector from the context
65
+ * @param filter The Filter that will be applied
66
+ * @returns the Count
67
+ */
68
+ async count(injector, filter) {
69
+ if (this.settings.authorizeGet) {
70
+ const result = await this.settings.authorizeGet({ injector });
71
+ if (!result.isAllowed) {
72
+ throw new AuthorizationError(result.message);
73
+ }
74
+ }
75
+ return await this.settings.physicalStore.count(filter);
76
+ }
77
+ /**
78
+ * Returns a filtered subset of the entity
79
+ * @param injector The Injector from the context
80
+ * @param filter The Filter definition
81
+ * @returns A result with the current items
82
+ */
83
+ async find(injector, filter) {
84
+ if (this.settings.authorizeGet) {
85
+ const result = await this.settings.authorizeGet({ injector });
86
+ if (!result.isAllowed) {
87
+ throw new AuthorizationError(result.message);
88
+ }
89
+ }
90
+ const parsedFilter = this.settings.addFilter ? await this.settings.addFilter({ injector, filter }) : filter;
91
+ return this.settings.physicalStore.find(parsedFilter);
92
+ }
93
+ /**
94
+ * Returns an entity based on its primary key
95
+ * @param injector The injector from the context
96
+ * @param key The identifier of the entity
97
+ * @param select A field list used for projection
98
+ * @returns An item with the current unique key or Undefined
99
+ */
100
+ async get(injector, key, select) {
101
+ if (this.settings.authorizeGet) {
102
+ const result = await this.settings.authorizeGet({ injector });
103
+ if (!result.isAllowed) {
104
+ throw new AuthorizationError(result.message);
105
+ }
106
+ }
107
+ const instance = await this.settings.physicalStore.get(key, select);
108
+ if (instance && this.settings && this.settings.authorizeGetEntity) {
109
+ const result = await this.settings.authorizeGetEntity({ injector, entity: instance });
110
+ if (!result.isAllowed) {
111
+ throw new AuthorizationError(result.message);
112
+ }
113
+ }
114
+ return instance;
115
+ }
116
+ /**
117
+ * Removes an entity based on its primary key
118
+ * @param injector The Injector from the context
119
+ * @param key The primary key
120
+ * @returns A promise that will be resolved / rejected based on the remove success
121
+ */
122
+ async remove(injector, key) {
123
+ if (this.settings.authorizeRemove) {
124
+ const result = await this.settings.authorizeRemove({ injector });
125
+ if (!result.isAllowed) {
126
+ throw new AuthorizationError(result.message);
127
+ }
128
+ }
129
+ if (this.settings.authroizeRemoveEntity) {
130
+ const entity = await this.settings.physicalStore.get(key);
131
+ if (entity) {
132
+ const removeResult = await this.settings.authroizeRemoveEntity({ injector, entity });
133
+ if (!removeResult.isAllowed) {
134
+ throw new AuthorizationError(removeResult.message);
135
+ }
136
+ }
137
+ }
138
+ await this.settings.physicalStore.remove(key);
139
+ this.onEntityRemoved.setValue({ injector, key });
140
+ }
141
+ constructor(settings) {
142
+ this.settings = settings;
143
+ /**
144
+ * Primary key of the contained entity
145
+ */
146
+ this.primaryKey = this.settings.physicalStore.primaryKey;
147
+ /**
148
+ * Observable that will be updated after the entity has been persisted
149
+ */
150
+ this.onEntityAdded = new ObservableValue();
151
+ /**
152
+ * Observable that will be updated right after an entity update
153
+ */
154
+ this.onEntityUpdated = new ObservableValue();
155
+ /**
156
+ * Callback that fires right after entity update
157
+ */
158
+ this.onEntityRemoved = new ObservableValue();
159
+ }
160
+ }
161
+ //# sourceMappingURL=data-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-set.js","sourceRoot":"","sources":["../src/data-set.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Constructable } from '@furystack/inject';
2
2
  import type { Injector } from '@furystack/inject';
3
- import { Repository } from './repository';
3
+ import { Repository } from './repository.js';
4
4
  /**
5
5
  * Returns a Repository on an injector
6
6
  * @param injector The Injector instance
@@ -14,5 +14,5 @@ export declare const getRepository: (injector: Injector) => Repository;
14
14
  * @param primaryKey The Primary Key field
15
15
  * @returns A Repository DataSet for a specific model
16
16
  */
17
- export declare const getDataSetFor: <T, TPrimaryKey extends keyof T>(injector: Injector, model: Constructable<T>, primaryKey: TPrimaryKey) => import("./data-set").DataSet<T, TPrimaryKey, import("../../core/types").WithOptionalId<T, TPrimaryKey>>;
17
+ export declare const getDataSetFor: <T, TPrimaryKey extends keyof T>(injector: Injector, model: Constructable<T>, primaryKey: TPrimaryKey) => import("./data-set.js").DataSet<T, TPrimaryKey, import("../../core/esm/index.js").WithOptionalId<T, TPrimaryKey>>;
18
18
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC;;;;GAIG;AACH,eAAO,MAAM,aAAa,aAAc,QAAQ,eAAqC,CAAA;AAErF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,6CACd,QAAQ,8JAGkD,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,aAAa,aAAc,QAAQ,eAAqC,CAAA;AAErF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,6CACd,QAAQ,wKAGkD,CAAA"}
package/esm/helpers.js ADDED
@@ -0,0 +1,16 @@
1
+ import { Repository } from './repository.js';
2
+ /**
3
+ * Returns a Repository on an injector
4
+ * @param injector The Injector instance
5
+ * @returns The Repository instance
6
+ */
7
+ export const getRepository = (injector) => injector.getInstance(Repository);
8
+ /**
9
+ *
10
+ * @param injector The Injector instance
11
+ * @param model The Model
12
+ * @param primaryKey The Primary Key field
13
+ * @returns A Repository DataSet for a specific model
14
+ */
15
+ export const getDataSetFor = (injector, model, primaryKey) => injector.getInstance(Repository).getDataSetFor(model, primaryKey);
16
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;AAErF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAkB,EAClB,KAAuB,EACvB,UAAuB,EACvB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA"}
package/esm/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './repository.js';
2
+ export * from './data-set.js';
3
+ export * from './data-set-setting.js';
4
+ export * from './helpers.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA"}
package/esm/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './repository.js';
2
+ export * from './data-set.js';
3
+ export * from './data-set-setting.js';
4
+ export * from './helpers.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import type { WithOptionalId } from '@furystack/core';
2
2
  import type { Constructable } from '@furystack/inject';
3
3
  import type { Disposable } from '@furystack/utils';
4
- import type { DataSetSettings } from './data-set-setting';
5
- import { DataSet } from './data-set';
4
+ import type { DataSetSettings } from './data-set-setting.js';
5
+ import { DataSet } from './data-set.js';
6
6
  /**
7
7
  * Collection of authorized physical stores
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC;;GAEG;AACH,qBACa,UAAW,YAAW,UAAU;IACpC,OAAO;IAKd,OAAO,CAAC,QAAQ,CAAyC;IAElD,aAAa,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EACjG,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,UAAU,EAAE,WAAW;IAWlB,aAAa,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EACjD,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,UAAU,EAAE,WAAW,EACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAYrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;CAC7C"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;GAEG;AACH,qBACa,UAAW,YAAW,UAAU;IACpC,OAAO;IAKd,OAAO,CAAC,QAAQ,CAAyC;IAElD,aAAa,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EACjG,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,UAAU,EAAE,WAAW;IAWlB,aAAa,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EACjD,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,UAAU,EAAE,WAAW,EACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAYrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;CAC7C"}
@@ -0,0 +1,52 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { StoreManager } from '@furystack/core';
11
+ import { Injectable, Injected } from '@furystack/inject';
12
+ import { DataSet } from './data-set.js';
13
+ /**
14
+ * Collection of authorized physical stores
15
+ */
16
+ let Repository = class Repository {
17
+ constructor() {
18
+ this.dataSets = new Map();
19
+ }
20
+ dispose() {
21
+ this.dataSets.forEach((ds) => ds.dispose());
22
+ this.dataSets.clear();
23
+ }
24
+ getDataSetFor(model, primaryKey) {
25
+ const instance = this.dataSets.get(model);
26
+ if (!instance) {
27
+ throw Error(`No DataSet found for '${model}'`);
28
+ }
29
+ if (instance.primaryKey !== primaryKey) {
30
+ throw Error('Primary key mismatch');
31
+ }
32
+ return instance;
33
+ }
34
+ createDataSet(model, primaryKey, settings) {
35
+ const physicalStore = (settings && settings.physicalStore) || this.storeManager.getStoreFor(model, primaryKey);
36
+ const instance = new DataSet({
37
+ ...settings,
38
+ physicalStore,
39
+ });
40
+ this.dataSets.set(model, instance);
41
+ return this;
42
+ }
43
+ };
44
+ __decorate([
45
+ Injected(StoreManager),
46
+ __metadata("design:type", StoreManager)
47
+ ], Repository.prototype, "storeManager", void 0);
48
+ Repository = __decorate([
49
+ Injectable({ lifetime: 'singleton' })
50
+ ], Repository);
51
+ export { Repository };
52
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGxD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;;GAEG;AAEH,IAAa,UAAU,GAAvB,MAAa,UAAU;IAAvB;QAMU,aAAQ,GAAgC,IAAI,GAAG,EAAE,CAAA;IA+B3D,CAAC;IApCQ,OAAO;QACZ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAIM,aAAa,CAClB,KAAuB,EACvB,UAAuB;QAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACzC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,KAAK,CAAC,yBAAyB,KAAK,GAAG,CAAC,CAAA;SAC/C;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;YACtC,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;SACpC;QACD,OAAO,QAA6D,CAAA;IACtE,CAAC;IACM,aAAa,CAClB,KAAuB,EACvB,UAAuB,EACvB,QAAmD;QAEnD,MAAM,aAAa,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QAC9G,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC;YAC3B,GAAG,QAAQ;YACX,aAAa;SACd,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;CAIF,CAAA;AADkB;IADhB,QAAQ,CAAC,YAAY,CAAC;8BACS,YAAY;gDAAA;AApCjC,UAAU;IADtB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,UAAU,CAqCtB;SArCY,UAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/repository",
3
- "version": "7.0.0",
3
+ "version": "7.0.2",
4
4
  "description": "Repository implementation for FuryStack",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -8,20 +8,11 @@
8
8
  },
9
9
  "exports": {
10
10
  ".": {
11
- "import": "./esm/index.js",
12
- "types": "./types/index.d.ts"
13
- },
14
- "./package.json": "./package.json"
15
- },
16
- "typesVersions": {
17
- "*": {
18
- "*": [
19
- "types/*"
20
- ]
11
+ "import": "./esm/index.js"
21
12
  }
22
13
  },
23
14
  "files": [
24
- "dist",
15
+ "esm",
25
16
  "types",
26
17
  "src"
27
18
  ],
@@ -46,9 +37,9 @@
46
37
  },
47
38
  "homepage": "https://github.com/furystack/furystack",
48
39
  "dependencies": {
49
- "@furystack/core": "^12.0.0",
50
- "@furystack/inject": "^8.0.0",
51
- "@furystack/utils": "^4.0.0"
40
+ "@furystack/core": "^12.0.2",
41
+ "@furystack/inject": "^8.0.2",
42
+ "@furystack/utils": "^4.0.2"
52
43
  },
53
44
  "devDependencies": {
54
45
  "typescript": "^5.0.4",
package/src/data-set.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Injector } from '@furystack/inject'
2
2
  import type { FindOptions, PartialResult, FilterType, WithOptionalId, CreateResult } from '@furystack/core'
3
3
  import { AuthorizationError } from '@furystack/core'
4
- import type { DataSetSettings } from './data-set-setting'
4
+ import type { DataSetSettings } from './data-set-setting.js'
5
5
  import type { Disposable } from '@furystack/utils'
6
6
  import { ObservableValue } from '@furystack/utils'
7
7
 
package/src/helpers.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Constructable } from '@furystack/inject'
2
2
  import type { Injector } from '@furystack/inject'
3
- import { Repository } from './repository'
3
+ import { Repository } from './repository.js'
4
4
 
5
5
  /**
6
6
  * Returns a Repository on an injector
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from './repository'
2
- export * from './data-set'
3
- export * from './data-set-setting'
4
- export * from './helpers'
1
+ export * from './repository.js'
2
+ export * from './data-set.js'
3
+ export * from './data-set-setting.js'
4
+ export * from './helpers.js'
package/src/repository.ts CHANGED
@@ -3,8 +3,8 @@ import { StoreManager } from '@furystack/core'
3
3
  import type { Constructable } from '@furystack/inject'
4
4
  import { Injectable, Injected } from '@furystack/inject'
5
5
  import type { Disposable } from '@furystack/utils'
6
- import type { DataSetSettings } from './data-set-setting'
7
- import { DataSet } from './data-set'
6
+ import type { DataSetSettings } from './data-set-setting.js'
7
+ import { DataSet } from './data-set.js'
8
8
 
9
9
  /**
10
10
  * Collection of authorized physical stores
package/types/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from './repository';
2
- export * from './data-set';
3
- export * from './data-set-setting';
4
- export * from './helpers';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA"}
File without changes
File without changes