@tiangong-lca/cli 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +16 -5
  2. package/assets/tidas-schemas/tidas_contacts.json +312 -0
  3. package/assets/tidas-schemas/tidas_contacts_category.json +126 -0
  4. package/assets/tidas-schemas/tidas_data_types.json +359 -0
  5. package/assets/tidas-schemas/tidas_flowproperties.json +303 -0
  6. package/assets/tidas-schemas/tidas_flowproperties_category.json +61 -0
  7. package/assets/tidas-schemas/tidas_flows.json +809 -0
  8. package/assets/tidas-schemas/tidas_flows_elementary_category.json +720 -0
  9. package/assets/tidas-schemas/tidas_flows_product_category.json +59623 -0
  10. package/assets/tidas-schemas/tidas_lciamethods.json +1326 -0
  11. package/assets/tidas-schemas/tidas_lciamethods_category.json +685 -0
  12. package/assets/tidas-schemas/tidas_lifecyclemodels.json +1374 -0
  13. package/assets/tidas-schemas/tidas_locations_category.json +2593 -0
  14. package/assets/tidas-schemas/tidas_processes.json +1646 -0
  15. package/assets/tidas-schemas/tidas_processes_category.json +10795 -0
  16. package/assets/tidas-schemas/tidas_sources.json +228 -0
  17. package/assets/tidas-schemas/tidas_sources_category.json +100 -0
  18. package/assets/tidas-schemas/tidas_unitgroups.json +338 -0
  19. package/assets/tidas-schemas/tidas_unitgroups_category.json +61 -0
  20. package/dist/src/cli.js +842 -13
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/lib/dataset-classification.js +947 -0
  23. package/dist/src/lib/dataset-classification.js.map +1 -0
  24. package/dist/src/lib/dataset-command.js +11 -0
  25. package/dist/src/lib/dataset-command.js.map +1 -1
  26. package/dist/src/lib/dataset-contract.js +2 -0
  27. package/dist/src/lib/dataset-contract.js.map +1 -1
  28. package/dist/src/lib/dataset-curation-queue.js +359 -2
  29. package/dist/src/lib/dataset-curation-queue.js.map +1 -1
  30. package/dist/src/lib/dataset-import-lca.js +18 -0
  31. package/dist/src/lib/dataset-import-lca.js.map +1 -1
  32. package/dist/src/lib/dataset-local.js +94 -1
  33. package/dist/src/lib/dataset-local.js.map +1 -1
  34. package/dist/src/lib/dataset-maintenance-clear-account.js +506 -0
  35. package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -0
  36. package/dist/src/lib/dataset-patch.js +797 -0
  37. package/dist/src/lib/dataset-patch.js.map +1 -0
  38. package/dist/src/lib/dataset-remote-verify.js +188 -3
  39. package/dist/src/lib/dataset-remote-verify.js.map +1 -1
  40. package/dist/src/lib/dataset-save-draft-run.js +725 -0
  41. package/dist/src/lib/dataset-save-draft-run.js.map +1 -0
  42. package/dist/src/lib/dataset-validate.js +32 -2
  43. package/dist/src/lib/dataset-validate.js.map +1 -1
  44. package/dist/src/lib/flow-publish-version.js +7 -2
  45. package/dist/src/lib/flow-publish-version.js.map +1 -1
  46. package/dist/src/lib/flow-qa.js +8 -0
  47. package/dist/src/lib/flow-qa.js.map +1 -1
  48. package/dist/src/lib/identity-preflight.js +895 -117
  49. package/dist/src/lib/identity-preflight.js.map +1 -1
  50. package/dist/src/lib/lifecyclemodel-qa.js +159 -34
  51. package/dist/src/lib/lifecyclemodel-qa.js.map +1 -1
  52. package/dist/src/lib/process-required-fields.js +62 -12
  53. package/dist/src/lib/process-required-fields.js.map +1 -1
  54. package/dist/src/lib/supabase-client.js +19 -8
  55. package/dist/src/lib/supabase-client.js.map +1 -1
  56. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"process-required-fields.js","sourceRoot":"","sources":["../../../src/lib/process-required-fields.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n cloneJson,\n datasetRoot,\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nconst ANNUAL_SUPPLY_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst ANNUAL_SUPPLY_ROOT_FIELD =\n 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee][+-]?\\d+)?\\s+\\S.*$/u;\nconst ANNUAL_PERIOD_PATTERN =\n /(?:\\/\\s*(?:year|yr|a)\\b|\\bper\\s+(?:year|annum)\\b|\\/\\s*年|每年|年度|年供应|年产)/iu;\nconst ANNUAL_UNAVAILABLE_PATTERN =\n /\\b(?:source\\s+)?(?:production\\s+)?volume\\s+(?:unavailable|unknown|not\\s+available)\\b/iu;\nconst CJK_TEXT_PATTERN = /[\\p{Script=Han}]/u;\nconst NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';\nconst DEFAULT_COMPLIANCE_SYSTEM = {\n '@refObjectId': 'c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@type': 'source data set',\n '@uri': 'https://tiangong.earth/datasets/c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@version': '00.00.001',\n 'common:shortDescription': {\n '@xml:lang': 'en',\n '#text': 'Environmental Footprint (EF) 3.1',\n },\n} as const;\nconst DEFAULT_COMPLIANCE_DECLARATION = {\n 'common:referenceToComplianceSystem': DEFAULT_COMPLIANCE_SYSTEM,\n 'common:approvalOfOverallCompliance': 'Not defined',\n 'common:nomenclatureCompliance': 'Not defined',\n 'common:methodologicalCompliance': 'Not defined',\n 'common:reviewCompliance': 'Not defined',\n 'common:documentationCompliance': 'Not defined',\n 'common:qualityCompliance': 'Not defined',\n} as const;\nconst REQUIRED_COMPLIANCE_FIELDS = [\n 'common:approvalOfOverallCompliance',\n 'common:nomenclatureCompliance',\n 'common:methodologicalCompliance',\n 'common:reviewCompliance',\n 'common:documentationCompliance',\n 'common:qualityCompliance',\n] as const;\n\ntype AnnualSupplyStatus = 'existing' | 'completed' | 'blocked' | 'skipped';\n\nexport type ProcessRequiredFieldIssue = {\n code: string;\n message: string;\n path: string;\n};\n\nexport type ProcessRequiredFieldCompletion = {\n field_path: string;\n source: 'existing' | 'evidence' | 'placeholder_repair' | 'required_structure_repair';\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string | null;\n unit: string | null;\n reference_exchange_internal_id: string | null;\n basis: string;\n};\n\nexport type ProcessRequiredFieldsRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: string | null;\n status: AnnualSupplyStatus;\n issues: ProcessRequiredFieldIssue[];\n completions: ProcessRequiredFieldCompletion[];\n};\n\nexport type ProcessRequiredFieldsReport = {\n generated_at_utc: string;\n input_path: string;\n out_path: string;\n out_dir: string | null;\n status: 'completed' | 'completed_with_blockers';\n default_unit: string;\n counts: {\n total: number;\n processes: number;\n completed: number;\n existing: number;\n blocked: number;\n skipped: number;\n };\n files: {\n output_rows: string;\n report: string | null;\n evidence: string | null;\n };\n rows: ProcessRequiredFieldsRowReport[];\n};\n\nexport type RunProcessRequiredFieldsCompleteOptions = {\n inputPath: string;\n outPath: string;\n outDir?: string | null;\n defaultUnit?: string | null;\n flowInputPath?: string | null;\n rawInput?: unknown;\n rawFlowInput?: unknown;\n now?: Date;\n};\n\ntype CompletionContext = {\n defaultUnit: string;\n flowUnitById?: Map<string, string>;\n};\n\ntype AnnualSupplyEvidenceValue = {\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string;\n unit: string;\n basis: string;\n};\n\nfunction normalizeUnit(value: string | null | undefined): string {\n const token = value?.trim();\n return token || 'unit';\n}\n\nfunction sourceLanguageForText(value: string, fallback = 'en'): string {\n return CJK_TEXT_PATTERN.test(value) ? 'zh' : fallback;\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction asList(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n return value === undefined || value === null ? [] : [value];\n}\n\nfunction valueAtPath(root: unknown, pathExpression: string): unknown {\n let current = root;\n for (const segment of pathExpression.split('.')) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction annualSupplyItems(value: unknown): Array<{ '#text': string; '@xml:lang': string }> {\n return asList(value).filter((item): item is { '#text': string; '@xml:lang': string } => {\n return (\n isRecord(item) && typeof item['#text'] === 'string' && typeof item['@xml:lang'] === 'string'\n );\n });\n}\n\nfunction isValidAnnualSupplyVolume(value: unknown): boolean {\n const items = annualSupplyItems(value);\n return (\n items.length > 0 &&\n items.every((item) => {\n const text = item['#text'].trim();\n return (\n !ANNUAL_UNAVAILABLE_PATTERN.test(text) &&\n NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) &&\n ANNUAL_PERIOD_PATTERN.test(text)\n );\n })\n );\n}\n\nfunction isValidReview(value: unknown): boolean {\n return asList(value).some((item) => isRecord(item) && Boolean(firstNonEmpty(item['@type'])));\n}\n\nfunction isValidComplianceDeclaration(value: unknown): boolean {\n return asList(value).some((item) => {\n if (!isRecord(item)) {\n return false;\n }\n const complianceSystem = isRecord(item['common:referenceToComplianceSystem'])\n ? item['common:referenceToComplianceSystem']\n : {};\n return (\n Boolean(firstNonEmpty(complianceSystem['@refObjectId'])) &&\n REQUIRED_COMPLIANCE_FIELDS.every((field) => Boolean(firstNonEmpty(item[field])))\n );\n });\n}\n\nexport function collectProcessRequiredFieldIssues(\n payload: JsonObject,\n): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const dataSources = isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)\n ? modelling.dataSourcesTreatmentAndRepresentativeness\n : null;\n if (!dataSources) {\n return [\n {\n code: 'process_data_sources_treatment_missing',\n message: 'Process payload must include dataSourcesTreatmentAndRepresentativeness.',\n path: 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness',\n },\n ];\n }\n\n const issues: ProcessRequiredFieldIssue[] = [];\n const validation = isRecord(modelling.validation) ? modelling.validation : {};\n if (!isValidReview(validation.review)) {\n issues.push({\n code: 'process_validation_review_missing',\n message: 'Process payload must include modellingAndValidation.validation.review.',\n path: 'processDataSet.modellingAndValidation.validation.review',\n });\n }\n\n const complianceDeclarations = isRecord(modelling.complianceDeclarations)\n ? modelling.complianceDeclarations\n : {};\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n issues.push({\n code: 'process_compliance_declaration_missing',\n message:\n 'Process payload must include modellingAndValidation.complianceDeclarations.compliance.',\n path: 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n });\n }\n\n const annualSupply = dataSources.annualSupplyOrProductionVolume;\n if (isValidAnnualSupplyVolume(annualSupply)) {\n return issues;\n }\n\n const items = annualSupplyItems(annualSupply);\n if (items.length === 0) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (items.some((item) => ANNUAL_UNAVAILABLE_PATTERN.test(item['#text'].trim()))) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (\n items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&\n items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))\n ) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_not_annualized',\n message:\n 'annualSupplyOrProductionVolume must express an annualized amount such as \"3.6 MJ/year\" or \"3.6 MJ/年\", not a reference-flow description.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_invalid',\n message:\n 'annualSupplyOrProductionVolume must start with a real number followed by a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n}\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectPlaceholderIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: ProcessRequiredFieldIssue[],\n): void {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (\n (pathSegments.at(-1) === 'common:referenceYear' && normalized === '9999') ||\n normalized.includes('tidas_import_placeholder') ||\n normalized.includes('tidas_import_trace_v1') ||\n normalized.includes('not declared in source package') ||\n normalized.includes('source package metadata not declared') ||\n normalized === '<null>' ||\n /(^|[\\s\"'`])(?:\\/users\\/|\\/home\\/|[a-z]:\\\\)/iu.test(value) ||\n normalized.includes('placeholder.example') ||\n normalized.includes('pending confirmation') ||\n /00000000-0000-0000-0000-0000000000[0-9a-f]{2}/u.test(normalized)\n ) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectPlaceholderIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectPlaceholderIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectProcessPlaceholderIssues(payload: JsonObject): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(root, ['processDataSet'], issues);\n return issues;\n}\n\nfunction hasPlaceholderContent(value: unknown): boolean {\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(value, [], issues);\n return issues.length > 0;\n}\n\nfunction removePlaceholderField(\n parent: JsonObject,\n key: string,\n fieldPath: string,\n completions: ProcessRequiredFieldCompletion[],\n): void {\n if (!hasPlaceholderContent(parent[key])) {\n return;\n }\n delete parent[key];\n completions.push({\n field_path: fieldPath,\n source: 'placeholder_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis:\n 'Removed placeholder review metadata because the dataset is marked Not reviewed and no completed review evidence is present.',\n });\n}\n\nfunction repairPlaceholderReviewMetadata(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const validation = isRecord(modelling.validation) ? modelling.validation : null;\n if (!validation) {\n return [];\n }\n\n const completions: ProcessRequiredFieldCompletion[] = [];\n const validationPath = 'processDataSet.modellingAndValidation.validation';\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation, key, `${validationPath}.${key}`, completions);\n }\n\n if (isRecord(validation.review)) {\n const reviewPath = `${validationPath}.review`;\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation.review, key, `${reviewPath}.${key}`, completions);\n }\n }\n\n return completions;\n}\n\nfunction addRequiredStructureCompletion(\n completions: ProcessRequiredFieldCompletion[],\n fieldPath: string,\n basis: string,\n): void {\n completions.push({\n field_path: fieldPath,\n source: 'required_structure_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis,\n });\n}\n\nfunction repairRequiredProcessStructures(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const completions: ProcessRequiredFieldCompletion[] = [];\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n\n if (!isRecord(modelling.validation)) {\n modelling.validation = {};\n }\n const validation = modelling.validation as JsonObject;\n if (!isValidReview(validation.review)) {\n validation.review = {\n '@type': 'Not reviewed',\n };\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.validation.review',\n 'Inserted a conservative Not reviewed marker because UI roundtrip or source data omitted the required validation.review structure.',\n );\n }\n\n if (!isRecord(modelling.complianceDeclarations)) {\n modelling.complianceDeclarations = {};\n }\n const complianceDeclarations = modelling.complianceDeclarations as JsonObject;\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n complianceDeclarations.compliance = cloneJson(DEFAULT_COMPLIANCE_DECLARATION);\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n 'Inserted a conservative Not defined compliance declaration against EF 3.1 because UI roundtrip or source data omitted the required compliance structure.',\n );\n }\n\n return completions;\n}\n\nfunction processRootForMutation(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n return payload;\n}\n\nfunction selectReferenceExchange(root: JsonObject): JsonObject | null {\n const exchangesRoot = isRecord(root.exchanges) ? root.exchanges : {};\n const exchanges = asList(exchangesRoot.exchange).filter(isRecord);\n const processInfo = isRecord(root.processInformation) ? root.processInformation : {};\n const quantitativeReference = isRecord(processInfo.quantitativeReference)\n ? processInfo.quantitativeReference\n : {};\n const referenceId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n\n const byReferenceId = referenceId\n ? exchanges.find((exchange) => firstNonEmpty(exchange['@dataSetInternalID']) === referenceId)\n : null;\n if (byReferenceId) {\n return byReferenceId;\n }\n\n return (\n exchanges.find((exchange) => exchange.quantitativeReference === true) ??\n exchanges.find(\n (exchange) => String(exchange.exchangeDirection ?? '').toLowerCase() === 'output',\n ) ??\n null\n );\n}\n\nfunction localizedTextIncludes(value: unknown, pattern: RegExp): boolean {\n return annualSupplyItems(value).some((item) => pattern.test(item['#text']));\n}\n\nfunction inferSpecificUnitFromFlowPayload(payload: JsonObject): string | null {\n const root = datasetRoot(payload, 'flow');\n const flowPropertiesRoot = isRecord(root.flowProperties) ? root.flowProperties : {};\n const flowProperties = asList(flowPropertiesRoot.flowProperty).filter(isRecord);\n for (const flowProperty of flowProperties) {\n const direct = firstNonEmpty(\n flowProperty.unit,\n flowProperty.referenceUnit,\n flowProperty.flowUnit,\n );\n if (direct) {\n return direct;\n }\n\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n }\n\n const flowInformation = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const classificationInformation = isRecord(dataSetInformation.classificationInformation)\n ? dataSetInformation.classificationInformation\n : {};\n const classification = isRecord(classificationInformation['common:classification'])\n ? classificationInformation['common:classification']\n : {};\n const classificationClasses = classification['common:class'];\n if (\n localizedTextIncludes(classificationClasses, /Electrical energy|electricity|交流电|电力|电能/iu)\n ) {\n return 'MJ';\n }\n\n return null;\n}\n\nfunction buildFlowUnitIndex(\n flowRows: DatasetRowInput[],\n fallbackUnit: string,\n): Map<string, string> {\n const index = new Map<string, string>();\n for (const row of flowRows) {\n if (row.kind !== 'flow' || !row.id) {\n continue;\n }\n const inferred = inferSpecificUnitFromFlowPayload(row.payload);\n if (inferred && inferred !== fallbackUnit) {\n index.set(row.id, inferred);\n }\n }\n return index;\n}\n\nfunction inferUnitFromReferenceExchange(\n exchange: JsonObject,\n fallbackOrContext: string | CompletionContext,\n): string {\n const context =\n typeof fallbackOrContext === 'string' ? { defaultUnit: fallbackOrContext } : fallbackOrContext;\n const fallbackUnit = context.defaultUnit;\n const flowRef = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const refObjectId = firstNonEmpty(flowRef['@refObjectId']);\n if (refObjectId) {\n const indexedUnit = context.flowUnitById?.get(refObjectId);\n if (indexedUnit) {\n return indexedUnit;\n }\n }\n\n const direct = firstNonEmpty(exchange.unit, exchange.referenceUnit, exchange.flowUnit);\n if (direct) {\n return direct;\n }\n\n const shortDescriptions = flowRef['common:shortDescription'];\n if (\n localizedTextIncludes(\n shortDescriptions,\n /MJ|net calorific|lower calorific|Electrical energy|electricity|净热值|低位发热|交流电|电力|电能/iu,\n )\n ) {\n return 'MJ';\n }\n\n const flowProperty = isRecord(exchange.flowProperty) ? exchange.flowProperty : {};\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n refObjectId === NET_CALORIFIC_VALUE_ID ||\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n\n return fallbackUnit;\n}\n\nfunction buildAnnualSupplyValue(\n amount: string,\n unit: string,\n): Array<{\n '#text': string;\n '@xml:lang': string;\n}> {\n return [{ '@xml:lang': 'en', '#text': `${amount} ${unit}/year` }];\n}\n\nfunction annualSupplyTextParts(value: string): { amount: string; unit: string } | null {\n const match = /^\\s*([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)\\s+(\\S.*)$/u.exec(value);\n return match ? { amount: match[1] as string, unit: (match[2] as string).trim() } : null;\n}\n\nfunction annualSupplyValueFromText(value: string): AnnualSupplyEvidenceValue | null {\n const text = value.trim();\n if (!NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) || !ANNUAL_PERIOD_PATTERN.test(text)) {\n return null;\n }\n const parts = annualSupplyTextParts(text) as { amount: string; unit: string };\n return {\n value: [{ '@xml:lang': sourceLanguageForText(text), '#text': text }],\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a complete annual supply / production volume text value.',\n };\n}\n\nfunction normalizeAnnualSupplyEvidenceValue(\n candidate: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (typeof candidate === 'string') {\n return annualSupplyValueFromText(candidate);\n }\n\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n const amount = String(candidate);\n return {\n value: buildAnnualSupplyValue(amount, context.defaultUnit),\n amount,\n unit: context.defaultUnit,\n basis:\n 'Evidence provided a numeric annual supply / production volume; the configured default unit was applied.',\n };\n }\n\n if (isValidAnnualSupplyVolume(candidate)) {\n const value = [\n annualSupplyItems(candidate).map((item) => ({\n '@xml:lang': item['@xml:lang'],\n '#text': item['#text'].trim(),\n }))[0]!,\n ];\n const parts = annualSupplyTextParts(value[0]!['#text']) as { amount: string; unit: string };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis:\n 'Evidence provided a validated source-language annual supply / production volume value.',\n };\n }\n\n if (!isRecord(candidate)) {\n return null;\n }\n\n for (const key of [\n 'value',\n 'text',\n 'value_text',\n 'valueText',\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n ]) {\n const nested = normalizeAnnualSupplyEvidenceValue(candidate[key], context);\n if (nested) {\n return nested;\n }\n }\n\n const preferredLanguage = textValue(\n candidate.source_language ??\n candidate.sourceLanguage ??\n candidate.lang ??\n candidate['@xml:lang'],\n )?.toLowerCase();\n const english = textValue(candidate.en ?? candidate.english);\n const chinese = textValue(candidate.zh ?? candidate.chinese ?? candidate['zh-CN']);\n const localized = [\n english ? { '@xml:lang': 'en', '#text': english } : null,\n chinese ? { '@xml:lang': 'zh', '#text': chinese } : null,\n ].filter((item): item is { '#text': string; '@xml:lang': string } => Boolean(item));\n if (localized.length > 0 && isValidAnnualSupplyVolume(localized)) {\n const selected =\n localized.find((item) => item['@xml:lang'].toLowerCase() === preferredLanguage) ??\n localized[0]!;\n const value = [selected];\n const parts = annualSupplyTextParts(selected['#text']) as {\n amount: string;\n unit: string;\n };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a language-specific annual supply / production volume text value.',\n };\n }\n\n const amount = textValue(candidate.amount ?? candidate.value_amount ?? candidate.valueAmount);\n const unit = normalizeUnit(\n textValue(\n candidate.unit ?? candidate.uom ?? candidate.reference_unit ?? candidate.referenceUnit,\n ) ?? context.defaultUnit,\n );\n if (amount) {\n return {\n value: buildAnnualSupplyValue(amount, unit),\n amount,\n unit,\n basis:\n 'Evidence provided annual supply / production volume amount and unit as structured fields.',\n };\n }\n\n return null;\n}\n\nfunction isAnnualSupplyEvidencePath(pathExpression: string | null): boolean {\n if (!pathExpression) {\n return false;\n }\n return (\n pathExpression === ANNUAL_SUPPLY_FIELD ||\n pathExpression === ANNUAL_SUPPLY_ROOT_FIELD ||\n pathExpression.endsWith(`.${ANNUAL_SUPPLY_ROOT_FIELD}`) ||\n pathExpression.endsWith('.annualSupplyOrProductionVolume')\n );\n}\n\nfunction fieldPathFromEvidenceEntry(entry: JsonObject): string | null {\n return firstNonEmpty(\n entry.field_path,\n entry.fieldPath,\n entry.path,\n entry.field,\n entry.target_path,\n entry.targetPath,\n );\n}\n\nfunction findAnnualSupplyEvidenceEntry(\n container: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (!isRecord(container)) {\n return null;\n }\n\n const directPath = fieldPathFromEvidenceEntry(container);\n if (isAnnualSupplyEvidencePath(directPath)) {\n const directValue = normalizeAnnualSupplyEvidenceValue(container, context);\n if (directValue) {\n return directValue;\n }\n }\n\n for (const key of [\n 'field_values',\n 'fieldValues',\n 'field_bindings',\n 'fieldBindings',\n 'bindings',\n ]) {\n const entries = asList(container[key]).filter(isRecord);\n for (const entry of entries) {\n if (!isAnnualSupplyEvidencePath(fieldPathFromEvidenceEntry(entry))) {\n continue;\n }\n const value = normalizeAnnualSupplyEvidenceValue(entry, context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction findAnnualSupplyEvidenceValue(\n row: JsonObject,\n payload: JsonObject,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n const explicitPaths = [\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n 'required_fields.annualSupplyOrProductionVolume',\n 'requiredFields.annualSupplyOrProductionVolume',\n 'authoring.required_fields.annualSupplyOrProductionVolume',\n 'authoring.requiredFields.annualSupplyOrProductionVolume',\n 'process_authoring.required_fields.annualSupplyOrProductionVolume',\n 'processAuthoring.requiredFields.annualSupplyOrProductionVolume',\n ];\n for (const source of [row, payload]) {\n for (const explicitPath of explicitPaths) {\n const value = normalizeAnnualSupplyEvidenceValue(valueAtPath(source, explicitPath), context);\n if (value) {\n return value;\n }\n }\n }\n\n const evidencePaths = [\n 'evidence_manifest',\n 'evidenceManifest',\n 'authoring_evidence',\n 'authoringEvidence',\n 'process_authoring.evidence_manifest',\n 'processAuthoring.evidenceManifest',\n ];\n for (const source of [row, payload]) {\n for (const evidencePath of evidencePaths) {\n const value = findAnnualSupplyEvidenceEntry(valueAtPath(source, evidencePath), context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction ensureDataSources(root: JsonObject): JsonObject {\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n if (!isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)) {\n modelling.dataSourcesTreatmentAndRepresentativeness = {};\n }\n return modelling.dataSourcesTreatmentAndRepresentativeness as JsonObject;\n}\n\nfunction cloneRowWithPayload(row: DatasetRowInput): { row: JsonObject; payload: JsonObject } {\n const clonedRow = cloneJson(row.row);\n if (isRecord(clonedRow.json_ordered)) {\n return { row: clonedRow, payload: clonedRow.json_ordered };\n }\n if (isRecord(clonedRow.jsonOrdered)) {\n return { row: clonedRow, payload: clonedRow.jsonOrdered };\n }\n if (isRecord(clonedRow.json)) {\n return { row: clonedRow, payload: clonedRow.json };\n }\n if (isRecord(clonedRow.payload)) {\n return { row: clonedRow, payload: clonedRow.payload };\n }\n if (isRecord(clonedRow.process)) {\n return { row: clonedRow, payload: clonedRow.process };\n }\n return { row: clonedRow, payload: clonedRow };\n}\n\nfunction completeProcessRow(\n row: DatasetRowInput,\n context: CompletionContext,\n): { row: JsonObject; report: ProcessRequiredFieldsRowReport } {\n const { row: clonedRow, payload } = cloneRowWithPayload(row);\n if (row.kind !== 'process') {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'skipped',\n issues: [],\n completions: [],\n },\n };\n }\n\n const root = processRootForMutation(payload);\n const placeholderCompletions = repairPlaceholderReviewMetadata(root);\n const requiredStructureCompletions = repairRequiredProcessStructures(root);\n const repairCompletions = [...placeholderCompletions, ...requiredStructureCompletions];\n const existingIssues = collectProcessRequiredFieldIssues(payload);\n const placeholderIssues = collectProcessPlaceholderIssues(payload);\n\n if (existingIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: repairCompletions.length > 0 ? 'completed' : 'existing',\n issues: [],\n completions: repairCompletions,\n },\n };\n }\n\n if (placeholderIssues.length > 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [...existingIssues, ...placeholderIssues],\n completions: repairCompletions,\n },\n };\n }\n\n const evidenceValue = findAnnualSupplyEvidenceValue(clonedRow, payload, context);\n if (evidenceValue) {\n const dataSources = ensureDataSources(root);\n dataSources.annualSupplyOrProductionVolume = evidenceValue.value;\n const completion: ProcessRequiredFieldCompletion = {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'evidence',\n value: evidenceValue.value,\n amount: evidenceValue.amount,\n unit: evidenceValue.unit,\n reference_exchange_internal_id: null,\n basis: evidenceValue.basis,\n };\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n }\n\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [\n ...existingIssues,\n {\n code: 'annual_supply_evidence_missing',\n message:\n 'Could not complete annualSupplyOrProductionVolume because no source evidence value was provided.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ],\n completions: repairCompletions,\n },\n };\n}\n\nfunction buildFiles(outPath: string, outDir: string | null): ProcessRequiredFieldsReport['files'] {\n if (!outDir) {\n return {\n output_rows: path.resolve(outPath),\n report: null,\n evidence: null,\n };\n }\n const resolved = path.resolve(outDir);\n return {\n output_rows: path.resolve(outPath),\n report: path.join(resolved, 'outputs', 'process-required-fields-report.json'),\n evidence: path.join(resolved, 'outputs', 'process-required-fields-evidence.jsonl'),\n };\n}\n\nfunction requireOutputPath(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new CliError('Missing required --out value.', {\n code: 'PROCESS_REQUIRED_FIELDS_OUT_REQUIRED',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nexport async function runProcessRequiredFieldsComplete(\n options: RunProcessRequiredFieldsCompleteOptions,\n): Promise<ProcessRequiredFieldsReport> {\n const outPath = requireOutputPath(options.outPath);\n const outDir = options.outDir?.trim() ? options.outDir.trim() : null;\n const defaultUnit = normalizeUnit(options.defaultUnit);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const flowRows = options.flowInputPath?.trim()\n ? materializeDatasetRows(options.flowInputPath, options.rawFlowInput)\n : [];\n const flowUnitById = buildFlowUnitIndex(flowRows, defaultUnit);\n const completed = rows.map((row) => completeProcessRow(row, { defaultUnit, flowUnitById }));\n const rowReports = completed.map((item) => item.report);\n const files = buildFiles(outPath, outDir);\n const blockers = rowReports.filter((row) => row.status === 'blocked');\n\n const report: ProcessRequiredFieldsReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n out_path: path.resolve(outPath),\n out_dir: outDir ? path.resolve(outDir) : null,\n status: blockers.length > 0 ? 'completed_with_blockers' : 'completed',\n default_unit: defaultUnit,\n counts: {\n total: rowReports.length,\n processes: rowReports.filter((row) => row.type === 'process').length,\n completed: rowReports.filter((row) => row.status === 'completed').length,\n existing: rowReports.filter((row) => row.status === 'existing').length,\n blocked: blockers.length,\n skipped: rowReports.filter((row) => row.status === 'skipped').length,\n },\n files,\n rows: rowReports,\n };\n\n writeJsonLinesArtifact(\n files.output_rows,\n completed.map((item) => item.row),\n );\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.evidence) {\n writeJsonLinesArtifact(\n files.evidence,\n rowReports.flatMap((row) =>\n row.completions.map((completion) => ({\n row_index: row.index,\n dataset_id: row.id,\n dataset_version: row.version,\n ...completion,\n })),\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ANNUAL_SUPPLY_ROOT_FIELD,\n annualSupplyTextParts,\n annualSupplyValueFromText,\n cloneRowWithPayload,\n collectProcessRequiredFieldIssues,\n completeProcessRow,\n ensureDataSources,\n fieldPathFromEvidenceEntry,\n findAnnualSupplyEvidenceValue,\n findAnnualSupplyEvidenceEntry,\n buildFlowUnitIndex,\n inferUnitFromReferenceExchange,\n inferSpecificUnitFromFlowPayload,\n issuePath,\n isAnnualSupplyEvidencePath,\n isValidComplianceDeclaration,\n isValidAnnualSupplyVolume,\n isValidReview,\n normalizeAnnualSupplyEvidenceValue,\n repairRequiredProcessStructures,\n requireOutputPath,\n selectReferenceExchange,\n textValue,\n valueAtPath,\n};\n"]}
1
+ {"version":3,"file":"process-required-fields.js","sourceRoot":"","sources":["../../../src/lib/process-required-fields.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n cloneJson,\n datasetRoot,\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nconst ANNUAL_SUPPLY_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst ANNUAL_SUPPLY_ROOT_FIELD =\n 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst DATA_SOURCES_TREATMENT_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness';\nconst ANNUAL_SUPPLY_MISSING_DATA_SENTINEL_TEXT = '9999 missing-data-sentinel/year';\nconst NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee][+-]?\\d+)?\\s+\\S.*$/u;\nconst ANNUAL_PERIOD_PATTERN =\n /(?:\\/\\s*(?:year|yr|a)\\b|\\bper\\s+(?:year|annum)\\b|\\/\\s*年|每年|年度|年供应|年产)/iu;\nconst ANNUAL_UNAVAILABLE_PATTERN =\n /\\b(?:source\\s+)?(?:production\\s+)?volume\\s+(?:unavailable|unknown|not\\s+available)\\b/iu;\nconst CJK_TEXT_PATTERN = /[\\p{Script=Han}]/u;\nconst NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';\nconst DEFAULT_COMPLIANCE_SYSTEM = {\n '@refObjectId': 'c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@type': 'source data set',\n '@uri': 'https://tiangong.earth/datasets/c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@version': '00.00.001',\n 'common:shortDescription': {\n '@xml:lang': 'en',\n '#text': 'Environmental Footprint (EF) 3.1',\n },\n} as const;\nconst DEFAULT_COMPLIANCE_DECLARATION = {\n 'common:referenceToComplianceSystem': DEFAULT_COMPLIANCE_SYSTEM,\n 'common:approvalOfOverallCompliance': 'Not defined',\n 'common:nomenclatureCompliance': 'Not defined',\n 'common:methodologicalCompliance': 'Not defined',\n 'common:reviewCompliance': 'Not defined',\n 'common:documentationCompliance': 'Not defined',\n 'common:qualityCompliance': 'Not defined',\n} as const;\nconst REQUIRED_COMPLIANCE_FIELDS = [\n 'common:approvalOfOverallCompliance',\n 'common:nomenclatureCompliance',\n 'common:methodologicalCompliance',\n 'common:reviewCompliance',\n 'common:documentationCompliance',\n 'common:qualityCompliance',\n] as const;\n\ntype AnnualSupplyStatus = 'existing' | 'completed' | 'blocked' | 'skipped';\n\nexport type ProcessRequiredFieldIssue = {\n code: string;\n message: string;\n path: string;\n};\n\nexport type ProcessRequiredFieldCompletion = {\n field_path: string;\n source:\n | 'existing'\n | 'evidence'\n | 'missing_data_sentinel'\n | 'placeholder_repair'\n | 'required_structure_repair';\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string | null;\n unit: string | null;\n reference_exchange_internal_id: string | null;\n basis: string;\n};\n\nexport type ProcessRequiredFieldsRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: string | null;\n status: AnnualSupplyStatus;\n issues: ProcessRequiredFieldIssue[];\n completions: ProcessRequiredFieldCompletion[];\n};\n\nexport type ProcessRequiredFieldsReport = {\n generated_at_utc: string;\n input_path: string;\n out_path: string;\n out_dir: string | null;\n status: 'completed' | 'completed_with_blockers';\n default_unit: string;\n counts: {\n total: number;\n processes: number;\n completed: number;\n existing: number;\n blocked: number;\n skipped: number;\n };\n files: {\n output_rows: string;\n report: string | null;\n evidence: string | null;\n };\n rows: ProcessRequiredFieldsRowReport[];\n};\n\nexport type RunProcessRequiredFieldsCompleteOptions = {\n inputPath: string;\n outPath: string;\n outDir?: string | null;\n defaultUnit?: string | null;\n flowInputPath?: string | null;\n rawInput?: unknown;\n rawFlowInput?: unknown;\n now?: Date;\n};\n\ntype CompletionContext = {\n defaultUnit: string;\n flowUnitById?: Map<string, string>;\n};\n\ntype AnnualSupplyEvidenceValue = {\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string;\n unit: string;\n basis: string;\n};\n\nfunction normalizeUnit(value: string | null | undefined): string {\n const token = value?.trim();\n return token || 'unit';\n}\n\nfunction sourceLanguageForText(value: string, fallback = 'en'): string {\n return CJK_TEXT_PATTERN.test(value) ? 'zh' : fallback;\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction asList(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n return value === undefined || value === null ? [] : [value];\n}\n\nfunction valueAtPath(root: unknown, pathExpression: string): unknown {\n let current = root;\n for (const segment of pathExpression.split('.')) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction annualSupplyItems(value: unknown): Array<{ '#text': string; '@xml:lang': string }> {\n return asList(value).filter((item): item is { '#text': string; '@xml:lang': string } => {\n return (\n isRecord(item) && typeof item['#text'] === 'string' && typeof item['@xml:lang'] === 'string'\n );\n });\n}\n\nfunction isValidAnnualSupplyVolume(value: unknown): boolean {\n const items = annualSupplyItems(value);\n return (\n items.length > 0 &&\n items.every((item) => {\n const text = item['#text'].trim();\n return (\n !ANNUAL_UNAVAILABLE_PATTERN.test(text) &&\n NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) &&\n ANNUAL_PERIOD_PATTERN.test(text)\n );\n })\n );\n}\n\nfunction unresolvedTraceEntries(root: JsonObject): JsonObject[] {\n const dataSetInformation = isRecord(root.processInformation)\n ? isRecord(root.processInformation.dataSetInformation)\n ? root.processInformation.dataSetInformation\n : {}\n : {};\n const commonOther = isRecord(dataSetInformation['common:other'])\n ? dataSetInformation['common:other']\n : {};\n return asList(commonOther['tiangongfoundry:unresolvedTrace']).filter((item): item is JsonObject =>\n isRecord(item),\n );\n}\n\nfunction hasDeferredAnnualSupplyTrace(root: JsonObject): boolean {\n return unresolvedTraceEntries(root).some((entry) => {\n const actionItemCode = firstNonEmpty(entry.action_item_code, entry.actionItemCode, entry.code);\n const blockedPath = firstNonEmpty(\n entry.blocked_path,\n entry.blockedPath,\n entry.field_path,\n entry.fieldPath,\n entry.path,\n );\n const status = firstNonEmpty(entry.status, entry.decision_status, entry.decisionStatus);\n return (\n (actionItemCode === 'annual_supply_or_production_volume_invalid' ||\n actionItemCode === 'annual_supply_or_production_volume_missing' ||\n actionItemCode === 'invalid_format' ||\n blockedPath === ANNUAL_SUPPLY_FIELD ||\n blockedPath === ANNUAL_SUPPLY_ROOT_FIELD ||\n blockedPath?.endsWith('.annualSupplyOrProductionVolume') === true) &&\n (status === 'unresolved_deferred' ||\n status === 'deferred_to_common_other' ||\n status === 'needs_followup')\n );\n });\n}\n\nfunction isValidReview(value: unknown): boolean {\n return asList(value).some((item) => isRecord(item) && Boolean(firstNonEmpty(item['@type'])));\n}\n\nfunction isValidComplianceDeclaration(value: unknown): boolean {\n return asList(value).some((item) => {\n if (!isRecord(item)) {\n return false;\n }\n const complianceSystem = isRecord(item['common:referenceToComplianceSystem'])\n ? item['common:referenceToComplianceSystem']\n : {};\n return (\n Boolean(firstNonEmpty(complianceSystem['@refObjectId'])) &&\n REQUIRED_COMPLIANCE_FIELDS.every((field) => Boolean(firstNonEmpty(item[field])))\n );\n });\n}\n\nexport function collectProcessRequiredFieldIssues(\n payload: JsonObject,\n): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const dataSources = isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)\n ? modelling.dataSourcesTreatmentAndRepresentativeness\n : null;\n const annualSupplyDeferredToTrace = hasDeferredAnnualSupplyTrace(root);\n const dataSourcesDeferredToTrace = !dataSources && annualSupplyDeferredToTrace;\n if (!dataSources && !dataSourcesDeferredToTrace) {\n return [\n {\n code: 'process_data_sources_treatment_missing',\n message: 'Process payload must include dataSourcesTreatmentAndRepresentativeness.',\n path: DATA_SOURCES_TREATMENT_FIELD,\n },\n ];\n }\n\n const issues: ProcessRequiredFieldIssue[] = [];\n const validation = isRecord(modelling.validation) ? modelling.validation : {};\n if (!isValidReview(validation.review)) {\n issues.push({\n code: 'process_validation_review_missing',\n message: 'Process payload must include modellingAndValidation.validation.review.',\n path: 'processDataSet.modellingAndValidation.validation.review',\n });\n }\n\n const complianceDeclarations = isRecord(modelling.complianceDeclarations)\n ? modelling.complianceDeclarations\n : {};\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n issues.push({\n code: 'process_compliance_declaration_missing',\n message:\n 'Process payload must include modellingAndValidation.complianceDeclarations.compliance.',\n path: 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n });\n }\n\n if (dataSourcesDeferredToTrace) {\n return issues;\n }\n\n const annualSupply = dataSources!.annualSupplyOrProductionVolume;\n if (isValidAnnualSupplyVolume(annualSupply)) {\n return issues;\n }\n\n const items = annualSupplyItems(annualSupply);\n if (items.length === 0 && annualSupplyDeferredToTrace) {\n return issues;\n }\n\n if (items.length === 0) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (items.some((item) => ANNUAL_UNAVAILABLE_PATTERN.test(item['#text'].trim()))) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (\n items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&\n items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))\n ) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_not_annualized',\n message:\n 'annualSupplyOrProductionVolume must express an annualized amount such as \"3.6 MJ/year\" or \"3.6 MJ/年\", not a reference-flow description.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_invalid',\n message:\n 'annualSupplyOrProductionVolume must start with a real number followed by a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n}\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectPlaceholderIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: ProcessRequiredFieldIssue[],\n): void {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (\n (pathSegments.at(-1) === 'common:referenceYear' && normalized === '9999') ||\n normalized.includes('tidas_import_placeholder') ||\n normalized.includes('tidas_import_trace_v1') ||\n normalized.includes('not declared in source package') ||\n normalized.includes('source package metadata not declared') ||\n normalized === '<null>' ||\n /(^|[\\s\"'`])(?:\\/users\\/|\\/home\\/|[a-z]:\\\\)/iu.test(value) ||\n normalized.includes('placeholder.example') ||\n normalized.includes('pending confirmation') ||\n /00000000-0000-0000-0000-0000000000[0-9a-f]{2}/u.test(normalized)\n ) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectPlaceholderIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectPlaceholderIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectProcessPlaceholderIssues(payload: JsonObject): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(root, ['processDataSet'], issues);\n return issues;\n}\n\nfunction hasPlaceholderContent(value: unknown): boolean {\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(value, [], issues);\n return issues.length > 0;\n}\n\nfunction removePlaceholderField(\n parent: JsonObject,\n key: string,\n fieldPath: string,\n completions: ProcessRequiredFieldCompletion[],\n): void {\n if (!hasPlaceholderContent(parent[key])) {\n return;\n }\n delete parent[key];\n completions.push({\n field_path: fieldPath,\n source: 'placeholder_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis:\n 'Removed placeholder review metadata because the dataset is marked Not reviewed and no completed review evidence is present.',\n });\n}\n\nfunction repairPlaceholderReviewMetadata(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const validation = isRecord(modelling.validation) ? modelling.validation : null;\n if (!validation) {\n return [];\n }\n\n const completions: ProcessRequiredFieldCompletion[] = [];\n const validationPath = 'processDataSet.modellingAndValidation.validation';\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation, key, `${validationPath}.${key}`, completions);\n }\n\n if (isRecord(validation.review)) {\n const reviewPath = `${validationPath}.review`;\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation.review, key, `${reviewPath}.${key}`, completions);\n }\n }\n\n return completions;\n}\n\nfunction addRequiredStructureCompletion(\n completions: ProcessRequiredFieldCompletion[],\n fieldPath: string,\n basis: string,\n): void {\n completions.push({\n field_path: fieldPath,\n source: 'required_structure_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis,\n });\n}\n\nfunction repairRequiredProcessStructures(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const completions: ProcessRequiredFieldCompletion[] = [];\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n\n if (!isRecord(modelling.validation)) {\n modelling.validation = {};\n }\n const validation = modelling.validation as JsonObject;\n if (!isValidReview(validation.review)) {\n validation.review = {\n '@type': 'Not reviewed',\n };\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.validation.review',\n 'Inserted a conservative Not reviewed marker because UI roundtrip or source data omitted the required validation.review structure.',\n );\n }\n\n if (!isRecord(modelling.complianceDeclarations)) {\n modelling.complianceDeclarations = {};\n }\n const complianceDeclarations = modelling.complianceDeclarations as JsonObject;\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n complianceDeclarations.compliance = cloneJson(DEFAULT_COMPLIANCE_DECLARATION);\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n 'Inserted a conservative Not defined compliance declaration against EF 3.1 because UI roundtrip or source data omitted the required compliance structure.',\n );\n }\n\n return completions;\n}\n\nfunction processRootForMutation(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n return payload;\n}\n\nfunction selectReferenceExchange(root: JsonObject): JsonObject | null {\n const exchangesRoot = isRecord(root.exchanges) ? root.exchanges : {};\n const exchanges = asList(exchangesRoot.exchange).filter(isRecord);\n const processInfo = isRecord(root.processInformation) ? root.processInformation : {};\n const quantitativeReference = isRecord(processInfo.quantitativeReference)\n ? processInfo.quantitativeReference\n : {};\n const referenceId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n\n const byReferenceId = referenceId\n ? exchanges.find((exchange) => firstNonEmpty(exchange['@dataSetInternalID']) === referenceId)\n : null;\n if (byReferenceId) {\n return byReferenceId;\n }\n\n return (\n exchanges.find((exchange) => exchange.quantitativeReference === true) ??\n exchanges.find(\n (exchange) => String(exchange.exchangeDirection ?? '').toLowerCase() === 'output',\n ) ??\n null\n );\n}\n\nfunction localizedTextIncludes(value: unknown, pattern: RegExp): boolean {\n return annualSupplyItems(value).some((item) => pattern.test(item['#text']));\n}\n\nfunction inferSpecificUnitFromFlowPayload(payload: JsonObject): string | null {\n const root = datasetRoot(payload, 'flow');\n const flowPropertiesRoot = isRecord(root.flowProperties) ? root.flowProperties : {};\n const flowProperties = asList(flowPropertiesRoot.flowProperty).filter(isRecord);\n for (const flowProperty of flowProperties) {\n const direct = firstNonEmpty(\n flowProperty.unit,\n flowProperty.referenceUnit,\n flowProperty.flowUnit,\n );\n if (direct) {\n return direct;\n }\n\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n }\n\n const flowInformation = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const classificationInformation = isRecord(dataSetInformation.classificationInformation)\n ? dataSetInformation.classificationInformation\n : {};\n const classification = isRecord(classificationInformation['common:classification'])\n ? classificationInformation['common:classification']\n : {};\n const classificationClasses = classification['common:class'];\n if (\n localizedTextIncludes(classificationClasses, /Electrical energy|electricity|交流电|电力|电能/iu)\n ) {\n return 'MJ';\n }\n\n return null;\n}\n\nfunction buildFlowUnitIndex(\n flowRows: DatasetRowInput[],\n fallbackUnit: string,\n): Map<string, string> {\n const index = new Map<string, string>();\n for (const row of flowRows) {\n if (row.kind !== 'flow' || !row.id) {\n continue;\n }\n const inferred = inferSpecificUnitFromFlowPayload(row.payload);\n if (inferred && inferred !== fallbackUnit) {\n index.set(row.id, inferred);\n }\n }\n return index;\n}\n\nfunction inferUnitFromReferenceExchange(\n exchange: JsonObject,\n fallbackOrContext: string | CompletionContext,\n): string {\n const context =\n typeof fallbackOrContext === 'string' ? { defaultUnit: fallbackOrContext } : fallbackOrContext;\n const fallbackUnit = context.defaultUnit;\n const flowRef = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const refObjectId = firstNonEmpty(flowRef['@refObjectId']);\n if (refObjectId) {\n const indexedUnit = context.flowUnitById?.get(refObjectId);\n if (indexedUnit) {\n return indexedUnit;\n }\n }\n\n const direct = firstNonEmpty(exchange.unit, exchange.referenceUnit, exchange.flowUnit);\n if (direct) {\n return direct;\n }\n\n const shortDescriptions = flowRef['common:shortDescription'];\n if (\n localizedTextIncludes(\n shortDescriptions,\n /MJ|net calorific|lower calorific|Electrical energy|electricity|净热值|低位发热|交流电|电力|电能/iu,\n )\n ) {\n return 'MJ';\n }\n\n const flowProperty = isRecord(exchange.flowProperty) ? exchange.flowProperty : {};\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n refObjectId === NET_CALORIFIC_VALUE_ID ||\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n\n return fallbackUnit;\n}\n\nfunction buildAnnualSupplyValue(\n amount: string,\n unit: string,\n): Array<{\n '#text': string;\n '@xml:lang': string;\n}> {\n return [{ '@xml:lang': 'en', '#text': `${amount} ${unit}/year` }];\n}\n\nfunction annualSupplyTextParts(value: string): { amount: string; unit: string } | null {\n const match = /^\\s*([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)\\s+(\\S.*)$/u.exec(value);\n return match ? { amount: match[1] as string, unit: (match[2] as string).trim() } : null;\n}\n\nfunction annualSupplyValueFromText(value: string): AnnualSupplyEvidenceValue | null {\n const text = value.trim();\n if (!NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) || !ANNUAL_PERIOD_PATTERN.test(text)) {\n return null;\n }\n const parts = annualSupplyTextParts(text) as { amount: string; unit: string };\n return {\n value: [{ '@xml:lang': sourceLanguageForText(text), '#text': text }],\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a complete annual supply / production volume text value.',\n };\n}\n\nfunction normalizeAnnualSupplyEvidenceValue(\n candidate: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (typeof candidate === 'string') {\n return annualSupplyValueFromText(candidate);\n }\n\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n const amount = String(candidate);\n return {\n value: buildAnnualSupplyValue(amount, context.defaultUnit),\n amount,\n unit: context.defaultUnit,\n basis:\n 'Evidence provided a numeric annual supply / production volume; the configured default unit was applied.',\n };\n }\n\n if (isValidAnnualSupplyVolume(candidate)) {\n const value = [\n annualSupplyItems(candidate).map((item) => ({\n '@xml:lang': item['@xml:lang'],\n '#text': item['#text'].trim(),\n }))[0]!,\n ];\n const parts = annualSupplyTextParts(value[0]!['#text']) as { amount: string; unit: string };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis:\n 'Evidence provided a validated source-language annual supply / production volume value.',\n };\n }\n\n if (!isRecord(candidate)) {\n return null;\n }\n\n for (const key of [\n 'value',\n 'text',\n 'value_text',\n 'valueText',\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n ]) {\n const nested = normalizeAnnualSupplyEvidenceValue(candidate[key], context);\n if (nested) {\n return nested;\n }\n }\n\n const preferredLanguage = textValue(\n candidate.source_language ??\n candidate.sourceLanguage ??\n candidate.lang ??\n candidate['@xml:lang'],\n )?.toLowerCase();\n const english = textValue(candidate.en ?? candidate.english);\n const chinese = textValue(candidate.zh ?? candidate.chinese ?? candidate['zh-CN']);\n const localized = [\n english ? { '@xml:lang': 'en', '#text': english } : null,\n chinese ? { '@xml:lang': 'zh', '#text': chinese } : null,\n ].filter((item): item is { '#text': string; '@xml:lang': string } => Boolean(item));\n if (localized.length > 0 && isValidAnnualSupplyVolume(localized)) {\n const selected =\n localized.find((item) => item['@xml:lang'].toLowerCase() === preferredLanguage) ??\n localized[0]!;\n const value = [selected];\n const parts = annualSupplyTextParts(selected['#text']) as {\n amount: string;\n unit: string;\n };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a language-specific annual supply / production volume text value.',\n };\n }\n\n const amount = textValue(candidate.amount ?? candidate.value_amount ?? candidate.valueAmount);\n const unit = normalizeUnit(\n textValue(\n candidate.unit ?? candidate.uom ?? candidate.reference_unit ?? candidate.referenceUnit,\n ) ?? context.defaultUnit,\n );\n if (amount) {\n return {\n value: buildAnnualSupplyValue(amount, unit),\n amount,\n unit,\n basis:\n 'Evidence provided annual supply / production volume amount and unit as structured fields.',\n };\n }\n\n return null;\n}\n\nfunction isAnnualSupplyEvidencePath(pathExpression: string | null): boolean {\n if (!pathExpression) {\n return false;\n }\n return (\n pathExpression === ANNUAL_SUPPLY_FIELD ||\n pathExpression === ANNUAL_SUPPLY_ROOT_FIELD ||\n pathExpression.endsWith(`.${ANNUAL_SUPPLY_ROOT_FIELD}`) ||\n pathExpression.endsWith('.annualSupplyOrProductionVolume')\n );\n}\n\nfunction fieldPathFromEvidenceEntry(entry: JsonObject): string | null {\n return firstNonEmpty(\n entry.field_path,\n entry.fieldPath,\n entry.path,\n entry.field,\n entry.target_path,\n entry.targetPath,\n );\n}\n\nfunction findAnnualSupplyEvidenceEntry(\n container: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (!isRecord(container)) {\n return null;\n }\n\n const directPath = fieldPathFromEvidenceEntry(container);\n if (isAnnualSupplyEvidencePath(directPath)) {\n const directValue = normalizeAnnualSupplyEvidenceValue(container, context);\n if (directValue) {\n return directValue;\n }\n }\n\n for (const key of [\n 'field_values',\n 'fieldValues',\n 'field_bindings',\n 'fieldBindings',\n 'bindings',\n ]) {\n const entries = asList(container[key]).filter(isRecord);\n for (const entry of entries) {\n if (!isAnnualSupplyEvidencePath(fieldPathFromEvidenceEntry(entry))) {\n continue;\n }\n const value = normalizeAnnualSupplyEvidenceValue(entry, context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction findAnnualSupplyEvidenceValue(\n row: JsonObject,\n payload: JsonObject,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n const explicitPaths = [\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n 'required_fields.annualSupplyOrProductionVolume',\n 'requiredFields.annualSupplyOrProductionVolume',\n 'authoring.required_fields.annualSupplyOrProductionVolume',\n 'authoring.requiredFields.annualSupplyOrProductionVolume',\n 'process_authoring.required_fields.annualSupplyOrProductionVolume',\n 'processAuthoring.requiredFields.annualSupplyOrProductionVolume',\n ];\n for (const source of [row, payload]) {\n for (const explicitPath of explicitPaths) {\n const value = normalizeAnnualSupplyEvidenceValue(valueAtPath(source, explicitPath), context);\n if (value) {\n return value;\n }\n }\n }\n\n const evidencePaths = [\n 'evidence_manifest',\n 'evidenceManifest',\n 'authoring_evidence',\n 'authoringEvidence',\n 'process_authoring.evidence_manifest',\n 'processAuthoring.evidenceManifest',\n ];\n for (const source of [row, payload]) {\n for (const evidencePath of evidencePaths) {\n const value = findAnnualSupplyEvidenceEntry(valueAtPath(source, evidencePath), context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction ensureDataSources(root: JsonObject): JsonObject {\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n if (!isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)) {\n modelling.dataSourcesTreatmentAndRepresentativeness = {};\n }\n return modelling.dataSourcesTreatmentAndRepresentativeness as JsonObject;\n}\n\nfunction annualSupplyMissingDataSentinelValue(): Array<{ '#text': string; '@xml:lang': string }> {\n return [{ '@xml:lang': 'en', '#text': ANNUAL_SUPPLY_MISSING_DATA_SENTINEL_TEXT }];\n}\n\nfunction annualSupplyMissingDataSentinelCompletion(): ProcessRequiredFieldCompletion {\n return {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'missing_data_sentinel',\n value: annualSupplyMissingDataSentinelValue(),\n amount: '9999',\n unit: 'missing-data-sentinel/year',\n reference_exchange_internal_id: null,\n basis:\n 'No source annual supply or production volume evidence was available; Foundry policy uses an intentionally non-physical 9999 sentinel so database-side follow-up can bulk-locate and replace it later.',\n };\n}\n\nfunction cloneRowWithPayload(row: DatasetRowInput): { row: JsonObject; payload: JsonObject } {\n const clonedRow = cloneJson(row.row);\n if (isRecord(clonedRow.json_ordered)) {\n return { row: clonedRow, payload: clonedRow.json_ordered };\n }\n if (isRecord(clonedRow.jsonOrdered)) {\n return { row: clonedRow, payload: clonedRow.jsonOrdered };\n }\n if (isRecord(clonedRow.json)) {\n return { row: clonedRow, payload: clonedRow.json };\n }\n if (isRecord(clonedRow.payload)) {\n return { row: clonedRow, payload: clonedRow.payload };\n }\n if (isRecord(clonedRow.process)) {\n return { row: clonedRow, payload: clonedRow.process };\n }\n return { row: clonedRow, payload: clonedRow };\n}\n\nfunction completeProcessRow(\n row: DatasetRowInput,\n context: CompletionContext,\n): { row: JsonObject; report: ProcessRequiredFieldsRowReport } {\n const { row: clonedRow, payload } = cloneRowWithPayload(row);\n if (row.kind !== 'process') {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'skipped',\n issues: [],\n completions: [],\n },\n };\n }\n\n const root = processRootForMutation(payload);\n const placeholderCompletions = repairPlaceholderReviewMetadata(root);\n const requiredStructureCompletions = repairRequiredProcessStructures(root);\n const repairCompletions = [...placeholderCompletions, ...requiredStructureCompletions];\n const existingIssues = collectProcessRequiredFieldIssues(payload);\n const placeholderIssues = collectProcessPlaceholderIssues(payload);\n\n if (existingIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: repairCompletions.length > 0 ? 'completed' : 'existing',\n issues: [],\n completions: repairCompletions,\n },\n };\n }\n\n if (placeholderIssues.length > 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [...existingIssues, ...placeholderIssues],\n completions: repairCompletions,\n },\n };\n }\n\n const evidenceValue = findAnnualSupplyEvidenceValue(clonedRow, payload, context);\n if (evidenceValue) {\n const dataSources = ensureDataSources(root);\n dataSources.annualSupplyOrProductionVolume = evidenceValue.value;\n const completion: ProcessRequiredFieldCompletion = {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'evidence',\n value: evidenceValue.value,\n amount: evidenceValue.amount,\n unit: evidenceValue.unit,\n reference_exchange_internal_id: null,\n basis: evidenceValue.basis,\n };\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n }\n\n const dataSources = ensureDataSources(root);\n const completion = annualSupplyMissingDataSentinelCompletion();\n dataSources.annualSupplyOrProductionVolume = completion.value;\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n}\n\nfunction buildFiles(outPath: string, outDir: string | null): ProcessRequiredFieldsReport['files'] {\n if (!outDir) {\n return {\n output_rows: path.resolve(outPath),\n report: null,\n evidence: null,\n };\n }\n const resolved = path.resolve(outDir);\n return {\n output_rows: path.resolve(outPath),\n report: path.join(resolved, 'outputs', 'process-required-fields-report.json'),\n evidence: path.join(resolved, 'outputs', 'process-required-fields-evidence.jsonl'),\n };\n}\n\nfunction requireOutputPath(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new CliError('Missing required --out value.', {\n code: 'PROCESS_REQUIRED_FIELDS_OUT_REQUIRED',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nexport async function runProcessRequiredFieldsComplete(\n options: RunProcessRequiredFieldsCompleteOptions,\n): Promise<ProcessRequiredFieldsReport> {\n const outPath = requireOutputPath(options.outPath);\n const outDir = options.outDir?.trim() ? options.outDir.trim() : null;\n const defaultUnit = normalizeUnit(options.defaultUnit);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const flowRows = options.flowInputPath?.trim()\n ? materializeDatasetRows(options.flowInputPath, options.rawFlowInput)\n : [];\n const flowUnitById = buildFlowUnitIndex(flowRows, defaultUnit);\n const completed = rows.map((row) => completeProcessRow(row, { defaultUnit, flowUnitById }));\n const rowReports = completed.map((item) => item.report);\n const files = buildFiles(outPath, outDir);\n const blockers = rowReports.filter((row) => row.status === 'blocked');\n\n const report: ProcessRequiredFieldsReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n out_path: path.resolve(outPath),\n out_dir: outDir ? path.resolve(outDir) : null,\n status: blockers.length > 0 ? 'completed_with_blockers' : 'completed',\n default_unit: defaultUnit,\n counts: {\n total: rowReports.length,\n processes: rowReports.filter((row) => row.type === 'process').length,\n completed: rowReports.filter((row) => row.status === 'completed').length,\n existing: rowReports.filter((row) => row.status === 'existing').length,\n blocked: blockers.length,\n skipped: rowReports.filter((row) => row.status === 'skipped').length,\n },\n files,\n rows: rowReports,\n };\n\n writeJsonLinesArtifact(\n files.output_rows,\n completed.map((item) => item.row),\n );\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.evidence) {\n writeJsonLinesArtifact(\n files.evidence,\n rowReports.flatMap((row) =>\n row.completions.map((completion) => ({\n row_index: row.index,\n dataset_id: row.id,\n dataset_version: row.version,\n ...completion,\n })),\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ANNUAL_SUPPLY_MISSING_DATA_SENTINEL_TEXT,\n ANNUAL_SUPPLY_ROOT_FIELD,\n annualSupplyMissingDataSentinelValue,\n annualSupplyTextParts,\n annualSupplyValueFromText,\n cloneRowWithPayload,\n collectProcessRequiredFieldIssues,\n completeProcessRow,\n ensureDataSources,\n fieldPathFromEvidenceEntry,\n hasDeferredAnnualSupplyTrace,\n findAnnualSupplyEvidenceValue,\n findAnnualSupplyEvidenceEntry,\n buildFlowUnitIndex,\n inferUnitFromReferenceExchange,\n inferSpecificUnitFromFlowPayload,\n issuePath,\n isAnnualSupplyEvidencePath,\n isValidComplianceDeclaration,\n isValidAnnualSupplyVolume,\n isValidReview,\n normalizeAnnualSupplyEvidenceValue,\n repairRequiredProcessStructures,\n requireOutputPath,\n selectReferenceExchange,\n textValue,\n valueAtPath,\n};\n"]}
@@ -167,6 +167,20 @@ function formatPostgrestError(error) {
167
167
  hint: typeof error.hint === 'string' ? error.hint : null,
168
168
  };
169
169
  }
170
+ function isPostgrestInvalidJsonError(error, status) {
171
+ const code = trimToken(error.code);
172
+ const message = trimToken(error.message);
173
+ if (code) {
174
+ return false;
175
+ }
176
+ if (status === 0 && /^SyntaxError:/u.test(message)) {
177
+ return true;
178
+ }
179
+ return status >= 200 && status < 300;
180
+ }
181
+ function postgrestInvalidJsonDetails(error) {
182
+ return trimToken(error.details) || trimToken(error.message) || 'invalid JSON response';
183
+ }
170
184
  export async function runSupabaseArrayQuery(queryPromise, sourceUrl) {
171
185
  const data = await runSupabaseQuery(queryPromise, sourceUrl);
172
186
  return (data ?? []);
@@ -175,13 +189,11 @@ export async function runSupabaseQuery(queryPromise, sourceUrl) {
175
189
  try {
176
190
  const result = await queryPromise;
177
191
  if (result.error) {
178
- if (result.status === 0 &&
179
- result.error.code === '' &&
180
- /^SyntaxError:/u.test(result.error.message)) {
192
+ if (isPostgrestInvalidJsonError(result.error, result.status)) {
181
193
  throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {
182
194
  code: 'REMOTE_INVALID_JSON',
183
195
  exitCode: 1,
184
- details: result.error.details || result.error.message,
196
+ details: postgrestInvalidJsonDetails(result.error),
185
197
  });
186
198
  }
187
199
  throw new CliError(`HTTP ${result.status} returned from ${sourceUrl}`, {
@@ -214,13 +226,11 @@ export async function runSupabaseMutation(queryPromise, sourceUrl) {
214
226
  try {
215
227
  const result = await queryPromise;
216
228
  if (result.error) {
217
- if (result.status === 0 &&
218
- result.error.code === '' &&
219
- /^SyntaxError:/u.test(result.error.message)) {
229
+ if (isPostgrestInvalidJsonError(result.error, result.status)) {
220
230
  throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {
221
231
  code: 'REMOTE_INVALID_JSON',
222
232
  exitCode: 1,
223
- details: result.error.details || result.error.message,
233
+ details: postgrestInvalidJsonDetails(result.error),
224
234
  });
225
235
  }
226
236
  throw new CliError(`HTTP ${result.status} returned from ${sourceUrl}`, {
@@ -266,6 +276,7 @@ export function createSupabaseDataClient(runtime, fetchImpl, timeoutMs) {
266
276
  };
267
277
  }
268
278
  export const __testInternals = {
279
+ postgrestInvalidJsonDetails,
269
280
  parseBooleanEnv,
270
281
  trimToken,
271
282
  };
@@ -1 +1 @@
1
- {"version":3,"file":"supabase-client.js","sourceRoot":"","sources":["../../../src/lib/supabase-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { createClient, type PostgrestError } from '@supabase/supabase-js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\n\nexport type SupabaseRestRuntime = {\n apiBaseUrl: string;\n userApiKey: string;\n publishableKey: string;\n sessionFile: string | null;\n disableSessionCache: boolean;\n forceReauth: boolean;\n};\n\nexport type SupabaseDataRuntime = {\n apiBaseUrl: string;\n publishableKey: string;\n getAccessToken: () => Promise<string>;\n refreshAccessToken?: () => Promise<string>;\n};\n\nfunction trimToken(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction parseBooleanEnv(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n\n switch (value.trim().toLowerCase()) {\n case '1':\n case 'true':\n case 'yes':\n case 'on':\n return true;\n default:\n return false;\n }\n}\n\nexport function requireSupabaseRestRuntime(env: NodeJS.ProcessEnv): SupabaseRestRuntime {\n const apiBaseUrl = trimToken(env.TIANGONG_LCA_API_BASE_URL);\n const userApiKey = trimToken(env.TIANGONG_LCA_API_KEY);\n const publishableKey = trimToken(env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY);\n const sessionFile = trimToken(env.TIANGONG_LCA_SESSION_FILE) || null;\n const disableSessionCache = parseBooleanEnv(env.TIANGONG_LCA_DISABLE_SESSION_CACHE);\n const forceReauth = parseBooleanEnv(env.TIANGONG_LCA_FORCE_REAUTH);\n const missing: string[] = [];\n\n if (!apiBaseUrl) {\n missing.push('TIANGONG_LCA_API_BASE_URL');\n }\n\n if (!userApiKey) {\n missing.push('TIANGONG_LCA_API_KEY');\n }\n\n if (!publishableKey) {\n missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');\n }\n\n if (missing.length > 0) {\n throw new CliError(`Missing Supabase REST runtime env: ${missing.join(', ')}`, {\n code: 'SUPABASE_REST_ENV_REQUIRED',\n exitCode: 2,\n details: { missing },\n });\n }\n\n return {\n apiBaseUrl,\n userApiKey,\n publishableKey,\n sessionFile,\n disableSessionCache,\n forceReauth,\n };\n}\n\nfunction normalizeBaseUrl(apiBaseUrl: string): string {\n const normalized = apiBaseUrl.trim().replace(/\\/+$/u, '');\n if (!normalized) {\n throw new CliError('Cannot derive Supabase URLs from an empty API base URL.', {\n code: 'SUPABASE_REST_BASE_URL_INVALID',\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nexport function deriveSupabaseProjectBaseUrl(apiBaseUrl: string): string {\n const normalized = normalizeBaseUrl(apiBaseUrl);\n\n if (normalized.endsWith('/functions/v1')) {\n return normalized.replace(/\\/functions\\/v1$/u, '');\n }\n\n if (normalized.endsWith('/rest/v1')) {\n return normalized.replace(/\\/rest\\/v1$/u, '');\n }\n\n if (/^https?:\\/\\/[^/]+$/u.test(normalized)) {\n return normalized;\n }\n\n throw new CliError(\n 'Cannot derive a Supabase project base URL from TIANGONG_LCA_API_BASE_URL. Use a Supabase project base URL, a /functions/v1 base URL, or a /rest/v1 base URL.',\n {\n code: 'SUPABASE_REST_BASE_URL_INVALID',\n exitCode: 2,\n details: normalized,\n },\n );\n}\n\nexport function deriveSupabaseRestBaseUrl(apiBaseUrl: string): string {\n return `${deriveSupabaseProjectBaseUrl(apiBaseUrl)}/rest/v1`;\n}\n\nexport const deriveSupabaseFunctionsBaseUrl = (apiBaseUrl: string): string =>\n `${deriveSupabaseProjectBaseUrl(apiBaseUrl)}/functions/v1`;\n\nfunction mergeSignals(signal: AbortSignal | null | undefined, timeoutMs: number): AbortSignal {\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n}\n\nexport function buildSupabaseAuthHeaders(\n publishableKey: string,\n accessToken: string,\n): Record<string, string> {\n return {\n Accept: 'application/json',\n Authorization: `Bearer ${accessToken}`,\n apikey: publishableKey,\n };\n}\n\nasync function toResponse(\n responseLike: ResponseLike,\n method: string | undefined,\n): Promise<Response> {\n if (responseLike instanceof Response) {\n return responseLike;\n }\n\n const body = await responseLike.text();\n const contentType = responseLike.headers.get('content-type') ?? '';\n const normalizedBody =\n responseLike.ok &&\n method !== undefined &&\n !['GET', 'HEAD'].includes(method.toUpperCase()) &&\n body.length > 0 &&\n !contentType.includes('application/json')\n ? ''\n : body;\n const headers = new Headers();\n for (const headerName of ['content-type', 'content-range', 'location']) {\n const value = responseLike.headers.get(headerName);\n if (value) {\n headers.set(headerName, value);\n }\n }\n\n return new Response(normalizedBody, {\n status: responseLike.status,\n headers,\n });\n}\n\nfunction buildResolvedHeaders(\n initHeaders: HeadersInit | undefined,\n publishableKey: string,\n accessToken: string,\n): Headers {\n const headers = new Headers(initHeaders);\n const authHeaders = buildSupabaseAuthHeaders(publishableKey, accessToken);\n\n Object.entries(authHeaders).forEach(([headerName, value]) => {\n headers.set(headerName, value);\n });\n\n return headers;\n}\n\nasync function performFetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n fetchImpl: FetchLike,\n timeoutMs: number,\n): Promise<ResponseLike> {\n const url =\n typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n try {\n return await fetchImpl(url, {\n ...init,\n signal: mergeSignals(init?.signal, timeoutMs),\n });\n } catch (error) {\n throw error instanceof Error ? error : new Error(String(error));\n }\n}\n\nexport function createSupabaseFetch(\n fetchImpl: FetchLike,\n timeoutMs: number,\n runtime?: SupabaseDataRuntime,\n): typeof fetch {\n return async (input, init) => {\n if (!runtime) {\n const responseLike = await performFetch(input, init, fetchImpl, timeoutMs);\n return toResponse(responseLike, init?.method);\n }\n\n const accessToken = await runtime.getAccessToken();\n let responseLike = await performFetch(\n input,\n {\n ...init,\n headers: buildResolvedHeaders(init?.headers, runtime.publishableKey, accessToken),\n },\n fetchImpl,\n timeoutMs,\n );\n\n if (\n [401, 403].includes(responseLike.status) &&\n typeof runtime.refreshAccessToken === 'function'\n ) {\n const refreshedAccessToken = await runtime.refreshAccessToken();\n responseLike = await performFetch(\n input,\n {\n ...init,\n headers: buildResolvedHeaders(\n init?.headers,\n runtime.publishableKey,\n refreshedAccessToken,\n ),\n },\n fetchImpl,\n timeoutMs,\n );\n }\n\n return toResponse(responseLike, init?.method);\n };\n}\n\ntype SupabaseQueryResult<T> = {\n data: T | null;\n error: PostgrestError | null;\n status: number;\n};\n\nfunction formatPostgrestError(error: PostgrestError): {\n code: string | null;\n message: string;\n details: string | null;\n hint: string | null;\n} {\n return {\n code: typeof error.code === 'string' ? error.code : null,\n message: error.message,\n details: typeof error.details === 'string' ? error.details : null,\n hint: typeof error.hint === 'string' ? error.hint : null,\n };\n}\n\nexport async function runSupabaseArrayQuery<T>(\n queryPromise: PromiseLike<SupabaseQueryResult<T[]>>,\n sourceUrl: string,\n): Promise<T[]> {\n const data = await runSupabaseQuery(queryPromise, sourceUrl);\n return (data ?? []) as T[];\n}\n\nexport async function runSupabaseQuery<T>(\n queryPromise: PromiseLike<SupabaseQueryResult<T>>,\n sourceUrl: string,\n): Promise<T | null> {\n try {\n const result = await queryPromise;\n if (result.error) {\n if (\n result.status === 0 &&\n result.error.code === '' &&\n /^SyntaxError:/u.test(result.error.message)\n ) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: result.error.details || result.error.message,\n });\n }\n\n throw new CliError(`HTTP ${result.status} returned from ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: formatPostgrestError(result.error),\n });\n }\n return result.data;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (error instanceof SyntaxError) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: error.message,\n });\n }\n\n throw new CliError(`Supabase request failed for ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nexport async function runSupabaseMutation(\n queryPromise: PromiseLike<{\n error: PostgrestError | null;\n status: number;\n }>,\n sourceUrl: string,\n): Promise<void> {\n try {\n const result = await queryPromise;\n if (result.error) {\n if (\n result.status === 0 &&\n result.error.code === '' &&\n /^SyntaxError:/u.test(result.error.message)\n ) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: result.error.details || result.error.message,\n });\n }\n\n throw new CliError(`HTTP ${result.status} returned from ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: formatPostgrestError(result.error),\n });\n }\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (error instanceof SyntaxError) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: error.message,\n });\n }\n\n throw new CliError(`Supabase request failed for ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nexport function createSupabaseDataClient(\n runtime: SupabaseDataRuntime,\n fetchImpl: FetchLike,\n timeoutMs: number,\n) {\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n\n return {\n client: createClient(projectBaseUrl, runtime.publishableKey, {\n auth: {\n autoRefreshToken: false,\n persistSession: false,\n detectSessionInUrl: false,\n },\n global: {\n fetch: createSupabaseFetch(fetchImpl, timeoutMs, runtime),\n },\n }),\n restBaseUrl: deriveSupabaseRestBaseUrl(projectBaseUrl),\n functionsBaseUrl: deriveSupabaseFunctionsBaseUrl(projectBaseUrl),\n };\n}\n\nexport const __testInternals = {\n parseBooleanEnv,\n trimToken,\n};\n"]}
1
+ {"version":3,"file":"supabase-client.js","sourceRoot":"","sources":["../../../src/lib/supabase-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { createClient, type PostgrestError } from '@supabase/supabase-js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\n\nexport type SupabaseRestRuntime = {\n apiBaseUrl: string;\n userApiKey: string;\n publishableKey: string;\n sessionFile: string | null;\n disableSessionCache: boolean;\n forceReauth: boolean;\n};\n\nexport type SupabaseDataRuntime = {\n apiBaseUrl: string;\n publishableKey: string;\n getAccessToken: () => Promise<string>;\n refreshAccessToken?: () => Promise<string>;\n};\n\nfunction trimToken(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction parseBooleanEnv(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n\n switch (value.trim().toLowerCase()) {\n case '1':\n case 'true':\n case 'yes':\n case 'on':\n return true;\n default:\n return false;\n }\n}\n\nexport function requireSupabaseRestRuntime(env: NodeJS.ProcessEnv): SupabaseRestRuntime {\n const apiBaseUrl = trimToken(env.TIANGONG_LCA_API_BASE_URL);\n const userApiKey = trimToken(env.TIANGONG_LCA_API_KEY);\n const publishableKey = trimToken(env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY);\n const sessionFile = trimToken(env.TIANGONG_LCA_SESSION_FILE) || null;\n const disableSessionCache = parseBooleanEnv(env.TIANGONG_LCA_DISABLE_SESSION_CACHE);\n const forceReauth = parseBooleanEnv(env.TIANGONG_LCA_FORCE_REAUTH);\n const missing: string[] = [];\n\n if (!apiBaseUrl) {\n missing.push('TIANGONG_LCA_API_BASE_URL');\n }\n\n if (!userApiKey) {\n missing.push('TIANGONG_LCA_API_KEY');\n }\n\n if (!publishableKey) {\n missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');\n }\n\n if (missing.length > 0) {\n throw new CliError(`Missing Supabase REST runtime env: ${missing.join(', ')}`, {\n code: 'SUPABASE_REST_ENV_REQUIRED',\n exitCode: 2,\n details: { missing },\n });\n }\n\n return {\n apiBaseUrl,\n userApiKey,\n publishableKey,\n sessionFile,\n disableSessionCache,\n forceReauth,\n };\n}\n\nfunction normalizeBaseUrl(apiBaseUrl: string): string {\n const normalized = apiBaseUrl.trim().replace(/\\/+$/u, '');\n if (!normalized) {\n throw new CliError('Cannot derive Supabase URLs from an empty API base URL.', {\n code: 'SUPABASE_REST_BASE_URL_INVALID',\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nexport function deriveSupabaseProjectBaseUrl(apiBaseUrl: string): string {\n const normalized = normalizeBaseUrl(apiBaseUrl);\n\n if (normalized.endsWith('/functions/v1')) {\n return normalized.replace(/\\/functions\\/v1$/u, '');\n }\n\n if (normalized.endsWith('/rest/v1')) {\n return normalized.replace(/\\/rest\\/v1$/u, '');\n }\n\n if (/^https?:\\/\\/[^/]+$/u.test(normalized)) {\n return normalized;\n }\n\n throw new CliError(\n 'Cannot derive a Supabase project base URL from TIANGONG_LCA_API_BASE_URL. Use a Supabase project base URL, a /functions/v1 base URL, or a /rest/v1 base URL.',\n {\n code: 'SUPABASE_REST_BASE_URL_INVALID',\n exitCode: 2,\n details: normalized,\n },\n );\n}\n\nexport function deriveSupabaseRestBaseUrl(apiBaseUrl: string): string {\n return `${deriveSupabaseProjectBaseUrl(apiBaseUrl)}/rest/v1`;\n}\n\nexport const deriveSupabaseFunctionsBaseUrl = (apiBaseUrl: string): string =>\n `${deriveSupabaseProjectBaseUrl(apiBaseUrl)}/functions/v1`;\n\nfunction mergeSignals(signal: AbortSignal | null | undefined, timeoutMs: number): AbortSignal {\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n}\n\nexport function buildSupabaseAuthHeaders(\n publishableKey: string,\n accessToken: string,\n): Record<string, string> {\n return {\n Accept: 'application/json',\n Authorization: `Bearer ${accessToken}`,\n apikey: publishableKey,\n };\n}\n\nasync function toResponse(\n responseLike: ResponseLike,\n method: string | undefined,\n): Promise<Response> {\n if (responseLike instanceof Response) {\n return responseLike;\n }\n\n const body = await responseLike.text();\n const contentType = responseLike.headers.get('content-type') ?? '';\n const normalizedBody =\n responseLike.ok &&\n method !== undefined &&\n !['GET', 'HEAD'].includes(method.toUpperCase()) &&\n body.length > 0 &&\n !contentType.includes('application/json')\n ? ''\n : body;\n const headers = new Headers();\n for (const headerName of ['content-type', 'content-range', 'location']) {\n const value = responseLike.headers.get(headerName);\n if (value) {\n headers.set(headerName, value);\n }\n }\n\n return new Response(normalizedBody, {\n status: responseLike.status,\n headers,\n });\n}\n\nfunction buildResolvedHeaders(\n initHeaders: HeadersInit | undefined,\n publishableKey: string,\n accessToken: string,\n): Headers {\n const headers = new Headers(initHeaders);\n const authHeaders = buildSupabaseAuthHeaders(publishableKey, accessToken);\n\n Object.entries(authHeaders).forEach(([headerName, value]) => {\n headers.set(headerName, value);\n });\n\n return headers;\n}\n\nasync function performFetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n fetchImpl: FetchLike,\n timeoutMs: number,\n): Promise<ResponseLike> {\n const url =\n typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n\n try {\n return await fetchImpl(url, {\n ...init,\n signal: mergeSignals(init?.signal, timeoutMs),\n });\n } catch (error) {\n throw error instanceof Error ? error : new Error(String(error));\n }\n}\n\nexport function createSupabaseFetch(\n fetchImpl: FetchLike,\n timeoutMs: number,\n runtime?: SupabaseDataRuntime,\n): typeof fetch {\n return async (input, init) => {\n if (!runtime) {\n const responseLike = await performFetch(input, init, fetchImpl, timeoutMs);\n return toResponse(responseLike, init?.method);\n }\n\n const accessToken = await runtime.getAccessToken();\n let responseLike = await performFetch(\n input,\n {\n ...init,\n headers: buildResolvedHeaders(init?.headers, runtime.publishableKey, accessToken),\n },\n fetchImpl,\n timeoutMs,\n );\n\n if (\n [401, 403].includes(responseLike.status) &&\n typeof runtime.refreshAccessToken === 'function'\n ) {\n const refreshedAccessToken = await runtime.refreshAccessToken();\n responseLike = await performFetch(\n input,\n {\n ...init,\n headers: buildResolvedHeaders(\n init?.headers,\n runtime.publishableKey,\n refreshedAccessToken,\n ),\n },\n fetchImpl,\n timeoutMs,\n );\n }\n\n return toResponse(responseLike, init?.method);\n };\n}\n\ntype SupabaseQueryResult<T> = {\n data: T | null;\n error: PostgrestError | null;\n status: number;\n};\n\nfunction formatPostgrestError(error: PostgrestError): {\n code: string | null;\n message: string;\n details: string | null;\n hint: string | null;\n} {\n return {\n code: typeof error.code === 'string' ? error.code : null,\n message: error.message,\n details: typeof error.details === 'string' ? error.details : null,\n hint: typeof error.hint === 'string' ? error.hint : null,\n };\n}\n\nfunction isPostgrestInvalidJsonError(error: PostgrestError, status: number): boolean {\n const code = trimToken(error.code);\n const message = trimToken(error.message);\n if (code) {\n return false;\n }\n\n if (status === 0 && /^SyntaxError:/u.test(message)) {\n return true;\n }\n\n return status >= 200 && status < 300;\n}\n\nfunction postgrestInvalidJsonDetails(error: PostgrestError): string {\n return trimToken(error.details) || trimToken(error.message) || 'invalid JSON response';\n}\n\nexport async function runSupabaseArrayQuery<T>(\n queryPromise: PromiseLike<SupabaseQueryResult<T[]>>,\n sourceUrl: string,\n): Promise<T[]> {\n const data = await runSupabaseQuery(queryPromise, sourceUrl);\n return (data ?? []) as T[];\n}\n\nexport async function runSupabaseQuery<T>(\n queryPromise: PromiseLike<SupabaseQueryResult<T>>,\n sourceUrl: string,\n): Promise<T | null> {\n try {\n const result = await queryPromise;\n if (result.error) {\n if (isPostgrestInvalidJsonError(result.error, result.status)) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: postgrestInvalidJsonDetails(result.error),\n });\n }\n\n throw new CliError(`HTTP ${result.status} returned from ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: formatPostgrestError(result.error),\n });\n }\n return result.data;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (error instanceof SyntaxError) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: error.message,\n });\n }\n\n throw new CliError(`Supabase request failed for ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nexport async function runSupabaseMutation(\n queryPromise: PromiseLike<{\n error: PostgrestError | null;\n status: number;\n }>,\n sourceUrl: string,\n): Promise<void> {\n try {\n const result = await queryPromise;\n if (result.error) {\n if (isPostgrestInvalidJsonError(result.error, result.status)) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: postgrestInvalidJsonDetails(result.error),\n });\n }\n\n throw new CliError(`HTTP ${result.status} returned from ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: formatPostgrestError(result.error),\n });\n }\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n\n if (error instanceof SyntaxError) {\n throw new CliError(`Remote response was not valid JSON for ${sourceUrl}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: error.message,\n });\n }\n\n throw new CliError(`Supabase request failed for ${sourceUrl}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\nexport function createSupabaseDataClient(\n runtime: SupabaseDataRuntime,\n fetchImpl: FetchLike,\n timeoutMs: number,\n) {\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n\n return {\n client: createClient(projectBaseUrl, runtime.publishableKey, {\n auth: {\n autoRefreshToken: false,\n persistSession: false,\n detectSessionInUrl: false,\n },\n global: {\n fetch: createSupabaseFetch(fetchImpl, timeoutMs, runtime),\n },\n }),\n restBaseUrl: deriveSupabaseRestBaseUrl(projectBaseUrl),\n functionsBaseUrl: deriveSupabaseFunctionsBaseUrl(projectBaseUrl),\n };\n}\n\nexport const __testInternals = {\n postgrestInvalidJsonDetails,\n parseBooleanEnv,\n trimToken,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiangong-lca/cli",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "Unified TianGong LCA CLI with direct REST adapters and low-entropy command surface.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,6 +15,7 @@
15
15
  "tiangong-lca": "./bin/tiangong-lca.js"
16
16
  },
17
17
  "files": [
18
+ "assets/",
18
19
  "bin/",
19
20
  "dist/",
20
21
  "README.md",