@tiangong-lca/cli 0.0.7 → 0.0.8
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 +83 -2
- package/dist/src/cli.js +1327 -40
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-author.js +100 -0
- package/dist/src/lib/dataset-author.js.map +1 -0
- package/dist/src/lib/dataset-bilingual.js +545 -0
- package/dist/src/lib/dataset-bilingual.js.map +1 -0
- package/dist/src/lib/dataset-contract.js +350 -0
- package/dist/src/lib/dataset-contract.js.map +1 -0
- package/dist/src/lib/dataset-evidence-search.js +636 -0
- package/dist/src/lib/dataset-evidence-search.js.map +1 -0
- package/dist/src/lib/dataset-import-lca.js +171 -0
- package/dist/src/lib/dataset-import-lca.js.map +1 -0
- package/dist/src/lib/dataset-remote-refresh.js +166 -0
- package/dist/src/lib/dataset-remote-refresh.js.map +1 -0
- package/dist/src/lib/dataset-remote-verify.js +543 -0
- package/dist/src/lib/dataset-remote-verify.js.map +1 -0
- package/dist/src/lib/dataset-validate.js +63 -7
- package/dist/src/lib/dataset-validate.js.map +1 -1
- package/dist/src/lib/flow-payload-validation.js +51 -0
- package/dist/src/lib/flow-payload-validation.js.map +1 -0
- package/dist/src/lib/flow-publish-reviewed-data.js +16 -0
- package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -1
- package/dist/src/lib/flow-publish-version.js +182 -12
- package/dist/src/lib/flow-publish-version.js.map +1 -1
- package/dist/src/lib/identity-preflight.js +1021 -0
- package/dist/src/lib/identity-preflight.js.map +1 -0
- package/dist/src/lib/process-auto-build.js +147 -0
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +51 -0
- package/dist/src/lib/process-dedup-review.js.map +1 -1
- package/dist/src/lib/process-flow-build-plan.js +1071 -0
- package/dist/src/lib/process-flow-build-plan.js.map +1 -0
- package/dist/src/lib/process-payload-validation.js +14 -7
- package/dist/src/lib/process-payload-validation.js.map +1 -1
- package/dist/src/lib/process-publish-build.js +122 -4
- package/dist/src/lib/process-publish-build.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +19 -10
- package/dist/src/lib/process-refresh-references.js.map +1 -1
- package/dist/src/lib/process-required-fields.js +810 -0
- package/dist/src/lib/process-required-fields.js.map +1 -0
- package/dist/src/lib/process-save-draft-run.js +4 -1
- package/dist/src/lib/process-save-draft-run.js.map +1 -1
- package/dist/src/lib/publish.js +100 -0
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/review-flow.js +58 -0
- package/dist/src/lib/review-flow.js.map +1 -1
- package/dist/src/lib/review-process.js +150 -2
- package/dist/src/lib/review-process.js.map +1 -1
- package/dist/src/lib/runtime-rulesets.js +283 -0
- package/dist/src/lib/runtime-rulesets.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-publish-reviewed-data.js","sourceRoot":"","sources":["../../../src/lib/flow-publish-reviewed-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n datasetPayloadFromRow,\n deepGet,\n extractFlowRecord,\n isRecord,\n listify,\n loadRowsFromFile,\n type FlowRecord,\n type JsonRecord,\n} from './flow-governance.js';\nimport {\n runFlowPublishVersion,\n type FlowPublishVersionReport,\n type RunFlowPublishVersionOptions,\n} from './flow-publish-version.js';\nimport type { FetchLike } from './http.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedWriteOperation,\n} from './supabase-json-ordered-write.js';\n\nconst DEFAULT_MAX_WORKERS = 4;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\n\nexport type FlowPublishPolicy = 'skip' | 'append_only_bump' | 'upsert_current_version';\nexport type ProcessPublishPolicy = FlowPublishPolicy;\n\ntype FlowPublishVersionCompatMode = 'dry_run' | 'commit';\n\ntype FlowVersionMapEntry = {\n id: string;\n source_version: string;\n target_version: string;\n};\n\ntype ProcessIdentity = {\n id: string;\n version: string;\n name: string;\n};\n\ntype FlowIndex = {\n byUuidVersion: Record<string, FlowRecord>;\n};\n\ntype SkippedUnchangedFlowRow = {\n entity_type: 'flow';\n entity_id: string;\n entity_name: string;\n version: string;\n reason: 'unchanged_vs_original_rows_file';\n};\n\ntype PreparedFlowPlan = {\n entity_type: 'flow';\n entity_id: string;\n entity_name: string;\n original_version: string;\n publish_version: string;\n version_strategy: 'keep_current' | 'bump';\n publish_policy: FlowPublishPolicy;\n row: JsonRecord;\n};\n\ntype PreparedProcessPlan = {\n entity_type: 'process';\n entity_id: string;\n entity_name: string;\n original_version: string;\n publish_version: string;\n version_strategy: 'keep_current' | 'bump';\n publish_policy: ProcessPublishPolicy;\n row: JsonRecord;\n};\n\ntype ProcessFlowRefRewriteEvidence = {\n process_id: string;\n process_version_before_publish: string;\n process_name: string;\n exchange_internal_id: string;\n source_flow_id: string;\n source_flow_version: string;\n target_flow_id: string;\n target_flow_version: string;\n target_flow_name: string;\n};\n\ntype FlowPublishSuccessRow = {\n id: string;\n version: string;\n operation:\n | 'would_insert'\n | 'would_update_existing'\n | 'insert'\n | 'update_existing'\n | 'update_after_insert_error';\n};\n\ntype FlowPublishFailureReason = {\n validator: string;\n stage: string;\n path: string;\n message: string;\n code: string;\n visible_user_id?: string;\n visible_state_code?: string;\n};\n\ntype FlowPublishFailureRow = {\n id: unknown;\n user_id?: unknown;\n json_ordered: JsonRecord;\n reason: FlowPublishFailureReason[];\n state_code?: unknown;\n};\n\ntype FlowReviewedPublishFiles = {\n prepared_flow_rows: string;\n prepared_process_rows: string;\n flow_version_map: string;\n skipped_unchanged_flow_rows: string;\n process_ref_rewrite_evidence: string;\n success_list: string;\n remote_failed: string;\n flow_publish_version_report: string;\n report: string;\n};\n\nexport type FlowReviewedPublishRowReport = {\n entity_type: 'flow';\n id: string;\n name: string;\n original_version: string;\n publish_version: string;\n publish_policy: FlowPublishPolicy;\n version_strategy: 'keep_current' | 'bump';\n status: 'prepared' | 'inserted' | 'updated' | 'failed';\n operation?: FlowPublishSuccessRow['operation'];\n error?: unknown;\n};\n\nexport type FlowReviewedPublishProcessRowReport = {\n entity_type: 'process';\n id: string;\n name: string;\n original_version: string;\n publish_version: string;\n publish_policy: ProcessPublishPolicy;\n version_strategy: 'keep_current' | 'bump';\n status: 'prepared' | 'inserted' | 'updated' | 'skipped_existing' | 'failed';\n operation?: SupabaseJsonOrderedWriteOperation;\n error?: unknown;\n};\n\nexport type FlowReviewedPublishDataReport = {\n schema_version: 1;\n generated_at_utc: string;\n status:\n | 'prepared_flow_publish_reviewed_data'\n | 'completed_flow_publish_reviewed_data'\n | 'completed_flow_publish_reviewed_data_with_failures';\n mode: FlowPublishVersionCompatMode;\n flow_rows_file: string | null;\n process_rows_file: string | null;\n original_flow_rows_file: string | null;\n out_dir: string;\n flow_publish_policy: FlowPublishPolicy;\n process_publish_policy: ProcessPublishPolicy;\n rewrite_process_flow_refs: boolean;\n counts: {\n input_flow_rows: number;\n input_process_rows: number;\n original_flow_rows: number;\n prepared_flow_rows: number;\n prepared_process_rows: number;\n skipped_unchanged_flow_rows: number;\n rewritten_process_flow_refs: number;\n flow_publish_reports: number;\n process_publish_reports: number;\n success_count: number;\n failure_count: number;\n };\n max_workers: number;\n target_user_id_override: string | null;\n files: FlowReviewedPublishFiles;\n flow_reports: FlowReviewedPublishRowReport[];\n process_reports: FlowReviewedPublishProcessRowReport[];\n skipped_unchanged_flow_rows: SkippedUnchangedFlowRow[];\n};\n\nexport type RunFlowReviewedPublishDataOptions = {\n flowRowsFile?: string | null;\n originalFlowRowsFile?: string | null;\n processRowsFile?: string | null;\n outDir: string;\n flowPublishPolicy?: FlowPublishPolicy;\n processPublishPolicy?: ProcessPublishPolicy;\n rewriteProcessFlowRefs?: boolean;\n commit?: boolean;\n maxWorkers?: number;\n targetUserId?: string | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n runFlowPublishVersionImpl?: (\n options: RunFlowPublishVersionOptions,\n ) => Promise<FlowPublishVersionReport>;\n};\n\nfunction assert_input_file(\n inputFile: string,\n code: string,\n message = 'Missing required input file value.',\n): string {\n if (!inputFile) {\n throw new CliError(message, {\n code,\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code,\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_optional_input_file(\n inputFile: string | null | undefined,\n code: string,\n): string | null {\n if (!inputFile) {\n return null;\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code,\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_PUBLISH_REVIEWED_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n return path.resolve(outDir);\n}\n\nfunction clone_json<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction json_equal(left: unknown, right: unknown): boolean {\n if (left === right) {\n return true;\n }\n\n if (Array.isArray(left) || Array.isArray(right)) {\n if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {\n return false;\n }\n\n return left.every((value, index) => json_equal(value, right[index]));\n }\n\n if (!isRecord(left) || !isRecord(right)) {\n return false;\n }\n\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n return leftKeys.every(\n (key, index) => key === rightKeys[index] && json_equal(left[key], right[key]),\n );\n}\n\nfunction normalize_publish_policy(\n value: FlowPublishPolicy | string | undefined,\n label = '--flow-publish-policy',\n code = 'FLOW_PUBLISH_REVIEWED_POLICY_INVALID',\n): FlowPublishPolicy {\n if (value === undefined || value === '') {\n return 'append_only_bump';\n }\n\n if (value === 'skip' || value === 'append_only_bump' || value === 'upsert_current_version') {\n return value;\n }\n\n throw new CliError(\n `Expected ${label} to be one of: skip, append_only_bump, upsert_current_version.`,\n {\n code,\n exitCode: 2,\n },\n );\n}\n\nfunction bump_ilcd_version(version: string): string {\n const parts = String(version || '')\n .trim()\n .split('.');\n if (parts.length !== 3 || !parts.every((part) => /^\\d+$/u.test(part))) {\n return '01.01.001';\n }\n\n const [head, middle, tail] = parts;\n return `${Number.parseInt(head, 10).toString().padStart(head.length, '0')}.${Number.parseInt(\n middle,\n 10,\n )\n .toString()\n .padStart(middle.length, '0')}.${(Number.parseInt(tail, 10) + 1)\n .toString()\n .padStart(tail.length, '0')}`;\n}\n\nfunction set_flow_version(row: JsonRecord, newVersion: string): void {\n const payload = datasetPayloadFromRow(row);\n const dataset = isRecord(payload.flowDataSet) ? payload.flowDataSet : payload;\n const administrativeInformation = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n if (!isRecord(dataset.administrativeInformation)) {\n dataset.administrativeInformation = administrativeInformation;\n }\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n if (!isRecord(administrativeInformation.publicationAndOwnership)) {\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n }\n publicationAndOwnership['common:dataSetVersion'] = newVersion;\n row.version = newVersion;\n}\n\nfunction process_dataset_from_row(row: JsonRecord): JsonRecord {\n const payload = datasetPayloadFromRow(row);\n return isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n}\n\nfunction extract_process_identity(row: JsonRecord): ProcessIdentity {\n const dataset = process_dataset_from_row(row);\n const info = deepGet(dataset, ['processInformation', 'dataSetInformation'], {}) as JsonRecord;\n const id = coerceText(row.id) || coerceText(info['common:UUID']);\n const version =\n coerceText(row.version) ||\n coerceText(\n deepGet(dataset, [\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n ) ||\n '01.00.000';\n const nameBlock = deepGet(info, ['name', 'baseName']) ?? deepGet(info, ['name']) ?? info.name;\n const name = coerceText(nameBlock) || id;\n\n return {\n id,\n version,\n name,\n };\n}\n\nfunction exchange_records(processRow: JsonRecord): JsonRecord[] {\n const dataset = process_dataset_from_row(processRow);\n return listify(deepGet(dataset, ['exchanges', 'exchange'], [])).filter(isRecord);\n}\n\nfunction set_process_version(row: JsonRecord, newVersion: string): void {\n const payload = datasetPayloadFromRow(row);\n const dataset = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const administrativeInformation = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n if (!isRecord(dataset.administrativeInformation)) {\n dataset.administrativeInformation = administrativeInformation;\n }\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n if (!isRecord(administrativeInformation.publicationAndOwnership)) {\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n }\n publicationAndOwnership['common:dataSetVersion'] = newVersion;\n row.version = newVersion;\n}\n\nfunction build_flow_index(rows: JsonRecord[]): FlowIndex {\n const byUuidVersion: Record<string, FlowRecord> = {};\n\n for (const row of rows) {\n const record = extractFlowRecord(row);\n byUuidVersion[`${record.id}@${record.version}`] = record;\n }\n\n return {\n byUuidVersion,\n };\n}\n\nfunction build_local_dataset_uri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n flow: 'flows',\n 'flow data set': 'flows',\n };\n const folder = folderMap[datasetKind.trim().toLowerCase()] ?? 'datasets';\n const versionText = version.trim() || '01.00.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction preserve_short_description_shape(existing: unknown, target: JsonRecord): unknown {\n if (Array.isArray(existing)) {\n if (existing.length > 0 && isRecord(existing[0])) {\n const patched = clone_json(existing[0]);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return [patched];\n }\n return [clone_json(target)];\n }\n\n if (isRecord(existing)) {\n const patched = clone_json(existing);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return patched;\n }\n\n return clone_json(target);\n}\n\nfunction flow_reference_from_record(record: FlowRecord): JsonRecord {\n const targetShortDescription =\n record.shortDescription ??\n ({\n '@xml:lang': 'en',\n '#text': record.name,\n } satisfies JsonRecord);\n\n return {\n '@type': 'flow data set',\n '@refObjectId': record.id,\n '@version': record.version,\n '@uri': build_local_dataset_uri('flow data set', record.id, record.version),\n 'common:shortDescription': clone_json(targetShortDescription),\n };\n}\n\nfunction patched_flow_reference(currentRef: unknown, record: FlowRecord): JsonRecord {\n const current = isRecord(currentRef) ? clone_json(currentRef) : {};\n const target = flow_reference_from_record(record);\n\n current['@type'] = coerceText(current['@type']) || coerceText(target['@type']);\n current['@refObjectId'] = target['@refObjectId'];\n current['@version'] = target['@version'];\n current['@uri'] = target['@uri'];\n current['common:shortDescription'] = preserve_short_description_shape(\n current['common:shortDescription'],\n target['common:shortDescription'] as JsonRecord,\n );\n\n return current;\n}\n\nfunction build_output_files(outDir: string): FlowReviewedPublishFiles {\n return {\n prepared_flow_rows: path.join(outDir, 'prepared-flow-rows.json'),\n prepared_process_rows: path.join(outDir, 'prepared-process-rows.json'),\n flow_version_map: path.join(outDir, 'flow-version-map.json'),\n skipped_unchanged_flow_rows: path.join(outDir, 'skipped-unchanged-flow-rows.json'),\n process_ref_rewrite_evidence: path.join(outDir, 'process-flow-ref-rewrite-evidence.jsonl'),\n success_list: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),\n remote_failed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),\n flow_publish_version_report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),\n report: path.join(outDir, 'publish-report.json'),\n };\n}\n\nfunction status_from_mode(\n mode: FlowPublishVersionCompatMode,\n failureCount: number,\n): FlowReviewedPublishDataReport['status'] {\n if (mode === 'dry_run') {\n return 'prepared_flow_publish_reviewed_data';\n }\n\n return failureCount > 0\n ? 'completed_flow_publish_reviewed_data_with_failures'\n : 'completed_flow_publish_reviewed_data';\n}\n\nfunction prepare_flow_rows(options: {\n rows: JsonRecord[];\n policy: FlowPublishPolicy;\n originalRows: JsonRecord[];\n}): {\n preparedRows: JsonRecord[];\n plans: PreparedFlowPlan[];\n flowVersionMap: Record<string, FlowVersionMapEntry>;\n skippedUnchangedRows: SkippedUnchangedFlowRow[];\n} {\n if (options.policy === 'skip') {\n return {\n preparedRows: [],\n plans: [],\n flowVersionMap: {},\n skippedUnchangedRows: [],\n };\n }\n\n const originalMap = new Map<string, JsonRecord>();\n for (const row of options.originalRows) {\n const record = extractFlowRecord(row);\n if (record.id && record.version) {\n originalMap.set(`${record.id}@${record.version}`, row);\n }\n }\n\n const preparedRows: JsonRecord[] = [];\n const plans: PreparedFlowPlan[] = [];\n const flowVersionMap: Record<string, FlowVersionMapEntry> = {};\n const skippedUnchangedRows: SkippedUnchangedFlowRow[] = [];\n\n for (const row of options.rows) {\n const working = clone_json(row);\n const record = extractFlowRecord(working);\n const originalRow =\n record.id && record.version ? originalMap.get(`${record.id}@${record.version}`) : undefined;\n\n if (originalRow && json_equal(datasetPayloadFromRow(originalRow), datasetPayloadFromRow(row))) {\n skippedUnchangedRows.push({\n entity_type: 'flow',\n entity_id: record.id,\n entity_name: record.name,\n version: record.version,\n reason: 'unchanged_vs_original_rows_file',\n });\n continue;\n }\n\n let publishVersion = record.version;\n let versionStrategy: PreparedFlowPlan['version_strategy'] = 'keep_current';\n if (options.policy === 'append_only_bump') {\n publishVersion = bump_ilcd_version(record.version);\n set_flow_version(working, publishVersion);\n versionStrategy = 'bump';\n if (record.id && record.version) {\n flowVersionMap[`${record.id}@${record.version}`] = {\n id: record.id,\n source_version: record.version,\n target_version: publishVersion,\n };\n }\n }\n\n preparedRows.push(working);\n plans.push({\n entity_type: 'flow',\n entity_id: record.id,\n entity_name: record.name,\n original_version: record.version,\n publish_version: publishVersion,\n version_strategy: versionStrategy,\n publish_policy: options.policy,\n row: working,\n });\n }\n\n return {\n preparedRows,\n plans,\n flowVersionMap,\n skippedUnchangedRows,\n };\n}\n\nfunction prepare_process_rows(options: {\n rows: JsonRecord[];\n policy: ProcessPublishPolicy;\n rewriteRefs: boolean;\n preparedFlowRows: JsonRecord[];\n flowVersionMap: Record<string, FlowVersionMapEntry>;\n}): {\n preparedRows: JsonRecord[];\n plans: PreparedProcessPlan[];\n rewriteEvidence: ProcessFlowRefRewriteEvidence[];\n} {\n if (options.policy === 'skip') {\n return {\n preparedRows: [],\n plans: [],\n rewriteEvidence: [],\n };\n }\n\n const preparedRows = options.rows.map((row) => clone_json(row));\n const rewriteEvidence: ProcessFlowRefRewriteEvidence[] = [];\n\n if (\n options.rewriteRefs &&\n preparedRows.length > 0 &&\n options.preparedFlowRows.length > 0 &&\n Object.keys(options.flowVersionMap).length > 0\n ) {\n const targetIndex = build_flow_index(options.preparedFlowRows).byUuidVersion;\n\n for (const row of preparedRows) {\n const processIdentity = extract_process_identity(row);\n\n for (const exchange of exchange_records(row)) {\n const currentRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : null;\n if (!currentRef) {\n continue;\n }\n\n const flowId = coerceText(currentRef['@refObjectId']);\n const flowVersion = coerceText(currentRef['@version']);\n const mapped = options.flowVersionMap[`${flowId}@${flowVersion}`];\n if (!mapped) {\n continue;\n }\n\n const targetRecord = targetIndex[`${mapped.id}@${mapped.target_version}`];\n if (!targetRecord) {\n continue;\n }\n\n exchange.referenceToFlowDataSet = patched_flow_reference(currentRef, targetRecord);\n rewriteEvidence.push({\n process_id: processIdentity.id,\n process_version_before_publish: processIdentity.version,\n process_name: processIdentity.name,\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n source_flow_id: flowId,\n source_flow_version: flowVersion,\n target_flow_id: mapped.id,\n target_flow_version: mapped.target_version,\n target_flow_name: targetRecord.name,\n });\n }\n }\n }\n\n const plans: PreparedProcessPlan[] = [];\n for (const row of preparedRows) {\n const record = extract_process_identity(row);\n let publishVersion = record.version;\n let versionStrategy: PreparedProcessPlan['version_strategy'] = 'keep_current';\n if (options.policy === 'append_only_bump') {\n publishVersion = bump_ilcd_version(record.version);\n set_process_version(row, publishVersion);\n versionStrategy = 'bump';\n }\n\n plans.push({\n entity_type: 'process',\n entity_id: record.id,\n entity_name: record.name,\n original_version: record.version,\n publish_version: publishVersion,\n version_strategy: versionStrategy,\n publish_policy: options.policy,\n row,\n });\n }\n\n return {\n preparedRows,\n plans,\n rewriteEvidence,\n };\n}\n\nfunction build_local_row_report(plan: PreparedFlowPlan): FlowReviewedPublishRowReport {\n return {\n entity_type: 'flow',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'prepared',\n };\n}\n\nfunction build_local_process_row_report(\n plan: PreparedProcessPlan,\n): FlowReviewedPublishProcessRowReport {\n return {\n entity_type: 'process',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'prepared',\n };\n}\n\nfunction process_publish_payload_from_row(row: JsonRecord): JsonRecord {\n const payload = datasetPayloadFromRow(row);\n const dataset = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n return {\n processDataSet: clone_json(dataset),\n };\n}\n\nfunction build_process_commit_success_report(\n plan: PreparedProcessPlan,\n operation: SupabaseJsonOrderedWriteOperation,\n): FlowReviewedPublishProcessRowReport {\n return {\n entity_type: 'process',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status:\n operation === 'insert'\n ? 'inserted'\n : operation === 'skipped_existing'\n ? 'skipped_existing'\n : 'updated',\n operation,\n };\n}\n\nfunction build_process_commit_failure_report(\n plan: PreparedProcessPlan,\n error: unknown,\n): FlowReviewedPublishProcessRowReport {\n return {\n entity_type: 'process',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'failed',\n error,\n };\n}\n\nfunction normalize_process_commit_failure(error: unknown): unknown {\n if (error instanceof CliError && error.code === 'REMOTE_REQUEST_FAILED') {\n if (typeof error.details === 'string' && error.details.trim()) {\n return error.details;\n }\n\n if (error.message.startsWith('HTTP 0 returned') && isRecord(error.details)) {\n const detailMessage =\n typeof error.details.message === 'string' ? error.details.message.trim() : '';\n const normalized = detailMessage.replace(/^(?:FetchError|Error):\\s*/u, '').trim();\n if (normalized && normalized !== 'undefined') {\n return normalized;\n }\n }\n }\n\n return error instanceof Error ? error.message : error;\n}\n\nfunction build_commit_success_report(\n plan: PreparedFlowPlan,\n success: FlowPublishSuccessRow,\n): FlowReviewedPublishRowReport {\n return {\n entity_type: 'flow',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: success.operation === 'insert' ? 'inserted' : 'updated',\n operation: success.operation,\n };\n}\n\nfunction build_commit_failure_report(\n plan: PreparedFlowPlan,\n failure: FlowPublishFailureRow,\n): FlowReviewedPublishRowReport {\n return {\n entity_type: 'flow',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'failed',\n error: failure.reason,\n };\n}\n\nfunction build_flow_key(id: string, version: string): string | null {\n if (!id || !version) {\n return null;\n }\n return `${id}@${version}`;\n}\n\nfunction queue_by_key<T>(items: T[], keyFn: (item: T) => string | null): Map<string, T[]> {\n const queued = new Map<string, T[]>();\n\n for (const item of items) {\n const key = keyFn(item);\n if (!key) {\n continue;\n }\n const queue = queued.get(key) ?? [];\n queue.push(item);\n queued.set(key, queue);\n }\n\n return queued;\n}\n\nfunction failure_key(row: FlowPublishFailureRow): string | null {\n const record = extractFlowRecord(row as unknown as JsonRecord);\n return build_flow_key(record.id, record.version);\n}\n\nfunction success_key(row: FlowPublishSuccessRow): string | null {\n return build_flow_key(row.id, row.version);\n}\n\nfunction shift_queue<T>(queue: Map<string, T[]>, key: string | null): T | null {\n if (!key) {\n return null;\n }\n\n const items = queue.get(key);\n if (!items?.length) {\n return null;\n }\n\n const [first, ...rest] = items;\n if (rest.length) {\n queue.set(key, rest);\n } else {\n queue.delete(key);\n }\n return first ?? null;\n}\n\nasync function map_with_concurrency<T, R>(\n items: T[],\n maxWorkers: number,\n worker: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n const workerCount = Math.min(Math.max(1, maxWorkers), Math.max(items.length, 1));\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (true) {\n const currentIndex = nextIndex;\n nextIndex += 1;\n if (currentIndex >= items.length) {\n return;\n }\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: workerCount }, () => runWorker()));\n return results;\n}\n\nfunction map_commit_reports(\n plans: PreparedFlowPlan[],\n successes: FlowPublishSuccessRow[],\n failures: FlowPublishFailureRow[],\n): FlowReviewedPublishRowReport[] {\n const successQueue = queue_by_key(successes, success_key);\n const failureQueue = queue_by_key(failures, failure_key);\n const unkeyedFailures = failures.filter((failure) => failure_key(failure) === null);\n\n return plans.map((plan) => {\n const key = build_flow_key(plan.entity_id, plan.publish_version);\n const success = shift_queue(successQueue, key);\n if (success) {\n return build_commit_success_report(plan, success);\n }\n\n const failure =\n shift_queue(failureQueue, key) ?? (key ? null : (unkeyedFailures.shift() ?? null));\n if (failure) {\n return build_commit_failure_report(plan, failure);\n }\n\n return {\n ...build_local_row_report(plan),\n status: 'failed',\n error: [\n {\n code: 'UNMATCHED_PUBLISH_RESULT',\n message: 'Publish result was missing for prepared flow row.',\n },\n ],\n };\n });\n}\n\nfunction build_compat_report(options: {\n now: Date;\n mode: FlowPublishVersionCompatMode;\n preparedRows: number;\n successCount: number;\n failureCount: number;\n maxWorkers: number;\n targetUserId: string | null;\n files: FlowReviewedPublishFiles;\n}): FlowPublishVersionReport {\n let status: FlowPublishVersionReport['status'];\n if (options.mode === 'dry_run') {\n status = 'prepared_flow_publish_version';\n } else {\n status =\n options.failureCount > 0\n ? 'completed_flow_publish_version_with_failures'\n : 'completed_flow_publish_version';\n }\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n status,\n mode: options.mode,\n input_file: options.files.prepared_flow_rows,\n out_dir: path.dirname(options.files.report),\n counts: {\n total_rows: options.preparedRows,\n success_count: options.successCount,\n failure_count: options.failureCount,\n },\n operation_counts: {},\n max_workers: options.maxWorkers,\n limit: null,\n target_user_id_override: options.targetUserId,\n files: {\n success_list: options.files.success_list,\n remote_failed: options.files.remote_failed,\n report: options.files.flow_publish_version_report,\n },\n };\n}\n\nasync function commit_process_plans(options: {\n plans: PreparedProcessPlan[];\n maxWorkers: number;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}): Promise<FlowReviewedPublishProcessRowReport[]> {\n return map_with_concurrency(options.plans, options.maxWorkers, async (plan) => {\n try {\n const result = await syncSupabaseJsonOrderedRecord({\n table: 'processes',\n id: plan.entity_id,\n version: plan.publish_version,\n payload: process_publish_payload_from_row(plan.row),\n writeMode:\n plan.publish_policy === 'append_only_bump'\n ? 'append_only_insert'\n : 'upsert_current_version',\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n return build_process_commit_success_report(plan, result.operation);\n } catch (error) {\n return build_process_commit_failure_report(plan, normalize_process_commit_failure(error));\n }\n });\n}\n\nexport async function runFlowReviewedPublishData(\n options: RunFlowReviewedPublishDataOptions,\n): Promise<FlowReviewedPublishDataReport> {\n const flowRowsFile = assert_optional_input_file(\n options.flowRowsFile,\n 'FLOW_PUBLISH_REVIEWED_FLOW_ROWS_NOT_FOUND',\n );\n const processRowsFile = assert_optional_input_file(\n options.processRowsFile,\n 'FLOW_PUBLISH_REVIEWED_PROCESS_ROWS_NOT_FOUND',\n );\n if (!flowRowsFile && !processRowsFile) {\n throw new CliError('Provide at least one of --flow-rows-file or --process-rows-file.', {\n code: 'FLOW_PUBLISH_REVIEWED_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n const originalFlowRowsFile = assert_optional_input_file(\n options.originalFlowRowsFile,\n 'FLOW_PUBLISH_REVIEWED_ORIGINAL_ROWS_NOT_FOUND',\n );\n const outDir = assert_out_dir(options.outDir);\n const flowPublishPolicy = normalize_publish_policy(options.flowPublishPolicy);\n const processPublishPolicy = normalize_publish_policy(\n options.processPublishPolicy,\n '--process-publish-policy',\n 'FLOW_PUBLISH_REVIEWED_PROCESS_POLICY_INVALID',\n );\n const rewriteProcessFlowRefs = options.rewriteProcessFlowRefs !== false;\n const mode: FlowPublishVersionCompatMode = options.commit ? 'commit' : 'dry_run';\n const maxWorkers = options.maxWorkers ?? DEFAULT_MAX_WORKERS;\n const targetUserId =\n typeof options.targetUserId === 'string' && options.targetUserId.trim()\n ? options.targetUserId.trim()\n : null;\n const now = options.now ?? new Date();\n const files = build_output_files(outDir);\n const inputFlowRows = flowRowsFile ? loadRowsFromFile(flowRowsFile) : [];\n const originalFlowRows = originalFlowRowsFile ? loadRowsFromFile(originalFlowRowsFile) : [];\n const inputProcessRows = processRowsFile ? loadRowsFromFile(processRowsFile) : [];\n const prepared = prepare_flow_rows({\n rows: inputFlowRows,\n policy: flowPublishPolicy,\n originalRows: originalFlowRows,\n });\n const preparedProcesses = prepare_process_rows({\n rows: inputProcessRows,\n policy: processPublishPolicy,\n rewriteRefs: rewriteProcessFlowRefs,\n preparedFlowRows: prepared.preparedRows,\n flowVersionMap: prepared.flowVersionMap,\n });\n\n writeJsonArtifact(files.prepared_flow_rows, prepared.preparedRows);\n writeJsonArtifact(files.prepared_process_rows, preparedProcesses.preparedRows);\n writeJsonArtifact(files.flow_version_map, prepared.flowVersionMap);\n writeJsonArtifact(files.skipped_unchanged_flow_rows, prepared.skippedUnchangedRows);\n writeJsonLinesArtifact(files.process_ref_rewrite_evidence, preparedProcesses.rewriteEvidence);\n\n let flowReports = prepared.plans.map(build_local_row_report);\n let processReports = preparedProcesses.plans.map(build_local_process_row_report);\n\n if (options.commit && prepared.preparedRows.length > 0) {\n const publishImpl = options.runFlowPublishVersionImpl ?? runFlowPublishVersion;\n await publishImpl({\n inputFile: files.prepared_flow_rows,\n outDir,\n commit: true,\n maxWorkers,\n targetUserId,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now,\n });\n\n const successRows = loadRowsFromFile(files.success_list) as FlowPublishSuccessRow[];\n const failureRows = loadRowsFromFile(files.remote_failed) as FlowPublishFailureRow[];\n flowReports = map_commit_reports(prepared.plans, successRows, failureRows);\n } else {\n writeJsonArtifact(files.success_list, []);\n writeJsonLinesArtifact(files.remote_failed, []);\n const compatReport = build_compat_report({\n now,\n mode,\n preparedRows: prepared.preparedRows.length,\n successCount: 0,\n failureCount: 0,\n maxWorkers,\n targetUserId,\n files,\n });\n writeJsonArtifact(files.flow_publish_version_report, compatReport);\n }\n\n if (options.commit && preparedProcesses.preparedRows.length > 0) {\n if (!options.fetchImpl) {\n throw new CliError(\n 'Process commit requires a fetch implementation in flow publish-reviewed-data.',\n {\n code: 'FLOW_PUBLISH_REVIEWED_PROCESS_FETCH_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n const runtimeEnv = options.env;\n if (!runtimeEnv || !hasSupabaseRestRuntime(runtimeEnv)) {\n throw new CliError(\n 'Process commit requires TIANGONG_LCA_API_BASE_URL, TIANGONG_LCA_API_KEY, and TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY.',\n {\n code: 'FLOW_PUBLISH_REVIEWED_PROCESS_RUNTIME_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n processReports = await commit_process_plans({\n plans: preparedProcesses.plans,\n maxWorkers,\n env: runtimeEnv,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n const successCount =\n flowReports.filter((report) => report.status === 'inserted' || report.status === 'updated')\n .length +\n processReports.filter(\n (report) =>\n report.status === 'inserted' ||\n report.status === 'updated' ||\n report.status === 'skipped_existing',\n ).length;\n const failureCount =\n flowReports.filter((report) => report.status === 'failed').length +\n processReports.filter((report) => report.status === 'failed').length;\n\n const report: FlowReviewedPublishDataReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: status_from_mode(mode, failureCount),\n mode,\n flow_rows_file: flowRowsFile,\n process_rows_file: processRowsFile,\n original_flow_rows_file: originalFlowRowsFile,\n out_dir: outDir,\n flow_publish_policy: flowPublishPolicy,\n process_publish_policy: processPublishPolicy,\n rewrite_process_flow_refs: rewriteProcessFlowRefs,\n counts: {\n input_flow_rows: inputFlowRows.length,\n input_process_rows: inputProcessRows.length,\n original_flow_rows: originalFlowRows.length,\n prepared_flow_rows: prepared.preparedRows.length,\n prepared_process_rows: preparedProcesses.preparedRows.length,\n skipped_unchanged_flow_rows: prepared.skippedUnchangedRows.length,\n rewritten_process_flow_refs: preparedProcesses.rewriteEvidence.length,\n flow_publish_reports: flowReports.length,\n process_publish_reports: processReports.length,\n success_count: successCount,\n failure_count: failureCount,\n },\n max_workers: maxWorkers,\n target_user_id_override: targetUserId,\n files,\n flow_reports: flowReports,\n process_reports: processReports,\n skipped_unchanged_flow_rows: prepared.skippedUnchangedRows,\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_optional_input_file,\n assert_out_dir,\n clone_json,\n json_equal,\n normalize_publish_policy,\n bump_ilcd_version,\n set_flow_version,\n process_dataset_from_row,\n extract_process_identity,\n exchange_records,\n set_process_version,\n build_flow_index,\n build_local_dataset_uri,\n preserve_short_description_shape,\n flow_reference_from_record,\n patched_flow_reference,\n build_output_files,\n status_from_mode,\n prepare_flow_rows,\n prepare_process_rows,\n build_compat_report,\n map_commit_reports,\n shift_queue,\n process_publish_payload_from_row,\n build_process_commit_success_report,\n build_process_commit_failure_report,\n normalize_process_commit_failure,\n map_with_concurrency,\n commit_process_plans,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"flow-publish-reviewed-data.js","sourceRoot":"","sources":["../../../src/lib/flow-publish-reviewed-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,qBAAqB,GAGtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,6BAA6B,GAE9B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,oBAAoB,GAAG,qCAAqC,CAAC;AA6LnE,SAAS,iBAAiB,CACxB,SAAiB,EACjB,IAAY,EACZ,OAAO,GAAG,oCAAoC;IAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;YAC1B,IAAI;YACJ,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,yBAAyB,QAAQ,EAAE,EAAE;YACtD,IAAI;YACJ,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,0BAA0B,CACjC,SAAoC,EACpC,IAAY;IAEZ,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,yBAAyB,QAAQ,EAAE,EAAE;YACtD,IAAI;YACJ,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,mCAAmC,EAAE;YACtD,IAAI,EAAE,wCAAwC;YAC9C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAI,KAAQ;IAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,IAAa,EAAE,KAAc;IAC/C,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAClF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CACnB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAC9E,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA6C,EAC7C,KAAK,GAAG,uBAAuB,EAC/B,IAAI,GAAG,sCAAsC;IAE7C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,wBAAwB,EAAE,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,QAAQ,CAChB,YAAY,KAAK,gEAAgE,EACjF;QACE,IAAI;QACJ,QAAQ,EAAE,CAAC;KACZ,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SAChC,IAAI,EAAE;SACN,KAAK,CAAC,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IACnC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAC1F,MAAM,EACN,EAAE,CACH;SACE,QAAQ,EAAE;SACV,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;SAC/D,QAAQ,EAAE;SACV,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAe,EAAE,UAAkB;IAC3D,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9E,MAAM,yBAAyB,GAAG,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC3E,CAAC,CAAC,OAAO,CAAC,yBAAyB;QACnC,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,yBAAyB,GAAG,yBAAyB,CAAC;IAChE,CAAC;IACD,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACjE,yBAAyB,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC9E,CAAC;IACD,uBAAuB,CAAC,uBAAuB,CAAC,GAAG,UAAU,CAAC;IAC9D,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC;AAC3B,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAe;IAC/C,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7E,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAe;IAC/C,MAAM,OAAO,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAe,CAAC;IAC9F,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GACX,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACvB,UAAU,CACR,OAAO,CAAC,OAAO,EAAE;YACf,2BAA2B;YAC3B,yBAAyB;YACzB,uBAAuB;SACxB,CAAC,CACH;QACD,WAAW,CAAC;IACd,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;IAC9F,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEzC,OAAO;QACL,EAAE;QACF,OAAO;QACP,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAsB;IAC9C,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAe,EAAE,UAAkB;IAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACpF,MAAM,yBAAyB,GAAG,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC3E,CAAC,CAAC,OAAO,CAAC,yBAAyB;QACnC,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,yBAAyB,GAAG,yBAAyB,CAAC;IAChE,CAAC;IACD,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACjE,yBAAyB,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC9E,CAAC;IACD,uBAAuB,CAAC,uBAAuB,CAAC,GAAG,UAAU,CAAC;IAC9D,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAkB;IAC1C,MAAM,aAAa,GAA+B,EAAE,CAAC;IAErD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,aAAa,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAmB,EAAE,SAAiB,EAAE,OAAe;IACtF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,OAAO;KACzB,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,CAAC;IACzE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC;IAClD,OAAO,MAAM,MAAM,IAAI,SAAS,IAAI,WAAW,MAAM,CAAC;AACxD,CAAC;AAED,SAAS,gCAAgC,CAAC,QAAiB,EAAE,MAAkB;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,WAAW,CAAC;gBAClB,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC;YAC9E,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,CAAC;YAClB,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC;QAC9E,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAkB;IACpD,MAAM,sBAAsB,GAC1B,MAAM,CAAC,gBAAgB;QACtB;YACC,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI;SACC,CAAC;IAE1B,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,cAAc,EAAE,MAAM,CAAC,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC,OAAO;QAC1B,MAAM,EAAE,uBAAuB,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;QAC3E,yBAAyB,EAAE,UAAU,CAAC,sBAAsB,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAmB,EAAE,MAAkB;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAElD,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,yBAAyB,CAAC,GAAG,gCAAgC,CACnE,OAAO,CAAC,yBAAyB,CAAC,EAClC,MAAM,CAAC,yBAAyB,CAAe,CAChD,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,OAAO;QACL,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,yBAAyB,CAAC;QAChE,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC;QACtE,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC;QAC5D,2BAA2B,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kCAAkC,CAAC;QAClF,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,yCAAyC,CAAC;QAC1F,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,oBAAoB,wBAAwB,CAAC;QAChF,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,oBAAoB,iCAAiC,CAAC;QAC1F,2BAA2B,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,oBAAoB,uBAAuB,CAAC;QAC9F,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAkC,EAClC,YAAoB;IAEpB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IAED,OAAO,YAAY,GAAG,CAAC;QACrB,CAAC,CAAC,oDAAoD;QACtD,CAAC,CAAC,sCAAsC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CAAC,OAI1B;IAMC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO;YACL,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,oBAAoB,EAAE,EAAE;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAChC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAiB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,cAAc,GAAwC,EAAE,CAAC;IAC/D,MAAM,oBAAoB,GAA8B,EAAE,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,WAAW,GACf,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9F,IAAI,WAAW,IAAI,UAAU,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9F,oBAAoB,CAAC,IAAI,CAAC;gBACxB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,MAAM,CAAC,EAAE;gBACpB,WAAW,EAAE,MAAM,CAAC,IAAI;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,iCAAiC;aAC1C,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,eAAe,GAAyC,cAAc,CAAC;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YAC1C,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAC1C,eAAe,GAAG,MAAM,CAAC;YACzB,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAChC,cAAc,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG;oBACjD,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,cAAc,EAAE,MAAM,CAAC,OAAO;oBAC9B,cAAc,EAAE,cAAc;iBAC/B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,WAAW,EAAE,MAAM,CAAC,IAAI;YACxB,gBAAgB,EAAE,MAAM,CAAC,OAAO;YAChC,eAAe,EAAE,cAAc;YAC/B,gBAAgB,EAAE,eAAe;YACjC,cAAc,EAAE,OAAO,CAAC,MAAM;YAC9B,GAAG,EAAE,OAAO;SACb,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK;QACL,cAAc;QACd,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAM7B;IAKC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO;YACL,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,EAAE;YACT,eAAe,EAAE,EAAE;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,eAAe,GAAoC,EAAE,CAAC;IAE5D,IACE,OAAO,CAAC,WAAW;QACnB,YAAY,CAAC,MAAM,GAAG,CAAC;QACvB,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAC9C,CAAC;QACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC;QAE7E,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;YAEtD,KAAK,MAAM,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC;oBAC1D,CAAC,CAAC,QAAQ,CAAC,sBAAsB;oBACjC,CAAC,CAAC,IAAI,CAAC;gBACT,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;gBACtD,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,SAAS;gBACX,CAAC;gBAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBAED,QAAQ,CAAC,sBAAsB,GAAG,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACnF,eAAe,CAAC,IAAI,CAAC;oBACnB,UAAU,EAAE,eAAe,CAAC,EAAE;oBAC9B,8BAA8B,EAAE,eAAe,CAAC,OAAO;oBACvD,YAAY,EAAE,eAAe,CAAC,IAAI;oBAClC,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;oBAChE,cAAc,EAAE,MAAM;oBACtB,mBAAmB,EAAE,WAAW;oBAChC,cAAc,EAAE,MAAM,CAAC,EAAE;oBACzB,mBAAmB,EAAE,MAAM,CAAC,cAAc;oBAC1C,gBAAgB,EAAE,YAAY,CAAC,IAAI;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,eAAe,GAA4C,cAAc,CAAC;QAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YAC1C,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YACzC,eAAe,GAAG,MAAM,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,WAAW,EAAE,MAAM,CAAC,IAAI;YACxB,gBAAgB,EAAE,MAAM,CAAC,OAAO;YAChC,eAAe,EAAE,cAAc;YAC/B,gBAAgB,EAAE,eAAe;YACjC,cAAc,EAAE,OAAO,CAAC,MAAM;YAC9B,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK;QACL,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAsB;IACpD,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,IAAyB;IAEzB,OAAO;QACL,WAAW,EAAE,SAAS;QACtB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CAAC,GAAe;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACpF,OAAO;QACL,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAC1C,IAAyB,EACzB,SAA4C;IAE5C,OAAO;QACL,WAAW,EAAE,SAAS;QACtB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EACJ,SAAS,KAAK,QAAQ;YACpB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,KAAK,kBAAkB;gBAChC,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,SAAS;QACjB,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAC1C,IAAyB,EACzB,KAAc;IAEd,OAAO;QACL,WAAW,EAAE,SAAS;QACtB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,QAAQ;QAChB,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CAAC,KAAc;IACtD,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACxE,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3E,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAClF,IAAI,UAAU,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBAC7C,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACxD,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAsB,EACtB,OAA8B;IAE9B,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC/D,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAsB,EACtB,OAA8B;IAE9B,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,EAAE,EAAE,IAAI,CAAC,SAAS;QAClB,IAAI,EAAE,IAAI,CAAC,WAAW;QACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,OAAe;IACjD,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAI,KAAU,EAAE,KAAiC;IACpE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAe,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAA0B;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAA4B,CAAC,CAAC;IAC/D,OAAO,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,GAA0B;IAC7C,OAAO,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAI,KAAuB,EAAE,GAAkB;IACjE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,KAAU,EACV,UAAkB,EAClB,MAA8C;IAE9C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,UAAU,SAAS;QACtB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,SAAS,CAAC;YAC/B,SAAS,IAAI,CAAC,CAAC;YACf,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAM,EAAE,YAAY,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAyB,EACzB,SAAkC,EAClC,QAAiC;IAEjC,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IAEpF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,OAAO,GACX,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,OAAO;YACL,GAAG,sBAAsB,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,0BAA0B;oBAChC,OAAO,EAAE,mDAAmD;iBAC7D;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,OAS5B;IACC,MAAM,OAAO,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IAC1D,IAAI,MAA0C,CAAC;IAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,+BAA+B,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM;YACJ,OAAO,CAAC,YAAY,GAAG,CAAC;gBACtB,CAAC,CAAC,8CAA8C;gBAChD,CAAC,CAAC,gCAAgC,CAAC;IACzC,CAAC;IAED,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QAC3C,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB;QAC5C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,EAAE;YACN,UAAU,EAAE,OAAO,CAAC,YAAY;YAChC,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,aAAa,EAAE,OAAO,CAAC,YAAY;SACpC;QACD,SAAS,EAAE;YACT,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,eAAe,EAAE,OAAO,CAAC,OAAO;YAChC,MAAM,EAAE;gBACN,KAAK,EAAE,OAAO,CAAC,YAAY;gBAC3B,KAAK,EAAE,OAAO,CAAC,YAAY;gBAC3B,OAAO,EAAE,CAAC;aACX;YACD,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,yBAAyB;SACvC;QACD,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,OAAO,CAAC,UAAU;QAC/B,KAAK,EAAE,IAAI;QACX,uBAAuB,EAAE,OAAO,CAAC,YAAY;QAC7C,KAAK,EAAE;YACL,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY;YACxC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa;YAC1C,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,2BAA2B;YACtD,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,2BAA2B;SAClD;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAMnC;IACC,OAAO,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC;gBACjD,KAAK,EAAE,WAAW;gBAClB,EAAE,EAAE,IAAI,CAAC,SAAS;gBAClB,OAAO,EAAE,IAAI,CAAC,eAAe;gBAC7B,OAAO,EAAE,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnD,SAAS,EACP,IAAI,CAAC,cAAc,KAAK,kBAAkB;oBACxC,CAAC,CAAC,oBAAoB;oBACtB,CAAC,CAAC,wBAAwB;gBAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;YACH,OAAO,mCAAmC,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mCAAmC,CAAC,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0C;IAE1C,MAAM,YAAY,GAAG,0BAA0B,CAC7C,OAAO,CAAC,YAAY,EACpB,2CAA2C,CAC5C,CAAC;IACF,MAAM,eAAe,GAAG,0BAA0B,CAChD,OAAO,CAAC,eAAe,EACvB,8CAA8C,CAC/C,CAAC;IACF,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAAC,kEAAkE,EAAE;YACrF,IAAI,EAAE,sCAAsC;YAC5C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,oBAAoB,GAAG,0BAA0B,CACrD,OAAO,CAAC,oBAAoB,EAC5B,+CAA+C,CAChD,CAAC;IACF,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9E,MAAM,oBAAoB,GAAG,wBAAwB,CACnD,OAAO,CAAC,oBAAoB,EAC5B,0BAA0B,EAC1B,8CAA8C,CAC/C,CAAC;IACF,MAAM,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,KAAK,KAAK,CAAC;IACxE,MAAM,IAAI,GAAiC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAC7D,MAAM,YAAY,GAChB,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;QACrE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE;QAC7B,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,iBAAiB;QACzB,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;QAC7C,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,oBAAoB;QAC5B,WAAW,EAAE,sBAAsB;QACnC,gBAAgB,EAAE,QAAQ,CAAC,YAAY;QACvC,cAAc,EAAE,QAAQ,CAAC,cAAc;KACxC,CAAC,CAAC;IAEH,iBAAiB,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACnE,iBAAiB,CAAC,KAAK,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC/E,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnE,iBAAiB,CAAC,KAAK,CAAC,2BAA2B,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACpF,sBAAsB,CAAC,KAAK,CAAC,4BAA4B,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAE9F,IAAI,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC7D,IAAI,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAEjF,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,yBAAyB,IAAI,qBAAqB,CAAC;QAC/E,MAAM,WAAW,CAAC;YAChB,SAAS,EAAE,KAAK,CAAC,kBAAkB;YACnC,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,UAAU;YACV,YAAY;YACZ,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG;YACH,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;SACzD,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAA4B,CAAC;QACpF,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAA4B,CAAC;QACrF,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC1C,sBAAsB,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,mBAAmB,CAAC;YACvC,GAAG;YACH,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM;YAC1C,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,UAAU;YACV,YAAY;YACZ,KAAK;SACN,CAAC,CAAC;QACH,iBAAiB,CAAC,KAAK,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,QAAQ,CAChB,+EAA+E,EAC/E;gBACE,IAAI,EAAE,8CAA8C;gBACpD,QAAQ,EAAE,CAAC;aACZ,CACF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,UAAU,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,QAAQ,CAChB,qHAAqH,EACrH;gBACE,IAAI,EAAE,gDAAgD;gBACtD,QAAQ,EAAE,CAAC;aACZ,CACF,CAAC;QACJ,CAAC;QAED,cAAc,GAAG,MAAM,oBAAoB,CAAC;YAC1C,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,UAAU;YACV,GAAG,EAAE,UAAU;YACf,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAChB,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;SACxF,MAAM;QACT,cAAc,CAAC,MAAM,CACnB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,MAAM,KAAK,UAAU;YAC5B,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,MAAM,CAAC,MAAM,KAAK,kBAAkB,CACvC,CAAC,MAAM,CAAC;IACX,MAAM,YAAY,GAChB,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;QACjE,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IAEvE,MAAM,MAAM,GAAkC;QAC5C,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC;QAC5C,IAAI;QACJ,cAAc,EAAE,YAAY;QAC5B,iBAAiB,EAAE,eAAe;QAClC,uBAAuB,EAAE,oBAAoB;QAC7C,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,iBAAiB;QACtC,sBAAsB,EAAE,oBAAoB;QAC5C,yBAAyB,EAAE,sBAAsB;QACjD,MAAM,EAAE;YACN,eAAe,EAAE,aAAa,CAAC,MAAM;YACrC,kBAAkB,EAAE,gBAAgB,CAAC,MAAM;YAC3C,kBAAkB,EAAE,gBAAgB,CAAC,MAAM;YAC3C,kBAAkB,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM;YAChD,qBAAqB,EAAE,iBAAiB,CAAC,YAAY,CAAC,MAAM;YAC5D,2BAA2B,EAAE,QAAQ,CAAC,oBAAoB,CAAC,MAAM;YACjE,2BAA2B,EAAE,iBAAiB,CAAC,eAAe,CAAC,MAAM;YACrE,oBAAoB,EAAE,WAAW,CAAC,MAAM;YACxC,uBAAuB,EAAE,cAAc,CAAC,MAAM;YAC9C,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,YAAY;SAC5B;QACD,WAAW,EAAE,UAAU;QACvB,uBAAuB,EAAE,YAAY;QACrC,KAAK;QACL,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,cAAc;QAC/B,2BAA2B,EAAE,QAAQ,CAAC,oBAAoB;KAC3D,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB;IACjB,0BAA0B;IAC1B,cAAc;IACd,UAAU;IACV,UAAU;IACV,wBAAwB;IACxB,iBAAiB;IACjB,gBAAgB;IAChB,wBAAwB;IACxB,wBAAwB;IACxB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;IACvB,gCAAgC;IAChC,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;IACnB,kBAAkB;IAClB,WAAW;IACX,gCAAgC;IAChC,mCAAmC;IACnC,mCAAmC;IACnC,gCAAgC;IAChC,oBAAoB;IACpB,oBAAoB;CACrB,CAAC","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n datasetPayloadFromRow,\n deepGet,\n extractFlowRecord,\n isRecord,\n listify,\n loadRowsFromFile,\n type FlowRecord,\n type JsonRecord,\n} from './flow-governance.js';\nimport {\n runFlowPublishVersion,\n type FlowPublishVersionReport,\n type RunFlowPublishVersionOptions,\n} from './flow-publish-version.js';\nimport type { FetchLike } from './http.js';\nimport { getRuntimeRuleset } from './runtime-rulesets.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedWriteOperation,\n} from './supabase-json-ordered-write.js';\n\nconst DEFAULT_MAX_WORKERS = 4;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\n\nexport type FlowPublishPolicy = 'skip' | 'append_only_bump' | 'upsert_current_version';\nexport type ProcessPublishPolicy = FlowPublishPolicy;\n\ntype FlowPublishVersionCompatMode = 'dry_run' | 'commit';\n\ntype FlowVersionMapEntry = {\n id: string;\n source_version: string;\n target_version: string;\n};\n\ntype ProcessIdentity = {\n id: string;\n version: string;\n name: string;\n};\n\ntype FlowIndex = {\n byUuidVersion: Record<string, FlowRecord>;\n};\n\ntype SkippedUnchangedFlowRow = {\n entity_type: 'flow';\n entity_id: string;\n entity_name: string;\n version: string;\n reason: 'unchanged_vs_original_rows_file';\n};\n\ntype PreparedFlowPlan = {\n entity_type: 'flow';\n entity_id: string;\n entity_name: string;\n original_version: string;\n publish_version: string;\n version_strategy: 'keep_current' | 'bump';\n publish_policy: FlowPublishPolicy;\n row: JsonRecord;\n};\n\ntype PreparedProcessPlan = {\n entity_type: 'process';\n entity_id: string;\n entity_name: string;\n original_version: string;\n publish_version: string;\n version_strategy: 'keep_current' | 'bump';\n publish_policy: ProcessPublishPolicy;\n row: JsonRecord;\n};\n\ntype ProcessFlowRefRewriteEvidence = {\n process_id: string;\n process_version_before_publish: string;\n process_name: string;\n exchange_internal_id: string;\n source_flow_id: string;\n source_flow_version: string;\n target_flow_id: string;\n target_flow_version: string;\n target_flow_name: string;\n};\n\ntype FlowPublishSuccessRow = {\n id: string;\n version: string;\n operation:\n | 'would_insert'\n | 'would_update_existing'\n | 'insert'\n | 'update_existing'\n | 'update_after_insert_error';\n};\n\ntype FlowPublishFailureReason = {\n validator: string;\n stage: string;\n path: string;\n message: string;\n code: string;\n visible_user_id?: string;\n visible_state_code?: string;\n};\n\ntype FlowPublishFailureRow = {\n id: unknown;\n user_id?: unknown;\n json_ordered: JsonRecord;\n reason: FlowPublishFailureReason[];\n state_code?: unknown;\n};\n\ntype FlowReviewedPublishFiles = {\n prepared_flow_rows: string;\n prepared_process_rows: string;\n flow_version_map: string;\n skipped_unchanged_flow_rows: string;\n process_ref_rewrite_evidence: string;\n success_list: string;\n remote_failed: string;\n flow_publish_version_report: string;\n report: string;\n};\n\nexport type FlowReviewedPublishRowReport = {\n entity_type: 'flow';\n id: string;\n name: string;\n original_version: string;\n publish_version: string;\n publish_policy: FlowPublishPolicy;\n version_strategy: 'keep_current' | 'bump';\n status: 'prepared' | 'inserted' | 'updated' | 'failed';\n operation?: FlowPublishSuccessRow['operation'];\n error?: unknown;\n};\n\nexport type FlowReviewedPublishProcessRowReport = {\n entity_type: 'process';\n id: string;\n name: string;\n original_version: string;\n publish_version: string;\n publish_policy: ProcessPublishPolicy;\n version_strategy: 'keep_current' | 'bump';\n status: 'prepared' | 'inserted' | 'updated' | 'skipped_existing' | 'failed';\n operation?: SupabaseJsonOrderedWriteOperation;\n error?: unknown;\n};\n\nexport type FlowReviewedPublishDataReport = {\n schema_version: 1;\n generated_at_utc: string;\n status:\n | 'prepared_flow_publish_reviewed_data'\n | 'completed_flow_publish_reviewed_data'\n | 'completed_flow_publish_reviewed_data_with_failures';\n mode: FlowPublishVersionCompatMode;\n flow_rows_file: string | null;\n process_rows_file: string | null;\n original_flow_rows_file: string | null;\n out_dir: string;\n flow_publish_policy: FlowPublishPolicy;\n process_publish_policy: ProcessPublishPolicy;\n rewrite_process_flow_refs: boolean;\n counts: {\n input_flow_rows: number;\n input_process_rows: number;\n original_flow_rows: number;\n prepared_flow_rows: number;\n prepared_process_rows: number;\n skipped_unchanged_flow_rows: number;\n rewritten_process_flow_refs: number;\n flow_publish_reports: number;\n process_publish_reports: number;\n success_count: number;\n failure_count: number;\n };\n max_workers: number;\n target_user_id_override: string | null;\n files: FlowReviewedPublishFiles;\n flow_reports: FlowReviewedPublishRowReport[];\n process_reports: FlowReviewedPublishProcessRowReport[];\n skipped_unchanged_flow_rows: SkippedUnchangedFlowRow[];\n};\n\nexport type RunFlowReviewedPublishDataOptions = {\n flowRowsFile?: string | null;\n originalFlowRowsFile?: string | null;\n processRowsFile?: string | null;\n outDir: string;\n flowPublishPolicy?: FlowPublishPolicy;\n processPublishPolicy?: ProcessPublishPolicy;\n rewriteProcessFlowRefs?: boolean;\n commit?: boolean;\n maxWorkers?: number;\n targetUserId?: string | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateFlowPayloadImpl?: RunFlowPublishVersionOptions['validateFlowPayloadImpl'];\n runFlowPublishVersionImpl?: (\n options: RunFlowPublishVersionOptions,\n ) => Promise<FlowPublishVersionReport>;\n};\n\nfunction assert_input_file(\n inputFile: string,\n code: string,\n message = 'Missing required input file value.',\n): string {\n if (!inputFile) {\n throw new CliError(message, {\n code,\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code,\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_optional_input_file(\n inputFile: string | null | undefined,\n code: string,\n): string | null {\n if (!inputFile) {\n return null;\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code,\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_PUBLISH_REVIEWED_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n return path.resolve(outDir);\n}\n\nfunction clone_json<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction json_equal(left: unknown, right: unknown): boolean {\n if (left === right) {\n return true;\n }\n\n if (Array.isArray(left) || Array.isArray(right)) {\n if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {\n return false;\n }\n\n return left.every((value, index) => json_equal(value, right[index]));\n }\n\n if (!isRecord(left) || !isRecord(right)) {\n return false;\n }\n\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n return leftKeys.every(\n (key, index) => key === rightKeys[index] && json_equal(left[key], right[key]),\n );\n}\n\nfunction normalize_publish_policy(\n value: FlowPublishPolicy | string | undefined,\n label = '--flow-publish-policy',\n code = 'FLOW_PUBLISH_REVIEWED_POLICY_INVALID',\n): FlowPublishPolicy {\n if (value === undefined || value === '') {\n return 'append_only_bump';\n }\n\n if (value === 'skip' || value === 'append_only_bump' || value === 'upsert_current_version') {\n return value;\n }\n\n throw new CliError(\n `Expected ${label} to be one of: skip, append_only_bump, upsert_current_version.`,\n {\n code,\n exitCode: 2,\n },\n );\n}\n\nfunction bump_ilcd_version(version: string): string {\n const parts = String(version || '')\n .trim()\n .split('.');\n if (parts.length !== 3 || !parts.every((part) => /^\\d+$/u.test(part))) {\n return '01.01.001';\n }\n\n const [head, middle, tail] = parts;\n return `${Number.parseInt(head, 10).toString().padStart(head.length, '0')}.${Number.parseInt(\n middle,\n 10,\n )\n .toString()\n .padStart(middle.length, '0')}.${(Number.parseInt(tail, 10) + 1)\n .toString()\n .padStart(tail.length, '0')}`;\n}\n\nfunction set_flow_version(row: JsonRecord, newVersion: string): void {\n const payload = datasetPayloadFromRow(row);\n const dataset = isRecord(payload.flowDataSet) ? payload.flowDataSet : payload;\n const administrativeInformation = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n if (!isRecord(dataset.administrativeInformation)) {\n dataset.administrativeInformation = administrativeInformation;\n }\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n if (!isRecord(administrativeInformation.publicationAndOwnership)) {\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n }\n publicationAndOwnership['common:dataSetVersion'] = newVersion;\n row.version = newVersion;\n}\n\nfunction process_dataset_from_row(row: JsonRecord): JsonRecord {\n const payload = datasetPayloadFromRow(row);\n return isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n}\n\nfunction extract_process_identity(row: JsonRecord): ProcessIdentity {\n const dataset = process_dataset_from_row(row);\n const info = deepGet(dataset, ['processInformation', 'dataSetInformation'], {}) as JsonRecord;\n const id = coerceText(row.id) || coerceText(info['common:UUID']);\n const version =\n coerceText(row.version) ||\n coerceText(\n deepGet(dataset, [\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n ) ||\n '01.00.000';\n const nameBlock = deepGet(info, ['name', 'baseName']) ?? deepGet(info, ['name']) ?? info.name;\n const name = coerceText(nameBlock) || id;\n\n return {\n id,\n version,\n name,\n };\n}\n\nfunction exchange_records(processRow: JsonRecord): JsonRecord[] {\n const dataset = process_dataset_from_row(processRow);\n return listify(deepGet(dataset, ['exchanges', 'exchange'], [])).filter(isRecord);\n}\n\nfunction set_process_version(row: JsonRecord, newVersion: string): void {\n const payload = datasetPayloadFromRow(row);\n const dataset = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const administrativeInformation = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n if (!isRecord(dataset.administrativeInformation)) {\n dataset.administrativeInformation = administrativeInformation;\n }\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n if (!isRecord(administrativeInformation.publicationAndOwnership)) {\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n }\n publicationAndOwnership['common:dataSetVersion'] = newVersion;\n row.version = newVersion;\n}\n\nfunction build_flow_index(rows: JsonRecord[]): FlowIndex {\n const byUuidVersion: Record<string, FlowRecord> = {};\n\n for (const row of rows) {\n const record = extractFlowRecord(row);\n byUuidVersion[`${record.id}@${record.version}`] = record;\n }\n\n return {\n byUuidVersion,\n };\n}\n\nfunction build_local_dataset_uri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n flow: 'flows',\n 'flow data set': 'flows',\n };\n const folder = folderMap[datasetKind.trim().toLowerCase()] ?? 'datasets';\n const versionText = version.trim() || '01.00.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction preserve_short_description_shape(existing: unknown, target: JsonRecord): unknown {\n if (Array.isArray(existing)) {\n if (existing.length > 0 && isRecord(existing[0])) {\n const patched = clone_json(existing[0]);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return [patched];\n }\n return [clone_json(target)];\n }\n\n if (isRecord(existing)) {\n const patched = clone_json(existing);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return patched;\n }\n\n return clone_json(target);\n}\n\nfunction flow_reference_from_record(record: FlowRecord): JsonRecord {\n const targetShortDescription =\n record.shortDescription ??\n ({\n '@xml:lang': 'en',\n '#text': record.name,\n } satisfies JsonRecord);\n\n return {\n '@type': 'flow data set',\n '@refObjectId': record.id,\n '@version': record.version,\n '@uri': build_local_dataset_uri('flow data set', record.id, record.version),\n 'common:shortDescription': clone_json(targetShortDescription),\n };\n}\n\nfunction patched_flow_reference(currentRef: unknown, record: FlowRecord): JsonRecord {\n const current = isRecord(currentRef) ? clone_json(currentRef) : {};\n const target = flow_reference_from_record(record);\n\n current['@type'] = coerceText(current['@type']) || coerceText(target['@type']);\n current['@refObjectId'] = target['@refObjectId'];\n current['@version'] = target['@version'];\n current['@uri'] = target['@uri'];\n current['common:shortDescription'] = preserve_short_description_shape(\n current['common:shortDescription'],\n target['common:shortDescription'] as JsonRecord,\n );\n\n return current;\n}\n\nfunction build_output_files(outDir: string): FlowReviewedPublishFiles {\n return {\n prepared_flow_rows: path.join(outDir, 'prepared-flow-rows.json'),\n prepared_process_rows: path.join(outDir, 'prepared-process-rows.json'),\n flow_version_map: path.join(outDir, 'flow-version-map.json'),\n skipped_unchanged_flow_rows: path.join(outDir, 'skipped-unchanged-flow-rows.json'),\n process_ref_rewrite_evidence: path.join(outDir, 'process-flow-ref-rewrite-evidence.jsonl'),\n success_list: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),\n remote_failed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),\n flow_publish_version_report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),\n report: path.join(outDir, 'publish-report.json'),\n };\n}\n\nfunction status_from_mode(\n mode: FlowPublishVersionCompatMode,\n failureCount: number,\n): FlowReviewedPublishDataReport['status'] {\n if (mode === 'dry_run') {\n return 'prepared_flow_publish_reviewed_data';\n }\n\n return failureCount > 0\n ? 'completed_flow_publish_reviewed_data_with_failures'\n : 'completed_flow_publish_reviewed_data';\n}\n\nfunction prepare_flow_rows(options: {\n rows: JsonRecord[];\n policy: FlowPublishPolicy;\n originalRows: JsonRecord[];\n}): {\n preparedRows: JsonRecord[];\n plans: PreparedFlowPlan[];\n flowVersionMap: Record<string, FlowVersionMapEntry>;\n skippedUnchangedRows: SkippedUnchangedFlowRow[];\n} {\n if (options.policy === 'skip') {\n return {\n preparedRows: [],\n plans: [],\n flowVersionMap: {},\n skippedUnchangedRows: [],\n };\n }\n\n const originalMap = new Map<string, JsonRecord>();\n for (const row of options.originalRows) {\n const record = extractFlowRecord(row);\n if (record.id && record.version) {\n originalMap.set(`${record.id}@${record.version}`, row);\n }\n }\n\n const preparedRows: JsonRecord[] = [];\n const plans: PreparedFlowPlan[] = [];\n const flowVersionMap: Record<string, FlowVersionMapEntry> = {};\n const skippedUnchangedRows: SkippedUnchangedFlowRow[] = [];\n\n for (const row of options.rows) {\n const working = clone_json(row);\n const record = extractFlowRecord(working);\n const originalRow =\n record.id && record.version ? originalMap.get(`${record.id}@${record.version}`) : undefined;\n\n if (originalRow && json_equal(datasetPayloadFromRow(originalRow), datasetPayloadFromRow(row))) {\n skippedUnchangedRows.push({\n entity_type: 'flow',\n entity_id: record.id,\n entity_name: record.name,\n version: record.version,\n reason: 'unchanged_vs_original_rows_file',\n });\n continue;\n }\n\n let publishVersion = record.version;\n let versionStrategy: PreparedFlowPlan['version_strategy'] = 'keep_current';\n if (options.policy === 'append_only_bump') {\n publishVersion = bump_ilcd_version(record.version);\n set_flow_version(working, publishVersion);\n versionStrategy = 'bump';\n if (record.id && record.version) {\n flowVersionMap[`${record.id}@${record.version}`] = {\n id: record.id,\n source_version: record.version,\n target_version: publishVersion,\n };\n }\n }\n\n preparedRows.push(working);\n plans.push({\n entity_type: 'flow',\n entity_id: record.id,\n entity_name: record.name,\n original_version: record.version,\n publish_version: publishVersion,\n version_strategy: versionStrategy,\n publish_policy: options.policy,\n row: working,\n });\n }\n\n return {\n preparedRows,\n plans,\n flowVersionMap,\n skippedUnchangedRows,\n };\n}\n\nfunction prepare_process_rows(options: {\n rows: JsonRecord[];\n policy: ProcessPublishPolicy;\n rewriteRefs: boolean;\n preparedFlowRows: JsonRecord[];\n flowVersionMap: Record<string, FlowVersionMapEntry>;\n}): {\n preparedRows: JsonRecord[];\n plans: PreparedProcessPlan[];\n rewriteEvidence: ProcessFlowRefRewriteEvidence[];\n} {\n if (options.policy === 'skip') {\n return {\n preparedRows: [],\n plans: [],\n rewriteEvidence: [],\n };\n }\n\n const preparedRows = options.rows.map((row) => clone_json(row));\n const rewriteEvidence: ProcessFlowRefRewriteEvidence[] = [];\n\n if (\n options.rewriteRefs &&\n preparedRows.length > 0 &&\n options.preparedFlowRows.length > 0 &&\n Object.keys(options.flowVersionMap).length > 0\n ) {\n const targetIndex = build_flow_index(options.preparedFlowRows).byUuidVersion;\n\n for (const row of preparedRows) {\n const processIdentity = extract_process_identity(row);\n\n for (const exchange of exchange_records(row)) {\n const currentRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : null;\n if (!currentRef) {\n continue;\n }\n\n const flowId = coerceText(currentRef['@refObjectId']);\n const flowVersion = coerceText(currentRef['@version']);\n const mapped = options.flowVersionMap[`${flowId}@${flowVersion}`];\n if (!mapped) {\n continue;\n }\n\n const targetRecord = targetIndex[`${mapped.id}@${mapped.target_version}`];\n if (!targetRecord) {\n continue;\n }\n\n exchange.referenceToFlowDataSet = patched_flow_reference(currentRef, targetRecord);\n rewriteEvidence.push({\n process_id: processIdentity.id,\n process_version_before_publish: processIdentity.version,\n process_name: processIdentity.name,\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n source_flow_id: flowId,\n source_flow_version: flowVersion,\n target_flow_id: mapped.id,\n target_flow_version: mapped.target_version,\n target_flow_name: targetRecord.name,\n });\n }\n }\n }\n\n const plans: PreparedProcessPlan[] = [];\n for (const row of preparedRows) {\n const record = extract_process_identity(row);\n let publishVersion = record.version;\n let versionStrategy: PreparedProcessPlan['version_strategy'] = 'keep_current';\n if (options.policy === 'append_only_bump') {\n publishVersion = bump_ilcd_version(record.version);\n set_process_version(row, publishVersion);\n versionStrategy = 'bump';\n }\n\n plans.push({\n entity_type: 'process',\n entity_id: record.id,\n entity_name: record.name,\n original_version: record.version,\n publish_version: publishVersion,\n version_strategy: versionStrategy,\n publish_policy: options.policy,\n row,\n });\n }\n\n return {\n preparedRows,\n plans,\n rewriteEvidence,\n };\n}\n\nfunction build_local_row_report(plan: PreparedFlowPlan): FlowReviewedPublishRowReport {\n return {\n entity_type: 'flow',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'prepared',\n };\n}\n\nfunction build_local_process_row_report(\n plan: PreparedProcessPlan,\n): FlowReviewedPublishProcessRowReport {\n return {\n entity_type: 'process',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'prepared',\n };\n}\n\nfunction process_publish_payload_from_row(row: JsonRecord): JsonRecord {\n const payload = datasetPayloadFromRow(row);\n const dataset = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n return {\n processDataSet: clone_json(dataset),\n };\n}\n\nfunction build_process_commit_success_report(\n plan: PreparedProcessPlan,\n operation: SupabaseJsonOrderedWriteOperation,\n): FlowReviewedPublishProcessRowReport {\n return {\n entity_type: 'process',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status:\n operation === 'insert'\n ? 'inserted'\n : operation === 'skipped_existing'\n ? 'skipped_existing'\n : 'updated',\n operation,\n };\n}\n\nfunction build_process_commit_failure_report(\n plan: PreparedProcessPlan,\n error: unknown,\n): FlowReviewedPublishProcessRowReport {\n return {\n entity_type: 'process',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'failed',\n error,\n };\n}\n\nfunction normalize_process_commit_failure(error: unknown): unknown {\n if (error instanceof CliError && error.code === 'REMOTE_REQUEST_FAILED') {\n if (typeof error.details === 'string' && error.details.trim()) {\n return error.details;\n }\n\n if (error.message.startsWith('HTTP 0 returned') && isRecord(error.details)) {\n const detailMessage =\n typeof error.details.message === 'string' ? error.details.message.trim() : '';\n const normalized = detailMessage.replace(/^(?:FetchError|Error):\\s*/u, '').trim();\n if (normalized && normalized !== 'undefined') {\n return normalized;\n }\n }\n }\n\n return error instanceof Error ? error.message : error;\n}\n\nfunction build_commit_success_report(\n plan: PreparedFlowPlan,\n success: FlowPublishSuccessRow,\n): FlowReviewedPublishRowReport {\n return {\n entity_type: 'flow',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: success.operation === 'insert' ? 'inserted' : 'updated',\n operation: success.operation,\n };\n}\n\nfunction build_commit_failure_report(\n plan: PreparedFlowPlan,\n failure: FlowPublishFailureRow,\n): FlowReviewedPublishRowReport {\n return {\n entity_type: 'flow',\n id: plan.entity_id,\n name: plan.entity_name,\n original_version: plan.original_version,\n publish_version: plan.publish_version,\n publish_policy: plan.publish_policy,\n version_strategy: plan.version_strategy,\n status: 'failed',\n error: failure.reason,\n };\n}\n\nfunction build_flow_key(id: string, version: string): string | null {\n if (!id || !version) {\n return null;\n }\n return `${id}@${version}`;\n}\n\nfunction queue_by_key<T>(items: T[], keyFn: (item: T) => string | null): Map<string, T[]> {\n const queued = new Map<string, T[]>();\n\n for (const item of items) {\n const key = keyFn(item);\n if (!key) {\n continue;\n }\n const queue = queued.get(key) ?? [];\n queue.push(item);\n queued.set(key, queue);\n }\n\n return queued;\n}\n\nfunction failure_key(row: FlowPublishFailureRow): string | null {\n const record = extractFlowRecord(row as unknown as JsonRecord);\n return build_flow_key(record.id, record.version);\n}\n\nfunction success_key(row: FlowPublishSuccessRow): string | null {\n return build_flow_key(row.id, row.version);\n}\n\nfunction shift_queue<T>(queue: Map<string, T[]>, key: string | null): T | null {\n if (!key) {\n return null;\n }\n\n const items = queue.get(key);\n if (!items?.length) {\n return null;\n }\n\n const [first, ...rest] = items;\n if (rest.length) {\n queue.set(key, rest);\n } else {\n queue.delete(key);\n }\n return first ?? null;\n}\n\nasync function map_with_concurrency<T, R>(\n items: T[],\n maxWorkers: number,\n worker: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n const workerCount = Math.min(Math.max(1, maxWorkers), Math.max(items.length, 1));\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (true) {\n const currentIndex = nextIndex;\n nextIndex += 1;\n if (currentIndex >= items.length) {\n return;\n }\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: workerCount }, () => runWorker()));\n return results;\n}\n\nfunction map_commit_reports(\n plans: PreparedFlowPlan[],\n successes: FlowPublishSuccessRow[],\n failures: FlowPublishFailureRow[],\n): FlowReviewedPublishRowReport[] {\n const successQueue = queue_by_key(successes, success_key);\n const failureQueue = queue_by_key(failures, failure_key);\n const unkeyedFailures = failures.filter((failure) => failure_key(failure) === null);\n\n return plans.map((plan) => {\n const key = build_flow_key(plan.entity_id, plan.publish_version);\n const success = shift_queue(successQueue, key);\n if (success) {\n return build_commit_success_report(plan, success);\n }\n\n const failure =\n shift_queue(failureQueue, key) ?? (key ? null : (unkeyedFailures.shift() ?? null));\n if (failure) {\n return build_commit_failure_report(plan, failure);\n }\n\n return {\n ...build_local_row_report(plan),\n status: 'failed',\n error: [\n {\n code: 'UNMATCHED_PUBLISH_RESULT',\n message: 'Publish result was missing for prepared flow row.',\n },\n ],\n };\n });\n}\n\nfunction build_compat_report(options: {\n now: Date;\n mode: FlowPublishVersionCompatMode;\n preparedRows: number;\n successCount: number;\n failureCount: number;\n maxWorkers: number;\n targetUserId: string | null;\n files: FlowReviewedPublishFiles;\n}): FlowPublishVersionReport {\n const ruleset = getRuntimeRuleset('flow-publish/default');\n let status: FlowPublishVersionReport['status'];\n if (options.mode === 'dry_run') {\n status = 'prepared_flow_publish_version';\n } else {\n status =\n options.failureCount > 0\n ? 'completed_flow_publish_version_with_failures'\n : 'completed_flow_publish_version';\n }\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n status,\n mode: options.mode,\n input_file: options.files.prepared_flow_rows,\n out_dir: path.dirname(options.files.report),\n counts: {\n total_rows: options.preparedRows,\n success_count: options.successCount,\n failure_count: options.failureCount,\n },\n flow_gate: {\n status: 'passed',\n ruleset_id: ruleset.id,\n ruleset_version: ruleset.version,\n counts: {\n total: options.preparedRows,\n valid: options.preparedRows,\n invalid: 0,\n },\n blocker_count: 0,\n next_action: 'query_remote_write_plan',\n },\n operation_counts: {},\n max_workers: options.maxWorkers,\n limit: null,\n target_user_id_override: options.targetUserId,\n files: {\n success_list: options.files.success_list,\n remote_failed: options.files.remote_failed,\n gate_report: options.files.flow_publish_version_report,\n report: options.files.flow_publish_version_report,\n },\n };\n}\n\nasync function commit_process_plans(options: {\n plans: PreparedProcessPlan[];\n maxWorkers: number;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}): Promise<FlowReviewedPublishProcessRowReport[]> {\n return map_with_concurrency(options.plans, options.maxWorkers, async (plan) => {\n try {\n const result = await syncSupabaseJsonOrderedRecord({\n table: 'processes',\n id: plan.entity_id,\n version: plan.publish_version,\n payload: process_publish_payload_from_row(plan.row),\n writeMode:\n plan.publish_policy === 'append_only_bump'\n ? 'append_only_insert'\n : 'upsert_current_version',\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n return build_process_commit_success_report(plan, result.operation);\n } catch (error) {\n return build_process_commit_failure_report(plan, normalize_process_commit_failure(error));\n }\n });\n}\n\nexport async function runFlowReviewedPublishData(\n options: RunFlowReviewedPublishDataOptions,\n): Promise<FlowReviewedPublishDataReport> {\n const flowRowsFile = assert_optional_input_file(\n options.flowRowsFile,\n 'FLOW_PUBLISH_REVIEWED_FLOW_ROWS_NOT_FOUND',\n );\n const processRowsFile = assert_optional_input_file(\n options.processRowsFile,\n 'FLOW_PUBLISH_REVIEWED_PROCESS_ROWS_NOT_FOUND',\n );\n if (!flowRowsFile && !processRowsFile) {\n throw new CliError('Provide at least one of --flow-rows-file or --process-rows-file.', {\n code: 'FLOW_PUBLISH_REVIEWED_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n const originalFlowRowsFile = assert_optional_input_file(\n options.originalFlowRowsFile,\n 'FLOW_PUBLISH_REVIEWED_ORIGINAL_ROWS_NOT_FOUND',\n );\n const outDir = assert_out_dir(options.outDir);\n const flowPublishPolicy = normalize_publish_policy(options.flowPublishPolicy);\n const processPublishPolicy = normalize_publish_policy(\n options.processPublishPolicy,\n '--process-publish-policy',\n 'FLOW_PUBLISH_REVIEWED_PROCESS_POLICY_INVALID',\n );\n const rewriteProcessFlowRefs = options.rewriteProcessFlowRefs !== false;\n const mode: FlowPublishVersionCompatMode = options.commit ? 'commit' : 'dry_run';\n const maxWorkers = options.maxWorkers ?? DEFAULT_MAX_WORKERS;\n const targetUserId =\n typeof options.targetUserId === 'string' && options.targetUserId.trim()\n ? options.targetUserId.trim()\n : null;\n const now = options.now ?? new Date();\n const files = build_output_files(outDir);\n const inputFlowRows = flowRowsFile ? loadRowsFromFile(flowRowsFile) : [];\n const originalFlowRows = originalFlowRowsFile ? loadRowsFromFile(originalFlowRowsFile) : [];\n const inputProcessRows = processRowsFile ? loadRowsFromFile(processRowsFile) : [];\n const prepared = prepare_flow_rows({\n rows: inputFlowRows,\n policy: flowPublishPolicy,\n originalRows: originalFlowRows,\n });\n const preparedProcesses = prepare_process_rows({\n rows: inputProcessRows,\n policy: processPublishPolicy,\n rewriteRefs: rewriteProcessFlowRefs,\n preparedFlowRows: prepared.preparedRows,\n flowVersionMap: prepared.flowVersionMap,\n });\n\n writeJsonArtifact(files.prepared_flow_rows, prepared.preparedRows);\n writeJsonArtifact(files.prepared_process_rows, preparedProcesses.preparedRows);\n writeJsonArtifact(files.flow_version_map, prepared.flowVersionMap);\n writeJsonArtifact(files.skipped_unchanged_flow_rows, prepared.skippedUnchangedRows);\n writeJsonLinesArtifact(files.process_ref_rewrite_evidence, preparedProcesses.rewriteEvidence);\n\n let flowReports = prepared.plans.map(build_local_row_report);\n let processReports = preparedProcesses.plans.map(build_local_process_row_report);\n\n if (options.commit && prepared.preparedRows.length > 0) {\n const publishImpl = options.runFlowPublishVersionImpl ?? runFlowPublishVersion;\n await publishImpl({\n inputFile: files.prepared_flow_rows,\n outDir,\n commit: true,\n maxWorkers,\n targetUserId,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now,\n validateFlowPayloadImpl: options.validateFlowPayloadImpl,\n });\n\n const successRows = loadRowsFromFile(files.success_list) as FlowPublishSuccessRow[];\n const failureRows = loadRowsFromFile(files.remote_failed) as FlowPublishFailureRow[];\n flowReports = map_commit_reports(prepared.plans, successRows, failureRows);\n } else {\n writeJsonArtifact(files.success_list, []);\n writeJsonLinesArtifact(files.remote_failed, []);\n const compatReport = build_compat_report({\n now,\n mode,\n preparedRows: prepared.preparedRows.length,\n successCount: 0,\n failureCount: 0,\n maxWorkers,\n targetUserId,\n files,\n });\n writeJsonArtifact(files.flow_publish_version_report, compatReport);\n }\n\n if (options.commit && preparedProcesses.preparedRows.length > 0) {\n if (!options.fetchImpl) {\n throw new CliError(\n 'Process commit requires a fetch implementation in flow publish-reviewed-data.',\n {\n code: 'FLOW_PUBLISH_REVIEWED_PROCESS_FETCH_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n const runtimeEnv = options.env;\n if (!runtimeEnv || !hasSupabaseRestRuntime(runtimeEnv)) {\n throw new CliError(\n 'Process commit requires TIANGONG_LCA_API_BASE_URL, TIANGONG_LCA_API_KEY, and TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY.',\n {\n code: 'FLOW_PUBLISH_REVIEWED_PROCESS_RUNTIME_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n processReports = await commit_process_plans({\n plans: preparedProcesses.plans,\n maxWorkers,\n env: runtimeEnv,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n const successCount =\n flowReports.filter((report) => report.status === 'inserted' || report.status === 'updated')\n .length +\n processReports.filter(\n (report) =>\n report.status === 'inserted' ||\n report.status === 'updated' ||\n report.status === 'skipped_existing',\n ).length;\n const failureCount =\n flowReports.filter((report) => report.status === 'failed').length +\n processReports.filter((report) => report.status === 'failed').length;\n\n const report: FlowReviewedPublishDataReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: status_from_mode(mode, failureCount),\n mode,\n flow_rows_file: flowRowsFile,\n process_rows_file: processRowsFile,\n original_flow_rows_file: originalFlowRowsFile,\n out_dir: outDir,\n flow_publish_policy: flowPublishPolicy,\n process_publish_policy: processPublishPolicy,\n rewrite_process_flow_refs: rewriteProcessFlowRefs,\n counts: {\n input_flow_rows: inputFlowRows.length,\n input_process_rows: inputProcessRows.length,\n original_flow_rows: originalFlowRows.length,\n prepared_flow_rows: prepared.preparedRows.length,\n prepared_process_rows: preparedProcesses.preparedRows.length,\n skipped_unchanged_flow_rows: prepared.skippedUnchangedRows.length,\n rewritten_process_flow_refs: preparedProcesses.rewriteEvidence.length,\n flow_publish_reports: flowReports.length,\n process_publish_reports: processReports.length,\n success_count: successCount,\n failure_count: failureCount,\n },\n max_workers: maxWorkers,\n target_user_id_override: targetUserId,\n files,\n flow_reports: flowReports,\n process_reports: processReports,\n skipped_unchanged_flow_rows: prepared.skippedUnchangedRows,\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_optional_input_file,\n assert_out_dir,\n clone_json,\n json_equal,\n normalize_publish_policy,\n bump_ilcd_version,\n set_flow_version,\n process_dataset_from_row,\n extract_process_identity,\n exchange_records,\n set_process_version,\n build_flow_index,\n build_local_dataset_uri,\n preserve_short_description_shape,\n flow_reference_from_record,\n patched_flow_reference,\n build_output_files,\n status_from_mode,\n prepare_flow_rows,\n prepare_process_rows,\n build_compat_report,\n map_commit_reports,\n shift_queue,\n process_publish_payload_from_row,\n build_process_commit_success_report,\n build_process_commit_failure_report,\n normalize_process_commit_failure,\n map_with_concurrency,\n commit_process_plans,\n};\n"]}
|
|
@@ -3,7 +3,9 @@ import path from 'node:path';
|
|
|
3
3
|
import { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';
|
|
4
4
|
import { buildDatasetCommandTransport, createDatasetRecord, saveDraftDatasetRecord, } from './dataset-command.js';
|
|
5
5
|
import { CliError } from './errors.js';
|
|
6
|
+
import { FLOW_SCHEMA_VALIDATOR, validateFlowPayload, } from './flow-payload-validation.js';
|
|
6
7
|
import { coerceText, deepGet, isRecord, loadRowsFromFile, } from './flow-governance.js';
|
|
8
|
+
import { getRuntimeRuleset, resolveRuntimeRuleId } from './runtime-rulesets.js';
|
|
7
9
|
import { createSupabaseDataClient, requireSupabaseRestRuntime, runSupabaseArrayQuery, } from './supabase-client.js';
|
|
8
10
|
import { createSupabaseDataRuntime } from './supabase-session.js';
|
|
9
11
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
@@ -69,6 +71,7 @@ function build_output_files(outDir) {
|
|
|
69
71
|
return {
|
|
70
72
|
successList: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),
|
|
71
73
|
remoteFailed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),
|
|
74
|
+
gateReport: path.join(outDir, 'flow-publish-version-gate-report.json'),
|
|
72
75
|
report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),
|
|
73
76
|
};
|
|
74
77
|
}
|
|
@@ -109,6 +112,129 @@ function flow_version(payload) {
|
|
|
109
112
|
}
|
|
110
113
|
return version;
|
|
111
114
|
}
|
|
115
|
+
function flow_version_gate_result(payload) {
|
|
116
|
+
const version = coerceText(deepGet(payload, [
|
|
117
|
+
'flowDataSet',
|
|
118
|
+
'administrativeInformation',
|
|
119
|
+
'publicationAndOwnership',
|
|
120
|
+
'common:dataSetVersion',
|
|
121
|
+
]));
|
|
122
|
+
if (version) {
|
|
123
|
+
return { version, issue: null };
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
version: null,
|
|
127
|
+
issue: validation_issue('flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion', 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.', 'FLOW_PUBLISH_VERSION_MISSING_VERSION'),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function validation_issue(pathValue, message, code) {
|
|
131
|
+
return {
|
|
132
|
+
path: pathValue,
|
|
133
|
+
message,
|
|
134
|
+
code,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function validate_publish_flow_row(row, index, validate) {
|
|
138
|
+
const issues = [];
|
|
139
|
+
let payload = null;
|
|
140
|
+
let id = null;
|
|
141
|
+
let version = null;
|
|
142
|
+
try {
|
|
143
|
+
payload = flow_payload(row);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const cliError = error;
|
|
147
|
+
issues.push(validation_issue('<root>', cliError.message, cliError.code || 'flow_payload_required'));
|
|
148
|
+
}
|
|
149
|
+
if (payload) {
|
|
150
|
+
id = flow_id(row, payload) || null;
|
|
151
|
+
if (!id) {
|
|
152
|
+
issues.push(validation_issue('flowDataSet.flowInformation.dataSetInformation.common:UUID', 'Flow row is missing a resolvable id/common:UUID value.', 'FLOW_PUBLISH_VERSION_ID_REQUIRED'));
|
|
153
|
+
}
|
|
154
|
+
const versionGate = flow_version_gate_result(payload);
|
|
155
|
+
version = versionGate.version;
|
|
156
|
+
if (versionGate.issue) {
|
|
157
|
+
issues.push(versionGate.issue);
|
|
158
|
+
}
|
|
159
|
+
const validation = validate(payload);
|
|
160
|
+
if (!validation.ok) {
|
|
161
|
+
issues.push(...validation.issues);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
index,
|
|
166
|
+
id,
|
|
167
|
+
version,
|
|
168
|
+
ok: issues.length === 0,
|
|
169
|
+
issue_count: issues.length,
|
|
170
|
+
issues,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function build_flow_publish_gate_report(rows, options) {
|
|
174
|
+
const ruleset = getRuntimeRuleset('flow-publish/default');
|
|
175
|
+
const validate = options.validateFlowPayloadImpl ?? validateFlowPayload;
|
|
176
|
+
const flows = rows.map((row, index) => validate_publish_flow_row(row, index, validate));
|
|
177
|
+
const invalid = flows.filter((flow) => !flow.ok).length;
|
|
178
|
+
const blockers = flows.flatMap((flow) => flow.issues.map((issue) => ({
|
|
179
|
+
code: issue.code,
|
|
180
|
+
severity: 'blocker',
|
|
181
|
+
methodology_rule_id: resolveRuntimeRuleId(ruleset.id, issue.code),
|
|
182
|
+
message: issue.message,
|
|
183
|
+
path: issue.path,
|
|
184
|
+
dataset_index: flow.index,
|
|
185
|
+
dataset_id: flow.id,
|
|
186
|
+
dataset_version: flow.version,
|
|
187
|
+
})));
|
|
188
|
+
return {
|
|
189
|
+
schema_version: 1,
|
|
190
|
+
generated_at_utc: options.now.toISOString(),
|
|
191
|
+
status: invalid > 0 ? 'blocked' : 'passed',
|
|
192
|
+
ruleset_id: ruleset.id,
|
|
193
|
+
ruleset_version: ruleset.version,
|
|
194
|
+
ruleset_source_version: ruleset.source_version,
|
|
195
|
+
ruleset_rule_ids: ruleset.rule_ids,
|
|
196
|
+
validator: FLOW_SCHEMA_VALIDATOR,
|
|
197
|
+
counts: {
|
|
198
|
+
total: flows.length,
|
|
199
|
+
valid: flows.length - invalid,
|
|
200
|
+
invalid,
|
|
201
|
+
},
|
|
202
|
+
findings: blockers,
|
|
203
|
+
blockers,
|
|
204
|
+
next_action: invalid > 0 ? 'fix_flow_payloads' : 'query_remote_write_plan',
|
|
205
|
+
flows,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function flow_gate_summary(gate) {
|
|
209
|
+
return {
|
|
210
|
+
status: gate.status,
|
|
211
|
+
ruleset_id: gate.ruleset_id,
|
|
212
|
+
ruleset_version: gate.ruleset_version,
|
|
213
|
+
counts: gate.counts,
|
|
214
|
+
blocker_count: gate.blockers.length,
|
|
215
|
+
next_action: gate.next_action,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function gate_failure_rows(rows, gate) {
|
|
219
|
+
return gate.flows.flatMap((flow) => {
|
|
220
|
+
if (flow.ok) {
|
|
221
|
+
return [];
|
|
222
|
+
}
|
|
223
|
+
const row = rows[flow.index];
|
|
224
|
+
if (!row) {
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
return [
|
|
228
|
+
failure_row(row, flow.issues.map((issue) => ({
|
|
229
|
+
validator: 'flow_schema',
|
|
230
|
+
stage: 'schema_gate',
|
|
231
|
+
path: issue.path,
|
|
232
|
+
message: issue.message,
|
|
233
|
+
code: issue.code,
|
|
234
|
+
}))),
|
|
235
|
+
];
|
|
236
|
+
});
|
|
237
|
+
}
|
|
112
238
|
function resolve_target_user_id(row, targetUserIdOverride) {
|
|
113
239
|
return normalize_token(coerceText(row.user_id)) ?? targetUserIdOverride;
|
|
114
240
|
}
|
|
@@ -447,9 +573,56 @@ export async function runFlowPublishVersion(options) {
|
|
|
447
573
|
const mode = options.commit ? 'commit' : 'dry_run';
|
|
448
574
|
const maxWorkers = to_positive_integer(options.maxWorkers, '--max-workers', 'FLOW_PUBLISH_VERSION_MAX_WORKERS_INVALID', DEFAULT_MAX_WORKERS);
|
|
449
575
|
const limit = to_non_negative_integer(options.limit, '--limit', 'FLOW_PUBLISH_VERSION_LIMIT_INVALID');
|
|
576
|
+
const now = options.now ?? new Date();
|
|
577
|
+
const files = build_output_files(outDir);
|
|
578
|
+
let rows = loadRowsFromFile(inputFile);
|
|
579
|
+
if (limit !== null && limit > 0) {
|
|
580
|
+
rows = rows.slice(0, limit);
|
|
581
|
+
}
|
|
582
|
+
if (rows.length === 0) {
|
|
583
|
+
throw new CliError(`No rows found in ${inputFile}`, {
|
|
584
|
+
code: 'FLOW_PUBLISH_VERSION_EMPTY_INPUT',
|
|
585
|
+
exitCode: 2,
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
const flowGate = build_flow_publish_gate_report(rows, {
|
|
589
|
+
now,
|
|
590
|
+
validateFlowPayloadImpl: options.validateFlowPayloadImpl,
|
|
591
|
+
});
|
|
592
|
+
await writeJsonArtifact(files.gateReport, flowGate);
|
|
593
|
+
if (flowGate.status === 'blocked') {
|
|
594
|
+
const failures = gate_failure_rows(rows, flowGate);
|
|
595
|
+
await writeJsonArtifact(files.successList, []);
|
|
596
|
+
await writeJsonLinesArtifact(files.remoteFailed, failures);
|
|
597
|
+
const report = {
|
|
598
|
+
schema_version: 1,
|
|
599
|
+
generated_at_utc: now.toISOString(),
|
|
600
|
+
status: status_from_mode(mode, failures.length),
|
|
601
|
+
mode,
|
|
602
|
+
input_file: inputFile,
|
|
603
|
+
out_dir: outDir,
|
|
604
|
+
counts: {
|
|
605
|
+
total_rows: rows.length,
|
|
606
|
+
success_count: 0,
|
|
607
|
+
failure_count: failures.length,
|
|
608
|
+
},
|
|
609
|
+
flow_gate: flow_gate_summary(flowGate),
|
|
610
|
+
operation_counts: {},
|
|
611
|
+
max_workers: maxWorkers,
|
|
612
|
+
limit,
|
|
613
|
+
target_user_id_override: normalize_token(options.targetUserId ?? null),
|
|
614
|
+
files: {
|
|
615
|
+
success_list: files.successList,
|
|
616
|
+
remote_failed: files.remoteFailed,
|
|
617
|
+
gate_report: files.gateReport,
|
|
618
|
+
report: files.report,
|
|
619
|
+
},
|
|
620
|
+
};
|
|
621
|
+
await writeJsonArtifact(files.report, report);
|
|
622
|
+
return report;
|
|
623
|
+
}
|
|
450
624
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
451
625
|
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
452
|
-
const now = options.now ?? new Date();
|
|
453
626
|
const runtime = createSupabaseDataRuntime({
|
|
454
627
|
runtime: requireSupabaseRestRuntime(options.env ?? process.env),
|
|
455
628
|
fetchImpl,
|
|
@@ -463,17 +636,6 @@ export async function runFlowPublishVersion(options) {
|
|
|
463
636
|
});
|
|
464
637
|
const { client, restBaseUrl } = createSupabaseDataClient(runtime, fetchImpl, timeoutMs);
|
|
465
638
|
const targetUserIdOverride = normalize_token(options.targetUserId ?? null);
|
|
466
|
-
const files = build_output_files(outDir);
|
|
467
|
-
let rows = loadRowsFromFile(inputFile);
|
|
468
|
-
if (limit !== null && limit > 0) {
|
|
469
|
-
rows = rows.slice(0, limit);
|
|
470
|
-
}
|
|
471
|
-
if (rows.length === 0) {
|
|
472
|
-
throw new CliError(`No rows found in ${inputFile}`, {
|
|
473
|
-
code: 'FLOW_PUBLISH_VERSION_EMPTY_INPUT',
|
|
474
|
-
exitCode: 2,
|
|
475
|
-
});
|
|
476
|
-
}
|
|
477
639
|
const outcomes = await map_with_concurrency(rows, maxWorkers, async (row) => sync_one_row({
|
|
478
640
|
row,
|
|
479
641
|
mode,
|
|
@@ -509,6 +671,7 @@ export async function runFlowPublishVersion(options) {
|
|
|
509
671
|
success_count: successes.length,
|
|
510
672
|
failure_count: failures.length,
|
|
511
673
|
},
|
|
674
|
+
flow_gate: flow_gate_summary(flowGate),
|
|
512
675
|
operation_counts: operationCounts,
|
|
513
676
|
max_workers: maxWorkers,
|
|
514
677
|
limit,
|
|
@@ -516,6 +679,7 @@ export async function runFlowPublishVersion(options) {
|
|
|
516
679
|
files: {
|
|
517
680
|
success_list: files.successList,
|
|
518
681
|
remote_failed: files.remoteFailed,
|
|
682
|
+
gate_report: files.gateReport,
|
|
519
683
|
report: files.report,
|
|
520
684
|
},
|
|
521
685
|
};
|
|
@@ -531,6 +695,12 @@ export const __testInternals = {
|
|
|
531
695
|
flow_payload,
|
|
532
696
|
flow_id,
|
|
533
697
|
flow_version,
|
|
698
|
+
flow_version_gate_result,
|
|
699
|
+
validate_publish_flow_row,
|
|
700
|
+
build_flow_publish_gate_report,
|
|
701
|
+
flow_gate_summary,
|
|
702
|
+
gate_failure_rows,
|
|
703
|
+
sync_one_row,
|
|
534
704
|
resolve_target_user_id,
|
|
535
705
|
build_visible_rows_url,
|
|
536
706
|
build_update_url,
|