@ontrails/store 1.0.0-beta.14

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 (46) hide show
  1. package/.agents/notes/2026-04-04/handoff-202604032309-9e85a104.md +38 -0
  2. package/.turbo/turbo-build.log +1 -0
  3. package/.turbo/turbo-lint.log +3 -0
  4. package/.turbo/turbo-typecheck.log +1 -0
  5. package/CHANGELOG.md +12 -0
  6. package/README.md +213 -0
  7. package/dist/drizzle/index.d.ts +3 -0
  8. package/dist/drizzle/index.d.ts.map +1 -0
  9. package/dist/drizzle/index.js +2 -0
  10. package/dist/drizzle/index.js.map +1 -0
  11. package/dist/drizzle/runtime.d.ts +21 -0
  12. package/dist/drizzle/runtime.d.ts.map +1 -0
  13. package/dist/drizzle/runtime.js +458 -0
  14. package/dist/drizzle/runtime.js.map +1 -0
  15. package/dist/drizzle/schema.d.ts +15 -0
  16. package/dist/drizzle/schema.d.ts.map +1 -0
  17. package/dist/drizzle/schema.js +322 -0
  18. package/dist/drizzle/schema.js.map +1 -0
  19. package/dist/drizzle/types.d.ts +40 -0
  20. package/dist/drizzle/types.d.ts.map +1 -0
  21. package/dist/drizzle/types.js +2 -0
  22. package/dist/drizzle/types.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/store.d.ts +26 -0
  28. package/dist/store.d.ts.map +1 -0
  29. package/dist/store.js +192 -0
  30. package/dist/store.js.map +1 -0
  31. package/dist/types.d.ts +224 -0
  32. package/dist/types.d.ts.map +1 -0
  33. package/dist/types.js +2 -0
  34. package/dist/types.js.map +1 -0
  35. package/package.json +29 -0
  36. package/src/__tests__/store.test.ts +333 -0
  37. package/src/drizzle/__tests__/drizzle.test.ts +469 -0
  38. package/src/drizzle/index.ts +17 -0
  39. package/src/drizzle/runtime.ts +853 -0
  40. package/src/drizzle/schema.ts +577 -0
  41. package/src/drizzle/types.ts +70 -0
  42. package/src/index.ts +39 -0
  43. package/src/store.ts +367 -0
  44. package/src/types.ts +361 -0
  45. package/tsconfig.json +9 -0
  46. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,322 @@
1
+ import { ValidationError } from '@ontrails/core';
2
+ import { customType, index, integer, real, sqliteTable, text, } from 'drizzle-orm/sqlite-core';
3
+ const dateText = customType({
4
+ dataType() {
5
+ return 'text';
6
+ },
7
+ fromDriver(value) {
8
+ return new Date(value);
9
+ },
10
+ toDriver(value) {
11
+ return value.toISOString();
12
+ },
13
+ });
14
+ const defaultUnwrapState = {
15
+ nullable: false,
16
+ optional: false,
17
+ };
18
+ /**
19
+ * The unwrap helpers below access Zod internal `._def` shapes (`def.type`,
20
+ * `def.checks`, `def.innerType`, `def.defaultValue`). These are not part of
21
+ * Zod's public API and may change across minor versions. The store package
22
+ * pins Zod through the workspace catalog — test `z.number().int()` mapping
23
+ * to `INTEGER` (see drizzle.test.ts) to catch regressions on Zod upgrades.
24
+ */
25
+ const unwrapInnerType = (schema) => {
26
+ const { innerType } = schema.def;
27
+ return innerType;
28
+ };
29
+ const unwrapDefaultLayer = (schema) => {
30
+ const { defaultValue } = schema.def;
31
+ return {
32
+ defaultValue,
33
+ schema: unwrapInnerType(schema),
34
+ };
35
+ };
36
+ const unwrapSchema = (schema, state = defaultUnwrapState) => {
37
+ switch (schema.def.type) {
38
+ case 'default': {
39
+ const { defaultValue, schema: innerSchema } = unwrapDefaultLayer(schema);
40
+ return unwrapSchema(innerSchema, { ...state, defaultValue });
41
+ }
42
+ case 'nullable': {
43
+ return unwrapSchema(unwrapInnerType(schema), {
44
+ ...state,
45
+ nullable: true,
46
+ });
47
+ }
48
+ case 'optional': {
49
+ return unwrapSchema(unwrapInnerType(schema), {
50
+ ...state,
51
+ optional: true,
52
+ });
53
+ }
54
+ default: {
55
+ return {
56
+ ...state,
57
+ schema,
58
+ };
59
+ }
60
+ }
61
+ };
62
+ const isIntegerNumber = (schema) => schema.def.type === 'number' &&
63
+ (schema.def.checks ?? []).some((check) => {
64
+ const { def } = check;
65
+ return def?.['check'] === 'number_format';
66
+ });
67
+ const toEnumValues = (entries) => {
68
+ const values = Object.values(entries);
69
+ if (values.length === 0) {
70
+ throw new ValidationError('Enum-backed store fields must declare values');
71
+ }
72
+ return values;
73
+ };
74
+ const fieldSpecBase = (unwrapped) => ({
75
+ ...(unwrapped.defaultValue === undefined
76
+ ? {}
77
+ : { defaultValue: unwrapped.defaultValue }),
78
+ nullable: unwrapped.nullable,
79
+ optional: unwrapped.optional,
80
+ });
81
+ const enumEntriesOf = (schema) => {
82
+ const { entries } = schema.def;
83
+ return entries;
84
+ };
85
+ const inferFieldKind = (field, schema) => {
86
+ switch (schema.def.type) {
87
+ case 'array':
88
+ case 'object': {
89
+ return 'json';
90
+ }
91
+ case 'boolean': {
92
+ return 'boolean';
93
+ }
94
+ case 'date': {
95
+ return 'date';
96
+ }
97
+ case 'enum': {
98
+ return 'text';
99
+ }
100
+ case 'number': {
101
+ return isIntegerNumber(schema) ? 'integer' : 'real';
102
+ }
103
+ case 'string': {
104
+ return 'text';
105
+ }
106
+ default: {
107
+ throw new ValidationError(`Store field "${field}" uses unsupported schema type "${schema.def.type}" for the Drizzle SQLite connector`);
108
+ }
109
+ }
110
+ };
111
+ export const describeField = (field, schema) => {
112
+ const unwrapped = unwrapSchema(schema);
113
+ const base = fieldSpecBase(unwrapped);
114
+ const kind = inferFieldKind(field, unwrapped.schema);
115
+ return {
116
+ ...base,
117
+ ...(unwrapped.schema.def.type === 'enum'
118
+ ? { enumValues: toEnumValues(enumEntriesOf(unwrapped.schema)) }
119
+ : {}),
120
+ kind,
121
+ };
122
+ };
123
+ const quoteIdentifier = (value) => `"${value.replaceAll('"', '""')}"`;
124
+ const quoteStringLiteral = (value) => `'${value.replaceAll("'", "''")}'`;
125
+ const serializeJsonDefault = (value) => quoteStringLiteral(JSON.stringify(value));
126
+ const serializePrimitiveDefault = (value) => {
127
+ switch (typeof value) {
128
+ case 'boolean': {
129
+ return value ? '1' : '0';
130
+ }
131
+ case 'number': {
132
+ return Number.isFinite(value) ? `${value}` : undefined;
133
+ }
134
+ case 'string': {
135
+ return quoteStringLiteral(value);
136
+ }
137
+ default: {
138
+ return undefined;
139
+ }
140
+ }
141
+ };
142
+ const toSqlDefault = (value) => {
143
+ if (value === undefined || value === null) {
144
+ return undefined;
145
+ }
146
+ if (value instanceof Date) {
147
+ return quoteStringLiteral(value.toISOString());
148
+ }
149
+ return typeof value === 'object'
150
+ ? serializeJsonDefault(value)
151
+ : serializePrimitiveDefault(value);
152
+ };
153
+ const toSqlType = (kind) => {
154
+ switch (kind) {
155
+ case 'boolean':
156
+ case 'integer': {
157
+ return 'INTEGER';
158
+ }
159
+ case 'real': {
160
+ return 'REAL';
161
+ }
162
+ case 'date':
163
+ case 'json':
164
+ case 'text': {
165
+ return 'TEXT';
166
+ }
167
+ default: {
168
+ return 'TEXT';
169
+ }
170
+ }
171
+ };
172
+ const createBaseColumnBuilder = (field, spec) => {
173
+ switch (spec.kind) {
174
+ case 'boolean': {
175
+ return integer(field, {
176
+ mode: 'boolean',
177
+ });
178
+ }
179
+ case 'date': {
180
+ return dateText(field);
181
+ }
182
+ case 'integer': {
183
+ return integer(field);
184
+ }
185
+ case 'json': {
186
+ return text(field, { mode: 'json' });
187
+ }
188
+ case 'real': {
189
+ return real(field);
190
+ }
191
+ case 'text': {
192
+ return spec.enumValues === undefined
193
+ ? text(field)
194
+ : text(field, {
195
+ enum: spec.enumValues,
196
+ });
197
+ }
198
+ default: {
199
+ throw new ValidationError(`Store field "${field}" resolved to an unsupported Drizzle column builder`);
200
+ }
201
+ }
202
+ };
203
+ const applyPrimaryKey = (builder, spec, isPrimaryKey, isGenerated) => {
204
+ if (!isPrimaryKey) {
205
+ return builder;
206
+ }
207
+ const shouldAutoIncrement = isGenerated && spec.kind === 'integer' && spec.defaultValue === undefined;
208
+ return shouldAutoIncrement
209
+ ? builder.primaryKey({ autoIncrement: true })
210
+ : builder.primaryKey();
211
+ };
212
+ const applyCommonBuilderState = (builder, spec, notNull) => {
213
+ let next = builder;
214
+ if (notNull) {
215
+ next = next.notNull();
216
+ }
217
+ if (toSqlDefault(spec.defaultValue) !== undefined) {
218
+ next = next.default(spec.defaultValue);
219
+ }
220
+ return next;
221
+ };
222
+ const resolveReferencedTable = (definition, sourceTable, targetTableName) => {
223
+ const target = definition.tables[targetTableName];
224
+ if (target !== undefined) {
225
+ return target;
226
+ }
227
+ throw new ValidationError(`Store table "${sourceTable.name}" references unknown table "${targetTableName}"`);
228
+ };
229
+ const resolveReferencedColumn = (tables, targetTableName, targetPrimaryKey) => {
230
+ const targetTable = tables[targetTableName];
231
+ if (targetTable === undefined) {
232
+ throw new ValidationError(`Store table reference to "${targetTableName}" could not be resolved during Drizzle schema derivation`);
233
+ }
234
+ return targetTable[targetPrimaryKey];
235
+ };
236
+ const applyReference = (builder, field, table, definition, tables) => {
237
+ const targetTableName = table.references[field];
238
+ if (targetTableName === undefined) {
239
+ return builder;
240
+ }
241
+ const target = resolveReferencedTable(definition, table, targetTableName);
242
+ return builder.references(() => resolveReferencedColumn(tables, targetTableName, target.primaryKey), { onDelete: 'restrict', onUpdate: 'cascade' });
243
+ };
244
+ const deriveColumnBuilder = (field, table, definition, tables) => {
245
+ const schema = table.schema.shape[field];
246
+ const spec = describeField(field, schema);
247
+ const isPrimaryKey = field === table.primaryKey;
248
+ const isGenerated = table.generated.includes(field);
249
+ const baseBuilder = createBaseColumnBuilder(field, spec);
250
+ const keyedBuilder = applyPrimaryKey(baseBuilder, spec, isPrimaryKey, isGenerated);
251
+ const finalizedBuilder = applyCommonBuilderState(keyedBuilder, spec, !isPrimaryKey && !spec.optional && !spec.nullable);
252
+ return applyReference(finalizedBuilder, field, table, definition, tables);
253
+ };
254
+ const appendPrimaryKeySql = (parts, field, table, spec) => {
255
+ const isPrimaryKey = field === table.primaryKey;
256
+ if (!isPrimaryKey) {
257
+ if (!spec.optional && !spec.nullable) {
258
+ parts.push('NOT NULL');
259
+ }
260
+ return;
261
+ }
262
+ parts.push('NOT NULL');
263
+ parts.push('PRIMARY KEY');
264
+ const isAutoIncrement = table.generated.includes(field) &&
265
+ spec.kind === 'integer' &&
266
+ spec.defaultValue === undefined;
267
+ if (isAutoIncrement) {
268
+ parts.push('AUTOINCREMENT');
269
+ }
270
+ };
271
+ const appendDefaultSql = (parts, spec) => {
272
+ const sqlDefault = toSqlDefault(spec.defaultValue);
273
+ if (sqlDefault !== undefined) {
274
+ parts.push(`DEFAULT ${sqlDefault}`);
275
+ }
276
+ };
277
+ const appendReferenceSql = (parts, field, table, definition) => {
278
+ const targetTableName = table.references[field];
279
+ if (targetTableName === undefined) {
280
+ return;
281
+ }
282
+ const target = resolveReferencedTable(definition, table, targetTableName);
283
+ parts.push(`REFERENCES ${quoteIdentifier(targetTableName)} (${quoteIdentifier(target.primaryKey)}) ON DELETE RESTRICT ON UPDATE CASCADE`);
284
+ };
285
+ const createColumnSqlParts = (field, schema, table, definition) => {
286
+ const spec = describeField(field, schema);
287
+ const parts = [quoteIdentifier(field), toSqlType(spec.kind)];
288
+ appendPrimaryKeySql(parts, field, table, spec);
289
+ appendDefaultSql(parts, spec);
290
+ appendReferenceSql(parts, field, table, definition);
291
+ return parts;
292
+ };
293
+ const createColumnSql = (field, schema, table, definition) => ` ${createColumnSqlParts(field, schema, table, definition).join(' ')}`;
294
+ const createTableSql = (table, definition) => {
295
+ const columns = Object.entries(table.schema.shape).map(([field, schema]) => createColumnSql(field, schema, table, definition));
296
+ return [
297
+ `CREATE TABLE IF NOT EXISTS ${quoteIdentifier(table.name)} (`,
298
+ columns.join(',\n'),
299
+ ')',
300
+ ].join('\n');
301
+ };
302
+ const createIndexSql = (table, field) => `CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${table.name}_${field}_idx`)} ON ${quoteIdentifier(table.name)} (${quoteIdentifier(field)})`;
303
+ const definedTables = (definition) => definition.tableNames.flatMap((name) => {
304
+ const table = definition.tables[name];
305
+ return table === undefined ? [] : [table];
306
+ });
307
+ const createIndexStatements = (definition) => definedTables(definition).flatMap((table) => table.indexes.map((field) => createIndexSql(table, field)));
308
+ export const deriveDrizzleTables = (definition) => {
309
+ const tables = {};
310
+ for (const table of definedTables(definition)) {
311
+ tables[table.name] = sqliteTable(table.name, Object.fromEntries(Object.keys(table.schema.shape).map((field) => [
312
+ field,
313
+ deriveColumnBuilder(field, table, definition, tables),
314
+ ])), (self) => table.indexes.map((field) => index(`${table.name}_${field}_idx`).on(self[field])));
315
+ }
316
+ return Object.freeze(tables);
317
+ };
318
+ export const createSqliteSchemaStatements = (definition) => Object.freeze([
319
+ ...definedTables(definition).map((table) => createTableSql(table, definition)),
320
+ ...createIndexStatements(definition),
321
+ ]);
322
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { Provision } from '@ontrails/core';
2
+ import type { BunSQLiteDatabase } from 'drizzle-orm/bun-sqlite';
3
+ import type { AnySQLiteTable } from 'drizzle-orm/sqlite-core';
4
+ import type { AnyStoreDefinition, FixtureInputOf, ReadOnlyStoreConnection, StoreAccessMode, StoreConnection } from '../types.js';
5
+ export type DrizzleStoreSchema<TStore extends AnyStoreDefinition> = {
6
+ readonly [TName in keyof TStore['tables']]: AnySQLiteTable<{
7
+ name: Extract<TName, string>;
8
+ }>;
9
+ };
10
+ export interface DrizzleQueryContext<TStore extends AnyStoreDefinition> {
11
+ readonly drizzle: BunSQLiteDatabase<DrizzleStoreSchema<TStore>>;
12
+ readonly tables: DrizzleStoreSchema<TStore>;
13
+ }
14
+ export type DrizzleMockSeed<TStore extends AnyStoreDefinition> = Partial<{
15
+ readonly [TName in keyof TStore['tables']]: readonly FixtureInputOf<TStore['tables'][TName]>[];
16
+ }>;
17
+ export interface ConnectDrizzleOptions<TStore extends AnyStoreDefinition> {
18
+ readonly description?: string;
19
+ readonly id?: string;
20
+ readonly mockSeed?: DrizzleMockSeed<TStore>;
21
+ readonly url: string;
22
+ }
23
+ export interface ReadOnlyDrizzleOptions {
24
+ readonly description?: string;
25
+ readonly id?: string;
26
+ readonly url: string;
27
+ }
28
+ export type ReadOnlyDrizzleStoreConnection<TStore extends AnyStoreDefinition> = ReadOnlyStoreConnection<TStore> & {
29
+ query<TResult>(run: (ctx: DrizzleQueryContext<TStore>) => TResult | Promise<TResult>): Promise<Awaited<TResult>>;
30
+ };
31
+ export type DrizzleStoreConnection<TStore extends AnyStoreDefinition> = StoreConnection<TStore> & ReadOnlyDrizzleStoreConnection<TStore>;
32
+ export interface DrizzleStoreProvisionShape<TStore extends AnyStoreDefinition, TConnection, TAccess extends StoreAccessMode> {
33
+ readonly access: TAccess;
34
+ readonly store: TStore;
35
+ readonly tables: DrizzleStoreSchema<TStore>;
36
+ from(ctx: Parameters<Provision<TConnection>['from']>[0]): TConnection;
37
+ readonly kind: 'provision';
38
+ }
39
+ export type DrizzleStoreProvision<TStore extends AnyStoreDefinition, TConnection, TAccess extends StoreAccessMode> = Provision<TConnection> & DrizzleStoreProvisionShape<TStore, TConnection, TAccess>;
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/drizzle/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/drizzle/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { entitySchemaOf, fixtureSchemaOf, insertSchemaOf, store, updateSchemaOf, } from './store.js';
2
+ export type { AnyStoreDefinition, AnyStoreTable, EntityOf, FiltersOf, FixtureInputOf, FixtureOf, FixturesOfInput, GeneratedFieldsOfInput, GeneratedKeysOf, IndexFieldsOfInput, InsertOf, PrimaryKeyOf, ReadOnlyStoreConnection, ReadOnlyStoreTableAccessor, ReferencesOfInput, StoreAccessMode, StoreConnection, StoreDefinition, StoreFieldKey, StoreFixtureInput, StoreFixtureRow, StoreIdentifierOf, StoreListOptions, StoreObjectSchema, StoreSearchDefinition, StoreTable, StoreTableAccessor, StoreTableInput, StoreTablesInput, UpdateOf, } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,KAAK,EACL,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,QAAQ,GACT,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { entitySchemaOf, fixtureSchemaOf, insertSchemaOf, store, updateSchemaOf, } from './store.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,KAAK,EACL,cAAc,GACf,MAAM,YAAY,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { StoreDefinition, StoreTable, StoreTablesInput } from './types.js';
2
+ /**
3
+ * Declare a connector-agnostic store definition from entity schemas and
4
+ * persistence metadata.
5
+ *
6
+ * The returned value is a normalized, read-only contract that connectors can
7
+ * bind to a concrete runtime later.
8
+ */
9
+ export declare const store: <const TTables extends StoreTablesInput>(tables: TTables) => StoreDefinition<TTables>;
10
+ /**
11
+ * Read the full entity schema from a normalized store table.
12
+ */
13
+ export declare const entitySchemaOf: <TTable extends StoreTable>(table: TTable) => TTable["schema"];
14
+ /**
15
+ * Read the fixture schema from a normalized store table.
16
+ */
17
+ export declare const fixtureSchemaOf: <TTable extends StoreTable>(table: TTable) => TTable["fixtureSchema"];
18
+ /**
19
+ * Read the insert schema from a normalized store table.
20
+ */
21
+ export declare const insertSchemaOf: <TTable extends StoreTable>(table: TTable) => TTable["insertSchema"];
22
+ /**
23
+ * Read the update schema from a normalized store table.
24
+ */
25
+ export declare const updateSchemaOf: <TTable extends StoreTable>(table: TTable) => TTable["updateSchema"];
26
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EAEf,UAAU,EAEV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAuSpB;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,OAAO,SAAS,gBAAgB,EAC1D,QAAQ,OAAO,KACd,eAAe,CAAC,OAAO,CAyBzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,UAAU,EACtD,OAAO,MAAM,KACZ,MAAM,CAAC,QAAQ,CAAiB,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,UAAU,EACvD,OAAO,MAAM,KACZ,MAAM,CAAC,eAAe,CAAwB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,UAAU,EACtD,OAAO,MAAM,KACZ,MAAM,CAAC,cAAc,CAAuB,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,UAAU,EACtD,OAAO,MAAM,KACZ,MAAM,CAAC,cAAc,CAAuB,CAAC"}
package/dist/store.js ADDED
@@ -0,0 +1,192 @@
1
+ import { ValidationError } from '@ontrails/core';
2
+ const isStoreObjectSchema = (schema) => schema.def.type === 'object' && 'shape' in schema.def;
3
+ const uniqueStrings = (values) => Object.freeze([...(values === undefined ? [] : new Set(values))]);
4
+ const hasField = (schema, field) => Object.hasOwn(schema.shape, field);
5
+ const validateFieldList = (tableName, schema, fields, label) => {
6
+ for (const field of fields) {
7
+ if (hasField(schema, field)) {
8
+ continue;
9
+ }
10
+ throw new ValidationError(`Store table "${tableName}" declares ${label} field "${field}" that is not present on the schema`);
11
+ }
12
+ };
13
+ const validateReferences = (tableName, schema, references, tableNames) => {
14
+ for (const [field, target] of Object.entries(references)) {
15
+ if (!hasField(schema, field)) {
16
+ throw new ValidationError(`Store table "${tableName}" declares reference field "${field}" that is not present on the schema`);
17
+ }
18
+ if (target !== undefined && tableNames.includes(target)) {
19
+ continue;
20
+ }
21
+ throw new ValidationError(`Store table "${tableName}" references unknown table "${target}"`);
22
+ }
23
+ };
24
+ const buildFieldMask = (fields) => Object.fromEntries(fields.map((field) => [field, true]));
25
+ const omitFields = (schema, fields) => {
26
+ if (fields.length === 0) {
27
+ return schema;
28
+ }
29
+ return schema.omit(buildFieldMask(fields));
30
+ };
31
+ const partialFields = (schema, fields) => {
32
+ if (fields.length === 0) {
33
+ return schema;
34
+ }
35
+ return schema.partial(buildFieldMask(fields));
36
+ };
37
+ const deriveInsertSchema = (schema, generated) => omitFields(schema, generated);
38
+ const deriveFixtureSchema = (schema, generated) => partialFields(schema, generated);
39
+ /**
40
+ * Strip `default` wrappers from a Zod type so that partial update schemas
41
+ * do not silently re-materialize defaults. Walks through all wrapper layers
42
+ * (default, optional, nullable), strips defaults, and re-applies non-default
43
+ * wrappers to preserve the nullable constraint.
44
+ */
45
+ const stripDefaultWrappers = (schema) => {
46
+ const wrappers = [];
47
+ let current = schema;
48
+ while (current.def.type === 'default' ||
49
+ current.def.type === 'optional' ||
50
+ current.def.type === 'nullable') {
51
+ const type = current.def.type;
52
+ if (type !== 'default') {
53
+ wrappers.push(type);
54
+ }
55
+ current = current.def['innerType'];
56
+ }
57
+ // Re-apply nullable wrappers (optional is dropped — .partial() re-adds it)
58
+ return wrappers.includes('nullable') ? current.nullable() : current;
59
+ };
60
+ const stripDefaultsFromShape = (schema) => {
61
+ const stripped = {};
62
+ for (const [field, value] of Object.entries(schema.shape)) {
63
+ stripped[field] = stripDefaultWrappers(value);
64
+ }
65
+ return stripped;
66
+ };
67
+ const deriveUpdateSchema = (schema, primaryKey) => {
68
+ const partial = schema
69
+ .extend(stripDefaultsFromShape(schema))
70
+ .partial();
71
+ // Only omit the primaryKey if it's still present (it may already be in `generated`)
72
+ return hasField(partial, primaryKey)
73
+ ? omitFields(partial, [primaryKey])
74
+ : partial;
75
+ };
76
+ const formatFixtureIssues = (issues) => issues.map((issue) => issue.message).join('; ');
77
+ const validateFixturePrimaryKeys = (tableName, primaryKey, fixtures) => {
78
+ const seen = new Set();
79
+ for (const [index, fixture] of fixtures.entries()) {
80
+ const identifier = fixture[primaryKey];
81
+ if (identifier === undefined) {
82
+ continue;
83
+ }
84
+ if (seen.has(identifier)) {
85
+ throw new ValidationError(`Store table "${tableName}" fixture ${index + 1} duplicates primary key "${String(identifier)}"`);
86
+ }
87
+ seen.add(identifier);
88
+ }
89
+ };
90
+ const normalizeReferences = (references) => {
91
+ const normalized = {};
92
+ for (const [field, target] of Object.entries(references ?? {})) {
93
+ if (target !== undefined) {
94
+ normalized[field] = target;
95
+ }
96
+ }
97
+ return Object.freeze(normalized);
98
+ };
99
+ const validatePrimaryKey = (tableName, schema, primaryKey) => {
100
+ if (hasField(schema, primaryKey)) {
101
+ return;
102
+ }
103
+ throw new ValidationError(`Store table "${tableName}" declares primaryKey "${primaryKey}" that is not present on the schema`);
104
+ };
105
+ const validateTableInput = (tableName, schema, primaryKey, generated, indexes, references, tableNames) => {
106
+ validatePrimaryKey(tableName, schema, primaryKey);
107
+ validateFieldList(tableName, schema, generated, 'generated');
108
+ validateFieldList(tableName, schema, indexes, 'index');
109
+ validateReferences(tableName, schema, references, tableNames);
110
+ };
111
+ const normalizeFixtures = (tableName, primaryKey, fixtureSchema, fixtures) => {
112
+ if (fixtures === undefined || fixtures.length === 0) {
113
+ return Object.freeze([]);
114
+ }
115
+ const normalized = [];
116
+ for (const [index, fixture] of fixtures.entries()) {
117
+ const parsed = fixtureSchema.safeParse(fixture);
118
+ if (!parsed.success) {
119
+ throw new ValidationError(`Store table "${tableName}" fixture ${index + 1} is invalid: ${formatFixtureIssues(parsed.error.issues)}`);
120
+ }
121
+ normalized.push(Object.freeze(parsed.data));
122
+ }
123
+ validateFixturePrimaryKeys(tableName, primaryKey, normalized);
124
+ return Object.freeze(normalized);
125
+ };
126
+ const normalizeTable = (name, input, tableNames) => {
127
+ if (!isStoreObjectSchema(input.schema)) {
128
+ throw new ValidationError(`Store table "${name}" must use a Zod object schema`);
129
+ }
130
+ const generated = uniqueStrings(input.generated);
131
+ const indexes = uniqueStrings(input.indexes);
132
+ const references = normalizeReferences(input.references);
133
+ validateTableInput(name, input.schema, input.primaryKey, generated, indexes, references, tableNames);
134
+ const insertSchema = deriveInsertSchema(input.schema, generated);
135
+ const fixtureSchema = deriveFixtureSchema(input.schema, generated);
136
+ const fixtures = normalizeFixtures(name, input.primaryKey, fixtureSchema, input.fixtures);
137
+ return Object.freeze({
138
+ fixtureSchema,
139
+ fixtures,
140
+ generated,
141
+ indexes,
142
+ insertSchema,
143
+ name,
144
+ primaryKey: input.primaryKey,
145
+ references,
146
+ schema: input.schema,
147
+ ...(input.search === undefined ? {} : { search: input.search }),
148
+ updateSchema: deriveUpdateSchema(insertSchema, input.primaryKey),
149
+ });
150
+ };
151
+ /**
152
+ * Declare a connector-agnostic store definition from entity schemas and
153
+ * persistence metadata.
154
+ *
155
+ * The returned value is a normalized, read-only contract that connectors can
156
+ * bind to a concrete runtime later.
157
+ */
158
+ export const store = (tables) => {
159
+ const tableNames = Object.freeze(Object.keys(tables).toSorted());
160
+ const normalized = {};
161
+ for (const name of tableNames) {
162
+ const input = tables[name];
163
+ if (input === undefined) {
164
+ continue;
165
+ }
166
+ normalized[name] = normalizeTable(name, input, tableNames);
167
+ }
168
+ const get = (name) => normalized[name];
169
+ return Object.freeze({
170
+ get,
171
+ kind: 'store',
172
+ tableNames,
173
+ tables: Object.freeze(normalized),
174
+ });
175
+ };
176
+ /**
177
+ * Read the full entity schema from a normalized store table.
178
+ */
179
+ export const entitySchemaOf = (table) => table.schema;
180
+ /**
181
+ * Read the fixture schema from a normalized store table.
182
+ */
183
+ export const fixtureSchemaOf = (table) => table.fixtureSchema;
184
+ /**
185
+ * Read the insert schema from a normalized store table.
186
+ */
187
+ export const insertSchemaOf = (table) => table.insertSchema;
188
+ /**
189
+ * Read the update schema from a normalized store table.
190
+ */
191
+ export const updateSchemaOf = (table) => table.updateSchema;
192
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}