@owlmeans/state 0.1.18-rc.6 → 0.1.18-rc.8

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
@@ -59,9 +59,31 @@ Creates an in-memory resource with subscription support. Registers under `alias`
59
59
 
60
60
  ### `StateResource<T>` (extends `Resource<T>`)
61
61
 
62
- - `subscribe(params): [unsubscribe, StateModel<T>[]]` — subscribe to record changes; returns current records
62
+ - `subscribe(params): [unsubscribe, StateModel<T>[]]` — subscribe to records by `id`, or to a live
63
+ `query`; returns the current records
63
64
  - `listen(listener)` — global listener for any change in the resource
64
65
  - `erase()` — clear all records
66
+ - `all(): Promise<T[]>` — every record, as a plain array
67
+ - `match(criteria?): Promise<T[]>` — the records the criteria accepts, as a plain array
68
+ - `list(criteria?, opts?)` — the `Resource` envelope `{ items, pager }`. Unpaged unless a pager is
69
+ given, so `list()` returns everything
70
+
71
+ ### Criteria
72
+
73
+ `list`, `match` and a `query` subscription share the criteria language of the server resources — a
74
+ bare value is equality, a bare array means "any of these", and `$eq $ne $gt $gte $lt $lte $in $nin
75
+ $exists $null $like $ilike $regex $startsWith $endsWith $between $contains $contained $overlaps`
76
+ combine under `$and` / `$or` / `$not`. A dotted key reaches into the record; a value of `undefined`
77
+ is skipped. `matchCriteria`, `filterRecords` and `sortRecords` are exported for filtering a list
78
+ already in hand.
79
+
80
+ ```typescript
81
+ const open = await resource.match({ status: 'open' })
82
+ const [unsubscribe] = resource.subscribe({
83
+ query: { status: 'open' },
84
+ listener: models => { /* re-runs on every write that changes the answer */ }
85
+ })
86
+ ```
65
87
 
66
88
  ### `StateModel<T>`
67
89
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/state",
4
- "version": "0.1.18-rc.6",
5
- "generatedAt": "2026-08-18T14:48:00.517Z",
4
+ "version": "0.1.18-rc.8",
5
+ "generatedAt": "2026-08-24T21:14:00.121Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: state
3
- description: How to use @owlmeans/state — appendStateResource() to register a state resource on a context, then ctx.getStateResource(alias) to read/write typed application state. Auto-invoked when importing state primitives.
3
+ description: How to use @owlmeans/state — appendStateResource() to register a client state resource on a context, useStoreModel/useStoreList to read it from React, live query subscriptions, and the StateModel commit semantics. Auto-invoked when importing state primitives or building client-side application state.
4
4
  user-invocable: false
5
5
  ---
6
6
  <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
@@ -8,40 +8,144 @@ user-invocable: false
8
8
  # @owlmeans/state
9
9
 
10
10
  **Layer:** Core
11
- **Install:** `"@owlmeans/state": "^0.1.18-rc.6"` in `dependencies`
11
+ **Install:** `"@owlmeans/state": "^0.1.18-rc.8"` in `dependencies`
12
+
13
+ The framework's client store. A state resource is a `Resource` like any other, registered **on the
14
+ context** — which is what separates it from a store held beside the app: a screen, a service and a
15
+ guard all reach the same records through the same container.
12
16
 
13
17
  ## Key Exports
14
18
 
15
19
  | Export | Description |
16
20
  |--------|-------------|
17
- | `appendStateResource<C, T>(context, alias)` | Register a state resource on the context |
18
- | `StateResource<T>` types | Typed state container interface |
19
- | Errors | Typed state errors |
20
- | Constants | Default state aliases |
21
+ | `appendStateResource<C, T>(context, alias?)` | Register a state resource on the context |
22
+ | `createStateResource<T>(alias?)` | The bare factory, when you register it yourself |
23
+ | `StateResource<T>` | The resource interface — full CRUD plus `all`, `match`, `subscribe`, `listen`, `erase` |
24
+ | `StateModel<T>` | The subscribed wrapper — `record`, `update`, `commit`, `clear` |
25
+ | `matchCriteria`, `filterRecords`, `sortRecords` | The criteria evaluator, for filtering a list you already hold |
26
+ | `DEFAULT_ID` (`_default`), `DEFAULT_ALIAS` (`state`) | Constants |
27
+
28
+ The React hooks live in **`@owlmeans/client`** — `useStoreModel`, `useStoreList`. They are not
29
+ re-exported by `@owlmeans/web-client`, so import them from `@owlmeans/client` directly.
21
30
 
22
- ## Usage
31
+ ## Registering
23
32
 
24
- Append a state resource at context construction time, expose a typed accessor:
33
+ Every client context already carries one default state resource, so `useStoreModel(id)` works with
34
+ no setup at all. Register a named one per entity when records of different kinds must not share an
35
+ id space:
25
36
 
26
37
  ```typescript
27
38
  import { appendStateResource } from '@owlmeans/state'
28
39
 
29
- export const VIB_PROJECT_STATE = 'vib-project-state'
40
+ export const TASK_STATE = 'task-state'
30
41
 
31
42
  export const makeContext = <C extends Config, T extends Context<C>>(cfg: C): T => {
32
43
  const context = makeBasicContext<C, T>(cfg)
33
- appendStateResource<C, T>(context, VIB_PROJECT_STATE)
34
- context.projectStore = () => context.getStateResource(VIB_PROJECT_STATE)
44
+ appendStateResource<C, T>(context, TASK_STATE)
45
+ // A child context must inherit THIS factory, or it is built without the resource above.
46
+ context.makeContext = makeContext as typeof context.makeContext
35
47
  return context
36
48
  }
49
+ ```
50
+
51
+ Reach it with `context.getStateResource<Task>(TASK_STATE)`. A typed accessor on the context
52
+ (`context.taskStore = () => context.getStateResource(TASK_STATE)`) is optional sugar.
53
+
54
+ ## Reading it from React
55
+
56
+ ```typescript
57
+ import { useStoreList, useStoreModel } from '@owlmeans/client'
58
+
59
+ // One record, by id. Re-renders whenever that record changes.
60
+ const task = useStoreModel<Task>(id, TASK_STATE)
61
+ task.record.title
62
+
63
+ // A LIVE QUERY. Re-renders whenever any write changes which records match.
64
+ const open = useStoreList<Task>({ query: { status: 'open' }, resource: TASK_STATE })
65
+ open.map(model => model.record.title)
66
+
67
+ // Everything in the store.
68
+ const all = useStoreList<Task>({ query: {}, resource: TASK_STATE })
69
+ ```
70
+
71
+ A query subscription creates nothing and re-evaluates on every create, update and delete — a list
72
+ screen never recomputes ids and never re-subscribes to keep up. The criteria object is compared by
73
+ content, so a filter that changes narrows the list.
74
+
75
+ An **id** subscription is different on purpose: it CREATES a placeholder record so a screen has
76
+ something to bind to before the real one arrives. `useStoreModel(undefined)` therefore hands back a
77
+ record whose id is `DEFAULT_ID` — that sentinel, not `null`, is what "nothing loaded yet" looks
78
+ like:
79
+
80
+ ```typescript
81
+ const loading = task.record.id === DEFAULT_ID
82
+ ```
83
+
84
+ ## Writing to it
85
+
86
+ The server is the source of truth; the store is what the screen reads. Fetch, then write what came
87
+ back into the store, and let the subscriptions render it:
88
+
89
+ ```typescript
90
+ const store = ctx.getStateResource<Task>(TASK_STATE)
91
+
92
+ const [tasks] = await ctx.entrypoint<ClientEntrypoint<Task[]>>(TASK_LIST).call()
93
+ for (const task of tasks) {
94
+ await store.save(task)
95
+ }
96
+ ```
97
+
98
+ `save` creates or replaces. `update` requires the record to exist. `delete(id)` removes it. Each
99
+ one notifies every subscriber that cares.
100
+
101
+ ### The commit rule
102
+
103
+ `StateModel.record` is a COPY. Assigning to it changes nothing anyone else can see:
104
+
105
+ ```typescript
106
+ model.record.title = 'renamed' // WRONG — a silent no-op, nothing re-renders
107
+ model.update({ title: 'renamed' }) // RIGHT — merges and commits
108
+ ```
109
+
110
+ `update(data)` merges and commits in one step; `commit()` writes the current `record` back and is
111
+ what you call after assigning several fields; `clear()` deletes the record. `commit()` skips the
112
+ write when nothing actually changed, so calling it twice is free.
37
113
 
38
- // Later, in a component or handler:
39
- const store = ctx.projectStore()
40
- const current = await store.get('current')
114
+ ## Querying
115
+
116
+ `list`, `match` and the `query` subscription all take the same criteria language as the server
117
+ resources, so a filter written for an endpoint means the same thing applied locally:
118
+
119
+ ```typescript
120
+ await store.all() // every record, plain array
121
+ await store.match({ status: 'open' }) // the matching records, plain array
122
+ await store.list({ status: ['open', 'blocked'] }) // the Resource envelope: { items, pager }
123
+ await store.list({ criteria: { status: 'open' }, pager: { page: 0, size: 20, sort: ['createdAt'] } })
124
+ ```
125
+
126
+ - A bare value is equality; a bare **array means "any of these"**.
127
+ - Operators: `$eq $ne $gt $gte $lt $lte $in $nin $exists $null $like $ilike $regex $startsWith
128
+ $endsWith $between $contains $contained $overlaps`, and `$and $or $not` to combine.
129
+ - A dotted key reaches into the record (`'owner.team'`).
130
+ - A criteria value of `undefined` is SKIPPED — an untouched filter must not empty the list.
131
+ - `list()` with no arguments returns everything: a state resource is unpaged unless a pager is
132
+ asked for, unlike a server resource that defaults to a page size.
133
+
134
+ `all()` and `match()` return plain arrays; `list()` returns `{ items, pager }` because that is the
135
+ `Resource` contract. Destructuring the wrong one is a silently empty render, so pick by shape.
136
+
137
+ ## Subscribing outside React
138
+
139
+ ```typescript
140
+ const [unsubscribe] = store.subscribe({ query: { status: 'open' }, listener: models => { ... } })
141
+ const stop = store.listen(models => { ... }) // every change, whatever it is
142
+ await store.erase() // drop everything
41
143
  ```
42
144
 
145
+ Subscribing the same listener function twice throws — hold the unsubscribe and call it instead.
146
+
43
147
  ## Depends On
44
148
 
45
149
  - `@owlmeans/resource` — `StateResource` extends `Resource`
46
150
  - `@owlmeans/context` — for `getStateResource`
47
- - `@owlmeans/error`, `@owlmeans/i18n`
151
+ - React hooks: `@owlmeans/client`
package/build/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export type * from './types.js';
2
2
  export * from './consts.js';
3
3
  export * from './errors.js';
4
4
  export * from './resource.js';
5
+ export * from './utils/criteria.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAE/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAE/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA"}
package/build/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './consts.js';
2
2
  export * from './errors.js';
3
3
  export * from './resource.js';
4
+ export * from './utils/criteria.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgC,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACtF,OAAO,KAAK,EAAiB,aAAa,EAAE,mBAAmB,EAA2B,MAAM,YAAY,CAAA;AAI5G,OAAO,KAAK,EAAE,YAAY,IAAI,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEvF,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,cAAc,UAAS,MAAM,KAAmB,aAAa,CAAC,CAAC,CA6N5G,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,OACnE,CAAC,UAAS,MAAM,KACpB,CAAC,GAAG,mBAWN,CAAA"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA8C,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACpG,OAAO,KAAK,EAA6B,aAAa,EAAE,mBAAmB,EAA2B,MAAM,YAAY,CAAA;AAKxH,OAAO,KAAK,EAAE,YAAY,IAAI,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEvF,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,cAAc,UAAS,MAAM,KAAmB,aAAa,CAAC,CAAC,CAsT5G,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,OACnE,CAAC,UAAS,MAAM,KACpB,CAAC,GAAG,mBAWN,CAAA"}
package/build/resource.js CHANGED
@@ -1,8 +1,10 @@
1
1
  import { appendContextual } from '@owlmeans/context';
2
2
  import { MisshapedRecord, RecordExists, UnknownRecordError, UnsupportedArgumentError } from '@owlmeans/resource';
3
+ import { prepareListOptions } from '@owlmeans/resource';
3
4
  import { DEFAULT_ALIAS, DEFAULT_ID } from './consts';
4
5
  import { StateListenerError } from './errors.js';
5
6
  import { createStateModel } from './utils/model.js';
7
+ import { filterRecords, sortRecords } from './utils/criteria.js';
6
8
  export const createStateResource = (alias = DEFAULT_ALIAS) => {
7
9
  const location = `state-resource:${alias}`;
8
10
  const store = {};
@@ -10,10 +12,20 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
10
12
  const listenerToRecord = new Map();
11
13
  const globalListeners = [];
12
14
  const systemToListeners = {};
15
+ const listenerToQuery = new Map();
16
+ const systemToQueries = {};
13
17
  const _notifyGlobalListeners = (records) => {
14
18
  globalListeners.forEach(listener => listener(records.map(record => createStateModel(record, resource))));
15
19
  };
16
20
  const _usubscribe = (params) => () => {
21
+ listenerToQuery.delete(params.listener);
22
+ Object.entries(systemToQueries).some(([key, subscription]) => {
23
+ if (subscription.listener === params.listener) {
24
+ delete systemToQueries[key];
25
+ return true;
26
+ }
27
+ return false;
28
+ });
17
29
  const ids = listenerToRecord.get(params.listener);
18
30
  listenerToRecord.delete(params.listener);
19
31
  ids?.forEach(id => {
@@ -33,6 +45,19 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
33
45
  return false;
34
46
  });
35
47
  };
48
+ const _queryModels = (query) => filterRecords(Object.values(store), query).map(record => createStateModel(record, resource));
49
+ /**
50
+ * Re-run every live query and hand each subscriber its current answer.
51
+ *
52
+ * Deliberately unconditional: deciding whether a write could have changed a given query's
53
+ * result is the same work as re-running it, and getting that wrong leaves a list stale with
54
+ * nothing to indicate it.
55
+ */
56
+ const _notifyQueryListeners = () => {
57
+ for (const subscription of [...listenerToQuery.values(), ...Object.values(systemToQueries)]) {
58
+ subscription.listener(_queryModels(subscription.query), subscription.systemId);
59
+ }
60
+ };
36
61
  const _notifyListeners = (record) => {
37
62
  for (const listener of recordToListener.get(record.id) ?? []) {
38
63
  listener([createStateModel(record, resource)]);
@@ -66,18 +91,28 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
66
91
  }
67
92
  return record;
68
93
  },
94
+ /**
95
+ * The `Resource` list contract, criteria and pager included.
96
+ *
97
+ * The default page size is 0 — meaning UNPAGED — rather than the ten a server resource
98
+ * defaults to. Every existing caller of a state resource writes `list()` and expects the
99
+ * whole store back; silently returning the first ten would be a truncation nothing reports.
100
+ * Pagination happens when a pager is actually asked for.
101
+ */
69
102
  list: async (criteria, opts) => {
70
- if (criteria != null) {
71
- throw new UnsupportedArgumentError(`${location}:list:criteria`);
72
- }
73
- if (opts != null) {
74
- throw new UnsupportedArgumentError(`${location}:list:opts`);
75
- }
103
+ const options = prepareListOptions(0, criteria, opts);
104
+ const matched = sortRecords(filterRecords(Object.values(store), options.criteria), options.pager?.sort);
105
+ const size = options.pager?.size ?? 0;
106
+ const page = options.pager?.page ?? 0;
107
+ const items = size > 0 ? matched.slice(page * size, page * size + size) : matched;
76
108
  const result = {
77
- items: Object.entries(store).map(([, record]) => record)
109
+ items,
110
+ pager: { ...options.pager, total: matched.length }
78
111
  };
79
112
  return result;
80
113
  },
114
+ all: async () => Object.values(store),
115
+ match: async (criteria) => filterRecords(Object.values(store), criteria),
81
116
  save: async (record, opts) => {
82
117
  const id = record.id ?? DEFAULT_ID;
83
118
  if (store[id] != null) {
@@ -98,6 +133,7 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
98
133
  store[record.id] = record;
99
134
  _notifyListeners(store[record.id]);
100
135
  _notifyGlobalListeners([store[record.id]]);
136
+ _notifyQueryListeners();
101
137
  return record;
102
138
  },
103
139
  update: async (record, opts) => {
@@ -114,6 +150,7 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
114
150
  Object.assign(reference, record);
115
151
  _notifyListeners(reference);
116
152
  _notifyGlobalListeners([reference]);
153
+ _notifyQueryListeners();
117
154
  return reference;
118
155
  },
119
156
  delete: async (id, opts) => {
@@ -131,6 +168,7 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
131
168
  delete store[_id];
132
169
  _notifyListeners(record);
133
170
  _notifyGlobalListeners([record]);
171
+ _notifyQueryListeners();
134
172
  return record;
135
173
  },
136
174
  pick: async (id, opts) => {
@@ -145,6 +183,31 @@ export const createStateResource = (alias = DEFAULT_ALIAS) => {
145
183
  return record;
146
184
  },
147
185
  subscribe: params => {
186
+ /**
187
+ * A query subscription is a different thing from an id subscription and cannot be layered
188
+ * on top of one: it creates no placeholder record, and its answer is a set that changes
189
+ * membership rather than a fixed list of records that change content. `id` wins when both
190
+ * are given, so an existing caller that happens to pass a query keeps its behaviour.
191
+ */
192
+ if (params.query != null && params.id == null) {
193
+ const subscription = { query: params.query, listener: params.listener };
194
+ const models = _queryModels(params.query);
195
+ if (params._systemId != null) {
196
+ const key = `${params._systemId}:query:${JSON.stringify(params.query)}`;
197
+ if (systemToQueries[key] != null) {
198
+ return [_usubscribe(params), models];
199
+ }
200
+ subscription.systemId = key;
201
+ systemToQueries[key] = subscription;
202
+ }
203
+ else {
204
+ if (listenerToQuery.has(params.listener)) {
205
+ throw new StateListenerError('subscribed');
206
+ }
207
+ listenerToQuery.set(params.listener, subscription);
208
+ }
209
+ return [_usubscribe(params), models];
210
+ }
148
211
  const id = params.id ?? DEFAULT_ID;
149
212
  const ids = Array.isArray(id) ? id : [id];
150
213
  const records = ids.map(id => {
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAGhH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAA2B,KAAK,GAAW,aAAa,EAAoB,EAAE;IAC/G,MAAM,QAAQ,GAAG,kBAAkB,KAAK,EAAE,CAAA;IAE1C,MAAM,KAAK,GAAwB,EAAE,CAAA;IACrC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiC,CAAA;IACjE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA8B,CAAA;IAC9D,MAAM,eAAe,GAAuB,EAAE,CAAA;IAC9C,MAAM,iBAAiB,GAAqC,EAAE,CAAA;IAI9D,MAAM,sBAAsB,GAAG,CAAC,OAAY,EAAE,EAAE;QAC9C,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAC1C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC1D,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,MAAkC,EAAE,EAAE,CAAC,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACjD,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACxC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE;YAChB,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC1C,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACjC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACzB,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;YACzD,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACjC,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBAC7B,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,MAAS,EAAE,EAAE;QACrC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,QAAQ,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAChD,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACzC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAG,CAAC,EAAE,CAAC;gBAC7B,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YACnF,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GAAqB,gBAAgB,CAAmB,KAAK,EAAE;QAC3E,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;YACnD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;YAClC,CAAC;YAED,OAAO,MAAa,CAAA;QACtB,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,YAAY,CAAC,CAAA;YAC7D,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAA;YAC5D,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAkB,CAAA;YAEzC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,MAAa,CAAA;QACtB,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAA;YACjE,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,YAAY,CAAC,CAAA;YAC7D,CAAC;YAED,MAAM,MAAM,GAAkB;gBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAQ;aAChE,CAAA;YAED,OAAO,MAAa,CAAA;QACtB,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,UAAU,CAAA;YAClC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBACtB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtC,CAAC;YAED,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAwB,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBAC3C,MAAM,CAAC,EAAE,GAAG,UAAU,CAAA;YACxB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,EAAc,CAAC,IAAI,IAAI,EAAE,CAAC;gBACzC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACnC,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,cAAc,CAAC,CAAA;YAC/D,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,EAAc,CAAC,GAAG,MAAsB,CAAA;YAErD,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAc,CAAC,CAAC,CAAA;YAC9C,sBAAsB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAc,CAAC,CAAC,CAAC,CAAA;YAEtD,OAAO,MAAa,CAAA;QACtB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC7B,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,cAAc,CAAC,CAAA;YAC/D,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBAC3C,MAAM,CAAC,EAAE,GAAG,UAAU,CAAA;YACxB,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAc,CAAC,CAAA;YAC9C,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACzC,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YAEhC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAC3B,sBAAsB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;YAEnC,OAAO,SAAgB,CAAA;QACzB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC/C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAA;YAC1C,CAAC;YACD,MAAM,MAAM,GAAa,KAAK,CAAC,GAAe,CAAM,CAAA;YACpD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,wBAAwB,CAAC,GAAG,QAAQ,cAAc,CAAC,CAAA;YAC/D,CAAC;YACD,OAAO,KAAK,CAAC,GAAe,CAAC,CAAA;YAE7B,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACxB,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;YAEhC,OAAO,MAAa,CAAA;QACtB,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC/C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC/C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAA;YACnC,CAAC;YAED,OAAO,MAAa,CAAA;QACtB,CAAC;QAED,SAAS,EAAE,MAAM,CAAC,EAAE;YAClB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,UAAU,CAAA;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAC3B,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;oBACtB,KAAK,CAAC,EAAc,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,EAAO,CAAA;gBACxD,CAAC;gBACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC9C,CAAC,CAAC,CAAA;YACF,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;gBAClD,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBACnC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;gBACvC,CAAC;gBAED,iBAAiB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1C,MAAM,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAA;gBAC5C,CAAC;gBACD,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;gBAC1C,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC9B,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;oBACrC,CAAC;oBACD,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAChD,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;QAED,MAAM,EAAE,QAAQ,CAAC,EAAE;YACjB,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAE9B,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAC/C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;oBACf,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACxE,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,GAAM,EAAE,KAAK,GAAW,aAAa,EACZ,EAAE;IAC3B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,IAAI,GAAG,GAA8B,CAAA;IAE3C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAC/B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;IACxE,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
package/build/types.d.ts CHANGED
@@ -6,10 +6,38 @@ export interface StateResource<T extends ResourceRecord> extends Resource<T> {
6
6
  subscribe: (params: StateSubscriptionOption<T>) => [() => void, StateModel<T>[]];
7
7
  listen: (listener: StateListener<T>) => () => void;
8
8
  erase: () => Promise<void>;
9
+ /**
10
+ * Every record held, as a plain array.
11
+ *
12
+ * `list()` answers the `Resource` contract and therefore returns `{ items, pager }`; this is
13
+ * the same data without the envelope, for the overwhelmingly common case of "give me what is
14
+ * in the store". Destructuring the wrong one of the two is a silent empty render, so both
15
+ * spellings exist rather than one being the trap the other rescues.
16
+ */
17
+ all: () => Promise<T[]>;
18
+ /**
19
+ * The records the criteria accepts, as a plain array.
20
+ *
21
+ * Same criteria language as the server resources (`@owlmeans/postgres-resource`), so a filter
22
+ * written for an endpoint means the same thing applied locally. Records the store does not
23
+ * hold cannot match — this filters what has been loaded, it never fetches.
24
+ */
25
+ match: (criteria?: ListCriteria) => Promise<T[]>;
9
26
  }
10
27
  export interface StateSubscriptionOption<T extends ResourceRecord> {
11
28
  id?: string | string[];
12
29
  _systemId?: string;
30
+ /**
31
+ * Subscribe to a live QUERY instead of to fixed ids.
32
+ *
33
+ * The listener is called with every record the criteria currently accepts, and again whenever
34
+ * a create, update or delete changes that answer — so a list screen never recomputes ids and
35
+ * never re-subscribes to keep up. Ignored when `id` is given: a subscription is either to
36
+ * named records or to a query, never to both.
37
+ *
38
+ * Unlike an id subscription, this one creates nothing: an empty store yields an empty list
39
+ * rather than a placeholder record.
40
+ */
13
41
  query?: ListCriteria;
14
42
  default?: Partial<T>;
15
43
  listener: StateListener<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEhF,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC1E;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChF,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAA;IAClD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,cAAc;IAC/D,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,cAAc;IACrD,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,cAAc;IAClD,MAAM,EAAE,CAAC,CAAC;IAEV,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAEjC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAEnC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAA;CACjF;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,CAAC,SAAS,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;CACtI;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,CAAC,SAAS,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;CACnJ;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IACnH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEhF,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC1E;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChF,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAA;IAClD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1B;;;;;;;OAOG;IACH,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IAEvB;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,cAAc;IAC/D,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,cAAc;IACrD,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,cAAc;IAClD,MAAM,EAAE,CAAC,CAAC;IAEV,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAEjC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAEnC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAA;CACjF;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,CAAC,SAAS,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;CACtI;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,CAAC,SAAS,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;CACnJ;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IACnH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,20 @@
1
+ import type { ListCriteria, ListSort, ResourceRecord } from '@owlmeans/resource';
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
+ */
11
+ export declare const matchCriteria: <T extends ResourceRecord>(record: T, criteria?: ListCriteria) => boolean;
12
+ /** Every record the criteria accepts, in insertion order. */
13
+ export declare const filterRecords: <T extends ResourceRecord>(records: T[], criteria?: ListCriteria) => T[];
14
+ /**
15
+ * Sort a copy by `ListPager.sort`. `[field, true]` is descending — the same mapping mongo's
16
+ * `order ? -1 : 1` and the postgres builder use, so a pager written for one store orders the
17
+ * same way against another.
18
+ */
19
+ export declare const sortRecords: <T extends ResourceRecord>(records: T[], sort?: ListSort[]) => T[];
20
+ //# sourceMappingURL=criteria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../src/utils/criteria.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAgKhF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,cAAc,UAC5C,CAAC,aAAa,YAAY,KACjC,OA0CF,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,cAAc,WAC3C,CAAC,EAAE,aAAa,YAAY,KACpC,CAAC,EAE2D,CAAA;AAE/D;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,cAAc,WAAW,CAAC,EAAE,SAAS,QAAQ,EAAE,KAAG,CAAC,EAuBxF,CAAA"}