@furystack/core 12.0.0 → 12.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/{types → esm}/create-physical-store-tests.d.ts +1 -1
- package/{types → esm}/create-physical-store-tests.d.ts.map +1 -1
- package/esm/create-physical-store-tests.js +446 -0
- package/esm/create-physical-store-tests.js.map +1 -0
- package/esm/errors/aggregated-error.js +11 -0
- package/esm/errors/aggregated-error.js.map +1 -0
- package/esm/errors/authorization-error.js +3 -0
- package/esm/errors/authorization-error.js.map +1 -0
- package/esm/errors/index.d.ts +3 -0
- package/esm/errors/index.d.ts.map +1 -0
- package/esm/errors/index.js +3 -0
- package/esm/errors/index.js.map +1 -0
- package/esm/global-disposables.js +26 -0
- package/esm/global-disposables.js.map +1 -0
- package/{types → esm}/helpers.d.ts +4 -4
- package/{types → esm}/helpers.d.ts.map +1 -1
- package/esm/helpers.js +38 -0
- package/esm/helpers.js.map +1 -0
- package/{types → esm}/identity-context.d.ts +1 -1
- package/esm/identity-context.d.ts.map +1 -0
- package/esm/identity-context.js +23 -0
- package/esm/identity-context.js.map +1 -0
- package/{types → esm}/in-memory-store.d.ts +1 -1
- package/{types → esm}/in-memory-store.d.ts.map +1 -1
- package/esm/in-memory-store.js +185 -0
- package/esm/in-memory-store.js.map +1 -0
- package/esm/index.d.ts +9 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +9 -0
- package/esm/index.js.map +1 -0
- package/esm/models/physical-store.js +30 -0
- package/esm/models/physical-store.js.map +1 -0
- package/esm/models/user.js +6 -0
- package/esm/models/user.js.map +1 -0
- package/{types → esm}/store-manager.d.ts +1 -1
- package/{types → esm}/store-manager.d.ts.map +1 -1
- package/esm/store-manager.js +59 -0
- package/esm/store-manager.js.map +1 -0
- package/package.json +7 -17
- package/src/create-physical-store-tests.ts +1 -1
- package/src/errors/index.ts +2 -2
- package/src/helpers.ts +4 -4
- package/src/identity-context.ts +1 -1
- package/src/in-memory-store.ts +2 -2
- package/src/index.ts +8 -8
- package/src/store-manager.ts +2 -2
- package/types/errors/index.d.ts +0 -3
- package/types/errors/index.d.ts.map +0 -1
- package/types/identity-context.d.ts.map +0 -1
- package/types/index.d.ts +0 -9
- package/types/index.d.ts.map +0 -1
- /package/{types → esm}/errors/aggregated-error.d.ts +0 -0
- /package/{types → esm}/errors/aggregated-error.d.ts.map +0 -0
- /package/{types → esm}/errors/authorization-error.d.ts +0 -0
- /package/{types → esm}/errors/authorization-error.d.ts.map +0 -0
- /package/{types → esm}/global-disposables.d.ts +0 -0
- /package/{types → esm}/global-disposables.d.ts.map +0 -0
- /package/{types → esm}/models/physical-store.d.ts +0 -0
- /package/{types → esm}/models/physical-store.d.ts.map +0 -0
- /package/{types → esm}/models/user.d.ts +0 -0
- /package/{types → esm}/models/user.d.ts.map +0 -0
package/esm/helpers.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { globalDisposables } from './global-disposables.js';
|
|
2
|
+
import { IdentityContext } from './identity-context.js';
|
|
3
|
+
import { StoreManager } from './store-manager.js';
|
|
4
|
+
/**
|
|
5
|
+
* The disposable will be disposed on process exit
|
|
6
|
+
* @param disposable The Disposable object to dispose on process exit
|
|
7
|
+
* @returns A set of global disposables
|
|
8
|
+
*/
|
|
9
|
+
export const disposeOnProcessExit = (disposable) => globalDisposables.add(disposable);
|
|
10
|
+
/**
|
|
11
|
+
* @param injector The Injector instance
|
|
12
|
+
* @returns the current authentication status from the identity context
|
|
13
|
+
*/
|
|
14
|
+
export const isAuthenticated = async (injector) => injector.getInstance(IdentityContext).isAuthenticated();
|
|
15
|
+
/**
|
|
16
|
+
* @param injector The Injector instance
|
|
17
|
+
* @param {...any} roles A list of roles
|
|
18
|
+
* @returns if the current authorization status from the identity context
|
|
19
|
+
*/
|
|
20
|
+
export const isAuthorized = async (injector, ...roles) => injector.getInstance(IdentityContext).isAuthorized(...roles);
|
|
21
|
+
/**
|
|
22
|
+
* @param injector The Injector instance
|
|
23
|
+
* @returns The current user from the identity context
|
|
24
|
+
*/
|
|
25
|
+
export const getCurrentUser = async (injector) => injector.getInstance(IdentityContext).getCurrentUser();
|
|
26
|
+
/**
|
|
27
|
+
* @param injector The Injector instance
|
|
28
|
+
* @returns A Store Manager instance to setup stores
|
|
29
|
+
*/
|
|
30
|
+
export const getStoreManager = (injector) => injector.getInstance(StoreManager);
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param injector The Injector instance
|
|
34
|
+
* @param store The store to add
|
|
35
|
+
* @returns The Store Manager instance for chaining
|
|
36
|
+
*/
|
|
37
|
+
export const addStore = (injector, store) => getStoreManager(injector).addStore(store);
|
|
38
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAsB,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAEjG;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,eAAe,EAAE,CAAA;AAEpH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,QAAkB,EAAE,GAAG,KAAe,EAAE,EAAE,CAC3E,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAA;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,cAAc,EAAE,CAAA;AAElH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;AAEzF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAiC,QAAkB,EAAE,KAAoC,EAAE,EAAE,CACnH,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-context.d.ts","sourceRoot":"","sources":["../src/identity-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C,qBACa,eAAe;IACb,eAAe;IAIf,YAAY,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE;IAIhC,cAAc,CAAC,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC;CAGlE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
import { Injectable } from '@furystack/inject';
|
|
8
|
+
let IdentityContext = class IdentityContext {
|
|
9
|
+
async isAuthenticated() {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
async isAuthorized(..._roles) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
async getCurrentUser() {
|
|
16
|
+
throw Error('No IdentityContext');
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
IdentityContext = __decorate([
|
|
20
|
+
Injectable({ lifetime: 'scoped' })
|
|
21
|
+
], IdentityContext);
|
|
22
|
+
export { IdentityContext };
|
|
23
|
+
//# sourceMappingURL=identity-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-context.js","sourceRoot":"","sources":["../src/identity-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;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,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,eAAe,CAY3B;SAZY,eAAe"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Constructable } from '@furystack/inject';
|
|
2
|
-
import type { PhysicalStore, FindOptions, PartialResult, FilterType, CreateResult } from './models/physical-store';
|
|
2
|
+
import type { PhysicalStore, FindOptions, PartialResult, FilterType, CreateResult } from './models/physical-store.js';
|
|
3
3
|
export declare class InMemoryStore<T, TPrimaryKey extends keyof T> implements PhysicalStore<T, TPrimaryKey, T> {
|
|
4
4
|
/**
|
|
5
5
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../src/in-memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../src/in-memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAGrH,qBAAa,aAAa,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpG;;;OAGG;IACU,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAYpD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAY;IACzC,GAAG,QAAe,CAAC,CAAC,WAAW,CAAC,WAAW,MAAM,MAAM,CAAC,CAAC,4BAG/D;IAED,OAAO,CAAC,YAAY,CAGnB;IAED,OAAO,CAAC,cAAc;IAwGT,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IA2B3E,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAI5B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IAUxC,OAAO;IAId,SAAgB,UAAU,EAAE,WAAW,CAAA;IACvC,SAAgB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC;;;;;OAKG;gBACS,OAAO,EAAE;QACnB;;WAEG;QACH,UAAU,EAAE,WAAW,CAAA;QACvB;;WAEG;QACH,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;KACxB;CAIF"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { selectFields, isOperator, isLogicalOperator } from './models/physical-store.js';
|
|
2
|
+
export class InMemoryStore {
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param keys The keys to remove from the store
|
|
6
|
+
*/
|
|
7
|
+
async remove(...keys) {
|
|
8
|
+
keys.map((key) => this.cache.delete(key));
|
|
9
|
+
}
|
|
10
|
+
async add(...entries) {
|
|
11
|
+
const created = entries.map((e) => {
|
|
12
|
+
const entry = { ...e };
|
|
13
|
+
if (this.cache.has(entry[this.primaryKey])) {
|
|
14
|
+
throw new Error('Item with the primary key already exists.');
|
|
15
|
+
}
|
|
16
|
+
this.cache.set(entry[this.primaryKey], entry);
|
|
17
|
+
return entry;
|
|
18
|
+
});
|
|
19
|
+
return { created };
|
|
20
|
+
}
|
|
21
|
+
filterInternal(values, filter) {
|
|
22
|
+
if (!filter) {
|
|
23
|
+
return values;
|
|
24
|
+
}
|
|
25
|
+
return values.filter((item) => {
|
|
26
|
+
for (const key in filter) {
|
|
27
|
+
if (isLogicalOperator(key)) {
|
|
28
|
+
const filterValue = filter[key];
|
|
29
|
+
switch (key) {
|
|
30
|
+
case '$and':
|
|
31
|
+
if (filterValue.some((v) => !this.filterInternal([item], v).length)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
break;
|
|
35
|
+
case '$or':
|
|
36
|
+
if (filterValue.some((v) => this.filterInternal([item], v).length)) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`The logical operation '${key}' is not a valid operation`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (typeof filter[key] === 'object') {
|
|
45
|
+
for (const filterKey in filter[key]) {
|
|
46
|
+
if (isOperator(filterKey)) {
|
|
47
|
+
const itemValue = item[key];
|
|
48
|
+
const filterValue = filter[key][filterKey];
|
|
49
|
+
switch (filterKey) {
|
|
50
|
+
case '$eq':
|
|
51
|
+
if (filterValue !== itemValue) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case '$ne':
|
|
56
|
+
if (filterValue === itemValue) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case '$in':
|
|
61
|
+
if (!filterValue.includes(itemValue)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case '$nin':
|
|
66
|
+
if (filterValue.includes(itemValue)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case '$lt':
|
|
71
|
+
if (itemValue < filterValue) {
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
case '$lte':
|
|
76
|
+
if (itemValue <= filterValue) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
case '$gt':
|
|
81
|
+
if (itemValue > filterValue) {
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
case '$gte':
|
|
86
|
+
if (itemValue >= filterValue) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
case '$regex':
|
|
91
|
+
if (!new RegExp(filterValue).test(itemValue.toString())) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case '$startsWith':
|
|
96
|
+
if (!itemValue.startsWith(filterValue)) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
case '$endsWith':
|
|
101
|
+
if (!itemValue.endsWith(filterValue)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
case '$like':
|
|
106
|
+
if (!this.evaluateLike(itemValue, filterValue)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
throw new Error(`The expression (${filterKey}) is not supported by '${this.constructor.name}'!`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
throw new Error(`The filter key '${filterKey}' is not a valid operation`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
throw new Error(`The filter has to be an object, got ${typeof filter[key]} for field '${key}'`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async find(searchOptions) {
|
|
127
|
+
let value = this.filterInternal([...this.cache.values()], searchOptions.filter);
|
|
128
|
+
if (searchOptions.order) {
|
|
129
|
+
for (const fieldName of Object.keys(searchOptions.order)) {
|
|
130
|
+
value = value.sort((a, b) => {
|
|
131
|
+
const order = searchOptions.order[fieldName];
|
|
132
|
+
if (a[fieldName] < b[fieldName])
|
|
133
|
+
return order === 'ASC' ? -1 : 1;
|
|
134
|
+
if (a[fieldName] > b[fieldName])
|
|
135
|
+
return order === 'ASC' ? 1 : -1;
|
|
136
|
+
return 0;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (searchOptions.top || searchOptions.skip) {
|
|
141
|
+
value = value.slice(searchOptions.skip, (searchOptions.skip || 0) + (searchOptions.top || this.cache.size));
|
|
142
|
+
}
|
|
143
|
+
if (searchOptions.select) {
|
|
144
|
+
value = value.map((item) => {
|
|
145
|
+
return selectFields(item, ...searchOptions.select);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
async count(filter) {
|
|
151
|
+
return this.filterInternal([...this.cache.values()], filter).length;
|
|
152
|
+
}
|
|
153
|
+
async update(id, data) {
|
|
154
|
+
if (!this.cache.has(id)) {
|
|
155
|
+
throw Error(`Entity not found with id '${id}', cannot update!`);
|
|
156
|
+
}
|
|
157
|
+
this.cache.set(id, {
|
|
158
|
+
...this.cache.get(id),
|
|
159
|
+
...data,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
dispose() {
|
|
163
|
+
this.cache.clear();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Creates an InMemoryStore that can be used for testing purposes.
|
|
167
|
+
* @param options Options for the In Memory Store
|
|
168
|
+
* @param options.primaryKey The name of the primary key field
|
|
169
|
+
* @param options.model The Entity Model
|
|
170
|
+
*/
|
|
171
|
+
constructor(options) {
|
|
172
|
+
this.cache = new Map();
|
|
173
|
+
this.get = async (key, select) => {
|
|
174
|
+
const item = this.cache.get(key);
|
|
175
|
+
return item && select ? selectFields(item, ...select) : item;
|
|
176
|
+
};
|
|
177
|
+
this.evaluateLike = (value, likeString) => {
|
|
178
|
+
const likeRegex = `^${likeString.replace(/%/g, '.*')}$`;
|
|
179
|
+
return value.match(new RegExp(likeRegex, 'i'));
|
|
180
|
+
};
|
|
181
|
+
this.primaryKey = options.primaryKey;
|
|
182
|
+
this.model = options.model;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=in-memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../src/in-memory-store.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './errors/index.js';
|
|
2
|
+
export * from './models/physical-store.js';
|
|
3
|
+
export * from './models/user.js';
|
|
4
|
+
export * from './in-memory-store.js';
|
|
5
|
+
export * from './store-manager.js';
|
|
6
|
+
export * from './global-disposables.js';
|
|
7
|
+
export * from './identity-context.js';
|
|
8
|
+
export * from './helpers.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA"}
|
package/esm/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './errors/index.js';
|
|
2
|
+
export * from './models/physical-store.js';
|
|
3
|
+
export * from './models/user.js';
|
|
4
|
+
export * from './in-memory-store.js';
|
|
5
|
+
export * from './store-manager.js';
|
|
6
|
+
export * from './global-disposables.js';
|
|
7
|
+
export * from './identity-context.js';
|
|
8
|
+
export * from './helpers.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const NumberComparisonOperators = ['$gt', '$gte', '$lt', '$lte'];
|
|
2
|
+
export const StringComparisonOperators = ['$startsWith', '$endsWith', '$like', '$regex'];
|
|
3
|
+
export const SingleComparisonOperators = ['$eq', '$ne'];
|
|
4
|
+
export const ArrayComparisonOperators = ['$in', '$nin'];
|
|
5
|
+
export const LogicalOperators = ['$and', '$not', '$nor', '$or'];
|
|
6
|
+
export const allOperators = [
|
|
7
|
+
...SingleComparisonOperators,
|
|
8
|
+
...NumberComparisonOperators,
|
|
9
|
+
...ArrayComparisonOperators,
|
|
10
|
+
...LogicalOperators,
|
|
11
|
+
...StringComparisonOperators,
|
|
12
|
+
];
|
|
13
|
+
export const isLogicalOperator = (propertyString) => LogicalOperators.includes(propertyString);
|
|
14
|
+
export const isOperator = (propertyString) => allOperators.includes(propertyString);
|
|
15
|
+
export const t = {
|
|
16
|
+
a: { $eq: 3 },
|
|
17
|
+
b: { $in: ['a', 'b', 'c'] },
|
|
18
|
+
$and: [{ a: { $eq: 2 } }],
|
|
19
|
+
};
|
|
20
|
+
export const selectFields = (entry, ...fields) => {
|
|
21
|
+
const returnValue = {};
|
|
22
|
+
Object.keys(entry).map((key) => {
|
|
23
|
+
const field = key;
|
|
24
|
+
if (fields.includes(field)) {
|
|
25
|
+
returnValue[field] = entry[field];
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return returnValue;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=physical-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical-store.js","sourceRoot":"","sources":["../../src/models/physical-store.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAA;AAEhF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAA;AACjG,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAU,CAAA;AAEhE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAA;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AAExE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,yBAAyB;IAC5B,GAAG,yBAAyB;IAC5B,GAAG,wBAAwB;IAC3B,GAAG,gBAAgB;IACnB,GAAG,yBAAyB;CACpB,CAAA;AAUV,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,cAAsB,EAAuD,EAAE,CAC/G,gBAAgB,CAAC,QAAQ,CAAC,cAAmD,CAAC,CAAA;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,cAAsB,EAAmD,EAAE,CACpG,YAAY,CAAC,QAAQ,CAAC,cAA+C,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,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;AAuCD,MAAM,CAAC,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/models/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,IAAI;CAUhB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable } from '@furystack/inject';
|
|
2
2
|
import type { Disposable } from '@furystack/utils';
|
|
3
|
-
import type { PhysicalStore } from './models/physical-store';
|
|
3
|
+
import type { PhysicalStore } from './models/physical-store.js';
|
|
4
4
|
/**
|
|
5
5
|
* Manager class for store instances
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-manager.d.ts","sourceRoot":"","sources":["../src/store-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"store-manager.d.ts","sourceRoot":"","sources":["../src/store-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D;;GAEG;AACH,qBACa,YAAa,YAAW,UAAU;IAC7C;;OAEG;IACU,OAAO;IAWpB,OAAO,CAAC,MAAM,CAAkE;IAEhF;;;;;;;OAOG;IACI,WAAW,CAChB,CAAC,EACD,WAAW,SAAS,MAAM,CAAC,EAC3B,KAAK,SAAS,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,EAC3E,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW;IAWlD;;;;OAIG;IACI,QAAQ,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;CAIrF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
import { Injectable } from '@furystack/inject';
|
|
8
|
+
import { AggregatedError } from './errors/aggregated-error.js';
|
|
9
|
+
/**
|
|
10
|
+
* Manager class for store instances
|
|
11
|
+
*/
|
|
12
|
+
let StoreManager = class StoreManager {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.stores = new Map();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Disposes the StoreManager and all store instances
|
|
18
|
+
*/
|
|
19
|
+
async dispose() {
|
|
20
|
+
const result = await Promise.allSettled([...this.stores.entries()].map(async ([_model, store]) => store.dispose()));
|
|
21
|
+
const fails = result.filter((r) => r.status === 'rejected');
|
|
22
|
+
if (fails && fails.length) {
|
|
23
|
+
const error = new AggregatedError(`There was an error during disposing ${fails.length} stores: ${fails.map((f) => f.reason)}`, fails);
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns a store model for a constructable object.
|
|
29
|
+
* Throws error if no store is registered
|
|
30
|
+
* @param model The Constructable object
|
|
31
|
+
* @param primaryKey The Primary Key field
|
|
32
|
+
* @throws if the Store is not registered
|
|
33
|
+
* @returns a Store object
|
|
34
|
+
*/
|
|
35
|
+
getStoreFor(model, primaryKey) {
|
|
36
|
+
const instance = this.stores.get(model);
|
|
37
|
+
if (!instance) {
|
|
38
|
+
throw Error(`Store not found for '${model.name}'`);
|
|
39
|
+
}
|
|
40
|
+
if (primaryKey !== instance.primaryKey) {
|
|
41
|
+
throw Error('Primary keys not match');
|
|
42
|
+
}
|
|
43
|
+
return instance;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Adds a store instance to the StoreManager class
|
|
47
|
+
* @param store The store to add
|
|
48
|
+
* @returns the StoreManager instance for chaining
|
|
49
|
+
*/
|
|
50
|
+
addStore(store) {
|
|
51
|
+
this.stores.set(store.model, store);
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
StoreManager = __decorate([
|
|
56
|
+
Injectable({ lifetime: 'singleton' })
|
|
57
|
+
], StoreManager);
|
|
58
|
+
export { StoreManager };
|
|
59
|
+
//# sourceMappingURL=store-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-manager.js","sourceRoot":"","sources":["../src/store-manager.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D;;GAEG;AAEH,IAAa,YAAY,GAAzB,MAAa,YAAY;IAAzB;QAeU,WAAM,GAAyD,IAAI,GAAG,EAAE,CAAA;IAkClF,CAAC;IAhDC;;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,eAAe,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;;;;;;;OAOG;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;;;;OAIG;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;AAjDY,YAAY;IADxB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,YAAY,CAiDxB;SAjDY,YAAY"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/core",
|
|
3
|
-
"version": "12.0.
|
|
3
|
+
"version": "12.0.2",
|
|
4
4
|
"description": "Core FuryStack package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -8,24 +8,14 @@
|
|
|
8
8
|
},
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
|
-
"import": "./esm/index.js"
|
|
12
|
-
"types": "./types/index.d.ts"
|
|
11
|
+
"import": "./esm/index.js"
|
|
13
12
|
},
|
|
14
13
|
"./create-physical-store-tests": {
|
|
15
|
-
"import": "./esm/create-physical-store-tests.js"
|
|
16
|
-
"types": "./types/create-physical-store-tests.d.ts"
|
|
17
|
-
},
|
|
18
|
-
"./package.json": "./package.json"
|
|
19
|
-
},
|
|
20
|
-
"typesVersions": {
|
|
21
|
-
"*": {
|
|
22
|
-
"*": [
|
|
23
|
-
"types/*"
|
|
24
|
-
]
|
|
14
|
+
"import": "./esm/create-physical-store-tests.js"
|
|
25
15
|
}
|
|
26
16
|
},
|
|
27
17
|
"files": [
|
|
28
|
-
"
|
|
18
|
+
"esm",
|
|
29
19
|
"types",
|
|
30
20
|
"src"
|
|
31
21
|
],
|
|
@@ -47,13 +37,13 @@
|
|
|
47
37
|
},
|
|
48
38
|
"homepage": "https://github.com/furystack/furystack",
|
|
49
39
|
"devDependencies": {
|
|
50
|
-
"@types/node": "^18.
|
|
40
|
+
"@types/node": "^18.16.2",
|
|
51
41
|
"typescript": "^5.0.4",
|
|
52
42
|
"vitest": "^0.30.1"
|
|
53
43
|
},
|
|
54
44
|
"dependencies": {
|
|
55
|
-
"@furystack/inject": "^8.0.
|
|
56
|
-
"@furystack/utils": "^4.0.
|
|
45
|
+
"@furystack/inject": "^8.0.2",
|
|
46
|
+
"@furystack/utils": "^4.0.2"
|
|
57
47
|
},
|
|
58
48
|
"gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
|
|
59
49
|
}
|
package/src/errors/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './authorization-error'
|
|
2
|
-
export * from './aggregated-error'
|
|
1
|
+
export * from './authorization-error.js'
|
|
2
|
+
export * from './aggregated-error.js'
|
package/src/helpers.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Injector } from '@furystack/inject'
|
|
2
|
-
import { globalDisposables } from './global-disposables'
|
|
3
|
-
import { IdentityContext } from './identity-context'
|
|
2
|
+
import { globalDisposables } from './global-disposables.js'
|
|
3
|
+
import { IdentityContext } from './identity-context.js'
|
|
4
4
|
import type { Disposable } from '@furystack/utils'
|
|
5
|
-
import { StoreManager } from './store-manager'
|
|
6
|
-
import type { PhysicalStore } from './models/physical-store'
|
|
5
|
+
import { StoreManager } from './store-manager.js'
|
|
6
|
+
import type { PhysicalStore } from './models/physical-store.js'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* The disposable will be disposed on process exit
|
package/src/identity-context.ts
CHANGED
package/src/in-memory-store.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable } from '@furystack/inject'
|
|
2
|
-
import type { PhysicalStore, FindOptions, PartialResult, FilterType, CreateResult } from './models/physical-store'
|
|
3
|
-
import { selectFields, isOperator, isLogicalOperator } from './models/physical-store'
|
|
2
|
+
import type { PhysicalStore, FindOptions, PartialResult, FilterType, CreateResult } from './models/physical-store.js'
|
|
3
|
+
import { selectFields, isOperator, isLogicalOperator } from './models/physical-store.js'
|
|
4
4
|
|
|
5
5
|
export class InMemoryStore<T, TPrimaryKey extends keyof T> implements PhysicalStore<T, TPrimaryKey, T> {
|
|
6
6
|
/**
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from './errors'
|
|
2
|
-
export * from './models/physical-store'
|
|
3
|
-
export * from './models/user'
|
|
4
|
-
export * from './in-memory-store'
|
|
5
|
-
export * from './store-manager'
|
|
6
|
-
export * from './global-disposables'
|
|
7
|
-
export * from './identity-context'
|
|
8
|
-
export * from './helpers'
|
|
1
|
+
export * from './errors/index.js'
|
|
2
|
+
export * from './models/physical-store.js'
|
|
3
|
+
export * from './models/user.js'
|
|
4
|
+
export * from './in-memory-store.js'
|
|
5
|
+
export * from './store-manager.js'
|
|
6
|
+
export * from './global-disposables.js'
|
|
7
|
+
export * from './identity-context.js'
|
|
8
|
+
export * from './helpers.js'
|
package/src/store-manager.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Constructable } from '@furystack/inject'
|
|
2
2
|
import { Injectable } from '@furystack/inject'
|
|
3
3
|
import type { Disposable } from '@furystack/utils'
|
|
4
|
-
import { AggregatedError } from './errors'
|
|
5
|
-
import type { PhysicalStore } from './models/physical-store'
|
|
4
|
+
import { AggregatedError } from './errors/aggregated-error.js'
|
|
5
|
+
import type { PhysicalStore } from './models/physical-store.js'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Manager class for store instances
|
package/types/errors/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity-context.d.ts","sourceRoot":"","sources":["../src/identity-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEzC,qBACa,eAAe;IACb,eAAe;IAIf,YAAY,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE;IAIhC,cAAc,CAAC,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC;CAGlE"}
|
package/types/index.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './errors';
|
|
2
|
-
export * from './models/physical-store';
|
|
3
|
-
export * from './models/user';
|
|
4
|
-
export * from './in-memory-store';
|
|
5
|
-
export * from './store-manager';
|
|
6
|
-
export * from './global-disposables';
|
|
7
|
-
export * from './identity-context';
|
|
8
|
-
export * from './helpers';
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|