@furystack/core 11.3.0 → 12.0.0

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.
Files changed (63) hide show
  1. package/README.md +1 -1
  2. package/package.json +28 -8
  3. package/src/create-physical-store-tests.ts +1 -0
  4. package/src/global-disposable.spec.ts +2 -1
  5. package/src/helpers.ts +1 -2
  6. package/src/identity-context.spec.ts +4 -3
  7. package/src/in-memory-store.spec.ts +1 -0
  8. package/src/in-memory-store.ts +0 -1
  9. package/src/index.ts +0 -1
  10. package/src/models/physical-store.ts +0 -5
  11. package/src/store-manager.spec.ts +1 -0
  12. package/src/store-manager.ts +0 -2
  13. package/types/create-physical-store-tests.d.ts.map +1 -1
  14. package/types/helpers.d.ts +1 -2
  15. package/types/helpers.d.ts.map +1 -1
  16. package/types/in-memory-store.d.ts +0 -1
  17. package/types/in-memory-store.d.ts.map +1 -1
  18. package/types/index.d.ts +0 -1
  19. package/types/index.d.ts.map +1 -1
  20. package/types/models/physical-store.d.ts +0 -5
  21. package/types/models/physical-store.d.ts.map +1 -1
  22. package/types/store-manager.d.ts +0 -2
  23. package/types/store-manager.d.ts.map +1 -1
  24. package/dist/create-physical-store-tests.js +0 -451
  25. package/dist/create-physical-store-tests.js.map +0 -1
  26. package/dist/errors/aggregated-error.js +0 -15
  27. package/dist/errors/aggregated-error.js.map +0 -1
  28. package/dist/errors/authorization-error.js +0 -7
  29. package/dist/errors/authorization-error.js.map +0 -1
  30. package/dist/errors/index.js +0 -19
  31. package/dist/errors/index.js.map +0 -1
  32. package/dist/global-disposable.spec.js +0 -33
  33. package/dist/global-disposable.spec.js.map +0 -1
  34. package/dist/global-disposables.js +0 -29
  35. package/dist/global-disposables.js.map +0 -1
  36. package/dist/helpers.js +0 -48
  37. package/dist/helpers.js.map +0 -1
  38. package/dist/identity-context.js +0 -26
  39. package/dist/identity-context.js.map +0 -1
  40. package/dist/identity-context.spec.js +0 -41
  41. package/dist/identity-context.spec.js.map +0 -1
  42. package/dist/in-memory-store.js +0 -190
  43. package/dist/in-memory-store.js.map +0 -1
  44. package/dist/in-memory-store.spec.js +0 -20
  45. package/dist/in-memory-store.spec.js.map +0 -1
  46. package/dist/index.js +0 -26
  47. package/dist/index.js.map +0 -1
  48. package/dist/models/physical-store.js +0 -36
  49. package/dist/models/physical-store.js.map +0 -1
  50. package/dist/models/user.js +0 -10
  51. package/dist/models/user.js.map +0 -1
  52. package/dist/store-manager.js +0 -64
  53. package/dist/store-manager.js.map +0 -1
  54. package/dist/store-manager.spec.js +0 -64
  55. package/dist/store-manager.spec.js.map +0 -1
  56. package/types/global-disposable.spec.d.ts +0 -2
  57. package/types/global-disposable.spec.d.ts.map +0 -1
  58. package/types/identity-context.spec.d.ts +0 -2
  59. package/types/identity-context.spec.d.ts.map +0 -1
  60. package/types/in-memory-store.spec.d.ts +0 -2
  61. package/types/in-memory-store.spec.d.ts.map +0 -1
  62. package/types/store-manager.spec.d.ts +0 -2
  63. package/types/store-manager.spec.d.ts.map +0 -1
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.exitHandler = exports.globalDisposables = void 0;
4
- /**
5
- * Readonly set that stores references of the disposables that should be disposed on process exit
6
- */
7
- exports.globalDisposables = new Set();
8
- /**
9
- * Will be triggered via process event listeners
10
- */
11
- exports.exitHandler = (async () => {
12
- const result = await Promise.allSettled([...exports.globalDisposables].map((d) => d.dispose()));
13
- const fails = result.filter((r) => r.status === 'rejected');
14
- if (fails && fails.length) {
15
- console.warn(`There was an error during disposing '${fails.length}' global disposable objects`, fails);
16
- }
17
- }).bind(null);
18
- // do something when app is closing
19
- globalThis.process?.on?.('exit', exports.exitHandler);
20
- // catches ctrl+c event
21
- globalThis.process?.on?.('SIGINT', exports.exitHandler);
22
- globalThis.process?.on?.('SIGTERM', () => exports.exitHandler);
23
- // catches "kill pid" (for example: nodemon restart)
24
- globalThis.process?.on?.('SIGUSR1', exports.exitHandler);
25
- globalThis.process?.on?.('SIGUSR2', exports.exitHandler);
26
- // catches uncaught exceptions
27
- globalThis.process?.on?.('uncaughtException', exports.exitHandler);
28
- globalThis.window?.addEventListener('beforeunload', exports.exitHandler);
29
- //# sourceMappingURL=global-disposables.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-disposables.js","sourceRoot":"","sources":["../src/global-disposables.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACU,QAAA,iBAAiB,GAAoB,IAAI,GAAG,EAAE,CAAA;AAE3D;;GAEG;AACU,QAAA,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;IACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,yBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACvF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAA;IAC3D,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,MAAM,6BAA6B,EAAE,KAAK,CAAC,CAAA;KACvG;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb,mCAAmC;AACnC,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,mBAAW,CAAC,CAAA;AAE7C,uBAAuB;AACvB,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,mBAAW,CAAC,CAAA;AAE/C,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,mBAAW,CAAC,CAAA;AAEtD,oDAAoD;AACpD,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,mBAAW,CAAC,CAAA;AAChD,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,mBAAW,CAAC,CAAA;AAEhD,8BAA8B;AAC9B,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,mBAAmB,EAAE,mBAAW,CAAC,CAGzD;AAAC,UAAkB,CAAC,MAAM,EAAE,gBAAgB,CAAC,cAAc,EAAE,mBAAW,CAAC,CAAA"}
package/dist/helpers.js DELETED
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addStore = exports.getStoreManager = exports.getCurrentUser = exports.isAuthorized = exports.isAuthenticated = exports.disposeOnProcessExit = void 0;
4
- const global_disposables_1 = require("./global-disposables");
5
- const identity_context_1 = require("./identity-context");
6
- const store_manager_1 = require("./store-manager");
7
- /**
8
- * The disposable will be disposed on process exit
9
- *
10
- * @param disposable The Disposable object to dispose on process exit
11
- * @returns A set of global disposables
12
- */
13
- const disposeOnProcessExit = (disposable) => global_disposables_1.globalDisposables.add(disposable);
14
- exports.disposeOnProcessExit = disposeOnProcessExit;
15
- /**
16
- * @param injector The Injector instance
17
- * @returns the current authentication status from the identity context
18
- */
19
- const isAuthenticated = async (injector) => injector.getInstance(identity_context_1.IdentityContext).isAuthenticated();
20
- exports.isAuthenticated = isAuthenticated;
21
- /**
22
- * @param injector The Injector instance
23
- * @param {...any} roles A list of roles
24
- * @returns if the current authorization status from the identity context
25
- */
26
- const isAuthorized = async (injector, ...roles) => injector.getInstance(identity_context_1.IdentityContext).isAuthorized(...roles);
27
- exports.isAuthorized = isAuthorized;
28
- /**
29
- * @param injector The Injector instance
30
- * @returns The current user from the identity context
31
- */
32
- const getCurrentUser = async (injector) => injector.getInstance(identity_context_1.IdentityContext).getCurrentUser();
33
- exports.getCurrentUser = getCurrentUser;
34
- /**
35
- * @param injector The Injector instance
36
- * @returns A Store Manager instance to setup stores
37
- */
38
- const getStoreManager = (injector) => injector.getInstance(store_manager_1.StoreManager);
39
- exports.getStoreManager = getStoreManager;
40
- /**
41
- *
42
- * @param injector The Injector instance
43
- * @param store The store to add
44
- * @returns The Store Manager instance for chaining
45
- */
46
- const addStore = (injector, store) => (0, exports.getStoreManager)(injector).addStore(store);
47
- exports.addStore = addStore;
48
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;AACA,6DAAwD;AACxD,yDAAoD;AAEpD,mDAA8C;AAG9C;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAAC,UAAsB,EAAE,EAAE,CAAC,sCAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAApF,QAAA,oBAAoB,wBAAgE;AAEjG;;;GAGG;AACI,MAAM,eAAe,GAAG,KAAK,EAAE,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAC,eAAe,EAAE,CAAA;AAAvG,QAAA,eAAe,mBAAwF;AAEpH;;;;GAIG;AACI,MAAM,YAAY,GAAG,KAAK,EAAE,QAAkB,EAAE,GAAG,KAAe,EAAE,EAAE,CAC3E,QAAQ,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAA;AADjD,QAAA,YAAY,gBACqC;AAE9D;;;GAGG;AACI,MAAM,cAAc,GAAG,KAAK,EAAE,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAC,cAAc,EAAE,CAAA;AAArG,QAAA,cAAc,kBAAuF;AAElH;;;GAGG;AACI,MAAM,eAAe,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAA;AAA5E,QAAA,eAAe,mBAA6D;AAEzF;;;;;GAKG;AACI,MAAM,QAAQ,GAAG,CAAiC,QAAkB,EAAE,KAAoC,EAAE,EAAE,CACnH,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAD9B,QAAA,QAAQ,YACsB"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.IdentityContext = void 0;
10
- const inject_1 = require("@furystack/inject");
11
- let IdentityContext = class IdentityContext {
12
- async isAuthenticated() {
13
- return false;
14
- }
15
- async isAuthorized(..._roles) {
16
- return false;
17
- }
18
- async getCurrentUser() {
19
- throw Error('No IdentityContext');
20
- }
21
- };
22
- IdentityContext = __decorate([
23
- (0, inject_1.Injectable)({ lifetime: 'scoped' })
24
- ], IdentityContext);
25
- exports.IdentityContext = IdentityContext;
26
- //# sourceMappingURL=identity-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-context.js","sourceRoot":"","sources":["../src/identity-context.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAA8C;AAI9C,IAAa,eAAe,GAA5B,MAAa,eAAe;IACnB,KAAK,CAAC,eAAe;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAG,MAAgB;QAC3C,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACnC,CAAC;CACF,CAAA;AAZY,eAAe;IAD3B,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,eAAe,CAY3B;AAZY,0CAAe"}
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const inject_1 = require("@furystack/inject");
4
- const utils_1 = require("@furystack/utils");
5
- const identity_context_1 = require("./identity-context");
6
- const helpers_1 = require("./helpers");
7
- describe('IdentityContext', () => {
8
- it('Should be retrieved from an Injector', () => {
9
- (0, utils_1.using)(new inject_1.Injector(), (i) => {
10
- const ctx = i.getInstance(identity_context_1.IdentityContext);
11
- expect(ctx).toBeInstanceOf(identity_context_1.IdentityContext);
12
- });
13
- });
14
- it('isAuthenticated should be called from helper', async () => {
15
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
16
- const ctx = i.getInstance(identity_context_1.IdentityContext);
17
- const spy = jest.spyOn(ctx, 'isAuthenticated');
18
- const isAuth = await (0, helpers_1.isAuthenticated)(i);
19
- expect(isAuth).toBeFalsy();
20
- expect(spy).toBeCalledTimes(1);
21
- });
22
- });
23
- it('isAuthorized should be called from helper', async () => {
24
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
25
- const ctx = i.getInstance(identity_context_1.IdentityContext);
26
- const spy = jest.spyOn(ctx, 'isAuthorized');
27
- const isAuth = await (0, helpers_1.isAuthorized)(i);
28
- expect(isAuth).toBeFalsy();
29
- expect(spy).toBeCalledTimes(1);
30
- });
31
- });
32
- it('getCurrentUser should be called from helper', async () => {
33
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
34
- const ctx = i.getInstance(identity_context_1.IdentityContext);
35
- const spy = jest.spyOn(ctx, 'getCurrentUser');
36
- await expect((0, helpers_1.getCurrentUser)(i)).rejects.toThrowError('');
37
- expect(spy).toBeCalledTimes(1);
38
- });
39
- });
40
- });
41
- //# sourceMappingURL=identity-context.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-context.spec.js","sourceRoot":"","sources":["../src/identity-context.spec.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,4CAAoD;AACpD,yDAAoD;AACpD,uCAAyE;AAEzE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,IAAA,aAAK,EAAC,IAAI,iBAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAA;YAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,kCAAe,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAA;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAe,EAAC,CAAC,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAA;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;YAC3C,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAY,EAAC,CAAC,CAAC,CAAA;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,kCAAe,CAAC,CAAA;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;YAC7C,MAAM,MAAM,CAAC,IAAA,wBAAc,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,190 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InMemoryStore = void 0;
4
- const physical_store_1 = require("./models/physical-store");
5
- class InMemoryStore {
6
- /**
7
- *
8
- * @param keys The keys to remove from the store
9
- */
10
- async remove(...keys) {
11
- keys.map((key) => this.cache.delete(key));
12
- }
13
- async add(...entries) {
14
- const created = entries.map((e) => {
15
- const entry = { ...e };
16
- if (this.cache.has(entry[this.primaryKey])) {
17
- throw new Error('Item with the primary key already exists.');
18
- }
19
- this.cache.set(entry[this.primaryKey], entry);
20
- return entry;
21
- });
22
- return { created };
23
- }
24
- filterInternal(values, filter) {
25
- if (!filter) {
26
- return values;
27
- }
28
- return values.filter((item) => {
29
- for (const key in filter) {
30
- if ((0, physical_store_1.isLogicalOperator)(key)) {
31
- const filterValue = filter[key];
32
- switch (key) {
33
- case '$and':
34
- if (filterValue.some((v) => !this.filterInternal([item], v).length)) {
35
- return false;
36
- }
37
- break;
38
- case '$or':
39
- if (filterValue.some((v) => this.filterInternal([item], v).length)) {
40
- break;
41
- }
42
- return false;
43
- default:
44
- throw new Error(`The logical operation '${key}' is not a valid operation`);
45
- }
46
- }
47
- else if (typeof filter[key] === 'object') {
48
- for (const filterKey in filter[key]) {
49
- if ((0, physical_store_1.isOperator)(filterKey)) {
50
- const itemValue = item[key];
51
- const filterValue = filter[key][filterKey];
52
- switch (filterKey) {
53
- case '$eq':
54
- if (filterValue !== itemValue) {
55
- return false;
56
- }
57
- break;
58
- case '$ne':
59
- if (filterValue === itemValue) {
60
- return false;
61
- }
62
- break;
63
- case '$in':
64
- if (!filterValue.includes(itemValue)) {
65
- return false;
66
- }
67
- break;
68
- case '$nin':
69
- if (filterValue.includes(itemValue)) {
70
- return false;
71
- }
72
- break;
73
- case '$lt':
74
- if (itemValue < filterValue) {
75
- break;
76
- }
77
- return false;
78
- case '$lte':
79
- if (itemValue <= filterValue) {
80
- break;
81
- }
82
- return false;
83
- case '$gt':
84
- if (itemValue > filterValue) {
85
- break;
86
- }
87
- return false;
88
- case '$gte':
89
- if (itemValue >= filterValue) {
90
- break;
91
- }
92
- return false;
93
- case '$regex':
94
- if (!new RegExp(filterValue).test(itemValue.toString())) {
95
- return false;
96
- }
97
- break;
98
- case '$startsWith':
99
- if (!itemValue.startsWith(filterValue)) {
100
- return false;
101
- }
102
- break;
103
- case '$endsWith':
104
- if (!itemValue.endsWith(filterValue)) {
105
- return false;
106
- }
107
- break;
108
- case '$like':
109
- if (!this.evaluateLike(itemValue, filterValue)) {
110
- return false;
111
- }
112
- break;
113
- default:
114
- throw new Error(`The expression (${filterKey}) is not supported by '${this.constructor.name}'!`);
115
- }
116
- }
117
- else {
118
- throw new Error(`The filter key '${filterKey}' is not a valid operation`);
119
- }
120
- }
121
- }
122
- else {
123
- throw new Error(`The filter has to be an object, got ${typeof filter[key]} for field '${key}'`);
124
- }
125
- }
126
- return true;
127
- });
128
- }
129
- async find(searchOptions) {
130
- let value = this.filterInternal([...this.cache.values()], searchOptions.filter);
131
- if (searchOptions.order) {
132
- for (const fieldName of Object.keys(searchOptions.order)) {
133
- value = value.sort((a, b) => {
134
- const order = searchOptions.order[fieldName];
135
- if (a[fieldName] < b[fieldName])
136
- return order === 'ASC' ? -1 : 1;
137
- if (a[fieldName] > b[fieldName])
138
- return order === 'ASC' ? 1 : -1;
139
- return 0;
140
- });
141
- }
142
- }
143
- if (searchOptions.top || searchOptions.skip) {
144
- value = value.slice(searchOptions.skip, (searchOptions.skip || 0) + (searchOptions.top || this.cache.size));
145
- }
146
- if (searchOptions.select) {
147
- value = value.map((item) => {
148
- return (0, physical_store_1.selectFields)(item, ...searchOptions.select);
149
- });
150
- }
151
- return value;
152
- }
153
- async count(filter) {
154
- return this.filterInternal([...this.cache.values()], filter).length;
155
- }
156
- async update(id, data) {
157
- if (!this.cache.has(id)) {
158
- throw Error(`Entity not found with id '${id}', cannot update!`);
159
- }
160
- this.cache.set(id, {
161
- ...this.cache.get(id),
162
- ...data,
163
- });
164
- }
165
- dispose() {
166
- this.cache.clear();
167
- }
168
- /**
169
- * Creates an InMemoryStore that can be used for testing purposes.
170
- *
171
- * @param options Options for the In Memory Store
172
- * @param options.primaryKey The name of the primary key field
173
- * @param options.model The Entity Model
174
- */
175
- constructor(options) {
176
- this.cache = new Map();
177
- this.get = async (key, select) => {
178
- const item = this.cache.get(key);
179
- return item && select ? (0, physical_store_1.selectFields)(item, ...select) : item;
180
- };
181
- this.evaluateLike = (value, likeString) => {
182
- const likeRegex = `^${likeString.replace(/%/g, '.*')}$`;
183
- return value.match(new RegExp(likeRegex, 'i'));
184
- };
185
- this.primaryKey = options.primaryKey;
186
- this.model = options.model;
187
- }
188
- }
189
- exports.InMemoryStore = InMemoryStore;
190
- //# sourceMappingURL=in-memory-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../src/in-memory-store.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const in_memory_store_1 = require("./in-memory-store");
4
- const create_physical_store_tests_1 = require("./create-physical-store-tests");
5
- describe('InMemoryStore', () => {
6
- const createStore = () => new in_memory_store_1.InMemoryStore({ model: create_physical_store_tests_1.TestClass, primaryKey: 'id' });
7
- (0, create_physical_store_tests_1.createStoreTest)({
8
- createStore,
9
- typeName: 'InMemoryStore',
10
- // skipAdvancedTests: true, // TODO
11
- });
12
- it('dispose should empty the cache', async () => {
13
- const f = createStore();
14
- await f.add((0, create_physical_store_tests_1.createMockEntity)());
15
- f.dispose();
16
- const count = await f.count();
17
- expect(count).toBe(0);
18
- });
19
- });
20
- //# sourceMappingURL=in-memory-store.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"in-memory-store.spec.js","sourceRoot":"","sources":["../src/in-memory-store.spec.ts"],"names":[],"mappings":";;AAAA,uDAAiD;AACjD,+EAA4F;AAE5F,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,+BAAa,CAAC,EAAE,KAAK,EAAE,uCAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnF,IAAA,6CAAe,EAAC;QACd,WAAW;QACX,QAAQ,EAAE,eAAe;QACzB,mCAAmC;KACpC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,CAAC,GAAG,WAAW,EAAE,CAAA;QACvB,MAAM,CAAC,CAAC,GAAG,CAAC,IAAA,8CAAgB,GAAE,CAAC,CAAA;QAC/B,CAAC,CAAC,OAAO,EAAE,CAAA;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/dist/index.js DELETED
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./errors"), exports);
18
- __exportStar(require("./models/physical-store"), exports);
19
- __exportStar(require("./models/user"), exports);
20
- __exportStar(require("./in-memory-store"), exports);
21
- __exportStar(require("./store-manager"), exports);
22
- __exportStar(require("./global-disposables"), exports);
23
- __exportStar(require("./identity-context"), exports);
24
- __exportStar(require("./create-physical-store-tests"), exports);
25
- __exportStar(require("./helpers"), exports);
26
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,0DAAuC;AACvC,gDAA6B;AAC7B,oDAAiC;AACjC,kDAA+B;AAC/B,uDAAoC;AACpC,qDAAkC;AAClC,gEAA6C;AAC7C,4CAAyB"}
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.selectFields = exports.t = exports.isOperator = exports.isLogicalOperator = exports.allOperators = exports.LogicalOperators = exports.ArrayComparisonOperators = exports.SingleComparisonOperators = exports.StringComparisonOperators = exports.NumberComparisonOperators = void 0;
4
- exports.NumberComparisonOperators = ['$gt', '$gte', '$lt', '$lte'];
5
- exports.StringComparisonOperators = ['$startsWith', '$endsWith', '$like', '$regex'];
6
- exports.SingleComparisonOperators = ['$eq', '$ne'];
7
- exports.ArrayComparisonOperators = ['$in', '$nin'];
8
- exports.LogicalOperators = ['$and', '$not', '$nor', '$or'];
9
- exports.allOperators = [
10
- ...exports.SingleComparisonOperators,
11
- ...exports.NumberComparisonOperators,
12
- ...exports.ArrayComparisonOperators,
13
- ...exports.LogicalOperators,
14
- ...exports.StringComparisonOperators,
15
- ];
16
- const isLogicalOperator = (propertyString) => exports.LogicalOperators.includes(propertyString);
17
- exports.isLogicalOperator = isLogicalOperator;
18
- const isOperator = (propertyString) => exports.allOperators.includes(propertyString);
19
- exports.isOperator = isOperator;
20
- exports.t = {
21
- a: { $eq: 3 },
22
- b: { $in: ['a', 'b', 'c'] },
23
- $and: [{ a: { $eq: 2 } }],
24
- };
25
- const selectFields = (entry, ...fields) => {
26
- const returnValue = {};
27
- Object.keys(entry).map((key) => {
28
- const field = key;
29
- if (fields.includes(field)) {
30
- returnValue[field] = entry[field];
31
- }
32
- });
33
- return returnValue;
34
- };
35
- exports.selectFields = selectFields;
36
- //# sourceMappingURL=physical-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"physical-store.js","sourceRoot":"","sources":["../../src/models/physical-store.ts"],"names":[],"mappings":";;;AAGa,QAAA,yBAAyB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAA;AAEnE,QAAA,yBAAyB,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAA;AACpF,QAAA,yBAAyB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAU,CAAA;AAEnD,QAAA,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAA;AACnD,QAAA,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AAE3D,QAAA,YAAY,GAAG;IAC1B,GAAG,iCAAyB;IAC5B,GAAG,iCAAyB;IAC5B,GAAG,gCAAwB;IAC3B,GAAG,wBAAgB;IACnB,GAAG,iCAAyB;CACpB,CAAA;AAUH,MAAM,iBAAiB,GAAG,CAAC,cAAsB,EAAuD,EAAE,CAC/G,wBAAgB,CAAC,QAAQ,CAAC,cAAmD,CAAC,CAAA;AADnE,QAAA,iBAAiB,qBACkD;AAEzE,MAAM,UAAU,GAAG,CAAC,cAAsB,EAAmD,EAAE,CACpG,oBAAY,CAAC,QAAQ,CAAC,cAA+C,CAAC,CAAA;AAD3D,QAAA,UAAU,cACiD;AAE3D,QAAA,CAAC,GAAqD;IACjE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACb,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;CAC1B,CAAA;AAuCM,MAAM,YAAY,GAAG,CAAkD,KAAQ,EAAE,GAAG,MAAc,EAAE,EAAE;IAC3G,MAAM,WAAW,GAAG,EAA8B,CAAA;IAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAmB,GAAqB,CAAA;QACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC1B,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;SAClC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AATY,QAAA,YAAY,gBASxB"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.User = void 0;
4
- /**
5
- * Class model that represents an application user
6
- */
7
- class User {
8
- }
9
- exports.User = User;
10
- //# sourceMappingURL=user.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/models/user.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,IAAI;CAUhB;AAVD,oBAUC"}
@@ -1,64 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.StoreManager = void 0;
10
- const inject_1 = require("@furystack/inject");
11
- const errors_1 = require("./errors");
12
- /**
13
- * Manager class for store instances
14
- */
15
- let StoreManager = class StoreManager {
16
- constructor() {
17
- this.stores = new Map();
18
- }
19
- /**
20
- * Disposes the StoreManager and all store instances
21
- */
22
- async dispose() {
23
- const result = await Promise.allSettled([...this.stores.entries()].map(async ([_model, store]) => store.dispose()));
24
- const fails = result.filter((r) => r.status === 'rejected');
25
- if (fails && fails.length) {
26
- const error = new errors_1.AggregatedError(`There was an error during disposing ${fails.length} stores: ${fails.map((f) => f.reason)}`, fails);
27
- throw error;
28
- }
29
- }
30
- /**
31
- * Returns a store model for a constructable object.
32
- * Throws error if no store is registered
33
- *
34
- * @param model The Constructable object
35
- * @param primaryKey The Primary Key field
36
- * @throws if the Store is not registered
37
- * @returns a Store object
38
- */
39
- getStoreFor(model, primaryKey) {
40
- const instance = this.stores.get(model);
41
- if (!instance) {
42
- throw Error(`Store not found for '${model.name}'`);
43
- }
44
- if (primaryKey !== instance.primaryKey) {
45
- throw Error('Primary keys not match');
46
- }
47
- return instance;
48
- }
49
- /**
50
- * Adds a store instance to the StoreManager class
51
- *
52
- * @param store The store to add
53
- * @returns the StoreManager instance for chaining
54
- */
55
- addStore(store) {
56
- this.stores.set(store.model, store);
57
- return this;
58
- }
59
- };
60
- StoreManager = __decorate([
61
- (0, inject_1.Injectable)({ lifetime: 'singleton' })
62
- ], StoreManager);
63
- exports.StoreManager = StoreManager;
64
- //# sourceMappingURL=store-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-manager.js","sourceRoot":"","sources":["../src/store-manager.ts"],"names":[],"mappings":";;;;;;;;;AACA,8CAA8C;AAE9C,qCAA0C;AAG1C;;GAEG;AAEH,IAAa,YAAY,GAAzB,MAAa,YAAY;IAAzB;QAeU,WAAM,GAAyD,IAAI,GAAG,EAAE,CAAA;IAoClF,CAAC;IAlDC;;OAEG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACnH,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAA4B,CAAA;QACtF,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,wBAAe,CAC/B,uCAAuC,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAC3F,KAAK,CACN,CAAA;YACD,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;IAGD;;;;;;;;OAQG;IACI,WAAW,CAIhB,KAAuB,EAAE,UAAuB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,KAAK,CAAC,wBAAwB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;SACnD;QACD,IAAI,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE;YACtC,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAA;SACtC;QACD,OAAO,QAAiB,CAAA;IAC1B,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAiC,KAAoC;QAClF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAgC,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAnDY,YAAY;IADxB,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,YAAY,CAmDxB;AAnDY,oCAAY"}
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("@furystack/utils");
4
- const inject_1 = require("@furystack/inject");
5
- const store_manager_1 = require("./store-manager");
6
- const in_memory_store_1 = require("./in-memory-store");
7
- const errors_1 = require("./errors");
8
- const create_physical_store_tests_1 = require("./create-physical-store-tests");
9
- class Test {
10
- }
11
- describe('StoreManager', () => {
12
- it('Can be retrieved from an injector', () => {
13
- (0, utils_1.using)(new inject_1.Injector(), (i) => {
14
- expect(i.getInstance(store_manager_1.StoreManager)).toBeInstanceOf(store_manager_1.StoreManager);
15
- });
16
- });
17
- it('Should throw if trying to retrieve a non-existing store', () => {
18
- (0, utils_1.using)(new inject_1.Injector(), (i) => {
19
- const sm = i.getInstance(store_manager_1.StoreManager);
20
- expect(() => sm.getStoreFor(class {
21
- }, 't')).toThrow();
22
- });
23
- });
24
- it('Should throw if trying to retrieve an existing store with a different primary key', () => {
25
- (0, utils_1.using)(new inject_1.Injector(), (i) => {
26
- const sm = i.getInstance(store_manager_1.StoreManager);
27
- sm.addStore(new in_memory_store_1.InMemoryStore({ model: create_physical_store_tests_1.TestClass, primaryKey: 'id' }));
28
- expect(() => sm.getStoreFor(create_physical_store_tests_1.TestClass, 'booleanValue')).toThrowError('Primary keys not match');
29
- });
30
- });
31
- it('Can set up stores with an extension method', () => {
32
- (0, utils_1.using)(new inject_1.Injector(), (i) => {
33
- i.getInstance(store_manager_1.StoreManager).addStore(new in_memory_store_1.InMemoryStore({
34
- model: Test,
35
- primaryKey: 'id',
36
- }));
37
- expect(i.getInstance(store_manager_1.StoreManager).getStoreFor(Test, 'id')).toBeInstanceOf(in_memory_store_1.InMemoryStore);
38
- });
39
- });
40
- it('Dispose should throw if failed to dispose one or more store', async () => {
41
- await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
42
- const sm = i.getInstance(store_manager_1.StoreManager);
43
- const MockStore = class extends in_memory_store_1.InMemoryStore {
44
- constructor() {
45
- super(...arguments);
46
- this.dispose = () => Promise.reject(':(');
47
- }
48
- };
49
- sm.addStore(new MockStore({
50
- model: Test,
51
- primaryKey: 'id',
52
- }));
53
- try {
54
- await sm.dispose();
55
- }
56
- catch (error) {
57
- expect(error).toBeInstanceOf(errors_1.AggregatedError);
58
- expect(error.rejections).toHaveLength(1);
59
- }
60
- i.cachedSingletons.clear();
61
- });
62
- });
63
- });
64
- //# sourceMappingURL=store-manager.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-manager.spec.js","sourceRoot":"","sources":["../src/store-manager.spec.ts"],"names":[],"mappings":";;AAAA,4CAAoD;AACpD,8CAA4C;AAC5C,mDAA8C;AAC9C,uDAAiD;AACjD,qCAA0C;AAC1C,+EAAyD;AAEzD,MAAM,IAAI;CAGT;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,IAAA,aAAK,EAAC,IAAI,iBAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAC,CAAC,cAAc,CAAC,4BAAY,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,IAAA,aAAK,EAAC,IAAI,iBAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAA;YACtC,MAAM,CAAC,GAAG,EAAE,CACV,EAAE,CAAC,WAAW,CACZ;aAEC,EACD,GAAG,CACJ,CACF,CAAC,OAAO,EAAE,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,IAAA,aAAK,EAAC,IAAI,iBAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAA;YACtC,EAAE,CAAC,QAAQ,CAAC,IAAI,+BAAa,CAAC,EAAE,KAAK,EAAE,uCAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,uCAAS,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,IAAA,aAAK,EAAC,IAAI,iBAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,CAAC,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAC,QAAQ,CAClC,IAAI,+BAAa,CAAC;gBAChB,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,IAAI;aACjB,CAAC,CACH,CAAA;YAED,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,+BAAa,CAAC,CAAA;QAC3F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,4BAAY,CAAC,CAAA;YACtC,MAAM,SAAS,GAAG,KAAM,SAAQ,+BAAuB;gBAArC;;oBACT,YAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC7C,CAAC;aAAA,CAAA;YAED,EAAE,CAAC,QAAQ,CACT,IAAI,SAAS,CAAC;gBACZ,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,IAAI;aACjB,CAAC,CACH,CAAA;YACD,IAAI;gBACF,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,wBAAe,CAAC,CAAA;gBAC7C,MAAM,CAAE,KAAyB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;aAC9D;YACD,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=global-disposable.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-disposable.spec.d.ts","sourceRoot":"","sources":["../src/global-disposable.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=identity-context.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity-context.spec.d.ts","sourceRoot":"","sources":["../src/identity-context.spec.ts"],"names":[],"mappings":""}