@owlmeans/resource 0.1.18-rc.39 → 0.1.18-rc.40

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 CHANGED
@@ -12,7 +12,7 @@ wants is the `resource-choice` decision.
12
12
  ## Installation
13
13
 
14
14
  ```bash
15
- bun add @owlmeans/resource@^0.1.18-rc.39
15
+ bun add @owlmeans/resource@^0.1.18-rc.40
16
16
  ```
17
17
 
18
18
  ## Concepts
@@ -75,17 +75,17 @@ export const projectResource = (ctx: BasicContext<BasicConfig>) =>
75
75
  ### CRUD in a handler
76
76
 
77
77
  A read is addressed by an id **or** by criteria; a write takes the record, with its id inside it.
78
- The organization is keyed by `entityId`, which a server handler takes from `requireEntityKey(req)`
78
+ The organization is keyed by `entityId`, which a server handler takes from `makeEntityScope(req).requireEntityKey()`
79
79
  (`@owlmeans/auth-common`), never from the token or the body.
80
80
 
81
81
  ```ts
82
- import { requireEntityKey } from '@owlmeans/auth-common'
82
+ import { makeEntityScope } from '@owlmeans/auth-common'
83
83
  import type { AbstractRequest } from '@owlmeans/entrypoint'
84
84
  import { MisshapedRecord, UnknownRecordError } from '@owlmeans/resource'
85
85
  import type { Resource } from '@owlmeans/resource'
86
86
 
87
87
  export const handleCreateProject = async (req: AbstractRequest, ctx: Context) => {
88
- const entityId = requireEntityKey(req)
88
+ const entityId = makeEntityScope(req).requireEntityKey()
89
89
  const { alias } = req.body as { alias?: string }
90
90
  if (alias == null || alias.trim() === '') {
91
91
  throw new MisshapedRecord('alias-required')
@@ -96,7 +96,7 @@ export const handleCreateProject = async (req: AbstractRequest, ctx: Context) =>
96
96
  }
97
97
 
98
98
  export const handleGetProject = async (req: AbstractRequest, ctx: Context) => {
99
- const entityId = requireEntityKey(req)
99
+ const entityId = makeEntityScope(req).requireEntityKey()
100
100
  const { alias } = req.params as { alias: string }
101
101
 
102
102
  // One record by several fields is one call — get() throws UnknownRecordError on a miss
@@ -104,7 +104,7 @@ export const handleGetProject = async (req: AbstractRequest, ctx: Context) => {
104
104
  }
105
105
 
106
106
  export const handleRenameProject = async (req: AbstractRequest, ctx: Context) => {
107
- const entityId = requireEntityKey(req)
107
+ const entityId = makeEntityScope(req).requireEntityKey()
108
108
  const { id } = req.params as { id: string }
109
109
  const project = await projectResource(ctx).load(id)
110
110
  if (project == null || project.entityId !== entityId) {
@@ -131,7 +131,7 @@ export const handleDestroyProject = async (req: AbstractRequest, ctx: Context) =
131
131
  import type { Criteria, ListQuery, ListResult } from '@owlmeans/resource'
132
132
 
133
133
  export const handleListProjects = async (req: AbstractRequest, ctx: Context) => {
134
- const entityId = requireEntityKey(req)
134
+ const entityId = makeEntityScope(req).requireEntityKey()
135
135
  const { where, sort, page, size } = req.query as ListQuery<ProjectRecord>
136
136
 
137
137
  const criteria: Criteria<ProjectRecord> = {
@@ -174,15 +174,15 @@ Client state hooks take the same `Criteria<T>`.
174
174
 
175
175
  ```ts
176
176
  import { useStoreList } from '@owlmeans/client'
177
- import { applyQuery, filterRecords, firstMatch, matchCriteria } from '@owlmeans/resource'
177
+ import { recordQueryHelper } from '@owlmeans/resource'
178
178
  import type { Criteria } from '@owlmeans/resource'
179
179
 
180
180
  const open: Criteria<StoryRecord> = { status: ['open', 'review'], archivedAt: null, assignee: undefined }
181
181
 
182
- filterRecords(stories, open) // every match, insertion order
183
- firstMatch(stories, open, { sort: [{ field: 'updatedAt', order: 'desc' }] })
184
- applyQuery(stories, open, { sort: ['title'], page: 1, size: 10 }) // a full ListResult
185
- stories.some(story => matchCriteria(story, { priority: { $gte: 3 } }))
182
+ recordQueryHelper.filterRecords(stories, open) // every match, insertion order
183
+ recordQueryHelper.firstMatch(stories, open, { sort: [{ field: 'updatedAt', order: 'desc' }] })
184
+ recordQueryHelper.applyQuery(stories, open, { sort: ['title'], page: 1, size: 10 }) // a full ListResult
185
+ stories.some(story => recordQueryHelper.matchCriteria(story, { priority: { $gte: 3 } }))
186
186
 
187
187
  // Web state (hook from @owlmeans/client) — the query is the same vocabulary
188
188
  export const useStoryList = (query: Criteria<StoryRecord> = {}) =>
@@ -320,11 +320,12 @@ throws `UnsupportedArgumentError('page-without-size')`.
320
320
 
321
321
  | Symbol | Kind | Purpose |
322
322
  |---|---|---|
323
- | `matchCriteria(record, where?)` | function | does one record satisfy the criteria |
324
- | `filterRecords(records, where?)` | function | every match, in insertion order |
325
- | `sortRecords(records, sort?)` | function | a sorted copy |
326
- | `firstMatch(records, where?, { sort }?)` | function | the record `load(where)` returns |
327
- | `applyQuery(records, where?, opts?)` | function | filter, sort and page into a `ListResult` |
323
+ | `recordQueryHelper` (`createRecordQueryHelper()`, `RecordQueryHelper`) | helper | the in-memory criteria engine below |
324
+ | `recordQueryHelper.matchCriteria(record, where?)` | member | does one record satisfy the criteria |
325
+ | `recordQueryHelper.filterRecords(records, where?)` | member | every match, in insertion order |
326
+ | `recordQueryHelper.sortRecords(records, sort?)` | member | a sorted copy |
327
+ | `recordQueryHelper.firstMatch(records, where?, { sort }?)` | member | the record `load(where)` returns |
328
+ | `recordQueryHelper.applyQuery(records, where?, opts?)` | member | filter, sort and page into a `ListResult` |
328
329
  | `createListSchema(schema)` | function | AJV `JSONSchemaType<ListResult<T>>` for a record schema |
329
330
  | `filterObject(obj, keep?)` | function | drop null/undefined properties, keeping names in `keep` |
330
331
  | `createDbService(alias, override, init?)` | function | base for `ResourceDbService` implementations; `name()` resolves `config.schema ?? config.alias ?? service.alias` |
@@ -381,7 +382,7 @@ durable ledger, and make `run` atomic with the ledger write where the database a
381
382
  detects an edit.
382
383
  - Install `@noble/hashes` and `@scure/base` alongside this package when you load
383
384
  `createMigrationRegistry` or `runMigrations`; install peer `ajv` when you use `createListSchema`.
384
- - Scope organization data by `entityId` from `requireEntityKey(req)`, never by an id taken from the
385
+ - Scope organization data by `entityId` from `makeEntityScope(req).requireEntityKey()`, never by an id taken from the
385
386
  wire.
386
387
 
387
388
  ## Related packages
@@ -403,7 +404,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
403
404
  your project's skill store (`.agents/skills/`):
404
405
 
405
406
  ```sh
406
- npx @owlmeans/agent-skills@^0.1.18-rc.48
407
+ npx @owlmeans/agent-skills@^0.1.18-rc.49
407
408
  ```
408
409
 
409
410
  The embedded files are version-matched to this package release. Do not edit them
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/resource",
4
- "version": "0.1.18-rc.39",
5
- "generatedAt": "2026-10-05T08:32:19.098Z",
4
+ "version": "0.1.18-rc.40",
5
+ "generatedAt": "2026-10-05T21:03:06.379Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/resource
9
9
 
10
10
  **Layer:** Core
11
- **Install:** `"@owlmeans/resource": "^0.1.18-rc.39"` in `dependencies`
11
+ **Install:** `"@owlmeans/resource": "^0.1.18-rc.40"` in `dependencies`
12
12
 
13
13
  ## Key Exports
14
14
 
@@ -19,7 +19,7 @@ user-invocable: false
19
19
  | `Criteria<T>`, `FieldCriteria<V>`, `FieldOperators<V>` | The query language, typed by the record — a mistyped field is a compile error. |
20
20
  | `Sort<T>`, `SortField<T>`, `FirstOptions<T>`, `ListOptions<T>`, `ListQuery<T>`, `ListResult<T>` | Ordering, the read options, the one-object form an API carries over the wire, and the answer shape `{ items, total, page?, size? }`. |
21
21
  | `WriteOptions`, `Ttl` | `{ ttl }` on `create`/`update`/`save`; seconds from now, or the instant to expire at. Backends without expiry refuse it. |
22
- | `matchCriteria`, `filterRecords`, `sortRecords`, `firstMatch`, `applyQuery` | The shared in-memory engine — one criteria object means the same thing in a browser store as it does in SQL. |
22
+ | `recordQueryHelper` — `matchCriteria`, `filterRecords`, `sortRecords`, `firstMatch`, `applyQuery` | The shared in-memory engine — one criteria object means the same thing in a browser store as it does in SQL. |
23
23
  | `PubSubResource<T>`, `WatchableResource<T>`, `StreamResource<T>`, `LockableResource<T>` | **Optional capabilities**, composed into a concrete resource interface alongside `Resource<T>`. `SubscribeOptions` (`{ channel, once, ttl }`) and `Unsubscribe` come with the first two. |
24
24
  | `MigratableResource<Tx, Self>` | **Optional migration capability** — `migration(name, apply, stage?)` (chainable) + `migrations()`. Optional the way pub/sub is on redis resources: mongo and postgres extend it, backends with nothing to migrate don't. |
25
25
  | `Migration`, `MigrationRegistry`, `MigrationStore`, `MigrationReport`, `MigrationRunOptions` | The framework's contracts. `MigrationStore` is the *migration register* a database implements to track applied migrations (`ensure`/`applied`/`baseline`/`run`). |
@@ -150,17 +150,17 @@ result set. `page` without `size` against an unpaged backend throws
150
150
 
151
151
  ### The shared in-memory engine
152
152
 
153
- Every store without a query engine of its own — redis after its SCAN, the client and static
154
- stores, state — filters through the same helpers, so a criteria object written for an endpoint
155
- selects the same records when a screen applies it locally:
153
+ Every store without a query engine of its own — redis after its SCAN, the client and static stores,
154
+ state — filters through the same helper, `recordQueryHelper`, so a criteria object written for an
155
+ endpoint selects the same records when a screen applies it locally:
156
156
 
157
- | Helper | Answers |
157
+ | Member | Answers |
158
158
  |---|---|
159
- | `matchCriteria(record, where)` | does this one record match |
160
- | `filterRecords(records, where)` | every match, in insertion order |
161
- | `sortRecords(records, sort)` | a sorted copy |
162
- | `firstMatch(records, where, { sort })` | the record `load(where)` / `get(where)` return |
163
- | `applyQuery(records, where, opts)` | the whole `ListResult` — filter, sort and page in one call |
159
+ | `recordQueryHelper.matchCriteria(record, where)` | does this one record match |
160
+ | `recordQueryHelper.filterRecords(records, where)` | every match, in insertion order |
161
+ | `recordQueryHelper.sortRecords(records, sort)` | a sorted copy |
162
+ | `recordQueryHelper.firstMatch(records, where, { sort })` | the record `load(where)` / `get(where)` return |
163
+ | `recordQueryHelper.applyQuery(records, where, opts)` | the whole `ListResult` — filter, sort and page in one call |
164
164
 
165
165
  Reach for them when implementing a backend, and when narrowing a list already in hand rather than
166
166
  going back to the store.
@@ -190,10 +190,10 @@ Adding migration support to a new database backend:
190
190
  1. Extend the concrete resource interface with `MigratableResource<YourTx>` and design the
191
191
  `Tx` façade a migration receives.
192
192
  2. Keep registrations in a **module-scope declaration keyed by alias** — the shape mongo and
193
- postgres both expose as `getDeclaration(alias)` / `resetDeclarations(alias?)`. A maker that
194
- runs more than once for the same alias (a custom maker, a test) then re-declares the same
195
- entries and loses nothing, where a registry held on the resource object would silently lose
196
- data transformations.
193
+ postgres both expose as `mongoDeclarationHelper` / `pgDeclarationHelper` with
194
+ `.getDeclaration(alias)` / `.resetDeclarations(alias?)`. A maker that runs more than once for the
195
+ same alias (a custom maker, a test) then re-declares the same entries and loses nothing, where a
196
+ registry held on the resource object would silently lose data transformations.
197
197
  3. Implement `MigrationStore` over a durable ledger when the database can store one
198
198
  (`_owlmeans_migrations` in both mongo and postgres); a store-less backend may run
199
199
  migrations unconditionally if its bodies are self-checking.
package/build/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from './utils.js';
4
4
  export * from './service.js';
5
5
  export * from './helper.js';
6
6
  export * from './utils/query.js';
7
+ export type * from './utils/query/types.js';
7
8
  export * from './migration.js';
8
9
  export type * from './types.js';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,mBAAmB,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,mBAAmB,wBAAwB,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,mBAAmB,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAEhC,cAAc,gBAAgB,CAAA"}
package/build/types.d.ts CHANGED
@@ -110,7 +110,9 @@ export interface Resource<T extends ResourceRecord> extends BasicResource {
110
110
  /** Bulk delete. Refuses an empty criteria object rather than emptying the resource. */
111
111
  purge(where: Criteria<T>): Promise<number>;
112
112
  }
113
- export type Unsubscribe = () => Promise<void>;
113
+ export interface Unsubscribe {
114
+ (): Promise<void>;
115
+ }
114
116
  export interface SubscribeOptions {
115
117
  channel?: string;
116
118
  once?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../src/utils/name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAA;AAE7E,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,YAC9D,CAAC,WAAW,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,QAAQ,WAClB,CAAA"}
1
+ {"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../src/utils/name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE/E,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,YAC9D,CAAC,WAAW,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,QAAQ,KAClE,MAAwD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"name.js","sourceRoot":"","sources":["../../src/utils/name.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,QAAW,EAAE,OAAoC,EAAE,MAAgB,EACnE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAA"}
1
+ {"version":3,"file":"name.js","sourceRoot":"","sources":["../../src/utils/name.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,QAAW,EAAE,OAAoC,EAAE,MAAgB,EAC3D,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAA"}
@@ -0,0 +1,35 @@
1
+ import type { Criteria, ListOptions, ListResult, ResourceRecord, Sort } from '../../types.js';
2
+ /**
3
+ * In-memory evaluation of `Criteria<any>` — the engine every store without a query language of its
4
+ * own (state, static, client, redis) answers a criteria object through.
5
+ */
6
+ export interface RecordQueryHelper {
7
+ /**
8
+ * Whether one record satisfies the criteria.
9
+ *
10
+ * `undefined` as a criteria value is skipped rather than compared — it is what an optional filter
11
+ * looks like when nothing was chosen, and treating it as "must be undefined" makes an unset
12
+ * dropdown filter the list down to nothing.
13
+ *
14
+ * @throws {UnsupportedArgumentError} on an unknown operator.
15
+ */
16
+ matchCriteria: <T extends ResourceRecord>(record: T, criteria?: Criteria<any>) => boolean;
17
+ /** Every record the criteria accepts, in insertion order. */
18
+ filterRecords: <T extends ResourceRecord>(records: T[], criteria?: Criteria<any>) => T[];
19
+ /**
20
+ * Sort a copy. A bare field name is ascending; `{ field, order: 'desc' }` reverses it — the same
21
+ * meaning every backend gives it, so a sort written for one store orders the same way against
22
+ * another.
23
+ */
24
+ sortRecords: <T extends ResourceRecord>(records: T[], sort?: Sort<any>[]) => T[];
25
+ /** The first record the criteria accepts, honouring the sort. */
26
+ firstMatch: <T extends ResourceRecord>(records: T[], where?: Criteria<any>, opts?: {
27
+ sort?: Sort<any>[];
28
+ }) => T | null;
29
+ /**
30
+ * Filter, sort and page an in-memory record set into the shape every resource answers with.
31
+ * `size` is opt-in: an in-memory store returns everything when none is asked for.
32
+ */
33
+ applyQuery: <T extends ResourceRecord>(records: T[], where?: Criteria<any>, opts?: ListOptions<any>) => ListResult<T>;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/query/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE7F;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,OAAO,CAAA;IACzF,6DAA6D;IAC7D,aAAa,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAA;IACxF;;;;OAIG;IACH,WAAW,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;IAChF,iEAAiE;IACjE,UAAU,EAAE,CAAC,CAAC,SAAS,cAAc,EACnC,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;KAAE,KAC/D,CAAC,GAAG,IAAI,CAAA;IACb;;;OAGG;IACH,UAAU,EAAE,CAAC,CAAC,SAAS,cAAc,EACnC,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,KACzD,UAAU,CAAC,CAAC,CAAC,CAAA;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/query/types.ts"],"names":[],"mappings":""}
@@ -1,29 +1,17 @@
1
1
  import type { Criteria, ListOptions, ListResult, ResourceRecord, Sort } from '../types.js';
2
- /**
3
- * Whether one record satisfies the criteria.
4
- *
5
- * `undefined` as a criteria value is skipped rather than compared — it is what an optional filter
6
- * looks like when nothing was chosen, and treating it as "must be undefined" makes an unset
7
- * dropdown filter the list down to nothing.
8
- *
9
- * @throws {UnsupportedArgumentError} on an unknown operator.
10
- */
2
+ import type { RecordQueryHelper } from './query/types.js';
3
+ export declare const createRecordQueryHelper: () => RecordQueryHelper;
4
+ export declare const recordQueryHelper: RecordQueryHelper;
5
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.matchCriteria(…)` */
11
6
  export declare const matchCriteria: <T extends ResourceRecord>(record: T, criteria?: Criteria<any>) => boolean;
12
- /** Every record the criteria accepts, in insertion order. */
7
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.filterRecords(…)` */
13
8
  export declare const filterRecords: <T extends ResourceRecord>(records: T[], criteria?: Criteria<any>) => T[];
14
- /**
15
- * Sort a copy. A bare field name is ascending; `{ field, order: 'desc' }` reverses it — the same
16
- * meaning every backend gives it, so a sort written for one store orders the same way against
17
- * another.
18
- */
9
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.sortRecords(…)` */
19
10
  export declare const sortRecords: <T extends ResourceRecord>(records: T[], sort?: Sort<any>[]) => T[];
20
- /** The first record the criteria accepts, honouring the sort. */
11
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.firstMatch(…)` */
21
12
  export declare const firstMatch: <T extends ResourceRecord>(records: T[], where?: Criteria<any>, opts?: {
22
13
  sort?: Sort<any>[];
23
14
  }) => T | null;
24
- /**
25
- * Filter, sort and page an in-memory record set into the shape every resource answers with.
26
- * `size` is opt-in: an in-memory store returns everything when none is asked for.
27
- */
15
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.applyQuery(…)` */
28
16
  export declare const applyQuery: <T extends ResourceRecord>(records: T[], where?: Criteria<any>, opts?: ListOptions<any>) => ListResult<T>;
29
17
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/utils/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AA+J1F;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,cAAc,UAC5C,CAAC,aAAa,QAAQ,CAAC,GAAG,CAAC,KAClC,OA0CF,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,cAAc,WAC3C,CAAC,EAAE,aAAa,QAAQ,CAAC,GAAG,CAAC,KACrC,CAAC,EAE2D,CAAA;AAE/D;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,cAAc,WAAW,CAAC,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,KAAG,CAAC,EAuBzF,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,WACxC,CAAC,EAAE,UAAU,QAAQ,CAAC,GAAG,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;CAAE,KACjE,CAAC,GAAG,IAAyE,CAAA;AAEhF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,WACxC,CAAC,EAAE,UAAU,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,KAC3D,UAAU,CAAC,CAAC,CAYd,CAAA"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/utils/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AA8JzD,eAAO,MAAM,uBAAuB,QAAO,iBAmG1C,CAAA;AAED,eAAO,MAAM,iBAAiB,mBAA4B,CAAA;AAE1D,qFAAqF;AACrF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,cAAc,UAAU,CAAC,aAAa,QAAQ,CAAC,GAAG,CAAC,KAAG,OAC3C,CAAA;AAEnD,qFAAqF;AACrF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,cAAc,WAAW,CAAC,EAAE,aAAa,QAAQ,CAAC,GAAG,CAAC,KAAG,CAAC,EAC9C,CAAA;AAEpD,mFAAmF;AACnF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,cAAc,WAAW,CAAC,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,KAAG,CAAC,EAC5C,CAAA;AAE9C,kFAAkF;AAClF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,WACxC,CAAC,EAAE,UAAU,QAAQ,CAAC,GAAG,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;CAAE,KACjE,CAAC,GAAG,IAA0D,CAAA;AAEjE,kFAAkF;AAClF,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,WACxC,CAAC,EAAE,UAAU,QAAQ,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,KAC3D,UAAU,CAAC,CAAC,CAAuD,CAAA"}
@@ -159,112 +159,106 @@ const applyOperators = (value, spec) => {
159
159
  }
160
160
  return true;
161
161
  };
162
- /**
163
- * Whether one record satisfies the criteria.
164
- *
165
- * `undefined` as a criteria value is skipped rather than compared — it is what an optional filter
166
- * looks like when nothing was chosen, and treating it as "must be undefined" makes an unset
167
- * dropdown filter the list down to nothing.
168
- *
169
- * @throws {UnsupportedArgumentError} on an unknown operator.
170
- */
171
- export const matchCriteria = (record, criteria) => {
172
- for (const [key, raw] of Object.entries(criteria ?? {})) {
173
- if (raw === undefined) {
174
- continue;
175
- }
176
- if (key === '$and' || key === '$or') {
177
- const parts = (Array.isArray(raw) ? raw : [raw]);
178
- if (parts.length < 1)
162
+ export const createRecordQueryHelper = () => {
163
+ const matchCriteria = (record, criteria) => {
164
+ for (const [key, raw] of Object.entries(criteria ?? {})) {
165
+ if (raw === undefined) {
179
166
  continue;
180
- const matched = key === '$and'
181
- ? parts.every(part => matchCriteria(record, part))
182
- : parts.some(part => matchCriteria(record, part));
183
- if (!matched)
184
- return false;
185
- continue;
186
- }
187
- if (key === '$not') {
188
- if (matchCriteria(record, raw))
189
- return false;
190
- continue;
191
- }
192
- const value = reach(record, key.split('.'));
193
- if (raw === null) {
194
- if (value != null)
195
- return false;
196
- continue;
197
- }
198
- if (isOperatorSpec(raw)) {
199
- if (!applyOperators(value, raw))
167
+ }
168
+ if (key === '$and' || key === '$or') {
169
+ const parts = (Array.isArray(raw) ? raw : [raw]);
170
+ if (parts.length < 1)
171
+ continue;
172
+ const matched = key === '$and'
173
+ ? parts.every(part => matchCriteria(record, part))
174
+ : parts.some(part => matchCriteria(record, part));
175
+ if (!matched)
176
+ return false;
177
+ continue;
178
+ }
179
+ if (key === '$not') {
180
+ if (matchCriteria(record, raw))
181
+ return false;
182
+ continue;
183
+ }
184
+ const value = reach(record, key.split('.'));
185
+ if (raw === null) {
186
+ if (value != null)
187
+ return false;
188
+ continue;
189
+ }
190
+ if (isOperatorSpec(raw)) {
191
+ if (!applyOperators(value, raw))
192
+ return false;
193
+ continue;
194
+ }
195
+ if (Array.isArray(raw)) {
196
+ /**
197
+ * A bare array means "any of these", exactly as it does against a relational store.
198
+ * Exact array equality stays reachable as `{ $eq: [...] }`.
199
+ */
200
+ if (!inList(value, raw))
201
+ return false;
202
+ continue;
203
+ }
204
+ if (!equal(value, raw))
200
205
  return false;
201
- continue;
202
206
  }
203
- if (Array.isArray(raw)) {
204
- /**
205
- * A bare array means "any of these", exactly as it does against a relational store.
206
- * Exact array equality stays reachable as `{ $eq: [...] }`.
207
- */
208
- if (!inList(value, raw))
209
- return false;
210
- continue;
207
+ return true;
208
+ };
209
+ const filterRecords = (records, criteria) => criteria == null || Object.keys(criteria).length < 1
210
+ ? [...records]
211
+ : records.filter(record => matchCriteria(record, criteria));
212
+ const sortRecords = (records, sort) => {
213
+ if (sort == null || sort.length < 1) {
214
+ return [...records];
211
215
  }
212
- if (!equal(value, raw))
213
- return false;
214
- }
215
- return true;
216
- };
217
- /** Every record the criteria accepts, in insertion order. */
218
- export const filterRecords = (records, criteria) => criteria == null || Object.keys(criteria).length < 1
219
- ? [...records]
220
- : records.filter(record => matchCriteria(record, criteria));
221
- /**
222
- * Sort a copy. A bare field name is ascending; `{ field, order: 'desc' }` reverses it — the same
223
- * meaning every backend gives it, so a sort written for one store orders the same way against
224
- * another.
225
- */
226
- export const sortRecords = (records, sort) => {
227
- if (sort == null || sort.length < 1) {
228
- return [...records];
229
- }
230
- const rules = sort.map(entry => typeof entry === 'string'
231
- ? { field: entry, desc: false }
232
- : { field: entry.field, desc: entry.order === 'desc' });
233
- return [...records].sort((left, right) => {
234
- for (const { field, desc } of rules) {
235
- const a = comparable(reach(left, field.split('.')));
236
- const b = comparable(reach(right, field.split('.')));
237
- if (a == null && b == null)
238
- continue;
239
- /** An absent value sorts last ascending, which is where a reader expects "no value". */
240
- if (a == null)
241
- return 1;
242
- if (b == null)
243
- return -1;
244
- if (a < b)
245
- return desc ? 1 : -1;
246
- if (a > b)
247
- return desc ? -1 : 1;
216
+ const rules = sort.map(entry => typeof entry === 'string'
217
+ ? { field: entry, desc: false }
218
+ : { field: entry.field, desc: entry.order === 'desc' });
219
+ return [...records].sort((left, right) => {
220
+ for (const { field, desc } of rules) {
221
+ const a = comparable(reach(left, field.split('.')));
222
+ const b = comparable(reach(right, field.split('.')));
223
+ if (a == null && b == null)
224
+ continue;
225
+ /** An absent value sorts last ascending, which is where a reader expects "no value". */
226
+ if (a == null)
227
+ return 1;
228
+ if (b == null)
229
+ return -1;
230
+ if (a < b)
231
+ return desc ? 1 : -1;
232
+ if (a > b)
233
+ return desc ? -1 : 1;
234
+ }
235
+ return 0;
236
+ });
237
+ };
238
+ const firstMatch = (records, where, opts) => sortRecords(filterRecords(records, where), opts?.sort)[0] ?? null;
239
+ const applyQuery = (records, where, opts) => {
240
+ const matched = sortRecords(filterRecords(records, where), opts?.sort);
241
+ const total = matched.length;
242
+ // `size: 0` is the explicit ask for everything — the same meaning the paged backends give it, so
243
+ // one query object means one thing whichever store answers it. An omitted size is unpaged here.
244
+ if (opts?.size == null || opts.size === 0) {
245
+ return { items: matched, total };
248
246
  }
249
- return 0;
250
- });
251
- };
252
- /** The first record the criteria accepts, honouring the sort. */
253
- export const firstMatch = (records, where, opts) => sortRecords(filterRecords(records, where), opts?.sort)[0] ?? null;
254
- /**
255
- * Filter, sort and page an in-memory record set into the shape every resource answers with.
256
- * `size` is opt-in: an in-memory store returns everything when none is asked for.
257
- */
258
- export const applyQuery = (records, where, opts) => {
259
- const matched = sortRecords(filterRecords(records, where), opts?.sort);
260
- const total = matched.length;
261
- // `size: 0` is the explicit ask for everything — the same meaning the paged backends give it, so
262
- // one query object means one thing whichever store answers it. An omitted size is unpaged here.
263
- if (opts?.size == null || opts.size === 0) {
264
- return { items: matched, total };
265
- }
266
- const page = opts.page ?? 0;
267
- const from = page * opts.size;
268
- return { items: matched.slice(from, from + opts.size), total, page, size: opts.size };
247
+ const page = opts.page ?? 0;
248
+ const from = page * opts.size;
249
+ return { items: matched.slice(from, from + opts.size), total, page, size: opts.size };
250
+ };
251
+ return { matchCriteria, filterRecords, sortRecords, firstMatch, applyQuery };
269
252
  };
253
+ export const recordQueryHelper = createRecordQueryHelper();
254
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.matchCriteria(…)` */
255
+ export const matchCriteria = (record, criteria) => recordQueryHelper.matchCriteria(record, criteria);
256
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.filterRecords(…)` */
257
+ export const filterRecords = (records, criteria) => recordQueryHelper.filterRecords(records, criteria);
258
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.sortRecords(…)` */
259
+ export const sortRecords = (records, sort) => recordQueryHelper.sortRecords(records, sort);
260
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.firstMatch(…)` */
261
+ export const firstMatch = (records, where, opts) => recordQueryHelper.firstMatch(records, where, opts);
262
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.applyQuery(…)` */
263
+ export const applyQuery = (records, where, opts) => recordQueryHelper.applyQuery(records, where, opts);
270
264
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/utils/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C;;;;;;;;;;;;;;GAcG;AAEH,mEAAmE;AACnE,MAAM,UAAU,GAAG,CAAC,KAAc,EAAW,EAAE,CAC7C,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;AAEjD,8FAA8F;AAC9F,MAAM,KAAK,GAAG,CAAC,MAAe,EAAE,IAAc,EAAW,EAAE,CACzD,IAAI,CAAC,MAAM,CACT,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;IACzD,CAAC,CAAC,SAAS;IACX,CAAC,CAAE,KAAiC,CAAC,IAAI,CAAC,EAC5C,MAAM,CACP,CAAA;AAEH;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC1E,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC;OAC5F,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AAExD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,KAAc,EAAW,EAAE;IACvD,IAAI,IAAI,YAAY,IAAI,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAClD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB,CAAC,CAAA;AAED,gGAAgG;AAChG,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,OAAgB,EAAW,EAAE;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;AAExE,2DAA2D;AAC3D,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAa,EAAU,EAAE;IAC9D,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAE,CAAA;QAC5B,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,OAAO,CAAC,EAAE,KAAK,CAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;YAClE,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,IAAI,IAAI,CAAC;YAAC,SAAQ;QAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAAC,MAAM,IAAI,GAAG,CAAC;YAAC,SAAQ;QAAC,CAAC;QAC7C,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,IAA6B,EAAW,EAAE;IAChF,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;YACjC,MAAM,OAAO,GACX,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;gBACxC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC3C,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK;wBACrC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAE,IAAc,GAAI,KAAe;4BACvD,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAE,IAAc,IAAK,KAAe;gCACzD,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAE,IAAc,GAAI,KAAe;oCACvD,CAAC,CAAE,IAAc,IAAK,KAAe,CAAA;YACnD,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC1B,SAAQ;QACV,CAAC;QACD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,KAAK;gBACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACzC,MAAK;YACP,KAAK,MAAM;gBACT,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACxC,MAAK;YACP,KAAK,SAAS;gBACZ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACzD,MAAK;YACP,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACzD,MAAK;YACP,KAAK,OAAO;gBACV,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACpE,MAAK;YACP,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACrE,MAAK;YACP,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC9D,MAAK;YACP,KAAK,aAAa;gBAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACxD,MAAK;YACP,KAAK,WAAW;gBACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBACtD,MAAK;YACP,KAAK,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,wBAAwB,CAAC,mBAAmB,CAAC,CAAA;gBACzD,CAAC;gBACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC9B,IAAI,IAAI,IAAI,IAAI;oBAAE,OAAO,KAAK,CAAA;gBAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;gBACnC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;gBACjC,IAAK,IAAc,GAAI,IAAc,IAAK,IAAc,GAAI,EAAY;oBAAE,OAAO,KAAK,CAAA;gBACtF,MAAK;YACP,CAAC;YACD,KAAK,WAAW,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC7F,MAAK;YACP,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC7F,MAAK;YACP,CAAC;YACD,KAAK,WAAW,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;gBAC5F,MAAK;YACP,CAAC;YACD;gBACE,MAAM,IAAI,wBAAwB,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAS,EAAE,QAAwB,EAC1B,EAAE;IACX,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QAED,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAoB,CAAA;YACnE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAQ;YAC9B,MAAM,OAAO,GAAG,GAAG,KAAK,MAAM;gBAC5B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;YACnD,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC1B,SAAQ;QACV,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,IAAI,aAAa,CAAC,MAAM,EAAE,GAAoB,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC7D,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAE3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,KAAK,IAAI,IAAI;gBAAE,OAAO,KAAK,CAAA;YAC/B,SAAQ;QACV,CAAC;QACD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAA8B,CAAC;gBAAE,OAAO,KAAK,CAAA;YACxE,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB;;;eAGG;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAA;YACrC,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;IACtC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAY,EAAE,QAAwB,EACjC,EAAE,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;IAC1D,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACd,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAA2B,OAAY,EAAE,IAAkB,EAAO,EAAE;IAC7F,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ;QACvD,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QAC/B,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC,CAAA;IAEzD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACvC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACpD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;gBAAE,SAAQ;YACpC,wFAAwF;YACxF,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,CAAA;YACvB,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAA;YACxB,IAAK,CAAW,GAAI,CAAW;gBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrD,IAAK,CAAW,GAAI,CAAW;gBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,OAAY,EAAE,KAAqB,EAAE,IAA6B,EACxD,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,OAAY,EAAE,KAAqB,EAAE,IAAuB,EAC7C,EAAE;IACjB,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAA;IAC5B,iGAAiG;IACjG,gGAAgG;IAChG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAE7B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;AACvF,CAAC,CAAA"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/utils/query.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/resource",
3
- "version": "0.1.18-rc.39",
3
+ "version": "0.1.18-rc.40",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -22,8 +22,8 @@
22
22
  }
23
23
  },
24
24
  "dependencies": {
25
- "@owlmeans/context": "^0.1.18-rc.33",
26
- "@owlmeans/error": "^0.1.18-rc.37"
25
+ "@owlmeans/context": "^0.1.18-rc.34",
26
+ "@owlmeans/error": "^0.1.18-rc.38"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "ajv": "*"
package/src/index.ts CHANGED
@@ -5,5 +5,6 @@ export * from './utils.js'
5
5
  export * from './service.js'
6
6
  export * from './helper.js'
7
7
  export * from './utils/query.js'
8
+ export type * from './utils/query/types.js'
8
9
  export * from './migration.js'
9
10
  export type * from './types.js'
package/src/types.ts CHANGED
@@ -116,7 +116,7 @@ export interface Resource<T extends ResourceRecord> extends BasicResource {
116
116
  purge(where: Criteria<T>): Promise<number>
117
117
  }
118
118
 
119
- export type Unsubscribe = () => Promise<void>
119
+ export interface Unsubscribe { (): Promise<void> }
120
120
 
121
121
  export interface SubscribeOptions {
122
122
  channel?: string
package/src/utils/name.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type {Context, Config, ResourceDbService, DbConfig} from '../types.js'
1
+ import type { Context, Config, ResourceDbService, DbConfig } from '../types.js'
2
2
 
3
3
  export const dbName = <C extends Config, T extends Context<C> = Context<C>>(
4
4
  _context: T, service: ResourceDbService<any, any>, config: DbConfig
5
- ) => config.schema ?? config.alias ?? service.alias
5
+ ): string => config.schema ?? config.alias ?? service.alias
@@ -0,0 +1,37 @@
1
+ import type { Criteria, ListOptions, ListResult, ResourceRecord, Sort } from '../../types.js'
2
+
3
+ /**
4
+ * In-memory evaluation of `Criteria<any>` — the engine every store without a query language of its
5
+ * own (state, static, client, redis) answers a criteria object through.
6
+ */
7
+ export interface RecordQueryHelper {
8
+ /**
9
+ * Whether one record satisfies the criteria.
10
+ *
11
+ * `undefined` as a criteria value is skipped rather than compared — it is what an optional filter
12
+ * looks like when nothing was chosen, and treating it as "must be undefined" makes an unset
13
+ * dropdown filter the list down to nothing.
14
+ *
15
+ * @throws {UnsupportedArgumentError} on an unknown operator.
16
+ */
17
+ matchCriteria: <T extends ResourceRecord>(record: T, criteria?: Criteria<any>) => boolean
18
+ /** Every record the criteria accepts, in insertion order. */
19
+ filterRecords: <T extends ResourceRecord>(records: T[], criteria?: Criteria<any>) => T[]
20
+ /**
21
+ * Sort a copy. A bare field name is ascending; `{ field, order: 'desc' }` reverses it — the same
22
+ * meaning every backend gives it, so a sort written for one store orders the same way against
23
+ * another.
24
+ */
25
+ sortRecords: <T extends ResourceRecord>(records: T[], sort?: Sort<any>[]) => T[]
26
+ /** The first record the criteria accepts, honouring the sort. */
27
+ firstMatch: <T extends ResourceRecord>(
28
+ records: T[], where?: Criteria<any>, opts?: { sort?: Sort<any>[] }
29
+ ) => T | null
30
+ /**
31
+ * Filter, sort and page an in-memory record set into the shape every resource answers with.
32
+ * `size` is opt-in: an in-memory store returns everything when none is asked for.
33
+ */
34
+ applyQuery: <T extends ResourceRecord>(
35
+ records: T[], where?: Criteria<any>, opts?: ListOptions<any>
36
+ ) => ListResult<T>
37
+ }
@@ -1,6 +1,7 @@
1
1
  import { UnsupportedArgumentError } from '../errors.js'
2
2
  import type { Criteria, ListOptions, ListResult, ResourceRecord, Sort } from '../types.js'
3
3
  import { COMPARISON } from './consts.local.js'
4
+ import type { RecordQueryHelper } from './query/types.js'
4
5
 
5
6
  /**
6
7
  * In-memory evaluation of `Criteria<any>`.
@@ -158,119 +159,127 @@ const applyOperators = (value: unknown, spec: Record<string, unknown>): boolean
158
159
  return true
159
160
  }
160
161
 
161
- /**
162
- * Whether one record satisfies the criteria.
163
- *
164
- * `undefined` as a criteria value is skipped rather than compared — it is what an optional filter
165
- * looks like when nothing was chosen, and treating it as "must be undefined" makes an unset
166
- * dropdown filter the list down to nothing.
167
- *
168
- * @throws {UnsupportedArgumentError} on an unknown operator.
169
- */
170
- export const matchCriteria = <T extends ResourceRecord>(
171
- record: T, criteria?: Criteria<any>
172
- ): boolean => {
173
- for (const [key, raw] of Object.entries(criteria ?? {})) {
174
- if (raw === undefined) {
175
- continue
176
- }
162
+ export const createRecordQueryHelper = (): RecordQueryHelper => {
163
+ const matchCriteria = <T extends ResourceRecord>(
164
+ record: T, criteria?: Criteria<any>
165
+ ): boolean => {
166
+ for (const [key, raw] of Object.entries(criteria ?? {})) {
167
+ if (raw === undefined) {
168
+ continue
169
+ }
177
170
 
178
- if (key === '$and' || key === '$or') {
179
- const parts = (Array.isArray(raw) ? raw : [raw]) as Criteria<any>[]
180
- if (parts.length < 1) continue
181
- const matched = key === '$and'
182
- ? parts.every(part => matchCriteria(record, part))
183
- : parts.some(part => matchCriteria(record, part))
184
- if (!matched) return false
185
- continue
186
- }
187
- if (key === '$not') {
188
- if (matchCriteria(record, raw as Criteria<any>)) return false
189
- continue
190
- }
171
+ if (key === '$and' || key === '$or') {
172
+ const parts = (Array.isArray(raw) ? raw : [raw]) as Criteria<any>[]
173
+ if (parts.length < 1) continue
174
+ const matched = key === '$and'
175
+ ? parts.every(part => matchCriteria(record, part))
176
+ : parts.some(part => matchCriteria(record, part))
177
+ if (!matched) return false
178
+ continue
179
+ }
180
+ if (key === '$not') {
181
+ if (matchCriteria(record, raw as Criteria<any>)) return false
182
+ continue
183
+ }
191
184
 
192
- const value = reach(record, key.split('.'))
185
+ const value = reach(record, key.split('.'))
193
186
 
194
- if (raw === null) {
195
- if (value != null) return false
196
- continue
197
- }
198
- if (isOperatorSpec(raw)) {
199
- if (!applyOperators(value, raw as Record<string, unknown>)) return false
200
- continue
201
- }
202
- if (Array.isArray(raw)) {
203
- /**
204
- * A bare array means "any of these", exactly as it does against a relational store.
205
- * Exact array equality stays reachable as `{ $eq: [...] }`.
206
- */
207
- if (!inList(value, raw)) return false
208
- continue
187
+ if (raw === null) {
188
+ if (value != null) return false
189
+ continue
190
+ }
191
+ if (isOperatorSpec(raw)) {
192
+ if (!applyOperators(value, raw as Record<string, unknown>)) return false
193
+ continue
194
+ }
195
+ if (Array.isArray(raw)) {
196
+ /**
197
+ * A bare array means "any of these", exactly as it does against a relational store.
198
+ * Exact array equality stays reachable as `{ $eq: [...] }`.
199
+ */
200
+ if (!inList(value, raw)) return false
201
+ continue
202
+ }
203
+ if (!equal(value, raw)) return false
209
204
  }
210
- if (!equal(value, raw)) return false
205
+
206
+ return true
211
207
  }
212
208
 
213
- return true
214
- }
209
+ const filterRecords = <T extends ResourceRecord>(
210
+ records: T[], criteria?: Criteria<any>
211
+ ): T[] => criteria == null || Object.keys(criteria).length < 1
212
+ ? [...records]
213
+ : records.filter(record => matchCriteria(record, criteria))
215
214
 
216
- /** Every record the criteria accepts, in insertion order. */
217
- export const filterRecords = <T extends ResourceRecord>(
218
- records: T[], criteria?: Criteria<any>
219
- ): T[] => criteria == null || Object.keys(criteria).length < 1
220
- ? [...records]
221
- : records.filter(record => matchCriteria(record, criteria))
215
+ const sortRecords = <T extends ResourceRecord>(records: T[], sort?: Sort<any>[]): T[] => {
216
+ if (sort == null || sort.length < 1) {
217
+ return [...records]
218
+ }
222
219
 
223
- /**
224
- * Sort a copy. A bare field name is ascending; `{ field, order: 'desc' }` reverses it — the same
225
- * meaning every backend gives it, so a sort written for one store orders the same way against
226
- * another.
227
- */
228
- export const sortRecords = <T extends ResourceRecord>(records: T[], sort?: Sort<any>[]): T[] => {
229
- if (sort == null || sort.length < 1) {
230
- return [...records]
220
+ const rules = sort.map(entry => typeof entry === 'string'
221
+ ? { field: entry, desc: false }
222
+ : { field: entry.field, desc: entry.order === 'desc' })
223
+
224
+ return [...records].sort((left, right) => {
225
+ for (const { field, desc } of rules) {
226
+ const a = comparable(reach(left, field.split('.')))
227
+ const b = comparable(reach(right, field.split('.')))
228
+ if (a == null && b == null) continue
229
+ /** An absent value sorts last ascending, which is where a reader expects "no value". */
230
+ if (a == null) return 1
231
+ if (b == null) return -1
232
+ if ((a as never) < (b as never)) return desc ? 1 : -1
233
+ if ((a as never) > (b as never)) return desc ? -1 : 1
234
+ }
235
+
236
+ return 0
237
+ })
231
238
  }
232
239
 
233
- const rules = sort.map(entry => typeof entry === 'string'
234
- ? { field: entry, desc: false }
235
- : { field: entry.field, desc: entry.order === 'desc' })
240
+ const firstMatch = <T extends ResourceRecord>(
241
+ records: T[], where?: Criteria<any>, opts?: { sort?: Sort<any>[] }
242
+ ): T | null => sortRecords(filterRecords(records, where), opts?.sort)[0] ?? null
236
243
 
237
- return [...records].sort((left, right) => {
238
- for (const { field, desc } of rules) {
239
- const a = comparable(reach(left, field.split('.')))
240
- const b = comparable(reach(right, field.split('.')))
241
- if (a == null && b == null) continue
242
- /** An absent value sorts last ascending, which is where a reader expects "no value". */
243
- if (a == null) return 1
244
- if (b == null) return -1
245
- if ((a as never) < (b as never)) return desc ? 1 : -1
246
- if ((a as never) > (b as never)) return desc ? -1 : 1
244
+ const applyQuery = <T extends ResourceRecord>(
245
+ records: T[], where?: Criteria<any>, opts?: ListOptions<any>
246
+ ): ListResult<T> => {
247
+ const matched = sortRecords(filterRecords(records, where), opts?.sort)
248
+ const total = matched.length
249
+ // `size: 0` is the explicit ask for everything — the same meaning the paged backends give it, so
250
+ // one query object means one thing whichever store answers it. An omitted size is unpaged here.
251
+ if (opts?.size == null || opts.size === 0) {
252
+ return { items: matched, total }
247
253
  }
254
+ const page = opts.page ?? 0
255
+ const from = page * opts.size
248
256
 
249
- return 0
250
- })
257
+ return { items: matched.slice(from, from + opts.size), total, page, size: opts.size }
258
+ }
259
+
260
+ return { matchCriteria, filterRecords, sortRecords, firstMatch, applyQuery }
251
261
  }
252
262
 
253
- /** The first record the criteria accepts, honouring the sort. */
263
+ export const recordQueryHelper = createRecordQueryHelper()
264
+
265
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.matchCriteria(…)` */
266
+ export const matchCriteria = <T extends ResourceRecord>(record: T, criteria?: Criteria<any>): boolean =>
267
+ recordQueryHelper.matchCriteria(record, criteria)
268
+
269
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.filterRecords(…)` */
270
+ export const filterRecords = <T extends ResourceRecord>(records: T[], criteria?: Criteria<any>): T[] =>
271
+ recordQueryHelper.filterRecords(records, criteria)
272
+
273
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.sortRecords(…)` */
274
+ export const sortRecords = <T extends ResourceRecord>(records: T[], sort?: Sort<any>[]): T[] =>
275
+ recordQueryHelper.sortRecords(records, sort)
276
+
277
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.firstMatch(…)` */
254
278
  export const firstMatch = <T extends ResourceRecord>(
255
279
  records: T[], where?: Criteria<any>, opts?: { sort?: Sort<any>[] }
256
- ): T | null => sortRecords(filterRecords(records, where), opts?.sort)[0] ?? null
280
+ ): T | null => recordQueryHelper.firstMatch(records, where, opts)
257
281
 
258
- /**
259
- * Filter, sort and page an in-memory record set into the shape every resource answers with.
260
- * `size` is opt-in: an in-memory store returns everything when none is asked for.
261
- */
282
+ /** @deprecated compat:factory-refactor — use `recordQueryHelper.applyQuery(…)` */
262
283
  export const applyQuery = <T extends ResourceRecord>(
263
284
  records: T[], where?: Criteria<any>, opts?: ListOptions<any>
264
- ): ListResult<T> => {
265
- const matched = sortRecords(filterRecords(records, where), opts?.sort)
266
- const total = matched.length
267
- // `size: 0` is the explicit ask for everything — the same meaning the paged backends give it, so
268
- // one query object means one thing whichever store answers it. An omitted size is unpaged here.
269
- if (opts?.size == null || opts.size === 0) {
270
- return { items: matched, total }
271
- }
272
- const page = opts.page ?? 0
273
- const from = page * opts.size
274
-
275
- return { items: matched.slice(from, from + opts.size), total, page, size: opts.size }
276
- }
285
+ ): ListResult<T> => recordQueryHelper.applyQuery(records, where, opts)