@palantir/pack.schema 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/defs.ts","../../src/primitives.ts","../../src/utils.ts","../../src/defineUnion.ts","../../src/defineMigration.ts","../../src/defineRecord.ts","../../src/defineSchemaUpdate.ts"],"names":["Array"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const ModelDefType = {\n RECORD: \"record\",\n UNION: \"union\"\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TypeKind = {\n ARRAY: \"array\",\n BOOLEAN: \"boolean\",\n DOC_REF: \"docRef\",\n DOUBLE: \"double\",\n MEDIA_REF: \"mediaRef\",\n OBJECT_REF: \"objectRef\",\n OPTIONAL: \"optional\",\n REF: \"ref\",\n STRING: \"string\",\n UNKNOWN: \"unknown\",\n USER_REF: \"userRef\"\n};\n\n// Forward declaration to avoid circular reference\n\n// A reference to a record or a union type\n\nexport const String = {\n type: TypeKind.STRING\n};\nexport const Double = {\n type: TypeKind.DOUBLE\n};\nexport const Boolean = {\n type: TypeKind.BOOLEAN\n};\nexport const Unknown = {\n type: TypeKind.UNKNOWN\n};\nfunction unwrapOneOptional(t) {\n return t.type === TypeKind.OPTIONAL && \"item\" in t ? t.item : t;\n}\nexport const Array = item => {\n if (unwrapOneOptional(item).type === TypeKind.ARRAY) {\n throw new Error(\"Nested arrays (Array(Array(...)) or Array(Optional(Array(...)))) are not supported. \" + \"Wrap the inner array in a record instead.\");\n }\n return {\n type: TypeKind.ARRAY,\n items: item\n };\n};\nexport const Optional = item => {\n if (item.type === TypeKind.OPTIONAL) {\n throw new Error(\"Nested optionals (Optional(Optional(...))) are not supported.\");\n }\n return {\n type: TypeKind.OPTIONAL,\n item\n };\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\n\n/**\n * Helper function to safely transform a record definition to a reference.\n * This function helps TypeScript track type transformations better.\n */\nexport function modelToRef(model) {\n return createRef(model.name, model.type);\n}\n\n/**\n * Helper function to create a reference with proper typing.\n * This avoids type assertions in multiple places.\n */\nexport function createRef(name, refType) {\n return {\n type: TypeKind.REF,\n name,\n refType\n };\n}\n\n/**\n * Type guard to check if a value is a RecordDef\n */\nexport function isRecordDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.RECORD && \"fields\" in value;\n}\n\n/**\n * Type guard to check if a value is a UnionDef\n */\nexport function isUnionDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.UNION && \"variants\" in value;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\nimport { modelToRef } from \"./utils.js\";\nexport function defineUnion(name, {\n discriminant = \"type\",\n docs,\n variants\n}) {\n const entries = Object.entries(variants).map(([key, value]) => [key, resolveUnionVariantArg(value)]);\n const resolvedVariants = Object.fromEntries(entries);\n return {\n type: ModelDefType.UNION,\n discriminant,\n name,\n docs,\n variants: resolvedVariants\n };\n}\nexport function resolveUnionVariantArg(arg) {\n const resolved = typeof arg === \"function\" ? arg() : arg;\n return resolved.type === TypeKind.REF ? resolved : modelToRef(resolved);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveUnionVariantArg } from \"./defineUnion.js\";\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef } from \"./utils.js\";\n\n/** Soon to be deprecated - Use `ModelDefs` instead. */\n\n/** Soon to be deprecated - use `ModelDefs` instead. */\n\n/**\n * Recursive literal-JSON type. Constrains schema-time `default` values to\n * data that JSON-serializes losslessly — no `Date`, `RegExp`, functions, class\n * instances, or `undefined`. Mirrors the `JsonValue` exported by\n * `@palantir/pack.document-schema.model-types`; kept local here to avoid a\n * package dependency from `pack.schema`.\n */\n\n/**\n * Upgrade options for a field whose value is derived from prior-version fields.\n * Supplied as the third argument to `addField`; surfaced by `applyMigration`\n * as part of `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) and an optional literal JSON `default` used when no source\n * data exists. The runtime forward function is supplied separately via the\n * generated `DocumentModel(...)` factory's `UpgradeFns` parameter.\n */\n\n/**\n * Options for a purely additive field. `default` is literal JSON only;\n * validated at `addField()` call time.\n */\n\n/**\n * Recursively assert `value` is representable as literal JSON. Rejects `Date`,\n * `RegExp`, functions, class instances, symbol-keyed properties, `undefined`\n * (anywhere — top-level or nested), `symbol`, and `bigint`. Throws on the\n * first offending value, naming the path for debuggability.\n */\nfunction assertJsonDefault(value, path) {\n // eslint-disable-next-line eqeqeq -- need to distinguish null (valid JSON) from undefined (not).\n if (value === null) return;\n const t = typeof value;\n if (t === \"undefined\") {\n throw new Error(`Invalid JSON default at ${path}: undefined is not valid JSON`);\n }\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return;\n if (t === \"function\" || t === \"symbol\" || t === \"bigint\") {\n throw new Error(`Invalid JSON default at ${path}: ${t} is not valid JSON`);\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n assertJsonDefault(value[i], `${path}[${i}]`);\n }\n return;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto != null) {\n const ctorName = value.constructor?.name ?? \"non-plain object\";\n throw new Error(`Invalid JSON default at ${path}: ${ctorName} is not valid JSON`);\n }\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new Error(`Invalid JSON default at ${path}: symbol-keyed properties are not valid JSON`);\n }\n for (const [k, v] of Object.entries(value)) {\n assertJsonDefault(v, `${path}.${k}`);\n }\n}\nclass UnionBuilderImpl {\n name;\n docs;\n variants;\n constructor({\n name,\n docs,\n variants\n }) {\n this.name = name;\n this.docs = docs;\n this.variants = {\n ...variants\n };\n }\n addVariant(variantName, modelDefOrRef) {\n const ref = resolveUnionVariantArg(modelDefOrRef);\n const newVariants = {\n ...this.variants,\n [variantName]: ref\n };\n return new UnionBuilderImpl({\n type: ModelDefType.UNION,\n name: this.name,\n variants: newVariants,\n discriminant: \"type\"\n });\n }\n build() {\n return {\n type: ModelDefType.UNION,\n variants: this.variants,\n discriminant: \"type\",\n name: this.name\n };\n }\n}\n\n/**\n * Non-enumerable carrier property attached to a `RecordDef` by\n * `RecordBuilderImpl.build()` when the builder has collected one or more\n * `FieldOptions`. `applyMigration` reads this and then deletes the property,\n * so the `RecordDef` it returns is structurally clean (no extra keys, no\n * symbol-keyed metadata).\n */\nconst UPGRADE_OPTIONS_CARRIER = \"__pack_upgrade_options__\";\nclass RecordBuilderImpl {\n name;\n fields;\n upgradeOptions;\n constructor(initialRecordDef, upgradeOptions) {\n this.name = initialRecordDef.name;\n this.fields = {\n ...initialRecordDef.fields\n };\n // Upgrade options only flow forward within a single migration callback —\n // they are NOT inherited from the prior version's RecordDef, because each\n // version's upgrades describe a specific version transition.\n this.upgradeOptions = new Map(upgradeOptions ?? []);\n }\n\n // TODO: resolve field value from arg instead\n addField(name, value, options) {\n if (options != null && \"default\" in options && options.default !== undefined) {\n assertJsonDefault(options.default, `addField(\"${name}\").default`);\n }\n const next = new Map(this.upgradeOptions);\n if (options != null) {\n next.set(name, options);\n }\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: {\n ...this.fields,\n [name]: value\n },\n docs: \"\"\n }, next);\n }\n removeField(name) {\n const {\n [name]: _removed,\n ...rest\n } = this.fields;\n const next = new Map(this.upgradeOptions);\n next.delete(name);\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: rest,\n docs: \"\"\n }, next);\n }\n build() {\n const result = {\n type: ModelDefType.RECORD,\n name: this.name,\n fields: this.fields,\n docs: \"\"\n };\n if (this.upgradeOptions.size > 0) {\n Object.defineProperty(result, UPGRADE_OPTIONS_CARRIER, {\n value: this.upgradeOptions,\n enumerable: false,\n configurable: true,\n writable: false\n });\n }\n return result;\n }\n}\nfunction makeBuilders(models) {\n const builders = {};\n for (const key in models) {\n const v = models[key];\n if (isRecordDef(v)) {\n builders[key] = new RecordBuilderImpl(v);\n } else if (isUnionDef(v)) {\n builders[key] = new UnionBuilderImpl(v);\n }\n }\n return builders;\n}\n\n/** Per-model field migrations: `[modelKey][fieldName]` → upgrade options. */\n\n/**\n * Lower-level entry point that returns both the merged models AND any\n * `UpgradeFieldOptions` collected via `addField(name, type, options)` during\n * the migration callback. Used by `addSchemaUpdate` to fold sugar-form\n * upgrades into a `VersionedSchema`'s migrations map.\n *\n * Each `RecordBuilderImpl.build()` attaches its collected options to the\n * produced `RecordDef` via a non-enumerable carrier property; this function\n * walks the merged result, extracts the options keyed by the user's chosen\n * output key (so renames are handled), and strips the carrier so the returned\n * `RecordDef`s are structurally clean.\n */\nexport function applyMigration(models, migration) {\n const builders = makeBuilders(models);\n const merged = {\n ...models,\n ...migration(builders)\n };\n const upgrades = {};\n for (const [modelKey, def] of Object.entries(merged)) {\n if (!isRecordDef(def)) continue;\n const carrier = def;\n const opts = carrier[UPGRADE_OPTIONS_CARRIER];\n if (opts == null) continue;\n // Strip the carrier so the returned RecordDef is structurally clean.\n delete carrier[UPGRADE_OPTIONS_CARRIER];\n const fieldEntries = {};\n for (const [fieldName, options] of opts) {\n // Only `UpgradeFieldOptions` (which declare `derivedFrom`) flow into the\n // upgrades map; `AdditiveFieldOptions` carry only a literal `default`\n // and have no read-time lens effect.\n if (\"derivedFrom\" in options) {\n fieldEntries[fieldName] = options;\n }\n }\n if (Object.keys(fieldEntries).length > 0) {\n upgrades[modelKey] = fieldEntries;\n }\n }\n return {\n models: merged,\n upgrades: Object.keys(upgrades).length > 0 ? upgrades : undefined\n };\n}\nexport function defineMigration(models, migration) {\n return applyMigration(models, migration).models;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef, modelToRef } from \"./utils.js\";\n/**\n * Helper function to resolve a field value, handling functions and transforming\n * types as needed.\n */\nfunction resolveFieldArg(value) {\n // Handle function values\n const resolved = typeof value === \"function\" ? value() : value;\n if (isRecordDef(resolved) || isUnionDef(resolved)) {\n return modelToRef(resolved);\n }\n\n // For primitive types and other Types\n return resolved;\n}\nexport function defineRecord(name, record) {\n const entries = Object.entries(record.fields).map(([key, value]) => [key, resolveFieldArg(value)]);\n const fields = Object.fromEntries(entries);\n return {\n type: ModelDefType.RECORD,\n name: name,\n docs: record.docs,\n fields\n };\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { applyMigration } from \"./defineMigration.js\";\nexport function defineSchema(models) {\n return {\n type: \"initial\",\n version: 1,\n models\n };\n}\nexport function defineSchemaUpdate(name, migration) {\n return {\n name,\n migration\n };\n}\n/**\n * Merge two `VersionMigrations` records. Per-model field migrations from\n * `override` take precedence over `base` for the same field, but the maps are\n * combined at both the model and field level so explicit `withMigrations`\n * calls can supplement (not just replace) the sugar from `addField` options.\n */\nfunction mergeMigrations(base, override) {\n if (base == null) return override;\n if (override == null) return base;\n const result = {\n ...base\n };\n for (const [modelKey, fields] of Object.entries(override)) {\n result[modelKey] = {\n ...result[modelKey],\n ...fields\n };\n }\n return result;\n}\n\n/**\n * Drop migration entries that no longer correspond to a field on a record in\n * `models`. Required because `mergeMigrations` is monotonic — a later\n * `addSchemaUpdate` that removes or retypes a field would otherwise leave a\n * stale entry in the accumulator. Entries are dropped when:\n * - the model key is no longer present,\n * - the model is no longer a record (e.g. replaced by a union), or\n * - the field name is no longer one of the record's fields.\n */\nfunction pruneMigrations(migrations, models) {\n if (migrations == null) return undefined;\n const result = {};\n for (const [modelKey, fields] of Object.entries(migrations)) {\n const def = models[modelKey];\n if (def == null || def.type !== \"record\") continue;\n const recordFields = def.fields;\n const kept = {};\n for (const [fieldName, migration] of Object.entries(fields)) {\n if (fieldName in recordFields) {\n kept[fieldName] = migration;\n }\n }\n if (Object.keys(kept).length > 0) {\n result[modelKey] = kept;\n }\n }\n return Object.keys(result).length > 0 ? result : undefined;\n}\nclass SchemaVersionBuilderImpl {\n models;\n version;\n previous;\n _migrations;\n constructor(models, version, previous, migrations) {\n this.models = models;\n this.version = version;\n this.previous = previous;\n this._migrations = migrations;\n }\n addSchemaUpdate(update) {\n // applyMigration returns both the merged models and any sugar-form\n // upgrades collected via `addField(name, type, { derivedFrom, forward })`.\n const {\n models,\n upgrades\n } = applyMigration(this.models, update.migration);\n const merged = mergeMigrations(this._migrations, upgrades);\n // Reconcile against the new models: a later update that removes or\n // retypes a field must drop the prior step's stale migration entry.\n const pruned = pruneMigrations(merged, models);\n return new SchemaVersionBuilderImpl(models, this.version, this.previous, pruned);\n }\n withMigrations(migrations) {\n const merged = mergeMigrations(this._migrations, migrations);\n const pruned = pruneMigrations(merged, this.models);\n return new SchemaVersionBuilderImpl(this.models, this.version, this.previous, pruned);\n }\n build() {\n return {\n type: \"versioned\",\n models: {\n ...this.models\n },\n version: this.version,\n previous: this.previous,\n ...(this._migrations != null ? {\n migrations: this._migrations\n } : {})\n };\n }\n}\nexport function nextSchema(previous) {\n return new SchemaVersionBuilderImpl(previous.models, previous.version + 1, previous);\n}"]}
1
+ {"version":3,"sources":["../../src/defs.ts","../../src/primitives.ts","../../src/utils.ts","../../src/defineUnion.ts","../../src/defineMigration.ts","../../src/defineRecord.ts","../../src/defineSchemaUpdate.ts"],"names":["Array"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const ModelDefType = {\n RECORD: \"record\",\n UNION: \"union\"\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TypeKind = {\n ARRAY: \"array\",\n BOOLEAN: \"boolean\",\n DOC_REF: \"docRef\",\n DOUBLE: \"double\",\n MEDIA_REF: \"mediaRef\",\n OBJECT_REF: \"objectRef\",\n OPTIONAL: \"optional\",\n REF: \"ref\",\n STRING: \"string\",\n UNKNOWN: \"unknown\",\n USER_REF: \"userRef\"\n};\n\n// Forward declaration to avoid circular reference\n\n// A reference to a record or a union type\n\nexport const String = {\n type: TypeKind.STRING\n};\nexport const Double = {\n type: TypeKind.DOUBLE\n};\nexport const Boolean = {\n type: TypeKind.BOOLEAN\n};\nexport const Unknown = {\n type: TypeKind.UNKNOWN\n};\nfunction unwrapOneOptional(t) {\n return t.type === TypeKind.OPTIONAL && \"item\" in t ? t.item : t;\n}\nexport const Array = item => {\n if (unwrapOneOptional(item).type === TypeKind.ARRAY) {\n throw new Error(\"Nested arrays (Array(Array(...)) or Array(Optional(Array(...)))) are not supported. \" + \"Wrap the inner array in a record instead.\");\n }\n return {\n type: TypeKind.ARRAY,\n items: item\n };\n};\nexport const Optional = item => {\n if (item.type === TypeKind.OPTIONAL) {\n throw new Error(\"Nested optionals (Optional(Optional(...))) are not supported.\");\n }\n return {\n type: TypeKind.OPTIONAL,\n item\n };\n};","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\n\n/**\n * Helper function to safely transform a record definition to a reference.\n * This function helps TypeScript track type transformations better.\n */\nexport function modelToRef(model) {\n return createRef(model.name, model.type);\n}\n\n/**\n * Helper function to create a reference with proper typing.\n * This avoids type assertions in multiple places.\n */\nexport function createRef(name, refType) {\n return {\n type: TypeKind.REF,\n name,\n refType\n };\n}\n\n/**\n * Type guard to check if a value is a RecordDef\n */\nexport function isRecordDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.RECORD && \"fields\" in value;\n}\n\n/**\n * Type guard to check if a value is a UnionDef\n */\nexport function isUnionDef(value) {\n return value != null && typeof value === \"object\" && \"type\" in value && value.type === ModelDefType.UNION && \"variants\" in value;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { TypeKind } from \"./primitives.js\";\nimport { modelToRef } from \"./utils.js\";\nexport function defineUnion(name, {\n discriminant = \"type\",\n docs,\n variants\n}) {\n const entries = Object.entries(variants).map(([key, value]) => [key, resolveUnionVariantArg(value)]);\n const resolvedVariants = Object.fromEntries(entries);\n return {\n type: ModelDefType.UNION,\n discriminant,\n name,\n docs,\n variants: resolvedVariants\n };\n}\nexport function resolveUnionVariantArg(arg) {\n const resolved = typeof arg === \"function\" ? arg() : arg;\n return resolved.type === TypeKind.REF ? resolved : modelToRef(resolved);\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolveUnionVariantArg } from \"./defineUnion.js\";\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef } from \"./utils.js\";\n\n/** Soon to be deprecated - Use `ModelDefs` instead. */\n\n/** Soon to be deprecated - use `ModelDefs` instead. */\n\n/**\n * Recursive literal-JSON type. Constrains schema-time `default` values to\n * data that JSON-serializes losslessly — no `Date`, `RegExp`, functions, class\n * instances, or `undefined`. Mirrors the `JsonValue` exported by\n * `@palantir/pack.document-schema.model-types`; kept local here to avoid a\n * package dependency from `pack.schema`.\n */\n\n/**\n * Upgrade options for a field whose value is derived from prior-version fields.\n * Supplied as the third argument to `addField`; surfaced by `applyMigration`\n * as part of `MigrationResult.upgrades`. Declares the structural dependency\n * (`derivedFrom`) and an optional literal JSON `default` used when no source\n * data exists. The runtime forward function is supplied separately via the\n * generated `DocumentModel(...)` factory's `UpgradeFns` parameter.\n */\n\n/**\n * Options for a purely additive field. `default` is literal JSON only;\n * validated at `addField()` call time.\n */\n\n/**\n * Recursively assert `value` is representable as literal JSON. Rejects `Date`,\n * `RegExp`, functions, class instances, symbol-keyed properties, `undefined`\n * (anywhere — top-level or nested), `symbol`, and `bigint`. Throws on the\n * first offending value, naming the path for debuggability.\n */\nfunction assertJsonDefault(value, path) {\n // eslint-disable-next-line eqeqeq -- need to distinguish null (valid JSON) from undefined (not).\n if (value === null) return;\n const t = typeof value;\n if (t === \"undefined\") {\n throw new Error(`Invalid JSON default at ${path}: undefined is not valid JSON`);\n }\n if (t === \"string\" || t === \"number\" || t === \"boolean\") return;\n if (t === \"function\" || t === \"symbol\" || t === \"bigint\") {\n throw new Error(`Invalid JSON default at ${path}: ${t} is not valid JSON`);\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n assertJsonDefault(value[i], `${path}[${i}]`);\n }\n return;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto != null) {\n const ctorName = value.constructor?.name ?? \"non-plain object\";\n throw new Error(`Invalid JSON default at ${path}: ${ctorName} is not valid JSON`);\n }\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new Error(`Invalid JSON default at ${path}: symbol-keyed properties are not valid JSON`);\n }\n for (const [k, v] of Object.entries(value)) {\n assertJsonDefault(v, `${path}.${k}`);\n }\n}\nclass UnionBuilderImpl {\n name;\n docs;\n variants;\n constructor({\n name,\n docs,\n variants\n }) {\n this.name = name;\n this.docs = docs;\n this.variants = {\n ...variants\n };\n }\n addVariant(variantName, modelDefOrRef) {\n const ref = resolveUnionVariantArg(modelDefOrRef);\n const newVariants = {\n ...this.variants,\n [variantName]: ref\n };\n return new UnionBuilderImpl({\n type: ModelDefType.UNION,\n name: this.name,\n variants: newVariants,\n discriminant: \"type\"\n });\n }\n build() {\n return {\n type: ModelDefType.UNION,\n variants: this.variants,\n discriminant: \"type\",\n name: this.name\n };\n }\n}\n\n/**\n * Non-enumerable carrier property attached to a `RecordDef` by\n * `RecordBuilderImpl.build()` when the builder has collected one or more\n * `FieldOptions`. `applyMigration` reads this and then deletes the property,\n * so the `RecordDef` it returns is structurally clean (no extra keys, no\n * symbol-keyed metadata).\n */\nconst UPGRADE_OPTIONS_CARRIER = \"__pack_upgrade_options__\";\n\n/**\n * Non-enumerable carrier property attached to a `RecordDef` by\n * `RecordBuilderImpl.build()` when the builder has collected one or more\n * `deprecateField` calls. `applyMigration` reads this and then deletes the\n * property, so the returned `RecordDef` is structurally clean. Maps field name\n * → its deprecation info.\n */\nconst DEPRECATED_FIELDS_CARRIER = \"__pack_deprecated_fields__\";\nclass RecordBuilderImpl {\n name;\n fields;\n upgradeOptions;\n deprecatedFields;\n constructor(initialRecordDef, upgradeOptions, deprecatedFields) {\n this.name = initialRecordDef.name;\n this.fields = {\n ...initialRecordDef.fields\n };\n // Upgrade options only flow forward within a single migration callback —\n // they are NOT inherited from the prior version's RecordDef, because each\n // version's upgrades describe a specific version transition.\n this.upgradeOptions = new Map(upgradeOptions ?? []);\n this.deprecatedFields = new Map(deprecatedFields ?? []);\n }\n\n // TODO: resolve field value from arg instead\n addField(name, value, options) {\n if (options != null && \"default\" in options && options.default !== undefined) {\n assertJsonDefault(options.default, `addField(\"${name}\").default`);\n }\n const next = new Map(this.upgradeOptions);\n if (options != null) {\n next.set(name, options);\n }\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: {\n ...this.fields,\n [name]: value\n },\n docs: \"\"\n }, next, this.deprecatedFields);\n }\n deprecateField(name, message) {\n const next = new Map(this.deprecatedFields);\n next.set(name, {\n message\n });\n return new RecordBuilderImpl({\n type: ModelDefType.RECORD,\n name: this.name,\n fields: {\n ...this.fields\n },\n docs: \"\"\n }, this.upgradeOptions, next);\n }\n build() {\n const result = {\n type: ModelDefType.RECORD,\n name: this.name,\n fields: this.fields,\n docs: \"\"\n };\n if (this.upgradeOptions.size > 0) {\n Object.defineProperty(result, UPGRADE_OPTIONS_CARRIER, {\n value: this.upgradeOptions,\n enumerable: false,\n configurable: true,\n writable: false\n });\n }\n if (this.deprecatedFields.size > 0) {\n Object.defineProperty(result, DEPRECATED_FIELDS_CARRIER, {\n value: this.deprecatedFields,\n enumerable: false,\n configurable: true,\n writable: false\n });\n }\n return result;\n }\n}\nfunction makeBuilders(models) {\n const builders = {};\n for (const key in models) {\n const v = models[key];\n if (isRecordDef(v)) {\n builders[key] = new RecordBuilderImpl(v);\n } else if (isUnionDef(v)) {\n builders[key] = new UnionBuilderImpl(v);\n }\n }\n return builders;\n}\n\n/** Per-model field migrations: `[modelKey][fieldName]` → upgrade options. */\n\n/**\n * Lower-level entry point that returns the merged models plus the per-field\n * metadata collected during the migration callback: `UpgradeFieldOptions` from\n * `addField(name, type, options)` and deprecations from `deprecateField(name)`.\n * Used by `addSchemaUpdate` to fold sugar-form upgrades into a\n * `VersionedSchema`'s migrations map and deprecations into its deprecations map.\n *\n * Each `RecordBuilderImpl.build()` attaches its collected upgrade options and\n * deprecations to the produced `RecordDef` via two non-enumerable carrier\n * properties; this function walks the merged result, extracts both keyed by the\n * user's chosen output key (so renames are handled), and strips the carriers so\n * the returned `RecordDef`s are structurally clean.\n */\nexport function applyMigration(models, migration) {\n const builders = makeBuilders(models);\n const merged = {\n ...models,\n ...migration(builders)\n };\n const upgrades = {};\n const deprecations = {};\n for (const [modelKey, def] of Object.entries(merged)) {\n if (!isRecordDef(def)) continue;\n const carrier = def;\n const opts = carrier[UPGRADE_OPTIONS_CARRIER];\n if (opts != null) {\n // Strip the carrier so the returned RecordDef is structurally clean.\n delete carrier[UPGRADE_OPTIONS_CARRIER];\n const fieldEntries = {};\n for (const [fieldName, options] of opts) {\n // Only `UpgradeFieldOptions` (which declare `derivedFrom`) flow into the\n // upgrades map; `AdditiveFieldOptions` carry only a literal `default`\n // and have no read-time lens effect.\n if (\"derivedFrom\" in options) {\n fieldEntries[fieldName] = options;\n }\n }\n if (Object.keys(fieldEntries).length > 0) {\n upgrades[modelKey] = fieldEntries;\n }\n }\n const deprecated = carrier[DEPRECATED_FIELDS_CARRIER];\n if (deprecated != null) {\n // Strip the carrier so the returned RecordDef is structurally clean.\n delete carrier[DEPRECATED_FIELDS_CARRIER];\n const fieldEntries = {};\n for (const [fieldName, info] of deprecated) {\n fieldEntries[fieldName] = info;\n }\n if (Object.keys(fieldEntries).length > 0) {\n deprecations[modelKey] = fieldEntries;\n }\n }\n }\n return {\n models: merged,\n upgrades: Object.keys(upgrades).length > 0 ? upgrades : undefined,\n deprecations: Object.keys(deprecations).length > 0 ? deprecations : undefined\n };\n}\nexport function defineMigration(models, migration) {\n return applyMigration(models, migration).models;\n}","/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ModelDefType } from \"./defs.js\";\nimport { isRecordDef, isUnionDef, modelToRef } from \"./utils.js\";\n/**\n * Helper function to resolve a field value, handling functions and transforming\n * types as needed.\n */\nfunction resolveFieldArg(value) {\n // Handle function values\n const resolved = typeof value === \"function\" ? value() : value;\n if (isRecordDef(resolved) || isUnionDef(resolved)) {\n return modelToRef(resolved);\n }\n\n // For primitive types and other Types\n return resolved;\n}\nexport function defineRecord(name, record) {\n const entries = Object.entries(record.fields).map(([key, value]) => [key, resolveFieldArg(value)]);\n const fields = Object.fromEntries(entries);\n return {\n type: ModelDefType.RECORD,\n name: name,\n docs: record.docs,\n fields\n };\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { applyMigration } from \"./defineMigration.js\";\nimport { isRecordDef } from \"./utils.js\";\nexport function defineSchema(models) {\n return {\n type: \"initial\",\n version: 1,\n models\n };\n}\nexport function defineSchemaUpdate(name, migration) {\n return {\n name,\n migration\n };\n}\n/**\n * Shallow-merge two `[modelKey][fieldName]` maps; `override` wins per field.\n * Used for both migrations (so `withMigrations` supplements `addField` sugar)\n * and deprecations (so each version's deprecations accumulate forward). The\n * maps are combined at both the model and field level.\n */\nfunction mergeByModelField(base, override) {\n if (base == null) return override;\n if (override == null) return base;\n const result = {\n ...base\n };\n for (const [modelKey, fields] of Object.entries(override)) {\n result[modelKey] = {\n ...result[modelKey],\n ...fields\n };\n }\n return result;\n}\n\n/**\n * Drop migration entries that no longer correspond to a field on a record in\n * `models`. Required because `mergeByModelField` is monotonic — a later\n * `addSchemaUpdate` that removes or retypes a field would otherwise leave a\n * stale entry in the accumulator. Entries are dropped when:\n * - the model key is no longer present,\n * - the model is no longer a record (e.g. replaced by a union), or\n * - the field name is no longer one of the record's fields.\n */\nfunction pruneMigrations(migrations, models) {\n if (migrations == null) return undefined;\n const result = {};\n for (const [modelKey, fields] of Object.entries(migrations)) {\n const def = models[modelKey];\n if (!isRecordDef(def)) continue;\n const recordFields = def.fields;\n const kept = {};\n for (const [fieldName, migration] of Object.entries(fields)) {\n if (fieldName in recordFields) {\n kept[fieldName] = migration;\n }\n }\n if (Object.keys(kept).length > 0) {\n result[modelKey] = kept;\n }\n }\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\n/**\n * Convert the version-agnostic `FieldDeprecations` collected by `applyMigration`\n * (just `{ message? }`) into `VersionDeprecations` by stamping `fromVersion`.\n */\nfunction stampDeprecationVersions(deprecations, version) {\n if (deprecations == null) return undefined;\n const result = {};\n for (const [modelKey, fields] of Object.entries(deprecations)) {\n const out = {};\n for (const [fieldName, info] of Object.entries(fields)) {\n out[fieldName] = {\n fromVersion: version,\n ...info\n };\n }\n result[modelKey] = out;\n }\n return result;\n}\nclass SchemaVersionBuilderImpl {\n models;\n version;\n previous;\n _migrations;\n _deprecations;\n constructor(models, version, previous, migrations, deprecations) {\n this.models = models;\n this.version = version;\n this.previous = previous;\n this._migrations = migrations;\n this._deprecations = deprecations;\n }\n addSchemaUpdate(update) {\n // applyMigration returns the merged models, any sugar-form upgrades from\n // `addField(name, type, { derivedFrom })`, and any `deprecateField` calls.\n const {\n models,\n upgrades,\n deprecations\n } = applyMigration(this.models, update.migration);\n const merged = mergeByModelField(this._migrations, upgrades);\n // Reconcile against the new models: a later update that retypes a field\n // must drop the prior step's stale migration entry.\n const pruned = pruneMigrations(merged, models);\n // Attach this version to each freshly-deprecated field, then merge forward.\n const thisVersionDeprecations = stampDeprecationVersions(deprecations, this.version);\n const mergedDeprecations = mergeByModelField(this._deprecations, thisVersionDeprecations);\n return new SchemaVersionBuilderImpl(models, this.version, this.previous, pruned, mergedDeprecations);\n }\n withMigrations(migrations) {\n const merged = mergeByModelField(this._migrations, migrations);\n const pruned = pruneMigrations(merged, this.models);\n return new SchemaVersionBuilderImpl(this.models, this.version, this.previous, pruned, this._deprecations);\n }\n build() {\n return {\n type: \"versioned\",\n models: {\n ...this.models\n },\n version: this.version,\n previous: this.previous,\n ...(this._migrations != null ? {\n migrations: this._migrations\n } : {}),\n ...(this._deprecations != null ? {\n deprecations: this._deprecations\n } : {})\n };\n }\n}\nexport function nextSchema(previous) {\n const version = previous.version + 1;\n const deprecations = \"deprecations\" in previous ? previous.deprecations : undefined;\n return new SchemaVersionBuilderImpl(previous.models, version, previous, undefined, deprecations);\n}"]}
@@ -41,30 +41,36 @@ export interface RecordBuilder<T extends Record<string, Type>> {
41
41
  const K extends string,
42
42
  V extends Type
43
43
  >(name: K, type: V, options?: FieldOptions): RecordBuilder<T & { [k in K] : V }>;
44
- removeField<K extends keyof T & string>(name: K): RecordBuilder<Omit<T, K>>;
44
+ deprecateField<K extends keyof T & string>(name: K, message?: string): RecordBuilder<T>;
45
45
  build(): RecordDef<T>;
46
46
  }
47
47
  export interface UnionBuilder<S extends UnionVariants> {
48
48
  addVariant<const K extends string>(name: K, modelDefOrRef: UnionVariantArg): UnionBuilder<S & { [k in K] : Ref }>;
49
49
  build(): UnionDef<S>;
50
50
  }
51
+ export interface FieldDeprecation {
52
+ readonly message?: string;
53
+ }
51
54
  /** Per-model field migrations: `[modelKey][fieldName]` → upgrade options. */
52
55
  export type FieldUpgrades = Record<string, Record<string, UpgradeFieldOptions<Record<string, unknown>>>>;
56
+ export type FieldDeprecations = Record<string, Record<string, FieldDeprecation>>;
53
57
  export interface MigrationResult<M extends ModelDefs> {
54
58
  readonly models: M;
55
59
  readonly upgrades?: FieldUpgrades;
60
+ readonly deprecations?: FieldDeprecations;
56
61
  }
57
62
  /**
58
- * Lower-level entry point that returns both the merged models AND any
59
- * `UpgradeFieldOptions` collected via `addField(name, type, options)` during
60
- * the migration callback. Used by `addSchemaUpdate` to fold sugar-form
61
- * upgrades into a `VersionedSchema`'s migrations map.
63
+ * Lower-level entry point that returns the merged models plus the per-field
64
+ * metadata collected during the migration callback: `UpgradeFieldOptions` from
65
+ * `addField(name, type, options)` and deprecations from `deprecateField(name)`.
66
+ * Used by `addSchemaUpdate` to fold sugar-form upgrades into a
67
+ * `VersionedSchema`'s migrations map and deprecations into its deprecations map.
62
68
  *
63
- * Each `RecordBuilderImpl.build()` attaches its collected options to the
64
- * produced `RecordDef` via a non-enumerable carrier property; this function
65
- * walks the merged result, extracts the options keyed by the user's chosen
66
- * output key (so renames are handled), and strips the carrier so the returned
67
- * `RecordDef`s are structurally clean.
69
+ * Each `RecordBuilderImpl.build()` attaches its collected upgrade options and
70
+ * deprecations to the produced `RecordDef` via two non-enumerable carrier
71
+ * properties; this function walks the merged result, extracts both keyed by the
72
+ * user's chosen output key (so renames are handled), and strips the carriers so
73
+ * the returned `RecordDef`s are structurally clean.
68
74
  */
69
75
  export declare function applyMigration<
70
76
  const T extends ModelDefs,
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,uBAAuB;AAErC,cAAc,WAAW,WAAyB,UAAU,qBAAqB;AAEjF,cAAc,KAAK,YAAY;;AAI/B,YAAY,iBAAiB;;AAG7B,YAAY,OAAO,UAAU,aAAa;AAE1C,YAAY,cAAc,UAAU,gBACjC,WAAW,KAAI,EAAE,WAAW,eAAe,KAAK,aAAa,KAC1D,EAAE,WAAW,gBAAgB,KAAK,cAAc;;;;;;;;KAWjD,+CAKD,cACA;gBAAiB;;;;;;;;;;AAUrB,iBAAiB,oBAAoB,aAAa,yBAAyB;UAChE,aAAa,oBAAoB;UACjC,UAAU;;;;;;AAOrB,iBAAiB,qBAAqB;UAC3B,UAAU;;AAGrB,YAAY,eACR,oBAAoB,2BACpB;AAuCJ,iBAAiB,cAAc,UAAU,eAAe,OAAO;CAE7D;QAAe;EAAkB,UAAU;GACzC,MAAM,GACN,MAAM,GACN,UAAU,eACT,cAAc,OAAO,KAAK,KAAI;CACjC,YAAY,gBAAgB,YAC1B,MAAM,IACL,cAAc,KAAK,GAAG;CACzB,SAAS,UAAU;;AAGrB,iBAAiB,aAAa,UAAU,eAAe;CAErD,iBAAiB,kBACf,MAAM,GACN,eAAe,kBACd,aAAa,OAAO,KAAK,KAAI;CAChC,SAAS,SAAS;;;AAwIpB,YAAY,gBAAgB,eAE1B,eAAe,oBAAoB;AAGrC,iBAAiB,gBAAgB,UAAU,WAAW;UAC3C,QAAQ;UACR,WAAW;;;;;;;;;;;;;;AAetB,OAAO,iBAAS;OACR,UAAU;OACV,UAAU;EAEhB,QAAQ,GACR,YAAY,QAAQ,cAAc,OAAO,IACxC,gBAAgB,IAAI;AAqCvB,OAAO,iBAAS;OACR,UAAU;OACV,UAAU;EAEhB,QAAQ,GACR,YAAY,QAAQ,cAAc,OAAO,IACxC,IAAI","names":[],"sources":["../../src/defineMigration.ts"],"version":3,"file":"defineMigration.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,uBAAuB;AAErC,cAAc,WAAW,WAAyB,UAAU,qBAAqB;AAEjF,cAAc,KAAK,YAAY;;AAI/B,YAAY,iBAAiB;;AAG7B,YAAY,OAAO,UAAU,aAAa;AAE1C,YAAY,cAAc,UAAU,gBACjC,WAAW,KAAI,EAAE,WAAW,eAAe,KAAK,aAAa,KAC1D,EAAE,WAAW,gBAAgB,KAAK,cAAc;;;;;;;;KAWjD,+CAKD,cACA;gBAAiB;;;;;;;;;;AAUrB,iBAAiB,oBAAoB,aAAa,yBAAyB;UAChE,aAAa,oBAAoB;UACjC,UAAU;;;;;;AAOrB,iBAAiB,qBAAqB;UAC3B,UAAU;;AAGrB,YAAY,eACR,oBAAoB,2BACpB;AAuCJ,iBAAiB,cAAc,UAAU,eAAe,OAAO;CAE7D;QAAe;EAAkB,UAAU;GACzC,MAAM,GACN,MAAM,GACN,UAAU,eACT,cAAc,OAAO,KAAK,KAAI;CACjC,eAAe,gBAAgB,YAC7B,MAAM,GACN,mBACC,cAAc;CACjB,SAAS,UAAU;;AAGrB,iBAAiB,aAAa,UAAU,eAAe;CAErD,iBAAiB,kBACf,MAAM,GACN,eAAe,kBACd,aAAa,OAAO,KAAK,KAAI;CAChC,SAAS,SAAS;;AAsDpB,iBAAiB,iBAAiB;UACvB;;;AA2GX,YAAY,gBAAgB,eAE1B,eAAe,oBAAoB;AAGrC,YAAY,oBAAoB,eAE9B,eAAe;AAGjB,iBAAiB,gBAAgB,UAAU,WAAW;UAC3C,QAAQ;UACR,WAAW;UACX,eAAe;;;;;;;;;;;;;;;AAgB1B,OAAO,iBAAS;OACR,UAAU;OACV,UAAU;EAEhB,QAAQ,GACR,YAAY,QAAQ,cAAc,OAAO,IACxC,gBAAgB,IAAI;AAuDvB,OAAO,iBAAS;OACR,UAAU;OACV,UAAU;EAEhB,QAAQ,GACR,YAAY,QAAQ,cAAc,OAAO,IACxC,IAAI","names":[],"sources":["../../src/defineMigration.ts"],"version":3,"file":"defineMigration.d.ts"}
@@ -9,12 +9,18 @@ export interface FieldMigration {
9
9
  readonly derivedFrom: readonly string[];
10
10
  }
11
11
  export type VersionMigrations = Record<string, Record<string, FieldMigration>>;
12
+ export interface FieldDeprecationInfo {
13
+ readonly fromVersion: number;
14
+ readonly message?: string;
15
+ }
16
+ export type VersionDeprecations = Record<string, Record<string, FieldDeprecationInfo>>;
12
17
  export interface VersionedSchema<T extends ModelDefs = ModelDefs> {
13
18
  readonly type: "versioned";
14
19
  readonly models: T;
15
20
  readonly version: number;
16
21
  readonly previous: SchemaDefinition;
17
22
  readonly migrations?: VersionMigrations;
23
+ readonly deprecations?: VersionDeprecations;
18
24
  }
19
25
  export type SchemaDefinition<T extends ModelDefs = ModelDefs> = InitialSchema<T> | VersionedSchema<T>;
20
26
  export declare function defineSchema<T extends ModelDefs>(models: T): InitialSchema<T>;
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,qBAAqB;AAEnC,cAAc,iBAAiB;AAE/B,iBAAiB,cAAc,UAAU,YAAY,WAAW;UACrD,MAAM;UACN,SAAS;UACT,QAAQ;;AAGnB,iBAAiB,eAAe;UACrB;;AAGX,YAAY,oBAAoB,eAAe,eAAe;AAE9D,iBAAiB,gBAAgB,UAAU,YAAY,WAAW;UACvD,MAAM;UACN,QAAQ;UACR;UACA,UAAU;UACV,aAAa;;AAGxB,YAAY,iBAAiB,UAAU,YAAY,aAC/C,cAAc,KACd,gBAAgB;AAEpB,OAAO,iBAAS,aAAa,UAAU,WAAW,QAAQ,IAAI,cAAc;AAI5E,iBAAiB;CAAa,UAAU;CAAW,UAAU;EAAW;UAC7D;UACA,YAAY,QAAQ,cAAc,OAAO;;AAGpD,OAAO,iBAAS;CAAmB,UAAU;CAAW,UAAU;EAChE,cACA,YAAY,QAAQ,cAAc,OAAO,IACxC,aAAa,GAAG;AAInB,iBAAiB,qBAAqB,UAAU,WAAW;CACzD,gBAAgB,UAAU,WACxB,QAAQ,aAAa,GAAG,KACvB,qBAAqB,IAAI;CAC5B,eAAe,YAAY,oBAAoB,qBAAqB;CACpE,SAAS,gBAAgB;;AAyG3B,OAAO,iBAAS,WAAW,UAAU,WACnC,UAAU,iBAAiB,KAC1B,qBAAqB","names":[],"sources":["../../src/defineSchemaUpdate.ts"],"version":3,"file":"defineSchemaUpdate.d.ts"}
1
+ {"mappings":"AAgBA,cAAgC,qBAAqB;AAErD,cAAc,iBAAiB;AAG/B,iBAAiB,cAAc,UAAU,YAAY,WAAW;UACrD,MAAM;UACN,SAAS;UACT,QAAQ;;AAGnB,iBAAiB,eAAe;UACrB;;AAGX,YAAY,oBAAoB,eAAe,eAAe;AAE9D,iBAAiB,qBAAqB;UAC3B;UACA;;AAEX,YAAY,sBAAsB,eAAe,eAAe;AAEhE,iBAAiB,gBAAgB,UAAU,YAAY,WAAW;UACvD,MAAM;UACN,QAAQ;UACR;UACA,UAAU;UACV,aAAa;UACb,eAAe;;AAG1B,YAAY,iBAAiB,UAAU,YAAY,aAC/C,cAAc,KACd,gBAAgB;AAEpB,OAAO,iBAAS,aAAa,UAAU,WAAW,QAAQ,IAAI,cAAc;AAI5E,iBAAiB;CAAa,UAAU;CAAW,UAAU;EAAW;UAC7D;UACA,YAAY,QAAQ,cAAc,OAAO;;AAGpD,OAAO,iBAAS;CAAmB,UAAU;CAAW,UAAU;EAChE,cACA,YAAY,QAAQ,cAAc,OAAO,IACxC,aAAa,GAAG;AAInB,iBAAiB,qBAAqB,UAAU,WAAW;CACzD,gBAAgB,UAAU,WACxB,QAAQ,aAAa,GAAG,KACvB,qBAAqB,IAAI;CAC5B,eAAe,YAAY,oBAAoB,qBAAqB;CACpE,SAAS,gBAAgB;;AAgJ3B,OAAO,iBAAS,WAAW,UAAU,WACnC,UAAU,iBAAiB,KAC1B,qBAAqB","names":[],"sources":["../../src/defineSchemaUpdate.ts"],"version":3,"file":"defineSchemaUpdate.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@palantir/pack.schema",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "API package for PACK schema functionality",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -20,7 +20,6 @@ import { applyMigration, defineMigration } from "../defineMigration.js";
20
20
  import { defineRecord } from "../defineRecord.js";
21
21
  import { defineSchema, defineSchemaUpdate, nextSchema } from "../defineSchemaUpdate.js";
22
22
  import { defineUnion } from "../defineUnion.js";
23
- import type { RecordDef } from "../defs.js";
24
23
  import * as P from "../primitives.js";
25
24
 
26
25
  describe("addField with upgrade options", () => {
@@ -46,7 +45,7 @@ describe("addField with upgrade options", () => {
46
45
  .addField("strokeColor", P.Optional(P.String), {
47
46
  derivedFrom: ["color"],
48
47
  })
49
- .removeField("color")
48
+ .deprecateField("color")
50
49
  .build(),
51
50
  }),
52
51
  );
@@ -59,7 +58,7 @@ describe("addField with upgrade options", () => {
59
58
  expect(Object.keys(v2.migrations?.ShapeBox?.fillColor ?? {})).toEqual(["derivedFrom"]);
60
59
  });
61
60
 
62
- it("removeField strips the field from the resulting record fields", () => {
61
+ it("deprecateField keeps the field and records the deprecation", () => {
63
62
  const colorSplit = defineSchemaUpdate(
64
63
  "colorSplit",
65
64
  (schema: SchemaBuilder<typeof v1.models>) => ({
@@ -67,7 +66,7 @@ describe("addField with upgrade options", () => {
67
66
  .addField("fillColor", P.Optional(P.String), {
68
67
  derivedFrom: ["color"],
69
68
  })
70
- .removeField("color")
69
+ .deprecateField("color", "use fillColor/strokeColor")
71
70
  .build(),
72
71
  }),
73
72
  );
@@ -75,10 +74,29 @@ describe("addField with upgrade options", () => {
75
74
  const v2 = nextSchema(v1).addSchemaUpdate(colorSplit).build();
76
75
  const shapeBox = v2.models.ShapeBox;
77
76
  expect(Object.keys(shapeBox.fields).sort()).toEqual([
77
+ "color",
78
78
  "fillColor",
79
79
  "x",
80
80
  "y",
81
81
  ]);
82
+ expect(v2.deprecations?.ShapeBox?.color).toEqual({
83
+ fromVersion: 2,
84
+ message: "use fillColor/strokeColor",
85
+ });
86
+ });
87
+
88
+ it("deprecateField without a message records the version only", () => {
89
+ const update = defineSchemaUpdate(
90
+ "deprecateColor",
91
+ (schema: SchemaBuilder<typeof v1.models>) => ({
92
+ ShapeBox: schema.ShapeBox.deprecateField("color").build(),
93
+ }),
94
+ );
95
+
96
+ const v2 = nextSchema(v1).addSchemaUpdate(update).build();
97
+ expect(v2.deprecations?.ShapeBox?.color).toEqual({ fromVersion: 2 });
98
+ // Field remains present.
99
+ expect((v2.models.ShapeBox.fields as Record<string, unknown>).color).toBeDefined();
82
100
  });
83
101
 
84
102
  it("explicit withMigrations is merged with addField sugar", () => {
@@ -151,19 +169,19 @@ describe("addField with upgrade options", () => {
151
169
  expect(v2.migrations).toBeUndefined();
152
170
  });
153
171
 
154
- it("removeField drops any upgrade option staged for that field name", () => {
172
+ it("deprecateField on an existing field does not affect a new field's upgrade option", () => {
155
173
  const update = defineSchemaUpdate("update", (schema: SchemaBuilder<typeof v1.models>) => ({
156
174
  ShapeBox: schema.ShapeBox
157
- .addField("temp", P.Optional(P.String), {
175
+ .addField("fillColor", P.Optional(P.String), {
158
176
  derivedFrom: ["color"],
159
177
  })
160
- .removeField("temp")
178
+ .deprecateField("color")
161
179
  .build(),
162
180
  }));
163
181
 
164
182
  const v2 = nextSchema(v1).addSchemaUpdate(update).build();
165
- expect(v2.migrations).toBeUndefined();
166
- expect((v2.models.ShapeBox.fields as Record<string, unknown>).temp).toBeUndefined();
183
+ expect(v2.migrations?.ShapeBox?.fillColor?.derivedFrom).toEqual(["color"]);
184
+ expect(v2.deprecations?.ShapeBox?.color).toBeDefined();
167
185
  });
168
186
 
169
187
  it("subsequent addSchemaUpdate does not re-collect options from the prior step", () => {
@@ -288,102 +306,6 @@ describe("addField with upgrade options", () => {
288
306
  expect(Object.getOwnPropertySymbols(merged.ShapeBox)).toEqual([]);
289
307
  });
290
308
 
291
- // Type of v1.models after a prior step adds an optional-string `temp` field
292
- // to ShapeBox. Used to type the input of a later step that calls
293
- // `removeField("temp")` — without this, `temp` is not statically known to
294
- // be in the field set and the call would fail to type-check.
295
- type V1WithTemp = typeof v1.models & {
296
- ShapeBox: RecordDef<
297
- typeof v1.models.ShapeBox["fields"] & { readonly temp: P.Optional<P.String> }
298
- >;
299
- };
300
-
301
- it("a later addSchemaUpdate that removes a field also drops its migration", () => {
302
- const addTemp = defineSchemaUpdate(
303
- "addTemp",
304
- (schema: SchemaBuilder<typeof v1.models>) => ({
305
- ShapeBox: schema.ShapeBox
306
- .addField("temp", P.Optional(P.String), {
307
- derivedFrom: ["color"],
308
- })
309
- .build(),
310
- }),
311
- );
312
-
313
- const removeTemp = defineSchemaUpdate(
314
- "removeTemp",
315
- (schema: SchemaBuilder<V1WithTemp>) => ({
316
- ShapeBox: schema.ShapeBox.removeField("temp").build(),
317
- }),
318
- );
319
-
320
- const v2 = nextSchema(v1).addSchemaUpdate(addTemp).addSchemaUpdate(removeTemp).build();
321
-
322
- expect((v2.models.ShapeBox.fields as Record<string, unknown>).temp).toBeUndefined();
323
- expect(v2.migrations).toBeUndefined();
324
- });
325
-
326
- it("a later update may remove one upgraded field while adding another", () => {
327
- const addTwo = defineSchemaUpdate(
328
- "addTwo",
329
- (schema: SchemaBuilder<typeof v1.models>) => ({
330
- ShapeBox: schema.ShapeBox
331
- .addField("temp", P.Optional(P.String), {
332
- derivedFrom: ["color"],
333
- })
334
- .addField("fillColor", P.Optional(P.String), {
335
- derivedFrom: ["color"],
336
- })
337
- .build(),
338
- }),
339
- );
340
-
341
- const removeTemp = defineSchemaUpdate(
342
- "removeTemp",
343
- (schema: SchemaBuilder<V1WithTemp>) => ({
344
- ShapeBox: schema.ShapeBox.removeField("temp").build(),
345
- }),
346
- );
347
-
348
- const v2 = nextSchema(v1).addSchemaUpdate(addTwo).addSchemaUpdate(removeTemp).build();
349
-
350
- expect(Object.keys(v2.migrations?.ShapeBox ?? {})).toEqual(["fillColor"]);
351
- expect((v2.migrations?.ShapeBox as Record<string, unknown> | undefined)?.temp).toBeUndefined();
352
- });
353
-
354
- it("withMigrations entries are pruned when a later update removes the field", () => {
355
- const noop = defineSchemaUpdate(
356
- "noop",
357
- (schema: SchemaBuilder<typeof v1.models>) => ({
358
- ShapeBox: schema.ShapeBox
359
- .addField("temp", P.Optional(P.String))
360
- .build(),
361
- }),
362
- );
363
-
364
- const removeTemp = defineSchemaUpdate(
365
- "removeTemp",
366
- (schema: SchemaBuilder<V1WithTemp>) => ({
367
- ShapeBox: schema.ShapeBox.removeField("temp").build(),
368
- }),
369
- );
370
-
371
- const v2 = nextSchema(v1)
372
- .addSchemaUpdate(noop)
373
- .withMigrations({
374
- ShapeBox: {
375
- temp: {
376
- derivedFrom: ["color"],
377
- },
378
- },
379
- })
380
- .addSchemaUpdate(removeTemp)
381
- .build();
382
-
383
- expect((v2.models.ShapeBox.fields as Record<string, unknown>).temp).toBeUndefined();
384
- expect(v2.migrations).toBeUndefined();
385
- });
386
-
387
309
  it("withMigrations silently drops entries for fields the model no longer has", () => {
388
310
  const v2 = nextSchema(v1)
389
311
  .withMigrations({