@haverstack/core 0.42.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -9
- package/dist/access.d.ts +36 -34
- package/dist/access.d.ts.map +1 -1
- package/dist/access.js +51 -100
- package/dist/access.js.map +1 -1
- package/dist/adapter/combine.d.ts.map +1 -1
- package/dist/adapter/combine.js +14 -7
- package/dist/adapter/combine.js.map +1 -1
- package/dist/adapter/copy.d.ts +27 -0
- package/dist/adapter/copy.d.ts.map +1 -0
- package/dist/adapter/copy.js +105 -0
- package/dist/adapter/copy.js.map +1 -0
- package/dist/adapter/index.d.ts +9 -4
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +6 -3
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/reach.d.ts +14 -0
- package/dist/adapter/reach.d.ts.map +1 -0
- package/dist/adapter/reach.js +31 -0
- package/dist/adapter/reach.js.map +1 -0
- package/dist/adapter/seed.d.ts +13 -0
- package/dist/adapter/seed.d.ts.map +1 -0
- package/dist/adapter/seed.js +26 -0
- package/dist/adapter/seed.js.map +1 -0
- package/dist/associations/identity.d.ts +18 -42
- package/dist/associations/identity.d.ts.map +1 -1
- package/dist/associations/identity.js +60 -84
- package/dist/associations/identity.js.map +1 -1
- package/dist/associations/validation.d.ts +1 -8
- package/dist/associations/validation.d.ts.map +1 -1
- package/dist/associations/validation.js +3 -30
- package/dist/associations/validation.js.map +1 -1
- package/dist/collection.d.ts +7 -11
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +24 -34
- package/dist/collection.js.map +1 -1
- package/dist/content-match.d.ts +2 -2
- package/dist/content-match.js +2 -2
- package/dist/errors.d.ts +41 -12
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +56 -15
- package/dist/errors.js.map +1 -1
- package/dist/grants.d.ts +18 -6
- package/dist/grants.d.ts.map +1 -1
- package/dist/grants.js +48 -37
- package/dist/grants.js.map +1 -1
- package/dist/hash.d.ts +8 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +14 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +29 -5
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +69 -44
- package/dist/install.js.map +1 -1
- package/dist/lazy.d.ts +13 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +27 -0
- package/dist/lazy.js.map +1 -0
- package/dist/merge.d.ts +1 -1
- package/dist/merge.js +1 -1
- package/dist/query-validation.d.ts +41 -28
- package/dist/query-validation.d.ts.map +1 -1
- package/dist/query-validation.js +85 -71
- package/dist/query-validation.js.map +1 -1
- package/dist/record-changes.d.ts +12 -36
- package/dist/record-changes.d.ts.map +1 -1
- package/dist/record-changes.js +9 -98
- package/dist/record-changes.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -5
- package/dist/schema.js.map +1 -1
- package/dist/scoped-stack/authority-snapshot.d.ts +37 -0
- package/dist/scoped-stack/authority-snapshot.d.ts.map +1 -0
- package/dist/scoped-stack/authority-snapshot.js +49 -0
- package/dist/scoped-stack/authority-snapshot.js.map +1 -0
- package/dist/scoped-stack/authority.d.ts +69 -51
- package/dist/scoped-stack/authority.d.ts.map +1 -1
- package/dist/scoped-stack/authority.js +189 -153
- package/dist/scoped-stack/authority.js.map +1 -1
- package/dist/scoped-stack/family-policy.d.ts +59 -0
- package/dist/scoped-stack/family-policy.d.ts.map +1 -0
- package/dist/scoped-stack/family-policy.js +68 -0
- package/dist/scoped-stack/family-policy.js.map +1 -0
- package/dist/scoped-stack/scoped-stack.d.ts +73 -86
- package/dist/scoped-stack/scoped-stack.d.ts.map +1 -1
- package/dist/scoped-stack/scoped-stack.js +279 -337
- package/dist/scoped-stack/scoped-stack.js.map +1 -1
- package/dist/scoped-stack/subscription.d.ts +14 -33
- package/dist/scoped-stack/subscription.d.ts.map +1 -1
- package/dist/scoped-stack/subscription.js +16 -57
- package/dist/scoped-stack/subscription.js.map +1 -1
- package/dist/stack/arguments.d.ts +27 -0
- package/dist/stack/arguments.d.ts.map +1 -0
- package/dist/stack/arguments.js +53 -0
- package/dist/stack/arguments.js.map +1 -0
- package/dist/stack/attachments.d.ts +1 -1
- package/dist/stack/attachments.js +1 -1
- package/dist/stack/changes.d.ts +4 -10
- package/dist/stack/changes.d.ts.map +1 -1
- package/dist/stack/changes.js +8 -8
- package/dist/stack/changes.js.map +1 -1
- package/dist/stack/client.d.ts +34 -58
- package/dist/stack/client.d.ts.map +1 -1
- package/dist/stack/field-rules.d.ts +27 -0
- package/dist/stack/field-rules.d.ts.map +1 -0
- package/dist/stack/field-rules.js +50 -0
- package/dist/stack/field-rules.js.map +1 -0
- package/dist/stack/install-app.d.ts +2 -2
- package/dist/stack/install-app.d.ts.map +1 -1
- package/dist/stack/install-app.js +16 -14
- package/dist/stack/install-app.js.map +1 -1
- package/dist/stack/integrity.d.ts +9 -53
- package/dist/stack/integrity.d.ts.map +1 -1
- package/dist/stack/integrity.js +47 -107
- package/dist/stack/integrity.js.map +1 -1
- package/dist/stack/limits.d.ts +1 -1
- package/dist/stack/limits.js +1 -1
- package/dist/stack/reads.d.ts +9 -5
- package/dist/stack/reads.d.ts.map +1 -1
- package/dist/stack/reads.js +24 -4
- package/dist/stack/reads.js.map +1 -1
- package/dist/stack/stack.d.ts +84 -79
- package/dist/stack/stack.d.ts.map +1 -1
- package/dist/stack/stack.js +236 -306
- package/dist/stack/stack.js.map +1 -1
- package/dist/stack/system-types.d.ts.map +1 -1
- package/dist/stack/system-types.js +1 -3
- package/dist/stack/system-types.js.map +1 -1
- package/dist/stack/type-grants.d.ts.map +1 -1
- package/dist/stack/type-grants.js +9 -6
- package/dist/stack/type-grants.js.map +1 -1
- package/dist/stack/write-expectation.d.ts +13 -12
- package/dist/stack/write-expectation.d.ts.map +1 -1
- package/dist/stack/write-expectation.js.map +1 -1
- package/dist/stack/write-gate.d.ts +23 -0
- package/dist/stack/write-gate.d.ts.map +1 -0
- package/dist/stack/write-gate.js +17 -0
- package/dist/stack/write-gate.js.map +1 -0
- package/dist/testing.d.ts +37 -24
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +176 -153
- package/dist/testing.js.map +1 -1
- package/dist/types/adapter.d.ts +115 -43
- package/dist/types/adapter.d.ts.map +1 -1
- package/dist/types/associations.d.ts +1 -17
- package/dist/types/associations.d.ts.map +1 -1
- package/dist/types/associations.js +1 -8
- package/dist/types/associations.js.map +1 -1
- package/dist/types/capabilities.d.ts +8 -8
- package/dist/types/capabilities.d.ts.map +1 -1
- package/dist/types/events.d.ts +3 -8
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/query.d.ts +4 -4
- package/dist/types/system.d.ts +2 -8
- package/dist/types/system.d.ts.map +1 -1
- package/dist/types/system.js.map +1 -1
- package/dist/validate.d.ts +2 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +2 -1
- package/dist/validate.js.map +1 -1
- package/dist/wire/body.d.ts +32 -9
- package/dist/wire/body.d.ts.map +1 -1
- package/dist/wire/body.js +69 -8
- package/dist/wire/body.js.map +1 -1
- package/dist/wire/index.d.ts +4 -4
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +3 -3
- package/dist/wire/index.js.map +1 -1
- package/dist/wire/record.d.ts +1 -8
- package/dist/wire/record.d.ts.map +1 -1
- package/dist/wire/record.js +0 -48
- package/dist/wire/record.js.map +1 -1
- package/dist/wire/request.d.ts +18 -18
- package/dist/wire/request.d.ts.map +1 -1
- package/dist/wire/request.js +41 -36
- package/dist/wire/request.js.map +1 -1
- package/package.json +1 -1
- package/dist/stack/identity-bindings.d.ts +0 -13
- package/dist/stack/identity-bindings.d.ts.map +0 -1
- package/dist/stack/identity-bindings.js +0 -36
- package/dist/stack/identity-bindings.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../src/lazy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,IAAI,CAAC,CAAC;IAGL,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,OAAO,CAA2B;gBAEb,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAEnD,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IAUjB,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/lazy.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A value loaded on first use and shared after — how one operation reads a
|
|
3
|
+
* set at most once. A failed load is not kept, so the next use asks again,
|
|
4
|
+
* and clear() drops the value for a holder that outlives one operation.
|
|
5
|
+
*/
|
|
6
|
+
export class Lazy {
|
|
7
|
+
load;
|
|
8
|
+
loading = null;
|
|
9
|
+
constructor(load) {
|
|
10
|
+
this.load = load;
|
|
11
|
+
}
|
|
12
|
+
get() {
|
|
13
|
+
if (this.loading)
|
|
14
|
+
return this.loading;
|
|
15
|
+
const loading = this.load();
|
|
16
|
+
this.loading = loading;
|
|
17
|
+
loading.catch(() => {
|
|
18
|
+
if (this.loading === loading)
|
|
19
|
+
this.loading = null;
|
|
20
|
+
});
|
|
21
|
+
return loading;
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this.loading = null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=lazy.js.map
|
package/dist/lazy.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../src/lazy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,IAAI;IAGc;IAFrB,OAAO,GAAsB,IAAI,CAAC;IAE1C,YAA6B,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAEvD,GAAG;QACD,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACjB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;CACF"}
|
package/dist/merge.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* -------------------------------------------------------
|
|
4
4
|
* Shallow merge-patch semantics for record content: a field set to `null`
|
|
5
5
|
* removes it, any other value replaces it, and omitted fields are retained.
|
|
6
|
-
* Shared by Stack.
|
|
6
|
+
* Shared by Stack.patchContent() (for client-side validation) and every
|
|
7
7
|
* StackRecordAdapter's patchContent() implementation, so a patch produces
|
|
8
8
|
* the same merged content everywhere it's applied.
|
|
9
9
|
*/
|
package/dist/merge.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* -------------------------------------------------------
|
|
4
4
|
* Shallow merge-patch semantics for record content: a field set to `null`
|
|
5
5
|
* removes it, any other value replaces it, and omitted fields are retained.
|
|
6
|
-
* Shared by Stack.
|
|
6
|
+
* Shared by Stack.patchContent() (for client-side validation) and every
|
|
7
7
|
* StackRecordAdapter's patchContent() implementation, so a patch produces
|
|
8
8
|
* the same merged content everywhere it's applied.
|
|
9
9
|
*/
|
|
@@ -15,15 +15,16 @@
|
|
|
15
15
|
* the query — one rule, one answer.
|
|
16
16
|
* See docs/spec/data-model.md § Capability-gated filters.
|
|
17
17
|
*/
|
|
18
|
-
import type { JournalQuery, QuerySort, RecordFilter, StackCapabilities, VersionsQuery } from './types/index.js';
|
|
18
|
+
import type { AdapterQuery, PlainQuery, StackQuery, JournalQuery, QuerySort, RecordFilter, StackCapabilities, VersionsQuery } from './types/index.js';
|
|
19
19
|
/**
|
|
20
|
-
* Fail loud rather than silently widen: a filter
|
|
21
|
-
* would otherwise be dropped,
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* Fail loud rather than silently widen or reorder: a filter or sort the
|
|
21
|
+
* adapter can't honor would otherwise be dropped, answering with some
|
|
22
|
+
* other result, which a caller reading one bounded page cannot detect.
|
|
23
|
+
* Every refusal names the capability. The companion to resolveQuery(),
|
|
24
|
+
* which refuses the query's own shape; every entry point runs both. See
|
|
25
|
+
* docs/spec/data-model.md § Capability-gated filters.
|
|
25
26
|
*/
|
|
26
|
-
export declare function assertQueryCapabilities(
|
|
27
|
+
export declare function assertQueryCapabilities(query: AdapterQuery, capabilities: Pick<StackCapabilities, 'filter' | 'sort'>): void;
|
|
27
28
|
/**
|
|
28
29
|
* Hold `filter.contentByType` to a split along Types: at least one arm,
|
|
29
30
|
* each pinned to a TypeId and flat, and never beside a top-level content
|
|
@@ -54,24 +55,38 @@ export declare function parseContentFilterKey(key: string): string[];
|
|
|
54
55
|
* any untrusted caller. See docs/spec/data-model.md § Sorting and pagination.
|
|
55
56
|
*/
|
|
56
57
|
export declare function assertValidSort(sort: QuerySort | undefined): void;
|
|
58
|
+
/** The page a query reads when it names no `limit`. */
|
|
59
|
+
export declare const DEFAULT_QUERY_LIMIT = 50;
|
|
60
|
+
/** The largest page a query reads, whatever it asks for. */
|
|
61
|
+
export declare const MAX_QUERY_LIMIT = 1000;
|
|
57
62
|
/**
|
|
58
|
-
* The
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
+
* The query an adapter receives: its shape checked, and every default
|
|
64
|
+
* resolved so no adapter carries one — a named sort runs ascending, no
|
|
65
|
+
* sort is `createdAt` newest first, and the page is DEFAULT_QUERY_LIMIT
|
|
66
|
+
* up to MAX_QUERY_LIMIT. Shape refusals name no capability; see
|
|
67
|
+
* assertQueryCapabilities() for those that do. See docs/spec/data-model.md
|
|
68
|
+
* § Sorting and pagination.
|
|
63
69
|
*/
|
|
64
|
-
export declare function
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
export declare function resolveQuery(query: PlainQuery): AdapterQuery;
|
|
71
|
+
/** A query split where it enters `Stack`; see splitQuery(). */
|
|
72
|
+
export type SplitQuery = {
|
|
73
|
+
query: AdapterQuery;
|
|
74
|
+
presentAt?: StackQuery['presentAt'];
|
|
75
|
+
};
|
|
67
76
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* — see docs/spec/data-model.md § Capability-gated filters.
|
|
77
|
+
* Split a query at the door into what an adapter sees, resolved, and
|
|
78
|
+
* `presentAt`, which `Stack` applies to the results. Every check runs
|
|
79
|
+
* here, before the adapter is asked. See docs/spec/data-model.md
|
|
80
|
+
* § Sorting and pagination.
|
|
73
81
|
*/
|
|
74
|
-
export declare function
|
|
82
|
+
export declare function splitQuery(query: StackQuery): SplitQuery;
|
|
83
|
+
/**
|
|
84
|
+
* Hold a window bound — a page size, a cursor position — to an integer
|
|
85
|
+
* at or above `min`, the one shape every adapter reads alike: a negative
|
|
86
|
+
* `limit` drops entries from a JS slice but empties or lifts a SQL
|
|
87
|
+
* `LIMIT`. See docs/spec/data-model.md § Sorting and pagination.
|
|
88
|
+
*/
|
|
89
|
+
export declare function assertWindowInteger(value: number | undefined, label: string, min: 0 | 1): void;
|
|
75
90
|
/**
|
|
76
91
|
* Reject an association filter that names neither of its halves, or whose
|
|
77
92
|
* relationship target is malformed. `RelatedToFilter` and `AttachmentFilter`
|
|
@@ -95,16 +110,14 @@ export declare function assertValidBaseIdFilter(filter: {
|
|
|
95
110
|
baseId?: string | string[];
|
|
96
111
|
} | undefined): void;
|
|
97
112
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* whole log by contract, which a clamp would silently truncate.
|
|
113
|
+
* A journal window: `afterSeq` 0 is the start of the log. No ceiling is
|
|
114
|
+
* imposed — omitting `limit` reads the whole log by contract, which a
|
|
115
|
+
* clamp would silently truncate.
|
|
102
116
|
*/
|
|
103
117
|
export declare function assertValidJournalQuery(query: JournalQuery | undefined): void;
|
|
104
118
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* omitting `limit` reads every version by contract.
|
|
119
|
+
* A `getVersions()` window. No ceiling is imposed: omitting `limit` reads
|
|
120
|
+
* every version by contract.
|
|
108
121
|
*/
|
|
109
122
|
export declare function assertValidVersionsQuery(query: VersionsQuery | undefined): void;
|
|
110
123
|
//# sourceMappingURL=query-validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-validation.d.ts","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"query-validation.d.ts","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EAEV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,MAAM,CAAC,GACvD,IAAI,CAGN;AA0DD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAgD/E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAEnF;AAUD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB3D;AAaD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAsBjE;AAsDD,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,4DAA4D;AAC5D,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAc5D;AAED,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAMxD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAO9F;AAmCD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAmBpF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAKrE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,GAAG,IAAI,CAOhG;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAG7E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAG/E"}
|
package/dist/query-validation.js
CHANGED
|
@@ -18,16 +18,21 @@
|
|
|
18
18
|
import { ARGUMENTS_INVALID, StackBadRequestError, StackValidationError } from './errors.js';
|
|
19
19
|
import { familyIdProblem, parseTypeId } from './schema.js';
|
|
20
20
|
import { targetErrors } from './associations/validation.js';
|
|
21
|
-
import { CONTENT_SEGMENT_METACHARACTERS, SEGMENT_METACHARACTER_RE, isPlainObject, } from './validate.js';
|
|
21
|
+
import { CONTENT_SEGMENT_METACHARACTERS, MAX_VALIDATION_DEPTH, SEGMENT_METACHARACTER_RE, isPlainObject, } from './validate.js';
|
|
22
22
|
import { NATIVE_SORT_FIELDS } from './types/index.js';
|
|
23
23
|
/**
|
|
24
|
-
* Fail loud rather than silently widen: a filter
|
|
25
|
-
* would otherwise be dropped,
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
24
|
+
* Fail loud rather than silently widen or reorder: a filter or sort the
|
|
25
|
+
* adapter can't honor would otherwise be dropped, answering with some
|
|
26
|
+
* other result, which a caller reading one bounded page cannot detect.
|
|
27
|
+
* Every refusal names the capability. The companion to resolveQuery(),
|
|
28
|
+
* which refuses the query's own shape; every entry point runs both. See
|
|
29
|
+
* docs/spec/data-model.md § Capability-gated filters.
|
|
29
30
|
*/
|
|
30
|
-
export function assertQueryCapabilities(
|
|
31
|
+
export function assertQueryCapabilities(query, capabilities) {
|
|
32
|
+
assertFilterCapability(query.filter, capabilities);
|
|
33
|
+
assertSortCapability(query.sort, capabilities);
|
|
34
|
+
}
|
|
35
|
+
function assertFilterCapability(filter, capabilities) {
|
|
31
36
|
const { content: reach, contentPresent, contentByType, search } = capabilities.filter;
|
|
32
37
|
if (filter?.search && !search) {
|
|
33
38
|
throw new StackBadRequestError('Query uses filter.search, but this adapter does not declare the filter.search capability.', 'filter.search');
|
|
@@ -49,12 +54,9 @@ export function assertQueryCapabilities(filter, capabilities) {
|
|
|
49
54
|
: 'filter.content';
|
|
50
55
|
throw new StackBadRequestError(`Query uses ${used}, but this adapter declares filter.content: "none".`, 'filter.content');
|
|
51
56
|
}
|
|
52
|
-
if (arms.length > contentByType) {
|
|
53
|
-
throw new StackBadRequestError(contentByType
|
|
54
|
-
|
|
55
|
-
'filter.contentByType capability.'
|
|
56
|
-
: `Query uses ${arms.length} filter.contentByType arms, but this adapter takes at ` +
|
|
57
|
-
`most ${contentByType}.`, 'filter.contentByType');
|
|
57
|
+
if (arms.length > 0 && !contentByType) {
|
|
58
|
+
throw new StackBadRequestError('Query uses filter.contentByType, but this adapter does not declare the ' +
|
|
59
|
+
'filter.contentByType capability.', 'filter.contentByType');
|
|
58
60
|
}
|
|
59
61
|
if (present.length > 0 && !contentPresent) {
|
|
60
62
|
throw new StackBadRequestError('Query uses filter.contentPresent, but this adapter does not declare the ' +
|
|
@@ -122,8 +124,13 @@ export function assertValidContentByType(filter) {
|
|
|
122
124
|
export function filtersContent(features) {
|
|
123
125
|
return features.filter.content !== 'none';
|
|
124
126
|
}
|
|
125
|
-
/**
|
|
126
|
-
|
|
127
|
+
/**
|
|
128
|
+
* The longest path that can reach a stored value: a top-level field sits at
|
|
129
|
+
* depth 0 and each segment descends one level, so a path past this reaches
|
|
130
|
+
* nothing a write accepts. See docs/spec/data-model.md § Nested content
|
|
131
|
+
* paths.
|
|
132
|
+
*/
|
|
133
|
+
const MAX_CONTENT_PATH_SEGMENTS = MAX_VALIDATION_DEPTH + 1;
|
|
127
134
|
/**
|
|
128
135
|
* Split a content filter key into path segments. Write-time validation
|
|
129
136
|
* keeps stored field names free of the path metacharacters, but a filter
|
|
@@ -132,9 +139,6 @@ const MAX_CONTENT_PATH_SEGMENTS = 32;
|
|
|
132
139
|
*/
|
|
133
140
|
export function parseContentFilterKey(key) {
|
|
134
141
|
const segments = key.split('.');
|
|
135
|
-
// A SQLite adapter spends two json_each joins per segment against a
|
|
136
|
-
// 64-table join limit, so a path past the cap is one the engine could
|
|
137
|
-
// not execute. See docs/spec/data-model.md § Nested content paths.
|
|
138
142
|
if (segments.length > MAX_CONTENT_PATH_SEGMENTS) {
|
|
139
143
|
throw new StackBadRequestError(`Invalid content filter path "${key}": at most ${MAX_CONTENT_PATH_SEGMENTS} segments.`);
|
|
140
144
|
}
|
|
@@ -168,8 +172,8 @@ export function assertValidSort(sort) {
|
|
|
168
172
|
if (!sort)
|
|
169
173
|
return;
|
|
170
174
|
const named = [sort.field, sort.contentField, sort.contentFieldByType].filter((member) => member !== undefined);
|
|
171
|
-
if (named.length
|
|
172
|
-
throw new StackBadRequestError('A sort names one of a native field, a content field or a content field per type.');
|
|
175
|
+
if (named.length !== 1) {
|
|
176
|
+
throw new StackBadRequestError('A sort names exactly one of a native field, a content field or a content field per type.');
|
|
173
177
|
}
|
|
174
178
|
if (sort.field !== undefined && !VALID_SORT_FIELDS.has(sort.field)) {
|
|
175
179
|
throw new StackBadRequestError(`Invalid sort field "${sort.field}": expected one of ${NATIVE_SORT_FIELDS.join(', ')}.`);
|
|
@@ -223,36 +227,64 @@ const assertValidSortByType = (byType) => {
|
|
|
223
227
|
}
|
|
224
228
|
}
|
|
225
229
|
};
|
|
230
|
+
/** The page a query reads when it names no `limit`. */
|
|
231
|
+
export const DEFAULT_QUERY_LIMIT = 50;
|
|
232
|
+
/** The largest page a query reads, whatever it asks for. */
|
|
233
|
+
export const MAX_QUERY_LIMIT = 1000;
|
|
226
234
|
/**
|
|
227
|
-
* The
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
235
|
+
* The query an adapter receives: its shape checked, and every default
|
|
236
|
+
* resolved so no adapter carries one — a named sort runs ascending, no
|
|
237
|
+
* sort is `createdAt` newest first, and the page is DEFAULT_QUERY_LIMIT
|
|
238
|
+
* up to MAX_QUERY_LIMIT. Shape refusals name no capability; see
|
|
239
|
+
* assertQueryCapabilities() for those that do. See docs/spec/data-model.md
|
|
240
|
+
* § Sorting and pagination.
|
|
232
241
|
*/
|
|
233
|
-
export function
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
242
|
+
export function resolveQuery(query) {
|
|
243
|
+
const { sort, limit, ...rest } = query;
|
|
244
|
+
assertValidBaseIdFilter(query.filter);
|
|
245
|
+
assertValidContentByType(query.filter);
|
|
246
|
+
assertValidSort(sort);
|
|
247
|
+
assertWindowInteger(limit, 'limit', 1);
|
|
248
|
+
assertValidAssociationFilters(query.filter);
|
|
249
|
+
return {
|
|
250
|
+
...rest,
|
|
251
|
+
sort: sort
|
|
252
|
+
? { ...sort, direction: sort.direction ?? 'asc' }
|
|
253
|
+
: { field: 'createdAt', direction: 'desc' },
|
|
254
|
+
limit: Math.min(limit ?? DEFAULT_QUERY_LIMIT, MAX_QUERY_LIMIT),
|
|
255
|
+
};
|
|
237
256
|
}
|
|
238
257
|
/**
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
* — see docs/spec/data-model.md § Capability-gated filters.
|
|
258
|
+
* Split a query at the door into what an adapter sees, resolved, and
|
|
259
|
+
* `presentAt`, which `Stack` applies to the results. Every check runs
|
|
260
|
+
* here, before the adapter is asked. See docs/spec/data-model.md
|
|
261
|
+
* § Sorting and pagination.
|
|
244
262
|
*/
|
|
245
|
-
export function
|
|
246
|
-
|
|
263
|
+
export function splitQuery(query) {
|
|
264
|
+
const { presentAt, ...plain } = query;
|
|
265
|
+
return {
|
|
266
|
+
query: resolveQuery(plain),
|
|
267
|
+
...(presentAt !== undefined && { presentAt }),
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Hold a window bound — a page size, a cursor position — to an integer
|
|
272
|
+
* at or above `min`, the one shape every adapter reads alike: a negative
|
|
273
|
+
* `limit` drops entries from a JS slice but empties or lifts a SQL
|
|
274
|
+
* `LIMIT`. See docs/spec/data-model.md § Sorting and pagination.
|
|
275
|
+
*/
|
|
276
|
+
export function assertWindowInteger(value, label, min) {
|
|
277
|
+
if (value === undefined)
|
|
247
278
|
return;
|
|
279
|
+
if (!Number.isInteger(value) || value < min) {
|
|
280
|
+
throw new StackBadRequestError(`Invalid ${label} ${String(value)}: expected ${min === 0 ? 'a non-negative' : 'a positive'} integer.`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function assertSortCapability(sort, capabilities) {
|
|
248
284
|
if (sort.contentFieldByType !== undefined) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
throw new StackBadRequestError(cap === 0
|
|
253
|
-
? 'Query uses sort.contentFieldByType, but this adapter does not declare the ' +
|
|
254
|
-
'sort.contentFieldByType capability.'
|
|
255
|
-
: `Query uses ${keys} sort.contentFieldByType keys, but this adapter takes at most ${cap}.`, 'sort.contentFieldByType');
|
|
285
|
+
if (!capabilities.sort.contentFieldByType) {
|
|
286
|
+
throw new StackBadRequestError('Query uses sort.contentFieldByType, but this adapter does not declare the ' +
|
|
287
|
+
'sort.contentFieldByType capability.', 'sort.contentFieldByType');
|
|
256
288
|
}
|
|
257
289
|
return;
|
|
258
290
|
}
|
|
@@ -263,7 +295,7 @@ export function assertSortCapability(sort, capabilities) {
|
|
|
263
295
|
}
|
|
264
296
|
return;
|
|
265
297
|
}
|
|
266
|
-
const field = sort
|
|
298
|
+
const { field } = sort;
|
|
267
299
|
if (!capabilities.sort.fields.includes(field)) {
|
|
268
300
|
throw new StackBadRequestError(`Query sorts by "${field}", which this adapter does not declare in sort.fields.`, 'sort.fields');
|
|
269
301
|
}
|
|
@@ -321,38 +353,20 @@ export function assertValidBaseIdFilter(filter) {
|
|
|
321
353
|
throw new StackValidationError(errors, ARGUMENTS_INVALID);
|
|
322
354
|
}
|
|
323
355
|
/**
|
|
324
|
-
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
* whole log by contract, which a clamp would silently truncate.
|
|
356
|
+
* A journal window: `afterSeq` 0 is the start of the log. No ceiling is
|
|
357
|
+
* imposed — omitting `limit` reads the whole log by contract, which a
|
|
358
|
+
* clamp would silently truncate.
|
|
328
359
|
*/
|
|
329
360
|
export function assertValidJournalQuery(query) {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
for (const key of ['afterSeq', 'limit']) {
|
|
333
|
-
const value = query[key];
|
|
334
|
-
if (value === undefined)
|
|
335
|
-
continue;
|
|
336
|
-
if (!Number.isInteger(value) || value < 0) {
|
|
337
|
-
throw new StackBadRequestError(`Invalid journal ${key} ${String(value)}: expected a non-negative integer.`);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
361
|
+
assertWindowInteger(query?.afterSeq, 'journal afterSeq', 0);
|
|
362
|
+
assertWindowInteger(query?.limit, 'journal limit', 1);
|
|
340
363
|
}
|
|
341
364
|
/**
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
* omitting `limit` reads every version by contract.
|
|
365
|
+
* A `getVersions()` window. No ceiling is imposed: omitting `limit` reads
|
|
366
|
+
* every version by contract.
|
|
345
367
|
*/
|
|
346
368
|
export function assertValidVersionsQuery(query) {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
for (const key of ['beforeVersion', 'limit']) {
|
|
350
|
-
const value = query[key];
|
|
351
|
-
if (value === undefined)
|
|
352
|
-
continue;
|
|
353
|
-
if (!Number.isInteger(value) || value < 1) {
|
|
354
|
-
throw new StackBadRequestError(`Invalid versions ${key} ${String(value)}: expected a positive integer.`);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
369
|
+
assertWindowInteger(query?.beforeVersion, 'versions beforeVersion', 1);
|
|
370
|
+
assertWindowInteger(query?.limit, 'versions limit', 1);
|
|
357
371
|
}
|
|
358
372
|
//# sourceMappingURL=query-validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-validation.js","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-validation.js","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"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"}
|
package/dist/record-changes.d.ts
CHANGED
|
@@ -3,52 +3,28 @@
|
|
|
3
3
|
* -------------------------------------------------------
|
|
4
4
|
* Two jobs that share one question — what does this Record actually say?
|
|
5
5
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* The write helpers answer it against a proposed write: whether a patch
|
|
7
|
+
* moved content, and whether the ops a write reports bump its version.
|
|
8
|
+
* The projections answer it against a reader: a soft-deleted Record is its
|
|
9
|
+
* tombstone, and a journal entry names the ACL it moved only to a reader
|
|
10
|
+
* who could have moved it.
|
|
11
11
|
*
|
|
12
12
|
* See docs/spec/events.md § The event shape and docs/spec/versioning.md
|
|
13
13
|
* § The tombstone is literal.
|
|
14
14
|
*/
|
|
15
|
-
import type { ChangeOp,
|
|
15
|
+
import type { ChangeOp, RecordJournalEntry, StackRecord } from './types/index.js';
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
18
|
-
* as a no-op: it addresses nothing, so there is nothing it could have
|
|
19
|
-
* failed to satisfy, and every way of producing one is a caller bug —
|
|
20
|
-
* typically a conditional that built an empty object.
|
|
21
|
-
* See docs/spec/data-model.md § Mutations.
|
|
22
|
-
*/
|
|
23
|
-
export declare function assertNonEmptyChangeSet(changes: RecordChangeSet): void;
|
|
24
|
-
/**
|
|
25
|
-
* Which aspects a change set actually moves, against the record as it
|
|
26
|
-
* stands. A key naming the value a record already holds contributes
|
|
27
|
-
* nothing. `merged` is the content the patch produces, computed once by the
|
|
28
|
-
* caller that had to validate it anyway.
|
|
29
|
-
*/
|
|
30
|
-
export declare function changeSetOps(existing: StackRecord, changes: RecordChangeSet, merged: Record<string, unknown> | undefined): ChangeOp[];
|
|
31
|
-
/**
|
|
32
|
-
* Whether a change set's ops advance `version`/`updatedAt` at all. After the
|
|
17
|
+
* Whether a write's ops advance `version`/`updatedAt` at all. After the
|
|
33
18
|
* no-bump set above, this is `patch` and the whole-record verbs.
|
|
34
19
|
*/
|
|
35
20
|
export declare function bumpsVersion(ops: ChangeOp[]): boolean;
|
|
36
21
|
/**
|
|
37
|
-
* Whether
|
|
38
|
-
* the
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* told its version is stale whatever its patch says.
|
|
42
|
-
*/
|
|
43
|
-
export declare function takesIfVersion(changes: RecordChangeSet): boolean;
|
|
44
|
-
/**
|
|
45
|
-
* The change set narrowed to the aspects that actually moved. An adapter is
|
|
46
|
-
* handed this rather than what the caller wrote, so restating an aspect
|
|
47
|
-
* cannot rewrite it: `unlisted: true` on an already-unlisted record would
|
|
48
|
-
* otherwise drag `unlistedAt` forward with no op reporting it. Every key an
|
|
49
|
-
* adapter receives is one it must write.
|
|
22
|
+
* Whether a merge patch produced the content already held, compared by
|
|
23
|
+
* serialization: a patch preserves the order of every key it does not name.
|
|
24
|
+
* A pure reordering is the one false "change", costing an empty version
|
|
25
|
+
* rather than a wrong answer.
|
|
50
26
|
*/
|
|
51
|
-
export declare function
|
|
27
|
+
export declare function contentEqual(a: Record<string, unknown>, b: Record<string, unknown>): boolean;
|
|
52
28
|
/** A soft-deleted Record presented as its tombstone; anything else untouched. */
|
|
53
29
|
export declare const presentDeleted: (record: StackRecord) => StackRecord;
|
|
54
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-changes.d.ts","sourceRoot":"","sources":["../src/record-changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"record-changes.d.ts","sourceRoot":"","sources":["../src/record-changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAEV,QAAQ,EACR,kBAAkB,EAClB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAgB1B;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAE5F;AAsBD,iFAAiF;AACjF,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,KAAG,WACJ,CAAC;AAWlD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAKrF"}
|