@palantir/pack.document-schema.type-gen 0.32.0 → 0.34.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.
- package/README.md +7 -0
- package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js +1 -1
- package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js.map +1 -1
- package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js +96 -0
- package/build/esm/commands/ir/__tests__/irUpdateSchemaHandler.test.js.map +1 -0
- package/build/esm/commands/ir/__tests__/resolveIrInput.test.js +80 -0
- package/build/esm/commands/ir/__tests__/resolveIrInput.test.js.map +1 -1
- package/build/esm/commands/ir/irDeployHandler.js +6 -1
- package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
- package/build/esm/commands/ir/irGenAssetHandler.js +6 -1
- package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -1
- package/build/esm/commands/ir/irGenTypesHandler.js +7 -3
- package/build/esm/commands/ir/irGenTypesHandler.js.map +1 -1
- package/build/esm/commands/ir/irUpdateSchemaHandler.js +19 -12
- package/build/esm/commands/ir/irUpdateSchemaHandler.js.map +1 -1
- package/build/esm/commands/ir/resolveIrInput.js +6 -5
- package/build/esm/commands/ir/resolveIrInput.js.map +1 -1
- package/build/esm/commands/schema/registerSchemaCommands.js +1 -1
- package/build/esm/commands/schema/registerSchemaCommands.js.map +1 -1
- package/build/esm/commands/schema/schemaIrHandler.js +15 -8
- package/build/esm/commands/schema/schemaIrHandler.js.map +1 -1
- package/build/esm/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.js.map +1 -1
- package/build/esm/lib/pack-docschema-api/pack-docschema-ir/unionDef.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
- package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
- package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +71 -0
- package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
- package/build/esm/utils/ir/convertIrToWireSchema.js +10 -7
- package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
- package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
- package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js +178 -0
- package/build/esm/utils/schema/__tests__/assertSdkNamesUnique.test.js.map +1 -0
- package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js +71 -1
- package/build/esm/utils/schema/__tests__/generateInternalFromSchema.test.js.map +1 -1
- package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js +122 -3
- package/build/esm/utils/schema/__tests__/resolveSchemaChain.test.js.map +1 -1
- package/build/esm/utils/schema/assertSdkNamesUnique.js +151 -0
- package/build/esm/utils/schema/assertSdkNamesUnique.js.map +1 -0
- package/build/esm/utils/schema/generateIndexFromSchema.js +3 -5
- package/build/esm/utils/schema/generateIndexFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateInternalFromSchema.js +42 -19
- package/build/esm/utils/schema/generateInternalFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateModelMetadataFromSchema.js +9 -11
- package/build/esm/utils/schema/generateModelMetadataFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateScopeFromSchema.js +6 -9
- package/build/esm/utils/schema/generateScopeFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionedTypesFromSchema.js +8 -9
- package/build/esm/utils/schema/generateVersionedTypesFromSchema.js.map +1 -1
- package/build/esm/utils/schema/generateVersionedZodFromSchema.js +13 -16
- package/build/esm/utils/schema/generateVersionedZodFromSchema.js.map +1 -1
- package/build/esm/utils/schema/resolveSchemaChain.js +137 -21
- package/build/esm/utils/schema/resolveSchemaChain.js.map +1 -1
- package/build/esm/utils/schema/runtimeSchema.js +47 -0
- package/build/esm/utils/schema/runtimeSchema.js.map +1 -1
- package/build/esm/utils/schema/writeAllSdkFiles.js +2 -0
- package/build/esm/utils/schema/writeAllSdkFiles.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
- package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
- package/build/esm/utils/steps/convertStepsToIr.js +30 -2
- package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
- package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts +2 -0
- package/build/types/commands/ir/__tests__/irUpdateSchemaHandler.test.d.ts.map +1 -0
- package/build/types/commands/ir/irDeployHandler.d.ts +1 -1
- package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
- package/build/types/commands/ir/irGenAssetHandler.d.ts +1 -1
- package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -1
- package/build/types/commands/ir/irGenTypesHandler.d.ts.map +1 -1
- package/build/types/commands/ir/irUpdateSchemaHandler.d.ts.map +1 -1
- package/build/types/commands/ir/resolveIrInput.d.ts +1 -0
- package/build/types/commands/ir/resolveIrInput.d.ts.map +1 -1
- package/build/types/commands/schema/schemaIrHandler.d.ts +3 -3
- package/build/types/commands/schema/schemaIrHandler.d.ts.map +1 -1
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts +1 -0
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/schemaMeta.d.ts.map +1 -1
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts +3 -0
- package/build/types/lib/pack-docschema-api/pack-docschema-ir/unionDef.d.ts.map +1 -1
- package/build/types/utils/ir/convertIrToWireSchema.d.ts +2 -2
- package/build/types/utils/ir/convertIrToWireSchema.d.ts.map +1 -1
- package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts +2 -0
- package/build/types/utils/schema/__tests__/assertSdkNamesUnique.test.d.ts.map +1 -0
- package/build/types/utils/schema/assertSdkNamesUnique.d.ts +9 -0
- package/build/types/utils/schema/assertSdkNamesUnique.d.ts.map +1 -0
- package/build/types/utils/schema/generateIndexFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateInternalFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateModelMetadataFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateScopeFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionedTypesFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/generateVersionedZodFromSchema.d.ts.map +1 -1
- package/build/types/utils/schema/resolveSchemaChain.d.ts +24 -1
- package/build/types/utils/schema/resolveSchemaChain.d.ts.map +1 -1
- package/build/types/utils/schema/runtimeSchema.d.ts +19 -0
- package/build/types/utils/schema/runtimeSchema.d.ts.map +1 -1
- package/build/types/utils/schema/writeAllSdkFiles.d.ts.map +1 -1
- package/build/types/utils/steps/convertStepsToIr.d.ts +4 -0
- package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
- package/package.json +19 -5
- package/build/esm/utils/unknownVariantSuffix.js +0 -22
- package/build/esm/utils/unknownVariantSuffix.js.map +0 -1
- package/build/types/utils/unknownVariantSuffix.d.ts +0 -3
- package/build/types/utils/unknownVariantSuffix.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateScopeFromSchema.js","names":["GENERATED_FILE_HEADER","resolveMinVersion","modelName","MODELS_PATH","typesFilePath","versionedTypeName","versionedWriteTypeName","writeTypesFilePath","generateScopeFromChain","resolved","minSupportedVersion","chain","minVersion","supportedVersions","filter","v","version","latestIr","length","ir","allModelNames","modelKey","Object","keys","models","push","output","modelImports","map","n","typeImportsFromModels","join","readTypeImports","writeTypeImports","modelDef","entries","type","sort","writeType","readType","unionMembers","handlerProps"],"sources":["generateScopeFromSchema.ts"],"sourcesContent":["/*\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 { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n modelName,\n MODELS_PATH,\n typesFilePath,\n versionedTypeName,\n versionedWriteTypeName,\n writeTypesFilePath,\n} from \"./runtimeSchema.js\";\n\n/**\n * Generate versionedDocRef.ts from a versioned schema chain.\n *\n * Produces:\n * - Per-version VersionedDocRef_vN interfaces extending DocumentRef<DocumentModel>\n * - Union type VersionedDocRef = VersionedDocRef_v1 | VersionedDocRef_v2\n *\n * Every model gets a version-specific overload on every version so that\n * write data is always typed to the exact version, not the latest.\n */\nexport function generateScopeFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): string {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n // Filter to supported versions\n const supportedVersions = chain.filter(v => v.version >= minVersion);\n\n // Collect all model names from the latest IR\n const latestIr = chain[chain.length - 1]!.ir;\n const allModelNames: string[] = [];\n for (const modelKey of Object.keys(latestIr.models)) {\n allModelNames.push(modelKey);\n }\n\n // Build output\n let output = GENERATED_FILE_HEADER;\n\n // Import model-types\n output +=\n `import type { DocumentRef, EditDescription, PresencePublishOptions, RecordId, RecordRef } from \"@palantir/pack.document-schema.model-types\";\\n`;\n\n // Import model types from models.ts\n const modelImports = allModelNames.map(n => modelName(n));\n const typeImportsFromModels = [\"DocumentModel\", ...modelImports];\n output += `import type { ${typeImportsFromModels.join(\", \")} } from \"${MODELS_PATH}\";\\n`;\n\n // Import per-version types\n for (const { version, ir } of supportedVersions) {\n const readTypeImports: string[] = [];\n const writeTypeImports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n writeTypeImports.push(versionedWriteTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n }\n }\n\n if (readTypeImports.length > 0) {\n output += `import type { ${readTypeImports.sort().join(\", \")} } from \"${\n typesFilePath(version)\n }\";\\n`;\n }\n if (writeTypeImports.length > 0) {\n output += `import type { ${writeTypeImports.sort().join(\", \")} } from \"${\n writeTypesFilePath(version)\n }\";\\n`;\n }\n }\n\n output += \"\\n\";\n\n // Generate per-version VersionedDocRef interfaces extending DocumentRef.\n for (const { version, ir } of supportedVersions) {\n output += `export interface VersionedDocRef_v${version} extends DocumentRef<DocumentModel> {\\n`;\n output += ` readonly version: ${version};\\n`;\n\n // updateRecord overloads — record models get write types, union models get Partial<read>\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const writeType = versionedWriteTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: ${writeType}): Promise<void>;\\n`;\n } else if (modelDef.type === \"union\") {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: Partial<${readType}>): Promise<void>;\\n`;\n }\n }\n\n // setRecord overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` setRecord(model: typeof ${\n modelName(modelKey)\n }, id: RecordId, data: ${readType}): Promise<void>;\\n`;\n }\n\n // custom presence overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateCustomPresence(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}, options?: PresencePublishOptions): void;\\n`;\n }\n\n // custom activity description overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` describeEdit(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}): EditDescription<typeof ${modelName(modelKey)}>;\\n`;\n }\n\n output += `}\\n\\n`;\n }\n\n // Union type\n if (supportedVersions.length === 1) {\n output += `export type VersionedDocRef = VersionedDocRef_v${supportedVersions[0]!.version};\\n`;\n } else {\n const unionMembers = supportedVersions.map(v => `VersionedDocRef_v${v.version}`).join(\" | \");\n output += `export type VersionedDocRef = ${unionMembers};\\n`;\n }\n\n // asVersioned — identity cast to unlock version-specific write overloads\n output += `\\n/** Narrow a DocumentRef to a version-discriminated type for type-safe writes. */\\n`;\n output += `export function asVersioned(docRef: DocumentRef<DocumentModel>): VersionedDocRef {\\n`;\n output += ` return docRef as VersionedDocRef;\\n`;\n output += `}\\n`;\n\n // matchVersion — exhaustive version handler\n const handlerProps = supportedVersions.map(\n v => ` readonly ${v.version}: (doc: VersionedDocRef_v${v.version}) => R;`,\n ).join(\"\\n\");\n\n output += `\\n/**\\n`;\n output += ` * Exhaustive version handler. TypeScript enforces that every supported\\n`;\n output += ` * version has a corresponding handler -- adding a new schema version\\n`;\n output += ` * produces a compile error at every call site until handled.\\n`;\n output += ` */\\n`;\n output += `export function matchVersion<R>(\\n`;\n output += ` doc: VersionedDocRef,\\n`;\n output += ` handlers: {\\n`;\n output += handlerProps + \"\\n\";\n output += ` },\\n`;\n output += `): R {\\n`;\n output += ` switch (doc.version) {\\n`;\n for (const { version } of supportedVersions) {\n output += ` case ${version}:\\n`;\n output += ` return handlers[${version}](doc);\\n`;\n }\n output += ` default:\\n`;\n output += ` throw new Error(\\`Unexpected document version: \\${(doc as any).version}\\`);\\n`;\n output += ` }\\n`;\n output += `}\\n`;\n\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"generateScopeFromSchema.js","names":["GENERATED_FILE_HEADER","resolveMinVersion","modelName","MODELS_PATH","typesFilePath","versionedDocRefName","versionedTypeName","versionedWriteTypeName","writeTypesFilePath","generateScopeFromChain","resolved","minSupportedVersion","chain","minVersion","supportedVersions","filter","v","version","latestIr","length","ir","allModelNames","modelKey","Object","keys","models","push","output","modelImports","map","n","typeImportsFromModels","join","readTypeImports","writeTypeImports","modelDef","entries","type","sort","docRefName","writeType","readType","unionMembers","handlerProps"],"sources":["generateScopeFromSchema.ts"],"sourcesContent":["/*\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 { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport type { ResolvedIrChain } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n modelName,\n MODELS_PATH,\n typesFilePath,\n versionedDocRefName,\n versionedTypeName,\n versionedWriteTypeName,\n writeTypesFilePath,\n} from \"./runtimeSchema.js\";\n\n/**\n * Generate versionedDocRef.ts from a versioned schema chain.\n *\n * Produces:\n * - Per-version VersionedDocRef_vN interfaces extending DocumentRef<DocumentModel>\n * - Union type VersionedDocRef = VersionedDocRef_v1 | VersionedDocRef_v2\n *\n * Every model gets a version-specific overload on every version so that\n * write data is always typed to the exact version, not the latest.\n */\nexport function generateScopeFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): string {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n // Filter to supported versions\n const supportedVersions = chain.filter(v => v.version >= minVersion);\n\n // Collect all model names from the latest IR\n const latestIr = chain[chain.length - 1]!.ir;\n const allModelNames: string[] = [];\n for (const modelKey of Object.keys(latestIr.models)) {\n allModelNames.push(modelKey);\n }\n\n // Build output\n let output = GENERATED_FILE_HEADER;\n\n // Import model-types\n output +=\n `import type { DocumentRef, EditDescription, PresencePublishOptions, RecordId, RecordRef } from \"@palantir/pack.document-schema.model-types\";\\n`;\n\n // Import model types from models.ts\n const modelImports = allModelNames.map(n => modelName(n));\n const typeImportsFromModels = [\"DocumentModel\", ...modelImports];\n output += `import type { ${typeImportsFromModels.join(\", \")} } from \"${MODELS_PATH}\";\\n`;\n\n // Import per-version types\n for (const { version, ir } of supportedVersions) {\n const readTypeImports: string[] = [];\n const writeTypeImports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n writeTypeImports.push(versionedWriteTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n readTypeImports.push(versionedTypeName(modelKey, version));\n }\n }\n\n if (readTypeImports.length > 0) {\n output += `import type { ${readTypeImports.sort().join(\", \")} } from \"${\n typesFilePath(version)\n }\";\\n`;\n }\n if (writeTypeImports.length > 0) {\n output += `import type { ${writeTypeImports.sort().join(\", \")} } from \"${\n writeTypesFilePath(version)\n }\";\\n`;\n }\n }\n\n output += \"\\n\";\n\n // Generate per-version VersionedDocRef interfaces extending DocumentRef.\n for (const { version, ir } of supportedVersions) {\n const docRefName = versionedDocRefName(version);\n output += `export interface ${docRefName} extends DocumentRef<DocumentModel> {\\n`;\n output += ` readonly version: ${version};\\n`;\n\n // updateRecord overloads — record models get write types, union models get Partial<read>\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const writeType = versionedWriteTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: ${writeType}): Promise<void>;\\n`;\n } else if (modelDef.type === \"union\") {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateRecord(ref: RecordRef<typeof ${\n modelName(modelKey)\n }>, data: Partial<${readType}>): Promise<void>;\\n`;\n }\n }\n\n // setRecord overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` setRecord(model: typeof ${\n modelName(modelKey)\n }, id: RecordId, data: ${readType}): Promise<void>;\\n`;\n }\n\n // custom presence overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` updateCustomPresence(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}, options?: PresencePublishOptions): void;\\n`;\n }\n\n // custom activity description overloads\n for (const [modelKey] of Object.entries(ir.models)) {\n const readType = versionedTypeName(modelKey, version);\n output += ` describeEdit(model: typeof ${\n modelName(modelKey)\n }, data: ${readType}): EditDescription<typeof ${modelName(modelKey)}>;\\n`;\n }\n\n output += `}\\n\\n`;\n }\n\n // Union type\n const unionMembers = supportedVersions.map(v => versionedDocRefName(v.version)).join(\" | \");\n output += `export type VersionedDocRef = ${unionMembers};\\n`;\n\n // asVersioned — identity cast to unlock version-specific write overloads\n output += `\\n/** Narrow a DocumentRef to a version-discriminated type for type-safe writes. */\\n`;\n output += `export function asVersioned(docRef: DocumentRef<DocumentModel>): VersionedDocRef {\\n`;\n output += ` return docRef as VersionedDocRef;\\n`;\n output += `}\\n`;\n\n // matchVersion — exhaustive version handler\n const handlerProps = supportedVersions.map(\n v => ` readonly ${v.version}: (doc: ${versionedDocRefName(v.version)}) => R;`,\n ).join(\"\\n\");\n\n output += `\\n/**\\n`;\n output += ` * Exhaustive version handler. TypeScript enforces that every supported\\n`;\n output += ` * version has a corresponding handler -- adding a new schema version\\n`;\n output += ` * produces a compile error at every call site until handled.\\n`;\n output += ` */\\n`;\n output += `export function matchVersion<R>(\\n`;\n output += ` doc: VersionedDocRef,\\n`;\n output += ` handlers: {\\n`;\n output += handlerProps + \"\\n\";\n output += ` },\\n`;\n output += `): R {\\n`;\n output += ` switch (doc.version) {\\n`;\n for (const { version } of supportedVersions) {\n output += ` case ${version}:\\n`;\n output += ` return handlers[${version}](doc);\\n`;\n }\n output += ` default:\\n`;\n output += ` throw new Error(\\`Unexpected document version: \\${(doc as any).version}\\`);\\n`;\n output += ` }\\n`;\n output += `}\\n`;\n\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,12 +15,10 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { UNKNOWN_UNION_VARIANT } from "@palantir/pack.document-schema.model-types";
|
|
18
|
-
import { formatVariantName } from "@palantir/pack.schema";
|
|
19
18
|
import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
|
|
20
19
|
import { collectReferencedTypes, convertFieldTypeToTypeScript, detectUsedRefTypes } from "../ir/irFieldHelpers.js";
|
|
21
|
-
import { UNKNOWN_VARIANT_SUFFIX } from "../unknownVariantSuffix.js";
|
|
22
20
|
import { resolveMinVersion } from "./resolveSchemaChain.js";
|
|
23
|
-
import { knownTypeName, narrowKnownFunctionName, typesFilePath, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
|
|
21
|
+
import { knownTypeName, narrowKnownFunctionName, typeGuardName, typesFilePath, unionVariantName, versionedTypeName, versionedWriteTypeName } from "./runtimeSchema.js";
|
|
24
22
|
/**
|
|
25
23
|
* Generate read types for a specific schema version.
|
|
26
24
|
*/
|
|
@@ -61,7 +59,7 @@ function generateReadTypesForVersion(version, ir) {
|
|
|
61
59
|
const discriminantField = union.discriminant;
|
|
62
60
|
const variantInterfaces = [];
|
|
63
61
|
for (const [variantName, variantModelKey] of Object.entries(union.variants)) {
|
|
64
|
-
const interfaceName =
|
|
62
|
+
const interfaceName = unionVariantName(typeName, variantName);
|
|
65
63
|
variantInterfaces.push({
|
|
66
64
|
name: interfaceName,
|
|
67
65
|
discriminatorValue: variantName
|
|
@@ -84,7 +82,7 @@ function generateReadTypesForVersion(version, ir) {
|
|
|
84
82
|
}
|
|
85
83
|
}
|
|
86
84
|
const knownVariantNames = variantInterfaces.map(v => v.name);
|
|
87
|
-
const unknownName =
|
|
85
|
+
const unknownName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);
|
|
88
86
|
output += `export type ${unknownName} = UnknownUnionVariant<"${discriminantField}">;\n\n`;
|
|
89
87
|
variantInterfaces.push({
|
|
90
88
|
name: unknownName,
|
|
@@ -102,7 +100,8 @@ function generateReadTypesForVersion(version, ir) {
|
|
|
102
100
|
output += ` return value == null || value.${discriminantField} === "${UNKNOWN_UNION_VARIANT}" ? undefined : value;\n`;
|
|
103
101
|
output += "}\n\n";
|
|
104
102
|
for (const variant of variantInterfaces) {
|
|
105
|
-
|
|
103
|
+
const guardName = typeGuardName(variant.name);
|
|
104
|
+
output += `export function ${guardName}(value: ${typeName}): value is ${variant.name} {\n`;
|
|
106
105
|
output += ` return value.${discriminantField} === "${variant.discriminatorValue}";\n`;
|
|
107
106
|
output += "}\n\n";
|
|
108
107
|
}
|
|
@@ -169,9 +168,9 @@ function generateTypesReExport({
|
|
|
169
168
|
reExports.push(`export type { ${knownTypeName(versioned)} as ${knownTypeName(modelKey)} } from "${typesFilePath(version)}";`, `export { ${narrowKnownFunctionName(versioned)} as ${narrowKnownFunctionName(modelKey)} } from "${typesFilePath(version)}";`);
|
|
170
169
|
// Also re-export union variant types, including the Unknown case
|
|
171
170
|
for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
reExports.push(`export type { ${versionedVariant} as ${
|
|
171
|
+
const versionedVariant = unionVariantName(versioned, variantName);
|
|
172
|
+
const unversionedVariant = unionVariantName(modelKey, variantName);
|
|
173
|
+
reExports.push(`export type { ${versionedVariant} as ${unversionedVariant} } from "${typesFilePath(version)}";`);
|
|
175
174
|
}
|
|
176
175
|
}
|
|
177
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateVersionedTypesFromSchema.js","names":["UNKNOWN_UNION_VARIANT","formatVariantName","GENERATED_FILE_HEADER","collectReferencedTypes","convertFieldTypeToTypeScript","detectUsedRefTypes","UNKNOWN_VARIANT_SUFFIX","resolveMinVersion","knownTypeName","narrowKnownFunctionName","typesFilePath","versionedTypeName","versionedWriteTypeName","generateReadTypesForVersion","version","ir","usedRefTypes","Object","values","models","some","model","type","add","output","size","refTypesList","Array","from","sort","join","modelKey","modelDef","entries","record","typeName","description","field","fields","tsType","fieldType","optional","isOptional","key","union","discriminantField","discriminant","variantInterfaces","variantName","variantModelKey","variants","interfaceName","push","name","discriminatorValue","variantModel","recordTypeName","knownVariantNames","map","v","unknownName","knownName","length","variant","generateWriteTypesForVersion","referencedLocalTypes","Set","localTypesList","generateTypesReExport","reExports","versioned","keys","formattedVariant","versionedVariant","generateVersionedTypesFromChain","resolved","minSupportedVersion","chain","minVersion","readTypes","Map","writeTypes","set","typesReExport"],"sources":["generateVersionedTypesFromSchema.ts"],"sourcesContent":["/*\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 { UNKNOWN_UNION_VARIANT } from \"@palantir/pack.document-schema.model-types\";\nimport { formatVariantName } from \"@palantir/pack.schema\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport {\n collectReferencedTypes,\n convertFieldTypeToTypeScript,\n detectUsedRefTypes,\n} from \"../ir/irFieldHelpers.js\";\nimport { UNKNOWN_VARIANT_SUFFIX } from \"../unknownVariantSuffix.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n knownTypeName,\n narrowKnownFunctionName,\n typesFilePath,\n versionedTypeName,\n versionedWriteTypeName,\n} from \"./runtimeSchema.js\";\n\nexport interface VersionedTypesOutput {\n /** types_vN.ts files keyed by version number */\n readTypes: Map<number, string>;\n /** writeTypes_vN.ts files keyed by version number */\n writeTypes: Map<number, string>;\n /** types.ts re-export of latest version types under unversioned names */\n typesReExport: string;\n}\n\n/**\n * Generate read types for a specific schema version.\n */\nfunction generateReadTypesForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(ir);\n if (Object.values(ir.models).some(model => model.type === \"union\")) {\n usedRefTypes.add(\"UnknownUnionVariant\");\n }\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record interfaces\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const record = modelDef.record;\n const typeName = versionedTypeName(modelKey, version);\n\n if (record.description) {\n output += `/**\\n * ${record.description}\\n */\\n`;\n }\n\n output += `export interface ${typeName} {\\n`;\n\n for (const field of record.fields) {\n const tsType = convertFieldTypeToTypeScript(field.fieldType, version);\n const optional = field.isOptional ? \"?\" : \"\";\n output += ` readonly ${field.key}${optional}: ${tsType};\\n`;\n }\n\n output += \"}\\n\\n\";\n }\n\n // Generate union types\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const typeName = versionedTypeName(modelKey, version);\n const discriminantField = union.discriminant;\n const variantInterfaces: Array<{ name: string; discriminatorValue: string }> = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const interfaceName = `${typeName}${formatVariantName(variantName)}`;\n variantInterfaces.push({ name: interfaceName, discriminatorValue: variantName });\n\n // Look up the variant's model to check if it's a record\n const variantModel = ir.models[variantModelKey];\n if (variantModel != null && variantModel.type === \"record\") {\n const recordTypeName = versionedTypeName(variantModelKey, version);\n output += `export interface ${interfaceName} extends ${recordTypeName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += \"}\\n\\n\";\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the type\n const tsType = versionedTypeName(variantModelKey, version);\n output += `export interface ${interfaceName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += ` readonly value: ${tsType};\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n const knownVariantNames = variantInterfaces.map(v => v.name);\n const unknownName = `${typeName}${UNKNOWN_VARIANT_SUFFIX}`;\n output += `export type ${unknownName} = UnknownUnionVariant<\"${discriminantField}\">;\\n\\n`;\n variantInterfaces.push({ name: unknownName, discriminatorValue: UNKNOWN_UNION_VARIANT });\n\n output += `export type ${typeName} = ${variantInterfaces.map(v => v.name).join(\" | \")};\\n\\n`;\n\n // The variants this SDK knows, and a helper to narrow to them before reading variant fields.\n const knownName = knownTypeName(typeName);\n output += `export type ${knownName} = ${\n knownVariantNames.length > 0 ? knownVariantNames.join(\" | \") : \"never\"\n };\\n\\n`;\n output += \"/** Return the value if this SDK knows its variant, otherwise undefined. */\\n\";\n output += `export function ${narrowKnownFunctionName(typeName)}(\\n`;\n output += ` value: ${typeName} | undefined,\\n`;\n output += `): ${knownName} | undefined {\\n`;\n output +=\n ` return value == null || value.${discriminantField} === \"${UNKNOWN_UNION_VARIANT}\" ? undefined : value;\\n`;\n output += \"}\\n\\n\";\n\n for (const variant of variantInterfaces) {\n output +=\n `export function is${variant.name}(value: ${typeName}): value is ${variant.name} {\\n`;\n output += ` return value.${discriminantField} === \"${variant.discriminatorValue}\";\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n return output;\n}\n\n/**\n * Generate write types for a specific schema version.\n * All fields are optional in write types.\n */\nfunction generateWriteTypesForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(ir);\n\n // Collect referenced schema-local types (refs to other records/unions)\n const referencedLocalTypes = new Set<string>();\n for (const modelDef of Object.values(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n for (const field of modelDef.record.fields) {\n collectReferencedTypes(field.fieldType, version, referencedLocalTypes);\n }\n }\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n if (referencedLocalTypes.size > 0) {\n const localTypesList = Array.from(referencedLocalTypes).sort().join(\", \");\n output += `import type { ${localTypesList} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record write types\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const typeName = versionedWriteTypeName(modelKey, version);\n\n output += `export type ${typeName} = {\\n`;\n\n for (const field of modelDef.record.fields) {\n // All fields are optional in write types\n const tsType = convertFieldTypeToTypeScript(field.fieldType, version);\n output += ` readonly ${field.key}?: ${tsType};\\n`;\n }\n\n output += \"};\\n\\n\";\n }\n\n return output;\n}\n\n/**\n * Generate the types.ts re-export file that maps unversioned names to the latest version.\n */\nfunction generateTypesReExport({ ir, version }: VersionedIrEntry): string {\n const reExports: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedTypeName(modelKey, version);\n reExports.push(\n `export type { ${versioned} as ${modelKey} } from \"${typesFilePath(version)}\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedTypeName(modelKey, version);\n reExports.push(\n `export type { ${versioned} as ${modelKey} } from \"${typesFilePath(version)}\";`,\n );\n\n reExports.push(\n `export type { ${knownTypeName(versioned)} as ${knownTypeName(modelKey)} } from \"${\n typesFilePath(version)\n }\";`,\n `export { ${narrowKnownFunctionName(versioned)} as ${\n narrowKnownFunctionName(modelKey)\n } } from \"${typesFilePath(version)}\";`,\n );\n // Also re-export union variant types, including the Unknown case\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n const formattedVariant = formatVariantName(variantName);\n const versionedVariant = `${versionedTypeName(modelKey, version)}${formattedVariant}`;\n const unversionedVariant = `${modelKey}${formattedVariant}`;\n reExports.push(\n `export type { ${versionedVariant} as ${unversionedVariant} } from \"${\n typesFilePath(version)\n }\";`,\n );\n }\n }\n }\n\n return GENERATED_FILE_HEADER + reExports.join(\"\\n\") + \"\\n\";\n}\n\n/**\n * Generate per-version public types and write types from an already-resolved\n * versioned IR chain.\n */\nexport function generateVersionedTypesFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedTypesOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const readTypes = new Map<number, string>();\n const writeTypes = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n readTypes.set(version, generateReadTypesForVersion(version, ir));\n writeTypes.set(version, generateWriteTypesForVersion(version, ir));\n }\n\n const typesReExport = generateTypesReExport(chain[chain.length - 1]!);\n\n return { readTypes, writeTypes, typesReExport };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"generateVersionedTypesFromSchema.js","names":["UNKNOWN_UNION_VARIANT","GENERATED_FILE_HEADER","collectReferencedTypes","convertFieldTypeToTypeScript","detectUsedRefTypes","resolveMinVersion","knownTypeName","narrowKnownFunctionName","typeGuardName","typesFilePath","unionVariantName","versionedTypeName","versionedWriteTypeName","generateReadTypesForVersion","version","ir","usedRefTypes","Object","values","models","some","model","type","add","output","size","refTypesList","Array","from","sort","join","modelKey","modelDef","entries","record","typeName","description","field","fields","tsType","fieldType","optional","isOptional","key","union","discriminantField","discriminant","variantInterfaces","variantName","variantModelKey","variants","interfaceName","push","name","discriminatorValue","variantModel","recordTypeName","knownVariantNames","map","v","unknownName","knownName","length","variant","guardName","generateWriteTypesForVersion","referencedLocalTypes","Set","localTypesList","generateTypesReExport","reExports","versioned","keys","versionedVariant","unversionedVariant","generateVersionedTypesFromChain","resolved","minSupportedVersion","chain","minVersion","readTypes","Map","writeTypes","set","typesReExport"],"sources":["generateVersionedTypesFromSchema.ts"],"sourcesContent":["/*\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 { UNKNOWN_UNION_VARIANT } from \"@palantir/pack.document-schema.model-types\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport {\n collectReferencedTypes,\n convertFieldTypeToTypeScript,\n detectUsedRefTypes,\n} from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n knownTypeName,\n narrowKnownFunctionName,\n typeGuardName,\n typesFilePath,\n unionVariantName,\n versionedTypeName,\n versionedWriteTypeName,\n} from \"./runtimeSchema.js\";\n\nexport interface VersionedTypesOutput {\n /** types_vN.ts files keyed by version number */\n readTypes: Map<number, string>;\n /** writeTypes_vN.ts files keyed by version number */\n writeTypes: Map<number, string>;\n /** types.ts re-export of latest version types under unversioned names */\n typesReExport: string;\n}\n\n/**\n * Generate read types for a specific schema version.\n */\nfunction generateReadTypesForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(ir);\n if (Object.values(ir.models).some(model => model.type === \"union\")) {\n usedRefTypes.add(\"UnknownUnionVariant\");\n }\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record interfaces\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const record = modelDef.record;\n const typeName = versionedTypeName(modelKey, version);\n\n if (record.description) {\n output += `/**\\n * ${record.description}\\n */\\n`;\n }\n\n output += `export interface ${typeName} {\\n`;\n\n for (const field of record.fields) {\n const tsType = convertFieldTypeToTypeScript(field.fieldType, version);\n const optional = field.isOptional ? \"?\" : \"\";\n output += ` readonly ${field.key}${optional}: ${tsType};\\n`;\n }\n\n output += \"}\\n\\n\";\n }\n\n // Generate union types\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const typeName = versionedTypeName(modelKey, version);\n const discriminantField = union.discriminant;\n const variantInterfaces: Array<{ name: string; discriminatorValue: string }> = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const interfaceName = unionVariantName(typeName, variantName);\n variantInterfaces.push({ name: interfaceName, discriminatorValue: variantName });\n\n // Look up the variant's model to check if it's a record\n const variantModel = ir.models[variantModelKey];\n if (variantModel != null && variantModel.type === \"record\") {\n const recordTypeName = versionedTypeName(variantModelKey, version);\n output += `export interface ${interfaceName} extends ${recordTypeName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += \"}\\n\\n\";\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the type\n const tsType = versionedTypeName(variantModelKey, version);\n output += `export interface ${interfaceName} {\\n`;\n output += ` readonly ${discriminantField}: \"${variantName}\";\\n`;\n output += ` readonly value: ${tsType};\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n const knownVariantNames = variantInterfaces.map(v => v.name);\n const unknownName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);\n output += `export type ${unknownName} = UnknownUnionVariant<\"${discriminantField}\">;\\n\\n`;\n variantInterfaces.push({ name: unknownName, discriminatorValue: UNKNOWN_UNION_VARIANT });\n\n output += `export type ${typeName} = ${variantInterfaces.map(v => v.name).join(\" | \")};\\n\\n`;\n\n // The variants this SDK knows, and a helper to narrow to them before reading variant fields.\n const knownName = knownTypeName(typeName);\n output += `export type ${knownName} = ${\n knownVariantNames.length > 0 ? knownVariantNames.join(\" | \") : \"never\"\n };\\n\\n`;\n output += \"/** Return the value if this SDK knows its variant, otherwise undefined. */\\n\";\n output += `export function ${narrowKnownFunctionName(typeName)}(\\n`;\n output += ` value: ${typeName} | undefined,\\n`;\n output += `): ${knownName} | undefined {\\n`;\n output +=\n ` return value == null || value.${discriminantField} === \"${UNKNOWN_UNION_VARIANT}\" ? undefined : value;\\n`;\n output += \"}\\n\\n\";\n\n for (const variant of variantInterfaces) {\n const guardName = typeGuardName(variant.name);\n output += `export function ${guardName}(value: ${typeName}): value is ${variant.name} {\\n`;\n output += ` return value.${discriminantField} === \"${variant.discriminatorValue}\";\\n`;\n output += \"}\\n\\n\";\n }\n }\n\n return output;\n}\n\n/**\n * Generate write types for a specific schema version.\n * All fields are optional in write types.\n */\nfunction generateWriteTypesForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n const usedRefTypes = detectUsedRefTypes(ir);\n\n // Collect referenced schema-local types (refs to other records/unions)\n const referencedLocalTypes = new Set<string>();\n for (const modelDef of Object.values(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n for (const field of modelDef.record.fields) {\n collectReferencedTypes(field.fieldType, version, referencedLocalTypes);\n }\n }\n\n let output = GENERATED_FILE_HEADER;\n\n if (usedRefTypes.size > 0) {\n const refTypesList = Array.from(usedRefTypes).sort().join(\", \");\n output +=\n `import type { ${refTypesList} } from \"@palantir/pack.document-schema.model-types\";\\n`;\n }\n\n if (referencedLocalTypes.size > 0) {\n const localTypesList = Array.from(referencedLocalTypes).sort().join(\", \");\n output += `import type { ${localTypesList} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record write types\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const typeName = versionedWriteTypeName(modelKey, version);\n\n output += `export type ${typeName} = {\\n`;\n\n for (const field of modelDef.record.fields) {\n // All fields are optional in write types\n const tsType = convertFieldTypeToTypeScript(field.fieldType, version);\n output += ` readonly ${field.key}?: ${tsType};\\n`;\n }\n\n output += \"};\\n\\n\";\n }\n\n return output;\n}\n\n/**\n * Generate the types.ts re-export file that maps unversioned names to the latest version.\n */\nfunction generateTypesReExport({ ir, version }: VersionedIrEntry): string {\n const reExports: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedTypeName(modelKey, version);\n reExports.push(\n `export type { ${versioned} as ${modelKey} } from \"${typesFilePath(version)}\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedTypeName(modelKey, version);\n reExports.push(\n `export type { ${versioned} as ${modelKey} } from \"${typesFilePath(version)}\";`,\n );\n\n reExports.push(\n `export type { ${knownTypeName(versioned)} as ${knownTypeName(modelKey)} } from \"${\n typesFilePath(version)\n }\";`,\n `export { ${narrowKnownFunctionName(versioned)} as ${\n narrowKnownFunctionName(modelKey)\n } } from \"${typesFilePath(version)}\";`,\n );\n // Also re-export union variant types, including the Unknown case\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n const versionedVariant = unionVariantName(versioned, variantName);\n const unversionedVariant = unionVariantName(modelKey, variantName);\n reExports.push(\n `export type { ${versionedVariant} as ${unversionedVariant} } from \"${\n typesFilePath(version)\n }\";`,\n );\n }\n }\n }\n\n return GENERATED_FILE_HEADER + reExports.join(\"\\n\") + \"\\n\";\n}\n\n/**\n * Generate per-version public types and write types from an already-resolved\n * versioned IR chain.\n */\nexport function generateVersionedTypesFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedTypesOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const readTypes = new Map<number, string>();\n const writeTypes = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n readTypes.set(version, generateReadTypesForVersion(version, ir));\n writeTypes.set(version, generateWriteTypesForVersion(version, ir));\n }\n\n const typesReExport = generateTypesReExport(chain[chain.length - 1]!);\n\n return { readTypes, writeTypes, typesReExport };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,qBAAqB,QAAQ,4CAA4C;AAElF,SAASC,qBAAqB,QAAQ,2BAA2B;AACjE,SACEC,sBAAsB,EACtBC,4BAA4B,EAC5BC,kBAAkB,QACb,yBAAyB;AAEhC,SAASC,iBAAiB,QAAQ,yBAAyB;AAC3D,SACEC,aAAa,EACbC,uBAAuB,EACvBC,aAAa,EACbC,aAAa,EACbC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,QACjB,oBAAoB;AAW3B;AACA;AACA;AACA,SAASC,2BAA2BA,CAClCC,OAAe,EACfC,EAA2B,EACnB;EACR,MAAMC,YAAY,GAAGZ,kBAAkB,CAACW,EAAE,CAAC;EAC3C,IAAIE,MAAM,CAACC,MAAM,CAACH,EAAE,CAACI,MAAM,CAAC,CAACC,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,CAAC,EAAE;IAClEN,YAAY,CAACO,GAAG,CAAC,qBAAqB,CAAC;EACzC;EAEA,IAAIC,MAAM,GAAGvB,qBAAqB;EAElC,IAAIe,YAAY,CAACS,IAAI,GAAG,CAAC,EAAE;IACzB,MAAMC,YAAY,GAAGC,KAAK,CAACC,IAAI,CAACZ,YAAY,CAAC,CAACa,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IAC/DN,MAAM,IACJ,iBAAiBE,YAAY,yDAAyD;EAC1F;EAEAF,MAAM,IAAI,IAAI;;EAEd;EACA,KAAK,MAAM,CAACO,QAAQ,EAAEC,QAAQ,CAAC,IAAIf,MAAM,CAACgB,OAAO,CAAClB,EAAE,CAACI,MAAM,CAAC,EAAE;IAC5D,IAAIa,QAAQ,CAACV,IAAI,KAAK,QAAQ,EAAE;IAEhC,MAAMY,MAAM,GAAGF,QAAQ,CAACE,MAAM;IAC9B,MAAMC,QAAQ,GAAGxB,iBAAiB,CAACoB,QAAQ,EAAEjB,OAAO,CAAC;IAErD,IAAIoB,MAAM,CAACE,WAAW,EAAE;MACtBZ,MAAM,IAAI,WAAWU,MAAM,CAACE,WAAW,SAAS;IAClD;IAEAZ,MAAM,IAAI,oBAAoBW,QAAQ,MAAM;IAE5C,KAAK,MAAME,KAAK,IAAIH,MAAM,CAACI,MAAM,EAAE;MACjC,MAAMC,MAAM,GAAGpC,4BAA4B,CAACkC,KAAK,CAACG,SAAS,EAAE1B,OAAO,CAAC;MACrE,MAAM2B,QAAQ,GAAGJ,KAAK,CAACK,UAAU,GAAG,GAAG,GAAG,EAAE;MAC5ClB,MAAM,IAAI,cAAca,KAAK,CAACM,GAAG,GAAGF,QAAQ,KAAKF,MAAM,KAAK;IAC9D;IAEAf,MAAM,IAAI,OAAO;EACnB;;EAEA;EACA,KAAK,MAAM,CAACO,QAAQ,EAAEC,QAAQ,CAAC,IAAIf,MAAM,CAACgB,OAAO,CAAClB,EAAE,CAACI,MAAM,CAAC,EAAE;IAC5D,IAAIa,QAAQ,CAACV,IAAI,KAAK,OAAO,EAAE;IAE/B,MAAMsB,KAAK,GAAGZ,QAAQ,CAACY,KAAK;IAC5B,MAAMT,QAAQ,GAAGxB,iBAAiB,CAACoB,QAAQ,EAAEjB,OAAO,CAAC;IACrD,MAAM+B,iBAAiB,GAAGD,KAAK,CAACE,YAAY;IAC5C,MAAMC,iBAAsE,GAAG,EAAE;IAEjF,KAAK,MAAM,CAACC,WAAW,EAAEC,eAAe,CAAC,IAAIhC,MAAM,CAACgB,OAAO,CAACW,KAAK,CAACM,QAAQ,CAAC,EAAE;MAC3E,MAAMC,aAAa,GAAGzC,gBAAgB,CAACyB,QAAQ,EAAEa,WAAW,CAAC;MAC7DD,iBAAiB,CAACK,IAAI,CAAC;QAAEC,IAAI,EAAEF,aAAa;QAAEG,kBAAkB,EAAEN;MAAY,CAAC,CAAC;;MAEhF;MACA,MAAMO,YAAY,GAAGxC,EAAE,CAACI,MAAM,CAAC8B,eAAe,CAAC;MAC/C,IAAIM,YAAY,IAAI,IAAI,IAAIA,YAAY,CAACjC,IAAI,KAAK,QAAQ,EAAE;QAC1D,MAAMkC,cAAc,GAAG7C,iBAAiB,CAACsC,eAAe,EAAEnC,OAAO,CAAC;QAClEU,MAAM,IAAI,oBAAoB2B,aAAa,YAAYK,cAAc,MAAM;QAC3EhC,MAAM,IAAI,cAAcqB,iBAAiB,MAAMG,WAAW,MAAM;QAChExB,MAAM,IAAI,OAAO;MACnB,CAAC,MAAM;QACL;QACA,MAAMe,MAAM,GAAG5B,iBAAiB,CAACsC,eAAe,EAAEnC,OAAO,CAAC;QAC1DU,MAAM,IAAI,oBAAoB2B,aAAa,MAAM;QACjD3B,MAAM,IAAI,cAAcqB,iBAAiB,MAAMG,WAAW,MAAM;QAChExB,MAAM,IAAI,qBAAqBe,MAAM,KAAK;QAC1Cf,MAAM,IAAI,OAAO;MACnB;IACF;IAEA,MAAMiC,iBAAiB,GAAGV,iBAAiB,CAACW,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACN,IAAI,CAAC;IAC5D,MAAMO,WAAW,GAAGlD,gBAAgB,CAACyB,QAAQ,EAAEnC,qBAAqB,CAAC;IACrEwB,MAAM,IAAI,eAAeoC,WAAW,2BAA2Bf,iBAAiB,SAAS;IACzFE,iBAAiB,CAACK,IAAI,CAAC;MAAEC,IAAI,EAAEO,WAAW;MAAEN,kBAAkB,EAAEtD;IAAsB,CAAC,CAAC;IAExFwB,MAAM,IAAI,eAAeW,QAAQ,MAAMY,iBAAiB,CAACW,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACN,IAAI,CAAC,CAACvB,IAAI,CAAC,KAAK,CAAC,OAAO;;IAE5F;IACA,MAAM+B,SAAS,GAAGvD,aAAa,CAAC6B,QAAQ,CAAC;IACzCX,MAAM,IAAI,eAAeqC,SAAS,MAChCJ,iBAAiB,CAACK,MAAM,GAAG,CAAC,GAAGL,iBAAiB,CAAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,OACjE;IACPN,MAAM,IAAI,+EAA+E;IACzFA,MAAM,IAAI,mBAAmBjB,uBAAuB,CAAC4B,QAAQ,CAAC,KAAK;IACnEX,MAAM,IAAI,YAAYW,QAAQ,iBAAiB;IAC/CX,MAAM,IAAI,MAAMqC,SAAS,kBAAkB;IAC3CrC,MAAM,IACJ,mCAAmCqB,iBAAiB,SAAS7C,qBAAqB,0BAA0B;IAC9GwB,MAAM,IAAI,OAAO;IAEjB,KAAK,MAAMuC,OAAO,IAAIhB,iBAAiB,EAAE;MACvC,MAAMiB,SAAS,GAAGxD,aAAa,CAACuD,OAAO,CAACV,IAAI,CAAC;MAC7C7B,MAAM,IAAI,mBAAmBwC,SAAS,WAAW7B,QAAQ,eAAe4B,OAAO,CAACV,IAAI,MAAM;MAC1F7B,MAAM,IAAI,kBAAkBqB,iBAAiB,SAASkB,OAAO,CAACT,kBAAkB,MAAM;MACtF9B,MAAM,IAAI,OAAO;IACnB;EACF;EAEA,OAAOA,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA,SAASyC,4BAA4BA,CACnCnD,OAAe,EACfC,EAA2B,EACnB;EACR,MAAMC,YAAY,GAAGZ,kBAAkB,CAACW,EAAE,CAAC;;EAE3C;EACA,MAAMmD,oBAAoB,GAAG,IAAIC,GAAG,CAAS,CAAC;EAC9C,KAAK,MAAMnC,QAAQ,IAAIf,MAAM,CAACC,MAAM,CAACH,EAAE,CAACI,MAAM,CAAC,EAAE;IAC/C,IAAIa,QAAQ,CAACV,IAAI,KAAK,QAAQ,EAAE;IAChC,KAAK,MAAMe,KAAK,IAAIL,QAAQ,CAACE,MAAM,CAACI,MAAM,EAAE;MAC1CpC,sBAAsB,CAACmC,KAAK,CAACG,SAAS,EAAE1B,OAAO,EAAEoD,oBAAoB,CAAC;IACxE;EACF;EAEA,IAAI1C,MAAM,GAAGvB,qBAAqB;EAElC,IAAIe,YAAY,CAACS,IAAI,GAAG,CAAC,EAAE;IACzB,MAAMC,YAAY,GAAGC,KAAK,CAACC,IAAI,CAACZ,YAAY,CAAC,CAACa,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IAC/DN,MAAM,IACJ,iBAAiBE,YAAY,yDAAyD;EAC1F;EAEA,IAAIwC,oBAAoB,CAACzC,IAAI,GAAG,CAAC,EAAE;IACjC,MAAM2C,cAAc,GAAGzC,KAAK,CAACC,IAAI,CAACsC,oBAAoB,CAAC,CAACrC,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;IACzEN,MAAM,IAAI,iBAAiB4C,cAAc,YAAY3D,aAAa,CAACK,OAAO,CAAC,MAAM;EACnF;EAEAU,MAAM,IAAI,IAAI;;EAEd;EACA,KAAK,MAAM,CAACO,QAAQ,EAAEC,QAAQ,CAAC,IAAIf,MAAM,CAACgB,OAAO,CAAClB,EAAE,CAACI,MAAM,CAAC,EAAE;IAC5D,IAAIa,QAAQ,CAACV,IAAI,KAAK,QAAQ,EAAE;IAEhC,MAAMa,QAAQ,GAAGvB,sBAAsB,CAACmB,QAAQ,EAAEjB,OAAO,CAAC;IAE1DU,MAAM,IAAI,eAAeW,QAAQ,QAAQ;IAEzC,KAAK,MAAME,KAAK,IAAIL,QAAQ,CAACE,MAAM,CAACI,MAAM,EAAE;MAC1C;MACA,MAAMC,MAAM,GAAGpC,4BAA4B,CAACkC,KAAK,CAACG,SAAS,EAAE1B,OAAO,CAAC;MACrEU,MAAM,IAAI,cAAca,KAAK,CAACM,GAAG,MAAMJ,MAAM,KAAK;IACpD;IAEAf,MAAM,IAAI,QAAQ;EACpB;EAEA,OAAOA,MAAM;AACf;;AAEA;AACA;AACA;AACA,SAAS6C,qBAAqBA,CAAC;EAAEtD,EAAE;EAAED;AAA0B,CAAC,EAAU;EACxE,MAAMwD,SAAmB,GAAG,EAAE;EAC9B,KAAK,MAAM,CAACvC,QAAQ,EAAEC,QAAQ,CAAC,IAAIf,MAAM,CAACgB,OAAO,CAAClB,EAAE,CAACI,MAAM,CAAC,EAAE;IAC5D,IAAIa,QAAQ,CAACV,IAAI,KAAK,QAAQ,EAAE;MAC9B,MAAMiD,SAAS,GAAG5D,iBAAiB,CAACoB,QAAQ,EAAEjB,OAAO,CAAC;MACtDwD,SAAS,CAAClB,IAAI,CACZ,iBAAiBmB,SAAS,OAAOxC,QAAQ,YAAYtB,aAAa,CAACK,OAAO,CAAC,IAC7E,CAAC;IACH,CAAC,MAAM,IAAIkB,QAAQ,CAACV,IAAI,KAAK,OAAO,EAAE;MACpC,MAAMiD,SAAS,GAAG5D,iBAAiB,CAACoB,QAAQ,EAAEjB,OAAO,CAAC;MACtDwD,SAAS,CAAClB,IAAI,CACZ,iBAAiBmB,SAAS,OAAOxC,QAAQ,YAAYtB,aAAa,CAACK,OAAO,CAAC,IAC7E,CAAC;MAEDwD,SAAS,CAAClB,IAAI,CACZ,iBAAiB9C,aAAa,CAACiE,SAAS,CAAC,OAAOjE,aAAa,CAACyB,QAAQ,CAAC,YACrEtB,aAAa,CAACK,OAAO,CAAC,IACpB,EACJ,YAAYP,uBAAuB,CAACgE,SAAS,CAAC,OAC5ChE,uBAAuB,CAACwB,QAAQ,CAAC,YACvBtB,aAAa,CAACK,OAAO,CAAC,IACpC,CAAC;MACD;MACA,KAAK,MAAMkC,WAAW,IAAI,CAAC,GAAG/B,MAAM,CAACuD,IAAI,CAACxC,QAAQ,CAACY,KAAK,CAACM,QAAQ,CAAC,EAAElD,qBAAqB,CAAC,EAAE;QAC1F,MAAMyE,gBAAgB,GAAG/D,gBAAgB,CAAC6D,SAAS,EAAEvB,WAAW,CAAC;QACjE,MAAM0B,kBAAkB,GAAGhE,gBAAgB,CAACqB,QAAQ,EAAEiB,WAAW,CAAC;QAClEsB,SAAS,CAAClB,IAAI,CACZ,iBAAiBqB,gBAAgB,OAAOC,kBAAkB,YACxDjE,aAAa,CAACK,OAAO,CAAC,IAE1B,CAAC;MACH;IACF;EACF;EAEA,OAAOb,qBAAqB,GAAGqE,SAAS,CAACxC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAC5D;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAAS6C,+BAA+BA,CAC7CC,QAAyB,EACzBC,mBAA4B,EACN;EACtB,MAAM;IAAEC;EAAM,CAAC,GAAGF,QAAQ;EAC1B,MAAM;IAAEG;EAAW,CAAC,GAAG1E,iBAAiB,CAACyE,KAAK,EAAED,mBAAmB,CAAC;EAEpE,MAAMG,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAC3C,MAAMC,UAAU,GAAG,IAAID,GAAG,CAAiB,CAAC;EAE5C,KAAK,MAAM;IAAEnE,OAAO;IAAEC;EAAG,CAAC,IAAI+D,KAAK,EAAE;IACnC,IAAIhE,OAAO,GAAGiE,UAAU,EAAE;IAE1BC,SAAS,CAACG,GAAG,CAACrE,OAAO,EAAED,2BAA2B,CAACC,OAAO,EAAEC,EAAE,CAAC,CAAC;IAChEmE,UAAU,CAACC,GAAG,CAACrE,OAAO,EAAEmD,4BAA4B,CAACnD,OAAO,EAAEC,EAAE,CAAC,CAAC;EACpE;EAEA,MAAMqE,aAAa,GAAGf,qBAAqB,CAACS,KAAK,CAACA,KAAK,CAAChB,MAAM,GAAG,CAAC,CAAE,CAAC;EAErE,OAAO;IAAEkB,SAAS;IAAEE,UAAU;IAAEE;EAAc,CAAC;AACjD","ignoreList":[]}
|
|
@@ -15,12 +15,10 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { UNKNOWN_UNION_VARIANT } from "@palantir/pack.document-schema.model-types";
|
|
18
|
-
import { formatVariantName } from "@palantir/pack.schema";
|
|
19
18
|
import { GENERATED_FILE_HEADER } from "../generatedFileHeader.js";
|
|
20
19
|
import { convertFieldTypeToZodSchema } from "../ir/irFieldHelpers.js";
|
|
21
|
-
import { UNKNOWN_VARIANT_SUFFIX } from "../unknownVariantSuffix.js";
|
|
22
20
|
import { resolveMinVersion } from "./resolveSchemaChain.js";
|
|
23
|
-
import { typesFilePath, versionedSchemaName, versionedTypeName } from "./runtimeSchema.js";
|
|
21
|
+
import { schemaName, typesFilePath, unionVariantName, versionedSchemaName, versionedTypeName } from "./runtimeSchema.js";
|
|
24
22
|
/**
|
|
25
23
|
* Generate Zod schemas for a specific schema version.
|
|
26
24
|
* Uses `.passthrough()` to preserve unknown fields.
|
|
@@ -36,7 +34,7 @@ function generateZodSchemasForVersion(version, ir) {
|
|
|
36
34
|
} else if (modelDef.type === "union") {
|
|
37
35
|
typeNames.push(versionedTypeName(modelKey, version));
|
|
38
36
|
for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {
|
|
39
|
-
typeNames.push(
|
|
37
|
+
typeNames.push(unionVariantName(versionedTypeName(modelKey, version), variantName));
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
40
|
}
|
|
@@ -68,11 +66,12 @@ function generateZodSchemasForVersion(version, ir) {
|
|
|
68
66
|
if (modelDef.type !== "union") continue;
|
|
69
67
|
const union = modelDef.union;
|
|
70
68
|
const discriminantField = union.discriminant;
|
|
69
|
+
const unionZodSchemaName = versionedSchemaName(modelKey, version);
|
|
70
|
+
const typeName = versionedTypeName(modelKey, version);
|
|
71
71
|
const variantSchemaNames = [];
|
|
72
72
|
for (const [variantName, variantModelKey] of Object.entries(union.variants)) {
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;
|
|
73
|
+
const variantZodSchemaName = unionVariantName(unionZodSchemaName, variantName);
|
|
74
|
+
const variantTypeName = unionVariantName(typeName, variantName);
|
|
76
75
|
variantSchemaNames.push(variantZodSchemaName);
|
|
77
76
|
|
|
78
77
|
// Look up the variant's model to check if it's a record
|
|
@@ -92,15 +91,13 @@ function generateZodSchemasForVersion(version, ir) {
|
|
|
92
91
|
output += `}) satisfies ZodType<${variantTypeName}>;\n\n`;
|
|
93
92
|
}
|
|
94
93
|
}
|
|
95
|
-
const unknownSchemaName =
|
|
96
|
-
const unknownTypeName =
|
|
94
|
+
const unknownSchemaName = unionVariantName(unionZodSchemaName, UNKNOWN_UNION_VARIANT);
|
|
95
|
+
const unknownTypeName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);
|
|
97
96
|
output += `export const ${unknownSchemaName} = z.object({\n`;
|
|
98
97
|
output += ` ${discriminantField}: z.literal("${UNKNOWN_UNION_VARIANT}"),\n`;
|
|
99
98
|
output += ` rawValue: z.unknown()\n`;
|
|
100
99
|
output += `}) satisfies ZodType<${unknownTypeName}>;\n\n`;
|
|
101
100
|
variantSchemaNames.push(unknownSchemaName);
|
|
102
|
-
const unionZodSchemaName = versionedSchemaName(modelKey, version);
|
|
103
|
-
const typeName = versionedTypeName(modelKey, version);
|
|
104
101
|
output += `export const ${unionZodSchemaName} = z.discriminatedUnion("${discriminantField}", [\n ${variantSchemaNames.join(",\n ")}\n]) satisfies ZodType<${typeName}>;\n\n`;
|
|
105
102
|
}
|
|
106
103
|
return output;
|
|
@@ -118,16 +115,16 @@ function generateSchemaReExport({
|
|
|
118
115
|
for (const [modelKey, modelDef] of Object.entries(ir.models)) {
|
|
119
116
|
if (modelDef.type === "record") {
|
|
120
117
|
const versioned = versionedSchemaName(modelKey, version);
|
|
121
|
-
reExports.push(`export { ${versioned} as ${modelKey}
|
|
118
|
+
reExports.push(`export { ${versioned} as ${schemaName(modelKey)} } from "./schema_v${version}.js";`);
|
|
122
119
|
} else if (modelDef.type === "union") {
|
|
123
120
|
const versioned = versionedSchemaName(modelKey, version);
|
|
124
|
-
reExports.push(`export { ${versioned} as ${modelKey}
|
|
121
|
+
reExports.push(`export { ${versioned} as ${schemaName(modelKey)} } from "./schema_v${version}.js";`);
|
|
125
122
|
|
|
126
123
|
// Also re-export union variant schemas
|
|
127
124
|
for (const variantName of Object.keys(modelDef.union.variants)) {
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
reExports.push(`export { ${versionedVariant} as ${
|
|
125
|
+
const versionedVariant = unionVariantName(versioned, variantName);
|
|
126
|
+
const unversionedVariant = schemaName(unionVariantName(modelKey, variantName));
|
|
127
|
+
reExports.push(`export { ${versionedVariant} as ${unversionedVariant} } from "./schema_v${version}.js";`);
|
|
131
128
|
}
|
|
132
129
|
}
|
|
133
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateVersionedZodFromSchema.js","names":["UNKNOWN_UNION_VARIANT","formatVariantName","GENERATED_FILE_HEADER","convertFieldTypeToZodSchema","UNKNOWN_VARIANT_SUFFIX","resolveMinVersion","typesFilePath","versionedSchemaName","versionedTypeName","generateZodSchemasForVersion","version","ir","output","typeNames","modelKey","modelDef","Object","entries","models","type","push","variantName","keys","union","variants","length","sort","join","zodSchemaName","typeName","fieldLines","field","record","fields","zodType","fieldType","isOptional","key","discriminantField","discriminant","variantSchemaNames","variantModelKey","formattedVariant","variantZodSchemaName","variantTypeName","variantModel","recordZodSchemaName","refZodSchemaName","refTypeName","unknownSchemaName","unknownTypeName","unionZodSchemaName","generateSchemaReExport","reExports","versioned","versionedVariant","generateVersionedZodFromChain","resolved","minSupportedVersion","chain","minVersion","zodSchemas","Map","set","schemaReExport"],"sources":["generateVersionedZodFromSchema.ts"],"sourcesContent":["/*\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 { UNKNOWN_UNION_VARIANT } from \"@palantir/pack.document-schema.model-types\";\nimport { formatVariantName } from \"@palantir/pack.schema\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport { convertFieldTypeToZodSchema } from \"../ir/irFieldHelpers.js\";\nimport { UNKNOWN_VARIANT_SUFFIX } from \"../unknownVariantSuffix.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport { typesFilePath, versionedSchemaName, versionedTypeName } from \"./runtimeSchema.js\";\n\nexport interface VersionedZodOutput {\n /** schema_vN.ts files keyed by version number */\n zodSchemas: Map<number, string>;\n /** schema.ts re-export of latest version schemas under unversioned names */\n schemaReExport: string;\n}\n\n/**\n * Generate Zod schemas for a specific schema version.\n * Uses `.passthrough()` to preserve unknown fields.\n */\nfunction generateZodSchemasForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n // Collect type names for import\n const typeNames: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n typeNames.push(versionedTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n typeNames.push(versionedTypeName(modelKey, version));\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n typeNames.push(\n `${versionedTypeName(modelKey, version)}${formatVariantName(variantName)}`,\n );\n }\n }\n }\n\n output += \"import type { ZodType } from \\\"zod\\\";\\n\";\n output += \"import { z } from \\\"zod\\\";\\n\";\n\n if (typeNames.length > 0) {\n output += `import type { ${typeNames.sort().join(\", \")} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record schemas first (unions may depend on them)\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const zodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n const fieldLines: string[] = [];\n\n for (const field of modelDef.record.fields) {\n let zodType = convertFieldTypeToZodSchema(field.fieldType, version);\n if (field.isOptional) {\n zodType = `${zodType}.optional()`;\n }\n fieldLines.push(` ${field.key}: ${zodType}`);\n }\n\n output += `export const ${zodSchemaName} = z.object({\\n${\n fieldLines.join(\",\\n\")\n }\\n}).passthrough() satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n // Generate union schemas\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const discriminantField = union.discriminant;\n const variantSchemaNames: string[] = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const variantZodSchemaName = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;\n const variantTypeName = `${versionedTypeName(modelKey, version)}${formattedVariant}`;\n variantSchemaNames.push(variantZodSchemaName);\n\n // Look up the variant's model to check if it's a record\n const variantModel = ir.models[variantModelKey];\n if (variantModel != null && variantModel.type === \"record\") {\n const recordZodSchemaName = versionedSchemaName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = ${recordZodSchemaName}.extend({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\")\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the schema\n const refZodSchemaName = versionedSchemaName(variantModelKey, version);\n const refTypeName = versionedTypeName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\"),\\n`;\n output += ` value: z.lazy((): ZodType<${refTypeName}> => ${refZodSchemaName})\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n }\n }\n\n const unknownSchemaName = `${versionedSchemaName(modelKey, version)}${UNKNOWN_VARIANT_SUFFIX}`;\n const unknownTypeName = `${versionedTypeName(modelKey, version)}${UNKNOWN_VARIANT_SUFFIX}`;\n output += `export const ${unknownSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${UNKNOWN_UNION_VARIANT}\"),\\n`;\n output += ` rawValue: z.unknown()\\n`;\n output += `}) satisfies ZodType<${unknownTypeName}>;\\n\\n`;\n variantSchemaNames.push(unknownSchemaName);\n\n const unionZodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n output +=\n `export const ${unionZodSchemaName} = z.discriminatedUnion(\"${discriminantField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n]) satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate the schema.ts re-export file mapping unversioned names to latest version.\n */\nfunction generateSchemaReExport(\n { ir, version }: VersionedIrEntry,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n const reExports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${modelKey}Schema } from \"./schema_v${version}.js\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${modelKey}Schema } from \"./schema_v${version}.js\";`,\n );\n\n // Also re-export union variant schemas\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const formattedVariant = formatVariantName(variantName);\n const versionedVariant = `${versionedSchemaName(modelKey, version)}${formattedVariant}`;\n const unversionedVariant = `${modelKey}${formattedVariant}Schema`;\n reExports.push(\n `export { ${versionedVariant} as ${unversionedVariant} } from \"./schema_v${version}.js\";`,\n );\n }\n }\n }\n\n output += reExports.join(\"\\n\") + \"\\n\";\n\n return output;\n}\n\n/**\n * Generate per-version Zod schemas from an already-resolved versioned IR chain.\n */\nexport function generateVersionedZodFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedZodOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const zodSchemas = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n zodSchemas.set(version, generateZodSchemasForVersion(version, ir));\n }\n\n const schemaReExport = generateSchemaReExport(chain[chain.length - 1]!);\n\n return { zodSchemas, schemaReExport };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"generateVersionedZodFromSchema.js","names":["UNKNOWN_UNION_VARIANT","GENERATED_FILE_HEADER","convertFieldTypeToZodSchema","resolveMinVersion","schemaName","typesFilePath","unionVariantName","versionedSchemaName","versionedTypeName","generateZodSchemasForVersion","version","ir","output","typeNames","modelKey","modelDef","Object","entries","models","type","push","variantName","keys","union","variants","length","sort","join","zodSchemaName","typeName","fieldLines","field","record","fields","zodType","fieldType","isOptional","key","discriminantField","discriminant","unionZodSchemaName","variantSchemaNames","variantModelKey","variantZodSchemaName","variantTypeName","variantModel","recordZodSchemaName","refZodSchemaName","refTypeName","unknownSchemaName","unknownTypeName","generateSchemaReExport","reExports","versioned","versionedVariant","unversionedVariant","generateVersionedZodFromChain","resolved","minSupportedVersion","chain","minVersion","zodSchemas","Map","set","schemaReExport"],"sources":["generateVersionedZodFromSchema.ts"],"sourcesContent":["/*\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 { UNKNOWN_UNION_VARIANT } from \"@palantir/pack.document-schema.model-types\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\nimport { convertFieldTypeToZodSchema } from \"../ir/irFieldHelpers.js\";\nimport type { ResolvedIrChain, VersionedIrEntry } from \"./resolveSchemaChain.js\";\nimport { resolveMinVersion } from \"./resolveSchemaChain.js\";\nimport {\n schemaName,\n typesFilePath,\n unionVariantName,\n versionedSchemaName,\n versionedTypeName,\n} from \"./runtimeSchema.js\";\n\nexport interface VersionedZodOutput {\n /** schema_vN.ts files keyed by version number */\n zodSchemas: Map<number, string>;\n /** schema.ts re-export of latest version schemas under unversioned names */\n schemaReExport: string;\n}\n\n/**\n * Generate Zod schemas for a specific schema version.\n * Uses `.passthrough()` to preserve unknown fields.\n */\nfunction generateZodSchemasForVersion(\n version: number,\n ir: IRealTimeDocumentSchema,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n // Collect type names for import\n const typeNames: string[] = [];\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n typeNames.push(versionedTypeName(modelKey, version));\n } else if (modelDef.type === \"union\") {\n typeNames.push(versionedTypeName(modelKey, version));\n for (const variantName of [...Object.keys(modelDef.union.variants), UNKNOWN_UNION_VARIANT]) {\n typeNames.push(unionVariantName(versionedTypeName(modelKey, version), variantName));\n }\n }\n }\n\n output += \"import type { ZodType } from \\\"zod\\\";\\n\";\n output += \"import { z } from \\\"zod\\\";\\n\";\n\n if (typeNames.length > 0) {\n output += `import type { ${typeNames.sort().join(\", \")} } from \"${typesFilePath(version)}\";\\n`;\n }\n\n output += \"\\n\";\n\n // Generate record schemas first (unions may depend on them)\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"record\") continue;\n\n const zodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n const fieldLines: string[] = [];\n\n for (const field of modelDef.record.fields) {\n let zodType = convertFieldTypeToZodSchema(field.fieldType, version);\n if (field.isOptional) {\n zodType = `${zodType}.optional()`;\n }\n fieldLines.push(` ${field.key}: ${zodType}`);\n }\n\n output += `export const ${zodSchemaName} = z.object({\\n${\n fieldLines.join(\",\\n\")\n }\\n}).passthrough() satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n // Generate union schemas\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type !== \"union\") continue;\n\n const union = modelDef.union;\n const discriminantField = union.discriminant;\n const unionZodSchemaName = versionedSchemaName(modelKey, version);\n const typeName = versionedTypeName(modelKey, version);\n const variantSchemaNames: string[] = [];\n\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const variantZodSchemaName = unionVariantName(unionZodSchemaName, variantName);\n const variantTypeName = unionVariantName(typeName, variantName);\n variantSchemaNames.push(variantZodSchemaName);\n\n // Look up the variant's model to check if it's a record\n const variantModel = ir.models[variantModelKey];\n if (variantModel != null && variantModel.type === \"record\") {\n const recordZodSchemaName = versionedSchemaName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = ${recordZodSchemaName}.extend({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\")\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n } else {\n // Non-record variant (e.g. another union): emit a value field referencing the schema\n const refZodSchemaName = versionedSchemaName(variantModelKey, version);\n const refTypeName = versionedTypeName(variantModelKey, version);\n output += `export const ${variantZodSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${variantName}\"),\\n`;\n output += ` value: z.lazy((): ZodType<${refTypeName}> => ${refZodSchemaName})\\n`;\n output += `}) satisfies ZodType<${variantTypeName}>;\\n\\n`;\n }\n }\n\n const unknownSchemaName = unionVariantName(unionZodSchemaName, UNKNOWN_UNION_VARIANT);\n const unknownTypeName = unionVariantName(typeName, UNKNOWN_UNION_VARIANT);\n output += `export const ${unknownSchemaName} = z.object({\\n`;\n output += ` ${discriminantField}: z.literal(\"${UNKNOWN_UNION_VARIANT}\"),\\n`;\n output += ` rawValue: z.unknown()\\n`;\n output += `}) satisfies ZodType<${unknownTypeName}>;\\n\\n`;\n variantSchemaNames.push(unknownSchemaName);\n\n output +=\n `export const ${unionZodSchemaName} = z.discriminatedUnion(\"${discriminantField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n]) satisfies ZodType<${typeName}>;\\n\\n`;\n }\n\n return output;\n}\n\n/**\n * Generate the schema.ts re-export file mapping unversioned names to latest version.\n */\nfunction generateSchemaReExport(\n { ir, version }: VersionedIrEntry,\n): string {\n let output = GENERATED_FILE_HEADER;\n\n const reExports: string[] = [];\n\n for (const [modelKey, modelDef] of Object.entries(ir.models)) {\n if (modelDef.type === \"record\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${schemaName(modelKey)} } from \"./schema_v${version}.js\";`,\n );\n } else if (modelDef.type === \"union\") {\n const versioned = versionedSchemaName(modelKey, version);\n reExports.push(\n `export { ${versioned} as ${schemaName(modelKey)} } from \"./schema_v${version}.js\";`,\n );\n\n // Also re-export union variant schemas\n for (const variantName of Object.keys(modelDef.union.variants)) {\n const versionedVariant = unionVariantName(versioned, variantName);\n const unversionedVariant = schemaName(unionVariantName(modelKey, variantName));\n reExports.push(\n `export { ${versionedVariant} as ${unversionedVariant} } from \"./schema_v${version}.js\";`,\n );\n }\n }\n }\n\n output += reExports.join(\"\\n\") + \"\\n\";\n\n return output;\n}\n\n/**\n * Generate per-version Zod schemas from an already-resolved versioned IR chain.\n */\nexport function generateVersionedZodFromChain(\n resolved: ResolvedIrChain,\n minSupportedVersion?: number,\n): VersionedZodOutput {\n const { chain } = resolved;\n const { minVersion } = resolveMinVersion(chain, minSupportedVersion);\n\n const zodSchemas = new Map<number, string>();\n\n for (const { version, ir } of chain) {\n if (version < minVersion) continue;\n\n zodSchemas.set(version, generateZodSchemasForVersion(version, ir));\n }\n\n const schemaReExport = generateSchemaReExport(chain[chain.length - 1]!);\n\n return { zodSchemas, schemaReExport };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,20 +21,38 @@ import { convertSchemaToIr } from "../steps/convertStepsToIr.js";
|
|
|
21
21
|
|
|
22
22
|
/** Serialized migrations keyed by `[recordModelName][fieldName]`. */
|
|
23
23
|
|
|
24
|
+
export function getEntryMinorVersion(entry) {
|
|
25
|
+
return entry.minorVersion ?? 0;
|
|
26
|
+
}
|
|
27
|
+
export function formatSchemaVersion(major, minor) {
|
|
28
|
+
return minor > 0 ? `${major}.${minor}` : `${major}`;
|
|
29
|
+
}
|
|
30
|
+
function formatEntryVersion(entry) {
|
|
31
|
+
return formatSchemaVersion(entry.version, getEntryMinorVersion(entry));
|
|
32
|
+
}
|
|
33
|
+
function getSchemaMinorVersion(schema) {
|
|
34
|
+
return schema.type === "versioned" ? schema.minorVersion ?? 0 : 0;
|
|
35
|
+
}
|
|
24
36
|
function collectVersionedIrChain(input, identity) {
|
|
25
37
|
const schemas = collectSchemaDefinitions(input);
|
|
26
38
|
const provenances = deriveProvenance(schemas);
|
|
27
|
-
return schemas.map((schema, index) =>
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
return schemas.map((schema, index) => {
|
|
40
|
+
const minorVersion = getSchemaMinorVersion(schema);
|
|
41
|
+
return {
|
|
30
42
|
version: schema.version,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
...(minorVersion > 0 ? {
|
|
44
|
+
minorVersion
|
|
45
|
+
} : {}),
|
|
46
|
+
ir: convertSchemaToIr(schema.models, {
|
|
47
|
+
version: schema.version,
|
|
48
|
+
name: identity.name,
|
|
49
|
+
description: identity.description
|
|
50
|
+
}, provenances[index]),
|
|
51
|
+
...(schema.type === "versioned" ? {
|
|
52
|
+
migrations: serializeMigrations(schema.migrations)
|
|
53
|
+
} : {})
|
|
54
|
+
};
|
|
55
|
+
});
|
|
38
56
|
}
|
|
39
57
|
function collectSchemaDefinitions(input) {
|
|
40
58
|
const schemas = [];
|
|
@@ -49,40 +67,88 @@ function collectSchemaDefinitions(input) {
|
|
|
49
67
|
|
|
50
68
|
/**
|
|
51
69
|
* Build field/model provenance by walking the version chain from oldest to
|
|
52
|
-
* newest. The first version where a model key or record field
|
|
53
|
-
* version stamped into IR metadata.
|
|
70
|
+
* newest. The first version (major and minor) where a model key or record field
|
|
71
|
+
* appears is the version stamped into IR metadata.
|
|
54
72
|
*/
|
|
55
73
|
function deriveProvenance(schemas) {
|
|
56
74
|
const firstModelVersions = new Map();
|
|
57
75
|
const firstFieldVersions = new Map();
|
|
76
|
+
const firstVariantVersions = new Map();
|
|
58
77
|
return schemas.map(schema => {
|
|
78
|
+
const currentVersion = {
|
|
79
|
+
major: schema.version,
|
|
80
|
+
minor: getSchemaMinorVersion(schema)
|
|
81
|
+
};
|
|
59
82
|
const modelVersions = {};
|
|
83
|
+
const modelMinorVersions = {};
|
|
60
84
|
const fieldVersions = {};
|
|
85
|
+
const fieldMinorVersions = {};
|
|
86
|
+
const variantVersions = {};
|
|
87
|
+
const variantMinorVersions = {};
|
|
61
88
|
for (const [modelKey, modelDef] of Object.entries(schema.models)) {
|
|
62
89
|
if (!firstModelVersions.has(modelKey)) {
|
|
63
|
-
firstModelVersions.set(modelKey,
|
|
90
|
+
firstModelVersions.set(modelKey, currentVersion);
|
|
91
|
+
}
|
|
92
|
+
const modelVersion = firstModelVersions.get(modelKey);
|
|
93
|
+
modelVersions[modelKey] = modelVersion.major;
|
|
94
|
+
if (modelVersion.minor > 0) {
|
|
95
|
+
modelMinorVersions[modelKey] = modelVersion.minor;
|
|
96
|
+
}
|
|
97
|
+
if (modelDef.type === "union") {
|
|
98
|
+
let variantVersionsForModel = firstVariantVersions.get(modelKey);
|
|
99
|
+
if (variantVersionsForModel == null) {
|
|
100
|
+
variantVersionsForModel = new Map();
|
|
101
|
+
firstVariantVersions.set(modelKey, variantVersionsForModel);
|
|
102
|
+
}
|
|
103
|
+
const variants = {};
|
|
104
|
+
const minorVariants = {};
|
|
105
|
+
for (const variantName of Object.keys(modelDef.variants)) {
|
|
106
|
+
if (!variantVersionsForModel.has(variantName)) {
|
|
107
|
+
variantVersionsForModel.set(variantName, currentVersion);
|
|
108
|
+
}
|
|
109
|
+
const variantVersion = variantVersionsForModel.get(variantName);
|
|
110
|
+
variants[variantName] = variantVersion.major;
|
|
111
|
+
if (variantVersion.minor > 0) {
|
|
112
|
+
minorVariants[variantName] = variantVersion.minor;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
variantVersions[modelKey] = variants;
|
|
116
|
+
if (Object.keys(minorVariants).length > 0) {
|
|
117
|
+
variantMinorVersions[modelKey] = minorVariants;
|
|
118
|
+
}
|
|
119
|
+
continue;
|
|
64
120
|
}
|
|
65
|
-
modelVersions[modelKey] = firstModelVersions.get(modelKey);
|
|
66
|
-
if (modelDef.type !== "record") continue;
|
|
67
121
|
let fieldVersionsForModel = firstFieldVersions.get(modelKey);
|
|
68
122
|
if (fieldVersionsForModel == null) {
|
|
69
123
|
fieldVersionsForModel = new Map();
|
|
70
124
|
firstFieldVersions.set(modelKey, fieldVersionsForModel);
|
|
71
125
|
}
|
|
72
126
|
const fields = {};
|
|
127
|
+
const minorFields = {};
|
|
73
128
|
for (const fieldKey of Object.keys(modelDef.fields)) {
|
|
74
129
|
if (!fieldVersionsForModel.has(fieldKey)) {
|
|
75
|
-
fieldVersionsForModel.set(fieldKey,
|
|
130
|
+
fieldVersionsForModel.set(fieldKey, currentVersion);
|
|
131
|
+
}
|
|
132
|
+
const fieldVersion = fieldVersionsForModel.get(fieldKey);
|
|
133
|
+
fields[fieldKey] = fieldVersion.major;
|
|
134
|
+
if (fieldVersion.minor > 0) {
|
|
135
|
+
minorFields[fieldKey] = fieldVersion.minor;
|
|
76
136
|
}
|
|
77
|
-
fields[fieldKey] = fieldVersionsForModel.get(fieldKey);
|
|
78
137
|
}
|
|
79
138
|
if (Object.keys(fields).length > 0) {
|
|
80
139
|
fieldVersions[modelKey] = fields;
|
|
81
140
|
}
|
|
141
|
+
if (Object.keys(minorFields).length > 0) {
|
|
142
|
+
fieldMinorVersions[modelKey] = minorFields;
|
|
143
|
+
}
|
|
82
144
|
}
|
|
83
145
|
return {
|
|
84
146
|
fieldVersions,
|
|
85
147
|
modelVersions,
|
|
148
|
+
fieldMinorVersions,
|
|
149
|
+
modelMinorVersions,
|
|
150
|
+
variantVersions,
|
|
151
|
+
variantMinorVersions,
|
|
86
152
|
deprecations: "deprecations" in schema ? schema.deprecations : undefined
|
|
87
153
|
};
|
|
88
154
|
});
|
|
@@ -114,7 +180,7 @@ export function resolveMinVersion(chain, minSupportedVersion) {
|
|
|
114
180
|
}
|
|
115
181
|
const latestVersion = chain[chain.length - 1].version;
|
|
116
182
|
if (minSupportedVersion != null && !chain.some(c => c.version === minSupportedVersion)) {
|
|
117
|
-
throw new Error(`minSupportedVersion ${minSupportedVersion} is not in the schema chain ` + `(available versions: ${chain.map(
|
|
183
|
+
throw new Error(`minSupportedVersion ${minSupportedVersion} is not in the schema chain ` + `(available versions: ${chain.map(formatEntryVersion).join(", ")})`);
|
|
118
184
|
}
|
|
119
185
|
return {
|
|
120
186
|
latestVersion,
|
|
@@ -125,10 +191,13 @@ function capVersionedIrChain(chain, maxVersion) {
|
|
|
125
191
|
if (maxVersion == null) {
|
|
126
192
|
return chain;
|
|
127
193
|
}
|
|
128
|
-
|
|
129
|
-
|
|
194
|
+
const maxIndex = chain.findIndex(c => c.version === maxVersion.major && getEntryMinorVersion(c) === maxVersion.minor);
|
|
195
|
+
if (maxIndex === -1) {
|
|
196
|
+
throw new Error(`maxVersion ${formatSchemaVersion(maxVersion.major, maxVersion.minor)} is not in the schema chain ` + `(available versions: ${chain.map(formatEntryVersion).join(", ")})`);
|
|
130
197
|
}
|
|
131
|
-
|
|
198
|
+
|
|
199
|
+
// The chain is in version order, so everything up to the match is at or below it.
|
|
200
|
+
return chain.slice(0, maxIndex + 1);
|
|
132
201
|
}
|
|
133
202
|
|
|
134
203
|
/**
|
|
@@ -190,6 +259,47 @@ export function stripDeprecatedFieldsForSdk(chain) {
|
|
|
190
259
|
});
|
|
191
260
|
}
|
|
192
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Merge each major's minor versions into one entry, for generating SDK types.
|
|
264
|
+
*
|
|
265
|
+
* E.g. 3.0, 3.1 and 3.2 become one `3` entry that uses 3.2's IR, so `ShapeBox_v3` has every 3.x
|
|
266
|
+
* field. Migrations from all three are kept, because each lives only on the version that added it.
|
|
267
|
+
*/
|
|
268
|
+
export function collapseChainToMajors(chain) {
|
|
269
|
+
const collapsed = [];
|
|
270
|
+
for (const entry of chain) {
|
|
271
|
+
const previous = collapsed[collapsed.length - 1];
|
|
272
|
+
const migrations = previous?.version === entry.version ? mergeMigrations(previous.migrations, entry.migrations) : entry.migrations;
|
|
273
|
+
const collapsedEntry = {
|
|
274
|
+
version: entry.version,
|
|
275
|
+
ir: entry.ir,
|
|
276
|
+
...(migrations != null ? {
|
|
277
|
+
migrations
|
|
278
|
+
} : {})
|
|
279
|
+
};
|
|
280
|
+
if (previous?.version === entry.version) {
|
|
281
|
+
collapsed[collapsed.length - 1] = collapsedEntry;
|
|
282
|
+
} else {
|
|
283
|
+
collapsed.push(collapsedEntry);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return collapsed;
|
|
287
|
+
}
|
|
288
|
+
function mergeMigrations(base, override) {
|
|
289
|
+
if (base == null) return override;
|
|
290
|
+
if (override == null) return base;
|
|
291
|
+
const result = {
|
|
292
|
+
...base
|
|
293
|
+
};
|
|
294
|
+
for (const [modelKey, fields] of Object.entries(override)) {
|
|
295
|
+
result[modelKey] = {
|
|
296
|
+
...result[modelKey],
|
|
297
|
+
...fields
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
|
|
193
303
|
/**
|
|
194
304
|
* True if the chain has any field that requires a runtime upgrade function.
|
|
195
305
|
* Drives whether the generated SDK emits `DocumentModel` as a factory
|
|
@@ -202,6 +312,7 @@ export function stripDeprecatedFieldsForSdk(chain) {
|
|
|
202
312
|
* app must supply a zero-arg thunk; `undefined` is not a legal value.
|
|
203
313
|
*
|
|
204
314
|
* Optional additive fields don't trigger it; the lens leaves them alone.
|
|
315
|
+
* Pass every version (`stepChain`), so a required field added in a minor, like `title` in 3.2, counts.
|
|
205
316
|
*/
|
|
206
317
|
export function chainNeedsUpgradeFns(chain) {
|
|
207
318
|
for (let i = 1; i < chain.length; i++) {
|
|
@@ -223,4 +334,9 @@ export function chainNeedsUpgradeFns(chain) {
|
|
|
223
334
|
}
|
|
224
335
|
return false;
|
|
225
336
|
}
|
|
337
|
+
|
|
338
|
+
/** Upgrade function key for a step: `v2` for 2.0, `v2_1` for 2.1. Must match the key `applyReadLens` builds. */
|
|
339
|
+
export function upgradeStepKey(major, minor) {
|
|
340
|
+
return minor > 0 ? `v${major}_${minor}` : `v${major}`;
|
|
341
|
+
}
|
|
226
342
|
//# sourceMappingURL=resolveSchemaChain.js.map
|