conftree 0.2.0 → 0.3.1
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/README.md +44 -3
- package/dist/core/errors.d.ts +4 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +7 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/engine/category-integrity.d.ts +3 -0
- package/dist/engine/category-integrity.d.ts.map +1 -0
- package/dist/engine/category-integrity.js +28 -0
- package/dist/engine/category-integrity.js.map +1 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +2 -1
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/resolver.d.ts +1 -0
- package/dist/engine/resolver.d.ts.map +1 -1
- package/dist/engine/resolver.js +1 -0
- package/dist/engine/resolver.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +126 -19
- package/dist/index.mjs.map +1 -1
- package/dist/storage/memory-storage.d.ts +3 -1
- package/dist/storage/memory-storage.d.ts.map +1 -1
- package/dist/storage/memory-storage.js +26 -5
- package/dist/storage/memory-storage.js.map +1 -1
- package/dist/storage/storage-port.d.ts +3 -1
- package/dist/storage/storage-port.d.ts.map +1 -1
- package/dist/typed/category-guard.d.ts +9 -0
- package/dist/typed/category-guard.d.ts.map +1 -0
- package/dist/typed/category-guard.js +23 -0
- package/dist/typed/category-guard.js.map +1 -0
- package/dist/typed/registry.d.ts +8 -3
- package/dist/typed/registry.d.ts.map +1 -1
- package/dist/typed/typed-auditor.d.ts +3 -1
- package/dist/typed/typed-auditor.d.ts.map +1 -1
- package/dist/typed/typed-auditor.js +5 -2
- package/dist/typed/typed-auditor.js.map +1 -1
- package/dist/typed/typed-engine.d.ts +2 -0
- package/dist/typed/typed-engine.d.ts.map +1 -1
- package/dist/typed/typed-engine.js +13 -5
- package/dist/typed/typed-engine.js.map +1 -1
- package/dist/typed/typed-resolver.d.ts +4 -1
- package/dist/typed/typed-resolver.d.ts.map +1 -1
- package/dist/typed/typed-resolver.js +12 -3
- package/dist/typed/typed-resolver.js.map +1 -1
- package/dist/typed/typed-writer.d.ts +3 -1
- package/dist/typed/typed-writer.d.ts.map +1 -1
- package/dist/typed/typed-writer.js +9 -4
- package/dist/typed/typed-writer.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -129,6 +129,46 @@ await resolver.get('ui.theme', { kind: 'user', refId: 'u1' }); // typed 'light'
|
|
|
129
129
|
|
|
130
130
|
`Registry` must be a plain interface/type (not `extends` anything with an index signature) for key-level narrowing to work — see `src/typed/registry.ts` for the `SettingValue`/`SettingScopeKind` helpers this is built on.
|
|
131
131
|
|
|
132
|
+
#### Scoping to a category
|
|
133
|
+
|
|
134
|
+
Tag registry entries with `category` (matching the `category` you pass to `storage.createDef`) to derive a fully-typed sub-engine for just that subset of keys — `get`/`set`/`unset` are narrowed at compile time, and `listAt` is filtered server-side (correct pagination, not a client-side `Array.filter`):
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
interface Registry {
|
|
138
|
+
'ui.theme': { value: 'light' | 'dark' | 'system'; scope: 'user' };
|
|
139
|
+
'chama.contributionAmount': {
|
|
140
|
+
value: number;
|
|
141
|
+
scope: 'group' | 'member';
|
|
142
|
+
category: 'chama';
|
|
143
|
+
};
|
|
144
|
+
'chama.currency': {
|
|
145
|
+
value: string;
|
|
146
|
+
scope: 'group' | 'member';
|
|
147
|
+
category: 'chama';
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const engine = createTypedEngine<Registry>(createEngine());
|
|
152
|
+
const chama = engine.category('chama');
|
|
153
|
+
|
|
154
|
+
await chama.writer.set({
|
|
155
|
+
key: 'chama.contributionAmount', // 'ui.theme' would be a compile error here
|
|
156
|
+
scope: { kind: 'group', refId: 'g1' },
|
|
157
|
+
value: 5000,
|
|
158
|
+
authorId: 'admin',
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
await chama.resolver.listAt({ kind: 'group', refId: 'g1' });
|
|
162
|
+
// { entries: { 'chama.contributionAmount': 5000, 'chama.currency': 'KES' }, nextCursor: null }
|
|
163
|
+
// — only chama.* keys, even if other categories are also set at that scope
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
A key with no `category` in the registry (like `ui.theme` above) simply never shows up in any `category(...)` view.
|
|
167
|
+
|
|
168
|
+
`get`/`set`/`unset`/`history` on a `category(...)` accessor are narrowed at compile time — but if a caller bypasses that with `as any`, a runtime check still catches it and throws `CategoryError` (code `'CATEGORY'`) rather than silently touching a setting from another category.
|
|
169
|
+
|
|
170
|
+
`createEngine()` also guards `storage.createDef()` itself: if two unrelated features accidentally pick the same `key` string with different `category` values, the second `createDef()` call throws `CategoryError` instead of silently redefining the existing setting under the new category. Redefining a key with the _same_ category (a normal evolution of a setting) still works exactly as before. This guard is applied automatically to whatever `StorageAdapter` you pass in, not just `MemoryStorageAdapter`.
|
|
171
|
+
|
|
132
172
|
### Writing an adapter
|
|
133
173
|
|
|
134
174
|
Implement `StorageAdapter`, `ScopeHierarchy`, or `ChangeBus`, all defined in `src/storage/storage-port.ts`, `src/core/types.ts`, and `src/cache/change-bus.ts`. `MemoryStorageAdapter` and `LocalScopeHierarchy` are the reference implementations.
|
|
@@ -136,15 +176,16 @@ Implement `StorageAdapter`, `ScopeHierarchy`, or `ChangeBus`, all defined in `sr
|
|
|
136
176
|
## API
|
|
137
177
|
|
|
138
178
|
- `createEngine(options?)`: returns `{ storage, hierarchy, bus, cache, resolver, writer, auditor }`.
|
|
139
|
-
- `resolver.get(key, scope, asOf?)`, `resolver.getMany(keys, scope, asOf?)`, `resolver.listAt(scope, { limit?, cursor? })`
|
|
179
|
+
- `resolver.get(key, scope, asOf?)`, `resolver.getMany(keys, scope, asOf?)`, `resolver.listAt(scope, { limit?, cursor?, category? })`
|
|
140
180
|
- `writer.set(params)`, `writer.setMany(paramsList)`, `writer.unset(params)`
|
|
141
181
|
- `auditor.history(key, scope?)`
|
|
142
182
|
- `storage.updateDefStatus(key, status)`
|
|
143
|
-
- `
|
|
183
|
+
- `storage.listDefs(status?, category?)`, `storage.listCategories()`
|
|
184
|
+
- `createTypedEngine<Registry>(engine)`: returns `{ resolver, writer, auditor, category(name) }` typed against your own key/value/scope/category registry. `category(name)` returns the same shape, narrowed to that category's keys.
|
|
144
185
|
|
|
145
186
|
### Errors
|
|
146
187
|
|
|
147
|
-
All errors extend `ConfTreeError` and carry a stable `code` (e.g. `'CONFLICT'`, `'NOT_FOUND'`), in addition to a specific class (`ConflictError`, `NotFoundError`, ...) and `name`.
|
|
188
|
+
All errors extend `ConfTreeError` and carry a stable `code` (e.g. `'CONFLICT'`, `'NOT_FOUND'`, `'CATEGORY'`), in addition to a specific class (`ConflictError`, `NotFoundError`, `CategoryError`, ...) and `name`.
|
|
148
189
|
|
|
149
190
|
## License
|
|
150
191
|
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ErrorCode = 'NOT_FOUND' | 'SCOPE' | 'REQUIRED' | 'VALUE' | 'CONFLICT' | 'CORRUPT' | 'CYCLE';
|
|
1
|
+
export type ErrorCode = 'NOT_FOUND' | 'SCOPE' | 'REQUIRED' | 'VALUE' | 'CONFLICT' | 'CORRUPT' | 'CYCLE' | 'CATEGORY';
|
|
2
2
|
export declare class ConfTreeError extends Error {
|
|
3
3
|
readonly code: ErrorCode;
|
|
4
4
|
constructor(message: string, code: ErrorCode);
|
|
@@ -24,4 +24,7 @@ export declare class CorruptError extends ConfTreeError {
|
|
|
24
24
|
export declare class CycleError extends ConfTreeError {
|
|
25
25
|
constructor(id: string, newParentId: string);
|
|
26
26
|
}
|
|
27
|
+
export declare class CategoryError extends ConfTreeError {
|
|
28
|
+
constructor(key: string, expectedCategory: string | null, actualCategory: string | null);
|
|
29
|
+
}
|
|
27
30
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAClB,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,SAAS,GACT,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAClB,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,UAAU,GACV,SAAS,GACT,OAAO,GACP,UAAU,CAAC;AAEd,qBAAa,aAAc,SAAQ,KAAK;aAGtB,IAAI,EAAE,SAAS;gBAD/B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,SAAS;CAMhC;AAED,qBAAa,aAAc,SAAQ,aAAa;gBACnC,GAAG,EAAE,MAAM;CAGvB;AAED,qBAAa,UAAW,SAAQ,aAAa;gBAChC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAM1C;AAED,qBAAa,aAAc,SAAQ,aAAa;gBACnC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAOrE;AAED,qBAAa,UAAW,SAAQ,aAAa;gBAChC,OAAO,EAAE,MAAM;CAG3B;AAED,qBAAa,aAAc,SAAQ,aAAa;gBACnC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAOrE;AAED,qBAAa,YAAa,SAAQ,aAAa;gBAClC,OAAO,EAAE,MAAM;CAM3B;AAED,qBAAa,UAAW,SAAQ,aAAa;gBAChC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAM3C;AAED,qBAAa,aAAc,SAAQ,aAAa;gBAE9C,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,cAAc,EAAE,MAAM,GAAG,IAAI;CAO9B"}
|
package/dist/core/errors.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CycleError = exports.CorruptError = exports.ConflictError = exports.ValueError = exports.RequiredError = exports.ScopeError = exports.NotFoundError = exports.ConfTreeError = void 0;
|
|
3
|
+
exports.CategoryError = exports.CycleError = exports.CorruptError = exports.ConflictError = exports.ValueError = exports.RequiredError = exports.ScopeError = exports.NotFoundError = exports.ConfTreeError = void 0;
|
|
4
4
|
class ConfTreeError extends Error {
|
|
5
5
|
code;
|
|
6
6
|
constructor(message, code) {
|
|
@@ -55,4 +55,10 @@ class CycleError extends ConfTreeError {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
exports.CycleError = CycleError;
|
|
58
|
+
class CategoryError extends ConfTreeError {
|
|
59
|
+
constructor(key, expectedCategory, actualCategory) {
|
|
60
|
+
super(`Setting "${key}" has category "${actualCategory ?? 'none'}", which does not match "${expectedCategory ?? 'none'}"`, 'CATEGORY');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.CategoryError = CategoryError;
|
|
58
64
|
//# sourceMappingURL=errors.js.map
|
package/dist/core/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":";;;AAUA,MAAa,aAAc,SAAQ,KAAK;IAGtB;IAFjB,YACC,OAAe,EACC,IAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAAW;QAG/B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;CACD;AATD,sCASC;AAED,MAAa,aAAc,SAAQ,aAAa;IAC/C,YAAY,GAAW;QACtB,KAAK,CAAC,gCAAgC,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;CACD;AAJD,sCAIC;AAED,MAAa,UAAW,SAAQ,aAAa;IAC5C,YAAY,GAAW,EAAE,SAAiB;QACzC,KAAK,CACJ,YAAY,GAAG,0CAA0C,SAAS,GAAG,EACrE,OAAO,CACP,CAAC;IACH,CAAC;CACD;AAPD,gCAOC;AAED,MAAa,aAAc,SAAQ,aAAa;IAC/C,YAAY,GAAW,EAAE,SAAiB,EAAE,UAAyB;QACpE,KAAK,CACJ,qBAAqB,GAAG,uCAAuC,SAAS,IAAI,UAAU,IAAI,MAAM,GAAG;YAClG,2BAA2B,EAC5B,UAAU,CACV,CAAC;IACH,CAAC;CACD;AARD,sCAQC;AAED,MAAa,UAAW,SAAQ,aAAa;IAC5C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;CACD;AAJD,gCAIC;AAED,MAAa,aAAc,SAAQ,aAAa;IAC/C,YAAY,GAAW,EAAE,SAAiB,EAAE,UAAyB;QACpE,KAAK,CACJ,YAAY,GAAG,cAAc,SAAS,IAAI,UAAU,IAAI,MAAM,8BAA8B;YAC3F,qCAAqC,EACtC,UAAU,CACV,CAAC;IACH,CAAC;CACD;AARD,sCAQC;AAED,MAAa,YAAa,SAAQ,aAAa;IAC9C,YAAY,OAAe;QAC1B,KAAK,CACJ,qBAAqB,OAAO,0CAA0C,EACtE,SAAS,CACT,CAAC;IACH,CAAC;CACD;AAPD,oCAOC;AAED,MAAa,UAAW,SAAQ,aAAa;IAC5C,YAAY,EAAU,EAAE,WAAmB;QAC1C,KAAK,CACJ,6BAA6B,EAAE,YAAY,WAAW,yBAAyB,EAC/E,OAAO,CACP,CAAC;IACH,CAAC;CACD;AAPD,gCAOC;AAED,MAAa,aAAc,SAAQ,aAAa;IAC/C,YACC,GAAW,EACX,gBAA+B,EAC/B,cAA6B;QAE7B,KAAK,CACJ,YAAY,GAAG,mBAAmB,cAAc,IAAI,MAAM,4BAA4B,gBAAgB,IAAI,MAAM,GAAG,EACnH,UAAU,CACV,CAAC;IACH,CAAC;CACD;AAXD,sCAWC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-integrity.d.ts","sourceRoot":"","sources":["../../src/engine/category-integrity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CA0B7E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withCategoryIntegrity = withCategoryIntegrity;
|
|
4
|
+
const errors_1 = require("../core/errors");
|
|
5
|
+
function withCategoryIntegrity(storage) {
|
|
6
|
+
return {
|
|
7
|
+
findDefs: (keys) => storage.findDefs(keys),
|
|
8
|
+
findDefsByIds: (ids) => storage.findDefsByIds(ids),
|
|
9
|
+
findAnyDef: (key) => storage.findAnyDef(key),
|
|
10
|
+
findValues: (query) => storage.findValues(query),
|
|
11
|
+
findChainValues: (query) => storage.findChainValues(query),
|
|
12
|
+
findAudit: (query) => storage.findAudit(query),
|
|
13
|
+
listValues: (query) => storage.listValues(query),
|
|
14
|
+
listDefs: (status, category) => storage.listDefs(status, category),
|
|
15
|
+
listCategories: () => storage.listCategories(),
|
|
16
|
+
updateDefStatus: (key, status) => storage.updateDefStatus(key, status),
|
|
17
|
+
transact: (fn) => storage.transact(fn),
|
|
18
|
+
createDef: async (input) => {
|
|
19
|
+
const existing = await storage.findAnyDef(input.key);
|
|
20
|
+
const newCategory = input.category ?? null;
|
|
21
|
+
if (existing && existing.category !== newCategory) {
|
|
22
|
+
throw new errors_1.CategoryError(input.key, existing.category, newCategory);
|
|
23
|
+
}
|
|
24
|
+
return storage.createDef(input);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=category-integrity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-integrity.js","sourceRoot":"","sources":["../../src/engine/category-integrity.ts"],"names":[],"mappings":";;AAGA,sDA0BC;AA7BD,2CAA+C;AAG/C,SAAgB,qBAAqB,CAAC,OAAuB;IAC5D,OAAO;QACN,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;QAClD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAChD,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC;QAC1D,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;QAC9C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAChD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAClE,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE;QAC9C,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;QACtE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC;YAC3C,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACnD,MAAM,IAAI,sBAAa,CACtB,KAAK,CAAC,GAAG,EACT,QAAQ,CAAC,QAAQ,EACjB,WAAW,CACX,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;CAC7B;AAED,MAAM,WAAW,MAAM;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,cAAc,CAAC;IAC1B,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAchE"}
|
package/dist/engine/engine.js
CHANGED
|
@@ -4,13 +4,14 @@ exports.createEngine = createEngine;
|
|
|
4
4
|
const change_bus_1 = require("../cache/change-bus");
|
|
5
5
|
const cache_1 = require("../cache/cache");
|
|
6
6
|
const hierarchy_cache_sync_1 = require("./hierarchy-cache-sync");
|
|
7
|
+
const category_integrity_1 = require("./category-integrity");
|
|
7
8
|
const memory_storage_1 = require("../storage/memory-storage");
|
|
8
9
|
const resolver_1 = require("./resolver");
|
|
9
10
|
const scope_hierarchy_1 = require("../hierarchy/scope-hierarchy");
|
|
10
11
|
const writer_1 = require("./writer");
|
|
11
12
|
const auditor_1 = require("./auditor");
|
|
12
13
|
function createEngine(options = {}) {
|
|
13
|
-
const storage = options.storage ?? new memory_storage_1.MemoryStorageAdapter();
|
|
14
|
+
const storage = (0, category_integrity_1.withCategoryIntegrity)(options.storage ?? new memory_storage_1.MemoryStorageAdapter());
|
|
14
15
|
const rawHierarchy = options.hierarchy ?? new scope_hierarchy_1.LocalScopeHierarchy();
|
|
15
16
|
const bus = options.bus ?? new change_bus_1.LocalBus();
|
|
16
17
|
const cacheOptions = options.cache === false ? { enabled: false } : (options.cache ?? {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":";;AA+BA,oCAcC;AA5CD,oDAA+C;AAE/C,0CAAuC;AACvC,iEAAmE;AACnE,6DAA6D;AAC7D,8DAAiE;AACjE,yCAAsC;AACtC,kEAAmE;AAGnE,qCAAkC;AAClC,uCAAoC;AAmBpC,SAAgB,YAAY,CAAC,UAAyB,EAAE;IACvD,MAAM,OAAO,GAAG,IAAA,0CAAqB,EACpC,OAAO,CAAC,OAAO,IAAI,IAAI,qCAAoB,EAAE,CAC7C,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,qCAAmB,EAAE,CAAC;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,qBAAQ,EAAE,CAAC;IAC1C,MAAM,YAAY,GACjB,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAA,gDAAyB,EAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACtE,CAAC"}
|
|
@@ -14,6 +14,7 @@ export declare class Resolver {
|
|
|
14
14
|
listAt(scope: Scope, opts?: {
|
|
15
15
|
limit?: number;
|
|
16
16
|
cursor?: string;
|
|
17
|
+
category?: string;
|
|
17
18
|
}): Promise<ListAtPage>;
|
|
18
19
|
getMany(keys: string[], scope: Scope, asOf?: Date): Promise<Record<string, Value>>;
|
|
19
20
|
private resolveMissing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/engine/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,KAAK,EACL,cAAc,EACd,KAAK,EAEL,MAAM,eAAe,CAAC;AAQvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,QAAQ;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAFN,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,cAAc,YAAA,EAC1B,KAAK,CAAC,EAAE,KAAK,YAAA;IAGzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAK3D,MAAM,CACX,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/engine/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,KAAK,EACL,cAAc,EACd,KAAK,EAEL,MAAM,eAAe,CAAC;AAQvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAAa,QAAQ;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAFN,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,cAAc,YAAA,EAC1B,KAAK,CAAC,EAAE,KAAK,YAAA;IAGzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IAK3D,MAAM,CACX,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/D,OAAO,CAAC,UAAU,CAAC;IAwBhB,OAAO,CACZ,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,IAAI,GACT,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAwGnB,cAAc;YA+Bd,OAAO;IASrB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,MAAM;CAoBd"}
|
package/dist/engine/resolver.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/engine/resolver.ts"],"names":[],"mappings":";;;AAOA,yCAA8C;AAC9C,2CAKwB;AASxB,MAAa,QAAQ;IAEF;IACA;IACA;IAHlB,YACkB,OAAsB,EACtB,SAA0B,EAC1B,KAAa;QAFb,YAAO,GAAP,OAAO,CAAe;QACtB,cAAS,GAAT,SAAS,CAAiB;QAC1B,UAAK,GAAL,KAAK,CAAQ;IAC5B,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAY,EAAE,IAAW;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CACX,KAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/engine/resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,10 @@ export * from './engine/resolver';
|
|
|
9
9
|
export * from './engine/writer';
|
|
10
10
|
export * from './engine/auditor';
|
|
11
11
|
export * from './engine/hierarchy-cache-sync';
|
|
12
|
+
export * from './engine/category-integrity';
|
|
12
13
|
export * from './engine/engine';
|
|
13
14
|
export * from './typed/registry';
|
|
15
|
+
export * from './typed/category-guard';
|
|
14
16
|
export * from './typed/typed-resolver';
|
|
15
17
|
export * from './typed/typed-writer';
|
|
16
18
|
export * from './typed/typed-auditor';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -25,8 +25,10 @@ __exportStar(require("./engine/resolver"), exports);
|
|
|
25
25
|
__exportStar(require("./engine/writer"), exports);
|
|
26
26
|
__exportStar(require("./engine/auditor"), exports);
|
|
27
27
|
__exportStar(require("./engine/hierarchy-cache-sync"), exports);
|
|
28
|
+
__exportStar(require("./engine/category-integrity"), exports);
|
|
28
29
|
__exportStar(require("./engine/engine"), exports);
|
|
29
30
|
__exportStar(require("./typed/registry"), exports);
|
|
31
|
+
__exportStar(require("./typed/category-guard"), exports);
|
|
30
32
|
__exportStar(require("./typed/typed-resolver"), exports);
|
|
31
33
|
__exportStar(require("./typed/typed-writer"), exports);
|
|
32
34
|
__exportStar(require("./typed/typed-auditor"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,gDAA8B;AAC9B,qDAAmC;AACnC,gDAA8B;AAC9B,8DAA4C;AAC5C,yDAAuC;AACvC,2DAAyC;AACzC,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,gEAA8C;AAC9C,kDAAgC;AAChC,mDAAiC;AACjC,yDAAuC;AACvC,uDAAqC;AACrC,wDAAsC;AACtC,uDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,gDAA8B;AAC9B,qDAAmC;AACnC,gDAA8B;AAC9B,8DAA4C;AAC5C,yDAAuC;AACvC,2DAAyC;AACzC,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,gEAA8C;AAC9C,8DAA4C;AAC5C,kDAAgC;AAChC,mDAAiC;AACjC,yDAAuC;AACvC,yDAAuC;AACvC,uDAAqC;AACrC,wDAAsC;AACtC,uDAAqC"}
|
package/dist/index.mjs
CHANGED
|
@@ -61,6 +61,14 @@ var CycleError = class extends ConfTreeError {
|
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
+
var CategoryError = class extends ConfTreeError {
|
|
65
|
+
constructor(key, expectedCategory, actualCategory) {
|
|
66
|
+
super(
|
|
67
|
+
`Setting "${key}" has category "${actualCategory ?? "none"}", which does not match "${expectedCategory ?? "none"}"`,
|
|
68
|
+
"CATEGORY"
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
64
72
|
|
|
65
73
|
// src/cache/change-bus.ts
|
|
66
74
|
var LocalBus = class {
|
|
@@ -290,8 +298,11 @@ var MemoryStorageAdapter = class {
|
|
|
290
298
|
}
|
|
291
299
|
async listValues(query) {
|
|
292
300
|
const now = /* @__PURE__ */ new Date();
|
|
301
|
+
const categoryDefIds = query.category !== void 0 ? new Set(
|
|
302
|
+
this.defs.filter((d) => d.category === query.category).map((d) => d.id)
|
|
303
|
+
) : null;
|
|
293
304
|
const active = this.values.filter(
|
|
294
|
-
(v) => v.scopeKind === query.scopeKind && v.scopeRefId === query.scopeRefId && v.validFrom <= now && (v.validTo === null || v.validTo > now)
|
|
305
|
+
(v) => v.scopeKind === query.scopeKind && v.scopeRefId === query.scopeRefId && (categoryDefIds === null || categoryDefIds.has(v.definitionId)) && v.validFrom <= now && (v.validTo === null || v.validTo > now)
|
|
295
306
|
).sort((a, b) => a.id.localeCompare(b.id));
|
|
296
307
|
const startIndex = query.cursor ? active.findIndex((v) => v.id === query.cursor) + 1 : 0;
|
|
297
308
|
const limit = query.limit ?? active.length - startIndex;
|
|
@@ -334,12 +345,20 @@ var MemoryStorageAdapter = class {
|
|
|
334
345
|
this.defs = this.defs.map((d) => d === current ? updated : d);
|
|
335
346
|
return updated;
|
|
336
347
|
}
|
|
337
|
-
async listDefs(status) {
|
|
338
|
-
const rows =
|
|
339
|
-
|
|
348
|
+
async listDefs(status, category) {
|
|
349
|
+
const rows = this.allLatestVersions().filter(
|
|
350
|
+
(d) => (status === void 0 || d.status === status) && (category === void 0 || d.category === category)
|
|
351
|
+
);
|
|
352
|
+
return rows.sort(
|
|
340
353
|
(a, b) => (a.category ?? "").localeCompare(b.category ?? "") || a.key.localeCompare(b.key)
|
|
341
354
|
);
|
|
342
355
|
}
|
|
356
|
+
async listCategories() {
|
|
357
|
+
const categories = new Set(
|
|
358
|
+
this.allLatestVersions().map((d) => d.category).filter((c) => c !== null)
|
|
359
|
+
);
|
|
360
|
+
return [...categories].sort();
|
|
361
|
+
}
|
|
343
362
|
async transact(fn) {
|
|
344
363
|
const run = this.txQueue.then(async () => {
|
|
345
364
|
const valuesSnapshot = structuredClone(this.values);
|
|
@@ -363,6 +382,14 @@ var MemoryStorageAdapter = class {
|
|
|
363
382
|
latestVersion(key) {
|
|
364
383
|
return this.defs.filter((d) => d.key === key).sort((a, b) => b.version - a.version)[0];
|
|
365
384
|
}
|
|
385
|
+
allLatestVersions() {
|
|
386
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
387
|
+
for (const d of this.defs) {
|
|
388
|
+
const current = byKey.get(d.key);
|
|
389
|
+
if (!current || d.version > current.version) byKey.set(d.key, d);
|
|
390
|
+
}
|
|
391
|
+
return [...byKey.values()];
|
|
392
|
+
}
|
|
366
393
|
tx() {
|
|
367
394
|
return {
|
|
368
395
|
findDef: async (key) => this.latestByStatus(key, ["STABLE"]) ?? null,
|
|
@@ -418,6 +445,7 @@ var Resolver = class {
|
|
|
418
445
|
const { values, nextCursor } = await this.storage.listValues({
|
|
419
446
|
scopeKind: scope.kind,
|
|
420
447
|
scopeRefId: scope.refId,
|
|
448
|
+
category: opts.category,
|
|
421
449
|
limit: opts.limit,
|
|
422
450
|
cursor: opts.cursor
|
|
423
451
|
});
|
|
@@ -831,9 +859,40 @@ function withHierarchyInvalidation(hierarchy, cache) {
|
|
|
831
859
|
};
|
|
832
860
|
}
|
|
833
861
|
|
|
862
|
+
// src/engine/category-integrity.ts
|
|
863
|
+
function withCategoryIntegrity(storage) {
|
|
864
|
+
return {
|
|
865
|
+
findDefs: (keys) => storage.findDefs(keys),
|
|
866
|
+
findDefsByIds: (ids) => storage.findDefsByIds(ids),
|
|
867
|
+
findAnyDef: (key) => storage.findAnyDef(key),
|
|
868
|
+
findValues: (query) => storage.findValues(query),
|
|
869
|
+
findChainValues: (query) => storage.findChainValues(query),
|
|
870
|
+
findAudit: (query) => storage.findAudit(query),
|
|
871
|
+
listValues: (query) => storage.listValues(query),
|
|
872
|
+
listDefs: (status, category) => storage.listDefs(status, category),
|
|
873
|
+
listCategories: () => storage.listCategories(),
|
|
874
|
+
updateDefStatus: (key, status) => storage.updateDefStatus(key, status),
|
|
875
|
+
transact: (fn) => storage.transact(fn),
|
|
876
|
+
createDef: async (input) => {
|
|
877
|
+
const existing = await storage.findAnyDef(input.key);
|
|
878
|
+
const newCategory = input.category ?? null;
|
|
879
|
+
if (existing && existing.category !== newCategory) {
|
|
880
|
+
throw new CategoryError(
|
|
881
|
+
input.key,
|
|
882
|
+
existing.category,
|
|
883
|
+
newCategory
|
|
884
|
+
);
|
|
885
|
+
}
|
|
886
|
+
return storage.createDef(input);
|
|
887
|
+
}
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
|
|
834
891
|
// src/engine/engine.ts
|
|
835
892
|
function createEngine(options = {}) {
|
|
836
|
-
const storage =
|
|
893
|
+
const storage = withCategoryIntegrity(
|
|
894
|
+
options.storage ?? new MemoryStorageAdapter()
|
|
895
|
+
);
|
|
837
896
|
const rawHierarchy = options.hierarchy ?? new LocalScopeHierarchy();
|
|
838
897
|
const bus = options.bus ?? new LocalBus();
|
|
839
898
|
const cacheOptions = options.cache === false ? { enabled: false } : options.cache ?? {};
|
|
@@ -845,64 +904,111 @@ function createEngine(options = {}) {
|
|
|
845
904
|
return { storage, hierarchy, bus, cache, resolver, writer, auditor };
|
|
846
905
|
}
|
|
847
906
|
|
|
907
|
+
// src/typed/category-guard.ts
|
|
908
|
+
var CategoryGuard = class {
|
|
909
|
+
constructor(storage, category) {
|
|
910
|
+
this.storage = storage;
|
|
911
|
+
this.category = category;
|
|
912
|
+
}
|
|
913
|
+
storage;
|
|
914
|
+
category;
|
|
915
|
+
async assert(key) {
|
|
916
|
+
const def = await this.storage.findAnyDef(key);
|
|
917
|
+
if (def && def.category !== this.category) {
|
|
918
|
+
throw new CategoryError(key, this.category, def.category);
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
async assertAll(keys) {
|
|
922
|
+
await Promise.all([...keys].map((key) => this.assert(key)));
|
|
923
|
+
}
|
|
924
|
+
};
|
|
925
|
+
|
|
848
926
|
// src/typed/typed-resolver.ts
|
|
849
927
|
var TypedResolver = class {
|
|
850
|
-
constructor(resolver) {
|
|
928
|
+
constructor(resolver, fixedCategory, guard) {
|
|
851
929
|
this.resolver = resolver;
|
|
930
|
+
this.fixedCategory = fixedCategory;
|
|
931
|
+
this.guard = guard;
|
|
852
932
|
}
|
|
853
933
|
resolver;
|
|
854
|
-
|
|
934
|
+
fixedCategory;
|
|
935
|
+
guard;
|
|
936
|
+
async get(key, scope, asOf) {
|
|
937
|
+
await this.guard?.assert(key);
|
|
855
938
|
return this.resolver.get(key, scope, asOf);
|
|
856
939
|
}
|
|
857
940
|
async getMany(keys, scope, asOf) {
|
|
941
|
+
await this.guard?.assertAll(keys);
|
|
858
942
|
const result = await this.resolver.getMany([...keys], scope, asOf);
|
|
859
943
|
return result;
|
|
860
944
|
}
|
|
861
945
|
async listAt(scope, opts = {}) {
|
|
862
|
-
const page = await this.resolver.listAt(scope,
|
|
946
|
+
const page = await this.resolver.listAt(scope, {
|
|
947
|
+
...opts,
|
|
948
|
+
category: this.fixedCategory
|
|
949
|
+
});
|
|
863
950
|
return page;
|
|
864
951
|
}
|
|
865
952
|
};
|
|
866
953
|
|
|
867
954
|
// src/typed/typed-writer.ts
|
|
868
955
|
var TypedWriter = class {
|
|
869
|
-
constructor(writer) {
|
|
956
|
+
constructor(writer, guard) {
|
|
870
957
|
this.writer = writer;
|
|
958
|
+
this.guard = guard;
|
|
871
959
|
}
|
|
872
960
|
writer;
|
|
873
|
-
|
|
961
|
+
guard;
|
|
962
|
+
async set(params) {
|
|
963
|
+
await this.guard?.assert(params.key);
|
|
874
964
|
return this.writer.set(params);
|
|
875
965
|
}
|
|
876
|
-
setMany(paramsList) {
|
|
966
|
+
async setMany(paramsList) {
|
|
967
|
+
await this.guard?.assertAll(paramsList.map((p) => p.key));
|
|
877
968
|
return this.writer.setMany(paramsList);
|
|
878
969
|
}
|
|
879
|
-
unset(params) {
|
|
970
|
+
async unset(params) {
|
|
971
|
+
await this.guard?.assert(params.key);
|
|
880
972
|
return this.writer.unset(params);
|
|
881
973
|
}
|
|
882
974
|
};
|
|
883
975
|
|
|
884
976
|
// src/typed/typed-auditor.ts
|
|
885
977
|
var TypedAuditor = class {
|
|
886
|
-
constructor(auditor) {
|
|
978
|
+
constructor(auditor, guard) {
|
|
887
979
|
this.auditor = auditor;
|
|
980
|
+
this.guard = guard;
|
|
888
981
|
}
|
|
889
982
|
auditor;
|
|
890
|
-
|
|
983
|
+
guard;
|
|
984
|
+
async history(key, scope) {
|
|
985
|
+
await this.guard?.assert(key);
|
|
891
986
|
return this.auditor.history(key, scope);
|
|
892
987
|
}
|
|
893
988
|
};
|
|
894
989
|
|
|
895
990
|
// src/typed/typed-engine.ts
|
|
896
991
|
function createTypedEngine(engine) {
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
992
|
+
function build(fixedCategory) {
|
|
993
|
+
const guard = fixedCategory ? new CategoryGuard(engine.storage, fixedCategory) : void 0;
|
|
994
|
+
return {
|
|
995
|
+
resolver: new TypedResolver(
|
|
996
|
+
engine.resolver,
|
|
997
|
+
fixedCategory,
|
|
998
|
+
guard
|
|
999
|
+
),
|
|
1000
|
+
writer: new TypedWriter(engine.writer, guard),
|
|
1001
|
+
auditor: new TypedAuditor(engine.auditor, guard),
|
|
1002
|
+
category: (category) => build(category)
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
1005
|
+
return build();
|
|
902
1006
|
}
|
|
903
1007
|
export {
|
|
904
1008
|
Auditor,
|
|
905
1009
|
Cache,
|
|
1010
|
+
CategoryError,
|
|
1011
|
+
CategoryGuard,
|
|
906
1012
|
ConfTreeError,
|
|
907
1013
|
ConflictError,
|
|
908
1014
|
CorruptError,
|
|
@@ -922,6 +1028,7 @@ export {
|
|
|
922
1028
|
Writer,
|
|
923
1029
|
createEngine,
|
|
924
1030
|
createTypedEngine,
|
|
1031
|
+
withCategoryIntegrity,
|
|
925
1032
|
withHierarchyInvalidation
|
|
926
1033
|
};
|
|
927
1034
|
//# sourceMappingURL=index.mjs.map
|