@cosmicdrift/kumiko-framework 0.367.0 → 0.369.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 (240) hide show
  1. package/AGENTS.md +1 -7
  2. package/README.md +1 -1
  3. package/agents/examples/access-control.md +2 -2
  4. package/agents/examples/anonymous-access-multitenant.md +2 -2
  5. package/agents/examples/anonymous-access.md +3 -3
  6. package/agents/examples/apex-landing.md +1 -1
  7. package/agents/examples/apex-surface-auth.md +6 -7
  8. package/agents/examples/api-worker-split.md +7 -8
  9. package/agents/examples/auth-claims.md +2 -1
  10. package/agents/examples/auth-foundation-providers.md +3 -3
  11. package/agents/examples/auth-mfa.md +3 -4
  12. package/agents/examples/basic-entity.md +3 -4
  13. package/agents/examples/chat-channels.md +4 -4
  14. package/agents/examples/compliance-profiles-demo.md +2 -3
  15. package/agents/examples/cross-feature-events.md +4 -4
  16. package/agents/examples/crypto-shredding-hr.md +14 -9
  17. package/agents/examples/currencies-global.md +3 -4
  18. package/agents/examples/currencies-per-tenant.md +3 -4
  19. package/agents/examples/custom-fields-basic.md +2 -3
  20. package/agents/examples/custom-handlers.md +3 -5
  21. package/agents/examples/dashboard-stats.md +2 -3
  22. package/agents/examples/delivery-notifications.md +5 -6
  23. package/agents/examples/e2e-generator.md +1 -1
  24. package/agents/examples/embedded-entity-form.md +2 -3
  25. package/agents/examples/embedded.md +2 -3
  26. package/agents/examples/encrypted-tenant-config.md +5 -6
  27. package/agents/examples/error-contract.md +3 -4
  28. package/agents/examples/event-sourcing.md +19 -23
  29. package/agents/examples/feature-toggles.md +4 -4
  30. package/agents/examples/field-access.md +3 -4
  31. package/agents/examples/files-post-processing.md +12 -13
  32. package/agents/examples/golden-path.md +208 -0
  33. package/agents/examples/idempotency.md +2 -2
  34. package/agents/examples/inbound-mail-triage.md +7 -7
  35. package/agents/examples/lane-routing.md +3 -3
  36. package/agents/examples/ledger-banking.md +2 -3
  37. package/agents/examples/ledger-invoicing.md +2 -3
  38. package/agents/examples/legal-pages.md +1 -1
  39. package/agents/examples/lifecycle-hooks.md +3 -3
  40. package/agents/examples/managed-config.md +3 -4
  41. package/agents/examples/managed-pages.md +2 -2
  42. package/agents/examples/notes-history-basic.md +4 -5
  43. package/agents/examples/ownership.md +3 -5
  44. package/agents/examples/pdf-audit-export.md +2 -3
  45. package/agents/examples/pipeline-basics.md +2 -2
  46. package/agents/examples/public-share-token.md +3 -3
  47. package/agents/examples/rate-limiting.md +2 -1
  48. package/agents/examples/realtime-sse.md +2 -3
  49. package/agents/examples/record-detail-layout.md +1 -1
  50. package/agents/examples/reference-data.md +3 -3
  51. package/agents/examples/relations.md +2 -2
  52. package/agents/examples/screens-nav.md +1 -1
  53. package/agents/examples/search.md +2 -2
  54. package/agents/examples/secrets-demo.md +8 -8
  55. package/agents/examples/security-baseline.md +2 -2
  56. package/agents/examples/session-revocation.md +7 -8
  57. package/agents/examples/state-machine.md +181 -165
  58. package/agents/examples/tags-basic.md +2 -3
  59. package/agents/examples/tenant-isolation.md +2 -3
  60. package/agents/examples/tenant-settings.md +2 -2
  61. package/agents/examples/tier-admin.md +3 -4
  62. package/agents/examples/timezones.md +3 -3
  63. package/agents/examples/user-data-rights.md +12 -8
  64. package/agents/examples/user-profile.md +3 -3
  65. package/agents/examples/webhook-step.md +2 -3
  66. package/agents/examples/wizard-form.md +4 -5
  67. package/agents/examples/workflow-engine.md +7 -3
  68. package/agents/examples/writeform-section.md +1 -1
  69. package/agents/examples.md +1 -0
  70. package/agents/features.md +4 -4
  71. package/dist/consumer-cli.js +2 -3
  72. package/dist/crypto/index.d.ts +1 -1
  73. package/dist/crypto/index.js +1 -1
  74. package/dist/crypto/owner-transition-rekey.js +2 -0
  75. package/dist/crypto/pg-kms-adapter.js +1 -1
  76. package/dist/crypto/subject-resolver.d.ts +2 -0
  77. package/dist/crypto/subject-resolver.js +30 -15
  78. package/dist/db/bun-db-deprecated.d.ts +10 -0
  79. package/dist/{bun-db/index.js → db/bun-db-deprecated.js} +4 -3
  80. package/dist/db/config-seed.js +1 -1
  81. package/dist/db/connection.d.ts +23 -5
  82. package/dist/db/connection.js +10 -5
  83. package/dist/db/dialect.js +1 -1
  84. package/dist/db/entity-field-encryption.d.ts +5 -0
  85. package/dist/db/entity-field-encryption.js +29 -0
  86. package/dist/db/entity-table-meta.js +6 -5
  87. package/dist/db/event-store-executor-read.js +26 -5
  88. package/dist/db/index.d.ts +4 -4
  89. package/dist/db/index.js +1 -1
  90. package/dist/db/migrate-runner.js +1 -1
  91. package/dist/db/queries/backfill-pii.js +16 -9
  92. package/dist/db/queries/ddl.js +1 -1
  93. package/dist/db/queries/event-store.d.ts +2 -0
  94. package/dist/db/queries/event-store.js +26 -0
  95. package/dist/db/queries/test-stack.js +1 -1
  96. package/dist/db/query.d.ts +105 -1
  97. package/dist/db/query.js +1450 -3
  98. package/dist/{stack/table-helpers.d.ts → db/table-push.d.ts} +5 -15
  99. package/dist/{stack/table-helpers.js → db/table-push.js} +6 -46
  100. package/dist/db/tenant-db.d.ts +11 -0
  101. package/dist/db/tenant-db.js +51 -12
  102. package/dist/derivatives/derivatives-context.d.ts +1 -1
  103. package/dist/derivatives/derivatives-context.js +1 -1
  104. package/dist/engine/boot-validator/gdpr-storage.js +3 -3
  105. package/dist/engine/boot-validator/pii-retention.js +3 -3
  106. package/dist/engine/boot-validator/record-owned.js +3 -3
  107. package/dist/engine/boot-validator/screens.js +37 -1
  108. package/dist/engine/bridge-stub.d.ts +4 -0
  109. package/dist/engine/bridge-stub.js +62 -0
  110. package/dist/engine/build-config-feature-schema.js +197 -65
  111. package/dist/engine/event-helpers.d.ts +2 -1
  112. package/dist/engine/event-helpers.js +1 -0
  113. package/dist/engine/extension-selector-plugins.d.ts +3 -0
  114. package/dist/engine/extension-selector-plugins.js +14 -0
  115. package/dist/engine/feature-config-events-jobs.d.ts +2 -0
  116. package/dist/engine/feature-config-events-jobs.js +3 -2
  117. package/dist/engine/index.d.ts +1 -0
  118. package/dist/engine/index.js +1 -0
  119. package/dist/es-ops/operations-schema.js +1 -1
  120. package/dist/event-store/admin-api.js +1 -1
  121. package/dist/event-store/archive.js +1 -1
  122. package/dist/event-store/errors.d.ts +2 -1
  123. package/dist/event-store/errors.js +6 -2
  124. package/dist/event-store/event-store.js +17 -9
  125. package/dist/event-store/events-schema.js +1 -1
  126. package/dist/event-store/rebuild-dead-letter.js +3 -3
  127. package/dist/event-store/snapshot.js +1 -1
  128. package/dist/event-store/upcaster-dead-letter.js +3 -3
  129. package/dist/files/create-file-ref-from-bytes.js +1 -1
  130. package/dist/files/file-routes.js +1 -1
  131. package/dist/i18n/settings-hub-keys.js +1 -2
  132. package/dist/internal/stack-support.d.ts +12 -0
  133. package/dist/internal/stack-support.js +12 -0
  134. package/dist/internal/testing.d.ts +4 -0
  135. package/dist/internal/testing.js +5 -0
  136. package/dist/jobs/job-runner.js +23 -11
  137. package/dist/migrations/pending-rebuilds.js +1 -1
  138. package/dist/migrations/pii-event-backfill.js +2 -2
  139. package/dist/pipeline/dispatch-shared.js +43 -23
  140. package/dist/pipeline/dispatch-write.js +6 -2
  141. package/dist/pipeline/dispatcher-utils.js +6 -2
  142. package/dist/pipeline/event-consumer-state.js +1 -1
  143. package/dist/pipeline/projection-rebuild.d.ts +1 -0
  144. package/dist/pipeline/projection-rebuild.js +1 -1
  145. package/dist/pipeline/projection-state.js +1 -1
  146. package/dist/pipeline/system-hooks.js +1 -1
  147. package/dist/schema-cli.js +3 -3
  148. package/dist/search/purge-subject.js +20 -10
  149. package/dist/seeding/index.d.ts +1 -0
  150. package/dist/seeding/index.js +1 -0
  151. package/dist/stack/index.d.ts +10 -9
  152. package/dist/stack/index.js +11 -19
  153. package/dist/testing/e2e-generator.d.ts +5 -49
  154. package/dist/testing/e2e-generator.js +5 -382
  155. package/dist/testing/handler-context.d.ts +5 -4
  156. package/dist/testing/handler-context.js +5 -69
  157. package/dist/testing/index.d.ts +10 -26
  158. package/dist/testing/index.js +10 -34
  159. package/dist/testing/real-providers.d.ts +5 -3
  160. package/dist/testing/real-providers.js +5 -21
  161. package/dist/upgrade-cli.js +6 -4
  162. package/package.json +37 -9
  163. package/src/changes.json +64 -0
  164. package/src/scripts/codemod/README.md +43 -0
  165. package/src/scripts/codemod/codemod-support.ts +276 -0
  166. package/src/scripts/codemod/db-factory.ts +810 -0
  167. package/src/scripts/codemod/feature-factory.ts +429 -0
  168. package/src/scripts/codemod/s3-imports.ts +274 -0
  169. package/src/scripts/codemod/tenant-db-options.ts +454 -0
  170. package/src/scripts/codemod/testing-move-targets.ts +161 -0
  171. package/src/scripts/codemod/testing-move.ts +520 -0
  172. package/dist/bun-db/connection.d.ts +0 -17
  173. package/dist/bun-db/connection.js +0 -40
  174. package/dist/bun-db/index.d.ts +0 -4
  175. package/dist/bun-db/query.d.ts +0 -106
  176. package/dist/bun-db/query.js +0 -1457
  177. package/dist/db/api.d.ts +0 -19
  178. package/dist/db/api.js +0 -23
  179. package/dist/db/bun-provider.d.ts +0 -2
  180. package/dist/db/bun-provider.js +0 -28
  181. package/dist/db/postgres-provider.d.ts +0 -2
  182. package/dist/db/postgres-provider.js +0 -21
  183. package/dist/db/query-api.d.ts +0 -2
  184. package/dist/db/query-api.js +0 -6
  185. package/dist/stack/db.d.ts +0 -22
  186. package/dist/stack/db.js +0 -67
  187. package/dist/stack/drain-event-consumers.d.ts +0 -4
  188. package/dist/stack/drain-event-consumers.js +0 -51
  189. package/dist/stack/drain-jobs.d.ts +0 -22
  190. package/dist/stack/drain-jobs.js +0 -141
  191. package/dist/stack/event-collector.d.ts +0 -9
  192. package/dist/stack/event-collector.js +0 -12
  193. package/dist/stack/push-entity-projection-tables.d.ts +0 -24
  194. package/dist/stack/push-entity-projection-tables.js +0 -74
  195. package/dist/stack/redis.d.ts +0 -17
  196. package/dist/stack/redis.js +0 -52
  197. package/dist/stack/request-helper.d.ts +0 -35
  198. package/dist/stack/request-helper.js +0 -144
  199. package/dist/stack/test-stack.d.ts +0 -192
  200. package/dist/stack/test-stack.js +0 -429
  201. package/dist/testing/access-assertions.d.ts +0 -2
  202. package/dist/testing/access-assertions.js +0 -13
  203. package/dist/testing/assertions.d.ts +0 -10
  204. package/dist/testing/assertions.js +0 -22
  205. package/dist/testing/boot-validator-fixture.d.ts +0 -3
  206. package/dist/testing/boot-validator-fixture.js +0 -101
  207. package/dist/testing/closed-connection-error.d.ts +0 -7
  208. package/dist/testing/closed-connection-error.js +0 -46
  209. package/dist/testing/db-cleanup.d.ts +0 -9
  210. package/dist/testing/db-cleanup.js +0 -31
  211. package/dist/testing/expect-error.d.ts +0 -2
  212. package/dist/testing/expect-error.js +0 -22
  213. package/dist/testing/file-provider-contract.d.ts +0 -2
  214. package/dist/testing/file-provider-contract.js +0 -102
  215. package/dist/testing/http-cookies.d.ts +0 -7
  216. package/dist/testing/http-cookies.js +0 -47
  217. package/dist/testing/late-bound.d.ts +0 -9
  218. package/dist/testing/late-bound.js +0 -31
  219. package/dist/testing/manual-clock.d.ts +0 -14
  220. package/dist/testing/manual-clock.js +0 -12
  221. package/dist/testing/multipart-helper.d.ts +0 -22
  222. package/dist/testing/multipart-helper.js +0 -77
  223. package/dist/testing/mutable-master-key-provider.d.ts +0 -7
  224. package/dist/testing/mutable-master-key-provider.js +0 -35
  225. package/dist/testing/observability-recorder.d.ts +0 -9
  226. package/dist/testing/observability-recorder.js +0 -29
  227. package/dist/testing/seed.d.ts +0 -9
  228. package/dist/testing/seed.js +0 -21
  229. package/dist/testing/shared-entities.d.ts +0 -286
  230. package/dist/testing/shared-entities.js +0 -56
  231. package/dist/testing/utils.d.ts +0 -1
  232. package/dist/testing/utils.js +0 -1
  233. package/dist/testing/wait-for.d.ts +0 -20
  234. package/dist/testing/wait-for.js +0 -47
  235. package/dist/testing/without-ambient-temporal.d.ts +0 -5
  236. package/dist/testing/without-ambient-temporal.js +0 -17
  237. package/dist/testing/zip-fixture.d.ts +0 -1
  238. package/dist/testing/zip-fixture.js +0 -33
  239. /package/dist/{stack/test-users.d.ts → seeding/seed-users.d.ts} +0 -0
  240. /package/dist/{stack/test-users.js → seeding/seed-users.js} +0 -0
@@ -1,286 +0,0 @@
1
- export declare const sharedWidgetEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
2
- name: {
3
- readonly type: "text";
4
- readonly description?: string;
5
- readonly maxLength?: number;
6
- readonly minLength?: number;
7
- readonly autoComplete?: string;
8
- readonly required?: boolean;
9
- readonly searchable?: boolean;
10
- readonly sortable?: boolean;
11
- readonly filterable?: boolean;
12
- readonly encrypted?: boolean;
13
- readonly sensitive?: boolean;
14
- readonly writeOnly?: boolean;
15
- readonly readAsInstruction?: boolean;
16
- readonly format?: "email" | "url" | "phone" | "password";
17
- readonly default?: string;
18
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
19
- readonly multiline?: boolean | {
20
- readonly rows?: number;
21
- };
22
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
23
- required: true;
24
- };
25
- }, "tenant">;
26
- export declare const sharedWidgetTable: import("../db/table-builder.js").EntityTable<import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
27
- name: {
28
- readonly type: "text";
29
- readonly description?: string;
30
- readonly maxLength?: number;
31
- readonly minLength?: number;
32
- readonly autoComplete?: string;
33
- readonly required?: boolean;
34
- readonly searchable?: boolean;
35
- readonly sortable?: boolean;
36
- readonly filterable?: boolean;
37
- readonly encrypted?: boolean;
38
- readonly sensitive?: boolean;
39
- readonly writeOnly?: boolean;
40
- readonly readAsInstruction?: boolean;
41
- readonly format?: "email" | "url" | "phone" | "password";
42
- readonly default?: string;
43
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
44
- readonly multiline?: boolean | {
45
- readonly rows?: number;
46
- };
47
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
48
- required: true;
49
- };
50
- }, "tenant">>;
51
- export declare const sharedUserEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
52
- email: {
53
- readonly type: "text";
54
- readonly description?: string;
55
- readonly maxLength?: number;
56
- readonly minLength?: number;
57
- readonly autoComplete?: string;
58
- readonly required?: boolean;
59
- readonly searchable?: boolean;
60
- readonly sortable?: boolean;
61
- readonly filterable?: boolean;
62
- readonly encrypted?: boolean;
63
- readonly sensitive?: boolean;
64
- readonly writeOnly?: boolean;
65
- readonly readAsInstruction?: boolean;
66
- readonly format?: "email" | "url" | "phone" | "password";
67
- readonly default?: string;
68
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
69
- readonly multiline?: boolean | {
70
- readonly rows?: number;
71
- };
72
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
73
- required: true;
74
- };
75
- firstName: {
76
- readonly type: "text";
77
- readonly description?: string;
78
- readonly maxLength?: number;
79
- readonly minLength?: number;
80
- readonly autoComplete?: string;
81
- readonly required?: boolean;
82
- readonly searchable?: boolean;
83
- readonly sortable?: boolean;
84
- readonly filterable?: boolean;
85
- readonly encrypted?: boolean;
86
- readonly sensitive?: boolean;
87
- readonly writeOnly?: boolean;
88
- readonly readAsInstruction?: boolean;
89
- readonly format?: "email" | "url" | "phone" | "password";
90
- readonly default?: string;
91
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
92
- readonly multiline?: boolean | {
93
- readonly rows?: number;
94
- };
95
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
96
- required: false;
97
- };
98
- lastName: {
99
- readonly type: "text";
100
- readonly description?: string;
101
- readonly maxLength?: number;
102
- readonly minLength?: number;
103
- readonly autoComplete?: string;
104
- readonly required?: boolean;
105
- readonly searchable?: boolean;
106
- readonly sortable?: boolean;
107
- readonly filterable?: boolean;
108
- readonly encrypted?: boolean;
109
- readonly sensitive?: boolean;
110
- readonly writeOnly?: boolean;
111
- readonly readAsInstruction?: boolean;
112
- readonly format?: "email" | "url" | "phone" | "password";
113
- readonly default?: string;
114
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
115
- readonly multiline?: boolean | {
116
- readonly rows?: number;
117
- };
118
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
119
- required: false;
120
- };
121
- isEnabled: import("@cosmicdrift/kumiko-types/fields").BooleanFieldDef & {
122
- required: false;
123
- };
124
- }, "tenant">;
125
- export declare const sharedUserTable: import("../db/table-builder.js").EntityTable<import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
126
- email: {
127
- readonly type: "text";
128
- readonly description?: string;
129
- readonly maxLength?: number;
130
- readonly minLength?: number;
131
- readonly autoComplete?: string;
132
- readonly required?: boolean;
133
- readonly searchable?: boolean;
134
- readonly sortable?: boolean;
135
- readonly filterable?: boolean;
136
- readonly encrypted?: boolean;
137
- readonly sensitive?: boolean;
138
- readonly writeOnly?: boolean;
139
- readonly readAsInstruction?: boolean;
140
- readonly format?: "email" | "url" | "phone" | "password";
141
- readonly default?: string;
142
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
143
- readonly multiline?: boolean | {
144
- readonly rows?: number;
145
- };
146
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
147
- required: true;
148
- };
149
- firstName: {
150
- readonly type: "text";
151
- readonly description?: string;
152
- readonly maxLength?: number;
153
- readonly minLength?: number;
154
- readonly autoComplete?: string;
155
- readonly required?: boolean;
156
- readonly searchable?: boolean;
157
- readonly sortable?: boolean;
158
- readonly filterable?: boolean;
159
- readonly encrypted?: boolean;
160
- readonly sensitive?: boolean;
161
- readonly writeOnly?: boolean;
162
- readonly readAsInstruction?: boolean;
163
- readonly format?: "email" | "url" | "phone" | "password";
164
- readonly default?: string;
165
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
166
- readonly multiline?: boolean | {
167
- readonly rows?: number;
168
- };
169
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
170
- required: false;
171
- };
172
- lastName: {
173
- readonly type: "text";
174
- readonly description?: string;
175
- readonly maxLength?: number;
176
- readonly minLength?: number;
177
- readonly autoComplete?: string;
178
- readonly required?: boolean;
179
- readonly searchable?: boolean;
180
- readonly sortable?: boolean;
181
- readonly filterable?: boolean;
182
- readonly encrypted?: boolean;
183
- readonly sensitive?: boolean;
184
- readonly writeOnly?: boolean;
185
- readonly readAsInstruction?: boolean;
186
- readonly format?: "email" | "url" | "phone" | "password";
187
- readonly default?: string;
188
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
189
- readonly multiline?: boolean | {
190
- readonly rows?: number;
191
- };
192
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
193
- required: false;
194
- };
195
- isEnabled: import("@cosmicdrift/kumiko-types/fields").BooleanFieldDef & {
196
- required: false;
197
- };
198
- }, "tenant">>;
199
- export declare const sharedItemEntity: import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
200
- name: {
201
- readonly type: "text";
202
- readonly description?: string;
203
- readonly maxLength?: number;
204
- readonly minLength?: number;
205
- readonly autoComplete?: string;
206
- readonly required?: boolean;
207
- readonly searchable?: boolean;
208
- readonly sortable?: boolean;
209
- readonly filterable?: boolean;
210
- readonly encrypted?: boolean;
211
- readonly sensitive?: boolean;
212
- readonly writeOnly?: boolean;
213
- readonly readAsInstruction?: boolean;
214
- readonly format?: "email" | "url" | "phone" | "password";
215
- readonly default?: string;
216
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
217
- readonly multiline?: boolean | {
218
- readonly rows?: number;
219
- };
220
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
221
- required: true;
222
- };
223
- price: {
224
- readonly type: "number";
225
- readonly description?: string;
226
- readonly required?: boolean;
227
- readonly sortable?: boolean;
228
- readonly filterable?: boolean;
229
- readonly sensitive?: boolean;
230
- readonly default?: number;
231
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
232
- readonly min?: number;
233
- readonly max?: number;
234
- readonly integer?: boolean;
235
- readonly unit?: string | {
236
- readonly field: string;
237
- };
238
- readonly grouping?: boolean;
239
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
240
- required: false;
241
- };
242
- }, "tenant">;
243
- export declare const sharedItemTable: import("../db/table-builder.js").EntityTable<import("@cosmicdrift/kumiko-types/fields").EntityDefinition<{
244
- name: {
245
- readonly type: "text";
246
- readonly description?: string;
247
- readonly maxLength?: number;
248
- readonly minLength?: number;
249
- readonly autoComplete?: string;
250
- readonly required?: boolean;
251
- readonly searchable?: boolean;
252
- readonly sortable?: boolean;
253
- readonly filterable?: boolean;
254
- readonly encrypted?: boolean;
255
- readonly sensitive?: boolean;
256
- readonly writeOnly?: boolean;
257
- readonly readAsInstruction?: boolean;
258
- readonly format?: "email" | "url" | "phone" | "password";
259
- readonly default?: string;
260
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
261
- readonly multiline?: boolean | {
262
- readonly rows?: number;
263
- };
264
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
265
- required: true;
266
- };
267
- price: {
268
- readonly type: "number";
269
- readonly description?: string;
270
- readonly required?: boolean;
271
- readonly sortable?: boolean;
272
- readonly filterable?: boolean;
273
- readonly sensitive?: boolean;
274
- readonly default?: number;
275
- readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
276
- readonly min?: number;
277
- readonly max?: number;
278
- readonly integer?: boolean;
279
- readonly unit?: string | {
280
- readonly field: string;
281
- };
282
- readonly grouping?: boolean;
283
- } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
284
- required: false;
285
- };
286
- }, "tenant">>;
@@ -1,56 +0,0 @@
1
- import { buildEntityTable } from "../db/table-builder.js";
2
- import { createBooleanField, createEntity, createNumberField, createTextField, } from "../engine/factories.js";
3
- // --- Shared Entity Fixtures -------------------------------------------------
4
- //
5
- // Replaces inline `createEntity(...) + buildEntityTable(...)` boilerplate
6
- // that appeared in 20+ integration tests. Pick the shape closest to what
7
- // the test needs; if a feature needs extras (hooks, state-machine, fields),
8
- // keep a local inline entity rather than bloating these shared ones.
9
- // "Just a name" — minimal entity with `name: text`, softDelete on.
10
- // Used by every pipeline test that only needs SOMETHING to write events
11
- // against (event-dispatcher*, event-retention, event-dedup, …).
12
- export const sharedWidgetEntity = createEntity({
13
- fields: {
14
- name: createTextField({ required: true, personal: false, reason: "test_fixture" }),
15
- },
16
- softDelete: true,
17
- });
18
- export const sharedWidgetTable = buildEntityTable("widget", sharedWidgetEntity);
19
- // User with searchable name/email fields. Used by full-stack, cascade,
20
- // and any test that exercises search-indexing or field-access on a
21
- // realistic-looking user record.
22
- export const sharedUserEntity = createEntity({
23
- fields: {
24
- email: createTextField({
25
- required: true,
26
- format: "email",
27
- searchable: true,
28
- personal: false,
29
- reason: "test_fixture",
30
- }),
31
- firstName: createTextField({
32
- searchable: true,
33
- personal: false,
34
- reason: "test_fixture",
35
- }),
36
- lastName: createTextField({
37
- searchable: true,
38
- personal: false,
39
- reason: "test_fixture",
40
- }),
41
- isEnabled: createBooleanField({ default: true }),
42
- },
43
- softDelete: true,
44
- searchWeight: 10,
45
- });
46
- export const sharedUserTable = buildEntityTable("user", sharedUserEntity);
47
- // Item with name + optional price. Used by error-contract, batch,
48
- // projection-rebuild — tests that need "a thing you can CRUD".
49
- export const sharedItemEntity = createEntity({
50
- fields: {
51
- name: createTextField({ required: true, personal: false, reason: "test_fixture" }),
52
- price: createNumberField(),
53
- },
54
- softDelete: true,
55
- });
56
- export const sharedItemTable = buildEntityTable("item", sharedItemEntity);
@@ -1 +0,0 @@
1
- export declare const sleep: (ms: number) => Promise<unknown>;
@@ -1 +0,0 @@
1
- export const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
@@ -1,20 +0,0 @@
1
- /**
2
- * Polls a condition with escalating timeouts.
3
- *
4
- * Default schedule: 250ms → 1s → 3s between attempts. Tries first (already-true
5
- * returns immediately), then sleeps `delays[i]` after each failure before the
6
- * next try — so N delays yield N+1 attempts and the full backoff budget.
7
- * Throws the last assertion error if all attempts fail.
8
- *
9
- * Usage (assertion form):
10
- * await waitFor(() => {
11
- * expect(events).toHaveLength(1);
12
- * });
13
- *
14
- * Usage (predicate form — a literal `false` return means "not yet", anything
15
- * else, including `undefined`, counts as success):
16
- * await waitFor(() => events.length >= 4);
17
- */
18
- export declare function waitFor(fn: () => void | boolean | Promise<void | boolean>, options?: {
19
- delays?: number[];
20
- }): Promise<void>;
@@ -1,47 +0,0 @@
1
- /**
2
- * Polls a condition with escalating timeouts.
3
- *
4
- * Default schedule: 250ms → 1s → 3s between attempts. Tries first (already-true
5
- * returns immediately), then sleeps `delays[i]` after each failure before the
6
- * next try — so N delays yield N+1 attempts and the full backoff budget.
7
- * Throws the last assertion error if all attempts fail.
8
- *
9
- * Usage (assertion form):
10
- * await waitFor(() => {
11
- * expect(events).toHaveLength(1);
12
- * });
13
- *
14
- * Usage (predicate form — a literal `false` return means "not yet", anything
15
- * else, including `undefined`, counts as success):
16
- * await waitFor(() => events.length >= 4);
17
- */
18
- export async function waitFor(
19
- // biome-ignore lint/suspicious/noConfusingVoidType: void must stay in the union so the existing expect(...) block form (implicit void return) still type-checks
20
- fn, options) {
21
- const delays = options?.delays ?? [250, 1000, 3000];
22
- if (delays.length === 0) {
23
- throw new Error("waitFor: empty delay schedule");
24
- }
25
- let lastError;
26
- for (let i = 0;; i++) {
27
- try {
28
- const result = await fn();
29
- if (result !== false) {
30
- // skip: condition already true — no further polling
31
- return;
32
- }
33
- lastError = undefined;
34
- }
35
- catch (err) {
36
- lastError = err;
37
- }
38
- if (i >= delays.length) {
39
- break;
40
- }
41
- await new Promise((r) => setTimeout(r, delays[i]));
42
- }
43
- if (lastError !== undefined) {
44
- throw lastError;
45
- }
46
- throw new Error("waitFor: condition never became true within the delay schedule");
47
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * Run `fn` with `globalThis.Temporal` deleted, then restore.
3
- * Used by ambient-independence regression tests (kumiko-framework#1525/#1550).
4
- */
5
- export declare function withoutAmbientTemporal<T>(fn: () => T | Promise<T>): Promise<T>;
@@ -1,17 +0,0 @@
1
- /**
2
- * Run `fn` with `globalThis.Temporal` deleted, then restore.
3
- * Used by ambient-independence regression tests (kumiko-framework#1525/#1550).
4
- */
5
- export async function withoutAmbientTemporal(fn) {
6
- const savedGlobal = Reflect.get(globalThis, "Temporal");
7
- Reflect.deleteProperty(globalThis, "Temporal");
8
- try {
9
- return await fn();
10
- }
11
- finally {
12
- if (savedGlobal === undefined)
13
- Reflect.deleteProperty(globalThis, "Temporal");
14
- else
15
- Reflect.set(globalThis, "Temporal", savedGlobal);
16
- }
17
- }
@@ -1 +0,0 @@
1
- export declare function zipWithEntries(...entryNames: readonly string[]): Uint8Array;
@@ -1,33 +0,0 @@
1
- const LOCAL_HEADER_FIXED_LENGTH = 30;
2
- const CENTRAL_HEADER_FIXED_LENGTH = 46;
3
- const EOCD_LENGTH = 22;
4
- // Minimal stored ZIP (no compression, zero CRC): enough structure for readers that
5
- // walk the central directory. Not for extraction.
6
- export function zipWithEntries(...entryNames) {
7
- const encoder = new TextEncoder();
8
- const names = entryNames.map((name) => encoder.encode(name));
9
- const localSize = names.reduce((sum, name) => sum + LOCAL_HEADER_FIXED_LENGTH + name.length, 0);
10
- const centralSize = names.reduce((sum, name) => sum + CENTRAL_HEADER_FIXED_LENGTH + name.length, 0);
11
- const bytes = new Uint8Array(localSize + centralSize + EOCD_LENGTH);
12
- const view = new DataView(bytes.buffer);
13
- let localOffset = 0;
14
- let centralOffset = localSize;
15
- for (const name of names) {
16
- view.setUint32(localOffset, 0x04034b50, true);
17
- view.setUint16(localOffset + 26, name.length, true);
18
- bytes.set(name, localOffset + LOCAL_HEADER_FIXED_LENGTH);
19
- view.setUint32(centralOffset, 0x02014b50, true);
20
- view.setUint16(centralOffset + 28, name.length, true);
21
- view.setUint32(centralOffset + 42, localOffset, true);
22
- bytes.set(name, centralOffset + CENTRAL_HEADER_FIXED_LENGTH);
23
- localOffset += LOCAL_HEADER_FIXED_LENGTH + name.length;
24
- centralOffset += CENTRAL_HEADER_FIXED_LENGTH + name.length;
25
- }
26
- const eocdOffset = localSize + centralSize;
27
- view.setUint32(eocdOffset, 0x06054b50, true);
28
- view.setUint16(eocdOffset + 8, names.length, true);
29
- view.setUint16(eocdOffset + 10, names.length, true);
30
- view.setUint32(eocdOffset + 12, centralSize, true);
31
- view.setUint32(eocdOffset + 16, localSize, true);
32
- return bytes;
33
- }