@tiangong-lca/cli 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/dist/src/lib/batch/types.js.map +1 -1
- package/dist/src/lib/dataset-bilingual.js.map +1 -1
- package/dist/src/lib/dataset-curation-queue.js.map +1 -1
- package/dist/src/lib/dataset-local.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-apply.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-contract.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-verify.js.map +1 -1
- package/dist/src/lib/dataset-save-draft-run.js.map +1 -1
- package/dist/src/lib/flow-fetch-rows.js.map +1 -1
- package/dist/src/lib/flow-read.js.map +1 -1
- package/dist/src/lib/identity-preflight.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js.map +1 -1
- package/dist/src/lib/process-flow-build-plan.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js.map +1 -1
- package/dist/src/lib/process-verify-rows.js.map +1 -1
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/supabase-json-ordered-write.js.map +1 -1
- package/dist/src/lib/supabase-rest.js.map +1 -1
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/package.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-curation-queue.js","sourceRoot":"","sources":["../../../src/lib/dataset-curation-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport path from 'node:path';\nimport { CliError } from './errors.js';\nimport {\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nexport type DatasetCurationQueueEntityType = 'support' | 'flow' | 'process';\n\nexport type RunDatasetCurationQueueBuildOptions = {\n processesPath: string;\n flowsPath?: string;\n supportPaths?: string[];\n externalFlowRefPaths?: string[];\n outDir: string;\n excludeProcessIds?: string[];\n processLimit?: number;\n};\n\nexport type RunDatasetCurationQueueNextOptions = {\n queueDir: string;\n entityType?: DatasetCurationQueueEntityType;\n taskId?: string;\n};\n\nexport type RunDatasetCurationQueueVerifyOptions = {\n queueDir: string;\n entityType?: DatasetCurationQueueEntityType;\n taskId?: string;\n};\n\nexport type DatasetCurationQueueTask = {\n schema_version: 1;\n entity_type: DatasetCurationQueueEntityType;\n task_id: string;\n entity_id: string;\n version: string;\n lock_key: string;\n depends_on: string[];\n input_rows_file: string;\n work_dir: string;\n checkpoint_file: string;\n run_plan_file: string;\n closure_file: string;\n};\n\ntype DatasetCurationQueueBlocker = {\n schema_version: 1;\n code: string;\n severity: 'blocker';\n entity_type: DatasetCurationQueueEntityType;\n entity_id: string | null;\n version: string | null;\n message: string;\n details?: unknown;\n};\n\nexport type DatasetCurationQueueBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'ready' | 'blocked';\n out_dir: string;\n inputs: {\n processes: string;\n flows: string | null;\n support: string[];\n external_flow_refs: string[];\n };\n counts: {\n support_rows: number;\n flow_rows: number;\n process_rows: number;\n external_flow_refs: number;\n tasks: number;\n blockers: number;\n };\n hashes: {\n inputs: Record<string, string>;\n task_order: string;\n };\n files: {\n manifest: string;\n tasks: string;\n locks: string;\n blockers: string;\n };\n tasks: DatasetCurationQueueTask[];\n blockers: DatasetCurationQueueBlocker[];\n};\n\nexport type DatasetCurationQueueTaskRuntimeStatus =\n | 'complete'\n | 'pending'\n | 'waiting_dependencies'\n | 'blocked';\n\nexport type DatasetCurationQueueTaskState = {\n task_id: string;\n entity_type: DatasetCurationQueueEntityType;\n entity_id: string;\n version: string;\n status: DatasetCurationQueueTaskRuntimeStatus;\n checkpoint_status: string | null;\n checkpoint_file: string;\n depends_on: string[];\n incomplete_dependencies: string[];\n reason: string | null;\n};\n\nexport type DatasetCurationQueueNextReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'ready' | 'complete' | 'blocked';\n queue_dir: string;\n scope: {\n entity_type: DatasetCurationQueueEntityType | null;\n task_id: string | null;\n };\n counts: {\n total: number;\n complete: number;\n pending: number;\n waiting_dependencies: number;\n blocked: number;\n runnable: number;\n };\n next_task:\n | (DatasetCurationQueueTask & {\n action: {\n kind: 'entity_curation_task';\n input_artifact: string;\n output_artifacts: string[];\n };\n })\n | null;\n task_states: DatasetCurationQueueTaskState[];\n blockers: DatasetCurationQueueBlocker[];\n};\n\nexport type DatasetCurationQueueVerifyReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed' | 'blocked';\n queue_dir: string;\n scope: {\n entity_type: DatasetCurationQueueEntityType | null;\n task_id: string | null;\n };\n counts: {\n total: number;\n complete: number;\n pending: number;\n waiting_dependencies: number;\n blocked: number;\n };\n task_states: DatasetCurationQueueTaskState[];\n blockers: DatasetCurationQueueBlocker[];\n};\n\ntype QueueRow = {\n entityType: DatasetCurationQueueEntityType;\n sourcePath: string;\n sourceIndex: number;\n row: JsonObject;\n payload: JsonObject;\n id: string;\n version: string;\n};\n\ntype FlowRef = {\n id: string;\n version: string | null;\n path: string;\n};\n\ntype DeferredFlowRef = FlowRef & {\n actionItemCode: string | null;\n reason: string | null;\n};\n\nconst DEFAULT_VERSION = 'unversioned';\n\nexport async function runDatasetCurationQueueBuild(\n options: RunDatasetCurationQueueBuildOptions,\n): Promise<DatasetCurationQueueBuildReport> {\n const outDir = requirePath(options.outDir, '--out-dir');\n const processesPath = requireExistingPath(options.processesPath, '--processes');\n const flowsPath = options.flowsPath ? requireExistingPath(options.flowsPath, '--flows') : null;\n const supportPaths = (options.supportPaths ?? []).map((inputPath) =>\n requireExistingPath(inputPath, '--support'),\n );\n const externalFlowRefPaths = (options.externalFlowRefPaths ?? []).map((inputPath) =>\n requireExistingPath(inputPath, '--external-flow-ref'),\n );\n const processLimit = normalizeProcessLimit(options.processLimit);\n const excludedProcessIds = new Set((options.excludeProcessIds ?? []).map((id) => id.trim()));\n\n const supportRows = supportPaths.flatMap((inputPath) => readQueueRows(inputPath, 'support'));\n const flowRows = flowsPath ? readQueueRows(flowsPath, 'flow') : [];\n const processRows = readQueueRows(processesPath, 'process')\n .filter((row) => !excludedProcessIds.has(row.id))\n .slice(0, processLimit ?? undefined);\n const externalFlowRefs = externalFlowRefPaths.flatMap((inputPath) =>\n readExternalFlowRefs(inputPath),\n );\n\n mkdirSync(outDir, { recursive: true });\n\n const localFlowTasks = new Map<string, string>();\n const flowRowsById = new Map<string, QueueRow>();\n for (const row of flowRows) {\n const taskId = taskIdFor(row.entityType, row.id, row.version);\n localFlowTasks.set(row.id, taskId);\n flowRowsById.set(row.id, row);\n }\n\n const externalFlowIds = new Set(externalFlowRefs.map((ref) => ref.id));\n const blockers: DatasetCurationQueueBlocker[] = [];\n const supportTasks = supportRows.map((row) => buildTask(outDir, row, []));\n const flowTasks = flowRows.map((row) => buildTask(outDir, row, []));\n const processTasks = processRows.map((row) => {\n const refs = extractProcessFlowRefs(row.payload);\n const deferredRefs = extractDeferredProcessFlowRefs(row.payload);\n const deferredRefKeys = deferredProcessFlowRefKeys(deferredRefs);\n const dependsOn = new Set<string>();\n const missingRefs: FlowRef[] = [];\n for (const ref of refs) {\n const taskId = localFlowTasks.get(ref.id);\n if (taskId) {\n dependsOn.add(taskId);\n } else if (!externalFlowIds.has(ref.id) && !deferredRefKeys.has(flowRefKey(ref))) {\n missingRefs.push(ref);\n }\n }\n if (missingRefs.length > 0) {\n blockers.push({\n schema_version: 1,\n code: 'process_flow_reference_unresolved',\n severity: 'blocker',\n entity_type: 'process',\n entity_id: row.id,\n version: row.version,\n message:\n 'Process references flows that are neither present in local flow rows nor declared as external flow refs.',\n details: { missing_flow_refs: missingRefs },\n });\n }\n return buildTask(outDir, row, [...dependsOn].sort());\n });\n const tasks = [...supportTasks, ...flowTasks, ...processTasks];\n const taskRows = [\n ...supportRows.map((row, index) => ({ row, task: supportTasks[index] })),\n ...flowRows.map((row, index) => ({ row, task: flowTasks[index] })),\n ...processRows.map((row, index) => ({ row, task: processTasks[index] })),\n ];\n\n for (const { row, task } of taskRows) {\n writeEntityArtifacts({\n row,\n task,\n flowRefs: row.entityType === 'process' ? extractProcessFlowRefs(row.payload) : [],\n deferredFlowRefs:\n row.entityType === 'process' ? extractDeferredProcessFlowRefs(row.payload) : [],\n externalFlowIds,\n flowRowsById,\n });\n }\n\n const outputsDir = path.join(outDir, 'outputs');\n mkdirSync(outputsDir, { recursive: true });\n const manifestPath = path.join(outputsDir, 'curation-queue-manifest.json');\n const tasksPath = path.join(outputsDir, 'curation-queue-tasks.jsonl');\n const locksPath = path.join(outputsDir, 'curation-queue-locks.json');\n const blockersPath = path.join(outputsDir, 'curation-queue-blockers.jsonl');\n const inputHashes = buildInputHashes([\n processesPath,\n ...(flowsPath ? [flowsPath] : []),\n ...supportPaths,\n ...externalFlowRefPaths,\n ]);\n const locks = {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n locks: tasks.map((task) => ({\n lock_key: task.lock_key,\n task_id: task.task_id,\n entity_type: task.entity_type,\n entity_id: task.entity_id,\n version: task.version,\n status: 'available',\n })),\n };\n const report: DatasetCurationQueueBuildReport = {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n status: blockers.length > 0 ? 'blocked' : 'ready',\n out_dir: path.resolve(outDir),\n inputs: {\n processes: path.resolve(processesPath),\n flows: flowsPath ? path.resolve(flowsPath) : null,\n support: supportPaths.map((inputPath) => path.resolve(inputPath)),\n external_flow_refs: externalFlowRefPaths.map((inputPath) => path.resolve(inputPath)),\n },\n counts: {\n support_rows: supportRows.length,\n flow_rows: flowRows.length,\n process_rows: processRows.length,\n external_flow_refs: externalFlowRefs.length,\n tasks: tasks.length,\n blockers: blockers.length,\n },\n hashes: {\n inputs: inputHashes,\n task_order: sha256(tasks.map((task) => task.task_id).join('\\n')),\n },\n files: {\n manifest: manifestPath,\n tasks: tasksPath,\n locks: locksPath,\n blockers: blockersPath,\n },\n tasks,\n blockers,\n };\n\n writeJson(manifestPath, report);\n writeText(tasksPath, jsonLines(tasks));\n writeJson(locksPath, locks);\n writeText(blockersPath, jsonLines(blockers));\n return report;\n}\n\nexport async function runDatasetCurationQueueNext(\n options: RunDatasetCurationQueueNextOptions,\n): Promise<DatasetCurationQueueNextReport> {\n const queue = readQueueRuntime(options.queueDir);\n const scope = normalizeQueueScope(options);\n const taskStates = buildTaskStates(queue.tasks).filter((state) => taskMatchesScope(state, scope));\n const scopedTasks = queue.tasks.filter((task) => taskMatchesScope(task, scope));\n const stateByTaskId = new Map(taskStates.map((state) => [state.task_id, state]));\n const runnable = scopedTasks.filter(\n (task) => stateByTaskId.get(task.task_id)?.status === 'pending',\n );\n const counts = countTaskStates(taskStates);\n const status =\n queue.blockers.length > 0 ||\n (taskStates.length > 0 && runnable.length === 0 && counts.complete < taskStates.length)\n ? 'blocked'\n : counts.complete === taskStates.length\n ? 'complete'\n : 'ready';\n const nextTask = status === 'ready' && runnable[0] ? withQueueAction(runnable[0]) : null;\n return {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n status,\n queue_dir: queue.queueDir,\n scope,\n counts: {\n ...counts,\n runnable: runnable.length,\n },\n next_task: nextTask,\n task_states: taskStates,\n blockers: queue.blockers,\n };\n}\n\nexport async function runDatasetCurationQueueVerify(\n options: RunDatasetCurationQueueVerifyOptions,\n): Promise<DatasetCurationQueueVerifyReport> {\n const queue = readQueueRuntime(options.queueDir);\n const scope = normalizeQueueScope(options);\n const taskStates = buildTaskStates(queue.tasks).filter((state) => taskMatchesScope(state, scope));\n const counts = countTaskStates(taskStates);\n return {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n status:\n queue.blockers.length === 0 && counts.complete === taskStates.length ? 'passed' : 'blocked',\n queue_dir: queue.queueDir,\n scope,\n counts,\n task_states: taskStates,\n blockers: queue.blockers,\n };\n}\n\nfunction readQueueRuntime(queueDirInput: string): {\n queueDir: string;\n tasks: DatasetCurationQueueTask[];\n blockers: DatasetCurationQueueBlocker[];\n} {\n const queueDir = requireExistingPath(queueDirInput, '--queue-dir');\n const outputsDir = path.join(queueDir, 'outputs');\n const tasksPath = path.join(outputsDir, 'curation-queue-tasks.jsonl');\n const blockersPath = path.join(outputsDir, 'curation-queue-blockers.jsonl');\n if (!existsSync(tasksPath)) {\n throw new CliError(`curation queue tasks file does not exist: ${tasksPath}`, {\n code: 'CURATION_QUEUE_TASKS_NOT_FOUND',\n exitCode: 2,\n });\n }\n if (!existsSync(blockersPath)) {\n throw new CliError(`curation queue blockers file does not exist: ${blockersPath}`, {\n code: 'CURATION_QUEUE_BLOCKERS_NOT_FOUND',\n exitCode: 2,\n });\n }\n return {\n queueDir: path.resolve(queueDir),\n tasks: readJsonlFile(tasksPath).map((value, index) => parseQueueTask(value, tasksPath, index)),\n blockers: readJsonlFile(blockersPath).map((value, index) =>\n parseQueueBlocker(value, blockersPath, index),\n ),\n };\n}\n\nfunction normalizeQueueScope(options: {\n entityType?: DatasetCurationQueueEntityType;\n taskId?: string;\n}): { entity_type: DatasetCurationQueueEntityType | null; task_id: string | null } {\n return {\n entity_type: options.entityType ?? null,\n task_id: options.taskId?.trim() || null,\n };\n}\n\nfunction buildTaskStates(tasks: DatasetCurationQueueTask[]): DatasetCurationQueueTaskState[] {\n const completeTaskIds = new Set(\n tasks\n .filter((task) => isCompleteCheckpointStatus(readCheckpointStatus(task.checkpoint_file)))\n .map((task) => task.task_id),\n );\n return tasks.map((task) => {\n const checkpointStatus = readCheckpointStatus(task.checkpoint_file);\n const incompleteDependencies = task.depends_on.filter((taskId) => !completeTaskIds.has(taskId));\n const status = taskRuntimeStatus(checkpointStatus, incompleteDependencies);\n return {\n task_id: task.task_id,\n entity_type: task.entity_type,\n entity_id: task.entity_id,\n version: task.version,\n status,\n checkpoint_status: checkpointStatus,\n checkpoint_file: task.checkpoint_file,\n depends_on: task.depends_on,\n incomplete_dependencies: incompleteDependencies,\n reason:\n status === 'waiting_dependencies'\n ? 'dependency checkpoints are not complete'\n : status === 'blocked'\n ? 'checkpoint status is blocked or failed'\n : null,\n };\n });\n}\n\nfunction taskRuntimeStatus(\n checkpointStatus: string | null,\n incompleteDependencies: string[],\n): DatasetCurationQueueTaskRuntimeStatus {\n if (isCompleteCheckpointStatus(checkpointStatus)) {\n return 'complete';\n }\n if (checkpointStatus === 'blocked' || checkpointStatus === 'failed') {\n return 'blocked';\n }\n if (incompleteDependencies.length > 0) {\n return 'waiting_dependencies';\n }\n return 'pending';\n}\n\nfunction isCompleteCheckpointStatus(status: string | null): boolean {\n return (\n status === 'passed' || status === 'complete' || status === 'completed' || status === 'waived'\n );\n}\n\nfunction readCheckpointStatus(checkpointFile: string): string | null {\n const resolvedPath = path.resolve(checkpointFile);\n if (!existsSync(resolvedPath)) {\n return null;\n }\n try {\n const value = JSON.parse(readFileSync(resolvedPath, 'utf8')) as unknown;\n if (!isRecord(value)) {\n return 'blocked';\n }\n const status = firstNonEmpty(value.status, value.state);\n return status ? status.toLowerCase() : 'blocked';\n } catch {\n return 'blocked';\n }\n}\n\nfunction taskMatchesScope(\n task: Pick<DatasetCurationQueueTask, 'entity_type' | 'task_id'>,\n scope: { entity_type: DatasetCurationQueueEntityType | null; task_id: string | null },\n): boolean {\n if (scope.entity_type && task.entity_type !== scope.entity_type) {\n return false;\n }\n if (scope.task_id && task.task_id !== scope.task_id) {\n return false;\n }\n return true;\n}\n\nfunction countTaskStates(taskStates: DatasetCurationQueueTaskState[]): {\n total: number;\n complete: number;\n pending: number;\n waiting_dependencies: number;\n blocked: number;\n} {\n return {\n total: taskStates.length,\n complete: taskStates.filter((state) => state.status === 'complete').length,\n pending: taskStates.filter((state) => state.status === 'pending').length,\n waiting_dependencies: taskStates.filter((state) => state.status === 'waiting_dependencies')\n .length,\n blocked: taskStates.filter((state) => state.status === 'blocked').length,\n };\n}\n\nfunction withQueueAction(task: DatasetCurationQueueTask): DatasetCurationQueueTask & {\n action: {\n kind: 'entity_curation_task';\n input_artifact: string;\n output_artifacts: string[];\n };\n} {\n return {\n ...task,\n action: {\n kind: 'entity_curation_task',\n input_artifact: task.input_rows_file,\n output_artifacts: [task.checkpoint_file],\n },\n };\n}\n\nfunction readJsonlFile(inputPath: string): unknown[] {\n const text = readFileSync(inputPath, 'utf8').trim();\n if (!text) {\n return [];\n }\n return text.split(/\\r?\\n/u).map((line, index) => {\n try {\n return JSON.parse(line) as unknown;\n } catch (error) {\n throw new CliError(`Invalid JSONL in ${inputPath} at line ${index + 1}: ${String(error)}`, {\n code: 'CURATION_QUEUE_JSONL_INVALID',\n exitCode: 2,\n });\n }\n });\n}\n\nfunction parseQueueTask(\n value: unknown,\n inputPath: string,\n index: number,\n): DatasetCurationQueueTask {\n if (!isRecord(value)) {\n throw new CliError(`Invalid queue task in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_TASK_INVALID',\n exitCode: 2,\n });\n }\n const entityType = value.entity_type;\n if (entityType !== 'support' && entityType !== 'flow' && entityType !== 'process') {\n throw new CliError(`Invalid queue task entity_type in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_TASK_INVALID',\n exitCode: 2,\n });\n }\n return {\n schema_version: 1,\n entity_type: entityType,\n task_id: requireString(value.task_id, inputPath, index, 'task_id'),\n entity_id: requireString(value.entity_id, inputPath, index, 'entity_id'),\n version: requireString(value.version, inputPath, index, 'version'),\n lock_key: requireString(value.lock_key, inputPath, index, 'lock_key'),\n depends_on: Array.isArray(value.depends_on)\n ? value.depends_on.filter((item): item is string => typeof item === 'string')\n : [],\n input_rows_file: requireString(value.input_rows_file, inputPath, index, 'input_rows_file'),\n work_dir: requireString(value.work_dir, inputPath, index, 'work_dir'),\n checkpoint_file: requireString(value.checkpoint_file, inputPath, index, 'checkpoint_file'),\n run_plan_file: requireString(value.run_plan_file, inputPath, index, 'run_plan_file'),\n closure_file: requireString(value.closure_file, inputPath, index, 'closure_file'),\n };\n}\n\nfunction parseQueueBlocker(\n value: unknown,\n inputPath: string,\n index: number,\n): DatasetCurationQueueBlocker {\n if (!isRecord(value)) {\n throw new CliError(`Invalid queue blocker in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_BLOCKER_INVALID',\n exitCode: 2,\n });\n }\n const entityType = value.entity_type;\n if (entityType !== 'support' && entityType !== 'flow' && entityType !== 'process') {\n throw new CliError(`Invalid queue blocker entity_type in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_BLOCKER_INVALID',\n exitCode: 2,\n });\n }\n return {\n schema_version: 1,\n code: requireString(value.code, inputPath, index, 'code'),\n severity: 'blocker',\n entity_type: entityType,\n entity_id: typeof value.entity_id === 'string' ? value.entity_id : null,\n version: typeof value.version === 'string' ? value.version : null,\n message: requireString(value.message, inputPath, index, 'message'),\n details: value.details,\n };\n}\n\nfunction requireString(value: unknown, inputPath: string, index: number, field: string): string {\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n throw new CliError(`Invalid or missing ${field} in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_TASK_INVALID',\n exitCode: 2,\n });\n}\n\nfunction readQueueRows(inputPath: string, entityType: DatasetCurationQueueEntityType): QueueRow[] {\n const rows = materializeDatasetRows(inputPath);\n return rows.map((row) => queueRowFromDatasetRow(inputPath, entityType, row));\n}\n\nfunction queueRowFromDatasetRow(\n inputPath: string,\n entityType: DatasetCurationQueueEntityType,\n row: DatasetRowInput,\n): QueueRow {\n const tidasIdentity = genericTidasDatasetIdentity(row.payload);\n const id = firstNonEmpty(row.id, row.row.id, row.row.dataset_id, row.row.uuid, tidasIdentity.id);\n if (!id) {\n throw new CliError(\n `${entityType} row is missing a stable id in ${inputPath} at index ${row.index}.`,\n {\n code: 'CURATION_QUEUE_ROW_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return {\n entityType,\n sourcePath: inputPath,\n sourceIndex: row.index,\n row: row.row,\n payload: row.payload,\n id,\n version: firstNonEmpty(row.version, row.row.version, tidasIdentity.version) ?? DEFAULT_VERSION,\n };\n}\n\nfunction genericTidasDatasetIdentity(payload: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = genericTidasDatasetRoot(payload);\n const information = Object.values(root).find(\n (value) => isRecord(value) && isRecord(value.dataSetInformation),\n );\n const dataSetInformation =\n isRecord(information) && isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction genericTidasDatasetRoot(payload: JsonObject): JsonObject {\n const datasetRoots: JsonObject[] = [];\n for (const [key, value] of Object.entries(payload)) {\n if (key.endsWith('DataSet') && isRecord(value)) {\n datasetRoots.push(value);\n }\n }\n return datasetRoots.length === 1 ? datasetRoots[0] : payload;\n}\n\nfunction buildTask(outDir: string, row: QueueRow, dependsOn: string[]): DatasetCurationQueueTask {\n const taskId = taskIdFor(row.entityType, row.id, row.version);\n const workDir = path.join(\n outDir,\n 'entities',\n entityDirPlural(row.entityType),\n entityDirName(row.id, row.version),\n );\n return {\n schema_version: 1,\n entity_type: row.entityType,\n task_id: taskId,\n entity_id: row.id,\n version: row.version,\n lock_key: taskId,\n depends_on: dependsOn,\n input_rows_file: path.join(workDir, 'input.jsonl'),\n work_dir: workDir,\n checkpoint_file: path.join(workDir, 'checkpoint.json'),\n run_plan_file: path.join(workDir, 'entity-run-plan.json'),\n closure_file: path.join(workDir, 'closure.json'),\n };\n}\n\nfunction writeEntityArtifacts(options: {\n row: QueueRow;\n task: DatasetCurationQueueTask;\n flowRefs: FlowRef[];\n deferredFlowRefs: DeferredFlowRef[];\n externalFlowIds: Set<string>;\n flowRowsById: Map<string, QueueRow>;\n}): void {\n mkdirSync(path.join(options.task.work_dir, 'checkpoints'), { recursive: true });\n writeText(options.task.input_rows_file, jsonLines([options.row.row]));\n writeJson(options.task.closure_file, {\n schema_version: 1,\n entity_type: options.row.entityType,\n entity_id: options.row.id,\n version: options.row.version,\n source: {\n file: path.resolve(options.row.sourcePath),\n index: options.row.sourceIndex,\n },\n dependencies: buildDependencyClosure(options),\n });\n writeJson(options.task.run_plan_file, buildRunPlan(options.task));\n}\n\nfunction buildDependencyClosure(options: {\n row: QueueRow;\n task: DatasetCurationQueueTask;\n flowRefs: FlowRef[];\n deferredFlowRefs: DeferredFlowRef[];\n externalFlowIds: Set<string>;\n flowRowsById: Map<string, QueueRow>;\n}): unknown {\n if (options.row.entityType !== 'process') {\n return {\n local_tasks: [],\n external_refs: [],\n deferred_refs: [],\n unresolved_refs: [],\n };\n }\n const deferredRefKeys = deferredProcessFlowRefKeys(options.deferredFlowRefs);\n return {\n local_tasks: options.flowRefs\n .map((ref) => ({ ref, row: options.flowRowsById.get(ref.id) }))\n .filter((item): item is { ref: FlowRef; row: QueueRow } => Boolean(item.row))\n .map(({ ref, row }) => ({\n entity_type: 'flow',\n entity_id: ref.id,\n version: row.version,\n task_id: taskIdFor('flow', ref.id, row.version),\n ref_path: ref.path,\n })),\n external_refs: options.flowRefs\n .filter((ref) => !options.flowRowsById.has(ref.id) && options.externalFlowIds.has(ref.id))\n .map((ref) => ({\n entity_type: 'flow',\n entity_id: ref.id,\n version: ref.version,\n ref_path: ref.path,\n })),\n deferred_refs: options.flowRefs\n .filter(\n (ref) =>\n !options.flowRowsById.has(ref.id) &&\n !options.externalFlowIds.has(ref.id) &&\n deferredRefKeys.has(flowRefKey(ref)),\n )\n .map((ref) => {\n const deferredRef = deferredRefKeys.get(flowRefKey(ref))!;\n return {\n entity_type: 'flow',\n entity_id: ref.id,\n version: ref.version,\n ref_path: ref.path,\n action_item_code: deferredRef.actionItemCode,\n reason: deferredRef.reason ?? null,\n };\n }),\n unresolved_refs: options.flowRefs\n .filter(\n (ref) =>\n !options.flowRowsById.has(ref.id) &&\n !options.externalFlowIds.has(ref.id) &&\n !deferredRefKeys.has(flowRefKey(ref)),\n )\n .map((ref) => ({\n entity_type: 'flow',\n entity_id: ref.id,\n version: ref.version,\n ref_path: ref.path,\n })),\n };\n}\n\nfunction buildRunPlan(task: DatasetCurationQueueTask): unknown {\n const stagesByType: Record<DatasetCurationQueueEntityType, string[]> = {\n support: ['identity', 'schema', 'qa_or_profile', 'checkpoint'],\n flow: ['identity', 'name_plan', 'schema', 'qa', 'checkpoint'],\n process: [\n 'dependency_closure',\n 'reference_refresh',\n 'required_fields',\n 'schema',\n 'qa',\n 'curation',\n 'remote_dry_run',\n 'readback',\n ],\n };\n return {\n schema_version: 1,\n task_id: task.task_id,\n entity_type: task.entity_type,\n entity_id: task.entity_id,\n version: task.version,\n input_rows_file: task.input_rows_file,\n checkpoint_file: task.checkpoint_file,\n stages: stagesByType[task.entity_type].map((stage) => ({\n id: stage,\n status: 'pending',\n checkpoint_file: path.join(task.work_dir, 'checkpoints', `${stage}.json`),\n })),\n ai_authoring_policy: {\n output_only: 'structured_patch_or_build_plan',\n deterministic_apply_required: true,\n remote_write_allowed: false,\n },\n };\n}\n\nfunction extractDeferredProcessFlowRefs(payload: unknown): DeferredFlowRef[] {\n const refs = new Map<string, DeferredFlowRef>();\n scanForDeferredProcessFlowRefs(payload, refs);\n return [...refs.values()].sort((a, b) =>\n `${a.id}@${a.version ?? ''}@${a.path}`.localeCompare(`${b.id}@${b.version ?? ''}@${b.path}`),\n );\n}\n\nfunction scanForDeferredProcessFlowRefs(value: unknown, refs: Map<string, DeferredFlowRef>): void {\n if (Array.isArray(value)) {\n value.forEach((item) => scanForDeferredProcessFlowRefs(item, refs));\n return;\n }\n if (!isRecord(value)) {\n return;\n }\n\n const traces = asList(value['tiangongfoundry:unresolvedTrace']);\n for (const trace of traces) {\n if (!isRecord(trace)) {\n continue;\n }\n const actionItemCode = firstNonEmpty(trace.action_item_code, trace.actionItemCode);\n if (actionItemCode !== 'elementary_flow_identity_manual_review') {\n continue;\n }\n const id = firstNonEmpty(trace.reference_id, trace.referenceId, trace.ref_object_id);\n const pathValue = firstNonEmpty(trace.blocked_path, trace.blockedPath, trace.path);\n if (!id || !pathValue) {\n continue;\n }\n const version = firstNonEmpty(trace.reference_version, trace.referenceVersion, trace.version);\n const ref = {\n id,\n version,\n path: normalizeReferencePath(pathValue),\n actionItemCode,\n reason: firstNonEmpty(trace.reason),\n };\n refs.set(flowRefKey(ref), ref);\n }\n\n for (const nested of Object.values(value)) {\n scanForDeferredProcessFlowRefs(nested, refs);\n }\n}\n\nfunction deferredProcessFlowRefKeys(refs: DeferredFlowRef[]): Map<string, DeferredFlowRef> {\n const keys = new Map<string, DeferredFlowRef>();\n for (const ref of refs) {\n keys.set(flowRefKey(ref), ref);\n }\n return keys;\n}\n\nfunction flowRefKey(ref: FlowRef): string {\n return `${ref.id}@${ref.version ?? ''}@${normalizeReferencePath(ref.path)}`;\n}\n\nfunction normalizeReferencePath(value: string): string {\n return value\n .replace(/^\\/+/u, '')\n .replace(/\\/+/gu, '.')\n .replace(/^\\.+|\\.+$/gu, '');\n}\n\nfunction isFoundryTracePathParts(pathParts: string[]): boolean {\n return (\n pathParts.includes('common:other') &&\n pathParts.some(\n (part) => part.startsWith('tiangongfoundry:') && part.toLowerCase().includes('trace'),\n )\n );\n}\n\nfunction extractProcessFlowRefs(payload: unknown): FlowRef[] {\n const refs = new Map<string, FlowRef>();\n scanForFlowRefs(payload, [], refs);\n return [...refs.values()].sort((a, b) =>\n `${a.id}@${a.version ?? ''}`.localeCompare(`${b.id}@${b.version ?? ''}`),\n );\n}\n\nfunction scanForFlowRefs(value: unknown, pathParts: string[], refs: Map<string, FlowRef>): void {\n if (isFoundryTracePathParts(pathParts)) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => scanForFlowRefs(item, [...pathParts, String(index)], refs));\n return;\n }\n if (!isRecord(value)) {\n return;\n }\n\n const keyPath = pathParts.join('.');\n const keyHint = keyPath.toLowerCase();\n const looksLikeFlowRef =\n keyHint.includes('referencetoflowdataset') ||\n keyHint.includes('reference_to_flow_dataset') ||\n keyHint.includes('flowdataset') ||\n keyHint.includes('flow_dataset');\n if (looksLikeFlowRef) {\n const id = firstNonEmpty(\n value['@refObjectId'],\n value.refObjectId,\n value.ref_object_id,\n value.id,\n value.uuid,\n value['common:UUID'],\n );\n if (id) {\n const version = firstNonEmpty(\n value['@version'],\n value.version,\n value.dataSetVersion,\n value['common:dataSetVersion'],\n );\n refs.set(`${id}@${version ?? ''}@${keyPath}`, {\n id,\n version,\n path: keyPath,\n });\n }\n }\n\n for (const [key, nested] of Object.entries(value)) {\n scanForFlowRefs(nested, [...pathParts, key], refs);\n }\n}\n\nfunction readExternalFlowRefs(inputPath: string): FlowRef[] {\n const rows = materializeDatasetRows(inputPath);\n return rows.map((row) => {\n const id = firstNonEmpty(row.id, row.row.id, row.row.dataset_id, row.row.uuid);\n if (!id) {\n throw new CliError(`External flow ref is missing id in ${inputPath} at index ${row.index}.`, {\n code: 'CURATION_QUEUE_EXTERNAL_FLOW_REF_ID_MISSING',\n exitCode: 2,\n });\n }\n return {\n id,\n version: firstNonEmpty(row.version, row.row.version) ?? null,\n path: `${inputPath}#${row.index}`,\n };\n });\n}\n\nfunction asList(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction normalizeProcessLimit(value: number | undefined): number | null {\n if (value === undefined) {\n return null;\n }\n if (!Number.isInteger(value) || value < 1) {\n throw new CliError('--process-limit must be a positive integer.', {\n code: 'CURATION_QUEUE_PROCESS_LIMIT_INVALID',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction requirePath(value: string | undefined, flag: string): string {\n const trimmed = value?.trim();\n if (!trimmed) {\n throw new CliError(`${flag} is required.`, {\n code: 'CURATION_QUEUE_REQUIRED_FLAG_MISSING',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nfunction requireExistingPath(value: string | undefined, flag: string): string {\n const inputPath = requirePath(value, flag);\n if (!existsSync(inputPath)) {\n throw new CliError(`${flag} file does not exist: ${inputPath}`, {\n code: 'CURATION_QUEUE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n return inputPath;\n}\n\nfunction entityDirPlural(entityType: DatasetCurationQueueEntityType): string {\n return entityType === 'process' ? 'processes' : entityType === 'flow' ? 'flows' : 'supports';\n}\n\nfunction entityDirName(id: string, version: string): string {\n return `${sanitizePathToken(id)}__${sanitizePathToken(version)}`;\n}\n\nfunction taskIdFor(\n entityType: DatasetCurationQueueEntityType,\n id: string,\n version: string,\n): string {\n return `${entityType}:${id}@${version}`;\n}\n\nfunction sanitizePathToken(value: string): string {\n return value.replace(/[^A-Za-z0-9._-]+/gu, '_').replace(/^_+|_+$/gu, '') || 'unknown';\n}\n\nfunction buildInputHashes(inputPaths: string[]): Record<string, string> {\n const hashes: Record<string, string> = {};\n for (const inputPath of inputPaths) {\n hashes[path.resolve(inputPath)] = sha256(readFileSync(inputPath));\n }\n return hashes;\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nfunction writeJson(filePath: string, value: unknown): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\\n`, 'utf8');\n}\n\nfunction writeText(filePath: string, value: string): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n writeFileSync(filePath, value, 'utf8');\n}\n\nfunction jsonLines(rows: unknown[]): string {\n return rows.map((row) => JSON.stringify(row)).join('\\n') + (rows.length > 0 ? '\\n' : '');\n}\n\nexport const __testInternals = {\n buildTaskStates,\n countTaskStates,\n entityDirName,\n entityDirPlural,\n extractDeferredProcessFlowRefs,\n extractProcessFlowRefs,\n jsonLines,\n normalizeReferencePath,\n normalizeProcessLimit,\n normalizeQueueScope,\n parseQueueBlocker,\n parseQueueTask,\n readCheckpointStatus,\n readJsonlFile,\n readQueueRuntime,\n requireExistingPath,\n requirePath,\n sanitizePathToken,\n taskIdFor,\n taskMatchesScope,\n taskRuntimeStatus,\n withQueueAction,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"dataset-curation-queue.js","sourceRoot":"","sources":["../../../src/lib/dataset-curation-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport path from 'node:path';\nimport { CliError } from './errors.js';\nimport {\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nexport type DatasetCurationQueueEntityType = 'support' | 'flow' | 'process';\n\nexport type RunDatasetCurationQueueBuildOptions = {\n processesPath: string;\n flowsPath?: string;\n supportPaths?: string[];\n externalFlowRefPaths?: string[];\n outDir: string;\n excludeProcessIds?: string[];\n processLimit?: number;\n};\n\nexport type RunDatasetCurationQueueNextOptions = {\n queueDir: string;\n entityType?: DatasetCurationQueueEntityType;\n taskId?: string;\n};\n\nexport type RunDatasetCurationQueueVerifyOptions = {\n queueDir: string;\n entityType?: DatasetCurationQueueEntityType;\n taskId?: string;\n};\n\nexport type DatasetCurationQueueTask = {\n schema_version: 1;\n entity_type: DatasetCurationQueueEntityType;\n task_id: string;\n entity_id: string;\n version: string;\n lock_key: string;\n depends_on: string[];\n input_rows_file: string;\n work_dir: string;\n checkpoint_file: string;\n run_plan_file: string;\n closure_file: string;\n};\n\ntype DatasetCurationQueueBlocker = {\n schema_version: 1;\n code: string;\n severity: 'blocker';\n entity_type: DatasetCurationQueueEntityType;\n entity_id: string | null;\n version: string | null;\n message: string;\n details?: unknown;\n};\n\nexport type DatasetCurationQueueBuildReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'ready' | 'blocked';\n out_dir: string;\n inputs: {\n processes: string;\n flows: string | null;\n support: string[];\n external_flow_refs: string[];\n };\n counts: {\n support_rows: number;\n flow_rows: number;\n process_rows: number;\n external_flow_refs: number;\n tasks: number;\n blockers: number;\n };\n hashes: {\n inputs: Record<string, string>;\n task_order: string;\n };\n files: {\n manifest: string;\n tasks: string;\n locks: string;\n blockers: string;\n };\n tasks: DatasetCurationQueueTask[];\n blockers: DatasetCurationQueueBlocker[];\n};\n\nexport type DatasetCurationQueueTaskRuntimeStatus =\n 'complete' | 'pending' | 'waiting_dependencies' | 'blocked';\n\nexport type DatasetCurationQueueTaskState = {\n task_id: string;\n entity_type: DatasetCurationQueueEntityType;\n entity_id: string;\n version: string;\n status: DatasetCurationQueueTaskRuntimeStatus;\n checkpoint_status: string | null;\n checkpoint_file: string;\n depends_on: string[];\n incomplete_dependencies: string[];\n reason: string | null;\n};\n\nexport type DatasetCurationQueueNextReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'ready' | 'complete' | 'blocked';\n queue_dir: string;\n scope: {\n entity_type: DatasetCurationQueueEntityType | null;\n task_id: string | null;\n };\n counts: {\n total: number;\n complete: number;\n pending: number;\n waiting_dependencies: number;\n blocked: number;\n runnable: number;\n };\n next_task:\n | (DatasetCurationQueueTask & {\n action: {\n kind: 'entity_curation_task';\n input_artifact: string;\n output_artifacts: string[];\n };\n })\n | null;\n task_states: DatasetCurationQueueTaskState[];\n blockers: DatasetCurationQueueBlocker[];\n};\n\nexport type DatasetCurationQueueVerifyReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed' | 'blocked';\n queue_dir: string;\n scope: {\n entity_type: DatasetCurationQueueEntityType | null;\n task_id: string | null;\n };\n counts: {\n total: number;\n complete: number;\n pending: number;\n waiting_dependencies: number;\n blocked: number;\n };\n task_states: DatasetCurationQueueTaskState[];\n blockers: DatasetCurationQueueBlocker[];\n};\n\ntype QueueRow = {\n entityType: DatasetCurationQueueEntityType;\n sourcePath: string;\n sourceIndex: number;\n row: JsonObject;\n payload: JsonObject;\n id: string;\n version: string;\n};\n\ntype FlowRef = {\n id: string;\n version: string | null;\n path: string;\n};\n\ntype DeferredFlowRef = FlowRef & {\n actionItemCode: string | null;\n reason: string | null;\n};\n\nconst DEFAULT_VERSION = 'unversioned';\n\nexport async function runDatasetCurationQueueBuild(\n options: RunDatasetCurationQueueBuildOptions,\n): Promise<DatasetCurationQueueBuildReport> {\n const outDir = requirePath(options.outDir, '--out-dir');\n const processesPath = requireExistingPath(options.processesPath, '--processes');\n const flowsPath = options.flowsPath ? requireExistingPath(options.flowsPath, '--flows') : null;\n const supportPaths = (options.supportPaths ?? []).map((inputPath) =>\n requireExistingPath(inputPath, '--support'),\n );\n const externalFlowRefPaths = (options.externalFlowRefPaths ?? []).map((inputPath) =>\n requireExistingPath(inputPath, '--external-flow-ref'),\n );\n const processLimit = normalizeProcessLimit(options.processLimit);\n const excludedProcessIds = new Set((options.excludeProcessIds ?? []).map((id) => id.trim()));\n\n const supportRows = supportPaths.flatMap((inputPath) => readQueueRows(inputPath, 'support'));\n const flowRows = flowsPath ? readQueueRows(flowsPath, 'flow') : [];\n const processRows = readQueueRows(processesPath, 'process')\n .filter((row) => !excludedProcessIds.has(row.id))\n .slice(0, processLimit ?? undefined);\n const externalFlowRefs = externalFlowRefPaths.flatMap((inputPath) =>\n readExternalFlowRefs(inputPath),\n );\n\n mkdirSync(outDir, { recursive: true });\n\n const localFlowTasks = new Map<string, string>();\n const flowRowsById = new Map<string, QueueRow>();\n for (const row of flowRows) {\n const taskId = taskIdFor(row.entityType, row.id, row.version);\n localFlowTasks.set(row.id, taskId);\n flowRowsById.set(row.id, row);\n }\n\n const externalFlowIds = new Set(externalFlowRefs.map((ref) => ref.id));\n const blockers: DatasetCurationQueueBlocker[] = [];\n const supportTasks = supportRows.map((row) => buildTask(outDir, row, []));\n const flowTasks = flowRows.map((row) => buildTask(outDir, row, []));\n const processTasks = processRows.map((row) => {\n const refs = extractProcessFlowRefs(row.payload);\n const deferredRefs = extractDeferredProcessFlowRefs(row.payload);\n const deferredRefKeys = deferredProcessFlowRefKeys(deferredRefs);\n const dependsOn = new Set<string>();\n const missingRefs: FlowRef[] = [];\n for (const ref of refs) {\n const taskId = localFlowTasks.get(ref.id);\n if (taskId) {\n dependsOn.add(taskId);\n } else if (!externalFlowIds.has(ref.id) && !deferredRefKeys.has(flowRefKey(ref))) {\n missingRefs.push(ref);\n }\n }\n if (missingRefs.length > 0) {\n blockers.push({\n schema_version: 1,\n code: 'process_flow_reference_unresolved',\n severity: 'blocker',\n entity_type: 'process',\n entity_id: row.id,\n version: row.version,\n message:\n 'Process references flows that are neither present in local flow rows nor declared as external flow refs.',\n details: { missing_flow_refs: missingRefs },\n });\n }\n return buildTask(outDir, row, [...dependsOn].sort());\n });\n const tasks = [...supportTasks, ...flowTasks, ...processTasks];\n const taskRows = [\n ...supportRows.map((row, index) => ({ row, task: supportTasks[index] })),\n ...flowRows.map((row, index) => ({ row, task: flowTasks[index] })),\n ...processRows.map((row, index) => ({ row, task: processTasks[index] })),\n ];\n\n for (const { row, task } of taskRows) {\n writeEntityArtifacts({\n row,\n task,\n flowRefs: row.entityType === 'process' ? extractProcessFlowRefs(row.payload) : [],\n deferredFlowRefs:\n row.entityType === 'process' ? extractDeferredProcessFlowRefs(row.payload) : [],\n externalFlowIds,\n flowRowsById,\n });\n }\n\n const outputsDir = path.join(outDir, 'outputs');\n mkdirSync(outputsDir, { recursive: true });\n const manifestPath = path.join(outputsDir, 'curation-queue-manifest.json');\n const tasksPath = path.join(outputsDir, 'curation-queue-tasks.jsonl');\n const locksPath = path.join(outputsDir, 'curation-queue-locks.json');\n const blockersPath = path.join(outputsDir, 'curation-queue-blockers.jsonl');\n const inputHashes = buildInputHashes([\n processesPath,\n ...(flowsPath ? [flowsPath] : []),\n ...supportPaths,\n ...externalFlowRefPaths,\n ]);\n const locks = {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n locks: tasks.map((task) => ({\n lock_key: task.lock_key,\n task_id: task.task_id,\n entity_type: task.entity_type,\n entity_id: task.entity_id,\n version: task.version,\n status: 'available',\n })),\n };\n const report: DatasetCurationQueueBuildReport = {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n status: blockers.length > 0 ? 'blocked' : 'ready',\n out_dir: path.resolve(outDir),\n inputs: {\n processes: path.resolve(processesPath),\n flows: flowsPath ? path.resolve(flowsPath) : null,\n support: supportPaths.map((inputPath) => path.resolve(inputPath)),\n external_flow_refs: externalFlowRefPaths.map((inputPath) => path.resolve(inputPath)),\n },\n counts: {\n support_rows: supportRows.length,\n flow_rows: flowRows.length,\n process_rows: processRows.length,\n external_flow_refs: externalFlowRefs.length,\n tasks: tasks.length,\n blockers: blockers.length,\n },\n hashes: {\n inputs: inputHashes,\n task_order: sha256(tasks.map((task) => task.task_id).join('\\n')),\n },\n files: {\n manifest: manifestPath,\n tasks: tasksPath,\n locks: locksPath,\n blockers: blockersPath,\n },\n tasks,\n blockers,\n };\n\n writeJson(manifestPath, report);\n writeText(tasksPath, jsonLines(tasks));\n writeJson(locksPath, locks);\n writeText(blockersPath, jsonLines(blockers));\n return report;\n}\n\nexport async function runDatasetCurationQueueNext(\n options: RunDatasetCurationQueueNextOptions,\n): Promise<DatasetCurationQueueNextReport> {\n const queue = readQueueRuntime(options.queueDir);\n const scope = normalizeQueueScope(options);\n const taskStates = buildTaskStates(queue.tasks).filter((state) => taskMatchesScope(state, scope));\n const scopedTasks = queue.tasks.filter((task) => taskMatchesScope(task, scope));\n const stateByTaskId = new Map(taskStates.map((state) => [state.task_id, state]));\n const runnable = scopedTasks.filter(\n (task) => stateByTaskId.get(task.task_id)?.status === 'pending',\n );\n const counts = countTaskStates(taskStates);\n const status =\n queue.blockers.length > 0 ||\n (taskStates.length > 0 && runnable.length === 0 && counts.complete < taskStates.length)\n ? 'blocked'\n : counts.complete === taskStates.length\n ? 'complete'\n : 'ready';\n const nextTask = status === 'ready' && runnable[0] ? withQueueAction(runnable[0]) : null;\n return {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n status,\n queue_dir: queue.queueDir,\n scope,\n counts: {\n ...counts,\n runnable: runnable.length,\n },\n next_task: nextTask,\n task_states: taskStates,\n blockers: queue.blockers,\n };\n}\n\nexport async function runDatasetCurationQueueVerify(\n options: RunDatasetCurationQueueVerifyOptions,\n): Promise<DatasetCurationQueueVerifyReport> {\n const queue = readQueueRuntime(options.queueDir);\n const scope = normalizeQueueScope(options);\n const taskStates = buildTaskStates(queue.tasks).filter((state) => taskMatchesScope(state, scope));\n const counts = countTaskStates(taskStates);\n return {\n schema_version: 1,\n generated_at_utc: new Date().toISOString(),\n status:\n queue.blockers.length === 0 && counts.complete === taskStates.length ? 'passed' : 'blocked',\n queue_dir: queue.queueDir,\n scope,\n counts,\n task_states: taskStates,\n blockers: queue.blockers,\n };\n}\n\nfunction readQueueRuntime(queueDirInput: string): {\n queueDir: string;\n tasks: DatasetCurationQueueTask[];\n blockers: DatasetCurationQueueBlocker[];\n} {\n const queueDir = requireExistingPath(queueDirInput, '--queue-dir');\n const outputsDir = path.join(queueDir, 'outputs');\n const tasksPath = path.join(outputsDir, 'curation-queue-tasks.jsonl');\n const blockersPath = path.join(outputsDir, 'curation-queue-blockers.jsonl');\n if (!existsSync(tasksPath)) {\n throw new CliError(`curation queue tasks file does not exist: ${tasksPath}`, {\n code: 'CURATION_QUEUE_TASKS_NOT_FOUND',\n exitCode: 2,\n });\n }\n if (!existsSync(blockersPath)) {\n throw new CliError(`curation queue blockers file does not exist: ${blockersPath}`, {\n code: 'CURATION_QUEUE_BLOCKERS_NOT_FOUND',\n exitCode: 2,\n });\n }\n return {\n queueDir: path.resolve(queueDir),\n tasks: readJsonlFile(tasksPath).map((value, index) => parseQueueTask(value, tasksPath, index)),\n blockers: readJsonlFile(blockersPath).map((value, index) =>\n parseQueueBlocker(value, blockersPath, index),\n ),\n };\n}\n\nfunction normalizeQueueScope(options: {\n entityType?: DatasetCurationQueueEntityType;\n taskId?: string;\n}): { entity_type: DatasetCurationQueueEntityType | null; task_id: string | null } {\n return {\n entity_type: options.entityType ?? null,\n task_id: options.taskId?.trim() || null,\n };\n}\n\nfunction buildTaskStates(tasks: DatasetCurationQueueTask[]): DatasetCurationQueueTaskState[] {\n const completeTaskIds = new Set(\n tasks\n .filter((task) => isCompleteCheckpointStatus(readCheckpointStatus(task.checkpoint_file)))\n .map((task) => task.task_id),\n );\n return tasks.map((task) => {\n const checkpointStatus = readCheckpointStatus(task.checkpoint_file);\n const incompleteDependencies = task.depends_on.filter((taskId) => !completeTaskIds.has(taskId));\n const status = taskRuntimeStatus(checkpointStatus, incompleteDependencies);\n return {\n task_id: task.task_id,\n entity_type: task.entity_type,\n entity_id: task.entity_id,\n version: task.version,\n status,\n checkpoint_status: checkpointStatus,\n checkpoint_file: task.checkpoint_file,\n depends_on: task.depends_on,\n incomplete_dependencies: incompleteDependencies,\n reason:\n status === 'waiting_dependencies'\n ? 'dependency checkpoints are not complete'\n : status === 'blocked'\n ? 'checkpoint status is blocked or failed'\n : null,\n };\n });\n}\n\nfunction taskRuntimeStatus(\n checkpointStatus: string | null,\n incompleteDependencies: string[],\n): DatasetCurationQueueTaskRuntimeStatus {\n if (isCompleteCheckpointStatus(checkpointStatus)) {\n return 'complete';\n }\n if (checkpointStatus === 'blocked' || checkpointStatus === 'failed') {\n return 'blocked';\n }\n if (incompleteDependencies.length > 0) {\n return 'waiting_dependencies';\n }\n return 'pending';\n}\n\nfunction isCompleteCheckpointStatus(status: string | null): boolean {\n return (\n status === 'passed' || status === 'complete' || status === 'completed' || status === 'waived'\n );\n}\n\nfunction readCheckpointStatus(checkpointFile: string): string | null {\n const resolvedPath = path.resolve(checkpointFile);\n if (!existsSync(resolvedPath)) {\n return null;\n }\n try {\n const value = JSON.parse(readFileSync(resolvedPath, 'utf8')) as unknown;\n if (!isRecord(value)) {\n return 'blocked';\n }\n const status = firstNonEmpty(value.status, value.state);\n return status ? status.toLowerCase() : 'blocked';\n } catch {\n return 'blocked';\n }\n}\n\nfunction taskMatchesScope(\n task: Pick<DatasetCurationQueueTask, 'entity_type' | 'task_id'>,\n scope: { entity_type: DatasetCurationQueueEntityType | null; task_id: string | null },\n): boolean {\n if (scope.entity_type && task.entity_type !== scope.entity_type) {\n return false;\n }\n if (scope.task_id && task.task_id !== scope.task_id) {\n return false;\n }\n return true;\n}\n\nfunction countTaskStates(taskStates: DatasetCurationQueueTaskState[]): {\n total: number;\n complete: number;\n pending: number;\n waiting_dependencies: number;\n blocked: number;\n} {\n return {\n total: taskStates.length,\n complete: taskStates.filter((state) => state.status === 'complete').length,\n pending: taskStates.filter((state) => state.status === 'pending').length,\n waiting_dependencies: taskStates.filter((state) => state.status === 'waiting_dependencies')\n .length,\n blocked: taskStates.filter((state) => state.status === 'blocked').length,\n };\n}\n\nfunction withQueueAction(task: DatasetCurationQueueTask): DatasetCurationQueueTask & {\n action: {\n kind: 'entity_curation_task';\n input_artifact: string;\n output_artifacts: string[];\n };\n} {\n return {\n ...task,\n action: {\n kind: 'entity_curation_task',\n input_artifact: task.input_rows_file,\n output_artifacts: [task.checkpoint_file],\n },\n };\n}\n\nfunction readJsonlFile(inputPath: string): unknown[] {\n const text = readFileSync(inputPath, 'utf8').trim();\n if (!text) {\n return [];\n }\n return text.split(/\\r?\\n/u).map((line, index) => {\n try {\n return JSON.parse(line) as unknown;\n } catch (error) {\n throw new CliError(`Invalid JSONL in ${inputPath} at line ${index + 1}: ${String(error)}`, {\n code: 'CURATION_QUEUE_JSONL_INVALID',\n exitCode: 2,\n });\n }\n });\n}\n\nfunction parseQueueTask(\n value: unknown,\n inputPath: string,\n index: number,\n): DatasetCurationQueueTask {\n if (!isRecord(value)) {\n throw new CliError(`Invalid queue task in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_TASK_INVALID',\n exitCode: 2,\n });\n }\n const entityType = value.entity_type;\n if (entityType !== 'support' && entityType !== 'flow' && entityType !== 'process') {\n throw new CliError(`Invalid queue task entity_type in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_TASK_INVALID',\n exitCode: 2,\n });\n }\n return {\n schema_version: 1,\n entity_type: entityType,\n task_id: requireString(value.task_id, inputPath, index, 'task_id'),\n entity_id: requireString(value.entity_id, inputPath, index, 'entity_id'),\n version: requireString(value.version, inputPath, index, 'version'),\n lock_key: requireString(value.lock_key, inputPath, index, 'lock_key'),\n depends_on: Array.isArray(value.depends_on)\n ? value.depends_on.filter((item): item is string => typeof item === 'string')\n : [],\n input_rows_file: requireString(value.input_rows_file, inputPath, index, 'input_rows_file'),\n work_dir: requireString(value.work_dir, inputPath, index, 'work_dir'),\n checkpoint_file: requireString(value.checkpoint_file, inputPath, index, 'checkpoint_file'),\n run_plan_file: requireString(value.run_plan_file, inputPath, index, 'run_plan_file'),\n closure_file: requireString(value.closure_file, inputPath, index, 'closure_file'),\n };\n}\n\nfunction parseQueueBlocker(\n value: unknown,\n inputPath: string,\n index: number,\n): DatasetCurationQueueBlocker {\n if (!isRecord(value)) {\n throw new CliError(`Invalid queue blocker in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_BLOCKER_INVALID',\n exitCode: 2,\n });\n }\n const entityType = value.entity_type;\n if (entityType !== 'support' && entityType !== 'flow' && entityType !== 'process') {\n throw new CliError(`Invalid queue blocker entity_type in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_BLOCKER_INVALID',\n exitCode: 2,\n });\n }\n return {\n schema_version: 1,\n code: requireString(value.code, inputPath, index, 'code'),\n severity: 'blocker',\n entity_type: entityType,\n entity_id: typeof value.entity_id === 'string' ? value.entity_id : null,\n version: typeof value.version === 'string' ? value.version : null,\n message: requireString(value.message, inputPath, index, 'message'),\n details: value.details,\n };\n}\n\nfunction requireString(value: unknown, inputPath: string, index: number, field: string): string {\n if (typeof value === 'string' && value.length > 0) {\n return value;\n }\n throw new CliError(`Invalid or missing ${field} in ${inputPath} at line ${index + 1}.`, {\n code: 'CURATION_QUEUE_TASK_INVALID',\n exitCode: 2,\n });\n}\n\nfunction readQueueRows(inputPath: string, entityType: DatasetCurationQueueEntityType): QueueRow[] {\n const rows = materializeDatasetRows(inputPath);\n return rows.map((row) => queueRowFromDatasetRow(inputPath, entityType, row));\n}\n\nfunction queueRowFromDatasetRow(\n inputPath: string,\n entityType: DatasetCurationQueueEntityType,\n row: DatasetRowInput,\n): QueueRow {\n const tidasIdentity = genericTidasDatasetIdentity(row.payload);\n const id = firstNonEmpty(row.id, row.row.id, row.row.dataset_id, row.row.uuid, tidasIdentity.id);\n if (!id) {\n throw new CliError(\n `${entityType} row is missing a stable id in ${inputPath} at index ${row.index}.`,\n {\n code: 'CURATION_QUEUE_ROW_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return {\n entityType,\n sourcePath: inputPath,\n sourceIndex: row.index,\n row: row.row,\n payload: row.payload,\n id,\n version: firstNonEmpty(row.version, row.row.version, tidasIdentity.version) ?? DEFAULT_VERSION,\n };\n}\n\nfunction genericTidasDatasetIdentity(payload: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = genericTidasDatasetRoot(payload);\n const information = Object.values(root).find(\n (value) => isRecord(value) && isRecord(value.dataSetInformation),\n );\n const dataSetInformation =\n isRecord(information) && isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction genericTidasDatasetRoot(payload: JsonObject): JsonObject {\n const datasetRoots: JsonObject[] = [];\n for (const [key, value] of Object.entries(payload)) {\n if (key.endsWith('DataSet') && isRecord(value)) {\n datasetRoots.push(value);\n }\n }\n return datasetRoots.length === 1 ? datasetRoots[0] : payload;\n}\n\nfunction buildTask(outDir: string, row: QueueRow, dependsOn: string[]): DatasetCurationQueueTask {\n const taskId = taskIdFor(row.entityType, row.id, row.version);\n const workDir = path.join(\n outDir,\n 'entities',\n entityDirPlural(row.entityType),\n entityDirName(row.id, row.version),\n );\n return {\n schema_version: 1,\n entity_type: row.entityType,\n task_id: taskId,\n entity_id: row.id,\n version: row.version,\n lock_key: taskId,\n depends_on: dependsOn,\n input_rows_file: path.join(workDir, 'input.jsonl'),\n work_dir: workDir,\n checkpoint_file: path.join(workDir, 'checkpoint.json'),\n run_plan_file: path.join(workDir, 'entity-run-plan.json'),\n closure_file: path.join(workDir, 'closure.json'),\n };\n}\n\nfunction writeEntityArtifacts(options: {\n row: QueueRow;\n task: DatasetCurationQueueTask;\n flowRefs: FlowRef[];\n deferredFlowRefs: DeferredFlowRef[];\n externalFlowIds: Set<string>;\n flowRowsById: Map<string, QueueRow>;\n}): void {\n mkdirSync(path.join(options.task.work_dir, 'checkpoints'), { recursive: true });\n writeText(options.task.input_rows_file, jsonLines([options.row.row]));\n writeJson(options.task.closure_file, {\n schema_version: 1,\n entity_type: options.row.entityType,\n entity_id: options.row.id,\n version: options.row.version,\n source: {\n file: path.resolve(options.row.sourcePath),\n index: options.row.sourceIndex,\n },\n dependencies: buildDependencyClosure(options),\n });\n writeJson(options.task.run_plan_file, buildRunPlan(options.task));\n}\n\nfunction buildDependencyClosure(options: {\n row: QueueRow;\n task: DatasetCurationQueueTask;\n flowRefs: FlowRef[];\n deferredFlowRefs: DeferredFlowRef[];\n externalFlowIds: Set<string>;\n flowRowsById: Map<string, QueueRow>;\n}): unknown {\n if (options.row.entityType !== 'process') {\n return {\n local_tasks: [],\n external_refs: [],\n deferred_refs: [],\n unresolved_refs: [],\n };\n }\n const deferredRefKeys = deferredProcessFlowRefKeys(options.deferredFlowRefs);\n return {\n local_tasks: options.flowRefs\n .map((ref) => ({ ref, row: options.flowRowsById.get(ref.id) }))\n .filter((item): item is { ref: FlowRef; row: QueueRow } => Boolean(item.row))\n .map(({ ref, row }) => ({\n entity_type: 'flow',\n entity_id: ref.id,\n version: row.version,\n task_id: taskIdFor('flow', ref.id, row.version),\n ref_path: ref.path,\n })),\n external_refs: options.flowRefs\n .filter((ref) => !options.flowRowsById.has(ref.id) && options.externalFlowIds.has(ref.id))\n .map((ref) => ({\n entity_type: 'flow',\n entity_id: ref.id,\n version: ref.version,\n ref_path: ref.path,\n })),\n deferred_refs: options.flowRefs\n .filter(\n (ref) =>\n !options.flowRowsById.has(ref.id) &&\n !options.externalFlowIds.has(ref.id) &&\n deferredRefKeys.has(flowRefKey(ref)),\n )\n .map((ref) => {\n const deferredRef = deferredRefKeys.get(flowRefKey(ref))!;\n return {\n entity_type: 'flow',\n entity_id: ref.id,\n version: ref.version,\n ref_path: ref.path,\n action_item_code: deferredRef.actionItemCode,\n reason: deferredRef.reason ?? null,\n };\n }),\n unresolved_refs: options.flowRefs\n .filter(\n (ref) =>\n !options.flowRowsById.has(ref.id) &&\n !options.externalFlowIds.has(ref.id) &&\n !deferredRefKeys.has(flowRefKey(ref)),\n )\n .map((ref) => ({\n entity_type: 'flow',\n entity_id: ref.id,\n version: ref.version,\n ref_path: ref.path,\n })),\n };\n}\n\nfunction buildRunPlan(task: DatasetCurationQueueTask): unknown {\n const stagesByType: Record<DatasetCurationQueueEntityType, string[]> = {\n support: ['identity', 'schema', 'qa_or_profile', 'checkpoint'],\n flow: ['identity', 'name_plan', 'schema', 'qa', 'checkpoint'],\n process: [\n 'dependency_closure',\n 'reference_refresh',\n 'required_fields',\n 'schema',\n 'qa',\n 'curation',\n 'remote_dry_run',\n 'readback',\n ],\n };\n return {\n schema_version: 1,\n task_id: task.task_id,\n entity_type: task.entity_type,\n entity_id: task.entity_id,\n version: task.version,\n input_rows_file: task.input_rows_file,\n checkpoint_file: task.checkpoint_file,\n stages: stagesByType[task.entity_type].map((stage) => ({\n id: stage,\n status: 'pending',\n checkpoint_file: path.join(task.work_dir, 'checkpoints', `${stage}.json`),\n })),\n ai_authoring_policy: {\n output_only: 'structured_patch_or_build_plan',\n deterministic_apply_required: true,\n remote_write_allowed: false,\n },\n };\n}\n\nfunction extractDeferredProcessFlowRefs(payload: unknown): DeferredFlowRef[] {\n const refs = new Map<string, DeferredFlowRef>();\n scanForDeferredProcessFlowRefs(payload, refs);\n return [...refs.values()].sort((a, b) =>\n `${a.id}@${a.version ?? ''}@${a.path}`.localeCompare(`${b.id}@${b.version ?? ''}@${b.path}`),\n );\n}\n\nfunction scanForDeferredProcessFlowRefs(value: unknown, refs: Map<string, DeferredFlowRef>): void {\n if (Array.isArray(value)) {\n value.forEach((item) => scanForDeferredProcessFlowRefs(item, refs));\n return;\n }\n if (!isRecord(value)) {\n return;\n }\n\n const traces = asList(value['tiangongfoundry:unresolvedTrace']);\n for (const trace of traces) {\n if (!isRecord(trace)) {\n continue;\n }\n const actionItemCode = firstNonEmpty(trace.action_item_code, trace.actionItemCode);\n if (actionItemCode !== 'elementary_flow_identity_manual_review') {\n continue;\n }\n const id = firstNonEmpty(trace.reference_id, trace.referenceId, trace.ref_object_id);\n const pathValue = firstNonEmpty(trace.blocked_path, trace.blockedPath, trace.path);\n if (!id || !pathValue) {\n continue;\n }\n const version = firstNonEmpty(trace.reference_version, trace.referenceVersion, trace.version);\n const ref = {\n id,\n version,\n path: normalizeReferencePath(pathValue),\n actionItemCode,\n reason: firstNonEmpty(trace.reason),\n };\n refs.set(flowRefKey(ref), ref);\n }\n\n for (const nested of Object.values(value)) {\n scanForDeferredProcessFlowRefs(nested, refs);\n }\n}\n\nfunction deferredProcessFlowRefKeys(refs: DeferredFlowRef[]): Map<string, DeferredFlowRef> {\n const keys = new Map<string, DeferredFlowRef>();\n for (const ref of refs) {\n keys.set(flowRefKey(ref), ref);\n }\n return keys;\n}\n\nfunction flowRefKey(ref: FlowRef): string {\n return `${ref.id}@${ref.version ?? ''}@${normalizeReferencePath(ref.path)}`;\n}\n\nfunction normalizeReferencePath(value: string): string {\n return value\n .replace(/^\\/+/u, '')\n .replace(/\\/+/gu, '.')\n .replace(/^\\.+|\\.+$/gu, '');\n}\n\nfunction isFoundryTracePathParts(pathParts: string[]): boolean {\n return (\n pathParts.includes('common:other') &&\n pathParts.some(\n (part) => part.startsWith('tiangongfoundry:') && part.toLowerCase().includes('trace'),\n )\n );\n}\n\nfunction extractProcessFlowRefs(payload: unknown): FlowRef[] {\n const refs = new Map<string, FlowRef>();\n scanForFlowRefs(payload, [], refs);\n return [...refs.values()].sort((a, b) =>\n `${a.id}@${a.version ?? ''}`.localeCompare(`${b.id}@${b.version ?? ''}`),\n );\n}\n\nfunction scanForFlowRefs(value: unknown, pathParts: string[], refs: Map<string, FlowRef>): void {\n if (isFoundryTracePathParts(pathParts)) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => scanForFlowRefs(item, [...pathParts, String(index)], refs));\n return;\n }\n if (!isRecord(value)) {\n return;\n }\n\n const keyPath = pathParts.join('.');\n const keyHint = keyPath.toLowerCase();\n const looksLikeFlowRef =\n keyHint.includes('referencetoflowdataset') ||\n keyHint.includes('reference_to_flow_dataset') ||\n keyHint.includes('flowdataset') ||\n keyHint.includes('flow_dataset');\n if (looksLikeFlowRef) {\n const id = firstNonEmpty(\n value['@refObjectId'],\n value.refObjectId,\n value.ref_object_id,\n value.id,\n value.uuid,\n value['common:UUID'],\n );\n if (id) {\n const version = firstNonEmpty(\n value['@version'],\n value.version,\n value.dataSetVersion,\n value['common:dataSetVersion'],\n );\n refs.set(`${id}@${version ?? ''}@${keyPath}`, {\n id,\n version,\n path: keyPath,\n });\n }\n }\n\n for (const [key, nested] of Object.entries(value)) {\n scanForFlowRefs(nested, [...pathParts, key], refs);\n }\n}\n\nfunction readExternalFlowRefs(inputPath: string): FlowRef[] {\n const rows = materializeDatasetRows(inputPath);\n return rows.map((row) => {\n const id = firstNonEmpty(row.id, row.row.id, row.row.dataset_id, row.row.uuid);\n if (!id) {\n throw new CliError(`External flow ref is missing id in ${inputPath} at index ${row.index}.`, {\n code: 'CURATION_QUEUE_EXTERNAL_FLOW_REF_ID_MISSING',\n exitCode: 2,\n });\n }\n return {\n id,\n version: firstNonEmpty(row.version, row.row.version) ?? null,\n path: `${inputPath}#${row.index}`,\n };\n });\n}\n\nfunction asList(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction normalizeProcessLimit(value: number | undefined): number | null {\n if (value === undefined) {\n return null;\n }\n if (!Number.isInteger(value) || value < 1) {\n throw new CliError('--process-limit must be a positive integer.', {\n code: 'CURATION_QUEUE_PROCESS_LIMIT_INVALID',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction requirePath(value: string | undefined, flag: string): string {\n const trimmed = value?.trim();\n if (!trimmed) {\n throw new CliError(`${flag} is required.`, {\n code: 'CURATION_QUEUE_REQUIRED_FLAG_MISSING',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nfunction requireExistingPath(value: string | undefined, flag: string): string {\n const inputPath = requirePath(value, flag);\n if (!existsSync(inputPath)) {\n throw new CliError(`${flag} file does not exist: ${inputPath}`, {\n code: 'CURATION_QUEUE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n return inputPath;\n}\n\nfunction entityDirPlural(entityType: DatasetCurationQueueEntityType): string {\n return entityType === 'process' ? 'processes' : entityType === 'flow' ? 'flows' : 'supports';\n}\n\nfunction entityDirName(id: string, version: string): string {\n return `${sanitizePathToken(id)}__${sanitizePathToken(version)}`;\n}\n\nfunction taskIdFor(\n entityType: DatasetCurationQueueEntityType,\n id: string,\n version: string,\n): string {\n return `${entityType}:${id}@${version}`;\n}\n\nfunction sanitizePathToken(value: string): string {\n return value.replace(/[^A-Za-z0-9._-]+/gu, '_').replace(/^_+|_+$/gu, '') || 'unknown';\n}\n\nfunction buildInputHashes(inputPaths: string[]): Record<string, string> {\n const hashes: Record<string, string> = {};\n for (const inputPath of inputPaths) {\n hashes[path.resolve(inputPath)] = sha256(readFileSync(inputPath));\n }\n return hashes;\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nfunction writeJson(filePath: string, value: unknown): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\\n`, 'utf8');\n}\n\nfunction writeText(filePath: string, value: string): void {\n mkdirSync(path.dirname(filePath), { recursive: true });\n writeFileSync(filePath, value, 'utf8');\n}\n\nfunction jsonLines(rows: unknown[]): string {\n return rows.map((row) => JSON.stringify(row)).join('\\n') + (rows.length > 0 ? '\\n' : '');\n}\n\nexport const __testInternals = {\n buildTaskStates,\n countTaskStates,\n entityDirName,\n entityDirPlural,\n extractDeferredProcessFlowRefs,\n extractProcessFlowRefs,\n jsonLines,\n normalizeReferencePath,\n normalizeProcessLimit,\n normalizeQueueScope,\n parseQueueBlocker,\n parseQueueTask,\n readCheckpointStatus,\n readJsonlFile,\n readQueueRuntime,\n requireExistingPath,\n requirePath,\n sanitizePathToken,\n taskIdFor,\n taskMatchesScope,\n taskRuntimeStatus,\n withQueueAction,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-local.js","sourceRoot":"","sources":["../../../src/lib/dataset-local.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from './errors.js';\nimport { readJsonInput } from './io.js';\n\nexport type JsonObject = Record<string, unknown>;\n\nexport type DatasetKind =\n | 'contact'\n | 'flow'\n | 'flowproperty'\n | 'lifecyclemodel'\n | 'process'\n | 'source'\n | 'unitgroup';\n\nexport type DatasetRowInput = {\n index: number;\n row: JsonObject;\n payload: JsonObject;\n kind: DatasetKind | null;\n id: string | null;\n version: string | null;\n};\n\nexport function isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport function trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nexport function firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n const token = trimToken(value);\n if (token) {\n return token;\n }\n }\n return null;\n}\n\nfunction readJsonLinesInput(inputPath: string): JsonObject[] {\n const resolved = path.resolve(inputPath);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code: 'INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return readFileSync(resolved, 'utf8')\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch (error) {\n throw new CliError(`Input file contains invalid JSONL at line ${index + 1}: ${resolved}`, {\n code: 'INPUT_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n if (!isRecord(parsed)) {\n throw new CliError(\n `Expected JSON object rows in JSONL input: ${resolved} (line ${index + 1})`,\n {\n code: 'INPUT_INVALID_JSONL_ROW',\n exitCode: 2,\n },\n );\n }\n return parsed;\n });\n}\n\nfunction normalizeStructuredRows(value: unknown, inputPath: string): JsonObject[] {\n const rows = isRecord(value) && Array.isArray(value.rows) ? value.rows : value;\n const normalizedRows = Array.isArray(rows) ? rows : [rows];\n return normalizedRows.map((row, index) => {\n if (!isRecord(row)) {\n throw new CliError(\n `Expected JSON object rows in dataset input: ${inputPath} (index ${index})`,\n {\n code: 'DATASET_INPUT_INVALID_ROW',\n exitCode: 2,\n },\n );\n }\n return row;\n });\n}\n\nexport function readDatasetRowsInput(inputPath: string, rawInput?: unknown): JsonObject[] {\n if (!inputPath) {\n throw new CliError('Missing required --input value.', {\n code: 'DATASET_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n\n if (rawInput !== undefined) {\n return normalizeStructuredRows(rawInput, inputPath);\n }\n\n const resolved = path.resolve(inputPath);\n return resolved.toLowerCase().endsWith('.jsonl')\n ? readJsonLinesInput(resolved)\n : normalizeStructuredRows(readJsonInput(resolved), resolved);\n}\n\nexport function datasetRoot(payload: JsonObject, kind: DatasetKind): JsonObject {\n if (kind === 'contact') {\n return isRecord(payload.contactDataSet) ? payload.contactDataSet : payload;\n }\n if (kind === 'flow') {\n return isRecord(payload.flowDataSet) ? payload.flowDataSet : payload;\n }\n if (kind === 'flowproperty') {\n return isRecord(payload.flowPropertyDataSet) ? payload.flowPropertyDataSet : payload;\n }\n if (kind === 'process') {\n return isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n }\n if (kind === 'lifecyclemodel') {\n return isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n }\n if (kind === 'source') {\n return isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n }\n return isRecord(payload.unitGroupDataSet) ? payload.unitGroupDataSet : payload;\n}\n\nexport function detectDatasetKind(value: JsonObject): DatasetKind | null {\n const payload = unwrapDatasetPayload(value);\n if (isRecord(payload.contactDataSet)) {\n return 'contact';\n }\n if (isRecord(payload.flowDataSet)) {\n return 'flow';\n }\n if (isRecord(payload.flowPropertyDataSet)) {\n return 'flowproperty';\n }\n if (isRecord(payload.processDataSet)) {\n return 'process';\n }\n if (isRecord(payload.lifeCycleModelDataSet)) {\n return 'lifecyclemodel';\n }\n if (isRecord(payload.sourceDataSet)) {\n return 'source';\n }\n if (isRecord(payload.unitGroupDataSet)) {\n return 'unitgroup';\n }\n if (isRecord(value.contact)) {\n return 'contact';\n }\n if (isRecord(value.flow)) {\n return 'flow';\n }\n if (isRecord(value.flowproperty)) {\n return 'flowproperty';\n }\n if (isRecord(value.process)) {\n return 'process';\n }\n if (isRecord(value.lifecyclemodel)) {\n return 'lifecyclemodel';\n }\n if (isRecord(value.source)) {\n return 'source';\n }\n if (isRecord(value.unitgroup)) {\n return 'unitgroup';\n }\n return null;\n}\n\nexport function unwrapDatasetPayload(row: JsonObject): JsonObject {\n for (const key of ['json_ordered', 'jsonOrdered', 'json', 'payload'] as const) {\n if (isRecord(row[key])) {\n return row[key];\n }\n }\n if (isRecord(row.flow)) {\n return row.flow;\n }\n if (isRecord(row.process)) {\n return row.process;\n }\n if (isRecord(row.lifecyclemodel)) {\n return row.lifecyclemodel;\n }\n if (isRecord(row.contact)) {\n return row.contact;\n }\n if (isRecord(row.source)) {\n return row.source;\n }\n if (isRecord(row.unitgroup)) {\n return row.unitgroup;\n }\n if (isRecord(row.flowproperty)) {\n return row.flowproperty;\n }\n return row;\n}\n\nfunction genericIdentity(\n payload: JsonObject,\n kind: DatasetKind,\n informationKey: string,\n): { id: string | null; version: string | null } {\n const root = datasetRoot(payload, kind);\n const information = isRecord(root[informationKey]) ? root[informationKey] : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction flowIdentity(payload: JsonObject): { id: string | null; version: string | null } {\n const root = datasetRoot(payload, 'flow');\n const information = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction processIdentity(payload: JsonObject): { id: string | null; version: string | null } {\n const root = datasetRoot(payload, 'process');\n const information = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction lifecyclemodelIdentity(payload: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = datasetRoot(payload, 'lifecyclemodel');\n const information = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nexport function datasetIdentity(\n row: JsonObject,\n payload: JsonObject,\n kind: DatasetKind | null,\n): { id: string | null; version: string | null } {\n if (kind === 'contact') {\n const identity = genericIdentity(payload, 'contact', 'contactInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'flow') {\n const identity = flowIdentity(payload);\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'flowproperty') {\n const identity = genericIdentity(payload, 'flowproperty', 'flowPropertiesInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'process') {\n const identity = processIdentity(payload);\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'lifecyclemodel') {\n const identity = lifecyclemodelIdentity(payload);\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'source') {\n const identity = genericIdentity(payload, 'source', 'sourceInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'unitgroup') {\n const identity = genericIdentity(payload, 'unitgroup', 'unitGroupInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n return {\n id: firstNonEmpty(row.id),\n version: firstNonEmpty(row.version),\n };\n}\n\nexport function materializeDatasetRows(inputPath: string, rawInput?: unknown): DatasetRowInput[] {\n return readDatasetRowsInput(inputPath, rawInput).map((row, index) => {\n const payload = unwrapDatasetPayload(row);\n const kind = detectDatasetKind(row);\n const identity = datasetIdentity(row, payload, kind);\n return {\n index,\n row,\n payload,\n kind,\n id: identity.id,\n version: identity.version,\n };\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dataset-local.js","sourceRoot":"","sources":["../../../src/lib/dataset-local.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from './errors.js';\nimport { readJsonInput } from './io.js';\n\nexport type JsonObject = Record<string, unknown>;\n\nexport type DatasetKind =\n 'contact' | 'flow' | 'flowproperty' | 'lifecyclemodel' | 'process' | 'source' | 'unitgroup';\n\nexport type DatasetRowInput = {\n index: number;\n row: JsonObject;\n payload: JsonObject;\n kind: DatasetKind | null;\n id: string | null;\n version: string | null;\n};\n\nexport function isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport function trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nexport function firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n const token = trimToken(value);\n if (token) {\n return token;\n }\n }\n return null;\n}\n\nfunction readJsonLinesInput(inputPath: string): JsonObject[] {\n const resolved = path.resolve(inputPath);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code: 'INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return readFileSync(resolved, 'utf8')\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch (error) {\n throw new CliError(`Input file contains invalid JSONL at line ${index + 1}: ${resolved}`, {\n code: 'INPUT_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n if (!isRecord(parsed)) {\n throw new CliError(\n `Expected JSON object rows in JSONL input: ${resolved} (line ${index + 1})`,\n {\n code: 'INPUT_INVALID_JSONL_ROW',\n exitCode: 2,\n },\n );\n }\n return parsed;\n });\n}\n\nfunction normalizeStructuredRows(value: unknown, inputPath: string): JsonObject[] {\n const rows = isRecord(value) && Array.isArray(value.rows) ? value.rows : value;\n const normalizedRows = Array.isArray(rows) ? rows : [rows];\n return normalizedRows.map((row, index) => {\n if (!isRecord(row)) {\n throw new CliError(\n `Expected JSON object rows in dataset input: ${inputPath} (index ${index})`,\n {\n code: 'DATASET_INPUT_INVALID_ROW',\n exitCode: 2,\n },\n );\n }\n return row;\n });\n}\n\nexport function readDatasetRowsInput(inputPath: string, rawInput?: unknown): JsonObject[] {\n if (!inputPath) {\n throw new CliError('Missing required --input value.', {\n code: 'DATASET_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n\n if (rawInput !== undefined) {\n return normalizeStructuredRows(rawInput, inputPath);\n }\n\n const resolved = path.resolve(inputPath);\n return resolved.toLowerCase().endsWith('.jsonl')\n ? readJsonLinesInput(resolved)\n : normalizeStructuredRows(readJsonInput(resolved), resolved);\n}\n\nexport function datasetRoot(payload: JsonObject, kind: DatasetKind): JsonObject {\n if (kind === 'contact') {\n return isRecord(payload.contactDataSet) ? payload.contactDataSet : payload;\n }\n if (kind === 'flow') {\n return isRecord(payload.flowDataSet) ? payload.flowDataSet : payload;\n }\n if (kind === 'flowproperty') {\n return isRecord(payload.flowPropertyDataSet) ? payload.flowPropertyDataSet : payload;\n }\n if (kind === 'process') {\n return isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n }\n if (kind === 'lifecyclemodel') {\n return isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n }\n if (kind === 'source') {\n return isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n }\n return isRecord(payload.unitGroupDataSet) ? payload.unitGroupDataSet : payload;\n}\n\nexport function detectDatasetKind(value: JsonObject): DatasetKind | null {\n const payload = unwrapDatasetPayload(value);\n if (isRecord(payload.contactDataSet)) {\n return 'contact';\n }\n if (isRecord(payload.flowDataSet)) {\n return 'flow';\n }\n if (isRecord(payload.flowPropertyDataSet)) {\n return 'flowproperty';\n }\n if (isRecord(payload.processDataSet)) {\n return 'process';\n }\n if (isRecord(payload.lifeCycleModelDataSet)) {\n return 'lifecyclemodel';\n }\n if (isRecord(payload.sourceDataSet)) {\n return 'source';\n }\n if (isRecord(payload.unitGroupDataSet)) {\n return 'unitgroup';\n }\n if (isRecord(value.contact)) {\n return 'contact';\n }\n if (isRecord(value.flow)) {\n return 'flow';\n }\n if (isRecord(value.flowproperty)) {\n return 'flowproperty';\n }\n if (isRecord(value.process)) {\n return 'process';\n }\n if (isRecord(value.lifecyclemodel)) {\n return 'lifecyclemodel';\n }\n if (isRecord(value.source)) {\n return 'source';\n }\n if (isRecord(value.unitgroup)) {\n return 'unitgroup';\n }\n return null;\n}\n\nexport function unwrapDatasetPayload(row: JsonObject): JsonObject {\n for (const key of ['json_ordered', 'jsonOrdered', 'json', 'payload'] as const) {\n if (isRecord(row[key])) {\n return row[key];\n }\n }\n if (isRecord(row.flow)) {\n return row.flow;\n }\n if (isRecord(row.process)) {\n return row.process;\n }\n if (isRecord(row.lifecyclemodel)) {\n return row.lifecyclemodel;\n }\n if (isRecord(row.contact)) {\n return row.contact;\n }\n if (isRecord(row.source)) {\n return row.source;\n }\n if (isRecord(row.unitgroup)) {\n return row.unitgroup;\n }\n if (isRecord(row.flowproperty)) {\n return row.flowproperty;\n }\n return row;\n}\n\nfunction genericIdentity(\n payload: JsonObject,\n kind: DatasetKind,\n informationKey: string,\n): { id: string | null; version: string | null } {\n const root = datasetRoot(payload, kind);\n const information = isRecord(root[informationKey]) ? root[informationKey] : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction flowIdentity(payload: JsonObject): { id: string | null; version: string | null } {\n const root = datasetRoot(payload, 'flow');\n const information = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction processIdentity(payload: JsonObject): { id: string | null; version: string | null } {\n const root = datasetRoot(payload, 'process');\n const information = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nfunction lifecyclemodelIdentity(payload: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = datasetRoot(payload, 'lifecyclemodel');\n const information = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n return {\n id: firstNonEmpty(dataSetInformation['common:UUID']),\n version: firstNonEmpty(publicationAndOwnership['common:dataSetVersion']),\n };\n}\n\nexport function datasetIdentity(\n row: JsonObject,\n payload: JsonObject,\n kind: DatasetKind | null,\n): { id: string | null; version: string | null } {\n if (kind === 'contact') {\n const identity = genericIdentity(payload, 'contact', 'contactInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'flow') {\n const identity = flowIdentity(payload);\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'flowproperty') {\n const identity = genericIdentity(payload, 'flowproperty', 'flowPropertiesInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'process') {\n const identity = processIdentity(payload);\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'lifecyclemodel') {\n const identity = lifecyclemodelIdentity(payload);\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'source') {\n const identity = genericIdentity(payload, 'source', 'sourceInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n if (kind === 'unitgroup') {\n const identity = genericIdentity(payload, 'unitgroup', 'unitGroupInformation');\n return {\n id: firstNonEmpty(row.id, identity.id),\n version: firstNonEmpty(row.version, identity.version),\n };\n }\n return {\n id: firstNonEmpty(row.id),\n version: firstNonEmpty(row.version),\n };\n}\n\nexport function materializeDatasetRows(inputPath: string, rawInput?: unknown): DatasetRowInput[] {\n return readDatasetRowsInput(inputPath, rawInput).map((row, index) => {\n const payload = unwrapDatasetPayload(row);\n const kind = detectDatasetKind(row);\n const identity = datasetIdentity(row, payload, kind);\n return {\n index,\n row,\n payload,\n kind,\n id: identity.id,\n version: identity.version,\n };\n });\n}\n"]}
|