@tiangong-lca/cli 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"process-scope-statistics.js","sourceRoot":"","sources":["../../../src/lib/process-scope-statistics.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: processes\nimport path from 'node:path';\nimport {\n readJsonArtifact,\n readJsonLinesArtifact,\n writeJsonArtifact,\n writeJsonLinesArtifact,\n writeTextArtifact,\n} from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n deriveSupabaseProjectBaseUrl,\n deriveSupabaseRestBaseUrl,\n requireSupabaseRestRuntime,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport { redactEmail } from './user-api-key.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_STATE_CODES = [0, 100] as const;\nconst DEFAULT_PAGE_SIZE = 200;\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_RETRIES = 4;\n\ntype ProcessScopeStatisticsScope = 'visible' | 'current-user';\n\ntype SnapshotRow = {\n id: string;\n version: string;\n state_code: number | null;\n user_id: string | null;\n modified_at: string | null;\n model_id: string | null;\n json: JsonRecord;\n};\n\ntype ClassificationEntry = {\n level: number;\n text: string;\n};\n\ntype StatisticsMetadata = {\n userId: string | null;\n maskedUserEmail: string | null;\n totalRowsReportedByRemote: number | null;\n};\n\ntype StatisticsOptions = {\n scope: ProcessScopeStatisticsScope;\n stateCodes: number[];\n};\n\ntype CountRecord = {\n count: number;\n [key: string]: unknown;\n};\n\nexport type RunProcessScopeStatisticsOptions = {\n outDir: string;\n scope?: ProcessScopeStatisticsScope;\n stateCodes?: number[];\n pageSize?: number | null;\n reuseSnapshot?: boolean;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n maxRetries?: number;\n now?: Date;\n};\n\nexport type ProcessScopeStatisticsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_scope_statistics';\n out_dir: string;\n scope: ProcessScopeStatisticsScope;\n state_codes: number[];\n total_process_rows: number;\n domain_count_primary: number;\n domain_count_leaf: number;\n craft_count: number;\n unit_process_rows: number;\n product_count: number;\n files: {\n snapshot_manifest: string;\n snapshot_rows: string;\n process_scope_summary: string;\n domain_summary: string;\n craft_summary: string;\n product_summary: string;\n type_of_dataset_summary: string;\n report: string;\n report_zh: string;\n };\n};\n\ntype ProcessScopeStatisticsSummary = {\n schema_version: 1;\n generated_at_utc: string;\n scope: ProcessScopeStatisticsScope;\n state_codes: number[];\n user_id: string | null;\n masked_user_email: string | null;\n total_process_rows: number;\n total_rows_reported_by_remote: number | null;\n rows_by_state_code: Record<string, number>;\n distinct_visible_owner_user_ids: number;\n domain_count_primary: number;\n domain_count_leaf: number;\n craft_count: number;\n unit_process_rows: number;\n unit_process_share: number;\n product_count: number;\n products_with_flow_id: number;\n products_without_flow_id: number;\n rows_missing_classification: number;\n rows_missing_craft: number;\n rows_missing_product: number;\n rows_missing_reference_exchange: number;\n metric_definitions: Record<string, string>;\n};\n\ntype ProcessScopeStatisticsArtifacts = {\n summary: ProcessScopeStatisticsSummary;\n domainPrimarySummary: Array<{\n domain: string;\n count: number;\n sample_path?: string;\n }>;\n domainLeafSummary: Array<{\n domain: string;\n count: number;\n sample_path?: string;\n }>;\n craftSummary: Array<{\n craft_signature: string;\n label: string;\n count: number;\n source_kind: string;\n }>;\n productSummary: Array<{\n product_key: string;\n label: string;\n count: number;\n stable_flow_id: string;\n stable_flow_version: string;\n source_kind: string;\n }>;\n typeOfDataSetSummary: Array<{\n type_of_dataset: string;\n count: number;\n }>;\n craftSourceSummary: Array<{\n source_kind: string;\n count: number;\n }>;\n productSourceSummary: Array<{\n source_kind: string;\n count: number;\n }>;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction normalizeOptionalToken(value: unknown): string | null {\n const trimmed = trimText(value);\n return trimmed ? trimmed : null;\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction toPositiveInteger(value: number | null | undefined, label: string, code: string): number {\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value as number;\n}\n\nfunction normalizeStateCodes(value: readonly number[] | undefined): number[] {\n if (!Array.isArray(value) || value.length === 0) {\n return [...DEFAULT_STATE_CODES];\n }\n\n const seen = new Set<number>();\n const normalized: number[] = [];\n for (const entry of value) {\n if (!Number.isInteger(entry) || entry < 0) {\n throw new CliError('Expected --state-codes to contain only non-negative integers.', {\n code: 'PROCESS_SCOPE_STATE_CODES_INVALID',\n exitCode: 2,\n });\n }\n if (!seen.has(entry)) {\n normalized.push(entry);\n seen.add(entry);\n }\n }\n if (normalized.length === 0) {\n throw new CliError('--state-codes must contain at least one state code.', {\n code: 'PROCESS_SCOPE_STATE_CODES_REQUIRED',\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction ensureScope(value: string | undefined): ProcessScopeStatisticsScope {\n if (value === undefined || value === 'visible') {\n return 'visible';\n }\n if (value === 'current-user') {\n return 'current-user';\n }\n throw new CliError(\"Expected --scope to be either 'visible' or 'current-user'.\", {\n code: 'PROCESS_SCOPE_SCOPE_INVALID',\n exitCode: 2,\n });\n}\n\nasync function parseJsonResponse(response: ResponseLike, label: string): Promise<unknown> {\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (!text.trim()) {\n return null;\n }\n if (!contentType.includes('application/json')) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new CliError(`${label} returned invalid JSON.`, {\n code: 'PROCESS_SCOPE_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n}\n\nasync function fetchJsonWithRetry(options: {\n url: string;\n init: RequestInit;\n label: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<{ status: number; headers: Headers; body: unknown }> {\n let lastError: unknown = null;\n\n for (let attempt = 1; attempt <= options.maxRetries; attempt += 1) {\n try {\n const response = await options.fetchImpl(options.url, {\n ...options.init,\n signal: AbortSignal.timeout(options.timeoutMs),\n });\n const body = await parseJsonResponse(response, options.label);\n if (!response.ok) {\n throw new CliError(`${options.label} failed with ${response.status}.`, {\n code: 'PROCESS_SCOPE_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: {\n status: response.status,\n body,\n url: options.url,\n },\n });\n }\n return {\n status: response.status,\n headers: new Headers({\n 'content-range': response.headers.get('content-range') ?? '',\n 'content-type': response.headers.get('content-type') ?? '',\n }),\n body,\n };\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxRetries) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, attempt * 1_500));\n }\n }\n\n if (lastError instanceof CliError) {\n throw lastError;\n }\n\n throw new CliError(`${options.label} failed after ${options.maxRetries} attempt(s).`, {\n code: 'PROCESS_SCOPE_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: String(lastError),\n });\n}\n\nasync function resolveCurrentUserId(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n maxRetries: number;\n}): Promise<string> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n const body = await fetchJsonWithRetry({\n url: `${deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl)}/auth/v1/user`,\n init: {\n method: 'GET',\n headers: {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: 'supabase current-user lookup',\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const userId = isRecord(body.body) ? normalizeOptionalToken(body.body.id) : null;\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_SCOPE_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n });\n }\n return userId;\n}\n\nasync function fetchProcessRows(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n scope: ProcessScopeStatisticsScope;\n stateCodes: number[];\n pageSize: number;\n userId: string | null;\n}): Promise<{ rows: SnapshotRow[]; total: number | null }> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n const processCapability = resolveDataApiCapability({\n kind: 'relation',\n name: 'processes',\n env: options.env,\n });\n const rows: SnapshotRow[] = [];\n let total = 0;\n\n for (const stateCode of options.stateCodes) {\n let stateTotal: number | null = null;\n let cursorId = '';\n\n while (true) {\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(projectBaseUrl), processCapability),\n );\n url.searchParams.set('select', 'id,version,state_code,user_id,modified_at,model_id,json');\n url.searchParams.set('state_code', `eq.${stateCode}`);\n if (options.scope === 'current-user') {\n url.searchParams.set('user_id', `eq.${options.userId ?? ''}`);\n }\n if (cursorId) {\n url.searchParams.set('id', `gt.${cursorId}`);\n }\n url.searchParams.set('order', 'id.asc');\n url.searchParams.set('limit', String(options.pageSize));\n\n const page = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n ...(stateTotal === null ? { Prefer: 'count=exact' } : {}),\n },\n processCapability,\n ),\n },\n label: `process scope statistics page fetch (state_code=${stateCode})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const pageRows = Array.isArray(page.body) ? page.body : [];\n const normalizedRows = pageRows\n .map((row) => normalizeSnapshotRow(row))\n .filter((row): row is SnapshotRow => row !== null);\n rows.push(...normalizedRows);\n\n if (stateTotal === null) {\n const match = page.headers.get('content-range')?.match(/\\/(\\d+)$/u) ?? null;\n stateTotal = match ? Number.parseInt(match[1]!, 10) : null;\n if (stateTotal !== null) {\n total += stateTotal;\n }\n }\n\n if (normalizedRows.length < options.pageSize) {\n break;\n }\n\n const lastRow = normalizedRows[normalizedRows.length - 1]!;\n cursorId = lastRow.id;\n }\n }\n\n return {\n rows,\n total: total || null,\n };\n}\n\nfunction normalizeSnapshotRow(value: unknown): SnapshotRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = normalizeOptionalToken(value.id);\n const version = normalizeOptionalToken(value.version);\n const payload = normalizePayload(value.json);\n if (!id || !version || !payload) {\n return null;\n }\n return {\n id,\n version,\n state_code: typeof value.state_code === 'number' ? value.state_code : null,\n user_id: normalizeOptionalToken(value.user_id),\n modified_at: normalizeOptionalToken(value.modified_at),\n model_id: normalizeOptionalToken(value.model_id),\n json: payload,\n };\n}\n\nfunction normalizePayload(value: unknown): JsonRecord | null {\n if (isRecord(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim()) {\n try {\n const parsed = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction getLangList(value: unknown): JsonRecord[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((item): item is JsonRecord => isRecord(item));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((item): item is JsonRecord => isRecord(item));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (typeof value['#text'] === 'string' || typeof value['@xml:lang'] === 'string') {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const list = getLangList(value);\n const exact =\n lang === null\n ? null\n : list.find(\n (item) =>\n trimText(item['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(item['#text']),\n );\n const fallback = list.find((item) => trimText(item['#text']));\n return trimText((exact ?? fallback)?.['#text']);\n}\n\nfunction getAnyLangText(value: unknown): string {\n return getLangText(value, null);\n}\n\nfunction asArray(value: unknown): unknown[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction extractClassificationEntries(dataSetInformation: JsonRecord): ClassificationEntry[] {\n const classes = asArray(\n (dataSetInformation.classificationInformation as JsonRecord | undefined)?.[\n 'common:classification'\n ] &&\n (\n (dataSetInformation.classificationInformation as JsonRecord)['common:classification'] as\n | JsonRecord\n | undefined\n )?.['common:class'],\n );\n\n return classes\n .map((entry) => {\n if (!isRecord(entry)) {\n return null;\n }\n const level = Number.parseInt(trimText(entry['@level']) || '0', 10);\n const text = trimText(entry['#text']);\n if (!text) {\n return null;\n }\n return { level, text };\n })\n .filter((entry): entry is ClassificationEntry => entry !== null)\n .sort((left, right) => left.level - right.level);\n}\n\nfunction normalizeSignature(text: string): string {\n return trimText(text)\n .normalize('NFKC')\n .toLowerCase()\n .replace(/[\\u3000\\u00a0]/gu, ' ')\n .replace(/[,,;;::()()[\\]{}<>|/\\\\]+/gu, ' ')\n .replace(/\\s+/gu, ' ')\n .trim();\n}\n\nfunction firstClause(text: string): string {\n const normalized = trimText(text);\n if (!normalized) {\n return '';\n }\n const [first] = normalized.split(/[.;;。]/u);\n return first.trim();\n}\n\nfunction renderProcessName(name: JsonRecord): string {\n const parts = [\n getLangText(name.baseName, 'en') ||\n getLangText(name.baseName, 'zh') ||\n getAnyLangText(name.baseName),\n getLangText(name.treatmentStandardsRoutes, 'en') ||\n getLangText(name.treatmentStandardsRoutes, 'zh') ||\n getAnyLangText(name.treatmentStandardsRoutes),\n getLangText(name.mixAndLocationTypes, 'en') ||\n getLangText(name.mixAndLocationTypes, 'zh') ||\n getAnyLangText(name.mixAndLocationTypes),\n getLangText(name.functionalUnitFlowProperties, 'en') ||\n getLangText(name.functionalUnitFlowProperties, 'zh') ||\n getAnyLangText(name.functionalUnitFlowProperties),\n ].filter((part) => trimText(part));\n\n return parts.join('; ');\n}\n\nfunction extractCraftCandidate(\n dataSetInformation: JsonRecord,\n technology: JsonRecord,\n): {\n source_kind: string;\n label: string;\n signature: string;\n} {\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const candidates = [\n {\n source_kind: 'treatmentStandardsRoutes',\n label:\n getLangText(name.treatmentStandardsRoutes, 'en') ||\n getLangText(name.treatmentStandardsRoutes, 'zh') ||\n getAnyLangText(name.treatmentStandardsRoutes),\n },\n {\n source_kind: 'technologyDescriptionAndIncludedProcesses',\n label:\n firstClause(getLangText(technology.technologyDescriptionAndIncludedProcesses, 'en')) ||\n firstClause(getLangText(technology.technologyDescriptionAndIncludedProcesses, 'zh')) ||\n firstClause(getAnyLangText(technology.technologyDescriptionAndIncludedProcesses)),\n },\n {\n source_kind: 'baseName',\n label:\n getLangText(name.baseName, 'en') ||\n getLangText(name.baseName, 'zh') ||\n getAnyLangText(name.baseName),\n },\n ];\n\n for (const candidate of candidates) {\n if (trimText(candidate.label)) {\n return {\n ...candidate,\n signature: normalizeSignature(candidate.label),\n };\n }\n }\n\n return {\n source_kind: 'missing',\n label: '',\n signature: '',\n };\n}\n\nfunction extractReferenceProduct(\n processDataSet: JsonRecord,\n dataSetInformation: JsonRecord,\n): {\n key: string;\n stable_flow_id: string;\n stable_flow_version: string;\n label: string;\n source_kind: string;\n missing_reference_exchange: boolean;\n} {\n const processInformation = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const quantRef = isRecord(processInformation.quantitativeReference)\n ? processInformation.quantitativeReference\n : {};\n const refInternalId = trimText(quantRef.referenceToReferenceFlow);\n const exchangesBlock = isRecord(processDataSet.exchanges) ? processDataSet.exchanges : {};\n const exchanges = asArray(exchangesBlock.exchange);\n const refExchange = exchanges.find(\n (exchange) => isRecord(exchange) && trimText(exchange['@dataSetInternalID']) === refInternalId,\n );\n const exchange = isRecord(refExchange) ? refExchange : null;\n const flowRef =\n exchange && isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n\n const flowRefId = trimText(flowRef['@refObjectId']);\n const flowRefVersion = trimText(flowRef['@version']);\n const shortDescription =\n getLangText(flowRef['common:shortDescription'], 'en') ||\n getLangText(flowRef['common:shortDescription'], 'zh') ||\n getAnyLangText(flowRef['common:shortDescription']);\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const fallbackBaseName =\n getLangText(name.baseName, 'en') ||\n getLangText(name.baseName, 'zh') ||\n getAnyLangText(name.baseName);\n const fallbackProcessName = renderProcessName(name);\n\n if (flowRefId) {\n return {\n key: `flow:${flowRefId}`,\n stable_flow_id: flowRefId,\n stable_flow_version: flowRefVersion,\n label: shortDescription || fallbackProcessName || flowRefId,\n source_kind: 'reference_flow_id',\n missing_reference_exchange: exchange === null,\n };\n }\n\n if (shortDescription) {\n return {\n key: `label:${normalizeSignature(shortDescription)}`,\n stable_flow_id: '',\n stable_flow_version: '',\n label: shortDescription,\n source_kind: 'reference_flow_short_description',\n missing_reference_exchange: exchange === null,\n };\n }\n\n if (fallbackBaseName) {\n return {\n key: `base:${normalizeSignature(fallbackBaseName)}`,\n stable_flow_id: '',\n stable_flow_version: '',\n label: fallbackBaseName,\n source_kind: 'process_base_name',\n missing_reference_exchange: exchange === null,\n };\n }\n\n return {\n key: '',\n stable_flow_id: '',\n stable_flow_version: '',\n label: '',\n source_kind: 'missing',\n missing_reference_exchange: exchange === null,\n };\n}\n\nfunction incrementCount(\n map: Map<string, CountRecord>,\n key: string,\n seed: Record<string, unknown> = {},\n): void {\n const existing = map.get(key) ?? {\n count: 0,\n ...seed,\n };\n existing.count += 1;\n map.set(key, existing);\n}\n\nfunction toSortedArray(map: Map<string, CountRecord>): Array<{ key: string } & CountRecord> {\n return [...map.entries()]\n .map(([key, value]) => ({\n key,\n ...value,\n }))\n .sort((left, right) => right.count - left.count || left.key.localeCompare(right.key));\n}\n\nfunction calculateStatistics(\n rows: SnapshotRow[],\n options: StatisticsOptions,\n metadata: StatisticsMetadata,\n generatedAtUtc: string,\n): ProcessScopeStatisticsArtifacts {\n const stateCodeCounts = new Map<string, CountRecord>();\n const typeOfDataSetCounts = new Map<string, CountRecord>();\n const domainPrimaryCounts = new Map<string, CountRecord>();\n const domainLeafCounts = new Map<string, CountRecord>();\n const craftCounts = new Map<string, CountRecord>();\n const craftSourceCounts = new Map<string, CountRecord>();\n const productCounts = new Map<string, CountRecord>();\n const productSourceCounts = new Map<string, CountRecord>();\n const ownerCounts = new Map<string, CountRecord>();\n\n let rowsMissingClassification = 0;\n let rowsMissingCraft = 0;\n let rowsMissingProduct = 0;\n let rowsMissingReferenceExchange = 0;\n let unitProcessRows = 0;\n\n for (const row of rows) {\n incrementCount(stateCodeCounts, String(row.state_code ?? 'null'));\n incrementCount(ownerCounts, row.user_id ?? 'missing');\n\n const processDataSet = isRecord(row.json.processDataSet) ? row.json.processDataSet : {};\n const processInformation = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const technology = isRecord(processInformation.technology) ? processInformation.technology : {};\n const modellingAndValidation = isRecord(processDataSet.modellingAndValidation)\n ? processDataSet.modellingAndValidation\n : {};\n const lciMethod = isRecord(modellingAndValidation.LCIMethodAndAllocation)\n ? modellingAndValidation.LCIMethodAndAllocation\n : {};\n\n const typeOfDataSet = trimText(lciMethod.typeOfDataSet) || 'missing';\n incrementCount(typeOfDataSetCounts, typeOfDataSet);\n if (typeOfDataSet.toLowerCase().includes('unit process')) {\n unitProcessRows += 1;\n }\n\n const classificationEntries = extractClassificationEntries(dataSetInformation);\n const primaryDomain =\n classificationEntries.find((entry) => entry.level === 1)?.text ??\n classificationEntries[classificationEntries.length - 1]?.text ??\n '';\n const leafDomain = classificationEntries[classificationEntries.length - 1]?.text ?? '';\n if (primaryDomain) {\n incrementCount(domainPrimaryCounts, primaryDomain, {\n sample_path: classificationEntries.map((entry) => entry.text).join(' > '),\n });\n } else {\n rowsMissingClassification += 1;\n }\n if (leafDomain) {\n incrementCount(domainLeafCounts, leafDomain, {\n sample_path: classificationEntries.map((entry) => entry.text).join(' > '),\n });\n }\n\n const craft = extractCraftCandidate(dataSetInformation, technology);\n if (craft.signature) {\n incrementCount(craftCounts, craft.signature, {\n label: craft.label,\n source_kind: craft.source_kind,\n });\n incrementCount(craftSourceCounts, craft.source_kind);\n } else {\n rowsMissingCraft += 1;\n }\n\n const product = extractReferenceProduct(processDataSet, dataSetInformation);\n if (product.key) {\n incrementCount(productCounts, product.key, {\n label: product.label,\n stable_flow_id: product.stable_flow_id,\n stable_flow_version: product.stable_flow_version,\n source_kind: product.source_kind,\n });\n incrementCount(productSourceCounts, product.source_kind);\n } else {\n rowsMissingProduct += 1;\n }\n if (product.missing_reference_exchange) {\n rowsMissingReferenceExchange += 1;\n }\n }\n\n const domainPrimarySummary = toSortedArray(domainPrimaryCounts).map((item) => ({\n domain: item.key,\n count: item.count,\n sample_path: item.sample_path as string | undefined,\n }));\n const domainLeafSummary = toSortedArray(domainLeafCounts).map((item) => ({\n domain: item.key,\n count: item.count,\n sample_path: item.sample_path as string | undefined,\n }));\n const craftSummary = toSortedArray(craftCounts).map((item) => ({\n craft_signature: item.key,\n label: item.label as string,\n count: item.count,\n source_kind: item.source_kind as string,\n }));\n const productSummary = toSortedArray(productCounts).map((item) => ({\n product_key: item.key,\n label: item.label as string,\n count: item.count,\n stable_flow_id: item.stable_flow_id as string,\n stable_flow_version: item.stable_flow_version as string,\n source_kind: item.source_kind as string,\n }));\n const typeOfDataSetSummary = toSortedArray(typeOfDataSetCounts).map((item) => ({\n type_of_dataset: item.key,\n count: item.count,\n }));\n\n return {\n summary: {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n scope: options.scope,\n state_codes: options.stateCodes,\n user_id: metadata.userId,\n masked_user_email: metadata.maskedUserEmail,\n total_process_rows: rows.length,\n total_rows_reported_by_remote: metadata.totalRowsReportedByRemote,\n rows_by_state_code: Object.fromEntries(\n [...stateCodeCounts.entries()].map(([key, value]) => [key, value.count]),\n ),\n distinct_visible_owner_user_ids: ownerCounts.size,\n domain_count_primary: domainPrimaryCounts.size,\n domain_count_leaf: domainLeafCounts.size,\n craft_count: craftCounts.size,\n unit_process_rows: unitProcessRows,\n unit_process_share: rows.length === 0 ? 0 : unitProcessRows / rows.length,\n product_count: productCounts.size,\n products_with_flow_id: productSummary.filter((item) => item.stable_flow_id).length,\n products_without_flow_id: productSummary.filter((item) => !item.stable_flow_id).length,\n rows_missing_classification: rowsMissingClassification,\n rows_missing_craft: rowsMissingCraft,\n rows_missing_product: rowsMissingProduct,\n rows_missing_reference_exchange: rowsMissingReferenceExchange,\n metric_definitions: {\n domain_count_primary:\n 'Unique level-1 classification text; fallback to the deepest available classification when level 1 is missing.',\n craft_count:\n 'Unique normalized craft or route signatures derived from treatmentStandardsRoutes, or fallback technology/base-name text.',\n unit_process_rows: 'Rows whose typeOfDataSet contains the phrase \"Unit process\".',\n product_count:\n 'Unique reference products, keyed by reference flow ID when present and by normalized label fallback otherwise.',\n },\n },\n domainPrimarySummary,\n domainLeafSummary,\n craftSummary,\n productSummary,\n typeOfDataSetSummary,\n craftSourceSummary: toSortedArray(craftSourceCounts).map((item) => ({\n source_kind: item.key,\n count: item.count,\n })),\n productSourceSummary: toSortedArray(productSourceCounts).map((item) => ({\n source_kind: item.key,\n count: item.count,\n })),\n };\n}\n\nfunction escapePipe(value: unknown): string {\n return String(value ?? '').replace(/\\|/gu, '\\\\|');\n}\n\nfunction renderMarkdownReport(\n statistics: ProcessScopeStatisticsArtifacts,\n reportLang: 'en' | 'zh',\n): string {\n const isZh = reportLang === 'zh';\n const summary = statistics.summary;\n const lines: string[] = [];\n\n lines.push(isZh ? '# Process 覆盖统计' : '# Process Scope Statistics');\n lines.push('');\n lines.push(\n isZh ? `统计时间:${summary.generated_at_utc}` : `Generated at: ${summary.generated_at_utc}`,\n );\n lines.push(\n isZh\n ? `范围:\\`scope=${summary.scope}\\`, \\`state_codes=${summary.state_codes.join(',')}\\``\n : `Scope: \\`scope=${summary.scope}\\`, \\`state_codes=${summary.state_codes.join(',')}\\``,\n );\n lines.push('');\n lines.push(isZh ? '## 核心结果' : '## Headline Metrics');\n lines.push('');\n lines.push(\n `- ${isZh ? '总 process 行数' : 'Total process rows'}: \\`${summary.total_process_rows}\\``,\n );\n lines.push(\n `- ${isZh ? '可见 owner 数' : 'Distinct visible owners'}: \\`${summary.distinct_visible_owner_user_ids}\\``,\n );\n lines.push(\n `- ${isZh ? '领域数量(一级分类口径)' : 'Domain count (primary definition)'}: \\`${summary.domain_count_primary}\\``,\n );\n lines.push(\n `- ${isZh ? '领域数量(叶子分类口径)' : 'Domain count (leaf classification)'}: \\`${summary.domain_count_leaf}\\``,\n );\n lines.push(`- ${isZh ? '工艺/路线数量' : 'Craft / route count'}: \\`${summary.craft_count}\\``);\n lines.push(`- ${isZh ? '单元过程行数' : 'Unit-process rows'}: \\`${summary.unit_process_rows}\\``);\n lines.push(`- ${isZh ? '产品数量' : 'Product count'}: \\`${summary.product_count}\\``);\n lines.push('');\n lines.push(isZh ? '## 状态分布' : '## State-code Distribution');\n lines.push('');\n Object.entries(summary.rows_by_state_code).forEach(([stateCode, count]) => {\n lines.push(`- \\`state_code=${stateCode}\\`: \\`${count}\\``);\n });\n lines.push('');\n lines.push(isZh ? '## 统计口径' : '## Metric Definitions');\n lines.push('');\n lines.push(\n `- ${isZh ? '领域' : 'Domain'}: ${\n isZh\n ? '优先使用 classification level=1;若缺失,则回退到最深层分类。'\n : 'Prefer classification level 1; fall back to the deepest available classification when level 1 is missing.'\n }`,\n );\n lines.push(\n `- ${isZh ? '工艺' : 'Craft'}: ${\n isZh\n ? '优先使用 `treatmentStandardsRoutes`;为空时回退到技术说明首句,再回退到 `baseName`。'\n : 'Prefer `treatmentStandardsRoutes`; fall back to the first clause of technology text, then to `baseName`.'\n }`,\n );\n lines.push(\n `- ${isZh ? '单元过程' : 'Unit process'}: ${\n isZh\n ? '以 `typeOfDataSet` 是否包含 `Unit process` 为准。'\n : 'Rows are counted when `typeOfDataSet` contains `Unit process`.'\n }`,\n );\n lines.push(\n `- ${isZh ? '产品' : 'Product'}: ${\n isZh\n ? '优先按 reference flow UUID 聚合;缺失时回退到 reference flow 短描述,再回退到 process base name。'\n : 'Prefer reference-flow UUIDs; fall back to reference-flow short descriptions, then to process base names.'\n }`,\n );\n lines.push('');\n\n lines.push(isZh ? '## Top 领域' : '## Top Domains');\n lines.push('');\n lines.push(`| ${isZh ? '领域' : 'Domain'} | ${isZh ? '数量' : 'Count'} |`);\n lines.push('| --- | --- |');\n statistics.domainPrimarySummary.slice(0, 15).forEach((item) => {\n lines.push(`| ${escapePipe(item.domain)} | ${item.count} |`);\n });\n lines.push('');\n\n lines.push(isZh ? '## Top 工艺/路线' : '## Top Crafts / Routes');\n lines.push('');\n lines.push(\n `| ${isZh ? '工艺/路线' : 'Craft / Route'} | ${isZh ? '数量' : 'Count'} | ${isZh ? '来源' : 'Source'} |`,\n );\n lines.push('| --- | --- | --- |');\n statistics.craftSummary.slice(0, 15).forEach((item) => {\n lines.push(`| ${escapePipe(item.label)} | ${item.count} | ${item.source_kind} |`);\n });\n lines.push('');\n\n lines.push(isZh ? '## Top 产品' : '## Top Products');\n lines.push('');\n lines.push(\n `| ${isZh ? '产品' : 'Product'} | ${isZh ? '数量' : 'Count'} | ${isZh ? '标识来源' : 'Key source'} |`,\n );\n lines.push('| --- | --- | --- |');\n statistics.productSummary.slice(0, 15).forEach((item) => {\n lines.push(`| ${escapePipe(item.label)} | ${item.count} | ${item.source_kind} |`);\n });\n lines.push('');\n\n return `${lines.join('\\n')}\\n`;\n}\n\nfunction readSnapshotRows(filePath: string): SnapshotRow[] {\n return readJsonLinesArtifact(filePath)\n .map((row) => normalizeSnapshotRow(row))\n .filter((row): row is SnapshotRow => row !== null);\n}\n\nfunction readSnapshotManifest(filePath: string): JsonRecord | null {\n const value = readJsonArtifact(filePath);\n return isRecord(value) ? value : null;\n}\n\nexport async function runProcessScopeStatistics(\n options: RunProcessScopeStatisticsOptions,\n): Promise<ProcessScopeStatisticsReport> {\n const outDir = trimText(options.outDir);\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'PROCESS_SCOPE_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n const scope = ensureScope(options.scope);\n const stateCodes = normalizeStateCodes(options.stateCodes);\n const pageSize = toPositiveInteger(\n options.pageSize ?? DEFAULT_PAGE_SIZE,\n '--page-size',\n 'PROCESS_SCOPE_PAGE_SIZE_INVALID',\n );\n const timeoutMs = toPositiveInteger(\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n '--timeout-ms',\n 'PROCESS_SCOPE_TIMEOUT_INVALID',\n );\n const maxRetries = toPositiveInteger(\n options.maxRetries ?? DEFAULT_MAX_RETRIES,\n 'process scope statistics retry count',\n 'PROCESS_SCOPE_MAX_RETRIES_INVALID',\n );\n\n const resolvedOutDir = path.resolve(outDir);\n const snapshotRowsPath = path.join(resolvedOutDir, 'inputs', 'processes.snapshot.rows.jsonl');\n const snapshotManifestPath = path.join(\n resolvedOutDir,\n 'inputs',\n 'processes.snapshot.manifest.json',\n );\n const generatedAtUtc = nowIso(options.now);\n\n let rows: SnapshotRow[];\n let metadata: StatisticsMetadata;\n\n if (options.reuseSnapshot) {\n rows = readSnapshotRows(snapshotRowsPath);\n const manifest = readSnapshotManifest(snapshotManifestPath);\n metadata = {\n userId: normalizeOptionalToken(manifest?.user_id),\n maskedUserEmail: normalizeOptionalToken(manifest?.masked_user_email),\n totalRowsReportedByRemote:\n typeof manifest?.total_rows === 'number' ? manifest.total_rows : rows.length,\n };\n } else {\n const env = options.env ?? process.env;\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const restRuntime = requireSupabaseRestRuntime(env);\n const session = await resolveSupabaseUserSession({\n runtime: restRuntime,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n });\n const userId =\n scope === 'current-user'\n ? await resolveCurrentUserId({\n env,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n maxRetries,\n })\n : null;\n const snapshot = await fetchProcessRows({\n env,\n fetchImpl,\n timeoutMs,\n maxRetries,\n scope,\n stateCodes,\n pageSize,\n userId,\n });\n rows = snapshot.rows;\n metadata = {\n userId,\n maskedUserEmail: redactEmail(session.userEmail),\n totalRowsReportedByRemote: snapshot.total ?? rows.length,\n };\n\n writeJsonLinesArtifact(snapshotRowsPath, rows);\n writeJsonArtifact(snapshotManifestPath, {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n masked_user_email: metadata.maskedUserEmail,\n user_id: metadata.userId,\n scope,\n state_codes: stateCodes,\n page_size: pageSize,\n total_rows: metadata.totalRowsReportedByRemote,\n });\n }\n\n const statistics = calculateStatistics(\n rows,\n {\n scope,\n stateCodes,\n },\n metadata,\n generatedAtUtc,\n );\n\n const summaryPath = path.join(resolvedOutDir, 'outputs', 'process-scope-summary.json');\n const domainPath = path.join(resolvedOutDir, 'outputs', 'domain-summary.json');\n const craftPath = path.join(resolvedOutDir, 'outputs', 'craft-summary.json');\n const productPath = path.join(resolvedOutDir, 'outputs', 'product-summary.json');\n const datasetTypePath = path.join(resolvedOutDir, 'outputs', 'type-of-dataset-summary.json');\n const reportPath = path.join(resolvedOutDir, 'reports', 'process-scope-statistics.md');\n const reportZhPath = path.join(resolvedOutDir, 'reports', 'process-scope-statistics.zh-CN.md');\n\n writeJsonArtifact(summaryPath, statistics.summary);\n writeJsonArtifact(domainPath, {\n primary: statistics.domainPrimarySummary,\n leaf: statistics.domainLeafSummary,\n });\n writeJsonArtifact(craftPath, {\n craft_summary: statistics.craftSummary,\n source_summary: statistics.craftSourceSummary,\n });\n writeJsonArtifact(productPath, {\n product_summary: statistics.productSummary,\n source_summary: statistics.productSourceSummary,\n });\n writeJsonArtifact(datasetTypePath, statistics.typeOfDataSetSummary);\n writeTextArtifact(reportPath, renderMarkdownReport(statistics, 'en'));\n writeTextArtifact(reportZhPath, renderMarkdownReport(statistics, 'zh'));\n\n return {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status: 'completed_process_scope_statistics',\n out_dir: resolvedOutDir,\n scope,\n state_codes: stateCodes,\n total_process_rows: statistics.summary.total_process_rows,\n domain_count_primary: statistics.summary.domain_count_primary,\n domain_count_leaf: statistics.summary.domain_count_leaf,\n craft_count: statistics.summary.craft_count,\n unit_process_rows: statistics.summary.unit_process_rows,\n product_count: statistics.summary.product_count,\n files: {\n snapshot_manifest: snapshotManifestPath,\n snapshot_rows: snapshotRowsPath,\n process_scope_summary: summaryPath,\n domain_summary: domainPath,\n craft_summary: craftPath,\n product_summary: productPath,\n type_of_dataset_summary: datasetTypePath,\n report: reportPath,\n report_zh: reportZhPath,\n },\n };\n}\n\nexport const __testInternals = {\n calculateStatistics,\n ensureScope,\n escapePipe,\n extractClassificationEntries,\n extractCraftCandidate,\n extractReferenceProduct,\n fetchJsonWithRetry,\n fetchProcessRows,\n getAnyLangText,\n getLangList,\n getLangText,\n normalizePayload,\n normalizeSignature,\n normalizeSnapshotRow,\n normalizeStateCodes,\n parseJsonResponse,\n readSnapshotManifest,\n resolveCurrentUserId,\n renderMarkdownReport,\n toPositiveInteger,\n};\n"]}
1
+ {"version":3,"file":"process-scope-statistics.js","sourceRoot":"","sources":["../../../src/lib/process-scope-statistics.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: processes\nimport path from 'node:path';\nimport {\n readJsonArtifact,\n readJsonLinesArtifact,\n writeJsonArtifact,\n writeJsonLinesArtifact,\n writeTextArtifact,\n} from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n deriveSupabaseProjectBaseUrl,\n deriveSupabaseRestBaseUrl,\n requireSupabaseRestRuntime,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport { redactEmail } from './user-api-key.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst DEFAULT_STATE_CODES = [0, 100] as const;\nconst DEFAULT_PAGE_SIZE = 200;\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_RETRIES = 4;\n\ntype ProcessScopeStatisticsScope = 'visible' | 'current-user';\n\ntype SnapshotRow = {\n id: string;\n version: string;\n state_code: number | null;\n user_id: string | null;\n modified_at: string | null;\n model_id: string | null;\n json: JsonRecord;\n};\n\ntype ClassificationEntry = {\n level: number;\n text: string;\n};\n\ntype StatisticsMetadata = {\n userId: string | null;\n maskedUserEmail: string | null;\n totalRowsReportedByRemote: number | null;\n};\n\ntype StatisticsOptions = {\n scope: ProcessScopeStatisticsScope;\n stateCodes: number[];\n};\n\ntype CountRecord = {\n count: number;\n [key: string]: unknown;\n};\n\nexport type RunProcessScopeStatisticsOptions = {\n outDir: string;\n scope?: ProcessScopeStatisticsScope;\n stateCodes?: number[];\n pageSize?: number | null;\n reuseSnapshot?: boolean;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n maxRetries?: number;\n now?: Date;\n};\n\nexport type ProcessScopeStatisticsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_scope_statistics';\n out_dir: string;\n scope: ProcessScopeStatisticsScope;\n state_codes: number[];\n total_process_rows: number;\n domain_count_primary: number;\n domain_count_leaf: number;\n craft_count: number;\n unit_process_rows: number;\n product_count: number;\n files: {\n snapshot_manifest: string;\n snapshot_rows: string;\n process_scope_summary: string;\n domain_summary: string;\n craft_summary: string;\n product_summary: string;\n type_of_dataset_summary: string;\n report: string;\n report_zh: string;\n };\n};\n\ntype ProcessScopeStatisticsSummary = {\n schema_version: 1;\n generated_at_utc: string;\n scope: ProcessScopeStatisticsScope;\n state_codes: number[];\n user_id: string | null;\n masked_user_email: string | null;\n total_process_rows: number;\n total_rows_reported_by_remote: number | null;\n rows_by_state_code: Record<string, number>;\n distinct_visible_owner_user_ids: number;\n domain_count_primary: number;\n domain_count_leaf: number;\n craft_count: number;\n unit_process_rows: number;\n unit_process_share: number;\n product_count: number;\n products_with_flow_id: number;\n products_without_flow_id: number;\n rows_missing_classification: number;\n rows_missing_craft: number;\n rows_missing_product: number;\n rows_missing_reference_exchange: number;\n metric_definitions: Record<string, string>;\n};\n\ntype ProcessScopeStatisticsArtifacts = {\n summary: ProcessScopeStatisticsSummary;\n domainPrimarySummary: Array<{\n domain: string;\n count: number;\n sample_path?: string;\n }>;\n domainLeafSummary: Array<{\n domain: string;\n count: number;\n sample_path?: string;\n }>;\n craftSummary: Array<{\n craft_signature: string;\n label: string;\n count: number;\n source_kind: string;\n }>;\n productSummary: Array<{\n product_key: string;\n label: string;\n count: number;\n stable_flow_id: string;\n stable_flow_version: string;\n source_kind: string;\n }>;\n typeOfDataSetSummary: Array<{\n type_of_dataset: string;\n count: number;\n }>;\n craftSourceSummary: Array<{\n source_kind: string;\n count: number;\n }>;\n productSourceSummary: Array<{\n source_kind: string;\n count: number;\n }>;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction normalizeOptionalToken(value: unknown): string | null {\n const trimmed = trimText(value);\n return trimmed ? trimmed : null;\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction toPositiveInteger(value: number | null | undefined, label: string, code: string): number {\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value as number;\n}\n\nfunction normalizeStateCodes(value: readonly number[] | undefined): number[] {\n if (!Array.isArray(value) || value.length === 0) {\n return [...DEFAULT_STATE_CODES];\n }\n\n const seen = new Set<number>();\n const normalized: number[] = [];\n for (const entry of value) {\n if (!Number.isInteger(entry) || entry < 0) {\n throw new CliError('Expected --state-codes to contain only non-negative integers.', {\n code: 'PROCESS_SCOPE_STATE_CODES_INVALID',\n exitCode: 2,\n });\n }\n if (!seen.has(entry)) {\n normalized.push(entry);\n seen.add(entry);\n }\n }\n if (normalized.length === 0) {\n throw new CliError('--state-codes must contain at least one state code.', {\n code: 'PROCESS_SCOPE_STATE_CODES_REQUIRED',\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction ensureScope(value: string | undefined): ProcessScopeStatisticsScope {\n if (value === undefined || value === 'visible') {\n return 'visible';\n }\n if (value === 'current-user') {\n return 'current-user';\n }\n throw new CliError(\"Expected --scope to be either 'visible' or 'current-user'.\", {\n code: 'PROCESS_SCOPE_SCOPE_INVALID',\n exitCode: 2,\n });\n}\n\nasync function parseJsonResponse(response: ResponseLike, label: string): Promise<unknown> {\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (!text.trim()) {\n return null;\n }\n if (!contentType.includes('application/json')) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new CliError(`${label} returned invalid JSON.`, {\n code: 'PROCESS_SCOPE_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n}\n\nasync function fetchJsonWithRetry(options: {\n url: string;\n init: RequestInit;\n label: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<{ status: number; headers: Headers; body: unknown }> {\n let lastError: unknown = null;\n\n for (let attempt = 1; attempt <= options.maxRetries; attempt += 1) {\n try {\n const response = await options.fetchImpl(options.url, {\n ...options.init,\n signal: AbortSignal.timeout(options.timeoutMs),\n });\n const body = await parseJsonResponse(response, options.label);\n if (!response.ok) {\n throw new CliError(`${options.label} failed with ${response.status}.`, {\n code: 'PROCESS_SCOPE_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: {\n status: response.status,\n body,\n url: options.url,\n },\n });\n }\n return {\n status: response.status,\n headers: new Headers({\n 'content-range': response.headers.get('content-range') ?? '',\n 'content-type': response.headers.get('content-type') ?? '',\n }),\n body,\n };\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxRetries) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, attempt * 1_500));\n }\n }\n\n if (lastError instanceof CliError) {\n throw lastError;\n }\n\n throw new CliError(`${options.label} failed after ${options.maxRetries} attempt(s).`, {\n code: 'PROCESS_SCOPE_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: String(lastError),\n });\n}\n\nasync function resolveCurrentUserId(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n maxRetries: number;\n}): Promise<string> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n const body = await fetchJsonWithRetry({\n url: `${deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl)}/auth/v1/user`,\n init: {\n method: 'GET',\n headers: {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: 'supabase current-user lookup',\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const userId = isRecord(body.body) ? normalizeOptionalToken(body.body.id) : null;\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_SCOPE_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n });\n }\n return userId;\n}\n\nasync function fetchProcessRows(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n scope: ProcessScopeStatisticsScope;\n stateCodes: number[];\n pageSize: number;\n userId: string | null;\n}): Promise<{ rows: SnapshotRow[]; total: number | null }> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n const processCapability = resolveDataApiCapability({\n kind: 'relation',\n name: 'processes',\n env: options.env,\n });\n const rows: SnapshotRow[] = [];\n let total = 0;\n\n for (const stateCode of options.stateCodes) {\n let stateTotal: number | null = null;\n let cursorId = '';\n\n while (true) {\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(projectBaseUrl), processCapability),\n );\n url.searchParams.set('select', 'id,version,state_code,user_id,modified_at,model_id,json');\n url.searchParams.set('state_code', `eq.${stateCode}`);\n if (options.scope === 'current-user') {\n url.searchParams.set('user_id', `eq.${options.userId ?? ''}`);\n }\n if (cursorId) {\n url.searchParams.set('id', `gt.${cursorId}`);\n }\n url.searchParams.set('order', 'id.asc');\n url.searchParams.set('limit', String(options.pageSize));\n\n const page = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n ...(stateTotal === null ? { Prefer: 'count=exact' } : {}),\n },\n processCapability,\n ),\n },\n label: `process scope statistics page fetch (state_code=${stateCode})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const pageRows = Array.isArray(page.body) ? page.body : [];\n const normalizedRows = pageRows\n .map((row) => normalizeSnapshotRow(row))\n .filter((row): row is SnapshotRow => row !== null);\n rows.push(...normalizedRows);\n\n if (stateTotal === null) {\n const match = page.headers.get('content-range')?.match(/\\/(\\d+)$/u) ?? null;\n stateTotal = match ? Number.parseInt(match[1]!, 10) : null;\n if (stateTotal !== null) {\n total += stateTotal;\n }\n }\n\n if (normalizedRows.length < options.pageSize) {\n break;\n }\n\n const lastRow = normalizedRows[normalizedRows.length - 1]!;\n cursorId = lastRow.id;\n }\n }\n\n return {\n rows,\n total: total || null,\n };\n}\n\nfunction normalizeSnapshotRow(value: unknown): SnapshotRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = normalizeOptionalToken(value.id);\n const version = normalizeOptionalToken(value.version);\n const payload = normalizePayload(value.json);\n if (!id || !version || !payload) {\n return null;\n }\n return {\n id,\n version,\n state_code: typeof value.state_code === 'number' ? value.state_code : null,\n user_id: normalizeOptionalToken(value.user_id),\n modified_at: normalizeOptionalToken(value.modified_at),\n model_id: normalizeOptionalToken(value.model_id),\n json: payload,\n };\n}\n\nfunction normalizePayload(value: unknown): JsonRecord | null {\n if (isRecord(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim()) {\n try {\n const parsed = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction getLangList(value: unknown): JsonRecord[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((item): item is JsonRecord => isRecord(item));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((item): item is JsonRecord => isRecord(item));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (typeof value['#text'] === 'string' || typeof value['@xml:lang'] === 'string') {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const list = getLangList(value);\n const exact =\n lang === null\n ? null\n : list.find(\n (item) =>\n trimText(item['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(item['#text']),\n );\n const fallback = list.find((item) => trimText(item['#text']));\n return trimText((exact ?? fallback)?.['#text']);\n}\n\nfunction getAnyLangText(value: unknown): string {\n return getLangText(value, null);\n}\n\nfunction asArray(value: unknown): unknown[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction extractClassificationEntries(dataSetInformation: JsonRecord): ClassificationEntry[] {\n const classes = asArray(\n (dataSetInformation.classificationInformation as JsonRecord | undefined)?.[\n 'common:classification'\n ] &&\n (\n (dataSetInformation.classificationInformation as JsonRecord)['common:classification'] as\n JsonRecord | undefined\n )?.['common:class'],\n );\n\n return classes\n .map((entry) => {\n if (!isRecord(entry)) {\n return null;\n }\n const level = Number.parseInt(trimText(entry['@level']) || '0', 10);\n const text = trimText(entry['#text']);\n if (!text) {\n return null;\n }\n return { level, text };\n })\n .filter((entry): entry is ClassificationEntry => entry !== null)\n .sort((left, right) => left.level - right.level);\n}\n\nfunction normalizeSignature(text: string): string {\n return trimText(text)\n .normalize('NFKC')\n .toLowerCase()\n .replace(/[\\u3000\\u00a0]/gu, ' ')\n .replace(/[,,;;::()()[\\]{}<>|/\\\\]+/gu, ' ')\n .replace(/\\s+/gu, ' ')\n .trim();\n}\n\nfunction firstClause(text: string): string {\n const normalized = trimText(text);\n if (!normalized) {\n return '';\n }\n const [first] = normalized.split(/[.;;。]/u);\n return first.trim();\n}\n\nfunction renderProcessName(name: JsonRecord): string {\n const parts = [\n getLangText(name.baseName, 'en') ||\n getLangText(name.baseName, 'zh') ||\n getAnyLangText(name.baseName),\n getLangText(name.treatmentStandardsRoutes, 'en') ||\n getLangText(name.treatmentStandardsRoutes, 'zh') ||\n getAnyLangText(name.treatmentStandardsRoutes),\n getLangText(name.mixAndLocationTypes, 'en') ||\n getLangText(name.mixAndLocationTypes, 'zh') ||\n getAnyLangText(name.mixAndLocationTypes),\n getLangText(name.functionalUnitFlowProperties, 'en') ||\n getLangText(name.functionalUnitFlowProperties, 'zh') ||\n getAnyLangText(name.functionalUnitFlowProperties),\n ].filter((part) => trimText(part));\n\n return parts.join('; ');\n}\n\nfunction extractCraftCandidate(\n dataSetInformation: JsonRecord,\n technology: JsonRecord,\n): {\n source_kind: string;\n label: string;\n signature: string;\n} {\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const candidates = [\n {\n source_kind: 'treatmentStandardsRoutes',\n label:\n getLangText(name.treatmentStandardsRoutes, 'en') ||\n getLangText(name.treatmentStandardsRoutes, 'zh') ||\n getAnyLangText(name.treatmentStandardsRoutes),\n },\n {\n source_kind: 'technologyDescriptionAndIncludedProcesses',\n label:\n firstClause(getLangText(technology.technologyDescriptionAndIncludedProcesses, 'en')) ||\n firstClause(getLangText(technology.technologyDescriptionAndIncludedProcesses, 'zh')) ||\n firstClause(getAnyLangText(technology.technologyDescriptionAndIncludedProcesses)),\n },\n {\n source_kind: 'baseName',\n label:\n getLangText(name.baseName, 'en') ||\n getLangText(name.baseName, 'zh') ||\n getAnyLangText(name.baseName),\n },\n ];\n\n for (const candidate of candidates) {\n if (trimText(candidate.label)) {\n return {\n ...candidate,\n signature: normalizeSignature(candidate.label),\n };\n }\n }\n\n return {\n source_kind: 'missing',\n label: '',\n signature: '',\n };\n}\n\nfunction extractReferenceProduct(\n processDataSet: JsonRecord,\n dataSetInformation: JsonRecord,\n): {\n key: string;\n stable_flow_id: string;\n stable_flow_version: string;\n label: string;\n source_kind: string;\n missing_reference_exchange: boolean;\n} {\n const processInformation = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const quantRef = isRecord(processInformation.quantitativeReference)\n ? processInformation.quantitativeReference\n : {};\n const refInternalId = trimText(quantRef.referenceToReferenceFlow);\n const exchangesBlock = isRecord(processDataSet.exchanges) ? processDataSet.exchanges : {};\n const exchanges = asArray(exchangesBlock.exchange);\n const refExchange = exchanges.find(\n (exchange) => isRecord(exchange) && trimText(exchange['@dataSetInternalID']) === refInternalId,\n );\n const exchange = isRecord(refExchange) ? refExchange : null;\n const flowRef =\n exchange && isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n\n const flowRefId = trimText(flowRef['@refObjectId']);\n const flowRefVersion = trimText(flowRef['@version']);\n const shortDescription =\n getLangText(flowRef['common:shortDescription'], 'en') ||\n getLangText(flowRef['common:shortDescription'], 'zh') ||\n getAnyLangText(flowRef['common:shortDescription']);\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n const fallbackBaseName =\n getLangText(name.baseName, 'en') ||\n getLangText(name.baseName, 'zh') ||\n getAnyLangText(name.baseName);\n const fallbackProcessName = renderProcessName(name);\n\n if (flowRefId) {\n return {\n key: `flow:${flowRefId}`,\n stable_flow_id: flowRefId,\n stable_flow_version: flowRefVersion,\n label: shortDescription || fallbackProcessName || flowRefId,\n source_kind: 'reference_flow_id',\n missing_reference_exchange: exchange === null,\n };\n }\n\n if (shortDescription) {\n return {\n key: `label:${normalizeSignature(shortDescription)}`,\n stable_flow_id: '',\n stable_flow_version: '',\n label: shortDescription,\n source_kind: 'reference_flow_short_description',\n missing_reference_exchange: exchange === null,\n };\n }\n\n if (fallbackBaseName) {\n return {\n key: `base:${normalizeSignature(fallbackBaseName)}`,\n stable_flow_id: '',\n stable_flow_version: '',\n label: fallbackBaseName,\n source_kind: 'process_base_name',\n missing_reference_exchange: exchange === null,\n };\n }\n\n return {\n key: '',\n stable_flow_id: '',\n stable_flow_version: '',\n label: '',\n source_kind: 'missing',\n missing_reference_exchange: exchange === null,\n };\n}\n\nfunction incrementCount(\n map: Map<string, CountRecord>,\n key: string,\n seed: Record<string, unknown> = {},\n): void {\n const existing = map.get(key) ?? {\n count: 0,\n ...seed,\n };\n existing.count += 1;\n map.set(key, existing);\n}\n\nfunction toSortedArray(map: Map<string, CountRecord>): Array<{ key: string } & CountRecord> {\n return [...map.entries()]\n .map(([key, value]) => ({\n key,\n ...value,\n }))\n .sort((left, right) => right.count - left.count || left.key.localeCompare(right.key));\n}\n\nfunction calculateStatistics(\n rows: SnapshotRow[],\n options: StatisticsOptions,\n metadata: StatisticsMetadata,\n generatedAtUtc: string,\n): ProcessScopeStatisticsArtifacts {\n const stateCodeCounts = new Map<string, CountRecord>();\n const typeOfDataSetCounts = new Map<string, CountRecord>();\n const domainPrimaryCounts = new Map<string, CountRecord>();\n const domainLeafCounts = new Map<string, CountRecord>();\n const craftCounts = new Map<string, CountRecord>();\n const craftSourceCounts = new Map<string, CountRecord>();\n const productCounts = new Map<string, CountRecord>();\n const productSourceCounts = new Map<string, CountRecord>();\n const ownerCounts = new Map<string, CountRecord>();\n\n let rowsMissingClassification = 0;\n let rowsMissingCraft = 0;\n let rowsMissingProduct = 0;\n let rowsMissingReferenceExchange = 0;\n let unitProcessRows = 0;\n\n for (const row of rows) {\n incrementCount(stateCodeCounts, String(row.state_code ?? 'null'));\n incrementCount(ownerCounts, row.user_id ?? 'missing');\n\n const processDataSet = isRecord(row.json.processDataSet) ? row.json.processDataSet : {};\n const processInformation = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const technology = isRecord(processInformation.technology) ? processInformation.technology : {};\n const modellingAndValidation = isRecord(processDataSet.modellingAndValidation)\n ? processDataSet.modellingAndValidation\n : {};\n const lciMethod = isRecord(modellingAndValidation.LCIMethodAndAllocation)\n ? modellingAndValidation.LCIMethodAndAllocation\n : {};\n\n const typeOfDataSet = trimText(lciMethod.typeOfDataSet) || 'missing';\n incrementCount(typeOfDataSetCounts, typeOfDataSet);\n if (typeOfDataSet.toLowerCase().includes('unit process')) {\n unitProcessRows += 1;\n }\n\n const classificationEntries = extractClassificationEntries(dataSetInformation);\n const primaryDomain =\n classificationEntries.find((entry) => entry.level === 1)?.text ??\n classificationEntries[classificationEntries.length - 1]?.text ??\n '';\n const leafDomain = classificationEntries[classificationEntries.length - 1]?.text ?? '';\n if (primaryDomain) {\n incrementCount(domainPrimaryCounts, primaryDomain, {\n sample_path: classificationEntries.map((entry) => entry.text).join(' > '),\n });\n } else {\n rowsMissingClassification += 1;\n }\n if (leafDomain) {\n incrementCount(domainLeafCounts, leafDomain, {\n sample_path: classificationEntries.map((entry) => entry.text).join(' > '),\n });\n }\n\n const craft = extractCraftCandidate(dataSetInformation, technology);\n if (craft.signature) {\n incrementCount(craftCounts, craft.signature, {\n label: craft.label,\n source_kind: craft.source_kind,\n });\n incrementCount(craftSourceCounts, craft.source_kind);\n } else {\n rowsMissingCraft += 1;\n }\n\n const product = extractReferenceProduct(processDataSet, dataSetInformation);\n if (product.key) {\n incrementCount(productCounts, product.key, {\n label: product.label,\n stable_flow_id: product.stable_flow_id,\n stable_flow_version: product.stable_flow_version,\n source_kind: product.source_kind,\n });\n incrementCount(productSourceCounts, product.source_kind);\n } else {\n rowsMissingProduct += 1;\n }\n if (product.missing_reference_exchange) {\n rowsMissingReferenceExchange += 1;\n }\n }\n\n const domainPrimarySummary = toSortedArray(domainPrimaryCounts).map((item) => ({\n domain: item.key,\n count: item.count,\n sample_path: item.sample_path as string | undefined,\n }));\n const domainLeafSummary = toSortedArray(domainLeafCounts).map((item) => ({\n domain: item.key,\n count: item.count,\n sample_path: item.sample_path as string | undefined,\n }));\n const craftSummary = toSortedArray(craftCounts).map((item) => ({\n craft_signature: item.key,\n label: item.label as string,\n count: item.count,\n source_kind: item.source_kind as string,\n }));\n const productSummary = toSortedArray(productCounts).map((item) => ({\n product_key: item.key,\n label: item.label as string,\n count: item.count,\n stable_flow_id: item.stable_flow_id as string,\n stable_flow_version: item.stable_flow_version as string,\n source_kind: item.source_kind as string,\n }));\n const typeOfDataSetSummary = toSortedArray(typeOfDataSetCounts).map((item) => ({\n type_of_dataset: item.key,\n count: item.count,\n }));\n\n return {\n summary: {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n scope: options.scope,\n state_codes: options.stateCodes,\n user_id: metadata.userId,\n masked_user_email: metadata.maskedUserEmail,\n total_process_rows: rows.length,\n total_rows_reported_by_remote: metadata.totalRowsReportedByRemote,\n rows_by_state_code: Object.fromEntries(\n [...stateCodeCounts.entries()].map(([key, value]) => [key, value.count]),\n ),\n distinct_visible_owner_user_ids: ownerCounts.size,\n domain_count_primary: domainPrimaryCounts.size,\n domain_count_leaf: domainLeafCounts.size,\n craft_count: craftCounts.size,\n unit_process_rows: unitProcessRows,\n unit_process_share: rows.length === 0 ? 0 : unitProcessRows / rows.length,\n product_count: productCounts.size,\n products_with_flow_id: productSummary.filter((item) => item.stable_flow_id).length,\n products_without_flow_id: productSummary.filter((item) => !item.stable_flow_id).length,\n rows_missing_classification: rowsMissingClassification,\n rows_missing_craft: rowsMissingCraft,\n rows_missing_product: rowsMissingProduct,\n rows_missing_reference_exchange: rowsMissingReferenceExchange,\n metric_definitions: {\n domain_count_primary:\n 'Unique level-1 classification text; fallback to the deepest available classification when level 1 is missing.',\n craft_count:\n 'Unique normalized craft or route signatures derived from treatmentStandardsRoutes, or fallback technology/base-name text.',\n unit_process_rows: 'Rows whose typeOfDataSet contains the phrase \"Unit process\".',\n product_count:\n 'Unique reference products, keyed by reference flow ID when present and by normalized label fallback otherwise.',\n },\n },\n domainPrimarySummary,\n domainLeafSummary,\n craftSummary,\n productSummary,\n typeOfDataSetSummary,\n craftSourceSummary: toSortedArray(craftSourceCounts).map((item) => ({\n source_kind: item.key,\n count: item.count,\n })),\n productSourceSummary: toSortedArray(productSourceCounts).map((item) => ({\n source_kind: item.key,\n count: item.count,\n })),\n };\n}\n\nfunction escapePipe(value: unknown): string {\n return String(value ?? '').replace(/\\|/gu, '\\\\|');\n}\n\nfunction renderMarkdownReport(\n statistics: ProcessScopeStatisticsArtifacts,\n reportLang: 'en' | 'zh',\n): string {\n const isZh = reportLang === 'zh';\n const summary = statistics.summary;\n const lines: string[] = [];\n\n lines.push(isZh ? '# Process 覆盖统计' : '# Process Scope Statistics');\n lines.push('');\n lines.push(\n isZh ? `统计时间:${summary.generated_at_utc}` : `Generated at: ${summary.generated_at_utc}`,\n );\n lines.push(\n isZh\n ? `范围:\\`scope=${summary.scope}\\`, \\`state_codes=${summary.state_codes.join(',')}\\``\n : `Scope: \\`scope=${summary.scope}\\`, \\`state_codes=${summary.state_codes.join(',')}\\``,\n );\n lines.push('');\n lines.push(isZh ? '## 核心结果' : '## Headline Metrics');\n lines.push('');\n lines.push(\n `- ${isZh ? '总 process 行数' : 'Total process rows'}: \\`${summary.total_process_rows}\\``,\n );\n lines.push(\n `- ${isZh ? '可见 owner 数' : 'Distinct visible owners'}: \\`${summary.distinct_visible_owner_user_ids}\\``,\n );\n lines.push(\n `- ${isZh ? '领域数量(一级分类口径)' : 'Domain count (primary definition)'}: \\`${summary.domain_count_primary}\\``,\n );\n lines.push(\n `- ${isZh ? '领域数量(叶子分类口径)' : 'Domain count (leaf classification)'}: \\`${summary.domain_count_leaf}\\``,\n );\n lines.push(`- ${isZh ? '工艺/路线数量' : 'Craft / route count'}: \\`${summary.craft_count}\\``);\n lines.push(`- ${isZh ? '单元过程行数' : 'Unit-process rows'}: \\`${summary.unit_process_rows}\\``);\n lines.push(`- ${isZh ? '产品数量' : 'Product count'}: \\`${summary.product_count}\\``);\n lines.push('');\n lines.push(isZh ? '## 状态分布' : '## State-code Distribution');\n lines.push('');\n Object.entries(summary.rows_by_state_code).forEach(([stateCode, count]) => {\n lines.push(`- \\`state_code=${stateCode}\\`: \\`${count}\\``);\n });\n lines.push('');\n lines.push(isZh ? '## 统计口径' : '## Metric Definitions');\n lines.push('');\n lines.push(\n `- ${isZh ? '领域' : 'Domain'}: ${\n isZh\n ? '优先使用 classification level=1;若缺失,则回退到最深层分类。'\n : 'Prefer classification level 1; fall back to the deepest available classification when level 1 is missing.'\n }`,\n );\n lines.push(\n `- ${isZh ? '工艺' : 'Craft'}: ${\n isZh\n ? '优先使用 `treatmentStandardsRoutes`;为空时回退到技术说明首句,再回退到 `baseName`。'\n : 'Prefer `treatmentStandardsRoutes`; fall back to the first clause of technology text, then to `baseName`.'\n }`,\n );\n lines.push(\n `- ${isZh ? '单元过程' : 'Unit process'}: ${\n isZh\n ? '以 `typeOfDataSet` 是否包含 `Unit process` 为准。'\n : 'Rows are counted when `typeOfDataSet` contains `Unit process`.'\n }`,\n );\n lines.push(\n `- ${isZh ? '产品' : 'Product'}: ${\n isZh\n ? '优先按 reference flow UUID 聚合;缺失时回退到 reference flow 短描述,再回退到 process base name。'\n : 'Prefer reference-flow UUIDs; fall back to reference-flow short descriptions, then to process base names.'\n }`,\n );\n lines.push('');\n\n lines.push(isZh ? '## Top 领域' : '## Top Domains');\n lines.push('');\n lines.push(`| ${isZh ? '领域' : 'Domain'} | ${isZh ? '数量' : 'Count'} |`);\n lines.push('| --- | --- |');\n statistics.domainPrimarySummary.slice(0, 15).forEach((item) => {\n lines.push(`| ${escapePipe(item.domain)} | ${item.count} |`);\n });\n lines.push('');\n\n lines.push(isZh ? '## Top 工艺/路线' : '## Top Crafts / Routes');\n lines.push('');\n lines.push(\n `| ${isZh ? '工艺/路线' : 'Craft / Route'} | ${isZh ? '数量' : 'Count'} | ${isZh ? '来源' : 'Source'} |`,\n );\n lines.push('| --- | --- | --- |');\n statistics.craftSummary.slice(0, 15).forEach((item) => {\n lines.push(`| ${escapePipe(item.label)} | ${item.count} | ${item.source_kind} |`);\n });\n lines.push('');\n\n lines.push(isZh ? '## Top 产品' : '## Top Products');\n lines.push('');\n lines.push(\n `| ${isZh ? '产品' : 'Product'} | ${isZh ? '数量' : 'Count'} | ${isZh ? '标识来源' : 'Key source'} |`,\n );\n lines.push('| --- | --- | --- |');\n statistics.productSummary.slice(0, 15).forEach((item) => {\n lines.push(`| ${escapePipe(item.label)} | ${item.count} | ${item.source_kind} |`);\n });\n lines.push('');\n\n return `${lines.join('\\n')}\\n`;\n}\n\nfunction readSnapshotRows(filePath: string): SnapshotRow[] {\n return readJsonLinesArtifact(filePath)\n .map((row) => normalizeSnapshotRow(row))\n .filter((row): row is SnapshotRow => row !== null);\n}\n\nfunction readSnapshotManifest(filePath: string): JsonRecord | null {\n const value = readJsonArtifact(filePath);\n return isRecord(value) ? value : null;\n}\n\nexport async function runProcessScopeStatistics(\n options: RunProcessScopeStatisticsOptions,\n): Promise<ProcessScopeStatisticsReport> {\n const outDir = trimText(options.outDir);\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'PROCESS_SCOPE_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n const scope = ensureScope(options.scope);\n const stateCodes = normalizeStateCodes(options.stateCodes);\n const pageSize = toPositiveInteger(\n options.pageSize ?? DEFAULT_PAGE_SIZE,\n '--page-size',\n 'PROCESS_SCOPE_PAGE_SIZE_INVALID',\n );\n const timeoutMs = toPositiveInteger(\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n '--timeout-ms',\n 'PROCESS_SCOPE_TIMEOUT_INVALID',\n );\n const maxRetries = toPositiveInteger(\n options.maxRetries ?? DEFAULT_MAX_RETRIES,\n 'process scope statistics retry count',\n 'PROCESS_SCOPE_MAX_RETRIES_INVALID',\n );\n\n const resolvedOutDir = path.resolve(outDir);\n const snapshotRowsPath = path.join(resolvedOutDir, 'inputs', 'processes.snapshot.rows.jsonl');\n const snapshotManifestPath = path.join(\n resolvedOutDir,\n 'inputs',\n 'processes.snapshot.manifest.json',\n );\n const generatedAtUtc = nowIso(options.now);\n\n let rows: SnapshotRow[];\n let metadata: StatisticsMetadata;\n\n if (options.reuseSnapshot) {\n rows = readSnapshotRows(snapshotRowsPath);\n const manifest = readSnapshotManifest(snapshotManifestPath);\n metadata = {\n userId: normalizeOptionalToken(manifest?.user_id),\n maskedUserEmail: normalizeOptionalToken(manifest?.masked_user_email),\n totalRowsReportedByRemote:\n typeof manifest?.total_rows === 'number' ? manifest.total_rows : rows.length,\n };\n } else {\n const env = options.env ?? process.env;\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const restRuntime = requireSupabaseRestRuntime(env);\n const session = await resolveSupabaseUserSession({\n runtime: restRuntime,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n });\n const userId =\n scope === 'current-user'\n ? await resolveCurrentUserId({\n env,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n maxRetries,\n })\n : null;\n const snapshot = await fetchProcessRows({\n env,\n fetchImpl,\n timeoutMs,\n maxRetries,\n scope,\n stateCodes,\n pageSize,\n userId,\n });\n rows = snapshot.rows;\n metadata = {\n userId,\n maskedUserEmail: redactEmail(session.userEmail),\n totalRowsReportedByRemote: snapshot.total ?? rows.length,\n };\n\n writeJsonLinesArtifact(snapshotRowsPath, rows);\n writeJsonArtifact(snapshotManifestPath, {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n masked_user_email: metadata.maskedUserEmail,\n user_id: metadata.userId,\n scope,\n state_codes: stateCodes,\n page_size: pageSize,\n total_rows: metadata.totalRowsReportedByRemote,\n });\n }\n\n const statistics = calculateStatistics(\n rows,\n {\n scope,\n stateCodes,\n },\n metadata,\n generatedAtUtc,\n );\n\n const summaryPath = path.join(resolvedOutDir, 'outputs', 'process-scope-summary.json');\n const domainPath = path.join(resolvedOutDir, 'outputs', 'domain-summary.json');\n const craftPath = path.join(resolvedOutDir, 'outputs', 'craft-summary.json');\n const productPath = path.join(resolvedOutDir, 'outputs', 'product-summary.json');\n const datasetTypePath = path.join(resolvedOutDir, 'outputs', 'type-of-dataset-summary.json');\n const reportPath = path.join(resolvedOutDir, 'reports', 'process-scope-statistics.md');\n const reportZhPath = path.join(resolvedOutDir, 'reports', 'process-scope-statistics.zh-CN.md');\n\n writeJsonArtifact(summaryPath, statistics.summary);\n writeJsonArtifact(domainPath, {\n primary: statistics.domainPrimarySummary,\n leaf: statistics.domainLeafSummary,\n });\n writeJsonArtifact(craftPath, {\n craft_summary: statistics.craftSummary,\n source_summary: statistics.craftSourceSummary,\n });\n writeJsonArtifact(productPath, {\n product_summary: statistics.productSummary,\n source_summary: statistics.productSourceSummary,\n });\n writeJsonArtifact(datasetTypePath, statistics.typeOfDataSetSummary);\n writeTextArtifact(reportPath, renderMarkdownReport(statistics, 'en'));\n writeTextArtifact(reportZhPath, renderMarkdownReport(statistics, 'zh'));\n\n return {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status: 'completed_process_scope_statistics',\n out_dir: resolvedOutDir,\n scope,\n state_codes: stateCodes,\n total_process_rows: statistics.summary.total_process_rows,\n domain_count_primary: statistics.summary.domain_count_primary,\n domain_count_leaf: statistics.summary.domain_count_leaf,\n craft_count: statistics.summary.craft_count,\n unit_process_rows: statistics.summary.unit_process_rows,\n product_count: statistics.summary.product_count,\n files: {\n snapshot_manifest: snapshotManifestPath,\n snapshot_rows: snapshotRowsPath,\n process_scope_summary: summaryPath,\n domain_summary: domainPath,\n craft_summary: craftPath,\n product_summary: productPath,\n type_of_dataset_summary: datasetTypePath,\n report: reportPath,\n report_zh: reportZhPath,\n },\n };\n}\n\nexport const __testInternals = {\n calculateStatistics,\n ensureScope,\n escapePipe,\n extractClassificationEntries,\n extractCraftCandidate,\n extractReferenceProduct,\n fetchJsonWithRetry,\n fetchProcessRows,\n getAnyLangText,\n getLangList,\n getLangText,\n normalizePayload,\n normalizeSignature,\n normalizeSnapshotRow,\n normalizeStateCodes,\n parseJsonResponse,\n readSnapshotManifest,\n resolveCurrentUserId,\n renderMarkdownReport,\n toPositiveInteger,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"process-verify-rows.js","sourceRoot":"","sources":["../../../src/lib/process-verify-rows.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype NameFieldKey =\n | 'baseName'\n | 'treatmentStandardsRoutes'\n | 'mixAndLocationTypes'\n | 'functionalUnitFlowProperties';\n\nexport type ProcessVerifyNameFieldSummary = {\n present: boolean;\n en: string;\n zh: string;\n any: string;\n};\n\nexport type ProcessVerifyRowRecord = {\n row_index: number;\n id: string | null;\n version: string | null;\n status: 'ok' | 'invalid';\n validation: ProcessPayloadValidationResult;\n name_summary: {\n missing_required_fields: Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n fields: Record<NameFieldKey, ProcessVerifyNameFieldSummary>;\n };\n};\n\nexport type ProcessVerifyRowsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_row_verification' | 'completed_with_invalid_process_rows';\n rows_file: string;\n out_dir: string;\n row_count: number;\n invalid_count: number;\n schema_invalid_count: number;\n missing_required_name_field_count: number;\n invalid_rows: Array<{\n id: string | null;\n version: string | null;\n row_index: number;\n missing_required_fields: Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n schema_issue_count: number;\n }>;\n files: {\n summary_json: string;\n verification_jsonl: string;\n };\n};\n\nexport type RunProcessVerifyRowsOptions = {\n rowsFile: string;\n outDir: string;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction requiredNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label}.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction readRowsFile(filePath: string): unknown[] {\n if (!existsSync(filePath)) {\n throw new CliError(`Rows file not found: ${filePath}`, {\n code: 'PROCESS_VERIFY_ROWS_FILE_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n const text = readFileSync(filePath, 'utf8');\n if (filePath.toLowerCase().endsWith('.jsonl')) {\n return text\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n return JSON.parse(line) as unknown;\n } catch (error) {\n throw new CliError(`Rows file contains invalid JSONL at line ${index + 1}: ${filePath}`, {\n code: 'PROCESS_VERIFY_ROWS_FILE_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n });\n }\n\n try {\n const parsed = JSON.parse(text) as unknown;\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (isRecord(parsed) && Array.isArray(parsed.rows)) {\n return parsed.rows;\n }\n return [parsed];\n } catch (error) {\n throw new CliError(`Rows file is not valid JSON: ${filePath}`, {\n code: 'PROCESS_VERIFY_ROWS_FILE_INVALID_JSON',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nfunction getPayload(row: unknown): JsonObject {\n if (isRecord(row) && isRecord(row.process)) {\n return row.process;\n }\n if (isRecord(row) && isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n if (isRecord(row) && isRecord(row.json)) {\n return row.json;\n }\n if (isRecord(row)) {\n return row;\n }\n\n return {};\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n const normalized = trimText(value);\n if (normalized) {\n return normalized;\n }\n }\n return null;\n}\n\nfunction getIdentity(row: unknown, payload: JsonObject, index: number) {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n row_index: index,\n id: firstNonEmpty(\n isRecord(row) ? row.id : null,\n isRecord(row) ? row.process_id : null,\n dataSetInformation['common:UUID'],\n payload.id,\n payload['@id'],\n ),\n version: firstNonEmpty(\n isRecord(row) ? row.version : null,\n publicationAndOwnership['common:dataSetVersion'],\n payload.version,\n payload['@version'],\n ),\n };\n}\n\nfunction getLangList(value: unknown): JsonObject[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (value['#text'] !== undefined || value['@xml:lang'] !== undefined) {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const entries = getLangList(value);\n if (lang) {\n for (const entry of entries) {\n if (\n trimText(entry['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(entry['#text'])\n ) {\n return trimText(entry['#text']);\n }\n }\n }\n for (const entry of entries) {\n if (trimText(entry['#text'])) {\n return trimText(entry['#text']);\n }\n }\n return '';\n}\n\nfunction hasOwn(objectValue: JsonObject, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(objectValue, key);\n}\n\nfunction summarizeNameFields(payload: JsonObject): {\n missing_required_fields: Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n fields: Record<NameFieldKey, ProcessVerifyNameFieldSummary>;\n} {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n\n const fieldNames: NameFieldKey[] = [\n 'baseName',\n 'treatmentStandardsRoutes',\n 'mixAndLocationTypes',\n 'functionalUnitFlowProperties',\n ];\n\n const fields = {} as Record<NameFieldKey, ProcessVerifyNameFieldSummary>;\n for (const fieldName of fieldNames) {\n fields[fieldName] = {\n present: hasOwn(name, fieldName),\n en: getLangText(name[fieldName], 'en'),\n zh: getLangText(name[fieldName], 'zh'),\n any: getLangText(name[fieldName], null),\n };\n }\n\n const missingRequired = ['baseName', 'treatmentStandardsRoutes', 'mixAndLocationTypes'].filter(\n (fieldName) => !fields[fieldName as NameFieldKey].present,\n ) as Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n\n return {\n missing_required_fields: missingRequired,\n fields,\n };\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nexport async function runProcessVerifyRows(\n options: RunProcessVerifyRowsOptions,\n): Promise<ProcessVerifyRowsReport> {\n const rowsFile = path.resolve(\n requiredNonEmpty(options.rowsFile, '--rows-file', 'PROCESS_VERIFY_ROWS_FILE_REQUIRED'),\n );\n const outDir = path.resolve(\n requiredNonEmpty(options.outDir, '--out-dir', 'PROCESS_VERIFY_OUT_DIR_REQUIRED'),\n );\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const rows = readRowsFile(rowsFile);\n const generatedAtUtc = nowIso(options.now);\n\n const records: ProcessVerifyRowRecord[] = rows.map((row, index) => {\n const payload = getPayload(row);\n const identity = getIdentity(row, payload, index);\n const validation = validate(payload);\n const nameSummary = summarizeNameFields(payload);\n return {\n ...identity,\n status: validation.ok && nameSummary.missing_required_fields.length === 0 ? 'ok' : 'invalid',\n validation,\n name_summary: nameSummary,\n };\n });\n\n const invalidRows = records\n .filter((record) => record.status === 'invalid')\n .map((record) => ({\n id: record.id,\n version: record.version,\n row_index: record.row_index,\n missing_required_fields: record.name_summary.missing_required_fields,\n schema_issue_count: record.validation.issue_count,\n }));\n const invalidCount = invalidRows.length;\n const summaryPath = path.join(outDir, 'outputs', 'summary.json');\n const verificationPath = path.join(outDir, 'outputs', 'verification.jsonl');\n\n writeJsonArtifact(summaryPath, {\n generated_at_utc: generatedAtUtc,\n rows_file: rowsFile,\n row_count: records.length,\n invalid_count: invalidCount,\n schema_invalid_count: records.filter((record) => !record.validation.ok).length,\n missing_required_name_field_count: records.filter(\n (record) => record.name_summary.missing_required_fields.length > 0,\n ).length,\n invalid_rows: invalidRows,\n });\n writeJsonLinesArtifact(verificationPath, records);\n\n return {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status:\n invalidCount > 0\n ? 'completed_with_invalid_process_rows'\n : 'completed_process_row_verification',\n rows_file: rowsFile,\n out_dir: outDir,\n row_count: records.length,\n invalid_count: invalidCount,\n schema_invalid_count: records.filter((record) => !record.validation.ok).length,\n missing_required_name_field_count: records.filter(\n (record) => record.name_summary.missing_required_fields.length > 0,\n ).length,\n invalid_rows: invalidRows,\n files: {\n summary_json: summaryPath,\n verification_jsonl: verificationPath,\n },\n };\n}\n\nexport const __testInternals = {\n getIdentity,\n getLangList,\n getLangText,\n getPayload,\n readRowsFile,\n summarizeNameFields,\n};\n"]}
1
+ {"version":3,"file":"process-verify-rows.js","sourceRoot":"","sources":["../../../src/lib/process-verify-rows.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype NameFieldKey =\n 'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes' | 'functionalUnitFlowProperties';\n\nexport type ProcessVerifyNameFieldSummary = {\n present: boolean;\n en: string;\n zh: string;\n any: string;\n};\n\nexport type ProcessVerifyRowRecord = {\n row_index: number;\n id: string | null;\n version: string | null;\n status: 'ok' | 'invalid';\n validation: ProcessPayloadValidationResult;\n name_summary: {\n missing_required_fields: Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n fields: Record<NameFieldKey, ProcessVerifyNameFieldSummary>;\n };\n};\n\nexport type ProcessVerifyRowsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_row_verification' | 'completed_with_invalid_process_rows';\n rows_file: string;\n out_dir: string;\n row_count: number;\n invalid_count: number;\n schema_invalid_count: number;\n missing_required_name_field_count: number;\n invalid_rows: Array<{\n id: string | null;\n version: string | null;\n row_index: number;\n missing_required_fields: Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n schema_issue_count: number;\n }>;\n files: {\n summary_json: string;\n verification_jsonl: string;\n };\n};\n\nexport type RunProcessVerifyRowsOptions = {\n rowsFile: string;\n outDir: string;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction requiredNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label}.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction readRowsFile(filePath: string): unknown[] {\n if (!existsSync(filePath)) {\n throw new CliError(`Rows file not found: ${filePath}`, {\n code: 'PROCESS_VERIFY_ROWS_FILE_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n const text = readFileSync(filePath, 'utf8');\n if (filePath.toLowerCase().endsWith('.jsonl')) {\n return text\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n return JSON.parse(line) as unknown;\n } catch (error) {\n throw new CliError(`Rows file contains invalid JSONL at line ${index + 1}: ${filePath}`, {\n code: 'PROCESS_VERIFY_ROWS_FILE_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n });\n }\n\n try {\n const parsed = JSON.parse(text) as unknown;\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (isRecord(parsed) && Array.isArray(parsed.rows)) {\n return parsed.rows;\n }\n return [parsed];\n } catch (error) {\n throw new CliError(`Rows file is not valid JSON: ${filePath}`, {\n code: 'PROCESS_VERIFY_ROWS_FILE_INVALID_JSON',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nfunction getPayload(row: unknown): JsonObject {\n if (isRecord(row) && isRecord(row.process)) {\n return row.process;\n }\n if (isRecord(row) && isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n if (isRecord(row) && isRecord(row.json)) {\n return row.json;\n }\n if (isRecord(row)) {\n return row;\n }\n\n return {};\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n const normalized = trimText(value);\n if (normalized) {\n return normalized;\n }\n }\n return null;\n}\n\nfunction getIdentity(row: unknown, payload: JsonObject, index: number) {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n row_index: index,\n id: firstNonEmpty(\n isRecord(row) ? row.id : null,\n isRecord(row) ? row.process_id : null,\n dataSetInformation['common:UUID'],\n payload.id,\n payload['@id'],\n ),\n version: firstNonEmpty(\n isRecord(row) ? row.version : null,\n publicationAndOwnership['common:dataSetVersion'],\n payload.version,\n payload['@version'],\n ),\n };\n}\n\nfunction getLangList(value: unknown): JsonObject[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (value['#text'] !== undefined || value['@xml:lang'] !== undefined) {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const entries = getLangList(value);\n if (lang) {\n for (const entry of entries) {\n if (\n trimText(entry['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(entry['#text'])\n ) {\n return trimText(entry['#text']);\n }\n }\n }\n for (const entry of entries) {\n if (trimText(entry['#text'])) {\n return trimText(entry['#text']);\n }\n }\n return '';\n}\n\nfunction hasOwn(objectValue: JsonObject, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(objectValue, key);\n}\n\nfunction summarizeNameFields(payload: JsonObject): {\n missing_required_fields: Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n fields: Record<NameFieldKey, ProcessVerifyNameFieldSummary>;\n} {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : {};\n\n const fieldNames: NameFieldKey[] = [\n 'baseName',\n 'treatmentStandardsRoutes',\n 'mixAndLocationTypes',\n 'functionalUnitFlowProperties',\n ];\n\n const fields = {} as Record<NameFieldKey, ProcessVerifyNameFieldSummary>;\n for (const fieldName of fieldNames) {\n fields[fieldName] = {\n present: hasOwn(name, fieldName),\n en: getLangText(name[fieldName], 'en'),\n zh: getLangText(name[fieldName], 'zh'),\n any: getLangText(name[fieldName], null),\n };\n }\n\n const missingRequired = ['baseName', 'treatmentStandardsRoutes', 'mixAndLocationTypes'].filter(\n (fieldName) => !fields[fieldName as NameFieldKey].present,\n ) as Array<'baseName' | 'treatmentStandardsRoutes' | 'mixAndLocationTypes'>;\n\n return {\n missing_required_fields: missingRequired,\n fields,\n };\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nexport async function runProcessVerifyRows(\n options: RunProcessVerifyRowsOptions,\n): Promise<ProcessVerifyRowsReport> {\n const rowsFile = path.resolve(\n requiredNonEmpty(options.rowsFile, '--rows-file', 'PROCESS_VERIFY_ROWS_FILE_REQUIRED'),\n );\n const outDir = path.resolve(\n requiredNonEmpty(options.outDir, '--out-dir', 'PROCESS_VERIFY_OUT_DIR_REQUIRED'),\n );\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const rows = readRowsFile(rowsFile);\n const generatedAtUtc = nowIso(options.now);\n\n const records: ProcessVerifyRowRecord[] = rows.map((row, index) => {\n const payload = getPayload(row);\n const identity = getIdentity(row, payload, index);\n const validation = validate(payload);\n const nameSummary = summarizeNameFields(payload);\n return {\n ...identity,\n status: validation.ok && nameSummary.missing_required_fields.length === 0 ? 'ok' : 'invalid',\n validation,\n name_summary: nameSummary,\n };\n });\n\n const invalidRows = records\n .filter((record) => record.status === 'invalid')\n .map((record) => ({\n id: record.id,\n version: record.version,\n row_index: record.row_index,\n missing_required_fields: record.name_summary.missing_required_fields,\n schema_issue_count: record.validation.issue_count,\n }));\n const invalidCount = invalidRows.length;\n const summaryPath = path.join(outDir, 'outputs', 'summary.json');\n const verificationPath = path.join(outDir, 'outputs', 'verification.jsonl');\n\n writeJsonArtifact(summaryPath, {\n generated_at_utc: generatedAtUtc,\n rows_file: rowsFile,\n row_count: records.length,\n invalid_count: invalidCount,\n schema_invalid_count: records.filter((record) => !record.validation.ok).length,\n missing_required_name_field_count: records.filter(\n (record) => record.name_summary.missing_required_fields.length > 0,\n ).length,\n invalid_rows: invalidRows,\n });\n writeJsonLinesArtifact(verificationPath, records);\n\n return {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status:\n invalidCount > 0\n ? 'completed_with_invalid_process_rows'\n : 'completed_process_row_verification',\n rows_file: rowsFile,\n out_dir: outDir,\n row_count: records.length,\n invalid_count: invalidCount,\n schema_invalid_count: records.filter((record) => !record.validation.ok).length,\n missing_required_name_field_count: records.filter(\n (record) => record.name_summary.missing_required_fields.length > 0,\n ).length,\n invalid_rows: invalidRows,\n files: {\n summary_json: summaryPath,\n verification_jsonl: verificationPath,\n },\n };\n}\n\nexport const __testInternals = {\n getIdentity,\n getLangList,\n getLangText,\n getPayload,\n readRowsFile,\n summarizeNameFields,\n};\n"]}