@palantir/pack.schema 0.27.0 → 0.29.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,38 @@
1
1
 
2
- > @palantir/pack.schema@0.27.0 lint /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.29.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
+ /home/runner/work/pack/pack/packages/schema/src/__tests__/addFieldOptions.test.ts
7
+ 274:20 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
8
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
9
+
10
+ /home/runner/work/pack/pack/packages/schema/src/__tests__/defineMigration.test.ts
11
+ 35:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
12
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
13
+ 60:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
14
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
15
+ 104:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
16
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
17
+ 147:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
18
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
19
+ 184:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
20
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
21
+ 223:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
22
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
23
+ 256:22 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
24
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
25
+
26
+ /home/runner/work/pack/pack/packages/schema/src/__tests__/integration.test.ts
27
+ 106:24 warning `defineMigration` is deprecated. Use the {@link nextSchema }/{@link defineSchemaUpdate } chain to
28
+ build versioned schemas. This function will be removed in a future version @typescript-eslint/no-deprecated
29
+
6
30
  /home/runner/work/pack/pack/packages/schema/src/defineMigration.ts
7
- 46:39 warning keyof TOld is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
8
- 58:28 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
9
- 70:23 warning { [k in K]: Ref; } is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
10
- 86:23 warning Record<K, Ref> is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
11
- 171:28 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
31
+ 56:39 warning keyof TOld is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
32
+ 75:28 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
33
+ 90:23 warning { [k in K]: Ref; } is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
34
+ 107:23 warning Record<K, Ref> is overridden by S in this intersection type @typescript-eslint/no-redundant-type-constituents
35
+ 192:28 warning keyof T is overridden by string in this intersection type @typescript-eslint/no-redundant-type-constituents
12
36
 
13
- ✖ 5 problems (0 errors, 5 warnings)
37
+ ✖ 14 problems (0 errors, 14 warnings)
14
38
 
@@ -1,5 +1,5 @@
1
1
 
2
- > @palantir/pack.schema@0.27.0 transpileBrowser /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.29.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.27.0 transpileCjs /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.29.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.27.0 transpileEsm /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.29.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.27.0 transpileTypes /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.29.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.27.0 typecheck /home/runner/work/pack/pack/packages/schema
2
+ > @palantir/pack.schema@0.29.0 typecheck /home/runner/work/pack/pack/packages/schema
3
3
  > tsc --noEmit --emitDeclarationOnly false
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @palantir/pack.schema
2
2
 
3
+ ## 0.29.0
4
+
5
+ ## 0.28.0
6
+
3
7
  ## 0.27.0
4
8
 
5
9
  ## 0.26.0
package/README.md CHANGED
@@ -1,87 +1,24 @@
1
1
  # @palantir/pack.schema
2
2
 
3
- Programmatic API for defining schemas using TypeScript builders, providing type-safe schema definition with records, unions, and migrations.
3
+ TypeScript builders for defining **versioned document schemas** for PACK. You author a schema as a chain of versions; the SDK generator turns it into typed, per-version read and write APIs for your application.
4
4
 
5
- ## Overview
5
+ ## Records and unions
6
6
 
7
- This package provides builder functions and types for defining document schemas programmatically in TypeScript. It offers an alternative to YAML-based schema definitions, allowing for type-safe schema construction with full IDE support.
7
+ - {@link defineRecord} — a named set of typed fields.
8
+ - {@link defineUnion} — a discriminated choice between record variants.
8
9
 
9
- ## Key Exports
10
+ Field types come from the primitives on the namespace — {@link String}, {@link Double}, {@link Boolean}, {@link Optional}, {@link Array} — or a reference to another record or union. Reference a model by passing it directly, or as `() => Model` for forward and circular references.
10
11
 
11
- ### Schema Definition Functions
12
+ ## Versions
12
13
 
13
- - `defineRecord(name, config)` - Define record types with fields and documentation
14
- - `defineUnion(name, variants)` - Define discriminated unions of record types
15
- - `defineMigration(previousSchema, migrationFn)` - Define schema migrations
14
+ A schema is a chain of versions:
16
15
 
17
- ### Type System
16
+ - {@link defineSchema} — version 1, the initial set of models.
17
+ - {@link defineSchemaUpdate} — a named change that evolves records through a builder.
18
+ - {@link nextSchema} — compose one or more updates into the next version.
18
19
 
19
- - `Type` - Base type for all PACK field types
20
- - `String`, `Double` - Primitive field types
21
- - `Array<T>`, `Optional<T>` - Composite field types
22
- - `Ref` - References to other defined records/unions
20
+ Export the latest version as the module's default export; the generator walks the chain back to the minimum supported version.
23
21
 
24
- ### Utilities
22
+ ## Example
25
23
 
26
- - Field validation and resolution utilities
27
- - Schema conversion and processing functions
28
-
29
- ## Usage
30
-
31
- ```typescript
32
- import * as P from "@palantir/pack.schema";
33
-
34
- // Define a record type
35
- const Position = P.defineRecord("Position", {
36
- docs: "A position in 2D space",
37
- fields: {
38
- x: P.Double,
39
- y: P.Double,
40
- },
41
- });
42
-
43
- // Define a record with optional fields and references
44
- const Node = P.defineRecord("Node", {
45
- docs: "A node in the graph",
46
- extends: [Position],
47
- fields: {
48
- label: P.Optional(P.String),
49
- connections: P.Array(Ref(() => Node)), // Forward reference
50
- },
51
- });
52
-
53
- // Define a union type
54
- const Shape = P.defineUnion("Shape", {
55
- circle: Circle,
56
- rectangle: Rectangle,
57
- node: Node,
58
- });
59
-
60
- // Define a migration
61
- const v2Schema = P.defineMigration(v1Schema, schema => {
62
- // Migration logic
63
- return schema;
64
- });
65
- ```
66
-
67
- ## Field Types
68
-
69
- ### Primitives
70
-
71
- - `String` - String values
72
- - `Double` - Numeric values
73
- - `Unknown` - Any value type
74
-
75
- ### Composites
76
-
77
- - `Array<T>` - Arrays of type T
78
- - `Optional<T>` - Optional values of type T
79
- - `Ref<T>` - References to other defined types
80
-
81
- ## Features
82
-
83
- - **Type Safety** - Full TypeScript type checking during schema definition
84
- - **Forward References** - Support for circular/forward references using functions
85
- - **Schema Evolution** - Migration system for schema versioning
86
- - **IDE Support** - IntelliSense and auto-completion for schema building
87
- - **Validation** - Runtime validation of schema definitions
24
+ {@include ../../docs/guides/_schema-example.md}
@@ -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":[],"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 RESOURCE_REF: \"resourceRef\",\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};\nexport const ResourceRef = {\n type: TypeKind.RESOURCE_REF\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 * Upgrade options for a field added in this version. Supplied as the third\n * argument to `addField`; surfaced by `applyMigration` as part of\n * `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) the runtime lens uses to decide when to invoke the\n * upgrade function. The function itself — derived or constant — is supplied\n * at boot via the generated `DocumentModel(...)` factory's `UpgradeFns`\n * parameter.\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 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 fieldEntries[fieldName] = options;\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}"]}
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":[],"mappings":";AAgBO,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO;AACT;;;ACHO,IAAM,QAAA,GAAW;AAAA,EACtB,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,UAAA;AAAA,EACX,UAAA,EAAY,WAAA;AAAA,EACZ,QAAA,EAAU,UAAA;AAAA,EACV,GAAA,EAAK,KAAA;AAAA,EACL,YAAA,EAAc,aAAA;AAAA,EACd,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACZ;AAqBO,IAAM,MAAA,GAAS;AAAA,EACpB,MAAM,QAAA,CAAS;AACjB;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,MAAM,QAAA,CAAS;AACjB;AAEO,IAAM,OAAA,GAAU;AAAA,EACrB,MAAM,QAAA,CAAS;AACjB;AAEO,IAAM,OAAA,GAAU;AAAA,EACrB,MAAM,QAAA,CAAS;AACjB;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,MAAM,QAAA,CAAS;AACjB;AACA,SAAS,kBAAkB,CAAA,EAAG;AAC5B,EAAA,OAAO,EAAE,IAAA,KAAS,QAAA,CAAS,YAAY,MAAA,IAAU,CAAA,GAAI,EAAE,IAAA,GAAO,CAAA;AAChE;AAGO,IAAM,QAAQ,CAAA,IAAA,KAAQ;AAC3B,EAAA,IAAI,iBAAA,CAAkB,IAAI,CAAA,CAAE,IAAA,KAAS,SAAS,KAAA,EAAO;AACnD,IAAA,MAAM,IAAI,MAAM,+HAAoI,CAAA;AAAA,EACtJ;AACA,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,CAAS,KAAA;AAAA,IACf,KAAA,EAAO;AAAA,GACT;AACF;AAEO,IAAM,WAAW,CAAA,IAAA,KAAQ;AAC9B,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,CAAS,QAAA,EAAU;AACnC,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AACA,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,CAAS,QAAA;AAAA,IACf;AAAA,GACF;AACF;;;ACrEO,SAAS,WAAW,KAAA,EAAO;AAChC,EAAA,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA;AACzC;AAMO,SAAS,SAAA,CAAU,MAAM,OAAA,EAAS;AACvC,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,CAAS,GAAA;AAAA,IACf,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,YAAY,KAAA,EAAO;AACjC,EAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,CAAa,MAAA,IAAU,QAAA,IAAY,KAAA;AAC5H;AAKO,SAAS,WAAW,KAAA,EAAO;AAChC,EAAA,OAAO,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,CAAa,KAAA,IAAS,UAAA,IAAc,KAAA;AAC7H;;;AClBO,SAAS,YAAY,IAAA,EAAM;AAAA,EAChC,YAAA,GAAe,MAAA;AAAA,EACf,IAAA;AAAA,EACA;AACF,CAAA,EAAG;AACD,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAC,GAAA,EAAK,sBAAA,CAAuB,KAAK,CAAC,CAAC,CAAA;AACnG,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,MAAM,YAAA,CAAa,KAAA;AAAA,IACnB,YAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACZ;AACF;AACO,SAAS,uBAAuB,GAAA,EAAK;AAC1C,EAAA,MAAM,QAAA,GAAW,OAAO,GAAA,KAAQ,UAAA,GAAa,KAAI,GAAI,GAAA;AACrD,EAAA,OAAO,SAAS,IAAA,KAAS,QAAA,CAAS,GAAA,GAAM,QAAA,GAAW,WAAW,QAAQ,CAAA;AACxE;;;ACLA,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiB;AAAA,EACrB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,CAAY;AAAA,IACV,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF,EAAG;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW;AAAA,MACd,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EACA,UAAA,CAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAM,GAAA,GAAM,uBAAuB,aAAa,CAAA;AAChD,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,CAAC,WAAW,GAAG;AAAA,KACjB;AACA,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,MAAM,YAAA,CAAa,KAAA;AAAA,MACnB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU,WAAA;AAAA,MACV,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,OAAO;AAAA,MACL,MAAM,YAAA,CAAa,KAAA;AAAA,MACnB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,YAAA,EAAc,MAAA;AAAA,MACd,MAAM,IAAA,CAAK;AAAA,KACb;AAAA,EACF;AACF,CAAA;AASA,IAAM,uBAAA,GAA0B,0BAAA;AAShC,IAAM,yBAAA,GAA4B,4BAAA;AAClC,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EACtB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA,CAAY,gBAAA,EAAkB,cAAA,EAAgB,gBAAA,EAAkB;AAC9D,IAAA,IAAA,CAAK,OAAO,gBAAA,CAAiB,IAAA;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,GAAG,gBAAA,CAAiB;AAAA,KACtB;AAIA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,GAAA,CAAI,cAAA,IAAkB,EAAE,CAAA;AAClD,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,GAAA,CAAI,gBAAA,IAAoB,EAAE,CAAA;AAAA,EACxD;AAAA;AAAA,EAGA,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAA,CAAK,cAAc,CAAA;AACxC,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,IAAA,CAAK,GAAA,CAAI,MAAM,OAAO,CAAA;AAAA,IACxB;AACA,IAAA,OAAO,IAAI,kBAAA,CAAkB;AAAA,MAC3B,MAAM,YAAA,CAAa,MAAA;AAAA,MACnB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,GAAG,IAAA,CAAK,MAAA;AAAA,QACR,CAAC,IAAI,GAAG;AAAA,OACV;AAAA,MACA,IAAA,EAAM;AAAA,KACR,EAAG,IAAA,EAAM,IAAA,CAAK,gBAAgB,CAAA;AAAA,EAChC;AAAA,EACA,cAAA,CAAe,MAAM,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAA,CAAK,gBAAgB,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAI,IAAA,EAAM;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,OAAO,IAAI,kBAAA,CAAkB;AAAA,MAC3B,MAAM,YAAA,CAAa,MAAA;AAAA,MACnB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,GAAG,IAAA,CAAK;AAAA,OACV;AAAA,MACA,IAAA,EAAM;AAAA,KACR,EAAG,IAAA,CAAK,cAAA,EAAgB,IAAI,CAAA;AAAA,EAC9B;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,MAAM,YAAA,CAAa,MAAA;AAAA,MACnB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACR;AACA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,IAAA,GAAO,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,uBAAA,EAAyB;AAAA,QACrD,OAAO,IAAA,CAAK,cAAA;AAAA,QACZ,UAAA,EAAY,KAAA;AAAA,QACZ,YAAA,EAAc,IAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,IAAA,GAAO,CAAA,EAAG;AAClC,MAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,yBAAA,EAA2B;AAAA,QACvD,OAAO,IAAA,CAAK,gBAAA;AAAA,QACZ,UAAA,EAAY,KAAA;AAAA,QACZ,YAAA,EAAc,IAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;AACA,SAAS,aAAa,MAAA,EAAQ;AAC5B,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,IAAA,IAAI,WAAA,CAAY,CAAC,CAAA,EAAG;AAClB,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,IAAI,iBAAA,CAAkB,CAAC,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,UAAA,CAAW,CAAC,CAAA,EAAG;AACxB,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,IAAI,gBAAA,CAAiB,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAiBO,SAAS,cAAA,CAAe,QAAQ,SAAA,EAAW;AAChD,EAAA,MAAM,QAAA,GAAW,aAAa,MAAM,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,MAAA;AAAA,IACH,GAAG,UAAU,QAAQ;AAAA,GACvB;AACA,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,MAAM,eAAe,EAAC;AACtB,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpD,IAAA,IAAI,CAAC,WAAA,CAAY,GAAG,CAAA,EAAG;AACvB,IAAA,MAAM,OAAA,GAAU,GAAA;AAChB,IAAA,MAAM,IAAA,GAAO,QAAQ,uBAAuB,CAAA;AAC5C,IAAA,IAAI,QAAQ,IAAA,EAAM;AAEhB,MAAA,OAAO,QAAQ,uBAAuB,CAAA;AACtC,MAAA,MAAM,eAAe,EAAC;AACtB,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,OAAO,CAAA,IAAK,IAAA,EAAM;AACvC,QAAA,YAAA,CAAa,SAAS,CAAA,GAAI,OAAA;AAAA,MAC5B;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,SAAS,CAAA,EAAG;AACxC,QAAA,QAAA,CAAS,QAAQ,CAAA,GAAI,YAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GAAa,QAAQ,yBAAyB,CAAA;AACpD,IAAA,IAAI,cAAc,IAAA,EAAM;AAEtB,MAAA,OAAO,QAAQ,yBAAyB,CAAA;AACxC,MAAA,MAAM,eAAe,EAAC;AACtB,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,IAAI,CAAA,IAAK,UAAA,EAAY;AAC1C,QAAA,YAAA,CAAa,SAAS,CAAA,GAAI,IAAA;AAAA,MAC5B;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,SAAS,CAAA,EAAG;AACxC,QAAA,YAAA,CAAa,QAAQ,CAAA,GAAI,YAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AAAA,IACxD,cAAc,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,MAAA,GAAS,IAAI,YAAA,GAAe;AAAA,GACtE;AACF;AAUO,SAAS,eAAA,CAAgB,QAAQ,SAAA,EAAW;AACjD,EAAA,OAAO,cAAA,CAAe,MAAA,EAAQ,SAAS,CAAA,CAAE,MAAA;AAC3C;;;ACzOA,SAAS,gBAAgB,KAAA,EAAO;AAE9B,EAAA,MAAM,QAAA,GAAW,OAAO,KAAA,KAAU,UAAA,GAAa,OAAM,GAAI,KAAA;AACzD,EAAA,IAAI,WAAA,CAAY,QAAQ,CAAA,IAAK,UAAA,CAAW,QAAQ,CAAA,EAAG;AACjD,IAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,EAC5B;AAGA,EAAA,OAAO,QAAA;AACT;AAkBO,SAAS,YAAA,CAAa,MAAM,MAAA,EAAQ;AACzC,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,EAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,KAAK,eAAA,CAAgB,KAAK,CAAC,CAAC,CAAA;AACjG,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,MAAM,YAAA,CAAa,MAAA;AAAA,IACnB,IAAA;AAAA,IACA,MAAM,MAAA,CAAO,IAAA;AAAA,IACb;AAAA,GACF;AACF;;;ACvBO,SAAS,aAAa,MAAA,EAAQ;AACnC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT;AAAA,GACF;AACF;AAqBO,SAAS,kBAAA,CAAmB,MAAM,SAAA,EAAW;AAClD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAUA,SAAS,iBAAA,CAAkB,MAAM,QAAA,EAAU;AACzC,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,QAAA;AACzB,EAAA,IAAI,QAAA,IAAY,MAAM,OAAO,IAAA;AAC7B,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG;AAAA,GACL;AACA,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzD,IAAA,MAAA,CAAO,QAAQ,CAAA,GAAI;AAAA,MACjB,GAAG,OAAO,QAAQ,CAAA;AAAA,MAClB,GAAG;AAAA,KACL;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAWA,SAAS,eAAA,CAAgB,YAAY,MAAA,EAAQ;AAC3C,EAAA,IAAI,UAAA,IAAc,MAAM,OAAO,MAAA;AAC/B,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC3D,IAAA,MAAM,GAAA,GAAM,OAAO,QAAQ,CAAA;AAC3B,IAAA,IAAI,CAAC,WAAA,CAAY,GAAG,CAAA,EAAG;AACvB,IAAA,MAAM,eAAe,GAAA,CAAI,MAAA;AACzB,IAAA,MAAM,OAAO,EAAC;AACd,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC3D,MAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,QAAA,IAAA,CAAK,SAAS,CAAA,GAAI,SAAA;AAAA,MACpB;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,IAAA;AAAA,IACrB;AAAA,EACF;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAI,MAAA,GAAS,MAAA;AACnD;AAMA,SAAS,wBAAA,CAAyB,cAAc,OAAA,EAAS;AACvD,EAAA,IAAI,YAAA,IAAgB,MAAM,OAAO,MAAA;AACjC,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC7D,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACtD,MAAA,GAAA,CAAI,SAAS,CAAA,GAAI;AAAA,QACf,WAAA,EAAa,OAAA;AAAA,QACb,GAAG;AAAA,OACL;AAAA,IACF;AACA,IAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,GAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA;AACT;AACA,IAAM,wBAAA,GAAN,MAAM,yBAAA,CAAyB;AAAA,EAC7B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,CAAY,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,YAAY,YAAA,EAAc;AAC/D,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,aAAA,GAAgB,YAAA;AAAA,EACvB;AAAA,EACA,gBAAgB,MAAA,EAAQ;AAGtB,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF,GAAI,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,OAAO,SAAS,CAAA;AAChD,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,CAAK,WAAA,EAAa,QAAQ,CAAA;AAG3D,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,MAAA,EAAQ,MAAM,CAAA;AAE7C,IAAA,MAAM,uBAAA,GAA0B,wBAAA,CAAyB,YAAA,EAAc,IAAA,CAAK,OAAO,CAAA;AACnF,IAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,CAAK,aAAA,EAAe,uBAAuB,CAAA;AACxF,IAAA,OAAO,IAAI,0BAAyB,MAAA,EAAQ,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,EAAU,QAAQ,kBAAkB,CAAA;AAAA,EACrG;AAAA,EACA,eAAe,UAAA,EAAY;AACzB,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,CAAK,WAAA,EAAa,UAAU,CAAA;AAC7D,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,MAAM,CAAA;AAClD,IAAA,OAAO,IAAI,yBAAA,CAAyB,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,aAAa,CAAA;AAAA,EAC1G;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ;AAAA,QACN,GAAG,IAAA,CAAK;AAAA,OACV;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,GAAI,IAAA,CAAK,WAAA,IAAe,IAAA,GAAO;AAAA,QAC7B,YAAY,IAAA,CAAK;AAAA,UACf,EAAC;AAAA,MACL,GAAI,IAAA,CAAK,aAAA,IAAiB,IAAA,GAAO;AAAA,QAC/B,cAAc,IAAA,CAAK;AAAA,UACjB;AAAC,KACP;AAAA,EACF;AACF,CAAA;AAWO,SAAS,WAAW,QAAA,EAAU;AACnC,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,GAAU,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,cAAA,IAAkB,QAAA,GAAW,QAAA,CAAS,YAAA,GAAe,MAAA;AAC1E,EAAA,OAAO,IAAI,wBAAA,CAAyB,QAAA,CAAS,QAAQ,OAAA,EAAS,QAAA,EAAU,QAAW,YAAY,CAAA;AACjG","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 RESOURCE_REF: \"resourceRef\",\n STRING: \"string\",\n UNKNOWN: \"unknown\",\n USER_REF: \"userRef\"\n};\n\n/** A UTF-8 string field. */\n\n/** A double-precision floating point number field. */\n\n/** A boolean field. */\n\n// Forward declaration to avoid circular reference\n\n/** A list of `T`. Nested arrays are not supported — wrap the inner array in a record. */\n\n/** A reference to another record or union in the same schema. */\n\n/** A `T` that may be absent. Nested optionals are not supported. */\n\n/** An opaque, arbitrary JSON value. */\n\n/** Any valid field type: a primitive, a composite (`Array`/`Optional`), or a `Ref`. */\n\n/** A UTF-8 string field. */\nexport const String = {\n type: TypeKind.STRING\n};\n/** A double-precision floating point number field. */\nexport const Double = {\n type: TypeKind.DOUBLE\n};\n/** A boolean field. */\nexport const Boolean = {\n type: TypeKind.BOOLEAN\n};\n/** An opaque, arbitrary JSON value. */\nexport const Unknown = {\n type: TypeKind.UNKNOWN\n};\n/** A reference to a Foundry resource. */\nexport const ResourceRef = {\n type: TypeKind.RESOURCE_REF\n};\nfunction unwrapOneOptional(t) {\n return t.type === TypeKind.OPTIONAL && \"item\" in t ? t.item : t;\n}\n\n/** Build an array field whose elements are `item`. */\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};\n/** Build an optional field wrapping `item`, marking it as possibly absent. */\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\";\n/**\n * Define a **union**: a discriminated choice between several record variants. A\n * value of the union is exactly one of its variants, tagged by the\n * `discriminant` field (default `\"type\"`).\n *\n * @example\n * ```ts\n * const NodeShape = defineUnion(\"NodeShape\", {\n * discriminant: \"shapeType\",\n * docs: \"The shape of a node.\",\n * variants: { box: ShapeBox, circle: ShapeCircle },\n * });\n * ```\n */\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 * The set of builders handed to a {@link SchemaUpdate} callback — one\n * {@link RecordBuilder} or {@link UnionBuilder} per existing model, keyed by\n * model name. Mutate the ones you're changing and return the results.\n */\n\n/**\n * Upgrade options for a field added in this version. Supplied as the third\n * argument to `addField`; surfaced by `applyMigration` as part of\n * `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) the runtime lens uses to decide when to invoke the\n * upgrade function. The function itself — derived or constant — is supplied\n * at boot via the generated `DocumentModel(...)` factory's `UpgradeFns`\n * parameter.\n */\n\n/** Options passed as the third argument to {@link RecordBuilder.addField}. */\n\n/** Evolves a record within a {@link SchemaUpdate}. Obtain one from the {@link SchemaBuilder} and finish with `build()`. */\n\n/** Evolves a union within a {@link SchemaUpdate}. Obtain one from the {@link SchemaBuilder} and finish with `build()`. */\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 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 fieldEntries[fieldName] = options;\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}\n\n/**\n * Lower-level alternative to the {@link nextSchema}/{@link defineSchemaUpdate}\n * chain: apply a migration callback and return only the merged models, dropping\n * the per-field upgrade and deprecation metadata.\n *\n * @deprecated Use the {@link nextSchema}/{@link defineSchemaUpdate} chain to\n * build versioned schemas. This function will be removed in a future version.\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}\n\n/**\n * Define a **record**: a named set of typed fields, the basic building block of\n * a schema.\n *\n * Each field's type is a primitive ({@link String}, {@link Double}, …), a\n * composite ({@link Optional}, {@link Array}), or a reference to another record\n * or union — passed directly, or as `() => Model` for forward references.\n *\n * @example\n * ```ts\n * const ShapeBox = defineRecord(\"ShapeBox\", {\n * docs: \"A box.\",\n * fields: { top: Double, left: Double, color: Optional(String) },\n * });\n * ```\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\";\n\n/** Version 1 of a schema, produced by {@link defineSchema}. */\n\n/** Version 2 or later of a schema, produced by {@link nextSchema}. Links back to the `previous` version. */\n\n/** Any version of a schema: the {@link InitialSchema} (v1) or a {@link VersionedSchema} (v2+). */\n\n/**\n * Define version 1 of a schema from its initial set of models (records and\n * unions). Later versions extend it via {@link nextSchema} and\n * {@link defineSchemaUpdate}.\n *\n * @example\n * ```ts\n * const schemaV1 = defineSchema({ ShapeBox, NodeShape });\n * ```\n */\nexport function defineSchema(models) {\n return {\n type: \"initial\",\n version: 1,\n models\n };\n}\n\n/** A named schema change created by {@link defineSchemaUpdate} and applied with {@link SchemaVersionBuilder.addSchemaUpdate}. */\n\n/**\n * Define a named, reusable schema change. The callback receives a\n * {@link SchemaBuilder} — one builder per existing model — and returns the\n * records and unions it changed or added.\n *\n * @param name - A stable identifier for this change, used to track the migration.\n * @example\n * ```ts\n * const splitColor = defineSchemaUpdate(\"splitColor\", schema => {\n * const ShapeBox = schema.ShapeBox\n * .addField(\"fillColor\", Optional(String), { derivedFrom: [\"color\"] })\n * .deprecateField(\"color\", \"Use fillColor instead.\")\n * .build();\n * return { ShapeBox };\n * });\n * ```\n */\nexport function defineSchemaUpdate(name, migration) {\n return {\n name,\n migration\n };\n}\n\n/** Accumulates {@link SchemaUpdate}s onto the previous version. Create one with {@link nextSchema} and finish with `build()`. */\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}\n\n/**\n * Start building the next version of a schema. Chain {@link SchemaVersionBuilder.addSchemaUpdate}\n * calls and finish with `build()`; the new version is the previous one's plus one.\n *\n * @example\n * ```ts\n * const schemaV2 = nextSchema(schemaV1).addSchemaUpdate(splitColor).build();\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}"]}
@@ -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":[],"mappings":"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","file":"index.cjs","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 RESOURCE_REF: \"resourceRef\",\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};\nexport const ResourceRef = {\n type: TypeKind.RESOURCE_REF\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 * Upgrade options for a field added in this version. Supplied as the third\n * argument to `addField`; surfaced by `applyMigration` as part of\n * `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) the runtime lens uses to decide when to invoke the\n * upgrade function. The function itself — derived or constant — is supplied\n * at boot via the generated `DocumentModel(...)` factory's `UpgradeFns`\n * parameter.\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 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 fieldEntries[fieldName] = options;\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}"]}
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":[],"mappings":"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","file":"index.cjs","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 RESOURCE_REF: \"resourceRef\",\n STRING: \"string\",\n UNKNOWN: \"unknown\",\n USER_REF: \"userRef\"\n};\n\n/** A UTF-8 string field. */\n\n/** A double-precision floating point number field. */\n\n/** A boolean field. */\n\n// Forward declaration to avoid circular reference\n\n/** A list of `T`. Nested arrays are not supported — wrap the inner array in a record. */\n\n/** A reference to another record or union in the same schema. */\n\n/** A `T` that may be absent. Nested optionals are not supported. */\n\n/** An opaque, arbitrary JSON value. */\n\n/** Any valid field type: a primitive, a composite (`Array`/`Optional`), or a `Ref`. */\n\n/** A UTF-8 string field. */\nexport const String = {\n type: TypeKind.STRING\n};\n/** A double-precision floating point number field. */\nexport const Double = {\n type: TypeKind.DOUBLE\n};\n/** A boolean field. */\nexport const Boolean = {\n type: TypeKind.BOOLEAN\n};\n/** An opaque, arbitrary JSON value. */\nexport const Unknown = {\n type: TypeKind.UNKNOWN\n};\n/** A reference to a Foundry resource. */\nexport const ResourceRef = {\n type: TypeKind.RESOURCE_REF\n};\nfunction unwrapOneOptional(t) {\n return t.type === TypeKind.OPTIONAL && \"item\" in t ? t.item : t;\n}\n\n/** Build an array field whose elements are `item`. */\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};\n/** Build an optional field wrapping `item`, marking it as possibly absent. */\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\";\n/**\n * Define a **union**: a discriminated choice between several record variants. A\n * value of the union is exactly one of its variants, tagged by the\n * `discriminant` field (default `\"type\"`).\n *\n * @example\n * ```ts\n * const NodeShape = defineUnion(\"NodeShape\", {\n * discriminant: \"shapeType\",\n * docs: \"The shape of a node.\",\n * variants: { box: ShapeBox, circle: ShapeCircle },\n * });\n * ```\n */\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 * The set of builders handed to a {@link SchemaUpdate} callback — one\n * {@link RecordBuilder} or {@link UnionBuilder} per existing model, keyed by\n * model name. Mutate the ones you're changing and return the results.\n */\n\n/**\n * Upgrade options for a field added in this version. Supplied as the third\n * argument to `addField`; surfaced by `applyMigration` as part of\n * `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) the runtime lens uses to decide when to invoke the\n * upgrade function. The function itself — derived or constant — is supplied\n * at boot via the generated `DocumentModel(...)` factory's `UpgradeFns`\n * parameter.\n */\n\n/** Options passed as the third argument to {@link RecordBuilder.addField}. */\n\n/** Evolves a record within a {@link SchemaUpdate}. Obtain one from the {@link SchemaBuilder} and finish with `build()`. */\n\n/** Evolves a union within a {@link SchemaUpdate}. Obtain one from the {@link SchemaBuilder} and finish with `build()`. */\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 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 fieldEntries[fieldName] = options;\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}\n\n/**\n * Lower-level alternative to the {@link nextSchema}/{@link defineSchemaUpdate}\n * chain: apply a migration callback and return only the merged models, dropping\n * the per-field upgrade and deprecation metadata.\n *\n * @deprecated Use the {@link nextSchema}/{@link defineSchemaUpdate} chain to\n * build versioned schemas. This function will be removed in a future version.\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}\n\n/**\n * Define a **record**: a named set of typed fields, the basic building block of\n * a schema.\n *\n * Each field's type is a primitive ({@link String}, {@link Double}, …), a\n * composite ({@link Optional}, {@link Array}), or a reference to another record\n * or union — passed directly, or as `() => Model` for forward references.\n *\n * @example\n * ```ts\n * const ShapeBox = defineRecord(\"ShapeBox\", {\n * docs: \"A box.\",\n * fields: { top: Double, left: Double, color: Optional(String) },\n * });\n * ```\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\";\n\n/** Version 1 of a schema, produced by {@link defineSchema}. */\n\n/** Version 2 or later of a schema, produced by {@link nextSchema}. Links back to the `previous` version. */\n\n/** Any version of a schema: the {@link InitialSchema} (v1) or a {@link VersionedSchema} (v2+). */\n\n/**\n * Define version 1 of a schema from its initial set of models (records and\n * unions). Later versions extend it via {@link nextSchema} and\n * {@link defineSchemaUpdate}.\n *\n * @example\n * ```ts\n * const schemaV1 = defineSchema({ ShapeBox, NodeShape });\n * ```\n */\nexport function defineSchema(models) {\n return {\n type: \"initial\",\n version: 1,\n models\n };\n}\n\n/** A named schema change created by {@link defineSchemaUpdate} and applied with {@link SchemaVersionBuilder.addSchemaUpdate}. */\n\n/**\n * Define a named, reusable schema change. The callback receives a\n * {@link SchemaBuilder} — one builder per existing model — and returns the\n * records and unions it changed or added.\n *\n * @param name - A stable identifier for this change, used to track the migration.\n * @example\n * ```ts\n * const splitColor = defineSchemaUpdate(\"splitColor\", schema => {\n * const ShapeBox = schema.ShapeBox\n * .addField(\"fillColor\", Optional(String), { derivedFrom: [\"color\"] })\n * .deprecateField(\"color\", \"Use fillColor instead.\")\n * .build();\n * return { ShapeBox };\n * });\n * ```\n */\nexport function defineSchemaUpdate(name, migration) {\n return {\n name,\n migration\n };\n}\n\n/** Accumulates {@link SchemaUpdate}s onto the previous version. Create one with {@link nextSchema} and finish with `build()`. */\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}\n\n/**\n * Start building the next version of a schema. Chain {@link SchemaVersionBuilder.addSchemaUpdate}\n * calls and finish with `build()`; the new version is the previous one's plus one.\n *\n * @example\n * ```ts\n * const schemaV2 = nextSchema(schemaV1).addSchemaUpdate(splitColor).build();\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}"]}