@palantir/pack.schema 0.7.0 → 0.8.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.
@@ -1,14 +1,14 @@
1
1
 
2
- > @palantir/pack.schema@0.7.0 lint /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.8.0 lint /home/runner/work/pack/pack/packages/schema
3
3
  > eslint ./src && dprint check --config $(find-up dprint.json) --allow-no-files
4
4
 
5
5
 
6
6
  /home/runner/work/pack/pack/packages/schema/src/defineMigration.ts
7
7
  60:39 warning keyof TOld is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
8
- 120:25 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
9
- 131:23 warning { [k in K]: Ref; } is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
10
- 147:23 warning Record<K, Ref> is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
11
- 218:25 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
8
+ 120:28 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
9
+ 132:23 warning { [k in K]: Ref; } is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
10
+ 148:23 warning Record<K, Ref> is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
11
+ 236:28 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
12
12
 
13
13
  ✖ 5 problems (0 errors, 5 warnings)
14
14
 
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.schema@0.7.0 transpileBrowser /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.8.0 transpileBrowser /home/runner/work/pack/pack/packages/schema
3
3
  > monorepo-transpile -f esm -m bundle -t browser
4
4
 
5
5
  👍
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.schema@0.7.0 transpileCjs /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.8.0 transpileCjs /home/runner/work/pack/pack/packages/schema
3
3
  > monorepo-transpile -f cjs -m bundle -t node
4
4
 
5
5
  👍
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.schema@0.7.0 transpileEsm /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.8.0 transpileEsm /home/runner/work/pack/pack/packages/schema
3
3
  > monorepo-transpile -f esm -m bundle -t node
4
4
 
5
5
  👍
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.schema@0.7.0 transpileTypes /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.8.0 transpileTypes /home/runner/work/pack/pack/packages/schema
3
3
  > monorepo-transpile -f esm -m types -t node
4
4
 
5
5
  👍
@@ -1,4 +1,4 @@
1
1
 
2
- > @palantir/pack.schema@0.7.0 typecheck /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.8.0 typecheck /home/runner/work/pack/pack/packages/schema
3
3
  > tsc --noEmit --emitDeclarationOnly false
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @palantir/pack.schema
2
2
 
3
+ ## 0.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1cc9a09: included versions for added fields and models and deprecations
8
+ - 98803f7: Add version-safe update methods to DocumentRef
9
+
3
10
  ## 0.7.0
4
11
 
5
12
  ### Minor Changes
@@ -158,16 +158,19 @@ var UnionBuilderImpl = class _UnionBuilderImpl {
158
158
  }
159
159
  };
160
160
  var UPGRADE_OPTIONS_CARRIER = "__pack_upgrade_options__";
161
+ var DEPRECATED_FIELDS_CARRIER = "__pack_deprecated_fields__";
161
162
  var RecordBuilderImpl = class _RecordBuilderImpl {
162
163
  name;
163
164
  fields;
164
165
  upgradeOptions;
165
- constructor(initialRecordDef, upgradeOptions) {
166
+ deprecatedFields;
167
+ constructor(initialRecordDef, upgradeOptions, deprecatedFields) {
166
168
  this.name = initialRecordDef.name;
167
169
  this.fields = {
168
170
  ...initialRecordDef.fields
169
171
  };
170
172
  this.upgradeOptions = new Map(upgradeOptions ?? []);
173
+ this.deprecatedFields = new Map(deprecatedFields ?? []);
171
174
  }
172
175
  // TODO: resolve field value from arg instead
173
176
  addField(name, value, options) {
@@ -186,21 +189,21 @@ var RecordBuilderImpl = class _RecordBuilderImpl {
186
189
  [name]: value
187
190
  },
188
191
  docs: ""
189
- }, next);
192
+ }, next, this.deprecatedFields);
190
193
  }
191
- removeField(name) {
192
- const {
193
- [name]: _removed,
194
- ...rest
195
- } = this.fields;
196
- const next = new Map(this.upgradeOptions);
197
- next.delete(name);
194
+ deprecateField(name, message) {
195
+ const next = new Map(this.deprecatedFields);
196
+ next.set(name, {
197
+ message
198
+ });
198
199
  return new _RecordBuilderImpl({
199
200
  type: ModelDefType.RECORD,
200
201
  name: this.name,
201
- fields: rest,
202
+ fields: {
203
+ ...this.fields
204
+ },
202
205
  docs: ""
203
- }, next);
206
+ }, this.upgradeOptions, next);
204
207
  }
205
208
  build() {
206
209
  const result = {
@@ -217,6 +220,14 @@ var RecordBuilderImpl = class _RecordBuilderImpl {
217
220
  writable: false
218
221
  });
219
222
  }
223
+ if (this.deprecatedFields.size > 0) {
224
+ Object.defineProperty(result, DEPRECATED_FIELDS_CARRIER, {
225
+ value: this.deprecatedFields,
226
+ enumerable: false,
227
+ configurable: true,
228
+ writable: false
229
+ });
230
+ }
220
231
  return result;
221
232
  }
222
233
  };
@@ -239,25 +250,39 @@ function applyMigration(models, migration) {
239
250
  ...migration(builders)
240
251
  };
241
252
  const upgrades = {};
253
+ const deprecations = {};
242
254
  for (const [modelKey, def] of Object.entries(merged)) {
243
255
  if (!isRecordDef(def)) continue;
244
256
  const carrier = def;
245
257
  const opts = carrier[UPGRADE_OPTIONS_CARRIER];
246
- if (opts == null) continue;
247
- delete carrier[UPGRADE_OPTIONS_CARRIER];
248
- const fieldEntries = {};
249
- for (const [fieldName, options] of opts) {
250
- if ("derivedFrom" in options) {
251
- fieldEntries[fieldName] = options;
258
+ if (opts != null) {
259
+ delete carrier[UPGRADE_OPTIONS_CARRIER];
260
+ const fieldEntries = {};
261
+ for (const [fieldName, options] of opts) {
262
+ if ("derivedFrom" in options) {
263
+ fieldEntries[fieldName] = options;
264
+ }
265
+ }
266
+ if (Object.keys(fieldEntries).length > 0) {
267
+ upgrades[modelKey] = fieldEntries;
252
268
  }
253
269
  }
254
- if (Object.keys(fieldEntries).length > 0) {
255
- upgrades[modelKey] = fieldEntries;
270
+ const deprecated = carrier[DEPRECATED_FIELDS_CARRIER];
271
+ if (deprecated != null) {
272
+ delete carrier[DEPRECATED_FIELDS_CARRIER];
273
+ const fieldEntries = {};
274
+ for (const [fieldName, info] of deprecated) {
275
+ fieldEntries[fieldName] = info;
276
+ }
277
+ if (Object.keys(fieldEntries).length > 0) {
278
+ deprecations[modelKey] = fieldEntries;
279
+ }
256
280
  }
257
281
  }
258
282
  return {
259
283
  models: merged,
260
- upgrades: Object.keys(upgrades).length > 0 ? upgrades : void 0
284
+ upgrades: Object.keys(upgrades).length > 0 ? upgrades : void 0,
285
+ deprecations: Object.keys(deprecations).length > 0 ? deprecations : void 0
261
286
  };
262
287
  }
263
288
  function defineMigration(models, migration) {
@@ -297,7 +322,7 @@ function defineSchemaUpdate(name, migration) {
297
322
  migration
298
323
  };
299
324
  }
300
- function mergeMigrations(base, override) {
325
+ function mergeByModelField(base, override) {
301
326
  if (base == null) return override;
302
327
  if (override == null) return base;
303
328
  const result = {
@@ -316,7 +341,7 @@ function pruneMigrations(migrations, models) {
316
341
  const result = {};
317
342
  for (const [modelKey, fields] of Object.entries(migrations)) {
318
343
  const def = models[modelKey];
319
- if (def == null || def.type !== "record") continue;
344
+ if (!isRecordDef(def)) continue;
320
345
  const recordFields = def.fields;
321
346
  const kept = {};
322
347
  for (const [fieldName, migration] of Object.entries(fields)) {
@@ -330,30 +355,50 @@ function pruneMigrations(migrations, models) {
330
355
  }
331
356
  return Object.keys(result).length > 0 ? result : void 0;
332
357
  }
358
+ function stampDeprecationVersions(deprecations, version) {
359
+ if (deprecations == null) return void 0;
360
+ const result = {};
361
+ for (const [modelKey, fields] of Object.entries(deprecations)) {
362
+ const out = {};
363
+ for (const [fieldName, info] of Object.entries(fields)) {
364
+ out[fieldName] = {
365
+ fromVersion: version,
366
+ ...info
367
+ };
368
+ }
369
+ result[modelKey] = out;
370
+ }
371
+ return result;
372
+ }
333
373
  var SchemaVersionBuilderImpl = class _SchemaVersionBuilderImpl {
334
374
  models;
335
375
  version;
336
376
  previous;
337
377
  _migrations;
338
- constructor(models, version, previous, migrations) {
378
+ _deprecations;
379
+ constructor(models, version, previous, migrations, deprecations) {
339
380
  this.models = models;
340
381
  this.version = version;
341
382
  this.previous = previous;
342
383
  this._migrations = migrations;
384
+ this._deprecations = deprecations;
343
385
  }
344
386
  addSchemaUpdate(update) {
345
387
  const {
346
388
  models,
347
- upgrades
389
+ upgrades,
390
+ deprecations
348
391
  } = applyMigration(this.models, update.migration);
349
- const merged = mergeMigrations(this._migrations, upgrades);
392
+ const merged = mergeByModelField(this._migrations, upgrades);
350
393
  const pruned = pruneMigrations(merged, models);
351
- return new _SchemaVersionBuilderImpl(models, this.version, this.previous, pruned);
394
+ const thisVersionDeprecations = stampDeprecationVersions(deprecations, this.version);
395
+ const mergedDeprecations = mergeByModelField(this._deprecations, thisVersionDeprecations);
396
+ return new _SchemaVersionBuilderImpl(models, this.version, this.previous, pruned, mergedDeprecations);
352
397
  }
353
398
  withMigrations(migrations) {
354
- const merged = mergeMigrations(this._migrations, migrations);
399
+ const merged = mergeByModelField(this._migrations, migrations);
355
400
  const pruned = pruneMigrations(merged, this.models);
356
- return new _SchemaVersionBuilderImpl(this.models, this.version, this.previous, pruned);
401
+ return new _SchemaVersionBuilderImpl(this.models, this.version, this.previous, pruned, this._deprecations);
357
402
  }
358
403
  build() {
359
404
  return {
@@ -365,12 +410,17 @@ var SchemaVersionBuilderImpl = class _SchemaVersionBuilderImpl {
365
410
  previous: this.previous,
366
411
  ...this._migrations != null ? {
367
412
  migrations: this._migrations
413
+ } : {},
414
+ ...this._deprecations != null ? {
415
+ deprecations: this._deprecations
368
416
  } : {}
369
417
  };
370
418
  }
371
419
  };
372
420
  function nextSchema(previous) {
373
- return new SchemaVersionBuilderImpl(previous.models, previous.version + 1, previous);
421
+ const version = previous.version + 1;
422
+ const deprecations = "deprecations" in previous ? previous.deprecations : void 0;
423
+ return new SchemaVersionBuilderImpl(previous.models, version, previous, void 0, deprecations);
374
424
  }
375
425
 
376
426
  export { Array2 as Array, Boolean, Double, ModelDefType, Optional, String, TypeKind, Unknown, applyMigration, createRef, defineMigration, defineRecord, defineSchema, defineSchemaUpdate, defineUnion, isRecordDef, isUnionDef, modelToRef, nextSchema, resolveUnionVariantArg };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/defs.ts","../../src/primitives.ts","../../src/utils.ts","../../src/defineUnion.ts","../../src/defineMigration.ts","../../src/defineRecord.ts","../../src/defineSchemaUpdate.ts"],"names":["Array"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const ModelDefType = {\n RECORD: \"record\",\n UNION: \"union\"\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TypeKind = {\n ARRAY: \"array\",\n BOOLEAN: \"boolean\",\n DOC_REF: \"docRef\",\n DOUBLE: \"double\",\n MEDIA_REF: \"mediaRef\",\n OBJECT_REF: \"objectRef\",\n OPTIONAL: \"optional\",\n REF: \"ref\",\n STRING: \"string\",\n UNKNOWN: \"unknown\",\n USER_REF: \"userRef\"\n};\n\n// Forward declaration to avoid circular reference\n\n// A reference to a record or a union type\n\nexport const String = {\n type: TypeKind.STRING\n};\nexport const Double = {\n type: TypeKind.DOUBLE\n};\nexport const Boolean = {\n type: TypeKind.BOOLEAN\n};\nexport const Unknown = {\n type: TypeKind.UNKNOWN\n};\nfunction unwrapOneOptional(t) {\n return t.type === TypeKind.OPTIONAL && \"item\" in t ? t.item : t;\n}\nexport const Array = item => {\n if (unwrapOneOptional(item).type === TypeKind.ARRAY) {\n throw new Error(\"Nested arrays (Array(Array(...)) or Array(Optional(Array(...)))) are not supported. \" + \"Wrap the inner array in a record instead.\");\n }\n return {\n type: TypeKind.ARRAY,\n items: item\n };\n};\nexport const Optional = item => {\n if (item.type === TypeKind.OPTIONAL) {\n throw new Error(\"Nested optionals (Optional(Optional(...))) are not supported.\");\n }\n return {\n type: TypeKind.OPTIONAL,\n item\n };\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\n\n/**\n * Helper function to safely transform a record definition to a reference.\n * This function helps TypeScript track type transformations better.\n */\nexport function modelToRef(model) {\n return createRef(model.name, model.type);\n}\n\n/**\n * Helper function to create a reference with proper typing.\n * This avoids type assertions in multiple places.\n */\nexport function createRef(name, refType) {\n return {\n type: TypeKind.REF,\n name,\n refType\n };\n}\n\n/**\n * Type guard to check if a value is a RecordDef\n */\nexport function isRecordDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.RECORD && \"fields\" in value;\n}\n\n/**\n * Type guard to check if a value is a UnionDef\n */\nexport function isUnionDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.UNION && \"variants\" in value;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\nimport { modelToRef } from \"./utils.js\";\nexport function defineUnion(name, {\n discriminant = \"type\",\n docs,\n variants\n}) {\n const entries = Object.entries(variants).map(([key, value]) => [key, resolveUnionVariantArg(value)]);\n const resolvedVariants = Object.fromEntries(entries);\n return {\n type: ModelDefType.UNION,\n discriminant,\n name,\n docs,\n variants: resolvedVariants\n };\n}\nexport function resolveUnionVariantArg(arg) {\n const resolved = typeof arg === \"function\" ? arg() : arg;\n return resolved.type === TypeKind.REF ? resolved : modelToRef(resolved);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveUnionVariantArg } from \"./defineUnion.js\";\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef } from \"./utils.js\";\n\n/** Soon to be deprecated - Use `ModelDefs` instead. */\n\n/** Soon to be deprecated - use `ModelDefs` instead. */\n\n/**\n * Recursive literal-JSON type. Constrains schema-time `default` values to\n * data that JSON-serializes losslessly — no `Date`, `RegExp`, functions, class\n * instances, or `undefined`. Mirrors the `JsonValue` exported by\n * `@palantir/pack.document-schema.model-types`; kept local here to avoid a\n * package dependency from `pack.schema`.\n */\n\n/**\n * Upgrade options for a field whose value is derived from prior-version fields.\n * Supplied as the third argument to `addField`; surfaced by `applyMigration`\n * as part of `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) and an optional literal JSON `default` used when no source\n * data exists. The runtime forward function is supplied separately via the\n * generated `DocumentModel(...)` factory's `UpgradeFns` parameter.\n */\n\n/**\n * Options for a purely additive field. `default` is literal JSON only;\n * validated at `addField()` call time.\n */\n\n/**\n * Recursively assert `value` is representable as literal JSON. Rejects `Date`,\n * `RegExp`, functions, class instances, symbol-keyed properties, `undefined`\n * (anywhere — top-level or nested), `symbol`, and `bigint`. Throws on the\n * first offending value, naming the path for debuggability.\n */\nfunction assertJsonDefault(value, path) {\n // eslint-disable-next-line eqeqeq -- need to distinguish null (valid JSON) from undefined (not).\n if (value === null) return;\n const t = typeof value;\n if (t === \"undefined\") {\n throw new Error(`Invalid JSON default at ${path}: undefined is not valid JSON`);\n }\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return;\n if (t === \"function\" || t === \"symbol\" || t === \"bigint\") {\n throw new Error(`Invalid JSON default at ${path}: ${t} is not valid JSON`);\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n assertJsonDefault(value[i], `${path}[${i}]`);\n }\n return;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto != null) {\n const ctorName = value.constructor?.name ?? \"non-plain object\";\n throw new Error(`Invalid JSON default at ${path}: ${ctorName} is not valid JSON`);\n }\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new Error(`Invalid JSON default at ${path}: symbol-keyed properties are not valid JSON`);\n }\n for (const [k, v] of Object.entries(value)) {\n assertJsonDefault(v, `${path}.${k}`);\n }\n}\nclass UnionBuilderImpl {\n name;\n docs;\n variants;\n constructor({\n name,\n docs,\n variants\n }) {\n this.name = name;\n this.docs = docs;\n this.variants = {\n ...variants\n };\n }\n addVariant(variantName, modelDefOrRef) {\n const ref = resolveUnionVariantArg(modelDefOrRef);\n const newVariants = {\n ...this.variants,\n [variantName]: ref\n };\n return new UnionBuilderImpl({\n type: ModelDefType.UNION,\n name: this.name,\n variants: newVariants,\n discriminant: \"type\"\n });\n }\n build() {\n return {\n type: ModelDefType.UNION,\n variants: this.variants,\n discriminant: \"type\",\n name: this.name\n };\n }\n}\n\n/**\n * Non-enumerable carrier property attached to a `RecordDef` by\n * `RecordBuilderImpl.build()` when the builder has collected one or more\n * `FieldOptions`. `applyMigration` reads this and then deletes the property,\n * so the `RecordDef` it returns is structurally clean (no extra keys, no\n * symbol-keyed metadata).\n */\nconst UPGRADE_OPTIONS_CARRIER = \"__pack_upgrade_options__\";\nclass RecordBuilderImpl {\n name;\n fields;\n upgradeOptions;\n constructor(initialRecordDef, upgradeOptions) {\n this.name = initialRecordDef.name;\n this.fields = {\n ...initialRecordDef.fields\n };\n // Upgrade options only flow forward within a single migration callback —\n // they are NOT inherited from the prior version's RecordDef, because each\n // version's upgrades describe a specific version transition.\n this.upgradeOptions = new Map(upgradeOptions ?? []);\n }\n\n // TODO: resolve field value from arg instead\n addField(name, value, options) {\n if (options != null && \"default\" in options && options.default !== undefined) {\n assertJsonDefault(options.default, `addField(\"${name}\").default`);\n }\n const next = new Map(this.upgradeOptions);\n if (options != null) {\n next.set(name, options);\n }\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: {\n ...this.fields,\n [name]: value\n },\n docs: \"\"\n }, next);\n }\n removeField(name) {\n const {\n [name]: _removed,\n ...rest\n } = this.fields;\n const next = new Map(this.upgradeOptions);\n next.delete(name);\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: rest,\n docs: \"\"\n }, next);\n }\n build() {\n const result = {\n type: ModelDefType.RECORD,\n name: this.name,\n fields: this.fields,\n docs: \"\"\n };\n if (this.upgradeOptions.size > 0) {\n Object.defineProperty(result, UPGRADE_OPTIONS_CARRIER, {\n value: this.upgradeOptions,\n enumerable: false,\n configurable: true,\n writable: false\n });\n }\n return result;\n }\n}\nfunction makeBuilders(models) {\n const builders = {};\n for (const key in models) {\n const v = models[key];\n if (isRecordDef(v)) {\n builders[key] = new RecordBuilderImpl(v);\n } else if (isUnionDef(v)) {\n builders[key] = new UnionBuilderImpl(v);\n }\n }\n return builders;\n}\n\n/** Per-model field migrations: `[modelKey][fieldName]` → upgrade options. */\n\n/**\n * Lower-level entry point that returns both the merged models AND any\n * `UpgradeFieldOptions` collected via `addField(name, type, options)` during\n * the migration callback. Used by `addSchemaUpdate` to fold sugar-form\n * upgrades into a `VersionedSchema`'s migrations map.\n *\n * Each `RecordBuilderImpl.build()` attaches its collected options to the\n * produced `RecordDef` via a non-enumerable carrier property; this function\n * walks the merged result, extracts the options keyed by the user's chosen\n * output key (so renames are handled), and strips the carrier so the returned\n * `RecordDef`s are structurally clean.\n */\nexport function applyMigration(models, migration) {\n const builders = makeBuilders(models);\n const merged = {\n ...models,\n ...migration(builders)\n };\n const upgrades = {};\n for (const [modelKey, def] of Object.entries(merged)) {\n if (!isRecordDef(def)) continue;\n const carrier = def;\n const opts = carrier[UPGRADE_OPTIONS_CARRIER];\n if (opts == null) continue;\n // Strip the carrier so the returned RecordDef is structurally clean.\n delete carrier[UPGRADE_OPTIONS_CARRIER];\n const fieldEntries = {};\n for (const [fieldName, options] of opts) {\n // Only `UpgradeFieldOptions` (which declare `derivedFrom`) flow into the\n // upgrades map; `AdditiveFieldOptions` carry only a literal `default`\n // and have no read-time lens effect.\n if (\"derivedFrom\" in options) {\n fieldEntries[fieldName] = options;\n }\n }\n if (Object.keys(fieldEntries).length > 0) {\n upgrades[modelKey] = fieldEntries;\n }\n }\n return {\n models: merged,\n upgrades: Object.keys(upgrades).length > 0 ? upgrades : undefined\n };\n}\nexport function defineMigration(models, migration) {\n return applyMigration(models, migration).models;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef, modelToRef } from \"./utils.js\";\n/**\n * Helper function to resolve a field value, handling functions and transforming\n * types as needed.\n */\nfunction resolveFieldArg(value) {\n // Handle function values\n const resolved = typeof value === \"function\" ? value() : value;\n if (isRecordDef(resolved) || isUnionDef(resolved)) {\n return modelToRef(resolved);\n }\n\n // For primitive types and other Types\n return resolved;\n}\nexport function defineRecord(name, record) {\n const entries = Object.entries(record.fields).map(([key, value]) => [key, resolveFieldArg(value)]);\n const fields = Object.fromEntries(entries);\n return {\n type: ModelDefType.RECORD,\n name: name,\n docs: record.docs,\n fields\n };\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { applyMigration } from \"./defineMigration.js\";\nexport function defineSchema(models) {\n return {\n type: \"initial\",\n version: 1,\n models\n };\n}\nexport function defineSchemaUpdate(name, migration) {\n return {\n name,\n migration\n };\n}\n/**\n * Merge two `VersionMigrations` records. Per-model field migrations from\n * `override` take precedence over `base` for the same field, but the maps are\n * combined at both the model and field level so explicit `withMigrations`\n * calls can supplement (not just replace) the sugar from `addField` options.\n */\nfunction mergeMigrations(base, override) {\n if (base == null) return override;\n if (override == null) return base;\n const result = {\n ...base\n };\n for (const [modelKey, fields] of Object.entries(override)) {\n result[modelKey] = {\n ...result[modelKey],\n ...fields\n };\n }\n return result;\n}\n\n/**\n * Drop migration entries that no longer correspond to a field on a record in\n * `models`. Required because `mergeMigrations` is monotonic — a later\n * `addSchemaUpdate` that removes or retypes a field would otherwise leave a\n * stale entry in the accumulator. Entries are dropped when:\n * - the model key is no longer present,\n * - the model is no longer a record (e.g. replaced by a union), or\n * - the field name is no longer one of the record's fields.\n */\nfunction pruneMigrations(migrations, models) {\n if (migrations == null) return undefined;\n const result = {};\n for (const [modelKey, fields] of Object.entries(migrations)) {\n const def = models[modelKey];\n if (def == null || def.type !== \"record\") continue;\n const recordFields = def.fields;\n const kept = {};\n for (const [fieldName, migration] of Object.entries(fields)) {\n if (fieldName in recordFields) {\n kept[fieldName] = migration;\n }\n }\n if (Object.keys(kept).length > 0) {\n result[modelKey] = kept;\n }\n }\n return Object.keys(result).length > 0 ? result : undefined;\n}\nclass SchemaVersionBuilderImpl {\n models;\n version;\n previous;\n _migrations;\n constructor(models, version, previous, migrations) {\n this.models = models;\n this.version = version;\n this.previous = previous;\n this._migrations = migrations;\n }\n addSchemaUpdate(update) {\n // applyMigration returns both the merged models and any sugar-form\n // upgrades collected via `addField(name, type, { derivedFrom, forward })`.\n const {\n models,\n upgrades\n } = applyMigration(this.models, update.migration);\n const merged = mergeMigrations(this._migrations, upgrades);\n // Reconcile against the new models: a later update that removes or\n // retypes a field must drop the prior step's stale migration entry.\n const pruned = pruneMigrations(merged, models);\n return new SchemaVersionBuilderImpl(models, this.version, this.previous, pruned);\n }\n withMigrations(migrations) {\n const merged = mergeMigrations(this._migrations, migrations);\n const pruned = pruneMigrations(merged, this.models);\n return new SchemaVersionBuilderImpl(this.models, this.version, this.previous, pruned);\n }\n build() {\n return {\n type: \"versioned\",\n models: {\n ...this.models\n },\n version: this.version,\n previous: this.previous,\n ...(this._migrations != null ? {\n migrations: this._migrations\n } : {})\n };\n }\n}\nexport function nextSchema(previous) {\n return new SchemaVersionBuilderImpl(previous.models, previous.version + 1, previous);\n}"]}
1
+ {"version":3,"sources":["../../src/defs.ts","../../src/primitives.ts","../../src/utils.ts","../../src/defineUnion.ts","../../src/defineMigration.ts","../../src/defineRecord.ts","../../src/defineSchemaUpdate.ts"],"names":["Array"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const ModelDefType = {\n RECORD: \"record\",\n UNION: \"union\"\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TypeKind = {\n ARRAY: \"array\",\n BOOLEAN: \"boolean\",\n DOC_REF: \"docRef\",\n DOUBLE: \"double\",\n MEDIA_REF: \"mediaRef\",\n OBJECT_REF: \"objectRef\",\n OPTIONAL: \"optional\",\n REF: \"ref\",\n STRING: \"string\",\n UNKNOWN: \"unknown\",\n USER_REF: \"userRef\"\n};\n\n// Forward declaration to avoid circular reference\n\n// A reference to a record or a union type\n\nexport const String = {\n type: TypeKind.STRING\n};\nexport const Double = {\n type: TypeKind.DOUBLE\n};\nexport const Boolean = {\n type: TypeKind.BOOLEAN\n};\nexport const Unknown = {\n type: TypeKind.UNKNOWN\n};\nfunction unwrapOneOptional(t) {\n return t.type === TypeKind.OPTIONAL && \"item\" in t ? t.item : t;\n}\nexport const Array = item => {\n if (unwrapOneOptional(item).type === TypeKind.ARRAY) {\n throw new Error(\"Nested arrays (Array(Array(...)) or Array(Optional(Array(...)))) are not supported. \" + \"Wrap the inner array in a record instead.\");\n }\n return {\n type: TypeKind.ARRAY,\n items: item\n };\n};\nexport const Optional = item => {\n if (item.type === TypeKind.OPTIONAL) {\n throw new Error(\"Nested optionals (Optional(Optional(...))) are not supported.\");\n }\n return {\n type: TypeKind.OPTIONAL,\n item\n };\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\n\n/**\n * Helper function to safely transform a record definition to a reference.\n * This function helps TypeScript track type transformations better.\n */\nexport function modelToRef(model) {\n return createRef(model.name, model.type);\n}\n\n/**\n * Helper function to create a reference with proper typing.\n * This avoids type assertions in multiple places.\n */\nexport function createRef(name, refType) {\n return {\n type: TypeKind.REF,\n name,\n refType\n };\n}\n\n/**\n * Type guard to check if a value is a RecordDef\n */\nexport function isRecordDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.RECORD && \"fields\" in value;\n}\n\n/**\n * Type guard to check if a value is a UnionDef\n */\nexport function isUnionDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.UNION && \"variants\" in value;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\nimport { modelToRef } from \"./utils.js\";\nexport function defineUnion(name, {\n discriminant = \"type\",\n docs,\n variants\n}) {\n const entries = Object.entries(variants).map(([key, value]) => [key, resolveUnionVariantArg(value)]);\n const resolvedVariants = Object.fromEntries(entries);\n return {\n type: ModelDefType.UNION,\n discriminant,\n name,\n docs,\n variants: resolvedVariants\n };\n}\nexport function resolveUnionVariantArg(arg) {\n const resolved = typeof arg === \"function\" ? arg() : arg;\n return resolved.type === TypeKind.REF ? resolved : modelToRef(resolved);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveUnionVariantArg } from \"./defineUnion.js\";\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef } from \"./utils.js\";\n\n/** Soon to be deprecated - Use `ModelDefs` instead. */\n\n/** Soon to be deprecated - use `ModelDefs` instead. */\n\n/**\n * Recursive literal-JSON type. Constrains schema-time `default` values to\n * data that JSON-serializes losslessly — no `Date`, `RegExp`, functions, class\n * instances, or `undefined`. Mirrors the `JsonValue` exported by\n * `@palantir/pack.document-schema.model-types`; kept local here to avoid a\n * package dependency from `pack.schema`.\n */\n\n/**\n * Upgrade options for a field whose value is derived from prior-version fields.\n * Supplied as the third argument to `addField`; surfaced by `applyMigration`\n * as part of `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) and an optional literal JSON `default` used when no source\n * data exists. The runtime forward function is supplied separately via the\n * generated `DocumentModel(...)` factory's `UpgradeFns` parameter.\n */\n\n/**\n * Options for a purely additive field. `default` is literal JSON only;\n * validated at `addField()` call time.\n */\n\n/**\n * Recursively assert `value` is representable as literal JSON. Rejects `Date`,\n * `RegExp`, functions, class instances, symbol-keyed properties, `undefined`\n * (anywhere — top-level or nested), `symbol`, and `bigint`. Throws on the\n * first offending value, naming the path for debuggability.\n */\nfunction assertJsonDefault(value, path) {\n // eslint-disable-next-line eqeqeq -- need to distinguish null (valid JSON) from undefined (not).\n if (value === null) return;\n const t = typeof value;\n if (t === \"undefined\") {\n throw new Error(`Invalid JSON default at ${path}: undefined is not valid JSON`);\n }\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return;\n if (t === \"function\" || t === \"symbol\" || t === \"bigint\") {\n throw new Error(`Invalid JSON default at ${path}: ${t} is not valid JSON`);\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n assertJsonDefault(value[i], `${path}[${i}]`);\n }\n return;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto != null) {\n const ctorName = value.constructor?.name ?? \"non-plain object\";\n throw new Error(`Invalid JSON default at ${path}: ${ctorName} is not valid JSON`);\n }\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new Error(`Invalid JSON default at ${path}: symbol-keyed properties are not valid JSON`);\n }\n for (const [k, v] of Object.entries(value)) {\n assertJsonDefault(v, `${path}.${k}`);\n }\n}\nclass UnionBuilderImpl {\n name;\n docs;\n variants;\n constructor({\n name,\n docs,\n variants\n }) {\n this.name = name;\n this.docs = docs;\n this.variants = {\n ...variants\n };\n }\n addVariant(variantName, modelDefOrRef) {\n const ref = resolveUnionVariantArg(modelDefOrRef);\n const newVariants = {\n ...this.variants,\n [variantName]: ref\n };\n return new UnionBuilderImpl({\n type: ModelDefType.UNION,\n name: this.name,\n variants: newVariants,\n discriminant: \"type\"\n });\n }\n build() {\n return {\n type: ModelDefType.UNION,\n variants: this.variants,\n discriminant: \"type\",\n name: this.name\n };\n }\n}\n\n/**\n * Non-enumerable carrier property attached to a `RecordDef` by\n * `RecordBuilderImpl.build()` when the builder has collected one or more\n * `FieldOptions`. `applyMigration` reads this and then deletes the property,\n * so the `RecordDef` it returns is structurally clean (no extra keys, no\n * symbol-keyed metadata).\n */\nconst UPGRADE_OPTIONS_CARRIER = \"__pack_upgrade_options__\";\n\n/**\n * Non-enumerable carrier property attached to a `RecordDef` by\n * `RecordBuilderImpl.build()` when the builder has collected one or more\n * `deprecateField` calls. `applyMigration` reads this and then deletes the\n * property, so the returned `RecordDef` is structurally clean. Maps field name\n * → its deprecation info.\n */\nconst DEPRECATED_FIELDS_CARRIER = \"__pack_deprecated_fields__\";\nclass RecordBuilderImpl {\n name;\n fields;\n upgradeOptions;\n deprecatedFields;\n constructor(initialRecordDef, upgradeOptions, deprecatedFields) {\n this.name = initialRecordDef.name;\n this.fields = {\n ...initialRecordDef.fields\n };\n // Upgrade options only flow forward within a single migration callback —\n // they are NOT inherited from the prior version's RecordDef, because each\n // version's upgrades describe a specific version transition.\n this.upgradeOptions = new Map(upgradeOptions ?? []);\n this.deprecatedFields = new Map(deprecatedFields ?? []);\n }\n\n // TODO: resolve field value from arg instead\n addField(name, value, options) {\n if (options != null && \"default\" in options && options.default !== undefined) {\n assertJsonDefault(options.default, `addField(\"${name}\").default`);\n }\n const next = new Map(this.upgradeOptions);\n if (options != null) {\n next.set(name, options);\n }\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: {\n ...this.fields,\n [name]: value\n },\n docs: \"\"\n }, next, this.deprecatedFields);\n }\n deprecateField(name, message) {\n const next = new Map(this.deprecatedFields);\n next.set(name, {\n message\n });\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: {\n ...this.fields\n },\n docs: \"\"\n }, this.upgradeOptions, next);\n }\n build() {\n const result = {\n type: ModelDefType.RECORD,\n name: this.name,\n fields: this.fields,\n docs: \"\"\n };\n if (this.upgradeOptions.size > 0) {\n Object.defineProperty(result, UPGRADE_OPTIONS_CARRIER, {\n value: this.upgradeOptions,\n enumerable: false,\n configurable: true,\n writable: false\n });\n }\n if (this.deprecatedFields.size > 0) {\n Object.defineProperty(result, DEPRECATED_FIELDS_CARRIER, {\n value: this.deprecatedFields,\n enumerable: false,\n configurable: true,\n writable: false\n });\n }\n return result;\n }\n}\nfunction makeBuilders(models) {\n const builders = {};\n for (const key in models) {\n const v = models[key];\n if (isRecordDef(v)) {\n builders[key] = new RecordBuilderImpl(v);\n } else if (isUnionDef(v)) {\n builders[key] = new UnionBuilderImpl(v);\n }\n }\n return builders;\n}\n\n/** Per-model field migrations: `[modelKey][fieldName]` → upgrade options. */\n\n/**\n * Lower-level entry point that returns the merged models plus the per-field\n * metadata collected during the migration callback: `UpgradeFieldOptions` from\n * `addField(name, type, options)` and deprecations from `deprecateField(name)`.\n * Used by `addSchemaUpdate` to fold sugar-form upgrades into a\n * `VersionedSchema`'s migrations map and deprecations into its deprecations map.\n *\n * Each `RecordBuilderImpl.build()` attaches its collected upgrade options and\n * deprecations to the produced `RecordDef` via two non-enumerable carrier\n * properties; this function walks the merged result, extracts both keyed by the\n * user's chosen output key (so renames are handled), and strips the carriers so\n * the returned `RecordDef`s are structurally clean.\n */\nexport function applyMigration(models, migration) {\n const builders = makeBuilders(models);\n const merged = {\n ...models,\n ...migration(builders)\n };\n const upgrades = {};\n const deprecations = {};\n for (const [modelKey, def] of Object.entries(merged)) {\n if (!isRecordDef(def)) continue;\n const carrier = def;\n const opts = carrier[UPGRADE_OPTIONS_CARRIER];\n if (opts != null) {\n // Strip the carrier so the returned RecordDef is structurally clean.\n delete carrier[UPGRADE_OPTIONS_CARRIER];\n const fieldEntries = {};\n for (const [fieldName, options] of opts) {\n // Only `UpgradeFieldOptions` (which declare `derivedFrom`) flow into the\n // upgrades map; `AdditiveFieldOptions` carry only a literal `default`\n // and have no read-time lens effect.\n if (\"derivedFrom\" in options) {\n fieldEntries[fieldName] = options;\n }\n }\n if (Object.keys(fieldEntries).length > 0) {\n upgrades[modelKey] = fieldEntries;\n }\n }\n const deprecated = carrier[DEPRECATED_FIELDS_CARRIER];\n if (deprecated != null) {\n // Strip the carrier so the returned RecordDef is structurally clean.\n delete carrier[DEPRECATED_FIELDS_CARRIER];\n const fieldEntries = {};\n for (const [fieldName, info] of deprecated) {\n fieldEntries[fieldName] = info;\n }\n if (Object.keys(fieldEntries).length > 0) {\n deprecations[modelKey] = fieldEntries;\n }\n }\n }\n return {\n models: merged,\n upgrades: Object.keys(upgrades).length > 0 ? upgrades : undefined,\n deprecations: Object.keys(deprecations).length > 0 ? deprecations : undefined\n };\n}\nexport function defineMigration(models, migration) {\n return applyMigration(models, migration).models;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef, modelToRef } from \"./utils.js\";\n/**\n * Helper function to resolve a field value, handling functions and transforming\n * types as needed.\n */\nfunction resolveFieldArg(value) {\n // Handle function values\n const resolved = typeof value === \"function\" ? value() : value;\n if (isRecordDef(resolved) || isUnionDef(resolved)) {\n return modelToRef(resolved);\n }\n\n // For primitive types and other Types\n return resolved;\n}\nexport function defineRecord(name, record) {\n const entries = Object.entries(record.fields).map(([key, value]) => [key, resolveFieldArg(value)]);\n const fields = Object.fromEntries(entries);\n return {\n type: ModelDefType.RECORD,\n name: name,\n docs: record.docs,\n fields\n };\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { applyMigration } from \"./defineMigration.js\";\nimport { isRecordDef } from \"./utils.js\";\nexport function defineSchema(models) {\n return {\n type: \"initial\",\n version: 1,\n models\n };\n}\nexport function defineSchemaUpdate(name, migration) {\n return {\n name,\n migration\n };\n}\n/**\n * Shallow-merge two `[modelKey][fieldName]` maps; `override` wins per field.\n * Used for both migrations (so `withMigrations` supplements `addField` sugar)\n * and deprecations (so each version's deprecations accumulate forward). The\n * maps are combined at both the model and field level.\n */\nfunction mergeByModelField(base, override) {\n if (base == null) return override;\n if (override == null) return base;\n const result = {\n ...base\n };\n for (const [modelKey, fields] of Object.entries(override)) {\n result[modelKey] = {\n ...result[modelKey],\n ...fields\n };\n }\n return result;\n}\n\n/**\n * Drop migration entries that no longer correspond to a field on a record in\n * `models`. Required because `mergeByModelField` is monotonic — a later\n * `addSchemaUpdate` that removes or retypes a field would otherwise leave a\n * stale entry in the accumulator. Entries are dropped when:\n * - the model key is no longer present,\n * - the model is no longer a record (e.g. replaced by a union), or\n * - the field name is no longer one of the record's fields.\n */\nfunction pruneMigrations(migrations, models) {\n if (migrations == null) return undefined;\n const result = {};\n for (const [modelKey, fields] of Object.entries(migrations)) {\n const def = models[modelKey];\n if (!isRecordDef(def)) continue;\n const recordFields = def.fields;\n const kept = {};\n for (const [fieldName, migration] of Object.entries(fields)) {\n if (fieldName in recordFields) {\n kept[fieldName] = migration;\n }\n }\n if (Object.keys(kept).length > 0) {\n result[modelKey] = kept;\n }\n }\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Convert the version-agnostic `FieldDeprecations` collected by `applyMigration`\n * (just `{ message? }`) into `VersionDeprecations` by stamping `fromVersion`.\n */\nfunction stampDeprecationVersions(deprecations, version) {\n if (deprecations == null) return undefined;\n const result = {};\n for (const [modelKey, fields] of Object.entries(deprecations)) {\n const out = {};\n for (const [fieldName, info] of Object.entries(fields)) {\n out[fieldName] = {\n fromVersion: version,\n ...info\n };\n }\n result[modelKey] = out;\n }\n return result;\n}\nclass SchemaVersionBuilderImpl {\n models;\n version;\n previous;\n _migrations;\n _deprecations;\n constructor(models, version, previous, migrations, deprecations) {\n this.models = models;\n this.version = version;\n this.previous = previous;\n this._migrations = migrations;\n this._deprecations = deprecations;\n }\n addSchemaUpdate(update) {\n // applyMigration returns the merged models, any sugar-form upgrades from\n // `addField(name, type, { derivedFrom })`, and any `deprecateField` calls.\n const {\n models,\n upgrades,\n deprecations\n } = applyMigration(this.models, update.migration);\n const merged = mergeByModelField(this._migrations, upgrades);\n // Reconcile against the new models: a later update that retypes a field\n // must drop the prior step's stale migration entry.\n const pruned = pruneMigrations(merged, models);\n // Attach this version to each freshly-deprecated field, then merge forward.\n const thisVersionDeprecations = stampDeprecationVersions(deprecations, this.version);\n const mergedDeprecations = mergeByModelField(this._deprecations, thisVersionDeprecations);\n return new SchemaVersionBuilderImpl(models, this.version, this.previous, pruned, mergedDeprecations);\n }\n withMigrations(migrations) {\n const merged = mergeByModelField(this._migrations, migrations);\n const pruned = pruneMigrations(merged, this.models);\n return new SchemaVersionBuilderImpl(this.models, this.version, this.previous, pruned, this._deprecations);\n }\n build() {\n return {\n type: \"versioned\",\n models: {\n ...this.models\n },\n version: this.version,\n previous: this.previous,\n ...(this._migrations != null ? {\n migrations: this._migrations\n } : {}),\n ...(this._deprecations != null ? {\n deprecations: this._deprecations\n } : {})\n };\n }\n}\nexport function nextSchema(previous) {\n const version = previous.version + 1;\n const deprecations = \"deprecations\" in previous ? previous.deprecations : undefined;\n return new SchemaVersionBuilderImpl(previous.models, version, previous, undefined, deprecations);\n}"]}