@osdk/maker-experimental 0.6.0-beta.8 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +72 -0
- package/build/browser/api/defineOntologyV2.js +6 -1
- package/build/browser/api/defineOntologyV2.js.map +1 -1
- package/build/browser/cli/generateBackingDataset.js +82 -36
- package/build/browser/cli/generateBackingDataset.js.map +1 -1
- package/build/browser/cli/main.js +55 -4
- package/build/browser/cli/main.js.map +1 -1
- package/build/browser/conversion/toMarketplace/shapeExtractors/LinkTypeShapeExtractor.js +2 -2
- package/build/browser/conversion/toMarketplace/shapeExtractors/LinkTypeShapeExtractor.js.map +1 -1
- package/build/cjs/index.cjs +111 -33
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +1 -0
- package/build/esm/api/defineOntologyV2.js +6 -1
- package/build/esm/api/defineOntologyV2.js.map +1 -1
- package/build/esm/cli/generateBackingDataset.js +82 -36
- package/build/esm/cli/generateBackingDataset.js.map +1 -1
- package/build/esm/cli/main.js +55 -4
- package/build/esm/cli/main.js.map +1 -1
- package/build/esm/conversion/toMarketplace/shapeExtractors/LinkTypeShapeExtractor.js +2 -2
- package/build/esm/conversion/toMarketplace/shapeExtractors/LinkTypeShapeExtractor.js.map +1 -1
- package/build/types/api/defineOntologyV2.d.ts +1 -0
- package/build/types/api/defineOntologyV2.d.ts.map +1 -1
- package/build/types/cli/generateBackingDataset.d.ts +5 -1
- package/build/types/cli/generateBackingDataset.d.ts.map +1 -1
- package/build/types/cli/main.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","names":["consola","createJiti","fs","path","invariant","yargs","hideBin","defineOntologyV2","ReadableIdGenerator","generateBackingDatasetBlockResult","getNonEditOnlyProperties","apiNamespaceRegex","uuidRegex","main","args","process","argv","log","commandLineOpts","version","wrap","Math","min","terminalWidth","strict","help","options","input","alias","describe","type","default","coerce","resolve","output","apiNamespace","buildDir","randomnessKey","parseAsync","length","slice","env","NODE_ENV","test","info","undefined","ontologyIr","shapes","backingDatasourceApiNames","loadOntology","blockDataDir","join","existsSync","promises","mkdir","recursive","ontologyJsonPath","ontologyJson","JSON","stringify","ontology","writeFile","ontologyInputMappingEntries","apiName","objectTypeBlockData","findObjectTypeByApiName","objectTypes","nonEditOnlyProps","inputDatasetReadableId","getForDataset","outputDatasetReadableId","getForDatasetOutput","inputShapes","has","push","prop","colInputReadableId","getForDatasetColumn","getForDatasetColumnOutput","backingDsGeneratorResults","Promise","all","filter","map","blockGeneratorResult","block_identifier","block_data_directory","oci_block_data_metadata","maven_block_data_metadata","inputs","Object","fromEntries","outputs","outputShapes","input_mapping_entries","external_recommendations","add_on_override","input_shape_metadata","inputShapeMetadata","block_type","blockGeneratorResultJson","success","result","jiti","import","meta","filename","moduleCache","debug","importMeta","values","find","objectType"],"sources":["main.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 { ObjectTypeBlockDataV2 } from \"@osdk/client.unstable\";\nimport { consola } from \"consola\";\nimport { createJiti } from \"jiti\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport invariant from \"tiny-invariant\";\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { defineOntologyV2 } from \"../api/defineOntologyV2.js\";\nimport { ReadableIdGenerator } from \"../util/generateRid.js\";\nimport {\n generateBackingDatasetBlockResult,\n getNonEditOnlyProperties,\n} from \"./generateBackingDataset.js\";\nimport type { BlockGeneratorResult } from \"./marketplaceSerialization/BlockGeneratorResult.js\";\nimport type { InputMappingEntry } from \"./marketplaceSerialization/supportingTypes.js\";\n\nconst apiNamespaceRegex = /^[a-z0-9-]+(\\.[a-z0-9-]+)*\\.$/;\nconst uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\n\nexport default async function main(\n args: string[] = process.argv,\n): Promise<void> {\n consola.log(\"Generating BlockGeneratorResult for ontology...\");\n\n const commandLineOpts: {\n input: string;\n output: string;\n apiNamespace: string;\n buildDir: string;\n randomnessKey?: string;\n } = await yargs(hideBin(args))\n .version(process.env.PACKAGE_VERSION ?? \"\")\n .wrap(Math.min(150, yargs().terminalWidth()))\n .strict()\n .help()\n .options({\n input: {\n alias: \"i\",\n describe: \"Input file\",\n type: \"string\",\n default: \".ontology/ontology.ts\",\n coerce: path.resolve,\n },\n output: {\n alias: \"o\",\n describe: \"Output file for BlockGeneratorResult JSON\",\n type: \"string\",\n default: \"build/block_generator_result.json\",\n coerce: path.resolve,\n },\n apiNamespace: {\n describe: \"Api name prefix for namespaced ontology types\",\n type: \"string\",\n default: \"\",\n },\n buildDir: {\n alias: \"b\",\n describe: \"Directory for build files\",\n type: \"string\",\n default: \"build/\",\n coerce: path.resolve,\n },\n randomnessKey: {\n describe: \"Value used to assure uniqueness of entities\",\n type: \"string\",\n },\n })\n .parseAsync();\n\n let apiNamespace = \"\";\n if (commandLineOpts.apiNamespace.length !== 0) {\n apiNamespace = (commandLineOpts.apiNamespace.slice(-1) !== \".\")\n ? commandLineOpts.apiNamespace + \".\"\n : commandLineOpts.apiNamespace;\n invariant(apiNamespace.length < 1024, \"API namespace is too long.\");\n invariant(\n apiNamespaceRegex.test(apiNamespace),\n \"API namespace is invalid! It is expected to conform to ^[a-z0-9-]+(\\.[a-z0-9-]+)*\\.$\",\n );\n }\n consola.info(`Loading ontology from ${commandLineOpts.input}`);\n\n if (commandLineOpts.randomnessKey !== undefined) {\n invariant(\n uuidRegex.test(commandLineOpts.randomnessKey),\n \"Supplied randomness key is not a uuid and shouldn't be used as a uniqueness guarantee\",\n );\n }\n\n const { ontologyIr, shapes, backingDatasourceApiNames } = await loadOntology(\n commandLineOpts.input,\n apiNamespace,\n commandLineOpts.randomnessKey,\n );\n\n // Create temp directory for block data\n const blockDataDir = path.join(commandLineOpts.buildDir, \"temp_block_data\");\n if (!fs.existsSync(blockDataDir)) {\n await fs.promises.mkdir(blockDataDir, { recursive: true });\n }\n\n // Write ontology.json to the block data directory\n const ontologyJsonPath = path.join(blockDataDir, \"ontology.json\");\n const ontologyJson = JSON.stringify(ontologyIr.ontology, null, 2);\n await fs.promises.writeFile(ontologyJsonPath, ontologyJson);\n consola.info(`Wrote ontology.json to ${ontologyJsonPath}`);\n\n // Collect input_mapping_entries for the ontology block\n // These map ontology inputs to datasource block outputs for objects with includeEmptyBackingDatasource\n const ontologyInputMappingEntries: InputMappingEntry[] = [];\n\n for (const apiName of backingDatasourceApiNames) {\n const objectTypeBlockData = findObjectTypeByApiName(\n ontologyIr.ontology.objectTypes,\n apiName,\n );\n if (!objectTypeBlockData) continue;\n\n const nonEditOnlyProps = getNonEditOnlyProperties(objectTypeBlockData);\n\n // The ontology block has inputs with these readable IDs (from shape extraction)\n // Map them to the datasource block's outputs (which use the same readable IDs)\n const inputDatasetReadableId = ReadableIdGenerator.getForDataset(apiName);\n const outputDatasetReadableId = ReadableIdGenerator.getForDatasetOutput(\n apiName,\n );\n if (shapes.inputShapes.has(inputDatasetReadableId)) {\n ontologyInputMappingEntries.push({\n input: inputDatasetReadableId,\n output: outputDatasetReadableId,\n });\n }\n\n for (const prop of nonEditOnlyProps) {\n const colInputReadableId = ReadableIdGenerator.getForDatasetColumn(\n apiName,\n prop.apiName!,\n );\n const getForDatasetColumnOutput = ReadableIdGenerator\n .getForDatasetColumnOutput(apiName, prop.apiName!);\n if (shapes.inputShapes.has(colInputReadableId)) {\n ontologyInputMappingEntries.push({\n input: colInputReadableId,\n output: getForDatasetColumnOutput,\n });\n }\n }\n }\n\n // Generate backing datasource BlockGeneratorResults for objects with includeEmptyBackingDatasource\n const backingDsGeneratorResults = await Promise.all(\n backingDatasourceApiNames.filter(apiName => {\n const objectTypeBlockData = findObjectTypeByApiName(\n ontologyIr.ontology.objectTypes,\n apiName,\n );\n return objectTypeBlockData !== undefined;\n }).map(async apiName => {\n const objectTypeBlockData = findObjectTypeByApiName(\n ontologyIr.ontology.objectTypes,\n apiName,\n );\n consola.info(\n `Generating backing datasource BlockGeneratorResult for ${apiName}...`,\n );\n\n return await generateBackingDatasetBlockResult(\n objectTypeBlockData!,\n commandLineOpts.buildDir,\n commandLineOpts.randomnessKey,\n );\n }),\n );\n\n // Create BlockGeneratorResult\n const blockGeneratorResult: BlockGeneratorResult = {\n block_identifier: \"ontology\",\n block_data_directory: blockDataDir,\n oci_block_data_metadata: undefined,\n maven_block_data_metadata: undefined,\n inputs: Object.fromEntries(shapes.inputShapes),\n outputs: Object.fromEntries(shapes.outputShapes),\n input_mapping_entries: ontologyInputMappingEntries,\n external_recommendations: [],\n add_on_override: undefined,\n input_shape_metadata: Object.fromEntries(shapes.inputShapeMetadata),\n block_type: \"ONTOLOGY\",\n };\n\n // Write BlockGeneratorResult to output file\n const blockGeneratorResultJson = JSON.stringify(\n [blockGeneratorResult, ...backingDsGeneratorResults],\n null,\n 2,\n );\n await fs.promises.writeFile(\n commandLineOpts.output,\n blockGeneratorResultJson,\n );\n consola.success(\n `BlockGeneratorResult written to ${commandLineOpts.output}`,\n );\n consola.info(\n `Block data directory: ${blockDataDir}`,\n );\n}\n\nasync function loadOntology(\n input: string,\n apiNamespace: string,\n randomnessKey?: string,\n) {\n const result = await defineOntologyV2(\n apiNamespace,\n async () => {\n const jiti = createJiti(import.meta.filename, {\n moduleCache: true,\n debug: false,\n importMeta: import.meta,\n });\n const module = await jiti.import(input);\n },\n randomnessKey,\n );\n return result;\n}\n\n/**\n * Find an ObjectTypeBlockDataV2 by apiName within the ontology block data.\n */\nfunction findObjectTypeByApiName(\n objectTypes: Record<string, ObjectTypeBlockDataV2>,\n apiName: string,\n): ObjectTypeBlockDataV2 | undefined {\n return Object.values(objectTypes).find(\n (objectTypeBlockData) => objectTypeBlockData.objectType.apiName === apiName,\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"main.js","names":["cleanAndValidateLinkTypeId","consola","createJiti","fs","path","invariant","yargs","hideBin","defineOntologyV2","ReadableIdGenerator","generateBackingDatasetBlockResult","generateBackingDatasetBlockResultForLink","getNonEditOnlyProperties","apiNamespaceRegex","uuidRegex","main","args","process","argv","log","commandLineOpts","version","wrap","Math","min","terminalWidth","strict","help","options","input","alias","describe","type","default","coerce","resolve","output","apiNamespace","buildDir","randomnessKey","parseAsync","length","slice","env","NODE_ENV","test","info","undefined","ontologyIr","shapes","backingDatasourceApiNames","backingDatasourceLinkApiNames","loadOntology","blockDataDir","join","existsSync","promises","mkdir","recursive","ontologyJsonPath","ontologyJson","JSON","stringify","ontology","writeFile","ontologyInputMappingEntries","apiName","objectTypeBlockData","findObjectTypeByApiName","objectTypes","nonEditOnlyProps","inputDatasetReadableId","getForDataset","outputDatasetReadableId","getForDatasetOutput","inputShapes","has","push","prop","colInputReadableId","getForDatasetColumn","getForDatasetColumnOutput","linkApiName","linkTypeBlockData","findLinkTypeByApiName","linkTypes","datasetName","inputDsId","outputDsId","ds","datasources","datasource","columnNames","Object","values","dataset","objectTypeAPrimaryKeyMapping","map","String","objectTypeBPrimaryKeyMapping","colName","colInputId","colOutputId","backingDsGeneratorResults","Promise","all","filter","backingDsLinkGeneratorResults","p","blockGeneratorResult","block_identifier","block_data_directory","oci_block_data_metadata","maven_block_data_metadata","inputs","fromEntries","outputs","outputShapes","input_mapping_entries","external_recommendations","add_on_override","input_shape_metadata","inputShapeMetadata","block_type","blockGeneratorResultJson","success","result","jiti","import","meta","filename","moduleCache","debug","importMeta","find","objectType","linkTypeId","lt","linkType","id"],"sources":["main.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 LinkTypeBlockDataV2,\n ObjectTypeBlockDataV2,\n} from \"@osdk/client.unstable\";\nimport { cleanAndValidateLinkTypeId } from \"@osdk/maker\";\nimport { consola } from \"consola\";\nimport { createJiti } from \"jiti\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport invariant from \"tiny-invariant\";\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { defineOntologyV2 } from \"../api/defineOntologyV2.js\";\nimport { ReadableIdGenerator } from \"../util/generateRid.js\";\nimport {\n generateBackingDatasetBlockResult,\n generateBackingDatasetBlockResultForLink,\n getNonEditOnlyProperties,\n} from \"./generateBackingDataset.js\";\nimport type { BlockGeneratorResult } from \"./marketplaceSerialization/BlockGeneratorResult.js\";\nimport type { InputMappingEntry } from \"./marketplaceSerialization/supportingTypes.js\";\n\nconst apiNamespaceRegex = /^[a-z0-9-]+(\\.[a-z0-9-]+)*\\.$/;\nconst uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\n\nexport default async function main(\n args: string[] = process.argv,\n): Promise<void> {\n consola.log(\"Generating BlockGeneratorResult for ontology...\");\n\n const commandLineOpts: {\n input: string;\n output: string;\n apiNamespace: string;\n buildDir: string;\n randomnessKey?: string;\n } = await yargs(hideBin(args))\n .version(process.env.PACKAGE_VERSION ?? \"\")\n .wrap(Math.min(150, yargs().terminalWidth()))\n .strict()\n .help()\n .options({\n input: {\n alias: \"i\",\n describe: \"Input file\",\n type: \"string\",\n default: \".ontology/ontology.ts\",\n coerce: path.resolve,\n },\n output: {\n alias: \"o\",\n describe: \"Output file for BlockGeneratorResult JSON\",\n type: \"string\",\n default: \"build/block_generator_result.json\",\n coerce: path.resolve,\n },\n apiNamespace: {\n describe: \"Api name prefix for namespaced ontology types\",\n type: \"string\",\n default: \"\",\n },\n buildDir: {\n alias: \"b\",\n describe: \"Directory for build files\",\n type: \"string\",\n default: \"build/\",\n coerce: path.resolve,\n },\n randomnessKey: {\n describe: \"Value used to assure uniqueness of entities\",\n type: \"string\",\n },\n })\n .parseAsync();\n\n let apiNamespace = \"\";\n if (commandLineOpts.apiNamespace.length !== 0) {\n apiNamespace = (commandLineOpts.apiNamespace.slice(-1) !== \".\")\n ? commandLineOpts.apiNamespace + \".\"\n : commandLineOpts.apiNamespace;\n invariant(apiNamespace.length < 1024, \"API namespace is too long.\");\n invariant(\n apiNamespaceRegex.test(apiNamespace),\n \"API namespace is invalid! It is expected to conform to ^[a-z0-9-]+(\\.[a-z0-9-]+)*\\.$\",\n );\n }\n consola.info(`Loading ontology from ${commandLineOpts.input}`);\n\n if (commandLineOpts.randomnessKey !== undefined) {\n invariant(\n uuidRegex.test(commandLineOpts.randomnessKey),\n \"Supplied randomness key is not a uuid and shouldn't be used as a uniqueness guarantee\",\n );\n }\n\n const {\n ontologyIr,\n shapes,\n backingDatasourceApiNames,\n backingDatasourceLinkApiNames,\n } = await loadOntology(\n commandLineOpts.input,\n apiNamespace,\n commandLineOpts.randomnessKey,\n );\n\n // Create temp directory for block data\n const blockDataDir = path.join(commandLineOpts.buildDir, \"temp_block_data\");\n if (!fs.existsSync(blockDataDir)) {\n await fs.promises.mkdir(blockDataDir, { recursive: true });\n }\n\n // Write ontology.json to the block data directory\n const ontologyJsonPath = path.join(blockDataDir, \"ontology.json\");\n const ontologyJson = JSON.stringify(ontologyIr.ontology, null, 2);\n await fs.promises.writeFile(ontologyJsonPath, ontologyJson);\n consola.info(`Wrote ontology.json to ${ontologyJsonPath}`);\n\n // Collect input_mapping_entries for the ontology block\n // These map ontology inputs to datasource block outputs for objects with includeEmptyBackingDatasource\n const ontologyInputMappingEntries: InputMappingEntry[] = [];\n\n for (const apiName of backingDatasourceApiNames) {\n const objectTypeBlockData = findObjectTypeByApiName(\n ontologyIr.ontology.objectTypes,\n apiName,\n );\n if (!objectTypeBlockData) continue;\n\n const nonEditOnlyProps = getNonEditOnlyProperties(objectTypeBlockData);\n\n // The ontology block has inputs with these readable IDs (from shape extraction)\n // Map them to the datasource block's outputs (which use the same readable IDs)\n const inputDatasetReadableId = ReadableIdGenerator.getForDataset(apiName);\n const outputDatasetReadableId = ReadableIdGenerator.getForDatasetOutput(\n apiName,\n );\n if (shapes.inputShapes.has(inputDatasetReadableId)) {\n ontologyInputMappingEntries.push({\n input: inputDatasetReadableId,\n output: outputDatasetReadableId,\n });\n }\n\n for (const prop of nonEditOnlyProps) {\n const colInputReadableId = ReadableIdGenerator.getForDatasetColumn(\n apiName,\n prop.apiName!,\n );\n const getForDatasetColumnOutput = ReadableIdGenerator\n .getForDatasetColumnOutput(apiName, prop.apiName!);\n if (shapes.inputShapes.has(colInputReadableId)) {\n ontologyInputMappingEntries.push({\n input: colInputReadableId,\n output: getForDatasetColumnOutput,\n });\n }\n }\n }\n\n // Collect input_mapping_entries for link types with includeEmptyBackingDatasource\n for (const linkApiName of backingDatasourceLinkApiNames) {\n const linkTypeBlockData = findLinkTypeByApiName(\n ontologyIr.ontology.linkTypes,\n linkApiName,\n );\n if (!linkTypeBlockData) continue;\n\n const datasetName = `link.${linkApiName}`;\n\n // Map tabularDatasource\n const inputDsId = ReadableIdGenerator.getForDataset(datasetName);\n const outputDsId = ReadableIdGenerator.getForDatasetOutput(datasetName);\n if (shapes.inputShapes.has(inputDsId)) {\n ontologyInputMappingEntries.push({\n input: inputDsId,\n output: outputDsId,\n });\n }\n\n // Map columns from the datasource\n const ds = linkTypeBlockData.datasources[0]?.datasource;\n if (ds?.type === \"dataset\") {\n const columnNames = [\n ...Object.values(ds.dataset.objectTypeAPrimaryKeyMapping).map(String),\n ...Object.values(ds.dataset.objectTypeBPrimaryKeyMapping).map(String),\n ];\n for (const colName of columnNames) {\n const colInputId = ReadableIdGenerator.getForDatasetColumn(\n datasetName,\n colName,\n );\n const colOutputId = ReadableIdGenerator.getForDatasetColumnOutput(\n datasetName,\n colName,\n );\n if (shapes.inputShapes.has(colInputId)) {\n ontologyInputMappingEntries.push({\n input: colInputId,\n output: colOutputId,\n });\n }\n }\n }\n }\n\n // Generate backing datasource BlockGeneratorResults for objects with includeEmptyBackingDatasource\n const backingDsGeneratorResults = await Promise.all(\n backingDatasourceApiNames.filter(apiName => {\n const objectTypeBlockData = findObjectTypeByApiName(\n ontologyIr.ontology.objectTypes,\n apiName,\n );\n return objectTypeBlockData !== undefined;\n }).map(async apiName => {\n const objectTypeBlockData = findObjectTypeByApiName(\n ontologyIr.ontology.objectTypes,\n apiName,\n );\n consola.info(\n `Generating backing datasource BlockGeneratorResult for ${apiName}...`,\n );\n\n return await generateBackingDatasetBlockResult(\n objectTypeBlockData!,\n commandLineOpts.buildDir,\n commandLineOpts.randomnessKey,\n );\n }),\n );\n\n // Generate backing datasource BlockGeneratorResults for link types with includeEmptyBackingDatasource\n const backingDsLinkGeneratorResults = await Promise.all(\n backingDatasourceLinkApiNames\n .map(linkApiName => {\n const linkTypeBlockData = findLinkTypeByApiName(\n ontologyIr.ontology.linkTypes,\n linkApiName,\n );\n if (!linkTypeBlockData) return undefined;\n consola.info(\n `Generating backing datasource BlockGeneratorResult for link ${linkApiName}...`,\n );\n return generateBackingDatasetBlockResultForLink(\n linkTypeBlockData,\n linkApiName,\n ontologyIr.ontology.objectTypes,\n commandLineOpts.buildDir,\n commandLineOpts.randomnessKey,\n );\n })\n .filter(\n (p): p is Promise<BlockGeneratorResult> => p !== undefined,\n ),\n );\n\n // Create BlockGeneratorResult\n const blockGeneratorResult: BlockGeneratorResult = {\n block_identifier: \"ontology\",\n block_data_directory: blockDataDir,\n oci_block_data_metadata: undefined,\n maven_block_data_metadata: undefined,\n inputs: Object.fromEntries(shapes.inputShapes),\n outputs: Object.fromEntries(shapes.outputShapes),\n input_mapping_entries: ontologyInputMappingEntries,\n external_recommendations: [],\n add_on_override: undefined,\n input_shape_metadata: Object.fromEntries(shapes.inputShapeMetadata),\n block_type: \"ONTOLOGY\",\n };\n\n // Write BlockGeneratorResult to output file\n const blockGeneratorResultJson = JSON.stringify(\n [\n blockGeneratorResult,\n ...backingDsGeneratorResults,\n ...backingDsLinkGeneratorResults,\n ],\n null,\n 2,\n );\n await fs.promises.writeFile(\n commandLineOpts.output,\n blockGeneratorResultJson,\n );\n consola.success(\n `BlockGeneratorResult written to ${commandLineOpts.output}`,\n );\n consola.info(\n `Block data directory: ${blockDataDir}`,\n );\n}\n\nasync function loadOntology(\n input: string,\n apiNamespace: string,\n randomnessKey?: string,\n) {\n const result = await defineOntologyV2(\n apiNamespace,\n async () => {\n const jiti = createJiti(import.meta.filename, {\n moduleCache: true,\n debug: false,\n importMeta: import.meta,\n });\n const module = await jiti.import(input);\n },\n randomnessKey,\n );\n return result;\n}\n\n/**\n * Find an ObjectTypeBlockDataV2 by apiName within the ontology block data.\n */\nfunction findObjectTypeByApiName(\n objectTypes: Record<string, ObjectTypeBlockDataV2>,\n apiName: string,\n): ObjectTypeBlockDataV2 | undefined {\n return Object.values(objectTypes).find(\n (objectTypeBlockData) => objectTypeBlockData.objectType.apiName === apiName,\n );\n}\n\n/**\n * Find a LinkTypeBlockDataV2 by apiName within the ontology block data.\n */\nfunction findLinkTypeByApiName(\n linkTypes: Record<string, LinkTypeBlockDataV2>,\n apiName: string,\n): LinkTypeBlockDataV2 | undefined {\n const linkTypeId = cleanAndValidateLinkTypeId(apiName);\n return Object.values(linkTypes).find(\n (lt) => lt.linkType.id === linkTypeId,\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -207,7 +207,7 @@ export class LinkTypeShapeExtractor {
|
|
|
207
207
|
for (const column of columns) {
|
|
208
208
|
for (const [id, shape] of ridGenerator.getColumnShapes().entries()) {
|
|
209
209
|
if (this.datasourceLocatorsMatch(shape.datasource, datasourceLocator) && shape.name === column) {
|
|
210
|
-
columnReferences.push(id);
|
|
210
|
+
columnReferences.push(ridGenerator.toBlockInternalId(id));
|
|
211
211
|
break;
|
|
212
212
|
}
|
|
213
213
|
}
|
|
@@ -240,7 +240,7 @@ export class LinkTypeShapeExtractor {
|
|
|
240
240
|
any: {}
|
|
241
241
|
}
|
|
242
242
|
},
|
|
243
|
-
datasource: datasourceReadableId,
|
|
243
|
+
datasource: ridGenerator.toBlockInternalId(datasourceReadableId),
|
|
244
244
|
typeclasses: []
|
|
245
245
|
};
|
|
246
246
|
columnShapes.set(id, {
|
package/build/browser/conversion/toMarketplace/shapeExtractors/LinkTypeShapeExtractor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkTypeShapeExtractor.js","names":["createLocalizedAbout","fallbackTitle","fallbackDescription","localizedTitle","localizedDescription","LinkTypeShapeExtractor","extract","linkReadableId","link","ridGenerator","editsEnabled","entityMetadata","arePatchesEnabled","definition","linkType","type","extractIntermediary","intermediary","extractManyToMany","manyToMany","datasources","extractOneToMany","oneToMany","Error","linkDefinition","outputShape","about","oneToManyLinkMetadata","displayMetadata","displayName","objectTypeShapeIdOneSide","getObjectTypeShapeId","objectTypeRidOneSide","objectTypeShapeIdManySide","objectTypeRidManySide","manyToOneLinkMetadata","cardinalityHint","inputShapes","Map","outputShapes","inputShapeMetadata","dataSources","linkTypeName","objectTypeAToBLinkMetadata","objectTypeBToALinkMetadata","objectTypeShapeIdA","objectTypeRidA","objectTypeShapeIdB","objectTypeRidB","editsSupport","objectsBackendVersion","datasetShapes","datasource","datasourceDefinition","datasourceLocator","columns","datasourceType","dataset","rid","datasetRid","branch","branchId","Set","Object","values","objectTypeAPrimaryKeyMapping","map","String","objectTypeBPrimaryKeyMapping","stream","streamLocator","streamLocatorRid","datasourceReadableId","id","loc","getDatasourceLocators","entries","datasourceLocatorsMatch","columnShapes","getColumnInputShapesForManyToManyDatasets","shape","set","datasourceShape","getInputShapeForManyToManyDatasource","objectTypeAShapeId","objectTypeBShapeId","intermediaryObjectTypeShapeId","intermediaryObjectTypeRid","aToIntermediaryLinkTypeShapeId","getLinkTypeShapeId","aToIntermediaryLinkTypeRid","intermediaryToBLinkTypeShapeId","intermediaryToBLinkTypeRid","objectTypeRid","readableId","getObjectTypeRids","inverse","get","toBlockInternalId","linkTypeRid","getLinkTypeRids","columnReferences","column","getColumnShapes","name","push","schema","supportedTypes","tabularDatasource","columnShape","generic","any","typeclasses","datasourceColumn","a","b","restrictedView"],"sources":["LinkTypeShapeExtractor.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 IntermediaryLinkDefinition,\n LinkTypeBlockDataV2,\n LinkTypeRid,\n ManyToManyLinkDefinition,\n ObjectTypeRid,\n} from \"@osdk/client.unstable\";\nimport type {\n DatasourceColumnShape,\n DatasourceLocator,\n InputShape,\n LinkTypeIntermediaryShape,\n LinkTypeManyToManyOutputShape,\n LinkTypeOneToManyShape,\n LinkTypeOutputShape,\n LocalizedTitleAndDescription,\n TabularDatasourceInputShape,\n TabularDatasourceType,\n Void,\n} from \"@osdk/client.unstable/api\";\nimport type {\n BlockShapes,\n OntologyRidGenerator,\n ReadableId,\n} from \"../../../util/generateRid.js\";\n\n/**\n * Helper to create LocalizedTitleAndDescription with empty localizations\n */\nfunction createLocalizedAbout(\n fallbackTitle: string,\n fallbackDescription: string = \"\",\n): LocalizedTitleAndDescription {\n return {\n fallbackTitle,\n fallbackDescription,\n localizedTitle: {},\n localizedDescription: {},\n };\n}\n\n/**\n * TypeScript port of Java's LinkTypeShapeExtractor class\n */\nexport class LinkTypeShapeExtractor {\n /**\n * Extract shapes from a LinkType\n */\n extract(\n linkReadableId: ReadableId,\n link: LinkTypeBlockDataV2,\n ridGenerator: OntologyRidGenerator,\n ): BlockShapes {\n const editsEnabled = link.entityMetadata?.arePatchesEnabled ?? false;\n\n const definition = link.linkType.definition;\n\n switch (definition.type) {\n case \"intermediary\":\n return this.extractIntermediary(\n linkReadableId,\n definition.intermediary,\n ridGenerator,\n );\n case \"manyToMany\":\n return this.extractManyToMany(\n linkReadableId,\n definition.manyToMany,\n ridGenerator,\n link.datasources,\n editsEnabled,\n );\n case \"oneToMany\":\n return this.extractOneToMany(\n linkReadableId,\n definition.oneToMany,\n ridGenerator,\n );\n default:\n throw new Error(\n `Unknown link definition type: ${(definition as any).type}`,\n );\n }\n }\n\n /**\n * Extract one-to-many link shape\n */\n private extractOneToMany(\n linkReadableId: ReadableId,\n linkDefinition: any,\n ridGenerator: OntologyRidGenerator,\n ): BlockShapes {\n const outputShape: LinkTypeOneToManyShape = {\n about: createLocalizedAbout(\n linkDefinition.oneToManyLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeShapeIdOneSide: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidOneSide,\n ),\n objectTypeShapeIdManySide: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidManySide,\n ),\n manyToOneLinkMetadata: createLocalizedAbout(\n linkDefinition.manyToOneLinkMetadata.displayMetadata.displayName,\n ),\n oneToManyLinkMetadata: createLocalizedAbout(\n linkDefinition.oneToManyLinkMetadata.displayMetadata.displayName,\n ),\n cardinalityHint: linkDefinition.cardinalityHint === \"ONE_TO_ONE\"\n ? \"ONE_TO_ONE\"\n : \"ONE_TO_MANY\",\n };\n\n return {\n inputShapes: new Map(),\n outputShapes: new Map([[linkReadableId, {\n type: \"linkType\",\n linkType: {\n type: \"oneToMany\",\n oneToMany: outputShape,\n } as LinkTypeOutputShape,\n }]]),\n inputShapeMetadata: new Map(),\n };\n }\n\n /**\n * Extract many-to-many link shape\n */\n private extractManyToMany(\n linkReadableId: ReadableId,\n linkDefinition: ManyToManyLinkDefinition,\n ridGenerator: OntologyRidGenerator,\n dataSources: any[],\n editsEnabled: boolean,\n ): BlockShapes {\n const linkTypeName =\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName;\n\n const outputShape: LinkTypeManyToManyOutputShape = {\n about: createLocalizedAbout(linkTypeName),\n objectTypeAToBLinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeBToALinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeBToALinkMetadata.displayMetadata.displayName,\n ),\n objectTypeShapeIdA: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidA,\n ),\n objectTypeShapeIdB: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidB,\n ),\n editsSupport: editsEnabled ? \"EDITS_ENABLED\" : \"EDITS_DISABLED\",\n objectsBackendVersion: \"V2\",\n };\n\n const datasetShapes = new Map<ReadableId, InputShape>();\n\n for (const datasource of dataSources) {\n const datasourceDefinition = datasource.datasource;\n let datasourceLocator: DatasourceLocator;\n let columns: Set<string>;\n let datasourceType: TabularDatasourceType;\n\n if (datasourceDefinition.type === \"dataset\") {\n datasourceLocator = {\n type: \"dataset\",\n dataset: {\n rid: datasourceDefinition.dataset.datasetRid,\n branch: datasourceDefinition.dataset.branchId,\n },\n };\n columns = new Set([\n ...Object.values(\n datasourceDefinition.dataset.objectTypeAPrimaryKeyMapping,\n ).map(String),\n ...Object.values(\n datasourceDefinition.dataset.objectTypeBPrimaryKeyMapping,\n ).map(String),\n ]);\n datasourceType = \"DATASET\";\n } else if (datasourceDefinition.type === \"stream\") {\n datasourceLocator = {\n type: \"stream\",\n stream: {\n rid: datasourceDefinition.stream.streamLocator.streamLocatorRid,\n branch: datasourceDefinition.stream.streamLocator.branchId,\n },\n };\n columns = new Set([\n ...Object.values(\n datasourceDefinition.stream.objectTypeAPrimaryKeyMapping,\n ).map(String),\n ...Object.values(\n datasourceDefinition.stream.objectTypeBPrimaryKeyMapping,\n ).map(String),\n ]);\n datasourceType = \"STREAM\";\n } else {\n continue;\n }\n\n // Find datasource readable ID\n let datasourceReadableId: ReadableId | undefined;\n for (\n const [id, loc] of ridGenerator.getDatasourceLocators()\n .entries()\n ) {\n if (this.datasourceLocatorsMatch(loc, datasourceLocator)) {\n datasourceReadableId = id;\n break;\n }\n }\n\n if (!datasourceReadableId) continue;\n\n // Create column shapes\n const columnShapes = this.getColumnInputShapesForManyToManyDatasets(\n ridGenerator,\n columns,\n datasourceLocator,\n datasourceReadableId,\n );\n\n for (const [id, shape] of columnShapes.entries()) {\n datasetShapes.set(id, shape);\n }\n\n // Create datasource shape\n const datasourceShape = this.getInputShapeForManyToManyDatasource(\n ridGenerator,\n linkTypeName,\n columns,\n datasourceLocator,\n datasourceType,\n );\n\n datasetShapes.set(datasourceReadableId, datasourceShape);\n }\n\n return {\n inputShapes: datasetShapes,\n outputShapes: new Map([[linkReadableId, {\n type: \"linkType\",\n linkType: {\n type: \"manyToMany\",\n manyToMany: outputShape,\n } as LinkTypeOutputShape,\n }]]),\n inputShapeMetadata: new Map(),\n };\n }\n\n /**\n * Extract intermediary link shape\n */\n private extractIntermediary(\n linkReadableId: ReadableId,\n linkDefinition: IntermediaryLinkDefinition,\n ridGenerator: OntologyRidGenerator,\n ): BlockShapes {\n const outputShape: LinkTypeIntermediaryShape = {\n about: createLocalizedAbout(\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeAToBLinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeBToALinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeBToALinkMetadata.displayMetadata.displayName,\n ),\n objectTypeAShapeId: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidA,\n ),\n objectTypeBShapeId: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidB,\n ),\n intermediaryObjectTypeShapeId: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.intermediaryObjectTypeRid,\n ),\n aToIntermediaryLinkTypeShapeId: this.getLinkTypeShapeId(\n ridGenerator,\n linkDefinition.aToIntermediaryLinkTypeRid,\n ),\n intermediaryToBLinkTypeShapeId: this.getLinkTypeShapeId(\n ridGenerator,\n linkDefinition.intermediaryToBLinkTypeRid,\n ),\n };\n\n return {\n inputShapes: new Map(),\n outputShapes: new Map([[linkReadableId, {\n type: \"linkType\",\n linkType: {\n type: \"intermediary\",\n intermediary: outputShape,\n } as LinkTypeOutputShape,\n }]]),\n inputShapeMetadata: new Map(),\n };\n }\n\n /**\n * Get object type shape ID reference\n */\n private getObjectTypeShapeId(\n ridGenerator: OntologyRidGenerator,\n objectTypeRid: ObjectTypeRid,\n ): string {\n const readableId = ridGenerator.getObjectTypeRids().inverse().get(\n objectTypeRid,\n );\n if (!readableId) {\n throw new Error(`Object type RID not found: ${objectTypeRid}`);\n }\n return ridGenerator.toBlockInternalId(readableId);\n }\n\n /**\n * Get link type shape ID reference\n */\n private getLinkTypeShapeId(\n ridGenerator: OntologyRidGenerator,\n linkTypeRid: LinkTypeRid,\n ): string {\n const readableId = ridGenerator.getLinkTypeRids().inverse().get(\n linkTypeRid,\n );\n if (!readableId) {\n throw new Error(`Object type RID not found: ${linkTypeRid}`);\n }\n return ridGenerator.toBlockInternalId(readableId);\n }\n\n /**\n * Get input shape for many-to-many datasource\n */\n private getInputShapeForManyToManyDatasource(\n ridGenerator: OntologyRidGenerator,\n linkTypeName: string,\n columns: Set<string>,\n datasourceLocator: DatasourceLocator,\n datasourceType: TabularDatasourceType,\n ): InputShape {\n const columnReferences: string[] = [];\n\n for (const column of columns) {\n for (\n const [id, shape] of ridGenerator.getColumnShapes().entries()\n ) {\n if (\n this.datasourceLocatorsMatch(shape.datasource, datasourceLocator)\n && shape.name === column\n ) {\n columnReferences.push(id);\n break;\n }\n }\n }\n\n const shape: TabularDatasourceInputShape = {\n about: createLocalizedAbout(linkTypeName),\n schema: columnReferences,\n supportedTypes: [datasourceType],\n };\n\n return {\n type: \"tabularDatasource\",\n tabularDatasource: shape,\n };\n }\n\n /**\n * Get column input shapes for many-to-many datasets\n */\n private getColumnInputShapesForManyToManyDatasets(\n ridGenerator: OntologyRidGenerator,\n columns: Set<string>,\n datasourceLocator: DatasourceLocator,\n datasourceReadableId: ReadableId,\n ): Map<ReadableId, InputShape> {\n const columnShapes = new Map<ReadableId, InputShape>();\n\n for (const column of columns) {\n for (\n const [id, shape] of ridGenerator.getColumnShapes().entries()\n ) {\n if (\n this.datasourceLocatorsMatch(shape.datasource, datasourceLocator)\n && shape.name === column\n ) {\n const columnShape: DatasourceColumnShape = {\n about: createLocalizedAbout(column),\n type: {\n type: \"generic\",\n generic: { type: \"any\", any: {} as Void },\n },\n datasource: datasourceReadableId,\n typeclasses: [],\n };\n\n columnShapes.set(id, {\n type: \"datasourceColumn\",\n datasourceColumn: columnShape,\n });\n break;\n }\n }\n }\n\n return columnShapes;\n }\n\n /**\n * Helper to compare datasource locators\n */\n private datasourceLocatorsMatch(\n a: DatasourceLocator,\n b: DatasourceLocator,\n ): boolean {\n if (a.type !== b.type) return false;\n\n if (a.type === \"dataset\" && b.type === \"dataset\") {\n return a.dataset.rid === b.dataset.rid\n && a.dataset.branch === b.dataset.branch;\n }\n\n if (a.type === \"stream\" && b.type === \"stream\") {\n return a.stream.rid === b.stream.rid\n && a.stream.branch === b.stream.branch;\n }\n\n if (a.type === \"restrictedView\" && b.type === \"restrictedView\") {\n return a.restrictedView.rid === b.restrictedView.rid;\n }\n\n return false;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LinkTypeShapeExtractor.js","names":["createLocalizedAbout","fallbackTitle","fallbackDescription","localizedTitle","localizedDescription","LinkTypeShapeExtractor","extract","linkReadableId","link","ridGenerator","editsEnabled","entityMetadata","arePatchesEnabled","definition","linkType","type","extractIntermediary","intermediary","extractManyToMany","manyToMany","datasources","extractOneToMany","oneToMany","Error","linkDefinition","outputShape","about","oneToManyLinkMetadata","displayMetadata","displayName","objectTypeShapeIdOneSide","getObjectTypeShapeId","objectTypeRidOneSide","objectTypeShapeIdManySide","objectTypeRidManySide","manyToOneLinkMetadata","cardinalityHint","inputShapes","Map","outputShapes","inputShapeMetadata","dataSources","linkTypeName","objectTypeAToBLinkMetadata","objectTypeBToALinkMetadata","objectTypeShapeIdA","objectTypeRidA","objectTypeShapeIdB","objectTypeRidB","editsSupport","objectsBackendVersion","datasetShapes","datasource","datasourceDefinition","datasourceLocator","columns","datasourceType","dataset","rid","datasetRid","branch","branchId","Set","Object","values","objectTypeAPrimaryKeyMapping","map","String","objectTypeBPrimaryKeyMapping","stream","streamLocator","streamLocatorRid","datasourceReadableId","id","loc","getDatasourceLocators","entries","datasourceLocatorsMatch","columnShapes","getColumnInputShapesForManyToManyDatasets","shape","set","datasourceShape","getInputShapeForManyToManyDatasource","objectTypeAShapeId","objectTypeBShapeId","intermediaryObjectTypeShapeId","intermediaryObjectTypeRid","aToIntermediaryLinkTypeShapeId","getLinkTypeShapeId","aToIntermediaryLinkTypeRid","intermediaryToBLinkTypeShapeId","intermediaryToBLinkTypeRid","objectTypeRid","readableId","getObjectTypeRids","inverse","get","toBlockInternalId","linkTypeRid","getLinkTypeRids","columnReferences","column","getColumnShapes","name","push","schema","supportedTypes","tabularDatasource","columnShape","generic","any","typeclasses","datasourceColumn","a","b","restrictedView"],"sources":["LinkTypeShapeExtractor.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 IntermediaryLinkDefinition,\n LinkTypeBlockDataV2,\n LinkTypeRid,\n ManyToManyLinkDefinition,\n ObjectTypeRid,\n} from \"@osdk/client.unstable\";\nimport type {\n DatasourceColumnShape,\n DatasourceLocator,\n InputShape,\n LinkTypeIntermediaryShape,\n LinkTypeManyToManyOutputShape,\n LinkTypeOneToManyShape,\n LinkTypeOutputShape,\n LocalizedTitleAndDescription,\n TabularDatasourceInputShape,\n TabularDatasourceType,\n Void,\n} from \"@osdk/client.unstable/api\";\nimport type {\n BlockShapes,\n OntologyRidGenerator,\n ReadableId,\n} from \"../../../util/generateRid.js\";\n\n/**\n * Helper to create LocalizedTitleAndDescription with empty localizations\n */\nfunction createLocalizedAbout(\n fallbackTitle: string,\n fallbackDescription: string = \"\",\n): LocalizedTitleAndDescription {\n return {\n fallbackTitle,\n fallbackDescription,\n localizedTitle: {},\n localizedDescription: {},\n };\n}\n\n/**\n * TypeScript port of Java's LinkTypeShapeExtractor class\n */\nexport class LinkTypeShapeExtractor {\n /**\n * Extract shapes from a LinkType\n */\n extract(\n linkReadableId: ReadableId,\n link: LinkTypeBlockDataV2,\n ridGenerator: OntologyRidGenerator,\n ): BlockShapes {\n const editsEnabled = link.entityMetadata?.arePatchesEnabled ?? false;\n\n const definition = link.linkType.definition;\n\n switch (definition.type) {\n case \"intermediary\":\n return this.extractIntermediary(\n linkReadableId,\n definition.intermediary,\n ridGenerator,\n );\n case \"manyToMany\":\n return this.extractManyToMany(\n linkReadableId,\n definition.manyToMany,\n ridGenerator,\n link.datasources,\n editsEnabled,\n );\n case \"oneToMany\":\n return this.extractOneToMany(\n linkReadableId,\n definition.oneToMany,\n ridGenerator,\n );\n default:\n throw new Error(\n `Unknown link definition type: ${(definition as any).type}`,\n );\n }\n }\n\n /**\n * Extract one-to-many link shape\n */\n private extractOneToMany(\n linkReadableId: ReadableId,\n linkDefinition: any,\n ridGenerator: OntologyRidGenerator,\n ): BlockShapes {\n const outputShape: LinkTypeOneToManyShape = {\n about: createLocalizedAbout(\n linkDefinition.oneToManyLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeShapeIdOneSide: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidOneSide,\n ),\n objectTypeShapeIdManySide: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidManySide,\n ),\n manyToOneLinkMetadata: createLocalizedAbout(\n linkDefinition.manyToOneLinkMetadata.displayMetadata.displayName,\n ),\n oneToManyLinkMetadata: createLocalizedAbout(\n linkDefinition.oneToManyLinkMetadata.displayMetadata.displayName,\n ),\n cardinalityHint: linkDefinition.cardinalityHint === \"ONE_TO_ONE\"\n ? \"ONE_TO_ONE\"\n : \"ONE_TO_MANY\",\n };\n\n return {\n inputShapes: new Map(),\n outputShapes: new Map([[linkReadableId, {\n type: \"linkType\",\n linkType: {\n type: \"oneToMany\",\n oneToMany: outputShape,\n } as LinkTypeOutputShape,\n }]]),\n inputShapeMetadata: new Map(),\n };\n }\n\n /**\n * Extract many-to-many link shape\n */\n private extractManyToMany(\n linkReadableId: ReadableId,\n linkDefinition: ManyToManyLinkDefinition,\n ridGenerator: OntologyRidGenerator,\n dataSources: any[],\n editsEnabled: boolean,\n ): BlockShapes {\n const linkTypeName =\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName;\n\n const outputShape: LinkTypeManyToManyOutputShape = {\n about: createLocalizedAbout(linkTypeName),\n objectTypeAToBLinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeBToALinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeBToALinkMetadata.displayMetadata.displayName,\n ),\n objectTypeShapeIdA: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidA,\n ),\n objectTypeShapeIdB: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidB,\n ),\n editsSupport: editsEnabled ? \"EDITS_ENABLED\" : \"EDITS_DISABLED\",\n objectsBackendVersion: \"V2\",\n };\n\n const datasetShapes = new Map<ReadableId, InputShape>();\n\n for (const datasource of dataSources) {\n const datasourceDefinition = datasource.datasource;\n let datasourceLocator: DatasourceLocator;\n let columns: Set<string>;\n let datasourceType: TabularDatasourceType;\n\n if (datasourceDefinition.type === \"dataset\") {\n datasourceLocator = {\n type: \"dataset\",\n dataset: {\n rid: datasourceDefinition.dataset.datasetRid,\n branch: datasourceDefinition.dataset.branchId,\n },\n };\n columns = new Set([\n ...Object.values(\n datasourceDefinition.dataset.objectTypeAPrimaryKeyMapping,\n ).map(String),\n ...Object.values(\n datasourceDefinition.dataset.objectTypeBPrimaryKeyMapping,\n ).map(String),\n ]);\n datasourceType = \"DATASET\";\n } else if (datasourceDefinition.type === \"stream\") {\n datasourceLocator = {\n type: \"stream\",\n stream: {\n rid: datasourceDefinition.stream.streamLocator.streamLocatorRid,\n branch: datasourceDefinition.stream.streamLocator.branchId,\n },\n };\n columns = new Set([\n ...Object.values(\n datasourceDefinition.stream.objectTypeAPrimaryKeyMapping,\n ).map(String),\n ...Object.values(\n datasourceDefinition.stream.objectTypeBPrimaryKeyMapping,\n ).map(String),\n ]);\n datasourceType = \"STREAM\";\n } else {\n continue;\n }\n\n // Find datasource readable ID\n let datasourceReadableId: ReadableId | undefined;\n for (\n const [id, loc] of ridGenerator.getDatasourceLocators()\n .entries()\n ) {\n if (this.datasourceLocatorsMatch(loc, datasourceLocator)) {\n datasourceReadableId = id;\n break;\n }\n }\n\n if (!datasourceReadableId) continue;\n\n // Create column shapes\n const columnShapes = this.getColumnInputShapesForManyToManyDatasets(\n ridGenerator,\n columns,\n datasourceLocator,\n datasourceReadableId,\n );\n\n for (const [id, shape] of columnShapes.entries()) {\n datasetShapes.set(id, shape);\n }\n\n // Create datasource shape\n const datasourceShape = this.getInputShapeForManyToManyDatasource(\n ridGenerator,\n linkTypeName,\n columns,\n datasourceLocator,\n datasourceType,\n );\n\n datasetShapes.set(datasourceReadableId, datasourceShape);\n }\n\n return {\n inputShapes: datasetShapes,\n outputShapes: new Map([[linkReadableId, {\n type: \"linkType\",\n linkType: {\n type: \"manyToMany\",\n manyToMany: outputShape,\n } as LinkTypeOutputShape,\n }]]),\n inputShapeMetadata: new Map(),\n };\n }\n\n /**\n * Extract intermediary link shape\n */\n private extractIntermediary(\n linkReadableId: ReadableId,\n linkDefinition: IntermediaryLinkDefinition,\n ridGenerator: OntologyRidGenerator,\n ): BlockShapes {\n const outputShape: LinkTypeIntermediaryShape = {\n about: createLocalizedAbout(\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeAToBLinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeAToBLinkMetadata.displayMetadata.displayName,\n ),\n objectTypeBToALinkMetadata: createLocalizedAbout(\n linkDefinition.objectTypeBToALinkMetadata.displayMetadata.displayName,\n ),\n objectTypeAShapeId: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidA,\n ),\n objectTypeBShapeId: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.objectTypeRidB,\n ),\n intermediaryObjectTypeShapeId: this.getObjectTypeShapeId(\n ridGenerator,\n linkDefinition.intermediaryObjectTypeRid,\n ),\n aToIntermediaryLinkTypeShapeId: this.getLinkTypeShapeId(\n ridGenerator,\n linkDefinition.aToIntermediaryLinkTypeRid,\n ),\n intermediaryToBLinkTypeShapeId: this.getLinkTypeShapeId(\n ridGenerator,\n linkDefinition.intermediaryToBLinkTypeRid,\n ),\n };\n\n return {\n inputShapes: new Map(),\n outputShapes: new Map([[linkReadableId, {\n type: \"linkType\",\n linkType: {\n type: \"intermediary\",\n intermediary: outputShape,\n } as LinkTypeOutputShape,\n }]]),\n inputShapeMetadata: new Map(),\n };\n }\n\n /**\n * Get object type shape ID reference\n */\n private getObjectTypeShapeId(\n ridGenerator: OntologyRidGenerator,\n objectTypeRid: ObjectTypeRid,\n ): string {\n const readableId = ridGenerator.getObjectTypeRids().inverse().get(\n objectTypeRid,\n );\n if (!readableId) {\n throw new Error(`Object type RID not found: ${objectTypeRid}`);\n }\n return ridGenerator.toBlockInternalId(readableId);\n }\n\n /**\n * Get link type shape ID reference\n */\n private getLinkTypeShapeId(\n ridGenerator: OntologyRidGenerator,\n linkTypeRid: LinkTypeRid,\n ): string {\n const readableId = ridGenerator.getLinkTypeRids().inverse().get(\n linkTypeRid,\n );\n if (!readableId) {\n throw new Error(`Object type RID not found: ${linkTypeRid}`);\n }\n return ridGenerator.toBlockInternalId(readableId);\n }\n\n /**\n * Get input shape for many-to-many datasource\n */\n private getInputShapeForManyToManyDatasource(\n ridGenerator: OntologyRidGenerator,\n linkTypeName: string,\n columns: Set<string>,\n datasourceLocator: DatasourceLocator,\n datasourceType: TabularDatasourceType,\n ): InputShape {\n const columnReferences: string[] = [];\n\n for (const column of columns) {\n for (\n const [id, shape] of ridGenerator.getColumnShapes().entries()\n ) {\n if (\n this.datasourceLocatorsMatch(shape.datasource, datasourceLocator)\n && shape.name === column\n ) {\n columnReferences.push(ridGenerator.toBlockInternalId(id));\n break;\n }\n }\n }\n\n const shape: TabularDatasourceInputShape = {\n about: createLocalizedAbout(linkTypeName),\n schema: columnReferences,\n supportedTypes: [datasourceType],\n };\n\n return {\n type: \"tabularDatasource\",\n tabularDatasource: shape,\n };\n }\n\n /**\n * Get column input shapes for many-to-many datasets\n */\n private getColumnInputShapesForManyToManyDatasets(\n ridGenerator: OntologyRidGenerator,\n columns: Set<string>,\n datasourceLocator: DatasourceLocator,\n datasourceReadableId: ReadableId,\n ): Map<ReadableId, InputShape> {\n const columnShapes = new Map<ReadableId, InputShape>();\n\n for (const column of columns) {\n for (\n const [id, shape] of ridGenerator.getColumnShapes().entries()\n ) {\n if (\n this.datasourceLocatorsMatch(shape.datasource, datasourceLocator)\n && shape.name === column\n ) {\n const columnShape: DatasourceColumnShape = {\n about: createLocalizedAbout(column),\n type: {\n type: \"generic\",\n generic: { type: \"any\", any: {} as Void },\n },\n datasource: ridGenerator.toBlockInternalId(datasourceReadableId),\n typeclasses: [],\n };\n\n columnShapes.set(id, {\n type: \"datasourceColumn\",\n datasourceColumn: columnShape,\n });\n break;\n }\n }\n }\n\n return columnShapes;\n }\n\n /**\n * Helper to compare datasource locators\n */\n private datasourceLocatorsMatch(\n a: DatasourceLocator,\n b: DatasourceLocator,\n ): boolean {\n if (a.type !== b.type) return false;\n\n if (a.type === \"dataset\" && b.type === \"dataset\") {\n return a.dataset.rid === b.dataset.rid\n && a.dataset.branch === b.dataset.branch;\n }\n\n if (a.type === \"stream\" && b.type === \"stream\") {\n return a.stream.rid === b.stream.rid\n && a.stream.branch === b.stream.branch;\n }\n\n if (a.type === \"restrictedView\" && b.type === \"restrictedView\") {\n return a.restrictedView.rid === b.restrictedView.rid;\n }\n\n return false;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/cjs/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var chunkXMO5RRJG_cjs = require('./chunk-XMO5RRJG.cjs');
|
|
6
|
+
var maker = require('@osdk/maker');
|
|
6
7
|
var consola = require('consola');
|
|
7
8
|
var jiti = require('jiti');
|
|
8
9
|
var fs = require('fs');
|
|
@@ -10,7 +11,6 @@ var path = require('path');
|
|
|
10
11
|
var invariant5 = require('tiny-invariant');
|
|
11
12
|
var yargs = require('yargs');
|
|
12
13
|
var helpers = require('yargs/helpers');
|
|
13
|
-
var maker = require('@osdk/maker');
|
|
14
14
|
|
|
15
15
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
16
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -2989,7 +2989,7 @@ var LinkTypeShapeExtractor = class {
|
|
|
2989
2989
|
for (const column of columns) {
|
|
2990
2990
|
for (const [id, shape2] of ridGenerator.getColumnShapes().entries()) {
|
|
2991
2991
|
if (this.datasourceLocatorsMatch(shape2.datasource, datasourceLocator) && shape2.name === column) {
|
|
2992
|
-
columnReferences.push(id);
|
|
2992
|
+
columnReferences.push(ridGenerator.toBlockInternalId(id));
|
|
2993
2993
|
break;
|
|
2994
2994
|
}
|
|
2995
2995
|
}
|
|
@@ -3021,7 +3021,7 @@ var LinkTypeShapeExtractor = class {
|
|
|
3021
3021
|
any: {}
|
|
3022
3022
|
}
|
|
3023
3023
|
},
|
|
3024
|
-
datasource: datasourceReadableId,
|
|
3024
|
+
datasource: ridGenerator.toBlockInternalId(datasourceReadableId),
|
|
3025
3025
|
typeclasses: []
|
|
3026
3026
|
};
|
|
3027
3027
|
columnShapes.set(id, {
|
|
@@ -4052,10 +4052,15 @@ async function defineOntologyV2(ns, body, randomnessKey) {
|
|
|
4052
4052
|
const ontDef = convertOntologyDefinition(ontologyDefinition, ridGenerator, randomnessKey);
|
|
4053
4053
|
const shapes = await getShapes(ontDef.ontology, ridGenerator, randomnessKey);
|
|
4054
4054
|
const backingDatasourceApiNames = Object.entries(ontologyDefinition[maker.OntologyEntityTypeEnum.OBJECT_TYPE]).filter(([_, obj]) => obj.includeEmptyBackingDatasource === true).map(([apiName]) => apiName);
|
|
4055
|
+
const backingDatasourceLinkApiNames = Object.entries(ontologyDefinition[maker.OntologyEntityTypeEnum.LINK_TYPE]).filter(([_, link]) => {
|
|
4056
|
+
const lt = link;
|
|
4057
|
+
return "many" in lt && !("intermediaryObjectType" in lt) && lt.includeEmptyBackingDatasource === true;
|
|
4058
|
+
}).map(([apiName]) => apiName);
|
|
4055
4059
|
return {
|
|
4056
4060
|
ontologyIr: ontDef,
|
|
4057
4061
|
shapes,
|
|
4058
|
-
backingDatasourceApiNames
|
|
4062
|
+
backingDatasourceApiNames,
|
|
4063
|
+
backingDatasourceLinkApiNames
|
|
4059
4064
|
};
|
|
4060
4065
|
}
|
|
4061
4066
|
function propertyTypeToSchemaType(propType) {
|
|
@@ -4109,23 +4114,16 @@ function getNonEditOnlyProperties(objectTypeBlockData) {
|
|
|
4109
4114
|
const editOnlyRids = getEditOnlyPropertyRids(objectTypeBlockData.datasources);
|
|
4110
4115
|
return Object.entries(objectTypeBlockData.objectType.propertyTypes).filter(([rid]) => !editOnlyRids.has(rid)).map(([_, prop]) => prop);
|
|
4111
4116
|
}
|
|
4112
|
-
async function
|
|
4113
|
-
const apiName = objectTypeBlockData.objectType.apiName;
|
|
4114
|
-
const nonEditOnlyProps = getNonEditOnlyProperties(objectTypeBlockData);
|
|
4115
|
-
const dsName = `${apiName}-backing-ds`;
|
|
4117
|
+
async function generateBackingDatasetBlock(datasetName, blockIdentifier, dirSuffix, columns, buildDir, randomnessKey) {
|
|
4116
4118
|
const outputs = {};
|
|
4117
|
-
const datasourceReadableId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetOutput(
|
|
4118
|
-
const columnReadableIds =
|
|
4119
|
-
for (const prop of nonEditOnlyProps) {
|
|
4120
|
-
const colReadableId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetColumnOutput(apiName, prop.apiName);
|
|
4121
|
-
columnReadableIds.push(colReadableId);
|
|
4122
|
-
}
|
|
4119
|
+
const datasourceReadableId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetOutput(datasetName);
|
|
4120
|
+
const columnReadableIds = columns.map((col) => chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetColumnOutput(datasetName, col.name));
|
|
4123
4121
|
const datasourceBlockInternalId = chunkXMO5RRJG_cjs.toBlockShapeId(datasourceReadableId, randomnessKey);
|
|
4124
4122
|
outputs[datasourceReadableId] = {
|
|
4125
4123
|
type: "tabularDatasource",
|
|
4126
4124
|
tabularDatasource: {
|
|
4127
4125
|
about: {
|
|
4128
|
-
fallbackTitle:
|
|
4126
|
+
fallbackTitle: blockIdentifier,
|
|
4129
4127
|
fallbackDescription: "",
|
|
4130
4128
|
localizedTitle: {},
|
|
4131
4129
|
localizedDescription: {}
|
|
@@ -4137,32 +4135,32 @@ async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir,
|
|
|
4137
4135
|
}
|
|
4138
4136
|
}
|
|
4139
4137
|
};
|
|
4140
|
-
for (let i = 0; i <
|
|
4141
|
-
const
|
|
4138
|
+
for (let i = 0; i < columns.length; i++) {
|
|
4139
|
+
const col = columns[i];
|
|
4142
4140
|
const colReadableId = columnReadableIds[i];
|
|
4143
4141
|
outputs[colReadableId] = {
|
|
4144
4142
|
type: "datasourceColumn",
|
|
4145
4143
|
datasourceColumn: {
|
|
4146
4144
|
about: {
|
|
4147
|
-
fallbackTitle:
|
|
4145
|
+
fallbackTitle: col.name,
|
|
4148
4146
|
fallbackDescription: "",
|
|
4149
4147
|
localizedTitle: {},
|
|
4150
4148
|
localizedDescription: {}
|
|
4151
4149
|
},
|
|
4152
4150
|
type: {
|
|
4153
4151
|
type: "concrete",
|
|
4154
|
-
concrete: typeToConcreteDataType(
|
|
4152
|
+
concrete: typeToConcreteDataType(col.type)
|
|
4155
4153
|
},
|
|
4156
4154
|
datasource: datasourceBlockInternalId,
|
|
4157
4155
|
typeclasses: []
|
|
4158
4156
|
}
|
|
4159
4157
|
};
|
|
4160
4158
|
}
|
|
4161
|
-
const columnInternalIds =
|
|
4162
|
-
const compassReadableId = `${
|
|
4159
|
+
const columnInternalIds = columns.map((col) => chunkXMO5RRJG_cjs.toBlockShapeId(`column-internal-${datasetName}-${col.name}`, randomnessKey));
|
|
4160
|
+
const compassReadableId = `${blockIdentifier}-compass-resource`;
|
|
4163
4161
|
const compassBlockShapeId = chunkXMO5RRJG_cjs.toBlockShapeId(compassReadableId, randomnessKey);
|
|
4164
|
-
const datasourceInternalId = chunkXMO5RRJG_cjs.toBlockShapeId(`datasource-internal-${
|
|
4165
|
-
const locationInternalId = chunkXMO5RRJG_cjs.toBlockShapeId(`location-internal-${
|
|
4162
|
+
const datasourceInternalId = chunkXMO5RRJG_cjs.toBlockShapeId(`datasource-internal-${datasetName}`, randomnessKey);
|
|
4163
|
+
const locationInternalId = chunkXMO5RRJG_cjs.toBlockShapeId(`location-internal-${datasetName}`, randomnessKey);
|
|
4166
4164
|
const addOnOverride = {
|
|
4167
4165
|
idToBlockShapeId: {
|
|
4168
4166
|
"dataset-internal-shape-id": datasourceBlockInternalId,
|
|
@@ -4175,14 +4173,14 @@ async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir,
|
|
|
4175
4173
|
[datasourceBlockInternalId]: compassBlockShapeId
|
|
4176
4174
|
}
|
|
4177
4175
|
};
|
|
4178
|
-
const dsBlockDataDir = path__namespace.join(buildDir, `temp_block_data_${
|
|
4176
|
+
const dsBlockDataDir = path__namespace.join(buildDir, `temp_block_data_${dirSuffix}`);
|
|
4179
4177
|
await fs__namespace.promises.mkdir(dsBlockDataDir, {
|
|
4180
4178
|
recursive: true
|
|
4181
4179
|
});
|
|
4182
4180
|
const schemaJson = {
|
|
4183
|
-
fieldSchemaList:
|
|
4184
|
-
type: propertyTypeToSchemaType(
|
|
4185
|
-
name:
|
|
4181
|
+
fieldSchemaList: columns.map((col) => ({
|
|
4182
|
+
type: propertyTypeToSchemaType(col.type),
|
|
4183
|
+
name: col.name,
|
|
4186
4184
|
nullable: null,
|
|
4187
4185
|
userDefinedTypeClass: null,
|
|
4188
4186
|
customMetadata: {},
|
|
@@ -4204,7 +4202,7 @@ async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir,
|
|
|
4204
4202
|
const blockDataJson = {
|
|
4205
4203
|
type: "v1",
|
|
4206
4204
|
v1: {
|
|
4207
|
-
columns: Object.fromEntries(
|
|
4205
|
+
columns: Object.fromEntries(columns.map((col, i) => [columnInternalIds[i], col.name])),
|
|
4208
4206
|
hasSchema: true
|
|
4209
4207
|
}
|
|
4210
4208
|
};
|
|
@@ -4217,7 +4215,7 @@ async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir,
|
|
|
4217
4215
|
type: "compassResource",
|
|
4218
4216
|
compassResource: {
|
|
4219
4217
|
about: {
|
|
4220
|
-
fallbackTitle:
|
|
4218
|
+
fallbackTitle: blockIdentifier,
|
|
4221
4219
|
fallbackDescription: "",
|
|
4222
4220
|
localizedTitle: {},
|
|
4223
4221
|
localizedDescription: {}
|
|
@@ -4232,7 +4230,7 @@ async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir,
|
|
|
4232
4230
|
}
|
|
4233
4231
|
};
|
|
4234
4232
|
return {
|
|
4235
|
-
block_identifier:
|
|
4233
|
+
block_identifier: blockIdentifier,
|
|
4236
4234
|
block_data_directory: dsBlockDataDir,
|
|
4237
4235
|
oci_block_data_metadata: void 0,
|
|
4238
4236
|
maven_block_data_metadata: void 0,
|
|
@@ -4245,13 +4243,55 @@ async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir,
|
|
|
4245
4243
|
block_type: "STATIC_DATASET"
|
|
4246
4244
|
};
|
|
4247
4245
|
}
|
|
4246
|
+
async function generateBackingDatasetBlockResult(objectTypeBlockData, buildDir, randomnessKey) {
|
|
4247
|
+
const apiName = objectTypeBlockData.objectType.apiName;
|
|
4248
|
+
const nonEditOnlyProps = getNonEditOnlyProperties(objectTypeBlockData);
|
|
4249
|
+
const columns = nonEditOnlyProps.map((prop) => ({
|
|
4250
|
+
name: prop.apiName,
|
|
4251
|
+
type: prop.type
|
|
4252
|
+
}));
|
|
4253
|
+
return generateBackingDatasetBlock(apiName, `${apiName}-backing-ds`, `${apiName}_backing_ds`, columns, buildDir, randomnessKey);
|
|
4254
|
+
}
|
|
4255
|
+
async function generateBackingDatasetBlockResultForLink(linkTypeBlockData, linkApiName, objectTypes, buildDir, randomnessKey) {
|
|
4256
|
+
const definition = linkTypeBlockData.linkType.definition;
|
|
4257
|
+
if (definition.type !== "manyToMany") {
|
|
4258
|
+
throw new Error(`Link type "${linkApiName}" is not a many-to-many link type`);
|
|
4259
|
+
}
|
|
4260
|
+
const m2m = definition.manyToMany;
|
|
4261
|
+
const datasource = linkTypeBlockData.datasources[0]?.datasource;
|
|
4262
|
+
if (!datasource || datasource.type !== "dataset") {
|
|
4263
|
+
throw new Error(`Link type "${linkApiName}" does not have a dataset datasource`);
|
|
4264
|
+
}
|
|
4265
|
+
const ds = datasource.dataset;
|
|
4266
|
+
const pkRidA = Object.keys(ds.objectTypeAPrimaryKeyMapping)[0];
|
|
4267
|
+
const columnA = Object.values(ds.objectTypeAPrimaryKeyMapping)[0];
|
|
4268
|
+
const pkRidB = Object.keys(ds.objectTypeBPrimaryKeyMapping)[0];
|
|
4269
|
+
const columnB = Object.values(ds.objectTypeBPrimaryKeyMapping)[0];
|
|
4270
|
+
const objectTypeA = objectTypes[m2m.objectTypeRidA];
|
|
4271
|
+
const objectTypeB = objectTypes[m2m.objectTypeRidB];
|
|
4272
|
+
if (!objectTypeA || !objectTypeB) {
|
|
4273
|
+
throw new Error(`Could not find object types for link "${linkApiName}"`);
|
|
4274
|
+
}
|
|
4275
|
+
const propTypeA = objectTypeA.objectType.propertyTypes[pkRidA]?.type;
|
|
4276
|
+
const propTypeB = objectTypeB.objectType.propertyTypes[pkRidB]?.type;
|
|
4277
|
+
if (!propTypeA || !propTypeB) {
|
|
4278
|
+
throw new Error(`Could not find primary key property types for link "${linkApiName}"`);
|
|
4279
|
+
}
|
|
4280
|
+
return generateBackingDatasetBlock(`link.${linkApiName}`, `${linkApiName}-link-backing-ds`, `${linkApiName}_link_backing_ds`, [{
|
|
4281
|
+
name: columnA,
|
|
4282
|
+
type: propTypeA
|
|
4283
|
+
}, {
|
|
4284
|
+
name: columnB,
|
|
4285
|
+
type: propTypeB
|
|
4286
|
+
}], buildDir, randomnessKey);
|
|
4287
|
+
}
|
|
4248
4288
|
|
|
4249
4289
|
// src/cli/main.ts
|
|
4250
4290
|
var apiNamespaceRegex = /^[a-z0-9-]+(\.[a-z0-9-]+)*\.$/;
|
|
4251
4291
|
var uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
4252
4292
|
async function main(args = process.argv) {
|
|
4253
4293
|
consola.consola.log("Generating BlockGeneratorResult for ontology...");
|
|
4254
|
-
const commandLineOpts = await yargs__default.default(helpers.hideBin(args)).version("0.6.0
|
|
4294
|
+
const commandLineOpts = await yargs__default.default(helpers.hideBin(args)).version("0.6.0").wrap(Math.min(150, yargs__default.default().terminalWidth())).strict().help().options({
|
|
4255
4295
|
input: {
|
|
4256
4296
|
alias: "i",
|
|
4257
4297
|
describe: "Input file",
|
|
@@ -4296,7 +4336,8 @@ async function main(args = process.argv) {
|
|
|
4296
4336
|
const {
|
|
4297
4337
|
ontologyIr,
|
|
4298
4338
|
shapes,
|
|
4299
|
-
backingDatasourceApiNames
|
|
4339
|
+
backingDatasourceApiNames,
|
|
4340
|
+
backingDatasourceLinkApiNames
|
|
4300
4341
|
} = await loadOntology(commandLineOpts.input, apiNamespace, commandLineOpts.randomnessKey);
|
|
4301
4342
|
const blockDataDir = path__namespace.join(commandLineOpts.buildDir, "temp_block_data");
|
|
4302
4343
|
if (!fs__namespace.existsSync(blockDataDir)) {
|
|
@@ -4332,6 +4373,33 @@ async function main(args = process.argv) {
|
|
|
4332
4373
|
}
|
|
4333
4374
|
}
|
|
4334
4375
|
}
|
|
4376
|
+
for (const linkApiName of backingDatasourceLinkApiNames) {
|
|
4377
|
+
const linkTypeBlockData = findLinkTypeByApiName(ontologyIr.ontology.linkTypes, linkApiName);
|
|
4378
|
+
if (!linkTypeBlockData) continue;
|
|
4379
|
+
const datasetName = `link.${linkApiName}`;
|
|
4380
|
+
const inputDsId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDataset(datasetName);
|
|
4381
|
+
const outputDsId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetOutput(datasetName);
|
|
4382
|
+
if (shapes.inputShapes.has(inputDsId)) {
|
|
4383
|
+
ontologyInputMappingEntries.push({
|
|
4384
|
+
input: inputDsId,
|
|
4385
|
+
output: outputDsId
|
|
4386
|
+
});
|
|
4387
|
+
}
|
|
4388
|
+
const ds = linkTypeBlockData.datasources[0]?.datasource;
|
|
4389
|
+
if (ds?.type === "dataset") {
|
|
4390
|
+
const columnNames = [...Object.values(ds.dataset.objectTypeAPrimaryKeyMapping).map(String), ...Object.values(ds.dataset.objectTypeBPrimaryKeyMapping).map(String)];
|
|
4391
|
+
for (const colName of columnNames) {
|
|
4392
|
+
const colInputId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetColumn(datasetName, colName);
|
|
4393
|
+
const colOutputId = chunkXMO5RRJG_cjs.ReadableIdGenerator.getForDatasetColumnOutput(datasetName, colName);
|
|
4394
|
+
if (shapes.inputShapes.has(colInputId)) {
|
|
4395
|
+
ontologyInputMappingEntries.push({
|
|
4396
|
+
input: colInputId,
|
|
4397
|
+
output: colOutputId
|
|
4398
|
+
});
|
|
4399
|
+
}
|
|
4400
|
+
}
|
|
4401
|
+
}
|
|
4402
|
+
}
|
|
4335
4403
|
const backingDsGeneratorResults = await Promise.all(backingDatasourceApiNames.filter((apiName) => {
|
|
4336
4404
|
const objectTypeBlockData = findObjectTypeByApiName(ontologyIr.ontology.objectTypes, apiName);
|
|
4337
4405
|
return objectTypeBlockData !== void 0;
|
|
@@ -4340,6 +4408,12 @@ async function main(args = process.argv) {
|
|
|
4340
4408
|
consola.consola.info(`Generating backing datasource BlockGeneratorResult for ${apiName}...`);
|
|
4341
4409
|
return await generateBackingDatasetBlockResult(objectTypeBlockData, commandLineOpts.buildDir, commandLineOpts.randomnessKey);
|
|
4342
4410
|
}));
|
|
4411
|
+
const backingDsLinkGeneratorResults = await Promise.all(backingDatasourceLinkApiNames.map((linkApiName) => {
|
|
4412
|
+
const linkTypeBlockData = findLinkTypeByApiName(ontologyIr.ontology.linkTypes, linkApiName);
|
|
4413
|
+
if (!linkTypeBlockData) return void 0;
|
|
4414
|
+
consola.consola.info(`Generating backing datasource BlockGeneratorResult for link ${linkApiName}...`);
|
|
4415
|
+
return generateBackingDatasetBlockResultForLink(linkTypeBlockData, linkApiName, ontologyIr.ontology.objectTypes, commandLineOpts.buildDir, commandLineOpts.randomnessKey);
|
|
4416
|
+
}).filter((p) => p !== void 0));
|
|
4343
4417
|
const blockGeneratorResult = {
|
|
4344
4418
|
block_identifier: "ontology",
|
|
4345
4419
|
block_data_directory: blockDataDir,
|
|
@@ -4353,7 +4427,7 @@ async function main(args = process.argv) {
|
|
|
4353
4427
|
input_shape_metadata: Object.fromEntries(shapes.inputShapeMetadata),
|
|
4354
4428
|
block_type: "ONTOLOGY"
|
|
4355
4429
|
};
|
|
4356
|
-
const blockGeneratorResultJson = JSON.stringify([blockGeneratorResult, ...backingDsGeneratorResults], null, 2);
|
|
4430
|
+
const blockGeneratorResultJson = JSON.stringify([blockGeneratorResult, ...backingDsGeneratorResults, ...backingDsLinkGeneratorResults], null, 2);
|
|
4357
4431
|
await fs__namespace.promises.writeFile(commandLineOpts.output, blockGeneratorResultJson);
|
|
4358
4432
|
consola.consola.success(`BlockGeneratorResult written to ${commandLineOpts.output}`);
|
|
4359
4433
|
consola.consola.info(`Block data directory: ${blockDataDir}`);
|
|
@@ -4372,6 +4446,10 @@ async function loadOntology(input, apiNamespace, randomnessKey) {
|
|
|
4372
4446
|
function findObjectTypeByApiName(objectTypes, apiName) {
|
|
4373
4447
|
return Object.values(objectTypes).find((objectTypeBlockData) => objectTypeBlockData.objectType.apiName === apiName);
|
|
4374
4448
|
}
|
|
4449
|
+
function findLinkTypeByApiName(linkTypes, apiName) {
|
|
4450
|
+
const linkTypeId = maker.cleanAndValidateLinkTypeId(apiName);
|
|
4451
|
+
return Object.values(linkTypes).find((lt) => lt.linkType.id === linkTypeId);
|
|
4452
|
+
}
|
|
4375
4453
|
function defineImportObject(objectDef) {
|
|
4376
4454
|
const properties = Object.entries(objectDef.properties ?? {}).map(([apiName, type]) => ({
|
|
4377
4455
|
apiName,
|