@bett3r-dev/pv3-types 1.0.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/CHANGELOG.md +305 -0
  2. package/build/adminPlugin.d.ts +24 -0
  3. package/build/adminPlugin.d.ts.map +1 -0
  4. package/build/{eventsourcing/utils.js → adminPlugin.js} +1 -1
  5. package/build/adminPlugin.js.map +1 -0
  6. package/build/aggregateSchema.d.ts +94 -0
  7. package/build/aggregateSchema.d.ts.map +1 -0
  8. package/build/aggregateSchema.js +287 -0
  9. package/build/aggregateSchema.js.map +1 -0
  10. package/build/authentication.d.ts +179 -78
  11. package/build/authentication.d.ts.map +1 -1
  12. package/build/authentication.js +62 -19
  13. package/build/authentication.js.map +1 -1
  14. package/build/cache.d.ts +50 -4
  15. package/build/cache.d.ts.map +1 -1
  16. package/build/clusterAdministration.d.ts +712 -225
  17. package/build/clusterAdministration.d.ts.map +1 -1
  18. package/build/clusterAdministration.js +175 -52
  19. package/build/clusterAdministration.js.map +1 -1
  20. package/build/configuration.d.ts +26 -5
  21. package/build/configuration.d.ts.map +1 -1
  22. package/build/database.d.ts +240 -56
  23. package/build/database.d.ts.map +1 -1
  24. package/build/database.js +102 -20
  25. package/build/database.js.map +1 -1
  26. package/build/endpoints.d.ts +141 -41
  27. package/build/endpoints.d.ts.map +1 -1
  28. package/build/endpoints.js +50 -26
  29. package/build/endpoints.js.map +1 -1
  30. package/build/errors.d.ts +166 -0
  31. package/build/errors.d.ts.map +1 -0
  32. package/build/errors.js +276 -0
  33. package/build/errors.js.map +1 -0
  34. package/build/evenstore.d.ts +47 -7
  35. package/build/evenstore.d.ts.map +1 -1
  36. package/build/eventsourcing/aggregateBuilder.d.ts +17 -8
  37. package/build/eventsourcing/aggregateBuilder.d.ts.map +1 -1
  38. package/build/eventsourcing/commandBuilder.d.ts +20 -13
  39. package/build/eventsourcing/commandBuilder.d.ts.map +1 -1
  40. package/build/eventsourcing/commandHandlers.d.ts +155 -33
  41. package/build/eventsourcing/commandHandlers.d.ts.map +1 -1
  42. package/build/eventsourcing/commandHandlers.js +62 -14
  43. package/build/eventsourcing/commandHandlers.js.map +1 -1
  44. package/build/eventsourcing/eventHandlers.d.ts +173 -44
  45. package/build/eventsourcing/eventHandlers.d.ts.map +1 -1
  46. package/build/eventsourcing/eventHandlers.js +29 -21
  47. package/build/eventsourcing/eventHandlers.js.map +1 -1
  48. package/build/eventsourcing/eventHandlersBuilder.d.ts +18 -12
  49. package/build/eventsourcing/eventHandlersBuilder.d.ts.map +1 -1
  50. package/build/eventsourcing/eventHandlersBuilder.js.map +1 -1
  51. package/build/eventsourcing/eventsourcing.types.d.ts +322 -0
  52. package/build/eventsourcing/eventsourcing.types.d.ts.map +1 -0
  53. package/build/eventsourcing/eventsourcing.types.js +26 -0
  54. package/build/eventsourcing/eventsourcing.types.js.map +1 -0
  55. package/build/eventsourcing/externalSystemBuilder.d.ts +8 -7
  56. package/build/eventsourcing/externalSystemBuilder.d.ts.map +1 -1
  57. package/build/eventsourcing/index.d.ts +2 -378
  58. package/build/eventsourcing/index.d.ts.map +1 -1
  59. package/build/eventsourcing/index.js +2 -23
  60. package/build/eventsourcing/index.js.map +1 -1
  61. package/build/eventsourcing/invariants.d.ts +34 -10
  62. package/build/eventsourcing/invariants.d.ts.map +1 -1
  63. package/build/eventsourcing/shapeChangeForSubscriber.d.ts +33 -0
  64. package/build/eventsourcing/shapeChangeForSubscriber.d.ts.map +1 -0
  65. package/build/eventsourcing/shapeChangeForSubscriber.js +47 -0
  66. package/build/eventsourcing/shapeChangeForSubscriber.js.map +1 -0
  67. package/build/index.d.ts +6 -1
  68. package/build/index.d.ts.map +1 -1
  69. package/build/index.js +6 -1
  70. package/build/index.js.map +1 -1
  71. package/build/infrastructure.d.ts +9 -1
  72. package/build/infrastructure.d.ts.map +1 -1
  73. package/build/infrastructure.js +33 -1
  74. package/build/infrastructure.js.map +1 -1
  75. package/build/livenessWatchdog.d.ts +28 -0
  76. package/build/livenessWatchdog.d.ts.map +1 -0
  77. package/build/livenessWatchdog.js +43 -0
  78. package/build/livenessWatchdog.js.map +1 -0
  79. package/build/logger.d.ts +8 -9
  80. package/build/logger.d.ts.map +1 -1
  81. package/build/logger.js +18 -6
  82. package/build/logger.js.map +1 -1
  83. package/build/outboxManager.d.ts +858 -14
  84. package/build/outboxManager.d.ts.map +1 -1
  85. package/build/outboxManager.js +173 -15
  86. package/build/outboxManager.js.map +1 -1
  87. package/build/permissions.d.ts +47 -0
  88. package/build/permissions.d.ts.map +1 -0
  89. package/build/permissions.js +3 -0
  90. package/build/permissions.js.map +1 -0
  91. package/build/ports.d.ts +10 -10
  92. package/build/ports.d.ts.map +1 -1
  93. package/build/routesAuth.d.ts +17 -25
  94. package/build/routesAuth.d.ts.map +1 -1
  95. package/build/routesAuth.js +4 -14
  96. package/build/routesAuth.js.map +1 -1
  97. package/build/typedEventEmitter.d.ts +7 -13
  98. package/build/typedEventEmitter.d.ts.map +1 -1
  99. package/build/typedEventEmitter.js +2 -2
  100. package/build/typedEventEmitter.js.map +1 -1
  101. package/build/userSession.d.ts +8 -0
  102. package/build/userSession.d.ts.map +1 -0
  103. package/build/userSession.js +3 -0
  104. package/build/userSession.js.map +1 -0
  105. package/package.json +22 -7
  106. package/build/eventsourcing/utils.d.ts +0 -4
  107. package/build/eventsourcing/utils.d.ts.map +0 -1
  108. package/build/eventsourcing/utils.js.map +0 -1
  109. package/build/validation.d.ts +0 -64
  110. package/build/validation.d.ts.map +0 -1
  111. package/build/validation.js +0 -57
  112. package/build/validation.js.map +0 -1
  113. package/src/authentication.ts +0 -273
  114. package/src/cache.ts +0 -109
  115. package/src/clusterAdministration.ts +0 -216
  116. package/src/configuration.ts +0 -71
  117. package/src/database.ts +0 -157
  118. package/src/endpoints.ts +0 -198
  119. package/src/evenstore.ts +0 -27
  120. package/src/eventsourcing/aggregateBuilder.ts +0 -11
  121. package/src/eventsourcing/commandBuilder.ts +0 -64
  122. package/src/eventsourcing/commandHandlers.ts +0 -137
  123. package/src/eventsourcing/eventHandlers.ts +0 -118
  124. package/src/eventsourcing/eventHandlersBuilder.ts +0 -42
  125. package/src/eventsourcing/externalSystemBuilder.ts +0 -20
  126. package/src/eventsourcing/index.ts +0 -111
  127. package/src/eventsourcing/invariants.ts +0 -27
  128. package/src/eventsourcing/utils.ts +0 -4
  129. package/src/index.ts +0 -15
  130. package/src/infrastructure.ts +0 -41
  131. package/src/logger.ts +0 -45
  132. package/src/outboxManager.ts +0 -36
  133. package/src/ports.ts +0 -42
  134. package/src/routesAuth.ts +0 -58
  135. package/src/typedEventEmitter.ts +0 -73
  136. package/src/validation.ts +0 -89
  137. package/tsconfig.json +0 -15
@@ -1,120 +1,304 @@
1
+ import { BaseSchema } from '@bett3r-dev/jsonschema-definer';
1
2
  import { AdapterBase, PortEmitter } from './ports';
2
- export type Document = {
3
- id: string | number;
4
- [key: string]: any;
5
- };
3
+ export type Document = Record<string, any>;
6
4
  export type IndexOptions = {
7
- isUnique: boolean;
5
+ isUnique?: boolean;
6
+ isNumeric?: boolean;
7
+ isString?: boolean;
8
+ strategy?: 'gin';
8
9
  };
9
- export type DatabaseOps = 'eq' | 'neq' | 'lt' | 'gt' | 'lte' | 'gte' | 'in' | 'nin' | 'contains' | 'notContains' | 'some' | 'none' | 'every' | 'exists' | 'notExists';
10
+ export type DatabaseOps = 'eq' | 'neq' | 'lt' | 'gt' | 'lte' | 'gte' | 'in' | 'nin' | 'contains' | 'notContains' | 'some' | 'none' | 'every' | 'exists' | 'notExists' | 'notEmpty';
10
11
  export declare const filterOpMap: {
11
12
  eq: <T>(a: T, b: T) => boolean;
12
- neq: <T_1>(a: T_1, b: T_1) => boolean;
13
- lt: <T_2>(a: T_2, b: T_2) => boolean;
14
- gt: <T_3>(a: T_3, b: T_3) => boolean;
15
- lte: <T_4>(a: T_4, b: T_4) => boolean;
16
- gte: <T_5>(a: T_5, b: T_5) => boolean;
17
- in: <T_6>(a: T_6, b: T_6[]) => boolean;
18
- nin: <T_7>(a: T_7, b: T_7[]) => boolean;
19
- contains: <T_8>(a: T_8[], b: T_8) => boolean;
20
- notContains: <T_9>(a: T_9[], b: T_9) => boolean;
21
- some: <T_10>(a: T_10[], b: T_10[]) => boolean;
22
- none: <T_11>(a: T_11[], b: T_11[]) => boolean;
23
- every: <T_12>(a: T_12[], b: T_12[]) => boolean;
24
- exists: <T_13>(a: T_13) => boolean;
25
- notExists: <T_14>(a: T_14) => boolean;
13
+ neq: <T>(a: T, b: T) => boolean;
14
+ lt: <T>(a: T, b: T) => boolean;
15
+ gt: <T>(a: T, b: T) => boolean;
16
+ lte: <T>(a: T, b: T) => boolean;
17
+ gte: <T>(a: T, b: T) => boolean;
18
+ in: <T>(a: T, b: T[]) => boolean;
19
+ nin: <T>(a: T, b: T[]) => boolean;
20
+ contains: <T>(a: T[], b: T) => boolean;
21
+ notContains: <T>(a: T[], b: T) => boolean;
22
+ some: <T>(a: T[], b: T[]) => boolean;
23
+ none: <T>(a: T[], b: T[]) => boolean;
24
+ every: <T>(a: T[], b: T[]) => boolean;
25
+ exists: <T>(a: T) => boolean;
26
+ notExists: <T>(a: T) => boolean;
27
+ notEmpty: <T>(a: T[]) => boolean;
26
28
  };
27
- export declare const CollectionFilterSchema: import("@bett3r-dev/jsonschema-definer").ObjectSchema<{
28
- value?: import("@bett3r-dev/jsonschema-definer/dist/base").Any;
29
- field: string;
30
- op: string[];
31
- }, true>;
32
29
  export type CollectionFilterOR<T extends Document = any> = {
33
30
  OR: CollectionFilter<T>[];
34
31
  };
35
32
  export type CollectionFilterAND<T extends Document = any> = {
36
33
  AND: CollectionFilter<T>[];
37
34
  };
35
+ export declare const CollectionFilterInstanceSchema: import("@bett3r-dev/jsonschema-definer").ObjectSchema<{
36
+ field: string;
37
+ op: "contains" | "eq" | "every" | "exists" | "gt" | "gte" | "in" | "lt" | "lte" | "neq" | "nin" | "none" | "notContains" | "notEmpty" | "notExists" | "some";
38
+ value?: import("@bett3r-dev/jsonschema-definer/dist/base").Any;
39
+ }, true>;
38
40
  export type CollectionFilterInstance<Model extends Document> = {
39
41
  field: keyof Model;
40
42
  op: DatabaseOps;
41
43
  value: any;
42
44
  };
43
45
  export type CollectionFilter<T extends Document = any> = Partial<CollectionFilterOR<T> & CollectionFilterAND<T> & CollectionFilterInstance<T>>;
46
+ /**
47
+ * The recursive filter schema, PARAMETERISED BY `$id` — and the parameter is not a nicety.
48
+ *
49
+ * A schema document may carry a given `$id` only ONCE: ajv rejects a document that materialises
50
+ * the same `$id` twice with `reference "<id>" resolves to more than one schema`, and it does so at
51
+ * `compile` time, so the whole endpoint's validator dies rather than one field. That is exactly
52
+ * what happens the moment two properties of one document each embed a filter — as
53
+ * `ReadmodelDefaultQuerySchema` does, with `filter` and `aggregate.filter` (TV1-2342). The `$id` is
54
+ * load-bearing and cannot simply be dropped: it is the base against which the self-reference
55
+ * `#/$defs/<id>` resolves, which is what makes OR/AND recursive.
56
+ *
57
+ * So each EMBEDDING SITE takes its own id, from one definition. Add a site → give it a new id here.
58
+ */
59
+ export declare const collectionFilterSchemaWithId: (id: string) => BaseSchema<Partial<CollectionFilterOR<any> & CollectionFilterAND<any> & CollectionFilterInstance<any>>, true, Readonly<import("@bett3r-dev/jsonschema-definer/dist/base").BaseJsonSchema>>;
60
+ export declare const CollectionFilterSchema: BaseSchema<Partial<CollectionFilterOR<any> & CollectionFilterAND<any> & CollectionFilterInstance<any>>, true, Readonly<import("@bett3r-dev/jsonschema-definer/dist/base").BaseJsonSchema>>;
44
61
  export declare const CollectionSortSchema: import("@bett3r-dev/jsonschema-definer").ObjectSchema<{
45
62
  field: string;
46
- direction: string[];
63
+ direction: "asc" | "desc";
47
64
  }, true>;
48
65
  export type CollectionSort<Model extends Document> = {
49
66
  field: keyof Model;
50
67
  direction?: 'asc' | 'desc';
51
68
  };
52
69
  export declare const CollectionQueryParamsSchema: import("@bett3r-dev/jsonschema-definer").ObjectSchema<{
53
- limit?: number | undefined;
54
- after?: string | undefined;
55
70
  sort?: {
56
71
  field: string;
57
- direction: string[];
58
- }[] | undefined;
59
- filter?: {
60
- value?: import("@bett3r-dev/jsonschema-definer/dist/base").Any;
61
- field: string;
62
- op: string[];
72
+ direction: "asc" | "desc";
63
73
  }[] | undefined;
74
+ filter?: Partial<CollectionFilterOR<any> & CollectionFilterAND<any> & CollectionFilterInstance<any>>[] | undefined;
75
+ limit?: number | undefined;
76
+ offset?: number | undefined;
77
+ after?: string | number | undefined;
64
78
  select?: string[] | undefined;
79
+ byDistinctField?: string | undefined;
65
80
  }, true>;
81
+ export type KeyWithBang<T> = {
82
+ [K in keyof T]: (K & string) | `!${K & string}` | `DISTINCT:${K & string}`;
83
+ }[keyof T];
66
84
  export type CollectionQueryParams<Model extends Document> = {
67
- id?: string | number;
85
+ idValue?: string | number;
68
86
  limit?: number;
69
87
  after?: string | number;
88
+ offset?: number;
70
89
  sort?: CollectionSort<Model>[];
71
90
  filter?: CollectionFilter<Model>[];
72
- select?: keyof Model | (keyof Model)[];
91
+ select?: KeyWithBang<Model> | KeyWithBang<Model>[];
92
+ byDistinctField?: keyof Model & string;
93
+ /**
94
+ * TV1-2342 slice 7 — present ONLY when the caller asked for an aggregation. It selects the
95
+ * `aggregate` OPERATION instead of `query`, rather than modifying `query`'s behaviour: the two
96
+ * return different shapes, and that is exactly why `aggregate` is a separate operation.
97
+ */
98
+ aggregate?: AggregateSpec<Model>;
99
+ };
100
+ /**
101
+ * TV1-2342 — AGGREGATION over a readmodel.
102
+ *
103
+ * The whole design rests on ONE static spec value being readable by three consumers that can
104
+ * therefore never drift: this TS type, `deriveAggregateSchema` (the response schema), and the
105
+ * adapter's `translateAggregate` (the SQL).
106
+ */
107
+ export type AggregateFn = 'sum' | 'count' | 'min' | 'max' | 'avg';
108
+ /**
109
+ * `count` is the ONLY function legal without a `field` — counting is a property of the GROUP,
110
+ * every other function is a property of a COLUMN. Modelling that as a union (rather than an
111
+ * optional `field`) is what makes `{ fn:'sum', as:'net' }` a compile error at the spec.
112
+ */
113
+ export type AggregateTerm<Model extends Document> = {
114
+ fn: 'count';
115
+ field?: string & keyof Model;
116
+ as: string;
117
+ } | {
118
+ fn: Exclude<AggregateFn, 'count'>;
119
+ field: string & keyof Model;
120
+ as: string;
121
+ };
122
+ export type AggregateSpec<Model extends Document> = {
123
+ groupBy: readonly (string & keyof Model)[];
124
+ aggregates: readonly AggregateTerm<Model>[];
125
+ /**
126
+ * TV1-2342 slice 4 — applies BEFORE the grouping (a `WHERE`, never a `HAVING`). It narrows the
127
+ * INPUT ROWS, exactly as it does on `query`, so its meaning is identical in both operations.
128
+ * Filtering ON an aggregated value is a DIFFERENT capability and is deliberately not folded in
129
+ * here: doing so would silently change what `filter` means for every existing caller.
130
+ */
131
+ filter?: CollectionFilter<Model>[];
132
+ /**
133
+ * RESERVED, and implemented NOWHERE — typed `never` so that supplying a value is a compile
134
+ * error rather than a key that is quietly ignored at runtime. A half-implemented `having` is
135
+ * worse than none: the caller believes their predicate ran.
136
+ */
137
+ having?: never;
138
+ /**
139
+ * THE RESULT-COUNT BOUND. Exceeding it THROWS; the result is never truncated. Grouped output is
140
+ * small only in the motivating cases, so a silently short list is the reassuring-failure shape —
141
+ * the caller cannot tell a complete answer from a clipped one.
142
+ */
143
+ maxGroups?: number;
144
+ /**
145
+ * THE GROUP-SIZE (i.e. MEMORY) BOUND, and a DIFFERENT AXIS from `maxGroups`. `min`/`max` and the
146
+ * group KEYS all compile to `(ARRAY_AGG(x))[1]` in the Postgres adapter — Postgres ships no
147
+ * `min(jsonb)` — so one array per group is materialised and memory is O(group size). Under the
148
+ * Option B design the composer picks the grouping, which makes a LOW-CARDINALITY key over a
149
+ * LARGE readmodel the EXPECTED shape: one result row, one enormous array. `maxGroups` cannot
150
+ * see that at all. Exceeding it THROWS, for the same reason as above.
151
+ */
152
+ maxGroupSize?: number;
153
+ };
154
+ /**
155
+ * The one subtle branch in the whole design (invariant I4), and it MUST be widened in the same
156
+ * edit as `AggregateTerm['fn']`: a function present in the spec type but missing here resolves
157
+ * to `never`, which is assignable to everything, so the mistake shows up as nothing at all
158
+ * rather than as an error at the spec.
159
+ *
160
+ * - `count` / `sum` / `avg` → number (they answer with a tally, a total or a mean, none of
161
+ * which have anything to do with the source column's type);
162
+ * - `min` / `max` → the SOURCE field's type, preserved. They return one of the values that
163
+ * were there, so a max over a `date-time` string is a string, not a number.
164
+ *
165
+ * NULLABILITY is part of the same rule and is decided HERE rather than deferred, because an
166
+ * adapter-parity suite can only make two implementations AGREE — including on a wrong answer.
167
+ * A group whose every row LACKS the aggregated field is not hypothetical (the model schema is
168
+ * not enforced on write) and the three functions differ on it:
169
+ *
170
+ * - `count` cannot be empty (a group exists because a row exists) and `sum` has an identity
171
+ * element, 0, which the SQL COALESCEs to — so both are strictly `number`;
172
+ * - `avg`/`min`/`max` have NO identity element. The mean of nothing is not 0 and the minimum
173
+ * of nothing is not 0; inventing one would be a worse lie than the null. So they are
174
+ * `| null`, and the null is expressed in the TYPE instead of being an undeclared runtime
175
+ * surprise.
176
+ *
177
+ * `deriveAggregateSchema` carries the same rule at the schema level, including the facets
178
+ * (`enum`, `format`) that a TS type cannot express.
179
+ */
180
+ export type AggregateTermType<Model extends Document, Term> = Term extends {
181
+ fn: 'count' | 'sum';
182
+ } ? number : Term extends {
183
+ fn: 'avg';
184
+ } ? number | null : Term extends {
185
+ fn: 'min' | 'max';
186
+ field: infer F extends string & keyof Model;
187
+ } ? Model[F] | null : never;
188
+ /**
189
+ * THE BOUND DEFAULTS, single-sourced here (TV1-2342, collapsed in /verify-build) because both
190
+ * adapters apply them and the shared conformance suite pins BOTH to these exact numbers. They
191
+ * previously lived as literals in the Postgres adapter with a hand-copied pair in MemoryDb —
192
+ * two sites, one contract, and nothing but a test standing between them and a silent drift.
193
+ * `pv3-types` is the one package both adapters already depend on.
194
+ */
195
+ export declare const DEFAULT_MAX_AGGREGATE_GROUPS = 1000;
196
+ export declare const DEFAULT_MAX_AGGREGATE_GROUP_SIZE = 50000;
197
+ /**
198
+ * An aggregate row is a NEW type, not a partial model: a field that is neither grouped by nor
199
+ * aggregated is ABSENT from it.
200
+ *
201
+ * A GROUP KEY IS NULLABLE (TV1-2342 slice 10, corrected in /verify-build). The model schema is not
202
+ * enforced on write, so a declared-required key can be physically absent from a row; both adapters
203
+ * then group it under a NULL key and `deriveAggregateSchema` marks every group property
204
+ * `.nullable()`. Typing it as `Model[K]` made the TS derivation the ONLY one of the three that
205
+ * denied a value the other two produce — `row.bucket.toUpperCase()` would compile and throw.
206
+ */
207
+ export type AggregateRow<Model extends Document, Spec extends AggregateSpec<Model>> = {
208
+ [K in Spec['groupBy'][number]]: Model[K] | null;
209
+ } & {
210
+ [Term in Spec['aggregates'][number] as Term['as']]: AggregateTermType<Model, Term>;
73
211
  };
74
212
  export type CollectionOperations<Model extends Document> = {
75
- readById: (id: string | number) => Promise<Model | null>;
76
- query: (params: CollectionQueryParams<Model>) => Promise<Model[]>;
77
- forEach: (params: CollectionQueryParams<Model>, callback: (record: Model, stop: () => void) => void | Promise<void>) => Promise<void>;
78
- upsert: (id: string | number, data: Partial<Model>) => Promise<Model>;
79
- destroyById: (id: string | number) => Promise<void>;
80
- createMany: (documents: Model[]) => Promise<Model[]>;
81
- updateMany: (filter: CollectionFilter<Model>[], data: Partial<Model>) => Promise<Model[]>;
82
- destroyMany: (filter: CollectionFilter<Model>[]) => Promise<number>;
213
+ readById: (id: string | number, params?: Pick<CollectionQueryParams<Model>, 'select'> & {
214
+ forUpdate?: boolean;
215
+ }, options?: any) => Promise<Model | null>;
216
+ query: (params: CollectionQueryParams<Model>, options?: any) => Promise<Model[]>;
217
+ aggregate: <const Spec extends AggregateSpec<Model>>(spec: Spec, options?: any) => Promise<AggregateRow<Model, Spec>[]>;
218
+ count: (params: CollectionQueryParams<Model>, options?: any) => Promise<number>;
219
+ forEach: (params: CollectionQueryParams<Model>, callback: (record: Model, stop: () => void) => void | Promise<void>, options?: any) => Promise<void>;
220
+ upsert: (id: string | number, data: Partial<Model>, options?: any) => Promise<Model>;
221
+ unset: (id: string | number, key: string, options?: any) => Promise<Model>;
222
+ destroyById: (id: string | number, options?: any) => Promise<void>;
223
+ createMany: (documents: Model[], options?: any) => Promise<Model[]>;
224
+ upsertMany: (documents: Model[], options?: {
225
+ replace?: boolean;
226
+ }) => Promise<Model[]>;
227
+ updateMany: (filter: CollectionFilter<Model>[], data: Partial<Model>, options?: {
228
+ upsert?: boolean;
229
+ replace?: boolean;
230
+ }) => Promise<Model[]>;
231
+ arrayPush: <T>(filter: CollectionFilter<Model>[], propertyPath: string[], data: T | T[], options?: {
232
+ unique?: boolean;
233
+ }) => Promise<Model[]>;
234
+ arrayPull: <T>(filter: CollectionFilter<Model>[], propertyPath: string[], data: T | T[], options?: any) => Promise<Model[]>;
235
+ destroyMany: (filter: CollectionFilter<Model>[], options?: any) => Promise<number>;
83
236
  atomicIncrement: (name: string, filter?: CollectionFilter<Model>, amount?: number) => Promise<number>;
237
+ explain: (params: CollectionQueryParams<Model>) => Promise<{
238
+ query: string;
239
+ isUsingIndex: boolean;
240
+ rawResult: any;
241
+ }>;
84
242
  };
85
243
  export type DatabaseChange<Model extends Document = any> = {
86
- changeType: 'insert' | 'update' | 'delete';
87
- data?: Model;
244
+ changeType: 'insert' | 'update' | 'delete' | 'snapshot' | 'signal' | 'invalidate';
245
+ ref?: string;
246
+ data?: Model | Model[];
88
247
  previous?: Model;
248
+ count?: number;
249
+ accountId?: string;
89
250
  };
90
251
  export type Collection<Model extends Document> = CollectionOperations<Model> & {
91
- ensureIndex: (properties: string[], options?: Partial<IndexOptions>) => Promise<void>;
252
+ ensureIndex: (properties: (string & keyof Model)[] | Record<keyof Model, IndexOptions>, options?: Partial<IndexOptions>) => Promise<void>;
92
253
  destroyIndex: (properties: string[]) => Promise<void>;
93
- watch: (changeTypes: ('insert' | 'update' | 'delete')[], onData: (data: DatabaseChange<Model>) => void, onError?: (e: Error) => void) => Promise<{
254
+ watch: (changeTypes: ('insert' | 'update' | 'delete' | 'invalidate')[], onData: (data: DatabaseChange<Model>) => void, onError?: (e: Error) => void) => Promise<{
94
255
  close: () => void;
95
256
  }>;
96
257
  };
97
258
  /**
98
259
  * @category Main Types
99
260
  */
100
- export type DatabaseTransaction = {
101
- getCollection: <Model extends Document>(collection: string) => CollectionOperations<Model>;
261
+ export type DatabaseTransaction<T = any> = {
262
+ getCollection: <Model extends Document>(collection: string, idProperty?: string & keyof Model, sequenceIdProperty?: string & keyof Model) => CollectionOperations<Model>;
263
+ connectionId: string;
264
+ txId?: string;
265
+ /**
266
+ * SAVEPOINT capability — take a rewind point INSIDE this transaction, roll back to it, and
267
+ * release it. Returns an opaque token identifying the savepoint: the ADAPTER names it, so
268
+ * nesting is safe (a savepoint taken inside another is a distinct token, never a shadowing
269
+ * re-use of one name) and no caller-supplied string can ever reach the statement.
270
+ *
271
+ * Why a capability on the transaction and not a query issued by whoever needs it: the callers
272
+ * that need it are adapter-agnostic core (`executeCommand` rewinds an optimistic-concurrency
273
+ * conflict inside a transaction its CALLER owns), and reaching through `_adapter()` to run SQL
274
+ * would break both the hexagon and every non-Postgres adapter.
275
+ *
276
+ * OPTIONAL, and the absence is a FIRST-CLASS behavior, not a silent skip: MemoryDb has no
277
+ * savepoints (its transactions are atomic but not isolated) and Mongo cannot partially roll one
278
+ * back. A caller must detect the absence EXPLICITLY and fall back to something safe — for
279
+ * `executeCommand` that is refusing to retry and propagating the conflict to the transaction's
280
+ * owner, the only party that can roll it back. Never `transaction.savepoint?.()`: a savepoint
281
+ * that silently does not exist turns a rewind into a no-op and a retry into a re-execution on
282
+ * top of its own uncommitted rows.
283
+ */
284
+ savepoint?: () => Promise<string>;
285
+ rollbackToSavepoint?: (savepoint: string) => Promise<void>;
286
+ releaseSavepoint?: (savepoint: string) => Promise<void>;
287
+ _adapter: () => T;
102
288
  };
103
289
  /**
104
290
  * @category Main Types
105
291
  */
106
292
  export type DatabaseType = {
107
- getCollection: <Model extends Document>(name: string) => Collection<Model>;
108
- initTransaction: <Result = any>(operations: (getCollection: <Model extends Document>(collection: string) => CollectionOperations<Model>) => Promise<Result | undefined>, retryBackoff?: number, options?: any) => Promise<Result>;
293
+ getCollection: <Model extends Document>(collection: string, idProperty?: string & keyof Model, sequenceIdProperty?: string & keyof Model) => Collection<Model>;
294
+ initTransaction: <Result = any>(operations: (transaction: DatabaseTransaction) => Promise<Result>, retryBackoff?: number, options?: any) => Promise<Result>;
109
295
  };
110
296
  /**
111
297
  * @category Main Types
112
298
  */
113
- export type DatabasePort = PortEmitter & DatabaseType & {
114
- _adapter: DatabaseAdapter;
115
- };
299
+ export type DatabaseAdapter<T = any> = DatabaseType & AdapterBase<T>;
116
300
  /**
117
301
  * @category Main Types
118
302
  */
119
- export type DatabaseAdapter<T = any> = DatabaseType & AdapterBase<T>;
303
+ export type DatabasePort<T = any> = PortEmitter & DatabaseAdapter<T>;
120
304
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
package/build/database.js CHANGED
@@ -1,10 +1,40 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CollectionQueryParamsSchema = exports.CollectionSortSchema = exports.CollectionFilterSchema = exports.filterOpMap = void 0;
7
- const jsonschema_definer_1 = __importDefault(require("@bett3r-dev/jsonschema-definer"));
36
+ exports.DEFAULT_MAX_AGGREGATE_GROUP_SIZE = exports.DEFAULT_MAX_AGGREGATE_GROUPS = exports.CollectionQueryParamsSchema = exports.CollectionSortSchema = exports.CollectionFilterSchema = exports.collectionFilterSchemaWithId = exports.CollectionFilterInstanceSchema = exports.filterOpMap = void 0;
37
+ const jsonschema_definer_1 = __importStar(require("@bett3r-dev/jsonschema-definer"));
8
38
  exports.filterOpMap = {
9
39
  eq: (a, b) => a === b,
10
40
  neq: (a, b) => a !== b,
@@ -12,30 +42,82 @@ exports.filterOpMap = {
12
42
  gt: (a, b) => a > b,
13
43
  lte: (a, b) => a <= b,
14
44
  gte: (a, b) => a >= b,
15
- in: (a, b) => b.includes(a),
16
- nin: (a, b) => !b.includes(a),
17
- contains: (a, b) => a.includes(b),
18
- notContains: (a, b) => !a.includes(b),
19
- some: (a, b) => a.some(x => b.includes(x)),
20
- none: (a, b) => !a.some(x => b.includes(x)),
21
- every: (a, b) => a.every(x => b.includes(x)),
45
+ in: (a, b) => (b || []).includes(a),
46
+ nin: (a, b) => !(b || []).includes(a),
47
+ contains: (a, b) => (a || []).includes(b),
48
+ notContains: (a, b) => !(a || []).includes(b),
49
+ some: (a, b) => (a || []).some(x => (b || []).includes(x)),
50
+ none: (a, b) => !(a || []).some(x => (b || []).includes(x)),
51
+ every: (a, b) => (a || []).every(x => (b || []).includes(x)),
22
52
  exists: (a) => !!a,
23
- notExists: (a) => !a
53
+ notExists: (a) => !a,
54
+ // Array-valued: matches a present, non-empty array. Distinct from `exists`
55
+ // (which is presence-only and is therefore degenerate-true for an always-`[]`
56
+ // field). No `value` operand.
57
+ notEmpty: (a) => Array.isArray(a) && a.length > 0
24
58
  };
25
- exports.CollectionFilterSchema = jsonschema_definer_1.default.shape({
59
+ exports.CollectionFilterInstanceSchema = jsonschema_definer_1.default.shape({
26
60
  field: jsonschema_definer_1.default.string(),
27
- op: jsonschema_definer_1.default.enum(['eq', 'neq', 'lt', 'gt', 'lte', 'gte', 'in', 'nin', 'contains', 'notContains', 'some', 'every', 'exists', 'notExists']),
61
+ op: jsonschema_definer_1.default.string().enum('eq', 'neq', 'lt', 'gt', 'lte', 'gte', 'in', 'nin', 'contains', 'notContains', 'some', 'none', 'every', 'exists', 'notExists', 'notEmpty'),
28
62
  value: jsonschema_definer_1.default.any()
29
63
  });
64
+ /**
65
+ * The recursive filter schema, PARAMETERISED BY `$id` — and the parameter is not a nicety.
66
+ *
67
+ * A schema document may carry a given `$id` only ONCE: ajv rejects a document that materialises
68
+ * the same `$id` twice with `reference "<id>" resolves to more than one schema`, and it does so at
69
+ * `compile` time, so the whole endpoint's validator dies rather than one field. That is exactly
70
+ * what happens the moment two properties of one document each embed a filter — as
71
+ * `ReadmodelDefaultQuerySchema` does, with `filter` and `aggregate.filter` (TV1-2342). The `$id` is
72
+ * load-bearing and cannot simply be dropped: it is the base against which the self-reference
73
+ * `#/$defs/<id>` resolves, which is what makes OR/AND recursive.
74
+ *
75
+ * So each EMBEDDING SITE takes its own id, from one definition. Add a site → give it a new id here.
76
+ */
77
+ const collectionFilterSchemaWithId = (id) => jsonschema_definer_1.default.shape({})
78
+ .id(id)
79
+ .definition(id, jsonschema_definer_1.default.shape({
80
+ OR: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.ref(`#/$defs/${id}`))
81
+ .optional(),
82
+ AND: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.ref(`#/$defs/${id}`))
83
+ .optional(),
84
+ field: jsonschema_definer_1.default.string().optional(),
85
+ op: jsonschema_definer_1.default.string()
86
+ .enum('eq', 'neq', 'lt', 'gt', 'lte', 'gte', 'in', 'nin', 'contains', 'notContains', 'some', 'none', 'every', 'exists', 'notExists', 'notEmpty')
87
+ .optional(),
88
+ value: jsonschema_definer_1.default.any()
89
+ .optional()
90
+ })
91
+ .anyOf((new jsonschema_definer_1.BaseSchema()).raw({ required: ['OR'] }), (new jsonschema_definer_1.BaseSchema()).raw({ required: ['AND'] }), (new jsonschema_definer_1.BaseSchema()).raw({ required: ['field', 'op'] })))
92
+ .additionalProperties(true)
93
+ .ref(`#/$defs/${id}`);
94
+ exports.collectionFilterSchemaWithId = collectionFilterSchemaWithId;
95
+ exports.CollectionFilterSchema = (0, exports.collectionFilterSchemaWithId)('CollectionFilter');
30
96
  exports.CollectionSortSchema = jsonschema_definer_1.default.shape({
31
97
  field: jsonschema_definer_1.default.string(),
32
- direction: jsonschema_definer_1.default.enum(['asc', 'desc'])
98
+ direction: jsonschema_definer_1.default.string().enum('asc', 'desc')
33
99
  });
34
100
  exports.CollectionQueryParamsSchema = jsonschema_definer_1.default.shape({
35
- sort: jsonschema_definer_1.default.array().items(exports.CollectionSortSchema).optional(),
36
- filter: jsonschema_definer_1.default.array().items(exports.CollectionFilterSchema).optional(),
101
+ sort: jsonschema_definer_1.default.array().items(exports.CollectionSortSchema)
102
+ .optional(),
103
+ filter: jsonschema_definer_1.default.array().items(exports.CollectionFilterSchema)
104
+ .optional(),
37
105
  limit: jsonschema_definer_1.default.number().optional(),
38
- after: jsonschema_definer_1.default.string().optional(),
39
- select: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string()).optional()
106
+ offset: jsonschema_definer_1.default.number().optional(),
107
+ // `string | number` — matches `CollectionQueryParams['after']`; the cursor is the key column's
108
+ // value, and readmodels are keyed on text OR numeric columns.
109
+ after: jsonschema_definer_1.default.anyOf(jsonschema_definer_1.default.string(), jsonschema_definer_1.default.number()).optional(),
110
+ select: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string())
111
+ .optional(),
112
+ byDistinctField: jsonschema_definer_1.default.string().optional()
40
113
  });
114
+ /**
115
+ * THE BOUND DEFAULTS, single-sourced here (TV1-2342, collapsed in /verify-build) because both
116
+ * adapters apply them and the shared conformance suite pins BOTH to these exact numbers. They
117
+ * previously lived as literals in the Postgres adapter with a hand-copied pair in MemoryDb —
118
+ * two sites, one contract, and nothing but a test standing between them and a silent drift.
119
+ * `pv3-types` is the one package both adapters already depend on.
120
+ */
121
+ exports.DEFAULT_MAX_AGGREGATE_GROUPS = 1000;
122
+ exports.DEFAULT_MAX_AGGREGATE_GROUP_SIZE = 50000;
41
123
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}