conftree 0.2.0 → 0.3.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.
- package/README.md +42 -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/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 +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +93 -18
- 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,44 @@ 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
|
+
|
|
132
170
|
### Writing an adapter
|
|
133
171
|
|
|
134
172
|
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 +174,16 @@ Implement `StorageAdapter`, `ScopeHierarchy`, or `ChangeBus`, all defined in `sr
|
|
|
136
174
|
## API
|
|
137
175
|
|
|
138
176
|
- `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? })`
|
|
177
|
+
- `resolver.get(key, scope, asOf?)`, `resolver.getMany(keys, scope, asOf?)`, `resolver.listAt(scope, { limit?, cursor?, category? })`
|
|
140
178
|
- `writer.set(params)`, `writer.setMany(paramsList)`, `writer.unset(params)`
|
|
141
179
|
- `auditor.history(key, scope?)`
|
|
142
180
|
- `storage.updateDefStatus(key, status)`
|
|
143
|
-
- `
|
|
181
|
+
- `storage.listDefs(status?, category?)`, `storage.listCategories()`
|
|
182
|
+
- `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
183
|
|
|
145
184
|
### Errors
|
|
146
185
|
|
|
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`.
|
|
186
|
+
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
187
|
|
|
149
188
|
## License
|
|
150
189
|
|
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, 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,EACxB,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}" belongs to category "${actualCategory ?? 'none'}", not "${expectedCategory}"`, '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,gBAAwB,EACxB,cAA6B;QAE7B,KAAK,CACJ,YAAY,GAAG,0BAA0B,cAAc,IAAI,MAAM,WAAW,gBAAgB,GAAG,EAC/F,UAAU,CACV,CAAC;IACH,CAAC;CACD;AAXD,sCAWC"}
|
|
@@ -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
|
@@ -11,6 +11,7 @@ export * from './engine/auditor';
|
|
|
11
11
|
export * from './engine/hierarchy-cache-sync';
|
|
12
12
|
export * from './engine/engine';
|
|
13
13
|
export * from './typed/registry';
|
|
14
|
+
export * from './typed/category-guard';
|
|
14
15
|
export * from './typed/typed-resolver';
|
|
15
16
|
export * from './typed/typed-writer';
|
|
16
17
|
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,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
|
@@ -27,6 +27,7 @@ __exportStar(require("./engine/auditor"), exports);
|
|
|
27
27
|
__exportStar(require("./engine/hierarchy-cache-sync"), exports);
|
|
28
28
|
__exportStar(require("./engine/engine"), exports);
|
|
29
29
|
__exportStar(require("./typed/registry"), exports);
|
|
30
|
+
__exportStar(require("./typed/category-guard"), exports);
|
|
30
31
|
__exportStar(require("./typed/typed-resolver"), exports);
|
|
31
32
|
__exportStar(require("./typed/typed-writer"), exports);
|
|
32
33
|
__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,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}" belongs to category "${actualCategory ?? "none"}", not "${expectedCategory}"`,
|
|
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
|
});
|
|
@@ -845,64 +873,111 @@ function createEngine(options = {}) {
|
|
|
845
873
|
return { storage, hierarchy, bus, cache, resolver, writer, auditor };
|
|
846
874
|
}
|
|
847
875
|
|
|
876
|
+
// src/typed/category-guard.ts
|
|
877
|
+
var CategoryGuard = class {
|
|
878
|
+
constructor(storage, category) {
|
|
879
|
+
this.storage = storage;
|
|
880
|
+
this.category = category;
|
|
881
|
+
}
|
|
882
|
+
storage;
|
|
883
|
+
category;
|
|
884
|
+
async assert(key) {
|
|
885
|
+
const def = await this.storage.findAnyDef(key);
|
|
886
|
+
if (def && def.category !== this.category) {
|
|
887
|
+
throw new CategoryError(key, this.category, def.category);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
async assertAll(keys) {
|
|
891
|
+
await Promise.all([...keys].map((key) => this.assert(key)));
|
|
892
|
+
}
|
|
893
|
+
};
|
|
894
|
+
|
|
848
895
|
// src/typed/typed-resolver.ts
|
|
849
896
|
var TypedResolver = class {
|
|
850
|
-
constructor(resolver) {
|
|
897
|
+
constructor(resolver, fixedCategory, guard) {
|
|
851
898
|
this.resolver = resolver;
|
|
899
|
+
this.fixedCategory = fixedCategory;
|
|
900
|
+
this.guard = guard;
|
|
852
901
|
}
|
|
853
902
|
resolver;
|
|
854
|
-
|
|
903
|
+
fixedCategory;
|
|
904
|
+
guard;
|
|
905
|
+
async get(key, scope, asOf) {
|
|
906
|
+
await this.guard?.assert(key);
|
|
855
907
|
return this.resolver.get(key, scope, asOf);
|
|
856
908
|
}
|
|
857
909
|
async getMany(keys, scope, asOf) {
|
|
910
|
+
await this.guard?.assertAll(keys);
|
|
858
911
|
const result = await this.resolver.getMany([...keys], scope, asOf);
|
|
859
912
|
return result;
|
|
860
913
|
}
|
|
861
914
|
async listAt(scope, opts = {}) {
|
|
862
|
-
const page = await this.resolver.listAt(scope,
|
|
915
|
+
const page = await this.resolver.listAt(scope, {
|
|
916
|
+
...opts,
|
|
917
|
+
category: this.fixedCategory
|
|
918
|
+
});
|
|
863
919
|
return page;
|
|
864
920
|
}
|
|
865
921
|
};
|
|
866
922
|
|
|
867
923
|
// src/typed/typed-writer.ts
|
|
868
924
|
var TypedWriter = class {
|
|
869
|
-
constructor(writer) {
|
|
925
|
+
constructor(writer, guard) {
|
|
870
926
|
this.writer = writer;
|
|
927
|
+
this.guard = guard;
|
|
871
928
|
}
|
|
872
929
|
writer;
|
|
873
|
-
|
|
930
|
+
guard;
|
|
931
|
+
async set(params) {
|
|
932
|
+
await this.guard?.assert(params.key);
|
|
874
933
|
return this.writer.set(params);
|
|
875
934
|
}
|
|
876
|
-
setMany(paramsList) {
|
|
935
|
+
async setMany(paramsList) {
|
|
936
|
+
await this.guard?.assertAll(paramsList.map((p) => p.key));
|
|
877
937
|
return this.writer.setMany(paramsList);
|
|
878
938
|
}
|
|
879
|
-
unset(params) {
|
|
939
|
+
async unset(params) {
|
|
940
|
+
await this.guard?.assert(params.key);
|
|
880
941
|
return this.writer.unset(params);
|
|
881
942
|
}
|
|
882
943
|
};
|
|
883
944
|
|
|
884
945
|
// src/typed/typed-auditor.ts
|
|
885
946
|
var TypedAuditor = class {
|
|
886
|
-
constructor(auditor) {
|
|
947
|
+
constructor(auditor, guard) {
|
|
887
948
|
this.auditor = auditor;
|
|
949
|
+
this.guard = guard;
|
|
888
950
|
}
|
|
889
951
|
auditor;
|
|
890
|
-
|
|
952
|
+
guard;
|
|
953
|
+
async history(key, scope) {
|
|
954
|
+
await this.guard?.assert(key);
|
|
891
955
|
return this.auditor.history(key, scope);
|
|
892
956
|
}
|
|
893
957
|
};
|
|
894
958
|
|
|
895
959
|
// src/typed/typed-engine.ts
|
|
896
960
|
function createTypedEngine(engine) {
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
961
|
+
function build(fixedCategory) {
|
|
962
|
+
const guard = fixedCategory ? new CategoryGuard(engine.storage, fixedCategory) : void 0;
|
|
963
|
+
return {
|
|
964
|
+
resolver: new TypedResolver(
|
|
965
|
+
engine.resolver,
|
|
966
|
+
fixedCategory,
|
|
967
|
+
guard
|
|
968
|
+
),
|
|
969
|
+
writer: new TypedWriter(engine.writer, guard),
|
|
970
|
+
auditor: new TypedAuditor(engine.auditor, guard),
|
|
971
|
+
category: (category) => build(category)
|
|
972
|
+
};
|
|
973
|
+
}
|
|
974
|
+
return build();
|
|
902
975
|
}
|
|
903
976
|
export {
|
|
904
977
|
Auditor,
|
|
905
978
|
Cache,
|
|
979
|
+
CategoryError,
|
|
980
|
+
CategoryGuard,
|
|
906
981
|
ConfTreeError,
|
|
907
982
|
ConflictError,
|
|
908
983
|
CorruptError,
|