@palantir/pack.document-schema.type-gen 0.20.0 → 0.25.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.
Files changed (113) hide show
  1. package/README.md +14 -0
  2. package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js +237 -0
  3. package/build/esm/commands/ir/__tests__/irDeployFirstParty.test.js.map +1 -0
  4. package/build/esm/commands/ir/irDeployHandler.js +81 -41
  5. package/build/esm/commands/ir/irDeployHandler.js.map +1 -1
  6. package/build/esm/commands/ir/irGenAssetHandler.js +13 -0
  7. package/build/esm/commands/ir/irGenAssetHandler.js.map +1 -1
  8. package/build/esm/commands/ir/registerIrCommands.js +2 -2
  9. package/build/esm/commands/ir/registerIrCommands.js.map +1 -1
  10. package/build/esm/lib/pack-docschema-api/pack-docschema-api/index.js +1 -0
  11. package/build/esm/lib/pack-docschema-api/pack-docschema-api/index.js.map +1 -1
  12. package/build/esm/lib/pack-docschema-api/pack-docschema-api/resourceRid.js +2 -0
  13. package/build/esm/lib/pack-docschema-api/pack-docschema-api/resourceRid.js.map +1 -0
  14. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueResourceRef.js +2 -0
  15. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueResourceRef.js.map +1 -0
  16. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.js +14 -0
  17. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.js.map +1 -1
  18. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/index.js +1 -0
  19. package/build/esm/lib/pack-docschema-api/pack-docschema-ir/index.js.map +1 -1
  20. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js +1 -1
  21. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/custom-discriminant.js.map +1 -1
  22. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js +3 -2
  23. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/external-refs.js.map +1 -1
  24. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js +1 -1
  25. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/simple-record.js.map +1 -1
  26. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js +1 -1
  27. package/build/esm/utils/ir/__tests__/__snapshots__/generateModelsFromIr/union-types.js.map +1 -1
  28. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js +1 -1
  29. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/array-and-map-types.js.map +1 -1
  30. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js +1 -1
  31. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/boolean-fields.js.map +1 -1
  32. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js +1 -1
  33. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/custom-discriminant.js.map +1 -1
  34. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js +1 -1
  35. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/datetime-fields.js.map +1 -1
  36. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js +1 -1
  37. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/simple-records.js.map +1 -1
  38. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js +1 -1
  39. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-before-records.js.map +1 -1
  40. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js +1 -1
  41. package/build/esm/utils/ir/__tests__/__snapshots__/generateZodSchemasFromIr/union-types.js.map +1 -1
  42. package/build/esm/utils/ir/__tests__/convertIrToConjureSchema.test.js +185 -0
  43. package/build/esm/utils/ir/__tests__/convertIrToConjureSchema.test.js.map +1 -0
  44. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js +6 -0
  45. package/build/esm/utils/ir/__tests__/convertIrToWireSchema.test.js.map +1 -1
  46. package/build/esm/utils/ir/__tests__/generateModelsFromIr.test.js +17 -0
  47. package/build/esm/utils/ir/__tests__/generateModelsFromIr.test.js.map +1 -1
  48. package/build/esm/utils/ir/convertIrToConjureSchema.js +148 -0
  49. package/build/esm/utils/ir/convertIrToConjureSchema.js.map +1 -0
  50. package/build/esm/utils/ir/convertIrToWireSchema.js +7 -0
  51. package/build/esm/utils/ir/convertIrToWireSchema.js.map +1 -1
  52. package/build/esm/utils/ir/generateModelsFromIr.js +3 -1
  53. package/build/esm/utils/ir/generateModelsFromIr.js.map +1 -1
  54. package/build/esm/utils/ir/generateZodSchemasFromIr.js +1 -0
  55. package/build/esm/utils/ir/generateZodSchemasFromIr.js.map +1 -1
  56. package/build/esm/utils/ir/irFieldHelpers.js +24 -11
  57. package/build/esm/utils/ir/irFieldHelpers.js.map +1 -1
  58. package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js +1 -1
  59. package/build/esm/utils/schema/__tests__/__snapshots__/generateDocumentTypeFromSchema/with-name-and-description.js.map +1 -1
  60. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/single-version.js.map +1 -1
  61. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/three-version-chain.js.map +1 -1
  62. package/build/esm/utils/schema/__tests__/__snapshots__/generateVersionsFromSchema/two-version.js.map +1 -1
  63. package/build/esm/utils/schema/__tests__/fixtures.js +6 -2
  64. package/build/esm/utils/schema/__tests__/fixtures.js.map +1 -1
  65. package/build/esm/utils/schema/convertSchemaToSteps.js +2 -0
  66. package/build/esm/utils/schema/convertSchemaToSteps.js.map +1 -1
  67. package/build/esm/utils/schema/generateTypesFromSchema.js +13 -8
  68. package/build/esm/utils/schema/generateTypesFromSchema.js.map +1 -1
  69. package/build/esm/utils/steps/__tests__/__snapshots__/types/arrayFields.js.map +1 -1
  70. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js +1 -1
  71. package/build/esm/utils/steps/__tests__/__snapshots__/types/customDiscriminant.js.map +1 -1
  72. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js +1 -1
  73. package/build/esm/utils/steps/__tests__/__snapshots__/types/generateTypeScriptInterfaces.js.map +1 -1
  74. package/build/esm/utils/steps/__tests__/__snapshots__/types/refTypes.js.map +1 -1
  75. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleRecord.js.map +1 -1
  76. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js +1 -1
  77. package/build/esm/utils/steps/__tests__/__snapshots__/types/simpleSteps.js.map +1 -1
  78. package/build/esm/utils/steps/__tests__/fixtures/stepSchemas/refTypes.js +15 -0
  79. package/build/esm/utils/steps/__tests__/fixtures/stepSchemas/refTypes.js.map +1 -1
  80. package/build/esm/utils/steps/convertStepsToIr.js +5 -0
  81. package/build/esm/utils/steps/convertStepsToIr.js.map +1 -1
  82. package/build/esm/utils/steps/convertStepsToSchema.js +5 -0
  83. package/build/esm/utils/steps/convertStepsToSchema.js.map +1 -1
  84. package/build/types/commands/ir/__tests__/irDeployFirstParty.test.d.ts +2 -0
  85. package/build/types/commands/ir/__tests__/irDeployFirstParty.test.d.ts.map +1 -0
  86. package/build/types/commands/ir/irDeployHandler.d.ts +20 -2
  87. package/build/types/commands/ir/irDeployHandler.d.ts.map +1 -1
  88. package/build/types/commands/ir/irGenAssetHandler.d.ts +5 -0
  89. package/build/types/commands/ir/irGenAssetHandler.d.ts.map +1 -1
  90. package/build/types/commands/ir/registerIrCommands.d.ts.map +1 -1
  91. package/build/types/lib/pack-docschema-api/pack-docschema-api/index.d.ts +1 -0
  92. package/build/types/lib/pack-docschema-api/pack-docschema-api/index.d.ts.map +1 -1
  93. package/build/types/lib/pack-docschema-api/pack-docschema-api/resourceRid.d.ts +5 -0
  94. package/build/types/lib/pack-docschema-api/pack-docschema-api/resourceRid.d.ts.map +1 -0
  95. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueResourceRef.d.ts +5 -0
  96. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueResourceRef.d.ts.map +1 -0
  97. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.d.ts +11 -1
  98. package/build/types/lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.d.ts.map +1 -1
  99. package/build/types/lib/pack-docschema-api/pack-docschema-ir/index.d.ts +1 -0
  100. package/build/types/lib/pack-docschema-api/pack-docschema-ir/index.d.ts.map +1 -1
  101. package/build/types/utils/ir/__tests__/convertIrToConjureSchema.test.d.ts +2 -0
  102. package/build/types/utils/ir/__tests__/convertIrToConjureSchema.test.d.ts.map +1 -0
  103. package/build/types/utils/ir/convertIrToConjureSchema.d.ts +26 -0
  104. package/build/types/utils/ir/convertIrToConjureSchema.d.ts.map +1 -0
  105. package/build/types/utils/ir/generateModelsFromIr.d.ts.map +1 -1
  106. package/build/types/utils/ir/generateZodSchemasFromIr.d.ts.map +1 -1
  107. package/build/types/utils/ir/irFieldHelpers.d.ts +4 -3
  108. package/build/types/utils/ir/irFieldHelpers.d.ts.map +1 -1
  109. package/build/types/utils/schema/__tests__/fixtures.d.ts.map +1 -1
  110. package/build/types/utils/schema/convertSchemaToSteps.d.ts.map +1 -1
  111. package/build/types/utils/schema/generateTypesFromSchema.d.ts.map +1 -1
  112. package/build/types/utils/steps/convertStepsToIr.d.ts.map +1 -1
  113. package/package.json +4 -4
@@ -113,6 +113,13 @@ function convertFieldValueType(value) {
113
113
  }
114
114
  function convertFieldValueUnion(value) {
115
115
  switch (value.type) {
116
+ case "resourceRef":
117
+ // TODO: @osdk/foundry.pack does not yet declare the resourceRef variant. Drop the
118
+ // cast once the api-gateway publish and osdk regeneration land.
119
+ return {
120
+ type: "resourceRef",
121
+ resourceRids: [...value.resourceRef.resourceRids]
122
+ };
116
123
  case "boolean":
117
124
  return {
118
125
  type: "boolean",
@@ -1 +1 @@
1
- {"version":3,"file":"convertIrToWireSchema.js","names":["convertIrToWireSchema","ir","wireModels","key","model","Object","entries","models","convertModelDef","primaryModelKeys","type","record","name","description","orUndefined","fields","map","convertFieldDef","union","discriminant","variants","metadata","convertSchemaMeta","Error","field","isOptional","fieldType","convertFieldTypeUnion","allowNullValue","array","value","convertFieldValueType","set","valueType","convertFieldValueUnion","defaultValue","boolean","datetime","documentTypeRids","docRef","rejectNaN","double","minValue","maxValue","integer","mediaRef","modelTypes","modelRef","interfaceTypeRids","object","objectTypeRids","string","minLength","maxLength","text","meta","addedInVersion","deprecatedFromVersion","deprecatedMessage","undefined"],"sources":["convertIrToWireSchema.ts"],"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\nimport type {\n DocumentTypeSchema,\n FieldDef,\n FieldTypeUnion,\n FieldValueType,\n FieldValueUnion,\n ModelDef,\n SchemaMetadata,\n} from \"@osdk/foundry.pack\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n ISchemaMeta,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\n\n/**\n * Converts the internal IR schema to the wire format expected by the Foundry API.\n *\n * The IR uses conjure-style tagged unions where the payload is nested under a key\n * matching the discriminant (e.g. `{ type: \"record\", record: { ... } }`).\n *\n * The Foundry API (DocumentTypeSchema from @osdk/foundry.pack) uses flat discriminated\n * unions where payload fields are spread alongside the type discriminant\n * (e.g. `{ type: \"record\", key: \"...\", name: \"...\", ... }`).\n *\n * This function performs that structural conversion. Field names already match between\n * the IR and wire format.\n */\nexport function convertIrToWireSchema(ir: IRealTimeDocumentSchema): DocumentTypeSchema {\n const wireModels: DocumentTypeSchema[\"models\"] = {};\n\n for (const [key, model] of Object.entries(ir.models)) {\n wireModels[key] = convertModelDef(model);\n }\n\n return {\n primaryModelKeys: [...ir.primaryModelKeys],\n models: wireModels,\n };\n}\n\nfunction convertModelDef(model: IModelDef): ModelDef {\n switch (model.type) {\n case \"record\":\n // TODO: The @osdk/foundry.pack wire types still declare `metadata` as required on\n // RecordDef, but the Pack API schema (api-gateway / backpack) has removed it.\n // Cast through unknown until the published types catch up.\n return {\n type: \"record\",\n key: model.record.key,\n name: model.record.name,\n description: orUndefined(model.record.description),\n fields: [...model.record.fields.map(convertFieldDef)],\n } as unknown as ModelDef;\n case \"union\":\n return {\n type: \"union\",\n key: model.union.key,\n discriminant: model.union.discriminant,\n name: model.union.name,\n description: orUndefined(model.union.description),\n variants: { ...model.union.variants },\n metadata: convertSchemaMeta(model.union.metadata),\n };\n default: {\n const _exhaustive: never = model;\n throw new Error(`Unknown model type: ${(_exhaustive as IModelDef).type}`);\n }\n }\n}\n\nfunction convertFieldDef(field: IFieldDef): FieldDef {\n return {\n key: field.key,\n name: field.name,\n description: orUndefined(field.description),\n isOptional: orUndefined(field.isOptional),\n fieldType: convertFieldTypeUnion(field.fieldType),\n metadata: convertSchemaMeta(field.metadata),\n };\n}\n\nfunction convertFieldTypeUnion(fieldType: IFieldTypeUnion): FieldTypeUnion {\n switch (fieldType.type) {\n case \"array\":\n return {\n type: \"array\",\n allowNullValue: fieldType.array.allowNullValue,\n value: convertFieldValueType(fieldType.array.value),\n };\n case \"map\":\n return {\n type: \"map\",\n allowNullValue: fieldType.map.allowNullValue,\n key: convertFieldValueType(fieldType.map.key),\n value: convertFieldValueType(fieldType.map.value),\n };\n case \"set\":\n return {\n type: \"set\",\n allowNullValue: fieldType.set.allowNullValue,\n value: convertFieldValueType(fieldType.set.value),\n };\n case \"value\":\n return {\n type: \"value\",\n valueType: convertFieldValueUnion(fieldType.value),\n };\n }\n}\n\nfunction convertFieldValueType(value: IFieldValueUnion): FieldValueType {\n return {\n valueType: convertFieldValueUnion(value),\n };\n}\n\nfunction convertFieldValueUnion(value: IFieldValueUnion): FieldValueUnion {\n switch (value.type) {\n case \"boolean\":\n return { type: \"boolean\", defaultValue: orUndefined(value.boolean.defaultValue) };\n case \"datetime\":\n return { type: \"datetime\", value: value.datetime.value };\n case \"docRef\":\n return { type: \"docRef\", documentTypeRids: [...value.docRef.documentTypeRids] };\n case \"double\":\n return {\n type: \"double\",\n defaultValue: rejectNaN(orUndefined(value.double.defaultValue)),\n minValue: rejectNaN(orUndefined(value.double.minValue)),\n maxValue: rejectNaN(orUndefined(value.double.maxValue)),\n };\n case \"integer\":\n return {\n type: \"integer\",\n defaultValue: orUndefined(value.integer.defaultValue),\n minValue: orUndefined(value.integer.minValue),\n maxValue: orUndefined(value.integer.maxValue),\n };\n case \"mediaRef\":\n return { type: \"mediaRef\", value: value.mediaRef.value };\n case \"modelRef\":\n return { type: \"modelRef\", modelTypes: [...value.modelRef.modelTypes] };\n case \"object\":\n return {\n type: \"object\",\n interfaceTypeRids: [...value.object.interfaceTypeRids],\n objectTypeRids: [...value.object.objectTypeRids],\n };\n case \"string\":\n return {\n type: \"string\",\n defaultValue: orUndefined(value.string.defaultValue),\n minLength: orUndefined(value.string.minLength),\n maxLength: orUndefined(value.string.maxLength),\n };\n case \"text\":\n return {\n type: \"text\",\n defaultValue: orUndefined(value.text.defaultValue),\n minLength: orUndefined(value.text.minLength),\n maxLength: orUndefined(value.text.maxLength),\n };\n case \"unmanagedJson\":\n return { type: \"unmanagedJson\" };\n case \"userRef\":\n return { type: \"userRef\" };\n }\n}\n\nfunction convertSchemaMeta(meta: ISchemaMeta): SchemaMetadata {\n return {\n addedInVersion: meta.addedInVersion,\n deprecatedFromVersion: orUndefined(meta.deprecatedFromVersion),\n deprecatedMessage: orUndefined(meta.deprecatedMessage),\n };\n}\n\nfunction orUndefined<T>(value: T | null | undefined): T | undefined {\n return value ?? undefined;\n}\n\nfunction rejectNaN(value: number | \"NaN\" | undefined): number | undefined {\n if (value === \"NaN\") {\n throw new Error(\"NaN is not a valid double value for wire serialization\");\n }\n return value;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAqBA,CAACC,EAA2B,EAAsB;EACrF,MAAMC,UAAwC,GAAG,CAAC,CAAC;EAEnD,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,EAAE,CAACM,MAAM,CAAC,EAAE;IACpDL,UAAU,CAACC,GAAG,CAAC,GAAGK,eAAe,CAACJ,KAAK,CAAC;EAC1C;EAEA,OAAO;IACLK,gBAAgB,EAAE,CAAC,GAAGR,EAAE,CAACQ,gBAAgB,CAAC;IAC1CF,MAAM,EAAEL;EACV,CAAC;AACH;AAEA,SAASM,eAAeA,CAACJ,KAAgB,EAAY;EACnD,QAAQA,KAAK,CAACM,IAAI;IAChB,KAAK,QAAQ;MACX;MACA;MACA;MACA,OAAO;QACLA,IAAI,EAAE,QAAQ;QACdP,GAAG,EAAEC,KAAK,CAACO,MAAM,CAACR,GAAG;QACrBS,IAAI,EAAER,KAAK,CAACO,MAAM,CAACC,IAAI;QACvBC,WAAW,EAAEC,WAAW,CAACV,KAAK,CAACO,MAAM,CAACE,WAAW,CAAC;QAClDE,MAAM,EAAE,CAAC,GAAGX,KAAK,CAACO,MAAM,CAACI,MAAM,CAACC,GAAG,CAACC,eAAe,CAAC;MACtD,CAAC;IACH,KAAK,OAAO;MACV,OAAO;QACLP,IAAI,EAAE,OAAO;QACbP,GAAG,EAAEC,KAAK,CAACc,KAAK,CAACf,GAAG;QACpBgB,YAAY,EAAEf,KAAK,CAACc,KAAK,CAACC,YAAY;QACtCP,IAAI,EAAER,KAAK,CAACc,KAAK,CAACN,IAAI;QACtBC,WAAW,EAAEC,WAAW,CAACV,KAAK,CAACc,KAAK,CAACL,WAAW,CAAC;QACjDO,QAAQ,EAAE;UAAE,GAAGhB,KAAK,CAACc,KAAK,CAACE;QAAS,CAAC;QACrCC,QAAQ,EAAEC,iBAAiB,CAAClB,KAAK,CAACc,KAAK,CAACG,QAAQ;MAClD,CAAC;IACH;MAAS;QAEP,MAAM,IAAIE,KAAK,CAAC,uBADWnB,KAAK,CACkCM,IAAI,EAAE,CAAC;MAC3E;EACF;AACF;AAEA,SAASO,eAAeA,CAACO,KAAgB,EAAY;EACnD,OAAO;IACLrB,GAAG,EAAEqB,KAAK,CAACrB,GAAG;IACdS,IAAI,EAAEY,KAAK,CAACZ,IAAI;IAChBC,WAAW,EAAEC,WAAW,CAACU,KAAK,CAACX,WAAW,CAAC;IAC3CY,UAAU,EAAEX,WAAW,CAACU,KAAK,CAACC,UAAU,CAAC;IACzCC,SAAS,EAAEC,qBAAqB,CAACH,KAAK,CAACE,SAAS,CAAC;IACjDL,QAAQ,EAAEC,iBAAiB,CAACE,KAAK,CAACH,QAAQ;EAC5C,CAAC;AACH;AAEA,SAASM,qBAAqBA,CAACD,SAA0B,EAAkB;EACzE,QAAQA,SAAS,CAAChB,IAAI;IACpB,KAAK,OAAO;MACV,OAAO;QACLA,IAAI,EAAE,OAAO;QACbkB,cAAc,EAAEF,SAAS,CAACG,KAAK,CAACD,cAAc;QAC9CE,KAAK,EAAEC,qBAAqB,CAACL,SAAS,CAACG,KAAK,CAACC,KAAK;MACpD,CAAC;IACH,KAAK,KAAK;MACR,OAAO;QACLpB,IAAI,EAAE,KAAK;QACXkB,cAAc,EAAEF,SAAS,CAACV,GAAG,CAACY,cAAc;QAC5CzB,GAAG,EAAE4B,qBAAqB,CAACL,SAAS,CAACV,GAAG,CAACb,GAAG,CAAC;QAC7C2B,KAAK,EAAEC,qBAAqB,CAACL,SAAS,CAACV,GAAG,CAACc,KAAK;MAClD,CAAC;IACH,KAAK,KAAK;MACR,OAAO;QACLpB,IAAI,EAAE,KAAK;QACXkB,cAAc,EAAEF,SAAS,CAACM,GAAG,CAACJ,cAAc;QAC5CE,KAAK,EAAEC,qBAAqB,CAACL,SAAS,CAACM,GAAG,CAACF,KAAK;MAClD,CAAC;IACH,KAAK,OAAO;MACV,OAAO;QACLpB,IAAI,EAAE,OAAO;QACbuB,SAAS,EAAEC,sBAAsB,CAACR,SAAS,CAACI,KAAK;MACnD,CAAC;EACL;AACF;AAEA,SAASC,qBAAqBA,CAACD,KAAuB,EAAkB;EACtE,OAAO;IACLG,SAAS,EAAEC,sBAAsB,CAACJ,KAAK;EACzC,CAAC;AACH;AAEA,SAASI,sBAAsBA,CAACJ,KAAuB,EAAmB;EACxE,QAAQA,KAAK,CAACpB,IAAI;IAChB,KAAK,SAAS;MACZ,OAAO;QAAEA,IAAI,EAAE,SAAS;QAAEyB,YAAY,EAAErB,WAAW,CAACgB,KAAK,CAACM,OAAO,CAACD,YAAY;MAAE,CAAC;IACnF,KAAK,UAAU;MACb,OAAO;QAAEzB,IAAI,EAAE,UAAU;QAAEoB,KAAK,EAAEA,KAAK,CAACO,QAAQ,CAACP;MAAM,CAAC;IAC1D,KAAK,QAAQ;MACX,OAAO;QAAEpB,IAAI,EAAE,QAAQ;QAAE4B,gBAAgB,EAAE,CAAC,GAAGR,KAAK,CAACS,MAAM,CAACD,gBAAgB;MAAE,CAAC;IACjF,KAAK,QAAQ;MACX,OAAO;QACL5B,IAAI,EAAE,QAAQ;QACdyB,YAAY,EAAEK,SAAS,CAAC1B,WAAW,CAACgB,KAAK,CAACW,MAAM,CAACN,YAAY,CAAC,CAAC;QAC/DO,QAAQ,EAAEF,SAAS,CAAC1B,WAAW,CAACgB,KAAK,CAACW,MAAM,CAACC,QAAQ,CAAC,CAAC;QACvDC,QAAQ,EAAEH,SAAS,CAAC1B,WAAW,CAACgB,KAAK,CAACW,MAAM,CAACE,QAAQ,CAAC;MACxD,CAAC;IACH,KAAK,SAAS;MACZ,OAAO;QACLjC,IAAI,EAAE,SAAS;QACfyB,YAAY,EAAErB,WAAW,CAACgB,KAAK,CAACc,OAAO,CAACT,YAAY,CAAC;QACrDO,QAAQ,EAAE5B,WAAW,CAACgB,KAAK,CAACc,OAAO,CAACF,QAAQ,CAAC;QAC7CC,QAAQ,EAAE7B,WAAW,CAACgB,KAAK,CAACc,OAAO,CAACD,QAAQ;MAC9C,CAAC;IACH,KAAK,UAAU;MACb,OAAO;QAAEjC,IAAI,EAAE,UAAU;QAAEoB,KAAK,EAAEA,KAAK,CAACe,QAAQ,CAACf;MAAM,CAAC;IAC1D,KAAK,UAAU;MACb,OAAO;QAAEpB,IAAI,EAAE,UAAU;QAAEoC,UAAU,EAAE,CAAC,GAAGhB,KAAK,CAACiB,QAAQ,CAACD,UAAU;MAAE,CAAC;IACzE,KAAK,QAAQ;MACX,OAAO;QACLpC,IAAI,EAAE,QAAQ;QACdsC,iBAAiB,EAAE,CAAC,GAAGlB,KAAK,CAACmB,MAAM,CAACD,iBAAiB,CAAC;QACtDE,cAAc,EAAE,CAAC,GAAGpB,KAAK,CAACmB,MAAM,CAACC,cAAc;MACjD,CAAC;IACH,KAAK,QAAQ;MACX,OAAO;QACLxC,IAAI,EAAE,QAAQ;QACdyB,YAAY,EAAErB,WAAW,CAACgB,KAAK,CAACqB,MAAM,CAAChB,YAAY,CAAC;QACpDiB,SAAS,EAAEtC,WAAW,CAACgB,KAAK,CAACqB,MAAM,CAACC,SAAS,CAAC;QAC9CC,SAAS,EAAEvC,WAAW,CAACgB,KAAK,CAACqB,MAAM,CAACE,SAAS;MAC/C,CAAC;IACH,KAAK,MAAM;MACT,OAAO;QACL3C,IAAI,EAAE,MAAM;QACZyB,YAAY,EAAErB,WAAW,CAACgB,KAAK,CAACwB,IAAI,CAACnB,YAAY,CAAC;QAClDiB,SAAS,EAAEtC,WAAW,CAACgB,KAAK,CAACwB,IAAI,CAACF,SAAS,CAAC;QAC5CC,SAAS,EAAEvC,WAAW,CAACgB,KAAK,CAACwB,IAAI,CAACD,SAAS;MAC7C,CAAC;IACH,KAAK,eAAe;MAClB,OAAO;QAAE3C,IAAI,EAAE;MAAgB,CAAC;IAClC,KAAK,SAAS;MACZ,OAAO;QAAEA,IAAI,EAAE;MAAU,CAAC;EAC9B;AACF;AAEA,SAASY,iBAAiBA,CAACiC,IAAiB,EAAkB;EAC5D,OAAO;IACLC,cAAc,EAAED,IAAI,CAACC,cAAc;IACnCC,qBAAqB,EAAE3C,WAAW,CAACyC,IAAI,CAACE,qBAAqB,CAAC;IAC9DC,iBAAiB,EAAE5C,WAAW,CAACyC,IAAI,CAACG,iBAAiB;EACvD,CAAC;AACH;AAEA,SAAS5C,WAAWA,CAAIgB,KAA2B,EAAiB;EAClE,OAAOA,KAAK,IAAI6B,SAAS;AAC3B;AAEA,SAASnB,SAASA,CAACV,KAAiC,EAAsB;EACxE,IAAIA,KAAK,KAAK,KAAK,EAAE;IACnB,MAAM,IAAIP,KAAK,CAAC,wDAAwD,CAAC;EAC3E;EACA,OAAOO,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"file":"convertIrToWireSchema.js","names":["convertIrToWireSchema","ir","wireModels","key","model","Object","entries","models","convertModelDef","primaryModelKeys","type","record","name","description","orUndefined","fields","map","convertFieldDef","union","discriminant","variants","metadata","convertSchemaMeta","Error","field","isOptional","fieldType","convertFieldTypeUnion","allowNullValue","array","value","convertFieldValueType","set","valueType","convertFieldValueUnion","resourceRids","resourceRef","defaultValue","boolean","datetime","documentTypeRids","docRef","rejectNaN","double","minValue","maxValue","integer","mediaRef","modelTypes","modelRef","interfaceTypeRids","object","objectTypeRids","string","minLength","maxLength","text","meta","addedInVersion","deprecatedFromVersion","deprecatedMessage","undefined"],"sources":["convertIrToWireSchema.ts"],"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\nimport type {\n DocumentTypeSchema,\n FieldDef,\n FieldTypeUnion,\n FieldValueType,\n FieldValueUnion,\n ModelDef,\n SchemaMetadata,\n} from \"@osdk/foundry.pack\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n ISchemaMeta,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\n\n/**\n * Converts the internal IR schema to the wire format expected by the Foundry API.\n *\n * The IR uses conjure-style tagged unions where the payload is nested under a key\n * matching the discriminant (e.g. `{ type: \"record\", record: { ... } }`).\n *\n * The Foundry API (DocumentTypeSchema from @osdk/foundry.pack) uses flat discriminated\n * unions where payload fields are spread alongside the type discriminant\n * (e.g. `{ type: \"record\", key: \"...\", name: \"...\", ... }`).\n *\n * This function performs that structural conversion. Field names already match between\n * the IR and wire format.\n */\nexport function convertIrToWireSchema(ir: IRealTimeDocumentSchema): DocumentTypeSchema {\n const wireModels: DocumentTypeSchema[\"models\"] = {};\n\n for (const [key, model] of Object.entries(ir.models)) {\n wireModels[key] = convertModelDef(model);\n }\n\n return {\n primaryModelKeys: [...ir.primaryModelKeys],\n models: wireModels,\n };\n}\n\nfunction convertModelDef(model: IModelDef): ModelDef {\n switch (model.type) {\n case \"record\":\n // TODO: The @osdk/foundry.pack wire types still declare `metadata` as required on\n // RecordDef, but the Pack API schema (api-gateway / backpack) has removed it.\n // Cast through unknown until the published types catch up.\n return {\n type: \"record\",\n key: model.record.key,\n name: model.record.name,\n description: orUndefined(model.record.description),\n fields: [...model.record.fields.map(convertFieldDef)],\n } as unknown as ModelDef;\n case \"union\":\n return {\n type: \"union\",\n key: model.union.key,\n discriminant: model.union.discriminant,\n name: model.union.name,\n description: orUndefined(model.union.description),\n variants: { ...model.union.variants },\n metadata: convertSchemaMeta(model.union.metadata),\n };\n default: {\n const _exhaustive: never = model;\n throw new Error(`Unknown model type: ${(_exhaustive as IModelDef).type}`);\n }\n }\n}\n\nfunction convertFieldDef(field: IFieldDef): FieldDef {\n return {\n key: field.key,\n name: field.name,\n description: orUndefined(field.description),\n isOptional: orUndefined(field.isOptional),\n fieldType: convertFieldTypeUnion(field.fieldType),\n metadata: convertSchemaMeta(field.metadata),\n };\n}\n\nfunction convertFieldTypeUnion(fieldType: IFieldTypeUnion): FieldTypeUnion {\n switch (fieldType.type) {\n case \"array\":\n return {\n type: \"array\",\n allowNullValue: fieldType.array.allowNullValue,\n value: convertFieldValueType(fieldType.array.value),\n };\n case \"map\":\n return {\n type: \"map\",\n allowNullValue: fieldType.map.allowNullValue,\n key: convertFieldValueType(fieldType.map.key),\n value: convertFieldValueType(fieldType.map.value),\n };\n case \"set\":\n return {\n type: \"set\",\n allowNullValue: fieldType.set.allowNullValue,\n value: convertFieldValueType(fieldType.set.value),\n };\n case \"value\":\n return {\n type: \"value\",\n valueType: convertFieldValueUnion(fieldType.value),\n };\n }\n}\n\nfunction convertFieldValueType(value: IFieldValueUnion): FieldValueType {\n return {\n valueType: convertFieldValueUnion(value),\n };\n}\n\nfunction convertFieldValueUnion(value: IFieldValueUnion): FieldValueUnion {\n switch (value.type) {\n case \"resourceRef\":\n // TODO: @osdk/foundry.pack does not yet declare the resourceRef variant. Drop the\n // cast once the api-gateway publish and osdk regeneration land.\n return {\n type: \"resourceRef\",\n resourceRids: [...value.resourceRef.resourceRids],\n } as unknown as FieldValueUnion;\n case \"boolean\":\n return { type: \"boolean\", defaultValue: orUndefined(value.boolean.defaultValue) };\n case \"datetime\":\n return { type: \"datetime\", value: value.datetime.value };\n case \"docRef\":\n return { type: \"docRef\", documentTypeRids: [...value.docRef.documentTypeRids] };\n case \"double\":\n return {\n type: \"double\",\n defaultValue: rejectNaN(orUndefined(value.double.defaultValue)),\n minValue: rejectNaN(orUndefined(value.double.minValue)),\n maxValue: rejectNaN(orUndefined(value.double.maxValue)),\n };\n case \"integer\":\n return {\n type: \"integer\",\n defaultValue: orUndefined(value.integer.defaultValue),\n minValue: orUndefined(value.integer.minValue),\n maxValue: orUndefined(value.integer.maxValue),\n };\n case \"mediaRef\":\n return { type: \"mediaRef\", value: value.mediaRef.value };\n case \"modelRef\":\n return { type: \"modelRef\", modelTypes: [...value.modelRef.modelTypes] };\n case \"object\":\n return {\n type: \"object\",\n interfaceTypeRids: [...value.object.interfaceTypeRids],\n objectTypeRids: [...value.object.objectTypeRids],\n };\n case \"string\":\n return {\n type: \"string\",\n defaultValue: orUndefined(value.string.defaultValue),\n minLength: orUndefined(value.string.minLength),\n maxLength: orUndefined(value.string.maxLength),\n };\n case \"text\":\n return {\n type: \"text\",\n defaultValue: orUndefined(value.text.defaultValue),\n minLength: orUndefined(value.text.minLength),\n maxLength: orUndefined(value.text.maxLength),\n };\n case \"unmanagedJson\":\n return { type: \"unmanagedJson\" };\n case \"userRef\":\n return { type: \"userRef\" };\n }\n}\n\nfunction convertSchemaMeta(meta: ISchemaMeta): SchemaMetadata {\n return {\n addedInVersion: meta.addedInVersion,\n deprecatedFromVersion: orUndefined(meta.deprecatedFromVersion),\n deprecatedMessage: orUndefined(meta.deprecatedMessage),\n };\n}\n\nfunction orUndefined<T>(value: T | null | undefined): T | undefined {\n return value ?? undefined;\n}\n\nfunction rejectNaN(value: number | \"NaN\" | undefined): number | undefined {\n if (value === \"NaN\") {\n throw new Error(\"NaN is not a valid double value for wire serialization\");\n }\n return value;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -133,7 +133,9 @@ export const ${modelName}Model: ${modelName}Model = {
133
133
  for (const field of model.record.fields) {
134
134
  if (field.fieldType.type === "value") {
135
135
  const valueType = field.fieldType.value.type;
136
- if (valueType === "docRef") {
136
+ if (valueType === "resourceRef") {
137
+ externalRefFields.push([field.key, "resourceRef"]);
138
+ } else if (valueType === "docRef") {
137
139
  externalRefFields.push([field.key, "docRef"]);
138
140
  } else if (valueType === "mediaRef") {
139
141
  externalRefFields.push([field.key, "mediaRef"]);
@@ -1 +1 @@
1
- {"version":3,"file":"generateModelsFromIr.js","names":["invariant","formatVariantName","GENERATED_FILE_HEADER","ModelGenerator","constructor","schema","options","undefined","generateModels","typeImportPath","schemaImportPath","modelTypesPackage","imports","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemaNames","variantSchemaName","schemaImports","modelConstants","generateModelConstants","documentSchema","generateDocumentSchema","Promise","resolve","constants","processedModels","process","env","NODE_ENV","has","discriminant","modelConstant","generateModelConstant","push","typeName","modelName","schemaName","externalRefFields","extractExternalRefFieldTypes","metadataFields","modelType","length","entries","map","field","metadataCode","record","fields","fieldType","valueType","value","modelEntries","generateModelsFromIr","generator"],"sources":["generateModelsFromIr.ts"],"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\nimport invariant from \"tiny-invariant\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\n\nexport interface ModelGeneratorOptions {\n typeImportPath?: string;\n schemaImportPath?: string;\n}\n\nexport class ModelGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options: ModelGeneratorOptions | undefined = undefined,\n ) {}\n\n public generateModels(): Promise<string> {\n const typeImportPath = this.options?.typeImportPath ?? \"./types.js\";\n const schemaImportPath = this.options?.schemaImportPath ?? \"./schema.js\";\n const modelTypesPackage = \"@palantir/pack.document-schema.model-types\";\n\n // Generate imports\n let imports =\n `import type { DocumentSchema, RecordModel, UnionModel } from \"${modelTypesPackage}\";\\n`;\n imports += `import { Metadata } from \"${modelTypesPackage}\";\\n`;\n\n // Collect all type names (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${typeImportPath}\";\\n`;\n\n // Collect all schema names (primary models + union variants)\n const schemaNames = new Set<string>();\n for (const modelKey of this.schema.primaryModelKeys) {\n schemaNames.add(`${modelKey}Schema`);\n\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${model.union.key}${formattedVariantName}Schema`;\n schemaNames.add(variantSchemaName);\n }\n }\n }\n\n const schemaImports = Array.from(schemaNames).sort().join(\", \");\n imports += `import { ${schemaImports} } from \"${schemaImportPath}\";\\n\\n`;\n\n // Generate model constants\n const modelConstants = this.generateModelConstants();\n\n // Generate DocumentSchema\n const documentSchema = this.generateDocumentSchema();\n\n return Promise.resolve(\n GENERATED_FILE_HEADER + imports + modelConstants + \"\\n\\n\" + documentSchema + \"\\n\",\n );\n }\n\n private generateModelConstants(): string {\n const constants: string[] = [];\n const processedModels = new Set<string>();\n\n // Generate models for primary keys and their union variants\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Generate primary model constant\n if (!processedModels.has(modelKey)) {\n const discriminant = model.type === \"union\" ? model.union.discriminant : undefined;\n const modelConstant = this.generateModelConstant(modelKey, modelKey, discriminant);\n constants.push(modelConstant);\n processedModels.add(modelKey);\n }\n\n // Generate union variant constants\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n const modelConstant = this.generateModelConstant(\n variantTypeName,\n variantTypeName,\n model.union.discriminant,\n );\n constants.push(modelConstant);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return constants.join(\"\\n\\n\");\n }\n\n private generateModelConstant(\n typeName: string,\n modelName: string,\n discriminant?: string,\n ): string {\n const schemaName = `${typeName}Schema`;\n const externalRefFields = this.extractExternalRefFieldTypes(modelName);\n\n const metadataFields: string[] = [];\n const modelType = discriminant != null ? \"UnionModel\" : \"RecordModel\";\n\n if (discriminant != null) {\n metadataFields.push(` discriminant: \"${discriminant}\",`);\n }\n\n if (externalRefFields.length > 0) {\n const entries = externalRefFields.map(([field, type]) => ` ${field}: \"${type}\",`).join(\n \"\\n\",\n );\n metadataFields.push(` externalRefFieldTypes: {\\n${entries}\\n },`);\n }\n\n metadataFields.push(` name: \"${modelName}\",`);\n\n const metadataCode = metadataFields.length > 0 ? `\\n${metadataFields.join(\"\\n\")}\\n ` : \"\";\n\n return `export interface ${modelName}Model extends ${modelType}<${typeName}, typeof ${schemaName}> {}\nexport const ${modelName}Model: ${modelName}Model = {\n __type: {} as ${typeName},\n zodSchema: ${schemaName},\n [Metadata]: {${metadataCode}},\n};`;\n }\n\n private extractExternalRefFieldTypes(modelName: string): Array<[string, string]> {\n const model = this.schema.models[modelName];\n if (model?.type !== \"record\") {\n return [];\n }\n\n const externalRefFields: Array<[string, string]> = [];\n for (const field of model.record.fields) {\n if (field.fieldType.type === \"value\") {\n const valueType = field.fieldType.value.type;\n if (valueType === \"docRef\") {\n externalRefFields.push([field.key, \"docRef\"]);\n } else if (valueType === \"mediaRef\") {\n externalRefFields.push([field.key, \"mediaRef\"]);\n } else if (valueType === \"object\") {\n externalRefFields.push([field.key, \"objectRef\"]);\n } else if (valueType === \"userRef\") {\n externalRefFields.push([field.key, \"userRef\"]);\n }\n }\n }\n\n return externalRefFields;\n }\n\n private generateDocumentSchema(): string {\n const modelEntries: string[] = [];\n const processedModels = new Set<string>();\n\n // Collect all model names that will be generated\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Add primary model\n if (!processedModels.has(modelKey)) {\n modelEntries.push(` ${modelKey}: ${modelKey}Model`);\n processedModels.add(modelKey);\n }\n\n // Add union variant models\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n modelEntries.push(` ${variantTypeName}: ${variantTypeName}Model`);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return `export const DocumentModel = {\n${modelEntries.join(\",\\n\")},\n [Metadata]: {\n version: 1,\n },\n} as const satisfies DocumentSchema;\\n\n export type DocumentModel = typeof DocumentModel;`;\n }\n}\n\nexport async function generateModelsFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ModelGeneratorOptions,\n): Promise<string> {\n const generator = new ModelGenerator(schema, options);\n return generator.generateModels();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateModelsFromIr.js","names":["invariant","formatVariantName","GENERATED_FILE_HEADER","ModelGenerator","constructor","schema","options","undefined","generateModels","typeImportPath","schemaImportPath","modelTypesPackage","imports","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemaNames","variantSchemaName","schemaImports","modelConstants","generateModelConstants","documentSchema","generateDocumentSchema","Promise","resolve","constants","processedModels","process","env","NODE_ENV","has","discriminant","modelConstant","generateModelConstant","push","typeName","modelName","schemaName","externalRefFields","extractExternalRefFieldTypes","metadataFields","modelType","length","entries","map","field","metadataCode","record","fields","fieldType","valueType","value","modelEntries","generateModelsFromIr","generator"],"sources":["generateModelsFromIr.ts"],"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\nimport invariant from \"tiny-invariant\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\n\nexport interface ModelGeneratorOptions {\n typeImportPath?: string;\n schemaImportPath?: string;\n}\n\nexport class ModelGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options: ModelGeneratorOptions | undefined = undefined,\n ) {}\n\n public generateModels(): Promise<string> {\n const typeImportPath = this.options?.typeImportPath ?? \"./types.js\";\n const schemaImportPath = this.options?.schemaImportPath ?? \"./schema.js\";\n const modelTypesPackage = \"@palantir/pack.document-schema.model-types\";\n\n // Generate imports\n let imports =\n `import type { DocumentSchema, RecordModel, UnionModel } from \"${modelTypesPackage}\";\\n`;\n imports += `import { Metadata } from \"${modelTypesPackage}\";\\n`;\n\n // Collect all type names (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${typeImportPath}\";\\n`;\n\n // Collect all schema names (primary models + union variants)\n const schemaNames = new Set<string>();\n for (const modelKey of this.schema.primaryModelKeys) {\n schemaNames.add(`${modelKey}Schema`);\n\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${model.union.key}${formattedVariantName}Schema`;\n schemaNames.add(variantSchemaName);\n }\n }\n }\n\n const schemaImports = Array.from(schemaNames).sort().join(\", \");\n imports += `import { ${schemaImports} } from \"${schemaImportPath}\";\\n\\n`;\n\n // Generate model constants\n const modelConstants = this.generateModelConstants();\n\n // Generate DocumentSchema\n const documentSchema = this.generateDocumentSchema();\n\n return Promise.resolve(\n GENERATED_FILE_HEADER + imports + modelConstants + \"\\n\\n\" + documentSchema + \"\\n\",\n );\n }\n\n private generateModelConstants(): string {\n const constants: string[] = [];\n const processedModels = new Set<string>();\n\n // Generate models for primary keys and their union variants\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Generate primary model constant\n if (!processedModels.has(modelKey)) {\n const discriminant = model.type === \"union\" ? model.union.discriminant : undefined;\n const modelConstant = this.generateModelConstant(modelKey, modelKey, discriminant);\n constants.push(modelConstant);\n processedModels.add(modelKey);\n }\n\n // Generate union variant constants\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n const modelConstant = this.generateModelConstant(\n variantTypeName,\n variantTypeName,\n model.union.discriminant,\n );\n constants.push(modelConstant);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return constants.join(\"\\n\\n\");\n }\n\n private generateModelConstant(\n typeName: string,\n modelName: string,\n discriminant?: string,\n ): string {\n const schemaName = `${typeName}Schema`;\n const externalRefFields = this.extractExternalRefFieldTypes(modelName);\n\n const metadataFields: string[] = [];\n const modelType = discriminant != null ? \"UnionModel\" : \"RecordModel\";\n\n if (discriminant != null) {\n metadataFields.push(` discriminant: \"${discriminant}\",`);\n }\n\n if (externalRefFields.length > 0) {\n const entries = externalRefFields.map(([field, type]) => ` ${field}: \"${type}\",`).join(\n \"\\n\",\n );\n metadataFields.push(` externalRefFieldTypes: {\\n${entries}\\n },`);\n }\n\n metadataFields.push(` name: \"${modelName}\",`);\n\n const metadataCode = metadataFields.length > 0 ? `\\n${metadataFields.join(\"\\n\")}\\n ` : \"\";\n\n return `export interface ${modelName}Model extends ${modelType}<${typeName}, typeof ${schemaName}> {}\nexport const ${modelName}Model: ${modelName}Model = {\n __type: {} as ${typeName},\n zodSchema: ${schemaName},\n [Metadata]: {${metadataCode}},\n};`;\n }\n\n private extractExternalRefFieldTypes(modelName: string): Array<[string, string]> {\n const model = this.schema.models[modelName];\n if (model?.type !== \"record\") {\n return [];\n }\n\n const externalRefFields: Array<[string, string]> = [];\n for (const field of model.record.fields) {\n if (field.fieldType.type === \"value\") {\n const valueType = field.fieldType.value.type;\n if (valueType === \"resourceRef\") {\n externalRefFields.push([field.key, \"resourceRef\"]);\n } else if (valueType === \"docRef\") {\n externalRefFields.push([field.key, \"docRef\"]);\n } else if (valueType === \"mediaRef\") {\n externalRefFields.push([field.key, \"mediaRef\"]);\n } else if (valueType === \"object\") {\n externalRefFields.push([field.key, \"objectRef\"]);\n } else if (valueType === \"userRef\") {\n externalRefFields.push([field.key, \"userRef\"]);\n }\n }\n }\n\n return externalRefFields;\n }\n\n private generateDocumentSchema(): string {\n const modelEntries: string[] = [];\n const processedModels = new Set<string>();\n\n // Collect all model names that will be generated\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n invariant(model != null, `Model not found: ${modelKey}`);\n\n // Add primary model\n if (!processedModels.has(modelKey)) {\n modelEntries.push(` ${modelKey}: ${modelKey}Model`);\n processedModels.add(modelKey);\n }\n\n // Add union variant models\n if (model.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n\n if (!processedModels.has(variantTypeName)) {\n modelEntries.push(` ${variantTypeName}: ${variantTypeName}Model`);\n processedModels.add(variantTypeName);\n }\n }\n }\n }\n\n return `export const DocumentModel = {\n${modelEntries.join(\",\\n\")},\n [Metadata]: {\n version: 1,\n },\n} as const satisfies DocumentSchema;\\n\n export type DocumentModel = typeof DocumentModel;`;\n }\n}\n\nexport async function generateModelsFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ModelGeneratorOptions,\n): Promise<string> {\n const generator = new ModelGenerator(schema, options);\n return generator.generateModels();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -299,6 +299,7 @@ class ZodSchemaGenerator {
299
299
  return "z.unknown()";
300
300
  case "unmanagedJson":
301
301
  return "z.unknown()";
302
+ case "resourceRef":
302
303
  case "docRef":
303
304
  case "mediaRef":
304
305
  case "object":
@@ -1 +1 @@
1
- {"version":3,"file":"generateZodSchemasFromIr.js","names":["consola","invariant","assertNever","formatVariantName","GENERATED_FILE_HEADER","ZodSchemaGenerator","constructor","schema","options","generateSDK","Error","generateTypes","imports","typeImportPath","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemasCode","generateZodSchemas","schemaLines","emittedModels","recordSchemas","Map","unionDefinitions","modelTypeKey","process","env","NODE_ENV","schemaCode","generateRecordSchema","record","satisfiesClause","set","push","remainingUnions","madeProgress","size","allDependenciesEmitted","values","every","variantModelKey","has","unionSchemas","generateUnionWithVariants","delete","warn","generateModel","generateUnionSchema","fieldEntryLines","field","fields","fieldSchema","generateFieldSchema","variantSchemaNames","entries","discriminatorField","discriminant","variantSchemas","variantSchemaName","variantModel","variantSchemaCode","recordKey","unionKey","unionSchema","unionSatisfiesClause","fieldValueSchemaStr","generateFieldTypeSchema","fieldType","isOptional","arrayElementSchema","generateFieldValueSchema","array","value","keySchema","map","valueSchema","setElementSchema","fieldValue","doubleSchema","double","minValue","maxValue","intSchema","integer","refVariantsLines","modelType","modelRef","modelTypes","includes","length","stringSchema","string","minLength","maxLength","generateZodSchemasFromIr","generator"],"sources":["generateZodSchemasFromIr.ts"],"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\nimport consola from \"consola\";\nimport invariant from \"tiny-invariant\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { assertNever } from \"../assertNever.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\n\nexport interface ZodGeneratorOptions {\n namespace?: string;\n includeTypes?: boolean;\n includeCRDT?: boolean;\n typeImportPath?: string;\n}\n\nclass ZodSchemaGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options?: ZodGeneratorOptions,\n ) {}\n\n public generateSDK(_options: ZodGeneratorOptions): string {\n throw new Error(\n \"SDK generation not yet implemented - placeholder for future development\",\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async generateTypes(): Promise<string> {\n let imports = \"import { z } from 'zod';\\n\";\n\n if (this.options?.typeImportPath) {\n imports = \"import type { ZodType } from \\\"zod\\\";\\n\" + imports;\n\n // Collect all type names from the schema (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${this.options.typeImportPath}\";\\n`;\n }\n\n imports += \"\\n\";\n const schemasCode = this.generateZodSchemas();\n return GENERATED_FILE_HEADER + imports + schemasCode + \"\\n\";\n }\n\n private generateZodSchemas(): string {\n const schemaLines: string[] = [];\n const emittedModels = new Set<string>();\n const recordSchemas = new Map<string, string>();\n const unionDefinitions = new Map<string, IUnionDef>();\n\n // First, categorize all models and generate record schemas\n for (const modelTypeKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelTypeKey];\n invariant(model != null, `Model not found: ${modelTypeKey}`);\n\n switch (model.type) {\n case \"record\": {\n const schemaCode = this.generateRecordSchema(model.record);\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${modelTypeKey}>`\n : \"\";\n recordSchemas.set(\n modelTypeKey,\n `export const ${modelTypeKey}Schema = ${schemaCode}${satisfiesClause};`,\n );\n break;\n }\n case \"union\": {\n unionDefinitions.set(modelTypeKey, model.union);\n break;\n }\n }\n }\n\n // Emit all record schemas first\n for (const [modelTypeKey, schemaCode] of recordSchemas) {\n schemaLines.push(schemaCode);\n emittedModels.add(modelTypeKey);\n }\n\n // Now handle unions with proper dependency ordering\n const remainingUnions = new Map(unionDefinitions);\n let madeProgress = true;\n\n while (remainingUnions.size > 0 && madeProgress) {\n madeProgress = false;\n\n for (const [modelTypeKey, union] of remainingUnions) {\n // Check if all dependencies are already emitted\n const allDependenciesEmitted = Object.values(union.variants).every(\n variantModelKey => emittedModels.has(variantModelKey),\n );\n\n if (allDependenciesEmitted) {\n // Generate the union with its variant schemas\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n emittedModels.add(modelTypeKey);\n remainingUnions.delete(modelTypeKey);\n madeProgress = true;\n }\n }\n }\n\n // If there are still remaining unions, we have circular dependencies or missing models\n if (remainingUnions.size > 0) {\n consola.warn(\n `Warning: Could not generate schemas for unions due to circular or missing dependencies: ${\n Array.from(remainingUnions.keys()).join(\", \")\n }`,\n );\n // Emit them anyway with a comment\n for (const [modelTypeKey, union] of remainingUnions) {\n schemaLines.push(`// Warning: Union ${modelTypeKey} may have unresolved dependencies`);\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n }\n }\n\n return schemaLines.join(\"\\n\\n\");\n }\n\n private generateModel(\n model: IModelDef,\n ): string {\n switch (model.type) {\n case \"record\":\n return this.generateRecordSchema(model.record);\n case \"union\":\n return this.generateUnionSchema(model.union);\n default:\n assertNever(model);\n }\n }\n\n private generateRecordSchema(\n record: IRecordDef,\n ): string {\n const fieldEntryLines: string[] = [];\n for (const field of record.fields) {\n const fieldSchema = this.generateFieldSchema(field);\n fieldEntryLines.push(` ${field.key}: ${fieldSchema}`);\n }\n return `z.object({\\n${fieldEntryLines.join(\",\\n\")}\\n})`;\n }\n\n private generateUnionSchema(\n union: IUnionDef,\n ): string {\n // Just return the discriminated union without variant schemas\n const variantSchemaNames: string[] = [];\n\n for (const [variantName] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n variantSchemaNames.push(`${union.key}${formattedVariantName}Schema`);\n }\n\n const discriminatorField = union.discriminant ?? \"type\";\n return `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n }\n\n private generateUnionWithVariants(\n union: IUnionDef,\n ): string {\n const variantSchemas: string[] = [];\n const variantSchemaNames: string[] = [];\n\n // Generate variant schemas\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${union.key}${formattedVariantName}Schema`;\n variantSchemaNames.push(variantSchemaName);\n\n // Look up the model from the schema\n const variantModel = this.schema.models[variantModelKey];\n invariant(variantModel != null, `Model not found: ${variantModelKey}`);\n\n let variantSchemaCode: string;\n switch (variantModel.type) {\n case \"record\": {\n // For record variants, reference the existing record schema and extend with discriminator\n const recordKey = variantModel.record.key;\n const discriminatorField = ` ${union.discriminant}: z.literal(\"${variantName}\")`;\n\n // Extend the existing record schema with the discriminator field\n // Note: We assume records are defined before unions, so we can directly reference them\n variantSchemaCode = `${recordKey}Schema.extend({\\n${discriminatorField}\\n})`;\n break;\n }\n case \"union\": {\n // For union variants (nested unions), wrap with discriminator and value\n const unionKey = variantModel.union.key;\n variantSchemaCode =\n `z.object({\\n ${union.discriminant}: z.literal(\"${variantName}\"),\\n value: z.lazy(() => ${unionKey}Schema)\\n})`;\n break;\n }\n default:\n assertNever(variantModel);\n }\n\n // Generate satisfies clause for variant schemas if typeImportPath is provided\n const variantTypeName = `${union.key}${formattedVariantName}`;\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${variantTypeName}>`\n : \"\";\n variantSchemas.push(\n `export const ${variantSchemaName} = ${variantSchemaCode}${satisfiesClause};`,\n );\n }\n\n // Generate the discriminated union\n const discriminatorField = union.discriminant || \"type\";\n const unionSchema = `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n\n // Generate satisfies clause for the main union schema if typeImportPath is provided\n const unionSatisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${union.key}>`\n : \"\";\n\n // Return the variant schemas and the union schema\n return variantSchemas.join(\"\\n\\n\")\n + `\\n\\nexport const ${union.key}Schema = ${unionSchema}${unionSatisfiesClause};`;\n }\n\n private generateFieldSchema(\n field: IFieldDef,\n ): string {\n const fieldValueSchemaStr = this.generateFieldTypeSchema(field.fieldType);\n\n if (field.isOptional) {\n return `${fieldValueSchemaStr}.optional()`;\n }\n\n return fieldValueSchemaStr;\n }\n\n private generateFieldTypeSchema(\n fieldType: IFieldTypeUnion,\n ): string {\n switch (fieldType.type) {\n case \"array\": {\n const arrayElementSchema = this.generateFieldValueSchema(\n fieldType.array.value,\n );\n return `z.array(${arrayElementSchema})`;\n }\n\n case \"map\": {\n const keySchema = this.generateFieldValueSchema(\n fieldType.map.key,\n );\n const valueSchema = this.generateFieldValueSchema(\n fieldType.map.value,\n );\n return `z.record(${keySchema}, ${valueSchema})`;\n }\n case \"set\": {\n const setElementSchema = this.generateFieldValueSchema(\n fieldType.set.value,\n );\n return `z.array(${setElementSchema})`;\n } // Zod doesn't have Set, use array\n\n case \"value\":\n return this.generateFieldValueSchema(fieldType.value);\n\n default:\n assertNever(fieldType);\n }\n }\n\n private generateFieldValueSchema(\n fieldValue: IFieldValueUnion,\n ): string {\n switch (fieldValue.type) {\n case \"boolean\":\n return \"z.boolean()\";\n\n case \"datetime\":\n return \"z.string().datetime()\";\n\n case \"double\": {\n let doubleSchema = \"z.number()\";\n if (fieldValue.double.minValue != null) {\n doubleSchema += `.min(${fieldValue.double.minValue})`;\n }\n if (fieldValue.double.maxValue != null) {\n doubleSchema += `.max(${fieldValue.double.maxValue})`;\n }\n return doubleSchema;\n }\n\n case \"integer\": {\n let intSchema = \"z.number().int()\";\n if (fieldValue.integer.minValue != null) {\n intSchema += `.min(${fieldValue.integer.minValue})`;\n }\n if (fieldValue.integer.maxValue != null) {\n intSchema += `.max(${fieldValue.integer.maxValue})`;\n }\n return intSchema;\n }\n\n case \"modelRef\": {\n const refVariantsLines: string[] = [];\n\n for (const modelType of fieldValue.modelRef.modelTypes) {\n const model = this.schema.models[modelType];\n invariant(model != null, `Model not found: ${modelType}`);\n\n // Referent the model directly\n if (this.schema.primaryModelKeys.includes(modelType)) {\n return `z.lazy(() => ${modelType}Schema)`;\n }\n\n // Generate inline model\n // TODO: should not be possible to have recursive nested models but we should guard against it\n return this.generateModel(model);\n }\n\n if (refVariantsLines.length === 0) {\n return \"z.unknown()\";\n }\n\n if (refVariantsLines.length === 1) {\n return refVariantsLines[0]!;\n }\n\n return `z.union([${refVariantsLines.join(\", \")}])`;\n }\n\n case \"string\": {\n let stringSchema = \"z.string()\";\n if (fieldValue.string.minLength != null) {\n stringSchema += `.min(${fieldValue.string.minLength})`;\n }\n if (fieldValue.string.maxLength != null) {\n stringSchema += `.max(${fieldValue.string.maxLength})`;\n }\n return stringSchema;\n }\n\n case \"text\":\n return \"z.unknown()\";\n\n case \"unmanagedJson\":\n return \"z.unknown()\";\n\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"userRef\":\n return \"z.string()\"; // Assume these are string IDs\n\n default:\n assertNever(fieldValue);\n }\n }\n}\n\nexport async function generateZodSchemasFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ZodGeneratorOptions,\n): Promise<string> {\n const generator = new ZodSchemaGenerator(schema, options);\n return generator.generateTypes();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateZodSchemasFromIr.js","names":["consola","invariant","assertNever","formatVariantName","GENERATED_FILE_HEADER","ZodSchemaGenerator","constructor","schema","options","generateSDK","Error","generateTypes","imports","typeImportPath","typeNames","Set","primaryModelKeys","modelKey","model","models","type","variantName","Object","keys","union","variants","formattedVariantName","variantTypeName","key","add","typeImports","Array","from","sort","join","schemasCode","generateZodSchemas","schemaLines","emittedModels","recordSchemas","Map","unionDefinitions","modelTypeKey","process","env","NODE_ENV","schemaCode","generateRecordSchema","record","satisfiesClause","set","push","remainingUnions","madeProgress","size","allDependenciesEmitted","values","every","variantModelKey","has","unionSchemas","generateUnionWithVariants","delete","warn","generateModel","generateUnionSchema","fieldEntryLines","field","fields","fieldSchema","generateFieldSchema","variantSchemaNames","entries","discriminatorField","discriminant","variantSchemas","variantSchemaName","variantModel","variantSchemaCode","recordKey","unionKey","unionSchema","unionSatisfiesClause","fieldValueSchemaStr","generateFieldTypeSchema","fieldType","isOptional","arrayElementSchema","generateFieldValueSchema","array","value","keySchema","map","valueSchema","setElementSchema","fieldValue","doubleSchema","double","minValue","maxValue","intSchema","integer","refVariantsLines","modelType","modelRef","modelTypes","includes","length","stringSchema","string","minLength","maxLength","generateZodSchemasFromIr","generator"],"sources":["generateZodSchemasFromIr.ts"],"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\nimport consola from \"consola\";\nimport invariant from \"tiny-invariant\";\nimport type {\n IFieldDef,\n IFieldTypeUnion,\n IFieldValueUnion,\n IModelDef,\n IRealTimeDocumentSchema,\n IRecordDef,\n IUnionDef,\n} from \"../../lib/pack-docschema-api/pack-docschema-ir/index.js\";\nimport { assertNever } from \"../assertNever.js\";\nimport { formatVariantName } from \"../formatVariantName.js\";\nimport { GENERATED_FILE_HEADER } from \"../generatedFileHeader.js\";\n\nexport interface ZodGeneratorOptions {\n namespace?: string;\n includeTypes?: boolean;\n includeCRDT?: boolean;\n typeImportPath?: string;\n}\n\nclass ZodSchemaGenerator {\n constructor(\n private readonly schema: IRealTimeDocumentSchema,\n private readonly options?: ZodGeneratorOptions,\n ) {}\n\n public generateSDK(_options: ZodGeneratorOptions): string {\n throw new Error(\n \"SDK generation not yet implemented - placeholder for future development\",\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async generateTypes(): Promise<string> {\n let imports = \"import { z } from 'zod';\\n\";\n\n if (this.options?.typeImportPath) {\n imports = \"import type { ZodType } from \\\"zod\\\";\\n\" + imports;\n\n // Collect all type names from the schema (primary models + union variants)\n const typeNames = new Set(this.schema.primaryModelKeys);\n\n // Add union variant type names\n for (const modelKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelKey];\n if (model?.type === \"union\") {\n for (const variantName of Object.keys(model.union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantTypeName = `${model.union.key}${formattedVariantName}`;\n typeNames.add(variantTypeName);\n }\n }\n }\n\n const typeImports = Array.from(typeNames).sort().join(\", \");\n imports += `import type { ${typeImports} } from \"${this.options.typeImportPath}\";\\n`;\n }\n\n imports += \"\\n\";\n const schemasCode = this.generateZodSchemas();\n return GENERATED_FILE_HEADER + imports + schemasCode + \"\\n\";\n }\n\n private generateZodSchemas(): string {\n const schemaLines: string[] = [];\n const emittedModels = new Set<string>();\n const recordSchemas = new Map<string, string>();\n const unionDefinitions = new Map<string, IUnionDef>();\n\n // First, categorize all models and generate record schemas\n for (const modelTypeKey of this.schema.primaryModelKeys) {\n const model = this.schema.models[modelTypeKey];\n invariant(model != null, `Model not found: ${modelTypeKey}`);\n\n switch (model.type) {\n case \"record\": {\n const schemaCode = this.generateRecordSchema(model.record);\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${modelTypeKey}>`\n : \"\";\n recordSchemas.set(\n modelTypeKey,\n `export const ${modelTypeKey}Schema = ${schemaCode}${satisfiesClause};`,\n );\n break;\n }\n case \"union\": {\n unionDefinitions.set(modelTypeKey, model.union);\n break;\n }\n }\n }\n\n // Emit all record schemas first\n for (const [modelTypeKey, schemaCode] of recordSchemas) {\n schemaLines.push(schemaCode);\n emittedModels.add(modelTypeKey);\n }\n\n // Now handle unions with proper dependency ordering\n const remainingUnions = new Map(unionDefinitions);\n let madeProgress = true;\n\n while (remainingUnions.size > 0 && madeProgress) {\n madeProgress = false;\n\n for (const [modelTypeKey, union] of remainingUnions) {\n // Check if all dependencies are already emitted\n const allDependenciesEmitted = Object.values(union.variants).every(\n variantModelKey => emittedModels.has(variantModelKey),\n );\n\n if (allDependenciesEmitted) {\n // Generate the union with its variant schemas\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n emittedModels.add(modelTypeKey);\n remainingUnions.delete(modelTypeKey);\n madeProgress = true;\n }\n }\n }\n\n // If there are still remaining unions, we have circular dependencies or missing models\n if (remainingUnions.size > 0) {\n consola.warn(\n `Warning: Could not generate schemas for unions due to circular or missing dependencies: ${\n Array.from(remainingUnions.keys()).join(\", \")\n }`,\n );\n // Emit them anyway with a comment\n for (const [modelTypeKey, union] of remainingUnions) {\n schemaLines.push(`// Warning: Union ${modelTypeKey} may have unresolved dependencies`);\n const unionSchemas = this.generateUnionWithVariants(union);\n schemaLines.push(unionSchemas);\n }\n }\n\n return schemaLines.join(\"\\n\\n\");\n }\n\n private generateModel(\n model: IModelDef,\n ): string {\n switch (model.type) {\n case \"record\":\n return this.generateRecordSchema(model.record);\n case \"union\":\n return this.generateUnionSchema(model.union);\n default:\n assertNever(model);\n }\n }\n\n private generateRecordSchema(\n record: IRecordDef,\n ): string {\n const fieldEntryLines: string[] = [];\n for (const field of record.fields) {\n const fieldSchema = this.generateFieldSchema(field);\n fieldEntryLines.push(` ${field.key}: ${fieldSchema}`);\n }\n return `z.object({\\n${fieldEntryLines.join(\",\\n\")}\\n})`;\n }\n\n private generateUnionSchema(\n union: IUnionDef,\n ): string {\n // Just return the discriminated union without variant schemas\n const variantSchemaNames: string[] = [];\n\n for (const [variantName] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n variantSchemaNames.push(`${union.key}${formattedVariantName}Schema`);\n }\n\n const discriminatorField = union.discriminant ?? \"type\";\n return `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n }\n\n private generateUnionWithVariants(\n union: IUnionDef,\n ): string {\n const variantSchemas: string[] = [];\n const variantSchemaNames: string[] = [];\n\n // Generate variant schemas\n for (const [variantName, variantModelKey] of Object.entries(union.variants)) {\n const formattedVariantName = formatVariantName(variantName);\n const variantSchemaName = `${union.key}${formattedVariantName}Schema`;\n variantSchemaNames.push(variantSchemaName);\n\n // Look up the model from the schema\n const variantModel = this.schema.models[variantModelKey];\n invariant(variantModel != null, `Model not found: ${variantModelKey}`);\n\n let variantSchemaCode: string;\n switch (variantModel.type) {\n case \"record\": {\n // For record variants, reference the existing record schema and extend with discriminator\n const recordKey = variantModel.record.key;\n const discriminatorField = ` ${union.discriminant}: z.literal(\"${variantName}\")`;\n\n // Extend the existing record schema with the discriminator field\n // Note: We assume records are defined before unions, so we can directly reference them\n variantSchemaCode = `${recordKey}Schema.extend({\\n${discriminatorField}\\n})`;\n break;\n }\n case \"union\": {\n // For union variants (nested unions), wrap with discriminator and value\n const unionKey = variantModel.union.key;\n variantSchemaCode =\n `z.object({\\n ${union.discriminant}: z.literal(\"${variantName}\"),\\n value: z.lazy(() => ${unionKey}Schema)\\n})`;\n break;\n }\n default:\n assertNever(variantModel);\n }\n\n // Generate satisfies clause for variant schemas if typeImportPath is provided\n const variantTypeName = `${union.key}${formattedVariantName}`;\n const satisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${variantTypeName}>`\n : \"\";\n variantSchemas.push(\n `export const ${variantSchemaName} = ${variantSchemaCode}${satisfiesClause};`,\n );\n }\n\n // Generate the discriminated union\n const discriminatorField = union.discriminant || \"type\";\n const unionSchema = `z.discriminatedUnion(\"${discriminatorField}\", [\\n ${\n variantSchemaNames.join(\",\\n \")\n }\\n])`;\n\n // Generate satisfies clause for the main union schema if typeImportPath is provided\n const unionSatisfiesClause = this.options?.typeImportPath\n ? ` satisfies ZodType<${union.key}>`\n : \"\";\n\n // Return the variant schemas and the union schema\n return variantSchemas.join(\"\\n\\n\")\n + `\\n\\nexport const ${union.key}Schema = ${unionSchema}${unionSatisfiesClause};`;\n }\n\n private generateFieldSchema(\n field: IFieldDef,\n ): string {\n const fieldValueSchemaStr = this.generateFieldTypeSchema(field.fieldType);\n\n if (field.isOptional) {\n return `${fieldValueSchemaStr}.optional()`;\n }\n\n return fieldValueSchemaStr;\n }\n\n private generateFieldTypeSchema(\n fieldType: IFieldTypeUnion,\n ): string {\n switch (fieldType.type) {\n case \"array\": {\n const arrayElementSchema = this.generateFieldValueSchema(\n fieldType.array.value,\n );\n return `z.array(${arrayElementSchema})`;\n }\n\n case \"map\": {\n const keySchema = this.generateFieldValueSchema(\n fieldType.map.key,\n );\n const valueSchema = this.generateFieldValueSchema(\n fieldType.map.value,\n );\n return `z.record(${keySchema}, ${valueSchema})`;\n }\n case \"set\": {\n const setElementSchema = this.generateFieldValueSchema(\n fieldType.set.value,\n );\n return `z.array(${setElementSchema})`;\n } // Zod doesn't have Set, use array\n\n case \"value\":\n return this.generateFieldValueSchema(fieldType.value);\n\n default:\n assertNever(fieldType);\n }\n }\n\n private generateFieldValueSchema(\n fieldValue: IFieldValueUnion,\n ): string {\n switch (fieldValue.type) {\n case \"boolean\":\n return \"z.boolean()\";\n\n case \"datetime\":\n return \"z.string().datetime()\";\n\n case \"double\": {\n let doubleSchema = \"z.number()\";\n if (fieldValue.double.minValue != null) {\n doubleSchema += `.min(${fieldValue.double.minValue})`;\n }\n if (fieldValue.double.maxValue != null) {\n doubleSchema += `.max(${fieldValue.double.maxValue})`;\n }\n return doubleSchema;\n }\n\n case \"integer\": {\n let intSchema = \"z.number().int()\";\n if (fieldValue.integer.minValue != null) {\n intSchema += `.min(${fieldValue.integer.minValue})`;\n }\n if (fieldValue.integer.maxValue != null) {\n intSchema += `.max(${fieldValue.integer.maxValue})`;\n }\n return intSchema;\n }\n\n case \"modelRef\": {\n const refVariantsLines: string[] = [];\n\n for (const modelType of fieldValue.modelRef.modelTypes) {\n const model = this.schema.models[modelType];\n invariant(model != null, `Model not found: ${modelType}`);\n\n // Referent the model directly\n if (this.schema.primaryModelKeys.includes(modelType)) {\n return `z.lazy(() => ${modelType}Schema)`;\n }\n\n // Generate inline model\n // TODO: should not be possible to have recursive nested models but we should guard against it\n return this.generateModel(model);\n }\n\n if (refVariantsLines.length === 0) {\n return \"z.unknown()\";\n }\n\n if (refVariantsLines.length === 1) {\n return refVariantsLines[0]!;\n }\n\n return `z.union([${refVariantsLines.join(\", \")}])`;\n }\n\n case \"string\": {\n let stringSchema = \"z.string()\";\n if (fieldValue.string.minLength != null) {\n stringSchema += `.min(${fieldValue.string.minLength})`;\n }\n if (fieldValue.string.maxLength != null) {\n stringSchema += `.max(${fieldValue.string.maxLength})`;\n }\n return stringSchema;\n }\n\n case \"text\":\n return \"z.unknown()\";\n\n case \"unmanagedJson\":\n return \"z.unknown()\";\n\n case \"resourceRef\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"userRef\":\n return \"z.string()\"; // Assume these are string IDs\n\n default:\n assertNever(fieldValue);\n }\n }\n}\n\nexport async function generateZodSchemasFromIr(\n schema: IRealTimeDocumentSchema,\n options?: ZodGeneratorOptions,\n): Promise<string> {\n const generator = new ZodSchemaGenerator(schema, options);\n return generator.generateTypes();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -40,25 +40,29 @@ function convertCollectionValueToTypeScript(collection, version) {
40
40
  }
41
41
  function convertFieldValueToTypeScript(value, version) {
42
42
  switch (value.type) {
43
+ // Ref fields hold the bare id, so emit the id type — not the <X>Ref handle, which is
44
+ // an object and would contradict the `string` / `z.string()` internal representation.
45
+ case "resourceRef":
46
+ return "ResourceRid";
43
47
  case "boolean":
44
48
  return "boolean";
45
49
  case "datetime":
46
50
  return "string";
47
51
  case "docRef":
48
- return "DocumentRef";
52
+ return "DocumentId";
49
53
  case "double":
50
54
  return "number";
51
55
  case "integer":
52
56
  return "number";
53
57
  case "mediaRef":
54
- return "MediaRef";
58
+ return "MediaId";
55
59
  case "modelRef":
56
60
  {
57
61
  const modelKey = value.modelRef.modelTypes[0];
58
62
  return version != null ? versionedTypeName(modelKey, version) : modelKey;
59
63
  }
60
64
  case "object":
61
- return "ObjectRef";
65
+ return "ObjectId";
62
66
  case "string":
63
67
  return "string";
64
68
  case "text":
@@ -66,7 +70,7 @@ function convertFieldValueToTypeScript(value, version) {
66
70
  case "unmanagedJson":
67
71
  return "any";
68
72
  case "userRef":
69
- return "UserRef";
73
+ return "UserId";
70
74
  }
71
75
  }
72
76
 
@@ -96,6 +100,7 @@ function convertFieldValueToZodSchema(value, version) {
96
100
  switch (value.type) {
97
101
  case "boolean":
98
102
  return "z.boolean()";
103
+ case "resourceRef":
99
104
  case "datetime":
100
105
  case "docRef":
101
106
  case "mediaRef":
@@ -163,6 +168,7 @@ function convertFieldValueToInternalTs(value) {
163
168
  case "double":
164
169
  case "integer":
165
170
  return "number";
171
+ case "resourceRef":
166
172
  case "datetime":
167
173
  case "docRef":
168
174
  case "mediaRef":
@@ -222,6 +228,7 @@ function convertFieldValueToInternalZod(value) {
222
228
  case "double":
223
229
  case "integer":
224
230
  return "z.number()";
231
+ case "resourceRef":
225
232
  case "datetime":
226
233
  case "docRef":
227
234
  case "mediaRef":
@@ -288,8 +295,8 @@ function convertFieldValueToDescriptor(value) {
288
295
  // ---------------------------------------------------------------------------
289
296
 
290
297
  /**
291
- * Detect which external ref types (DocumentRef, MediaRef, ObjectRef, UserRef)
292
- * are used anywhere in the IR schema.
298
+ * Detect which external ref types (ResourceRef, DocumentRef, MediaRef, ObjectRef,
299
+ * UserRef) are used anywhere in the IR schema.
293
300
  */
294
301
  export function detectUsedRefTypes(ir) {
295
302
  const refTypes = new Set();
@@ -314,17 +321,20 @@ function scanFieldTypeForRefs(fieldType, out) {
314
321
  }
315
322
  function scanFieldValueForRefs(value, out) {
316
323
  switch (value.type) {
324
+ case "resourceRef":
325
+ out.add("ResourceRid");
326
+ break;
317
327
  case "docRef":
318
- out.add("DocumentRef");
328
+ out.add("DocumentId");
319
329
  break;
320
330
  case "mediaRef":
321
- out.add("MediaRef");
331
+ out.add("MediaId");
322
332
  break;
323
333
  case "object":
324
- out.add("ObjectRef");
334
+ out.add("ObjectId");
325
335
  break;
326
336
  case "userRef":
327
- out.add("UserRef");
337
+ out.add("UserId");
328
338
  break;
329
339
  }
330
340
  }
@@ -354,7 +364,8 @@ function collectReferencedValuesTypes(value, version, out) {
354
364
  // ---------------------------------------------------------------------------
355
365
 
356
366
  /**
357
- * Detect the external ref type (docRef, mediaRef, objectRef, userRef) of a field, if any.
367
+ * Detect the external ref type (resourceRef, docRef, mediaRef, objectRef, userRef) of a
368
+ * field, if any.
358
369
  */
359
370
  export function findExternalRefType(fieldType) {
360
371
  switch (fieldType.type) {
@@ -368,6 +379,8 @@ export function findExternalRefType(fieldType) {
368
379
  }
369
380
  function findExternalRefValueType(value) {
370
381
  switch (value.type) {
382
+ case "resourceRef":
383
+ return "resourceRef";
371
384
  case "docRef":
372
385
  return "docRef";
373
386
  case "mediaRef":
@@ -1 +1 @@
1
- {"version":3,"file":"irFieldHelpers.js","names":["versionedSchemaName","versionedTypeName","convertFieldTypeToTypeScript","fieldType","version","type","convertCollectionValueToTypeScript","array","Error","convertFieldValueToTypeScript","value","collection","modelKey","modelRef","modelTypes","convertFieldTypeToZodSchema","inner","convertFieldValueToZodSchema","optSuffix","allowNullValue","refSchemaName","refTypeName","convertFieldTypeToInternalTypeScript","isOptional","base","convertFieldTypeToInternalTsInner","convertCollectionValueToInternalTs","needsParens","includes","startsWith","wrapped","convertFieldValueToInternalTs","convertFieldTypeToInternalZod","convertFieldTypeToInternalZodInner","endsWith","convertCollectionValueToInternalZod","convertFieldValueToInternalZod","convertFieldTypeToDescriptor","convertFieldTypeToDescriptorInner","convertCollectionValueToDescriptor","convertFieldValueToDescriptor","detectUsedRefTypes","ir","refTypes","Set","modelDef","Object","values","models","field","record","fields","scanFieldTypeForRefs","out","scanFieldValueForRefs","add","collectReferencedTypes","collectReferencedValuesTypes","findExternalRefType","findExternalRefValueType","undefined"],"sources":["irFieldHelpers.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 type { IFieldTypeCollection } from \"../../lib/pack-docschema-api/pack-docschema-ir/fieldTypeCollection.js\";\nimport type { IFieldTypeUnion } from \"../../lib/pack-docschema-api/pack-docschema-ir/fieldTypeUnion.js\";\nimport type { IFieldValueUnion } from \"../../lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.js\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/realTimeDocumentSchema.js\";\nimport { versionedSchemaName, versionedTypeName } from \"../schema/runtimeSchema.js\";\n\n// ---------------------------------------------------------------------------\n// Public read-type TypeScript conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a TypeScript type string for public read types.\n */\nexport function convertFieldTypeToTypeScript(\n fieldType: IFieldTypeUnion,\n version?: number,\n): string {\n switch (fieldType.type) {\n case \"array\":\n return `readonly ${convertCollectionValueToTypeScript(fieldType.array, version)}[]`;\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in TypeScript generation`);\n case \"value\":\n return convertFieldValueToTypeScript(fieldType.value, version);\n }\n}\n\nfunction convertCollectionValueToTypeScript(\n collection: IFieldTypeCollection,\n version?: number,\n): string {\n // allowNullValue is ignored in public read types (current behavior)\n return convertFieldValueToTypeScript(collection.value, version);\n}\n\nfunction convertFieldValueToTypeScript(\n value: IFieldValueUnion,\n version?: number,\n): string {\n switch (value.type) {\n case \"boolean\":\n return \"boolean\";\n case \"datetime\":\n return \"string\";\n case \"docRef\":\n return \"DocumentRef\";\n case \"double\":\n return \"number\";\n case \"integer\":\n return \"number\";\n case \"mediaRef\":\n return \"MediaRef\";\n case \"modelRef\": {\n const modelKey = value.modelRef.modelTypes[0]!;\n return version != null ? versionedTypeName(modelKey, version) : modelKey;\n }\n case \"object\":\n return \"ObjectRef\";\n case \"string\":\n return \"string\";\n case \"text\":\n return \"string\";\n case \"unmanagedJson\":\n return \"any\";\n case \"userRef\":\n return \"UserRef\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Zod schema conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a Zod schema string.\n */\nexport function convertFieldTypeToZodSchema(\n fieldType: IFieldTypeUnion,\n version?: number,\n): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertFieldValueToZodSchema(fieldType.array.value, version);\n const optSuffix = fieldType.array.allowNullValue ? \".optional()\" : \"\";\n return `z.array(${inner}${optSuffix})`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in Zod generation`);\n case \"value\":\n return convertFieldValueToZodSchema(fieldType.value, version);\n }\n}\n\nfunction convertFieldValueToZodSchema(\n value: IFieldValueUnion,\n version?: number,\n): string {\n switch (value.type) {\n case \"boolean\":\n return \"z.boolean()\";\n case \"datetime\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"string\":\n case \"text\":\n case \"userRef\":\n return \"z.string()\";\n case \"double\":\n case \"integer\":\n return \"z.number()\";\n case \"modelRef\": {\n const modelKey = value.modelRef.modelTypes[0]!;\n const refSchemaName = version != null\n ? versionedSchemaName(modelKey, version)\n : `${modelKey}Schema`;\n const refTypeName = version != null ? versionedTypeName(modelKey, version) : modelKey;\n return `z.lazy((): ZodType<${refTypeName}> => ${refSchemaName})`;\n }\n case \"unmanagedJson\":\n return \"z.unknown()\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal TypeScript conversion (refs → unknown, external refs → string)\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a TypeScript string for internal types.\n */\nexport function convertFieldTypeToInternalTypeScript(\n fieldType: IFieldTypeUnion,\n isOptional: boolean,\n): string {\n const base = convertFieldTypeToInternalTsInner(fieldType);\n if (isOptional) {\n return `(${base} | undefined)`;\n }\n return base;\n}\n\nfunction convertFieldTypeToInternalTsInner(fieldType: IFieldTypeUnion): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertCollectionValueToInternalTs(fieldType.array);\n const needsParens = inner.includes(\"|\") || inner.startsWith(\"readonly \");\n const wrapped = needsParens ? `(${inner})` : inner;\n return `readonly ${wrapped}[]`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in internal TypeScript generation`);\n case \"value\":\n return convertFieldValueToInternalTs(fieldType.value);\n }\n}\n\nfunction convertCollectionValueToInternalTs(collection: IFieldTypeCollection): string {\n const base = convertFieldValueToInternalTs(collection.value);\n if (collection.allowNullValue) {\n return `(${base} | undefined)`;\n }\n return base;\n}\n\nfunction convertFieldValueToInternalTs(value: IFieldValueUnion): string {\n switch (value.type) {\n case \"boolean\":\n return \"boolean\";\n case \"double\":\n case \"integer\":\n return \"number\";\n case \"datetime\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"string\":\n case \"text\":\n case \"userRef\":\n return \"string\";\n case \"modelRef\":\n case \"unmanagedJson\":\n return \"unknown\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal Zod schema conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a Zod schema string for internal schemas.\n */\nexport function convertFieldTypeToInternalZod(\n fieldType: IFieldTypeUnion,\n isOptional: boolean,\n): string {\n const base = convertFieldTypeToInternalZodInner(fieldType);\n if (isOptional) {\n if (base.endsWith(\".optional()\")) {\n return base;\n }\n return `${base}.optional()`;\n }\n return base;\n}\n\nfunction convertFieldTypeToInternalZodInner(fieldType: IFieldTypeUnion): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertCollectionValueToInternalZod(fieldType.array);\n return `z.array(${inner})`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in internal Zod generation`);\n case \"value\":\n return convertFieldValueToInternalZod(fieldType.value);\n }\n}\n\nfunction convertCollectionValueToInternalZod(collection: IFieldTypeCollection): string {\n const base = convertFieldValueToInternalZod(collection.value);\n if (collection.allowNullValue) {\n return `${base}.optional()`;\n }\n return base;\n}\n\nfunction convertFieldValueToInternalZod(value: IFieldValueUnion): string {\n switch (value.type) {\n case \"boolean\":\n return \"z.boolean()\";\n case \"double\":\n case \"integer\":\n return \"z.number()\";\n case \"datetime\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"string\":\n case \"text\":\n case \"userRef\":\n return \"z.string()\";\n case \"modelRef\":\n case \"unmanagedJson\":\n return \"z.unknown()\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// FieldTypeDescriptor conversion (for UpgradeLens)\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a FieldTypeDescriptor source string for UpgradeLens.\n */\nexport function convertFieldTypeToDescriptor(\n fieldType: IFieldTypeUnion,\n isOptional: boolean,\n): string {\n const base = convertFieldTypeToDescriptorInner(fieldType);\n if (isOptional) {\n return `{ kind: \"optional\", inner: ${base} }`;\n }\n return base;\n}\n\nfunction convertFieldTypeToDescriptorInner(fieldType: IFieldTypeUnion): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertCollectionValueToDescriptor(fieldType.array);\n return `{ kind: \"array\", element: ${inner} }`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in descriptor generation`);\n case \"value\":\n return convertFieldValueToDescriptor(fieldType.value);\n }\n}\n\nfunction convertCollectionValueToDescriptor(collection: IFieldTypeCollection): string {\n const base = convertFieldValueToDescriptor(collection.value);\n if (collection.allowNullValue) {\n return `{ kind: \"optional\", inner: ${base} }`;\n }\n return base;\n}\n\nfunction convertFieldValueToDescriptor(value: IFieldValueUnion): string {\n switch (value.type) {\n case \"modelRef\": {\n const modelKey = value.modelRef.modelTypes[0]!;\n return `{ kind: \"modelRef\", model: \"${modelKey}\" }`;\n }\n default:\n return `{ kind: \"primitive\" }`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Ref type detection (for import generation)\n// ---------------------------------------------------------------------------\n\n/**\n * Detect which external ref types (DocumentRef, MediaRef, ObjectRef, UserRef)\n * are used anywhere in the IR schema.\n */\nexport function detectUsedRefTypes(ir: IRealTimeDocumentSchema): Set<string> {\n const refTypes = new Set<string>();\n\n for (const modelDef of Object.values(ir.models)) {\n if (modelDef.type === \"record\") {\n for (const field of modelDef.record.fields) {\n scanFieldTypeForRefs(field.fieldType, refTypes);\n }\n }\n }\n\n return refTypes;\n}\n\nfunction scanFieldTypeForRefs(fieldType: IFieldTypeUnion, out: Set<string>): void {\n switch (fieldType.type) {\n case \"array\":\n scanFieldValueForRefs(fieldType.array.value, out);\n break;\n case \"value\":\n scanFieldValueForRefs(fieldType.value, out);\n break;\n }\n}\n\nfunction scanFieldValueForRefs(value: IFieldValueUnion, out: Set<string>): void {\n switch (value.type) {\n case \"docRef\":\n out.add(\"DocumentRef\");\n break;\n case \"mediaRef\":\n out.add(\"MediaRef\");\n break;\n case \"object\":\n out.add(\"ObjectRef\");\n break;\n case \"userRef\":\n out.add(\"UserRef\");\n break;\n }\n}\n\n/**\n * Collect schema-local type references (versioned type names) from a field type.\n */\nexport function collectReferencedTypes(\n fieldType: IFieldTypeUnion,\n version: number,\n out: Set<string>,\n): void {\n switch (fieldType.type) {\n case \"array\":\n collectReferencedValuesTypes(fieldType.array.value, version, out);\n break;\n case \"value\":\n collectReferencedValuesTypes(fieldType.value, version, out);\n break;\n }\n}\n\nfunction collectReferencedValuesTypes(\n value: IFieldValueUnion,\n version: number,\n out: Set<string>,\n): void {\n if (value.type === \"modelRef\") {\n const modelKey = value.modelRef.modelTypes[0]!;\n out.add(versionedTypeName(modelKey, version));\n }\n}\n\n// ---------------------------------------------------------------------------\n// External ref field type detection (for model metadata)\n// ---------------------------------------------------------------------------\n\n/**\n * Detect the external ref type (docRef, mediaRef, objectRef, userRef) of a field, if any.\n */\nexport function findExternalRefType(fieldType: IFieldTypeUnion): string | undefined {\n switch (fieldType.type) {\n case \"array\":\n return findExternalRefValueType(fieldType.array.value);\n case \"value\":\n return findExternalRefValueType(fieldType.value);\n default:\n return undefined;\n }\n}\n\nfunction findExternalRefValueType(value: IFieldValueUnion): string | undefined {\n switch (value.type) {\n case \"docRef\":\n return \"docRef\";\n case \"mediaRef\":\n return \"mediaRef\";\n case \"object\":\n return \"objectRef\";\n case \"userRef\":\n return \"userRef\";\n default:\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"irFieldHelpers.js","names":["versionedSchemaName","versionedTypeName","convertFieldTypeToTypeScript","fieldType","version","type","convertCollectionValueToTypeScript","array","Error","convertFieldValueToTypeScript","value","collection","modelKey","modelRef","modelTypes","convertFieldTypeToZodSchema","inner","convertFieldValueToZodSchema","optSuffix","allowNullValue","refSchemaName","refTypeName","convertFieldTypeToInternalTypeScript","isOptional","base","convertFieldTypeToInternalTsInner","convertCollectionValueToInternalTs","needsParens","includes","startsWith","wrapped","convertFieldValueToInternalTs","convertFieldTypeToInternalZod","convertFieldTypeToInternalZodInner","endsWith","convertCollectionValueToInternalZod","convertFieldValueToInternalZod","convertFieldTypeToDescriptor","convertFieldTypeToDescriptorInner","convertCollectionValueToDescriptor","convertFieldValueToDescriptor","detectUsedRefTypes","ir","refTypes","Set","modelDef","Object","values","models","field","record","fields","scanFieldTypeForRefs","out","scanFieldValueForRefs","add","collectReferencedTypes","collectReferencedValuesTypes","findExternalRefType","findExternalRefValueType","undefined"],"sources":["irFieldHelpers.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 type { IFieldTypeCollection } from \"../../lib/pack-docschema-api/pack-docschema-ir/fieldTypeCollection.js\";\nimport type { IFieldTypeUnion } from \"../../lib/pack-docschema-api/pack-docschema-ir/fieldTypeUnion.js\";\nimport type { IFieldValueUnion } from \"../../lib/pack-docschema-api/pack-docschema-ir/fieldValueUnion.js\";\nimport type { IRealTimeDocumentSchema } from \"../../lib/pack-docschema-api/pack-docschema-ir/realTimeDocumentSchema.js\";\nimport { versionedSchemaName, versionedTypeName } from \"../schema/runtimeSchema.js\";\n\n// ---------------------------------------------------------------------------\n// Public read-type TypeScript conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a TypeScript type string for public read types.\n */\nexport function convertFieldTypeToTypeScript(\n fieldType: IFieldTypeUnion,\n version?: number,\n): string {\n switch (fieldType.type) {\n case \"array\":\n return `readonly ${convertCollectionValueToTypeScript(fieldType.array, version)}[]`;\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in TypeScript generation`);\n case \"value\":\n return convertFieldValueToTypeScript(fieldType.value, version);\n }\n}\n\nfunction convertCollectionValueToTypeScript(\n collection: IFieldTypeCollection,\n version?: number,\n): string {\n // allowNullValue is ignored in public read types (current behavior)\n return convertFieldValueToTypeScript(collection.value, version);\n}\n\nfunction convertFieldValueToTypeScript(\n value: IFieldValueUnion,\n version?: number,\n): string {\n switch (value.type) {\n // Ref fields hold the bare id, so emit the id type — not the <X>Ref handle, which is\n // an object and would contradict the `string` / `z.string()` internal representation.\n case \"resourceRef\":\n return \"ResourceRid\";\n case \"boolean\":\n return \"boolean\";\n case \"datetime\":\n return \"string\";\n case \"docRef\":\n return \"DocumentId\";\n case \"double\":\n return \"number\";\n case \"integer\":\n return \"number\";\n case \"mediaRef\":\n return \"MediaId\";\n case \"modelRef\": {\n const modelKey = value.modelRef.modelTypes[0]!;\n return version != null ? versionedTypeName(modelKey, version) : modelKey;\n }\n case \"object\":\n return \"ObjectId\";\n case \"string\":\n return \"string\";\n case \"text\":\n return \"string\";\n case \"unmanagedJson\":\n return \"any\";\n case \"userRef\":\n return \"UserId\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Zod schema conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a Zod schema string.\n */\nexport function convertFieldTypeToZodSchema(\n fieldType: IFieldTypeUnion,\n version?: number,\n): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertFieldValueToZodSchema(fieldType.array.value, version);\n const optSuffix = fieldType.array.allowNullValue ? \".optional()\" : \"\";\n return `z.array(${inner}${optSuffix})`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in Zod generation`);\n case \"value\":\n return convertFieldValueToZodSchema(fieldType.value, version);\n }\n}\n\nfunction convertFieldValueToZodSchema(\n value: IFieldValueUnion,\n version?: number,\n): string {\n switch (value.type) {\n case \"boolean\":\n return \"z.boolean()\";\n case \"resourceRef\":\n case \"datetime\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"string\":\n case \"text\":\n case \"userRef\":\n return \"z.string()\";\n case \"double\":\n case \"integer\":\n return \"z.number()\";\n case \"modelRef\": {\n const modelKey = value.modelRef.modelTypes[0]!;\n const refSchemaName = version != null\n ? versionedSchemaName(modelKey, version)\n : `${modelKey}Schema`;\n const refTypeName = version != null ? versionedTypeName(modelKey, version) : modelKey;\n return `z.lazy((): ZodType<${refTypeName}> => ${refSchemaName})`;\n }\n case \"unmanagedJson\":\n return \"z.unknown()\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal TypeScript conversion (refs → unknown, external refs → string)\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a TypeScript string for internal types.\n */\nexport function convertFieldTypeToInternalTypeScript(\n fieldType: IFieldTypeUnion,\n isOptional: boolean,\n): string {\n const base = convertFieldTypeToInternalTsInner(fieldType);\n if (isOptional) {\n return `(${base} | undefined)`;\n }\n return base;\n}\n\nfunction convertFieldTypeToInternalTsInner(fieldType: IFieldTypeUnion): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertCollectionValueToInternalTs(fieldType.array);\n const needsParens = inner.includes(\"|\") || inner.startsWith(\"readonly \");\n const wrapped = needsParens ? `(${inner})` : inner;\n return `readonly ${wrapped}[]`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in internal TypeScript generation`);\n case \"value\":\n return convertFieldValueToInternalTs(fieldType.value);\n }\n}\n\nfunction convertCollectionValueToInternalTs(collection: IFieldTypeCollection): string {\n const base = convertFieldValueToInternalTs(collection.value);\n if (collection.allowNullValue) {\n return `(${base} | undefined)`;\n }\n return base;\n}\n\nfunction convertFieldValueToInternalTs(value: IFieldValueUnion): string {\n switch (value.type) {\n case \"boolean\":\n return \"boolean\";\n case \"double\":\n case \"integer\":\n return \"number\";\n case \"resourceRef\":\n case \"datetime\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"string\":\n case \"text\":\n case \"userRef\":\n return \"string\";\n case \"modelRef\":\n case \"unmanagedJson\":\n return \"unknown\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Internal Zod schema conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a Zod schema string for internal schemas.\n */\nexport function convertFieldTypeToInternalZod(\n fieldType: IFieldTypeUnion,\n isOptional: boolean,\n): string {\n const base = convertFieldTypeToInternalZodInner(fieldType);\n if (isOptional) {\n if (base.endsWith(\".optional()\")) {\n return base;\n }\n return `${base}.optional()`;\n }\n return base;\n}\n\nfunction convertFieldTypeToInternalZodInner(fieldType: IFieldTypeUnion): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertCollectionValueToInternalZod(fieldType.array);\n return `z.array(${inner})`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in internal Zod generation`);\n case \"value\":\n return convertFieldValueToInternalZod(fieldType.value);\n }\n}\n\nfunction convertCollectionValueToInternalZod(collection: IFieldTypeCollection): string {\n const base = convertFieldValueToInternalZod(collection.value);\n if (collection.allowNullValue) {\n return `${base}.optional()`;\n }\n return base;\n}\n\nfunction convertFieldValueToInternalZod(value: IFieldValueUnion): string {\n switch (value.type) {\n case \"boolean\":\n return \"z.boolean()\";\n case \"double\":\n case \"integer\":\n return \"z.number()\";\n case \"resourceRef\":\n case \"datetime\":\n case \"docRef\":\n case \"mediaRef\":\n case \"object\":\n case \"string\":\n case \"text\":\n case \"userRef\":\n return \"z.string()\";\n case \"modelRef\":\n case \"unmanagedJson\":\n return \"z.unknown()\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// FieldTypeDescriptor conversion (for UpgradeLens)\n// ---------------------------------------------------------------------------\n\n/**\n * Convert an IR field type to a FieldTypeDescriptor source string for UpgradeLens.\n */\nexport function convertFieldTypeToDescriptor(\n fieldType: IFieldTypeUnion,\n isOptional: boolean,\n): string {\n const base = convertFieldTypeToDescriptorInner(fieldType);\n if (isOptional) {\n return `{ kind: \"optional\", inner: ${base} }`;\n }\n return base;\n}\n\nfunction convertFieldTypeToDescriptorInner(fieldType: IFieldTypeUnion): string {\n switch (fieldType.type) {\n case \"array\": {\n const inner = convertCollectionValueToDescriptor(fieldType.array);\n return `{ kind: \"array\", element: ${inner} }`;\n }\n case \"map\":\n case \"set\":\n throw new Error(`${fieldType.type} is not yet supported in descriptor generation`);\n case \"value\":\n return convertFieldValueToDescriptor(fieldType.value);\n }\n}\n\nfunction convertCollectionValueToDescriptor(collection: IFieldTypeCollection): string {\n const base = convertFieldValueToDescriptor(collection.value);\n if (collection.allowNullValue) {\n return `{ kind: \"optional\", inner: ${base} }`;\n }\n return base;\n}\n\nfunction convertFieldValueToDescriptor(value: IFieldValueUnion): string {\n switch (value.type) {\n case \"modelRef\": {\n const modelKey = value.modelRef.modelTypes[0]!;\n return `{ kind: \"modelRef\", model: \"${modelKey}\" }`;\n }\n default:\n return `{ kind: \"primitive\" }`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Ref type detection (for import generation)\n// ---------------------------------------------------------------------------\n\n/**\n * Detect which external ref types (ResourceRef, DocumentRef, MediaRef, ObjectRef,\n * UserRef) are used anywhere in the IR schema.\n */\nexport function detectUsedRefTypes(ir: IRealTimeDocumentSchema): Set<string> {\n const refTypes = new Set<string>();\n\n for (const modelDef of Object.values(ir.models)) {\n if (modelDef.type === \"record\") {\n for (const field of modelDef.record.fields) {\n scanFieldTypeForRefs(field.fieldType, refTypes);\n }\n }\n }\n\n return refTypes;\n}\n\nfunction scanFieldTypeForRefs(fieldType: IFieldTypeUnion, out: Set<string>): void {\n switch (fieldType.type) {\n case \"array\":\n scanFieldValueForRefs(fieldType.array.value, out);\n break;\n case \"value\":\n scanFieldValueForRefs(fieldType.value, out);\n break;\n }\n}\n\nfunction scanFieldValueForRefs(value: IFieldValueUnion, out: Set<string>): void {\n switch (value.type) {\n case \"resourceRef\":\n out.add(\"ResourceRid\");\n break;\n case \"docRef\":\n out.add(\"DocumentId\");\n break;\n case \"mediaRef\":\n out.add(\"MediaId\");\n break;\n case \"object\":\n out.add(\"ObjectId\");\n break;\n case \"userRef\":\n out.add(\"UserId\");\n break;\n }\n}\n\n/**\n * Collect schema-local type references (versioned type names) from a field type.\n */\nexport function collectReferencedTypes(\n fieldType: IFieldTypeUnion,\n version: number,\n out: Set<string>,\n): void {\n switch (fieldType.type) {\n case \"array\":\n collectReferencedValuesTypes(fieldType.array.value, version, out);\n break;\n case \"value\":\n collectReferencedValuesTypes(fieldType.value, version, out);\n break;\n }\n}\n\nfunction collectReferencedValuesTypes(\n value: IFieldValueUnion,\n version: number,\n out: Set<string>,\n): void {\n if (value.type === \"modelRef\") {\n const modelKey = value.modelRef.modelTypes[0]!;\n out.add(versionedTypeName(modelKey, version));\n }\n}\n\n// ---------------------------------------------------------------------------\n// External ref field type detection (for model metadata)\n// ---------------------------------------------------------------------------\n\n/**\n * Detect the external ref type (resourceRef, docRef, mediaRef, objectRef, userRef) of a\n * field, if any.\n */\nexport function findExternalRefType(fieldType: IFieldTypeUnion): string | undefined {\n switch (fieldType.type) {\n case \"array\":\n return findExternalRefValueType(fieldType.array.value);\n case \"value\":\n return findExternalRefValueType(fieldType.value);\n default:\n return undefined;\n }\n}\n\nfunction findExternalRefValueType(value: IFieldValueUnion): string | undefined {\n switch (value.type) {\n case \"resourceRef\":\n return \"resourceRef\";\n case \"docRef\":\n return \"docRef\";\n case \"mediaRef\":\n return \"mediaRef\";\n case \"object\":\n return \"objectRef\";\n case \"userRef\":\n return \"userRef\";\n default:\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
  // documentType.ts
3
3
  // ============================================================
4
4
 
5
- /* Generated by @palantir/pack.document-schema.type-gen@0.20.0 */
5
+ /* Generated by @palantir/pack.document-schema.type-gen@0.25.0 */
6
6
 
7
7
  export const DOCUMENT_TYPE_NAME = 'Canvas Document Type';
8
8
  export const DOCUMENT_TYPE_DESCRIPTION = 'Document type description for demo canvas';
@@ -1 +1 @@
1
- {"version":3,"file":"with-name-and-description.js","names":["DOCUMENT_TYPE_NAME","DOCUMENT_TYPE_DESCRIPTION"],"sources":["with-name-and-description.ts"],"sourcesContent":["// ============================================================\n// documentType.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.20.0 */\n\nexport const DOCUMENT_TYPE_NAME = 'Canvas Document Type';\nexport const DOCUMENT_TYPE_DESCRIPTION =\n 'Document type description for demo canvas';\n"],"mappings":"AAAA;AACA;AACA;;AAEA;;AAEA,OAAO,MAAMA,kBAAkB,GAAG,sBAAsB;AACxD,OAAO,MAAMC,yBAAyB,GACpC,2CAA2C","ignoreList":[]}
1
+ {"version":3,"file":"with-name-and-description.js","names":["DOCUMENT_TYPE_NAME","DOCUMENT_TYPE_DESCRIPTION"],"sources":["with-name-and-description.ts"],"sourcesContent":["// ============================================================\n// documentType.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.25.0 */\n\nexport const DOCUMENT_TYPE_NAME = 'Canvas Document Type';\nexport const DOCUMENT_TYPE_DESCRIPTION =\n 'Document type description for demo canvas';\n"],"mappings":"AAAA;AACA;AACA;;AAEA;;AAEA,OAAO,MAAMA,kBAAkB,GAAG,sBAAsB;AACxD,OAAO,MAAMC,yBAAyB,GACpC,2CAA2C","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"single-version.js","names":[],"sources":["single-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.20.0 */\n\nexport type SupportedVersions = 1;\nexport type LatestVersion = 1;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"single-version.js","names":[],"sources":["single-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.25.0 */\n\nexport type SupportedVersions = 1;\nexport type LatestVersion = 1;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"three-version-chain.js","names":[],"sources":["three-version-chain.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.20.0 */\n\nexport type SupportedVersions = 1 | 2 | 3;\nexport type LatestVersion = 3;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"three-version-chain.js","names":[],"sources":["three-version-chain.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.25.0 */\n\nexport type SupportedVersions = 1 | 2 | 3;\nexport type LatestVersion = 3;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"two-version.js","names":[],"sources":["two-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.20.0 */\n\nexport type SupportedVersions = 1 | 2;\nexport type LatestVersion = 2;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"two-version.js","names":[],"sources":["two-version.ts"],"sourcesContent":["// ============================================================\n// versions.ts\n// ============================================================\n\n/* Generated by @palantir/pack.document-schema.type-gen@0.25.0 */\n\nexport type SupportedVersions = 1 | 2;\nexport type LatestVersion = 2;\nexport type MinSupportedVersion = 1;\n"],"mappings":"","ignoreList":[]}