ignotum 0.0.13 → 0.0.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 (39) hide show
  1. package/dist/cli/bin.mjs +369 -55
  2. package/dist/cli/bin.mjs.map +1 -1
  3. package/dist/runtime/client.d.ts +3 -3
  4. package/dist/runtime/client.js +24 -4
  5. package/dist/runtime/client.js.map +1 -1
  6. package/dist/runtime/descriptor-DCCz5AHd-_nhlnu8U.js +298 -0
  7. package/dist/runtime/descriptor-DCCz5AHd-_nhlnu8U.js.map +1 -0
  8. package/dist/runtime/id-E7JKqQ9r.d.ts +1 -0
  9. package/dist/runtime/index-DWU-7TIh.d.ts +185 -0
  10. package/dist/runtime/internal/host.d.ts +23 -5
  11. package/dist/runtime/internal/host.js +24 -4
  12. package/dist/runtime/internal/host.js.map +1 -1
  13. package/dist/runtime/internal/server.d.ts +1 -1
  14. package/dist/runtime/internal/server.js +1 -1
  15. package/dist/runtime/internal/types.d.ts +2 -1
  16. package/dist/runtime/internal/types.js +1 -1
  17. package/dist/runtime/{pagination-DnKg3dkI-r5ZUxBBx.d.ts → pagination-CpYCaRYD-C2Rpp4Cw.d.ts} +14 -4
  18. package/dist/runtime/pagination-E7JKqQ9r.d.ts +1 -0
  19. package/dist/runtime/{schema-1Zs03-iS.js → schema-DqogEydG.js} +38 -11
  20. package/dist/runtime/schema-DqogEydG.js.map +1 -0
  21. package/dist/runtime/server.d.ts +4 -3
  22. package/dist/runtime/server.js +1 -1
  23. package/dist/runtime/types-C1iDP2Yf-BnkfBOQf.d.ts +224 -0
  24. package/package.json +2 -2
  25. package/src/cli/agent-files.ts +4 -0
  26. package/src/cli/build/server.ts +35 -6
  27. package/src/cli/command.ts +25 -2
  28. package/src/cli/deploy.ts +34 -11
  29. package/src/client/sync.ts +1 -1
  30. package/src/dev-runtime/database.ts +77 -2
  31. package/src/dev-runtime/id.ts +19 -4
  32. package/src/dev-runtime/migrations.ts +9 -0
  33. package/src/internal/host.ts +1 -1
  34. package/dist/runtime/descriptor-Cyo9FP9n-C0SRVXNW.js +0 -154
  35. package/dist/runtime/descriptor-Cyo9FP9n-C0SRVXNW.js.map +0 -1
  36. package/dist/runtime/id-Dz0apuB3.d.ts +0 -1
  37. package/dist/runtime/index-D54flWtH.d.ts +0 -402
  38. package/dist/runtime/pagination-Dz0apuB3.d.ts +0 -1
  39. package/dist/runtime/schema-1Zs03-iS.js.map +0 -1
@@ -0,0 +1,298 @@
1
+ import { p as initial } from "./id-Bt9XWRGL.js";
2
+ import { Effect, Function, Predicate, Schema } from "effect";
3
+ //#region ../contracts/dist/runtime/pagination.js
4
+ const PaginationCursor = Schema.String.check(Schema.isBase64Url()).pipe(Schema.brand("ignotum/runtime/PaginationCursor"));
5
+ const PaginationPageSize = Schema.Int.check(Schema.isBetween({
6
+ minimum: 1,
7
+ maximum: 1e3
8
+ })).pipe(Schema.brand("ignotum/runtime/PaginationPageSize"));
9
+ Schema.Struct({
10
+ cursor: Schema.NullOr(PaginationCursor),
11
+ pageSize: PaginationPageSize
12
+ });
13
+ const TablePosition = Schema.Struct({
14
+ type: Schema.Literal("Table"),
15
+ createdAt: Schema.Int,
16
+ id: Schema.String
17
+ });
18
+ const IndexPosition = Schema.Struct({
19
+ type: Schema.Literal("Index"),
20
+ key: Schema.String.check(Schema.isPattern(/^(?:[0-9a-f]{2})*$/)).pipe(Schema.brand("ignotum/runtime/EncodedIndexKey"))
21
+ });
22
+ const PaginationPosition = Schema.Union([TablePosition, IndexPosition]);
23
+ const CursorPayloadV1 = Schema.Struct({
24
+ version: Schema.Literal(1),
25
+ query: Schema.String,
26
+ position: PaginationPosition
27
+ });
28
+ const CursorPayload = initial(CursorPayloadV1);
29
+ Schema.fromJsonString(CursorPayload);
30
+ //#endregion
31
+ //#region ../contracts/dist/descriptor-DCCz5AHd.js
32
+ const ValueEvolutionTypeId = Symbol.for("ignotum/schema/ValueEvolution");
33
+ const evolutionRules = (value) => value[ValueEvolutionTypeId] ?? {};
34
+ const codec = (value) => Schema.toCodecJson(value);
35
+ const encode = (schema, value) => Schema.decodeUnknownSync(Schema.Json)(Schema.encodeUnknownSync(codec(schema), { onExcessProperty: "error" })(value));
36
+ const decode = (schema, value) => Schema.decodeUnknownSync(codec(schema), { onExcessProperty: "error" })(value);
37
+ const copy = (value) => Object.create(Object.getPrototypeOf(value), Object.getOwnPropertyDescriptors(value));
38
+ const isValueObject = Schema.is(Schema.Record(Schema.String, Schema.Unknown));
39
+ const attachEvolution = (value, rules = {}) => {
40
+ Object.defineProperty(value, ValueEvolutionTypeId, {
41
+ configurable: true,
42
+ value: rules
43
+ });
44
+ return Object.assign(value, {
45
+ default(defaultValue) {
46
+ if (getValueDescriptor(value)?.type === "optional") throw new Error("Defaults require a non-optional validator. A default already allows omission on creation.");
47
+ const defaultJson = JSON.stringify(encode(value, defaultValue));
48
+ const next = copy(value);
49
+ const constructor = Schema.withConstructorDefault(Effect.sync(() => decode(value, JSON.parse(defaultJson))))(value);
50
+ Object.defineProperty(next, "ast", {
51
+ value: constructor.ast,
52
+ configurable: true
53
+ });
54
+ return attachEvolution(next, {
55
+ ...rules,
56
+ defaultJson
57
+ });
58
+ },
59
+ renameFrom(name) {
60
+ if (name.length === 0 || [
61
+ "id",
62
+ "createdAt",
63
+ "updatedAt"
64
+ ].includes(name)) throw new Error(`Cannot rename reserved or empty field '${name}'.`);
65
+ return attachEvolution(copy(value), {
66
+ ...rules,
67
+ renameFrom: name
68
+ });
69
+ },
70
+ from(previous, convert) {
71
+ if (getValueDescriptor(previous) === void 0) throw new Error("Historical values must use an Ignotum values validator.");
72
+ return attachEvolution(copy(value), {
73
+ ...rules,
74
+ previous: [...rules.previous ?? [], {
75
+ schema: previous,
76
+ convert
77
+ }]
78
+ });
79
+ }
80
+ });
81
+ };
82
+ const withValueChildren = (value, children) => {
83
+ attachEvolution(value, {
84
+ ...evolutionRules(value),
85
+ children
86
+ });
87
+ return value;
88
+ };
89
+ const validateFieldRenames = (fields) => {
90
+ const sources = /* @__PURE__ */ new Set();
91
+ for (const [name, field] of Object.entries(fields)) {
92
+ const source = evolutionRules(field).renameFrom;
93
+ if (source === void 0) continue;
94
+ if (source === name || Object.hasOwn(fields, source) || sources.has(source)) throw new Error(`Rename source '${source}' conflicts with another field.`);
95
+ sources.add(source);
96
+ }
97
+ };
98
+ const mapChildren = (schema, value, visit, rename) => {
99
+ const children = evolutionRules(schema).children;
100
+ if (children === void 0) return value;
101
+ switch (children.type) {
102
+ case "object": {
103
+ if (!isValueObject(value)) return value;
104
+ const result = { ...value };
105
+ for (const [name, field] of Object.entries(children.fields)) {
106
+ const source = rename ? evolutionRules(field).renameFrom : void 0;
107
+ if (source !== void 0 && Object.hasOwn(result, source)) {
108
+ if (Object.hasOwn(result, name)) throw new Error(`Both '${name}' and its rename source '${source}' are present.`);
109
+ Object.defineProperty(result, name, {
110
+ value: result[source],
111
+ enumerable: true,
112
+ configurable: true,
113
+ writable: true
114
+ });
115
+ delete result[source];
116
+ }
117
+ const next = visit(field, Object.hasOwn(result, name) ? result[name] : void 0);
118
+ if (next !== void 0) Object.defineProperty(result, name, {
119
+ value: next,
120
+ enumerable: true,
121
+ configurable: true,
122
+ writable: true
123
+ });
124
+ }
125
+ return result;
126
+ }
127
+ case "array": return Array.isArray(value) ? value.map((item) => visit(children.value, item)) : value;
128
+ case "record": return isValueObject(value) ? Object.fromEntries(Object.entries(value).map(([key, item]) => [key, visit(children.value, item)])) : value;
129
+ case "nullable": return value === null ? value : visit(children.value, value);
130
+ case "optional": return value === void 0 ? value : visit(children.value, value);
131
+ case "union":
132
+ for (const member of children.members) try {
133
+ const result = visit(member, value);
134
+ if (rename) decode(member, result);
135
+ else encode(member, result);
136
+ return result;
137
+ } catch {}
138
+ return value;
139
+ }
140
+ };
141
+ /** Apply creation defaults to decoded values, without accepting historical representations. */
142
+ const applyValueDefaults = (schema, value) => {
143
+ const rules = evolutionRules(schema);
144
+ if (value === void 0 && rules.defaultJson !== void 0) return decode(schema, JSON.parse(rules.defaultJson));
145
+ return mapChildren(schema, value, applyValueDefaults, false);
146
+ };
147
+ /** Convert a stored JSON value to the current representation, preserving already valid values. */
148
+ const evolveStoredValue = (schema, value) => {
149
+ try {
150
+ decode(schema, value);
151
+ return value;
152
+ } catch {}
153
+ const rules = evolutionRules(schema);
154
+ if (value === void 0 && rules.defaultJson !== void 0) return JSON.parse(rules.defaultJson);
155
+ let failure;
156
+ try {
157
+ const next = mapChildren(schema, value, evolveStoredValue, true);
158
+ decode(schema, next);
159
+ return next;
160
+ } catch (cause) {
161
+ failure = cause;
162
+ }
163
+ const matches = [];
164
+ for (const previous of rules.previous ?? []) try {
165
+ matches.push({
166
+ previous,
167
+ value: decode(previous.schema, value)
168
+ });
169
+ } catch {}
170
+ if (matches.length > 1) throw new Error("More than one historical validator matches this value.");
171
+ const match = matches[0];
172
+ if (match === void 0) throw failure;
173
+ return encode(schema, applyValueDefaults(schema, match.previous.convert(match.value)));
174
+ };
175
+ const evolveStoredFields = (schema, value) => Schema.decodeUnknownSync(Schema.JsonObject)(evolveStoredValue(schema, value));
176
+ const LiteralValue = Schema.Union([
177
+ Schema.String,
178
+ Schema.Finite,
179
+ Schema.Boolean
180
+ ]);
181
+ const DescriptorField = Schema.Struct({
182
+ name: Schema.String,
183
+ value: Schema.suspend(() => ValueDescriptor)
184
+ });
185
+ const ValueDescriptor = Schema.Union([
186
+ Schema.Struct({
187
+ type: Schema.Literal("array"),
188
+ value: Schema.suspend(() => ValueDescriptor)
189
+ }),
190
+ Schema.Struct({ type: Schema.Literal("boolean") }),
191
+ Schema.Struct({ type: Schema.Literal("date") }),
192
+ Schema.Struct({
193
+ type: Schema.Literal("file"),
194
+ formats: Schema.Array(Schema.Literals([
195
+ "jpeg",
196
+ "png",
197
+ "webp",
198
+ "avif",
199
+ "gif"
200
+ ])),
201
+ maxBytes: Schema.Int
202
+ }),
203
+ Schema.Struct({
204
+ type: Schema.Literal("error"),
205
+ tag: Schema.String,
206
+ fields: Schema.Array(DescriptorField)
207
+ }),
208
+ Schema.Struct({
209
+ type: Schema.Literal("id"),
210
+ table: Schema.String
211
+ }),
212
+ Schema.Struct({ type: Schema.Literal("userId") }),
213
+ Schema.Struct({ type: Schema.Literal("integer") }),
214
+ Schema.Struct({
215
+ type: Schema.Literal("literal"),
216
+ value: LiteralValue
217
+ }),
218
+ Schema.Struct({
219
+ type: Schema.Literal("literals"),
220
+ values: Schema.Array(LiteralValue)
221
+ }),
222
+ Schema.Struct({ type: Schema.Literal("never") }),
223
+ Schema.Struct({ type: Schema.Literal("null") }),
224
+ Schema.Struct({
225
+ type: Schema.Literal("nullable"),
226
+ value: Schema.suspend(() => ValueDescriptor)
227
+ }),
228
+ Schema.Struct({ type: Schema.Literal("number") }),
229
+ Schema.Struct({
230
+ type: Schema.Literal("object"),
231
+ fields: Schema.Array(DescriptorField)
232
+ }),
233
+ Schema.Struct({
234
+ type: Schema.Literal("optional"),
235
+ value: Schema.suspend(() => ValueDescriptor)
236
+ }),
237
+ Schema.Struct({
238
+ type: Schema.Literal("record"),
239
+ value: Schema.suspend(() => ValueDescriptor)
240
+ }),
241
+ Schema.Struct({
242
+ type: Schema.Literal("secret"),
243
+ value: Schema.suspend(() => ValueDescriptor)
244
+ }),
245
+ Schema.Struct({ type: Schema.Literal("string") }),
246
+ Schema.Struct({
247
+ type: Schema.Literal("union"),
248
+ members: Schema.Array(Schema.suspend(() => ValueDescriptor))
249
+ })
250
+ ]);
251
+ const ValueDescriptorTypeId = Symbol.for("ignotum/schema/ValueDescriptor");
252
+ const attachValueDescriptor = Function.dual(2, (value, descriptor) => {
253
+ Object.defineProperty(value, ValueDescriptorTypeId, {
254
+ configurable: false,
255
+ enumerable: false,
256
+ value: descriptor,
257
+ writable: false
258
+ });
259
+ return attachEvolution(value);
260
+ });
261
+ const getValueDescriptor = (value) => {
262
+ if (!Predicate.hasProperty(value, ValueDescriptorTypeId)) return void 0;
263
+ return Schema.is(ValueDescriptor)(value[ValueDescriptorTypeId]) ? value[ValueDescriptorTypeId] : void 0;
264
+ };
265
+ const descriptorAllowedInEnvironment = (descriptor) => {
266
+ switch (descriptor.type) {
267
+ case "error":
268
+ case "file":
269
+ case "userId":
270
+ case "id": return false;
271
+ case "array":
272
+ case "nullable":
273
+ case "optional":
274
+ case "record":
275
+ case "secret": return descriptorAllowedInEnvironment(descriptor.value);
276
+ case "object": return descriptor.fields.every((field) => descriptorAllowedInEnvironment(field.value));
277
+ case "union": return descriptor.members.every(descriptorAllowedInEnvironment);
278
+ default: return true;
279
+ }
280
+ };
281
+ const descriptorFields = (fields) => {
282
+ const entries = [];
283
+ for (const name of Reflect.ownKeys(fields)) {
284
+ if (!Predicate.isString(name)) throw new Error("Ignotum value objects only support string field names.");
285
+ const field = fields[name];
286
+ const value = field === void 0 ? void 0 : getValueDescriptor(field);
287
+ if (value === void 0) throw new Error(`The field '${name}' must use an Ignotum values validator.`);
288
+ entries.push({
289
+ name,
290
+ value
291
+ });
292
+ }
293
+ return entries.sort((left, right) => left.name.localeCompare(right.name));
294
+ };
295
+ //#endregion
296
+ export { descriptorFields as a, validateFieldRenames as c, PaginationPageSize as d, descriptorAllowedInEnvironment as i, withValueChildren as l, applyValueDefaults as n, evolveStoredFields as o, attachValueDescriptor as r, getValueDescriptor as s, ValueDescriptor as t, PaginationCursor as u };
297
+
298
+ //# sourceMappingURL=descriptor-DCCz5AHd-_nhlnu8U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor-DCCz5AHd-_nhlnu8U.js","names":[],"sources":["../../../contracts/dist/runtime/pagination.js","../../../contracts/dist/descriptor-DCCz5AHd.js"],"sourcesContent":["import { initial } from \"../versioned.js\";\nimport { encodeCanonicalJson } from \"../json.js\";\nimport { Encoding, Result, Schema } from \"effect\";\n//#region src/runtime/pagination.ts\nconst PaginationCursor = Schema.String.check(Schema.isBase64Url()).pipe(Schema.brand(\"ignotum/runtime/PaginationCursor\"));\nconst PaginationPageSize = Schema.Int.check(Schema.isBetween({\n\tminimum: 1,\n\tmaximum: 1e3\n})).pipe(Schema.brand(\"ignotum/runtime/PaginationPageSize\"));\nconst PaginationOptions = Schema.Struct({\n\tcursor: Schema.NullOr(PaginationCursor),\n\tpageSize: PaginationPageSize\n});\nconst TablePosition = Schema.Struct({\n\ttype: Schema.Literal(\"Table\"),\n\tcreatedAt: Schema.Int,\n\tid: Schema.String\n});\nconst IndexPosition = Schema.Struct({\n\ttype: Schema.Literal(\"Index\"),\n\tkey: Schema.String.check(Schema.isPattern(/^(?:[0-9a-f]{2})*$/)).pipe(Schema.brand(\"ignotum/runtime/EncodedIndexKey\"))\n});\nconst PaginationPosition = Schema.Union([TablePosition, IndexPosition]);\nconst CursorPayloadV1 = Schema.Struct({\n\tversion: Schema.Literal(1),\n\tquery: Schema.String,\n\tposition: PaginationPosition\n});\nconst CursorPayload = initial(CursorPayloadV1);\nconst CursorPayloadJson = Schema.fromJsonString(CursorPayload);\nconst paginationQueryIdentity = (tableId, index, lower, upper, order) => encodeCanonicalJson([\n\ttableId,\n\tindex,\n\tlower ?? null,\n\tupper ?? null,\n\torder\n]);\nconst encodePaginationCursor = (query, position) => PaginationCursor.make(Encoding.encodeBase64Url(Schema.encodeSync(CursorPayloadJson)({\n\tversion: 1,\n\tquery,\n\tposition\n})));\nconst decodePaginationCursor = (cursor) => Schema.decodeSync(CursorPayloadJson)(Result.getOrThrow(Encoding.decodeBase64UrlString(cursor)));\n//#endregion\nexport { PaginationCursor, PaginationOptions, PaginationPageSize, PaginationPosition, decodePaginationCursor, encodePaginationCursor, paginationQueryIdentity };\n\n//# sourceMappingURL=pagination.js.map","import { Effect, Function, Predicate, Schema } from \"effect\";\n//#region src/schema/evolution.ts\nconst ValueEvolutionTypeId = Symbol.for(\"ignotum/schema/ValueEvolution\");\nconst evolutionRules = (value) => value[ValueEvolutionTypeId] ?? {};\nconst codec = (value) => Schema.toCodecJson(value);\nconst encode = (schema, value) => Schema.decodeUnknownSync(Schema.Json)(Schema.encodeUnknownSync(codec(schema), { onExcessProperty: \"error\" })(value));\nconst decode = (schema, value) => Schema.decodeUnknownSync(codec(schema), { onExcessProperty: \"error\" })(value);\nconst copy = (value) => Object.create(Object.getPrototypeOf(value), Object.getOwnPropertyDescriptors(value));\nconst isValueObject = Schema.is(Schema.Record(Schema.String, Schema.Unknown));\nconst attachEvolution = (value, rules = {}) => {\n\tObject.defineProperty(value, ValueEvolutionTypeId, {\n\t\tconfigurable: true,\n\t\tvalue: rules\n\t});\n\treturn Object.assign(value, {\n\t\tdefault(defaultValue) {\n\t\t\tif (getValueDescriptor(value)?.type === \"optional\") throw new Error(\"Defaults require a non-optional validator. A default already allows omission on creation.\");\n\t\t\tconst defaultJson = JSON.stringify(encode(value, defaultValue));\n\t\t\tconst next = copy(value);\n\t\t\tconst constructor = Schema.withConstructorDefault(Effect.sync(() => decode(value, JSON.parse(defaultJson))))(value);\n\t\t\tObject.defineProperty(next, \"ast\", {\n\t\t\t\tvalue: constructor.ast,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t\treturn attachEvolution(next, {\n\t\t\t\t...rules,\n\t\t\t\tdefaultJson\n\t\t\t});\n\t\t},\n\t\trenameFrom(name) {\n\t\t\tif (name.length === 0 || [\n\t\t\t\t\"id\",\n\t\t\t\t\"createdAt\",\n\t\t\t\t\"updatedAt\"\n\t\t\t].includes(name)) throw new Error(`Cannot rename reserved or empty field '${name}'.`);\n\t\t\treturn attachEvolution(copy(value), {\n\t\t\t\t...rules,\n\t\t\t\trenameFrom: name\n\t\t\t});\n\t\t},\n\t\tfrom(previous, convert) {\n\t\t\tif (getValueDescriptor(previous) === void 0) throw new Error(\"Historical values must use an Ignotum values validator.\");\n\t\t\treturn attachEvolution(copy(value), {\n\t\t\t\t...rules,\n\t\t\t\tprevious: [...rules.previous ?? [], {\n\t\t\t\t\tschema: previous,\n\t\t\t\t\tconvert\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t});\n};\nconst withValueChildren = (value, children) => {\n\tattachEvolution(value, {\n\t\t...evolutionRules(value),\n\t\tchildren\n\t});\n\treturn value;\n};\nconst validateFieldRenames = (fields) => {\n\tconst sources = /* @__PURE__ */ new Set();\n\tfor (const [name, field] of Object.entries(fields)) {\n\t\tconst source = evolutionRules(field).renameFrom;\n\t\tif (source === void 0) continue;\n\t\tif (source === name || Object.hasOwn(fields, source) || sources.has(source)) throw new Error(`Rename source '${source}' conflicts with another field.`);\n\t\tsources.add(source);\n\t}\n};\nconst mapChildren = (schema, value, visit, rename) => {\n\tconst children = evolutionRules(schema).children;\n\tif (children === void 0) return value;\n\tswitch (children.type) {\n\t\tcase \"object\": {\n\t\t\tif (!isValueObject(value)) return value;\n\t\t\tconst result = { ...value };\n\t\t\tfor (const [name, field] of Object.entries(children.fields)) {\n\t\t\t\tconst source = rename ? evolutionRules(field).renameFrom : void 0;\n\t\t\t\tif (source !== void 0 && Object.hasOwn(result, source)) {\n\t\t\t\t\tif (Object.hasOwn(result, name)) throw new Error(`Both '${name}' and its rename source '${source}' are present.`);\n\t\t\t\t\tObject.defineProperty(result, name, {\n\t\t\t\t\t\tvalue: result[source],\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t});\n\t\t\t\t\tdelete result[source];\n\t\t\t\t}\n\t\t\t\tconst next = visit(field, Object.hasOwn(result, name) ? result[name] : void 0);\n\t\t\t\tif (next !== void 0) Object.defineProperty(result, name, {\n\t\t\t\t\tvalue: next,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"array\": return Array.isArray(value) ? value.map((item) => visit(children.value, item)) : value;\n\t\tcase \"record\": return isValueObject(value) ? Object.fromEntries(Object.entries(value).map(([key, item]) => [key, visit(children.value, item)])) : value;\n\t\tcase \"nullable\": return value === null ? value : visit(children.value, value);\n\t\tcase \"optional\": return value === void 0 ? value : visit(children.value, value);\n\t\tcase \"union\":\n\t\t\tfor (const member of children.members) try {\n\t\t\t\tconst result = visit(member, value);\n\t\t\t\tif (rename) decode(member, result);\n\t\t\t\telse encode(member, result);\n\t\t\t\treturn result;\n\t\t\t} catch {}\n\t\t\treturn value;\n\t}\n};\n/** Apply creation defaults to decoded values, without accepting historical representations. */\nconst applyValueDefaults = (schema, value) => {\n\tconst rules = evolutionRules(schema);\n\tif (value === void 0 && rules.defaultJson !== void 0) return decode(schema, JSON.parse(rules.defaultJson));\n\treturn mapChildren(schema, value, applyValueDefaults, false);\n};\n/** Convert a stored JSON value to the current representation, preserving already valid values. */\nconst evolveStoredValue = (schema, value) => {\n\ttry {\n\t\tdecode(schema, value);\n\t\treturn value;\n\t} catch {}\n\tconst rules = evolutionRules(schema);\n\tif (value === void 0 && rules.defaultJson !== void 0) return JSON.parse(rules.defaultJson);\n\tlet failure;\n\ttry {\n\t\tconst next = mapChildren(schema, value, evolveStoredValue, true);\n\t\tdecode(schema, next);\n\t\treturn next;\n\t} catch (cause) {\n\t\tfailure = cause;\n\t}\n\tconst matches = [];\n\tfor (const previous of rules.previous ?? []) try {\n\t\tmatches.push({\n\t\t\tprevious,\n\t\t\tvalue: decode(previous.schema, value)\n\t\t});\n\t} catch {}\n\tif (matches.length > 1) throw new Error(\"More than one historical validator matches this value.\");\n\tconst match = matches[0];\n\tif (match === void 0) throw failure;\n\treturn encode(schema, applyValueDefaults(schema, match.previous.convert(match.value)));\n};\nconst evolveStoredFields = (schema, value) => Schema.decodeUnknownSync(Schema.JsonObject)(evolveStoredValue(schema, value));\n//#endregion\n//#region src/schema/descriptor.ts\nconst LiteralValue = Schema.Union([\n\tSchema.String,\n\tSchema.Finite,\n\tSchema.Boolean\n]);\nconst DescriptorField = Schema.Struct({\n\tname: Schema.String,\n\tvalue: Schema.suspend(() => ValueDescriptor)\n});\nconst ValueDescriptor = Schema.Union([\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"array\"),\n\t\tvalue: Schema.suspend(() => ValueDescriptor)\n\t}),\n\tSchema.Struct({ type: Schema.Literal(\"boolean\") }),\n\tSchema.Struct({ type: Schema.Literal(\"date\") }),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"file\"),\n\t\tformats: Schema.Array(Schema.Literals([\n\t\t\t\"jpeg\",\n\t\t\t\"png\",\n\t\t\t\"webp\",\n\t\t\t\"avif\",\n\t\t\t\"gif\"\n\t\t])),\n\t\tmaxBytes: Schema.Int\n\t}),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"error\"),\n\t\ttag: Schema.String,\n\t\tfields: Schema.Array(DescriptorField)\n\t}),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"id\"),\n\t\ttable: Schema.String\n\t}),\n\tSchema.Struct({ type: Schema.Literal(\"userId\") }),\n\tSchema.Struct({ type: Schema.Literal(\"integer\") }),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"literal\"),\n\t\tvalue: LiteralValue\n\t}),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"literals\"),\n\t\tvalues: Schema.Array(LiteralValue)\n\t}),\n\tSchema.Struct({ type: Schema.Literal(\"never\") }),\n\tSchema.Struct({ type: Schema.Literal(\"null\") }),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"nullable\"),\n\t\tvalue: Schema.suspend(() => ValueDescriptor)\n\t}),\n\tSchema.Struct({ type: Schema.Literal(\"number\") }),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"object\"),\n\t\tfields: Schema.Array(DescriptorField)\n\t}),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"optional\"),\n\t\tvalue: Schema.suspend(() => ValueDescriptor)\n\t}),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"record\"),\n\t\tvalue: Schema.suspend(() => ValueDescriptor)\n\t}),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"secret\"),\n\t\tvalue: Schema.suspend(() => ValueDescriptor)\n\t}),\n\tSchema.Struct({ type: Schema.Literal(\"string\") }),\n\tSchema.Struct({\n\t\ttype: Schema.Literal(\"union\"),\n\t\tmembers: Schema.Array(Schema.suspend(() => ValueDescriptor))\n\t})\n]);\nconst ValueDescriptorTypeId = Symbol.for(\"ignotum/schema/ValueDescriptor\");\nconst attachValueDescriptor = Function.dual(2, (value, descriptor) => {\n\tObject.defineProperty(value, ValueDescriptorTypeId, {\n\t\tconfigurable: false,\n\t\tenumerable: false,\n\t\tvalue: descriptor,\n\t\twritable: false\n\t});\n\treturn attachEvolution(value);\n});\nconst getValueDescriptor = (value) => {\n\tif (!Predicate.hasProperty(value, ValueDescriptorTypeId)) return void 0;\n\treturn Schema.is(ValueDescriptor)(value[ValueDescriptorTypeId]) ? value[ValueDescriptorTypeId] : void 0;\n};\nconst descriptorContainsFile = (descriptor) => {\n\tswitch (descriptor.type) {\n\t\tcase \"file\": return true;\n\t\tcase \"array\":\n\t\tcase \"nullable\":\n\t\tcase \"optional\":\n\t\tcase \"record\":\n\t\tcase \"secret\": return descriptorContainsFile(descriptor.value);\n\t\tcase \"error\":\n\t\tcase \"object\": return descriptor.fields.some((field) => descriptorContainsFile(field.value));\n\t\tcase \"union\": return descriptor.members.some(descriptorContainsFile);\n\t\tdefault: return false;\n\t}\n};\nconst descriptorContainsSecret = (descriptor) => {\n\tswitch (descriptor.type) {\n\t\tcase \"secret\": return true;\n\t\tcase \"array\":\n\t\tcase \"nullable\":\n\t\tcase \"optional\":\n\t\tcase \"record\": return descriptorContainsSecret(descriptor.value);\n\t\tcase \"error\":\n\t\tcase \"object\": return descriptor.fields.some((field) => descriptorContainsSecret(field.value));\n\t\tcase \"union\": return descriptor.members.some(descriptorContainsSecret);\n\t\tdefault: return false;\n\t}\n};\nconst descriptorAllowedInEnvironment = (descriptor) => {\n\tswitch (descriptor.type) {\n\t\tcase \"error\":\n\t\tcase \"file\":\n\t\tcase \"userId\":\n\t\tcase \"id\": return false;\n\t\tcase \"array\":\n\t\tcase \"nullable\":\n\t\tcase \"optional\":\n\t\tcase \"record\":\n\t\tcase \"secret\": return descriptorAllowedInEnvironment(descriptor.value);\n\t\tcase \"object\": return descriptor.fields.every((field) => descriptorAllowedInEnvironment(field.value));\n\t\tcase \"union\": return descriptor.members.every(descriptorAllowedInEnvironment);\n\t\tdefault: return true;\n\t}\n};\nconst descriptorFields = (fields) => {\n\tconst entries = [];\n\tfor (const name of Reflect.ownKeys(fields)) {\n\t\tif (!Predicate.isString(name)) throw new Error(\"Ignotum value objects only support string field names.\");\n\t\tconst field = fields[name];\n\t\tconst value = field === void 0 ? void 0 : getValueDescriptor(field);\n\t\tif (value === void 0) throw new Error(`The field '${name}' must use an Ignotum values validator.`);\n\t\tentries.push({\n\t\t\tname,\n\t\t\tvalue\n\t\t});\n\t}\n\treturn entries.sort((left, right) => left.name.localeCompare(right.name));\n};\n//#endregion\nexport { descriptorContainsFile as a, getValueDescriptor as c, evolveStoredValue as d, validateFieldRenames as f, descriptorAllowedInEnvironment as i, applyValueDefaults as l, ValueDescriptorTypeId as n, descriptorContainsSecret as o, withValueChildren as p, attachValueDescriptor as r, descriptorFields as s, ValueDescriptor as t, evolveStoredFields as u };\n\n//# sourceMappingURL=descriptor-DCCz5AHd.js.map"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "./pagination-CpYCaRYD-C2Rpp4Cw.js";
@@ -0,0 +1,185 @@
1
+ import { c as Result$1, g as FileValue, i as ErrorValue, n as DocumentNotFoundValue } from "./id-BzFHf3Wo-DGPCjgrf.js";
2
+ import { c as IdContext, n as PaginationPage, t as PaginationOptions } from "./pagination-CpYCaRYD-C2Rpp4Cw.js";
3
+ import { _ as table, a as Id, d as BoundValues, f as IdTargetsOf, g as UnresolvedReferencesTypeId, h as TableDefinition, i as EnvironmentType, n as Document, o as SchemaDefinitionContract, p as IndexDefinitions, t as DefinedEnv, u as emptyEnv, v as values } from "./types-C1iDP2Yf-BnkfBOQf.js";
4
+ import { Effect, Schema } from "effect";
5
+ //#region ../contracts/dist/schema/index.d.ts
6
+ //#region src/schema/definition.d.ts
7
+ type AnyTableDefinition = TableDefinition<Schema.Struct.Fields, IndexDefinitions>;
8
+ interface Tables {
9
+ readonly [tableName: string]: AnyTableDefinition;
10
+ }
11
+ type FieldsOf<Table extends AnyTableDefinition> = Table["fields"];
12
+ type IdTargetsOfFields<Fields extends Schema.Struct.Fields> = { readonly [FieldName in keyof Fields]: IdTargetsOf<Fields[FieldName]>; }[keyof Fields];
13
+ declare const UnknownTableReferenceTypeId: unique symbol;
14
+ interface UnknownTableReference<TableName extends string> {
15
+ readonly [UnknownTableReferenceTypeId]: `Unknown table reference: ${TableName}`;
16
+ }
17
+ type DefinitionReferenceValidation<Definitions extends Tables> = { readonly [TableName in keyof Definitions]: Exclude<IdTargetsOfFields<FieldsOf<Definitions[TableName]>>, keyof Definitions & string> extends (infer UnknownTarget extends string) ? [UnknownTarget] extends [never] ? unknown : UnknownTableReference<UnknownTarget> : never; };
18
+ type TableNameOf<SchemaDefinition extends Tables> = keyof SchemaDefinition & string;
19
+ interface DefinedSchema<SchemaDefinition extends Tables> extends SchemaDefinitionContract<SchemaDefinition> {
20
+ readonly _tag: "Schema";
21
+ }
22
+ interface SchemaAuthoring {
23
+ readonly table: typeof table;
24
+ readonly values: typeof values;
25
+ }
26
+ declare const defineSchema: <const Definitions extends Tables>(define: (authoring: SchemaAuthoring) => Definitions & DefinitionReferenceValidation<NoInfer<Definitions>>) => DefinedSchema<Definitions>;
27
+ //#endregion
28
+ //#region src/schema/server.d.ts
29
+ type TransportSchema = Schema.ConstraintCodec<unknown, unknown, never, never>;
30
+ interface ErrorSchema extends Schema.ConstraintCodec<ErrorValue, unknown, never, never> {
31
+ readonly Type: ErrorValue;
32
+ }
33
+ interface ResolvedFunctionValue {
34
+ readonly [UnresolvedReferencesTypeId]?: never;
35
+ }
36
+ type ContainsFile<Value> = Value extends FileValue ? true : Value extends Date ? false : Value extends ReadonlyArray<infer Item> ? true extends ContainsFile<Item> ? true : false : Value extends object ? true extends { [Key in keyof Value]-?: ContainsFile<Value[Key]>; }[keyof Value] ? true : false : false;
37
+ declare const InvalidFilePositionTypeId: unique symbol;
38
+ type FileFree<Value, Position extends string> = true extends ContainsFile<Value> ? {
39
+ readonly [InvalidFilePositionTypeId]: `Files cannot appear in ${Position}`;
40
+ } : unknown;
41
+ type ResolvedFunctionFields<Fields extends Schema.Struct.Fields> = { readonly [FieldName in keyof Fields]: Fields[FieldName] & ResolvedFunctionValue & TransportSchema; };
42
+ interface ForbiddenSystemFields {
43
+ readonly id?: never;
44
+ readonly createdAt?: never;
45
+ readonly updatedAt?: never;
46
+ }
47
+ type InsertOf<Table extends Tables[string]> = Schema.Struct.MakeIn<FieldsOf<Table>> & ForbiddenSystemFields;
48
+ type PatchOf<Table extends Tables[string]> = Partial<Schema.Struct.MakeIn<FieldsOf<Table>>> & ForbiddenSystemFields;
49
+ type FunctionArgs = Schema.Struct.Fields | undefined;
50
+ type FunctionReturns = TransportSchema | undefined;
51
+ type ArgsOf<Args extends FunctionArgs> = Args extends Schema.Struct.Fields ? keyof Args extends never ? void : Schema.Struct.Type<Args> : void;
52
+ type ReturnOf<Returns extends FunctionReturns> = Returns extends TransportSchema ? Returns["Type"] : void;
53
+ type DocumentNotFound<TableName extends string = string> = DocumentNotFoundValue<TableName, Id<TableName>>;
54
+ declare const IndexRangeTypeId: unique symbol;
55
+ interface IndexRangeExpression {
56
+ readonly [IndexRangeTypeId]: true;
57
+ }
58
+ type IndexFields<Definition extends Tables, Name extends TableNameOf<Definition>, IndexName extends keyof Definition[Name]["indexes"]> = Definition[Name]["indexes"][IndexName]["fields"] extends (infer Fields extends readonly string[]) ? readonly [...Fields, "createdAt", "id"] : never;
59
+ type IndexFieldValue<Definition extends Tables, Name extends TableNameOf<Definition>, FieldName extends string> = FieldName extends "createdAt" ? Date : FieldName extends "id" ? Id<Name> : FieldName extends keyof FieldsOf<Definition[Name]> ? FieldsOf<Definition[Name]>[FieldName]["Type"] : never;
60
+ interface IndexLowerBound<Definition extends Tables, Name extends TableNameOf<Definition>, FieldName extends string> extends IndexRangeExpression {
61
+ lt(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexRangeExpression;
62
+ lte(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexRangeExpression;
63
+ }
64
+ interface IndexUpperBound<Definition extends Tables, Name extends TableNameOf<Definition>, FieldName extends string> extends IndexRangeExpression {
65
+ gt(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexRangeExpression;
66
+ gte(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexRangeExpression;
67
+ }
68
+ interface IndexRangeBuilder<Definition extends Tables, Name extends TableNameOf<Definition>, Fields extends readonly string[]> extends IndexRangeExpression {
69
+ eq<FieldName extends Fields[0]>(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexRangeBuilder<Definition, Name, Fields extends readonly [string, ...infer Rest extends string[]] ? Rest : []>;
70
+ gt<FieldName extends Fields[0]>(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexLowerBound<Definition, Name, FieldName>;
71
+ gte<FieldName extends Fields[0]>(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexLowerBound<Definition, Name, FieldName>;
72
+ lt<FieldName extends Fields[0]>(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexUpperBound<Definition, Name, FieldName>;
73
+ lte<FieldName extends Fields[0]>(field: FieldName, value: IndexFieldValue<Definition, Name, FieldName>): IndexUpperBound<Definition, Name, FieldName>;
74
+ }
75
+ interface OrderedDatabaseQuery<Definition extends Tables, Name extends TableNameOf<Definition>> {
76
+ collect(): Result$1<ReadonlyArray<Document<Definition, Name>>, never>;
77
+ take(count: number): Result$1<ReadonlyArray<Document<Definition, Name>>, never>;
78
+ first(): Result$1<Document<Definition, Name> | undefined, never>;
79
+ unique(): Result$1<Document<Definition, Name> | undefined, never>;
80
+ paginate(options: PaginationOptions): Result$1<PaginationPage<Document<Definition, Name>>, never>;
81
+ }
82
+ interface SelectableDatabaseQuery<Definition extends Tables, Name extends TableNameOf<Definition>> extends OrderedDatabaseQuery<Definition, Name> {
83
+ order(direction: "asc" | "desc"): OrderedDatabaseQuery<Definition, Name>;
84
+ }
85
+ interface DatabaseQuery<Definition extends Tables, Name extends TableNameOf<Definition>> extends SelectableDatabaseQuery<Definition, Name> {
86
+ index<const IndexName extends keyof Definition[Name]["indexes"] & string>(name: IndexName, range?: (builder: IndexRangeBuilder<Definition, Name, IndexFields<Definition, Name, IndexName>>) => IndexRangeExpression): SelectableDatabaseQuery<Definition, Name>;
87
+ }
88
+ interface DatabaseReader<Definition extends Tables> {
89
+ query<const Name extends TableNameOf<Definition>>(name: Name): DatabaseQuery<Definition, Name>;
90
+ find<const Name extends TableNameOf<Definition>>(name: Name, id: Id<NoInfer<Name>>): Result$1<Document<Definition, Name> | undefined, never>;
91
+ get<const Name extends TableNameOf<Definition>>(name: Name, id: Id<NoInfer<Name>>): Result$1<Document<Definition, Name>, DocumentNotFound<Name>>;
92
+ }
93
+ interface DatabaseWriter<Definition extends Tables> extends DatabaseReader<Definition> {
94
+ delete<const Name extends TableNameOf<Definition>>(name: Name, id: Id<NoInfer<Name>>): Result$1<void, DocumentNotFound<Name>>;
95
+ insert<const Name extends TableNameOf<Definition>>(name: Name, value: InsertOf<Definition[NoInfer<Name>]>): Result$1<Id<Name>, never>;
96
+ patch<const Name extends TableNameOf<Definition>>(name: Name, id: Id<NoInfer<Name>>, value: PatchOf<Definition[NoInfer<Name>]>): Result$1<void, DocumentNotFound<Name>>;
97
+ replace<const Name extends TableNameOf<Definition>>(name: Name, id: Id<NoInfer<Name>>, value: InsertOf<Definition[NoInfer<Name>]>): Result$1<void, DocumentNotFound<Name>>;
98
+ }
99
+ interface QueryContext<Definition extends Tables, Environment extends DefinedEnv = typeof emptyEnv> {
100
+ readonly db: DatabaseReader<Definition>;
101
+ readonly env: EnvironmentType<Environment>;
102
+ readonly id: IdContext;
103
+ }
104
+ interface MutationContext<Definition extends Tables, Environment extends DefinedEnv = typeof emptyEnv> {
105
+ readonly db: DatabaseWriter<Definition>;
106
+ readonly env: EnvironmentType<Environment>;
107
+ readonly id: IdContext;
108
+ }
109
+ type FunctionKind = "Mutation" | "Query";
110
+ type HandlerContext<Kind extends FunctionKind, Definition extends Tables, Environment extends DefinedEnv> = Kind extends "Query" ? QueryContext<Definition, Environment> : MutationContext<Definition, Environment>;
111
+ type Handler<Kind extends FunctionKind, Definition extends Tables, Environment extends DefinedEnv, Args extends FunctionArgs, Success, Failure extends ErrorValue> = (ctx: HandlerContext<Kind, Definition, Environment>, args: ArgsOf<Args>) => Generator<Effect.Effect<unknown, Failure, never>, Success, never>;
112
+ type HandlerFailure<HandlerType> = HandlerType extends ((...arguments_: infer _Arguments) => Generator<infer Yielded, unknown, never>) ? Yielded extends Effect.Effect<unknown, infer Failure extends ErrorValue, never> ? Failure : never : never;
113
+ type FunctionDefinition<Kind extends FunctionKind, Definition extends Tables, Environment extends DefinedEnv, Args extends FunctionArgs, Returns extends FunctionReturns, Errors extends ErrorSchema | undefined, Failure extends ErrorValue> = {
114
+ readonly _tag: Kind;
115
+ readonly handler: Handler<Kind, Definition, Environment, Args, ReturnOf<Returns>, Failure>;
116
+ } & (Args extends Schema.Struct.Fields ? {
117
+ readonly args: Args;
118
+ } : {
119
+ readonly args?: never;
120
+ }) & (Returns extends TransportSchema ? {
121
+ readonly returns: Returns;
122
+ } : {
123
+ readonly returns?: never;
124
+ }) & (Errors extends ErrorSchema ? {
125
+ readonly errors: Errors;
126
+ } : {
127
+ readonly errors?: never;
128
+ });
129
+ interface FunctionInput<Kind extends FunctionKind, Definition extends Tables, Environment extends DefinedEnv, Args extends FunctionArgs, Success, Failure extends ErrorValue> {
130
+ readonly handler: Handler<Kind, Definition, Environment, Args, Success, Failure>;
131
+ }
132
+ type WithArgs<Kind extends FunctionKind, Args extends Schema.Struct.Fields> = {
133
+ readonly args: Args & ResolvedFunctionFields<NoInfer<Args>> & (Kind extends "Query" ? FileFree<Schema.Struct.Type<Args>, "query arguments"> : unknown);
134
+ };
135
+ interface WithoutArgs {
136
+ readonly args?: never;
137
+ }
138
+ type WithReturns<Kind extends FunctionKind, Returns extends TransportSchema> = {
139
+ readonly returns: Returns & ResolvedFunctionValue & (Kind extends "Mutation" ? FileFree<Returns["Type"], "mutation returns"> : unknown);
140
+ };
141
+ interface WithoutReturns {
142
+ readonly returns?: never;
143
+ }
144
+ interface DefineFunction<Kind extends FunctionKind, Definition extends Tables, Environment extends DefinedEnv> {
145
+ <const Args extends Schema.Struct.Fields, Returns extends TransportSchema, Errors extends ErrorSchema>(definition: FunctionInput<Kind, Definition, Environment, Args, Returns["Type"], Errors["Type"]> & WithArgs<Kind, Args> & WithReturns<Kind, Returns> & {
146
+ readonly errors: Errors & ResolvedFunctionValue & FileFree<Errors["Type"], "errors">;
147
+ }): FunctionDefinition<Kind, Definition, Environment, Args, Returns, Errors, Errors["Type"]>;
148
+ <Returns extends TransportSchema, Errors extends ErrorSchema>(definition: FunctionInput<Kind, Definition, Environment, undefined, Returns["Type"], Errors["Type"]> & WithoutArgs & WithReturns<Kind, Returns> & {
149
+ readonly errors: Errors & ResolvedFunctionValue & FileFree<Errors["Type"], "errors">;
150
+ }): FunctionDefinition<Kind, Definition, Environment, undefined, Returns, Errors, Errors["Type"]>;
151
+ <const Args extends Schema.Struct.Fields, Errors extends ErrorSchema>(definition: FunctionInput<Kind, Definition, Environment, Args, void, Errors["Type"]> & WithArgs<Kind, Args> & WithoutReturns & {
152
+ readonly errors: Errors & ResolvedFunctionValue & FileFree<Errors["Type"], "errors">;
153
+ }): FunctionDefinition<Kind, Definition, Environment, Args, undefined, Errors, Errors["Type"]>;
154
+ <Errors extends ErrorSchema>(definition: FunctionInput<Kind, Definition, Environment, undefined, void, Errors["Type"]> & WithoutArgs & WithoutReturns & {
155
+ readonly errors: Errors & ResolvedFunctionValue & FileFree<Errors["Type"], "errors">;
156
+ }): FunctionDefinition<Kind, Definition, Environment, undefined, undefined, Errors, Errors["Type"]>;
157
+ <const Args extends Schema.Struct.Fields, Returns extends TransportSchema, HandlerType extends Handler<Kind, Definition, Environment, Args, Returns["Type"], ErrorValue> = Handler<Kind, Definition, Environment, Args, Returns["Type"], never>>(definition: WithArgs<Kind, Args> & WithReturns<Kind, Returns> & {
158
+ readonly errors?: never;
159
+ readonly handler: HandlerType;
160
+ }): FunctionDefinition<Kind, Definition, Environment, Args, Returns, undefined, HandlerFailure<HandlerType>>;
161
+ <Returns extends TransportSchema, HandlerType extends Handler<Kind, Definition, Environment, undefined, Returns["Type"], ErrorValue> = Handler<Kind, Definition, Environment, undefined, Returns["Type"], never>>(definition: WithoutArgs & WithReturns<Kind, Returns> & {
162
+ readonly errors?: never;
163
+ readonly handler: HandlerType;
164
+ }): FunctionDefinition<Kind, Definition, Environment, undefined, Returns, undefined, HandlerFailure<HandlerType>>;
165
+ <const Args extends Schema.Struct.Fields, HandlerType extends Handler<Kind, Definition, Environment, Args, void, ErrorValue> = Handler<Kind, Definition, Environment, Args, void, never>>(definition: WithArgs<Kind, Args> & WithoutReturns & {
166
+ readonly errors?: never;
167
+ readonly handler: HandlerType;
168
+ }): FunctionDefinition<Kind, Definition, Environment, Args, undefined, undefined, HandlerFailure<HandlerType>>;
169
+ <HandlerType extends Handler<Kind, Definition, Environment, undefined, void, ErrorValue> = Handler<Kind, Definition, Environment, undefined, void, never>>(definition: WithoutArgs & WithoutReturns & {
170
+ readonly errors?: never;
171
+ readonly handler: HandlerType;
172
+ }): FunctionDefinition<Kind, Definition, Environment, undefined, undefined, undefined, HandlerFailure<HandlerType>>;
173
+ }
174
+ interface FunctionBuilders<Definition extends Tables, Environment extends DefinedEnv = typeof emptyEnv> {
175
+ readonly query: DefineFunction<"Query", Definition, Environment>;
176
+ readonly mutation: DefineFunction<"Mutation", Definition, Environment>;
177
+ }
178
+ interface SchemaBindings<Definition extends Tables, Environment extends DefinedEnv = typeof emptyEnv> extends FunctionBuilders<Definition, Environment> {
179
+ readonly values: BoundValues<Definition>;
180
+ }
181
+ declare function bindSchema<const Definition extends Tables>(schema: DefinedSchema<Definition>): SchemaBindings<Definition, typeof emptyEnv>;
182
+ declare function bindSchema<const Definition extends Tables, const Environment extends DefinedEnv>(schema: DefinedSchema<Definition>, environment: Environment): SchemaBindings<Definition, Environment>;
183
+ //#endregion
184
+ export { defineSchema as i, SchemaAuthoring as n, bindSchema as r, DefinedSchema as t };
185
+ //# sourceMappingURL=index-DWU-7TIh.d.ts.map
@@ -1,16 +1,32 @@
1
1
  import { c as Result$1, d as TransportObject, f as TransportValue, i as ErrorValue, u as documentNotFound } from "../id-BzFHf3Wo-DGPCjgrf.js";
2
2
  import "../result-DKAA4gpS.js";
3
3
  import "../sync-Bs8J3fIr.js";
4
- import { c as IdContext, n as PaginationPage, t as PaginationOptions } from "../pagination-DnKg3dkI-r5ZUxBBx.js";
5
- import "../id-Dz0apuB3.js";
6
- import "../pagination-Dz0apuB3.js";
4
+ import { c as IdContext, n as PaginationPage, t as PaginationOptions } from "../pagination-CpYCaRYD-C2Rpp4Cw.js";
5
+ import "../id-E7JKqQ9r.js";
6
+ import "../pagination-E7JKqQ9r.js";
7
+ import { c as SchemaDefinitionTypeId } from "../types-C1iDP2Yf-BnkfBOQf.js";
7
8
  import { Effect, Schema } from "effect";
8
9
  //#region ../contracts/dist/runtime/functions.d.ts
9
10
  //#region src/runtime/functions.d.ts
10
11
  declare const FunctionKind: Schema.Literals<readonly ["Mutation", "Query"]>;
11
12
  type FunctionKind = typeof FunctionKind.Type;
12
13
  //#endregion
13
- //#region ../runtime/dist/guest-BN_3RI9b.d.ts
14
+ //#region ../contracts/dist/runtime/schema.d.ts
15
+ interface RuntimeTableDefinition {
16
+ readonly _tag: "Table";
17
+ readonly fields: Schema.Struct.Fields;
18
+ readonly indexes: Readonly<Record<string, {
19
+ readonly name: string;
20
+ readonly fields: readonly string[];
21
+ }>>;
22
+ readonly schema: Schema.Constraint;
23
+ }
24
+ interface RuntimeSchemaDefinition {
25
+ readonly _tag: "Schema";
26
+ readonly [SchemaDefinitionTypeId]: Readonly<Record<string, RuntimeTableDefinition>>;
27
+ }
28
+ //#endregion
29
+ //#region ../runtime/dist/guest-3UrnzCJE.d.ts
14
30
  //#region src/guest.d.ts
15
31
  interface GuestFunctionDefinition {
16
32
  readonly _tag: FunctionKind;
@@ -60,6 +76,8 @@ interface GuestMutationContext {
60
76
  readonly id: IdContext;
61
77
  }
62
78
  declare const invoke: (definition: GuestFunctionDefinition, encodedArgs: Schema.Json, call: GuestHostCall, rawEnvironment?: Readonly<Record<string, string>>) => Promise<string>;
79
+ /** Entry point for the isolated schema bundle. It has no host capabilities. */
80
+ declare const evolve: (schema: RuntimeSchemaDefinition, encodedRequest: string) => string;
63
81
  //#endregion
64
- export { invoke };
82
+ export { evolve, invoke };
65
83
  //# sourceMappingURL=host.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { C as TransportObjectTypeSchema, S as resultFromEffect, T as datePathsOfObject, V as runtimeFileOccurrencesOf, W as GeneratedId, g as ErrorValueSchema, s as User, u as makeIdContext, v as documentNotFound, w as datePathsOf } from "../id-Bt9XWRGL.js";
2
- import { o as PaginationCursor, s as PaginationPageSize } from "../descriptor-Cyo9FP9n-C0SRVXNW.js";
3
- import { c as getFunctionSchema, o as emptyEnv, r as decodeDefinedEnvironment, s as getFunctionEnvironment, t as SchemaDefinitionTypeId } from "../schema-1Zs03-iS.js";
2
+ import { d as PaginationPageSize, n as applyValueDefaults, o as evolveStoredFields, u as PaginationCursor } from "../descriptor-DCCz5AHd-_nhlnu8U.js";
3
+ import { c as getFunctionSchema, o as emptyEnv, r as decodeDefinedEnvironment, s as getFunctionEnvironment, t as SchemaDefinitionTypeId } from "../schema-DqogEydG.js";
4
4
  import { Effect, Predicate, Schema } from "effect";
5
5
  //#region ../contracts/dist/runtime/host.js
6
6
  const HostDocument = Schema.Struct({
@@ -141,7 +141,7 @@ const tableFor = (schema, table) => {
141
141
  const guestCodec = (schema) => schema;
142
142
  const encodeFields = (schema, table, fields) => {
143
143
  const definition = tableFor(schema, table);
144
- return Schema.decodeUnknownSync(Schema.JsonObject)(Schema.encodeUnknownSync(Schema.toCodecJson(guestCodec(definition.schema)), { onExcessProperty: "error" })(fields));
144
+ return Schema.decodeUnknownSync(Schema.JsonObject)(Schema.encodeUnknownSync(Schema.toCodecJson(guestCodec(definition.schema)), { onExcessProperty: "error" })(applyValueDefaults(definition.schema, fields)));
145
145
  };
146
146
  const encodePatchFields = (schema, table, fields) => {
147
147
  const definition = tableFor(schema, table);
@@ -415,7 +415,27 @@ const runGuest = Effect.fn("Guest.invoke")(function* (definition, encodedArgs, c
415
415
  }));
416
416
  });
417
417
  const invoke = (definition, encodedArgs, call, rawEnvironment = {}) => Effect.runPromise(runGuest(definition, encodedArgs, call, rawEnvironment)).then((result) => Schema.encodeSync(Schema.fromJsonString(Schema.Json))(result));
418
+ const EvolutionRequest = Schema.Struct({
419
+ table: Schema.String,
420
+ fields: Schema.JsonObject
421
+ });
422
+ /** Entry point for the isolated schema bundle. It has no host capabilities. */
423
+ const evolve = (schema, encodedRequest) => {
424
+ const request = Schema.decodeSync(Schema.fromJsonString(EvolutionRequest))(encodedRequest);
425
+ const definition = tableFor(schema, request.table);
426
+ try {
427
+ return JSON.stringify({
428
+ type: "Success",
429
+ value: { fields: evolveStoredFields(definition.schema, request.fields) }
430
+ });
431
+ } catch {
432
+ return JSON.stringify({
433
+ type: "Success",
434
+ value: { error: `Stored fields in '${request.table}' do not match the new schema or its conversion rules.` }
435
+ });
436
+ }
437
+ };
418
438
  //#endregion
419
- export { invoke };
439
+ export { evolve, invoke };
420
440
 
421
441
  //# sourceMappingURL=host.js.map