conftree 0.1.1 → 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.
Files changed (52) hide show
  1. package/README.md +50 -3
  2. package/dist/cache/cache.d.ts +2 -0
  3. package/dist/cache/cache.d.ts.map +1 -1
  4. package/dist/cache/cache.js +5 -1
  5. package/dist/cache/cache.js.map +1 -1
  6. package/dist/cache/change-bus.d.ts +5 -2
  7. package/dist/cache/change-bus.d.ts.map +1 -1
  8. package/dist/cache/change-bus.js +3 -0
  9. package/dist/cache/change-bus.js.map +1 -1
  10. package/dist/core/errors.d.ts +4 -1
  11. package/dist/core/errors.d.ts.map +1 -1
  12. package/dist/core/errors.js +7 -1
  13. package/dist/core/errors.js.map +1 -1
  14. package/dist/engine/resolver.d.ts +1 -0
  15. package/dist/engine/resolver.d.ts.map +1 -1
  16. package/dist/engine/resolver.js +1 -0
  17. package/dist/engine/resolver.js.map +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +104 -20
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/storage/memory-storage.d.ts +3 -1
  25. package/dist/storage/memory-storage.d.ts.map +1 -1
  26. package/dist/storage/memory-storage.js +30 -7
  27. package/dist/storage/memory-storage.js.map +1 -1
  28. package/dist/storage/storage-port.d.ts +3 -1
  29. package/dist/storage/storage-port.d.ts.map +1 -1
  30. package/dist/typed/category-guard.d.ts +9 -0
  31. package/dist/typed/category-guard.d.ts.map +1 -0
  32. package/dist/typed/category-guard.js +23 -0
  33. package/dist/typed/category-guard.js.map +1 -0
  34. package/dist/typed/registry.d.ts +8 -3
  35. package/dist/typed/registry.d.ts.map +1 -1
  36. package/dist/typed/typed-auditor.d.ts +3 -1
  37. package/dist/typed/typed-auditor.d.ts.map +1 -1
  38. package/dist/typed/typed-auditor.js +5 -2
  39. package/dist/typed/typed-auditor.js.map +1 -1
  40. package/dist/typed/typed-engine.d.ts +2 -0
  41. package/dist/typed/typed-engine.d.ts.map +1 -1
  42. package/dist/typed/typed-engine.js +13 -5
  43. package/dist/typed/typed-engine.js.map +1 -1
  44. package/dist/typed/typed-resolver.d.ts +4 -1
  45. package/dist/typed/typed-resolver.d.ts.map +1 -1
  46. package/dist/typed/typed-resolver.js +12 -3
  47. package/dist/typed/typed-resolver.js.map +1 -1
  48. package/dist/typed/typed-writer.d.ts +3 -1
  49. package/dist/typed/typed-writer.d.ts.map +1 -1
  50. package/dist/typed/typed-writer.js +9 -4
  51. package/dist/typed/typed-writer.js.map +1 -1
  52. package/package.json +1 -1
package/README.md CHANGED
@@ -81,6 +81,14 @@ const { resolver, writer } = createEngine({
81
81
  });
82
82
  ```
83
83
 
84
+ If you create engines repeatedly against a shared, long-lived bus (e.g. a Redis-backed one in a server process), call `cache.dispose()` when an engine is no longer needed — otherwise its cache stays subscribed to the bus forever:
85
+
86
+ ```ts
87
+ const { cache } = createEngine({ bus: sharedRedisBus });
88
+ // ...later, e.g. on module teardown:
89
+ cache.dispose();
90
+ ```
91
+
84
92
  ### Value types
85
93
 
86
94
  `BOOLEAN`, `NUMERIC`, `TEXT`, `ENUM`, `JSON`, `DATE`.
@@ -121,6 +129,44 @@ await resolver.get('ui.theme', { kind: 'user', refId: 'u1' }); // typed 'light'
121
129
 
122
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.
123
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
+
124
170
  ### Writing an adapter
125
171
 
126
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.
@@ -128,15 +174,16 @@ Implement `StorageAdapter`, `ScopeHierarchy`, or `ChangeBus`, all defined in `sr
128
174
  ## API
129
175
 
130
176
  - `createEngine(options?)`: returns `{ storage, hierarchy, bus, cache, resolver, writer, auditor }`.
131
- - `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? })`
132
178
  - `writer.set(params)`, `writer.setMany(paramsList)`, `writer.unset(params)`
133
179
  - `auditor.history(key, scope?)`
134
180
  - `storage.updateDefStatus(key, status)`
135
- - `createTypedEngine<Registry>(engine)`: returns `{ resolver, writer, auditor }` typed against your own key/value/scope registry.
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.
136
183
 
137
184
  ### Errors
138
185
 
139
- 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`.
140
187
 
141
188
  ## License
142
189
 
@@ -10,7 +10,9 @@ export declare class Cache {
10
10
  private readonly options;
11
11
  private readonly hierarchy?;
12
12
  private readonly store;
13
+ private readonly listener;
13
14
  constructor(bus: ChangeBus, options?: CacheOptions, hierarchy?: ScopeHierarchy | undefined);
15
+ dispose(): void;
14
16
  get(key: string, scope: Scope): Value | undefined;
15
17
  set(key: string, scope: Scope, value: Value): void;
16
18
  drop(key: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,qBAAa,KAAK;IAIhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAL5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;gBAGhC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,YAAiB,EAC1B,SAAS,CAAC,EAAE,cAAc,YAAA;IAK5C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS;IAYjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAoBlD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvB,OAAO,IAAI,IAAI;IAIf,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAUlD,OAAO,CAAC,UAAU;YAaJ,QAAQ;IAatB,OAAO,CAAC,MAAM;CAGd"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAA+B,MAAM,cAAc,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,qBAAa,KAAK;IAKhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAN5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmD;gBAG1D,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,YAAiB,EAC1B,SAAS,CAAC,EAAE,cAAc,YAAA;IAK5C,OAAO,IAAI,IAAI;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS;IAYjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAoBlD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvB,OAAO,IAAI,IAAI;IAIf,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAUlD,OAAO,CAAC,UAAU;YAaJ,QAAQ;IAatB,OAAO,CAAC,MAAM;CAGd"}
@@ -8,11 +8,15 @@ class Cache {
8
8
  options;
9
9
  hierarchy;
10
10
  store = new Map();
11
+ listener = (event) => this.onChange(event);
11
12
  constructor(bus, options = {}, hierarchy) {
12
13
  this.bus = bus;
13
14
  this.options = options;
14
15
  this.hierarchy = hierarchy;
15
- this.bus.subscribe((event) => this.onChange(event));
16
+ this.bus.subscribe(this.listener);
17
+ }
18
+ dispose() {
19
+ this.bus.unsubscribe(this.listener);
16
20
  }
17
21
  get(key, scope) {
18
22
  if (this.options.enabled === false)
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,16 @@ export interface ChangeEvent {
4
4
  scopeKind: string;
5
5
  scopeRefId: string | null;
6
6
  }
7
+ export type ChangeListener = (event: ChangeEvent) => void | Promise<void>;
7
8
  export interface ChangeBus {
8
9
  publish(event: ChangeEvent): Promise<void>;
9
- subscribe(listener: (event: ChangeEvent) => void | Promise<void>): void;
10
+ subscribe(listener: ChangeListener): void;
11
+ unsubscribe(listener: ChangeListener): void;
10
12
  }
11
13
  export declare class LocalBus implements ChangeBus {
12
14
  private readonly listeners;
13
15
  publish(event: ChangeEvent): Promise<void>;
14
- subscribe(listener: (event: ChangeEvent) => void | Promise<void>): void;
16
+ subscribe(listener: ChangeListener): void;
17
+ unsubscribe(listener: ChangeListener): void;
15
18
  }
16
19
  //# sourceMappingURL=change-bus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-bus.d.ts","sourceRoot":"","sources":["../../src/cache/change-bus.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACzB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACxE;AAED,qBAAa,QAAS,YAAW,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEtB;IAEE,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGvE"}
1
+ {"version":3,"file":"change-bus.d.ts","sourceRoot":"","sources":["../../src/cache/change-bus.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1E,MAAM,WAAW,SAAS;IACzB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAC1C,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CAC5C;AAED,qBAAa,QAAS,YAAW,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IAEjD,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAIzC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAG3C"}
@@ -9,6 +9,9 @@ class LocalBus {
9
9
  subscribe(listener) {
10
10
  this.listeners.add(listener);
11
11
  }
12
+ unsubscribe(listener) {
13
+ this.listeners.delete(listener);
14
+ }
12
15
  }
13
16
  exports.LocalBus = LocalBus;
14
17
  //# sourceMappingURL=change-bus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-bus.js","sourceRoot":"","sources":["../../src/cache/change-bus.ts"],"names":[],"mappings":";;;AAYA,MAAa,QAAQ;IACH,SAAS,GAAG,IAAI,GAAG,EAEjC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAkB;QAC/B,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACpC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAChC,CACD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAsD;QAC/D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACD;AAhBD,4BAgBC"}
1
+ {"version":3,"file":"change-bus.js","sourceRoot":"","sources":["../../src/cache/change-bus.ts"],"names":[],"mappings":";;;AAeA,MAAa,QAAQ;IACH,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvD,KAAK,CAAC,OAAO,CAAC,KAAkB;QAC/B,MAAM,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACpC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAChC,CACD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAwB;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,QAAwB;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CACD;AAlBD,4BAkBC"}
@@ -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;AAEX,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"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":";;;AASA,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"}
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,GAC5C,OAAO,CAAC,UAAU,CAAC;IAuBhB,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"}
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"}
@@ -20,6 +20,7 @@ class Resolver {
20
20
  const { values, nextCursor } = await this.storage.listValues({
21
21
  scopeKind: scope.kind,
22
22
  scopeRefId: scope.refId,
23
+ category: opts.category,
23
24
  limit: opts.limit,
24
25
  cursor: opts.cursor,
25
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/engine/resolver.ts"],"names":[],"mappings":"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"}
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';
@@ -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 {
@@ -75,6 +83,9 @@ var LocalBus = class {
75
83
  subscribe(listener) {
76
84
  this.listeners.add(listener);
77
85
  }
86
+ unsubscribe(listener) {
87
+ this.listeners.delete(listener);
88
+ }
78
89
  };
79
90
 
80
91
  // src/cache/cache.ts
@@ -85,12 +96,16 @@ var Cache = class {
85
96
  this.bus = bus;
86
97
  this.options = options;
87
98
  this.hierarchy = hierarchy;
88
- this.bus.subscribe((event) => this.onChange(event));
99
+ this.bus.subscribe(this.listener);
89
100
  }
90
101
  bus;
91
102
  options;
92
103
  hierarchy;
93
104
  store = /* @__PURE__ */ new Map();
105
+ listener = (event) => this.onChange(event);
106
+ dispose() {
107
+ this.bus.unsubscribe(this.listener);
108
+ }
94
109
  get(key, scope) {
95
110
  if (this.options.enabled === false) return void 0;
96
111
  const cacheKey = this.keyFor(key, scope);
@@ -283,8 +298,11 @@ var MemoryStorageAdapter = class {
283
298
  }
284
299
  async listValues(query) {
285
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;
286
304
  const active = this.values.filter(
287
- (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)
288
306
  ).sort((a, b) => a.id.localeCompare(b.id));
289
307
  const startIndex = query.cursor ? active.findIndex((v) => v.id === query.cursor) + 1 : 0;
290
308
  const limit = query.limit ?? active.length - startIndex;
@@ -327,12 +345,20 @@ var MemoryStorageAdapter = class {
327
345
  this.defs = this.defs.map((d) => d === current ? updated : d);
328
346
  return updated;
329
347
  }
330
- async listDefs(status) {
331
- const rows = status ? this.defs.filter((d) => d.status === status) : this.defs;
332
- return [...rows].sort(
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(
333
353
  (a, b) => (a.category ?? "").localeCompare(b.category ?? "") || a.key.localeCompare(b.key)
334
354
  );
335
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
+ }
336
362
  async transact(fn) {
337
363
  const run = this.txQueue.then(async () => {
338
364
  const valuesSnapshot = structuredClone(this.values);
@@ -356,6 +382,14 @@ var MemoryStorageAdapter = class {
356
382
  latestVersion(key) {
357
383
  return this.defs.filter((d) => d.key === key).sort((a, b) => b.version - a.version)[0];
358
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
+ }
359
393
  tx() {
360
394
  return {
361
395
  findDef: async (key) => this.latestByStatus(key, ["STABLE"]) ?? null,
@@ -364,7 +398,9 @@ var MemoryStorageAdapter = class {
364
398
  ) ?? null,
365
399
  closeValue: async (id) => {
366
400
  const row = this.values.find((v) => v.id === id);
367
- if (row) row.validTo = /* @__PURE__ */ new Date();
401
+ if (!row) return;
402
+ const closed = { ...row, validTo: /* @__PURE__ */ new Date() };
403
+ this.values = this.values.map((v) => v === row ? closed : v);
368
404
  },
369
405
  createValue: async (input) => {
370
406
  const record = {
@@ -409,6 +445,7 @@ var Resolver = class {
409
445
  const { values, nextCursor } = await this.storage.listValues({
410
446
  scopeKind: scope.kind,
411
447
  scopeRefId: scope.refId,
448
+ category: opts.category,
412
449
  limit: opts.limit,
413
450
  cursor: opts.cursor
414
451
  });
@@ -836,64 +873,111 @@ function createEngine(options = {}) {
836
873
  return { storage, hierarchy, bus, cache, resolver, writer, auditor };
837
874
  }
838
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
+
839
895
  // src/typed/typed-resolver.ts
840
896
  var TypedResolver = class {
841
- constructor(resolver) {
897
+ constructor(resolver, fixedCategory, guard) {
842
898
  this.resolver = resolver;
899
+ this.fixedCategory = fixedCategory;
900
+ this.guard = guard;
843
901
  }
844
902
  resolver;
845
- get(key, scope, asOf) {
903
+ fixedCategory;
904
+ guard;
905
+ async get(key, scope, asOf) {
906
+ await this.guard?.assert(key);
846
907
  return this.resolver.get(key, scope, asOf);
847
908
  }
848
909
  async getMany(keys, scope, asOf) {
910
+ await this.guard?.assertAll(keys);
849
911
  const result = await this.resolver.getMany([...keys], scope, asOf);
850
912
  return result;
851
913
  }
852
914
  async listAt(scope, opts = {}) {
853
- const page = await this.resolver.listAt(scope, opts);
915
+ const page = await this.resolver.listAt(scope, {
916
+ ...opts,
917
+ category: this.fixedCategory
918
+ });
854
919
  return page;
855
920
  }
856
921
  };
857
922
 
858
923
  // src/typed/typed-writer.ts
859
924
  var TypedWriter = class {
860
- constructor(writer) {
925
+ constructor(writer, guard) {
861
926
  this.writer = writer;
927
+ this.guard = guard;
862
928
  }
863
929
  writer;
864
- set(params) {
930
+ guard;
931
+ async set(params) {
932
+ await this.guard?.assert(params.key);
865
933
  return this.writer.set(params);
866
934
  }
867
- setMany(paramsList) {
935
+ async setMany(paramsList) {
936
+ await this.guard?.assertAll(paramsList.map((p) => p.key));
868
937
  return this.writer.setMany(paramsList);
869
938
  }
870
- unset(params) {
939
+ async unset(params) {
940
+ await this.guard?.assert(params.key);
871
941
  return this.writer.unset(params);
872
942
  }
873
943
  };
874
944
 
875
945
  // src/typed/typed-auditor.ts
876
946
  var TypedAuditor = class {
877
- constructor(auditor) {
947
+ constructor(auditor, guard) {
878
948
  this.auditor = auditor;
949
+ this.guard = guard;
879
950
  }
880
951
  auditor;
881
- history(key, scope) {
952
+ guard;
953
+ async history(key, scope) {
954
+ await this.guard?.assert(key);
882
955
  return this.auditor.history(key, scope);
883
956
  }
884
957
  };
885
958
 
886
959
  // src/typed/typed-engine.ts
887
960
  function createTypedEngine(engine) {
888
- return {
889
- resolver: new TypedResolver(engine.resolver),
890
- writer: new TypedWriter(engine.writer),
891
- auditor: new TypedAuditor(engine.auditor)
892
- };
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();
893
975
  }
894
976
  export {
895
977
  Auditor,
896
978
  Cache,
979
+ CategoryError,
980
+ CategoryGuard,
897
981
  ConfTreeError,
898
982
  ConflictError,
899
983
  CorruptError,