@tiangong-lca/cli 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -30
- package/dist/src/cli.js +913 -113
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-local.js +231 -0
- package/dist/src/lib/dataset-local.js.map +1 -0
- package/dist/src/lib/dataset-references-rewrite.js +214 -0
- package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
- package/dist/src/lib/dataset-validate.js +191 -0
- package/dist/src/lib/dataset-validate.js.map +1 -0
- package/dist/src/lib/flow-regen-product.js +2 -10
- package/dist/src/lib/flow-regen-product.js.map +1 -1
- package/dist/src/lib/flow-remediate.js +4 -8
- package/dist/src/lib/flow-remediate.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
- package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-bundle-save.js +468 -0
- package/dist/src/lib/lifecyclemodel-bundle-save.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-graph.js +248 -0
- package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-publish-build.js +3 -1
- package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
- package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
- package/dist/src/lib/process-auto-build.js +11 -8
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-batch-build.js +6 -3
- package/dist/src/lib/process-batch-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +870 -0
- package/dist/src/lib/process-dedup-review.js.map +1 -0
- package/dist/src/lib/process-payload-validation.js +50 -0
- package/dist/src/lib/process-payload-validation.js.map +1 -0
- package/dist/src/lib/process-publish-build.js +4 -6
- package/dist/src/lib/process-publish-build.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +1028 -0
- package/dist/src/lib/process-refresh-references.js.map +1 -0
- package/dist/src/lib/process-resume-build.js +4 -6
- package/dist/src/lib/process-resume-build.js.map +1 -1
- package/dist/src/lib/process-save-draft-run.js +31 -12
- package/dist/src/lib/process-save-draft-run.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +859 -0
- package/dist/src/lib/process-scope-statistics.js.map +1 -0
- package/dist/src/lib/process-verify-rows.js +250 -0
- package/dist/src/lib/process-verify-rows.js.map +1 -0
- package/dist/src/lib/publish.js +54 -4
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/remote.js +4 -4
- package/dist/src/lib/remote.js.map +1 -1
- package/dist/src/lib/review-lifecyclemodel.js +2 -2
- package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
- package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/dist/src/lib/tidas-sdk-validation.js +96 -0
- package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
- package/dist/src/lib/user-api-key.js +1 -1
- package/dist/src/lib/user-api-key.js.map +1 -1
- package/package.json +4 -4
- /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
- /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tidas-sdk-package-validator.js","sourceRoot":"","sources":["../../../src/lib/tidas-sdk-package-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\n\ntype JsonObject = Record<string, unknown>;\n\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\nexport type ValidationIssue = {\n issue_code: string;\n severity: ValidationSeverity;\n category: string;\n file_path: string;\n message: string;\n location: string;\n context: Record<string, unknown>;\n};\n\ntype ValidationSummary = {\n issue_count: number;\n error_count: number;\n warning_count: number;\n info_count: number;\n};\n\ntype CategoryValidationReport = {\n category: string;\n ok: boolean;\n summary: ValidationSummary;\n issues: ValidationIssue[];\n};\n\nexport type PackageValidationReport = {\n input_dir: string;\n ok: boolean;\n summary: ValidationSummary & { category_count: number };\n categories: CategoryValidationReport[];\n issues: ValidationIssue[];\n};\n\ntype SafeParseIssue = {\n code?: string;\n message?: string;\n path?: Array<string | number>;\n};\n\ntype SafeParseResult =\n | {\n success: true;\n data?: unknown;\n }\n | {\n success: false;\n error?: {\n issues?: SafeParseIssue[];\n };\n };\n\ntype SafeParseSchema = {\n safeParse: (value: unknown) => SafeParseResult;\n};\n\ntype SupportedCategory =\n | 'contacts'\n | 'flowproperties'\n | 'flows'\n | 'lciamethods'\n | 'lifecyclemodels'\n | 'processes'\n | 'sources'\n | 'unitgroups';\n\ntype TidasSdkPublicModule = {\n ContactSchema?: SafeParseSchema;\n FlowPropertySchema?: SafeParseSchema;\n FlowSchema?: SafeParseSchema;\n LCIAMethodSchema?: SafeParseSchema;\n LifeCycleModelSchema?: SafeParseSchema;\n ProcessSchema?: SafeParseSchema;\n SourceSchema?: SafeParseSchema;\n UnitGroupSchema?: SafeParseSchema;\n};\n\nconst SUPPORTED_CATEGORIES: SupportedCategory[] = [\n 'contacts',\n 'flowproperties',\n 'flows',\n 'lciamethods',\n 'lifecyclemodels',\n 'processes',\n 'sources',\n 'unitgroups',\n];\n\nconst CATEGORY_SCHEMA_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'ContactSchema',\n flowproperties: 'FlowPropertySchema',\n flows: 'FlowSchema',\n lciamethods: 'LCIAMethodSchema',\n lifecyclemodels: 'LifeCycleModelSchema',\n processes: 'ProcessSchema',\n sources: 'SourceSchema',\n unitgroups: 'UnitGroupSchema',\n};\n\nconst CHINESE_CHARACTER_RE = /[\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]/u;\n\nfunction summarizeIssues(issues: ValidationIssue[]): ValidationSummary {\n const errorCount = issues.filter((issue) => issue.severity === 'error').length;\n const warningCount = issues.filter((issue) => issue.severity === 'warning').length;\n const infoCount = issues.filter((issue) => issue.severity === 'info').length;\n\n return {\n issue_count: issues.length,\n error_count: errorCount,\n warning_count: warningCount,\n info_count: infoCount,\n };\n}\n\nfunction buildCategoryReport(\n category: string,\n issues: ValidationIssue[],\n): CategoryValidationReport {\n return {\n category,\n ok: issues.length === 0,\n summary: summarizeIssues(issues),\n issues,\n };\n}\n\nfunction buildPackageReport(\n inputDir: string,\n categoryReports: CategoryValidationReport[],\n): PackageValidationReport {\n const issues = categoryReports.flatMap((report) => report.issues);\n const summary = summarizeIssues(issues);\n\n return {\n input_dir: inputDir,\n ok: issues.length === 0,\n summary: {\n category_count: categoryReports.length,\n ...summary,\n },\n categories: categoryReports,\n issues,\n };\n}\n\nfunction asRecord(value: unknown): JsonObject | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JsonObject) : null;\n}\n\nfunction ensureArray<T>(value: T | T[] | undefined | null): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [value];\n}\n\nfunction toLocation(pathParts: Array<string | number> | undefined): string {\n if (!Array.isArray(pathParts) || pathParts.length === 0) {\n return '<root>';\n }\n return pathParts.join('/');\n}\n\nfunction createInvalidJsonIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'invalid_json',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Invalid JSON: ${\n error instanceof Error ? error.name : 'Error'\n }: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createValidationErrorIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'validation_error',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Validation error: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createSchemaIssue(\n category: string,\n filePath: string,\n issue: SafeParseIssue,\n): ValidationIssue {\n const location = toLocation(issue.path);\n return {\n issue_code: 'schema_error',\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message: `Schema Error at ${location}: ${issue.message ?? 'Validation failed'}`,\n context: {\n validator: issue.code ?? 'custom',\n },\n };\n}\n\nfunction dedupeIssues(issues: ValidationIssue[]): ValidationIssue[] {\n const seen = new Set<string>();\n const deduped: ValidationIssue[] = [];\n\n for (const issue of issues) {\n const key = `${issue.issue_code}|${issue.file_path}|${issue.location}|${issue.message}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(issue);\n }\n\n return deduped;\n}\n\nfunction makeIssue(\n category: string,\n filePath: string,\n location: string,\n message: string,\n issueCode = 'schema_error',\n): ValidationIssue {\n return {\n issue_code: issueCode,\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message,\n context: {},\n };\n}\n\nfunction validateElementaryFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Elementary flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@catId'] ?? '');\n const childId = String(classItems[index]?.['@catId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Elementary flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateProductFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Product flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@classId'] ?? '');\n const childId = String(classItems[index]?.['@classId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Product flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateProcessesClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n const level0ToLevel1Mapping: Record<string, string[]> = {\n A: ['01', '02', '03'],\n B: ['05', '06', '07', '08', '09'],\n C: Array.from({ length: 24 }, (_, index) => String(index + 10).padStart(2, '0')),\n D: ['35'],\n E: ['36', '37', '38', '39'],\n F: ['41', '42', '43'],\n G: ['46', '47'],\n H: ['49', '50', '51', '52', '53'],\n I: ['55', '56'],\n J: ['58', '59', '60'],\n K: ['61', '62', '63'],\n L: ['64', '65', '66'],\n M: ['68'],\n N: ['69', '70', '71', '72', '73', '74', '75'],\n O: ['77', '78', '79', '80', '81', '82'],\n P: ['84'],\n Q: ['85'],\n R: ['86', '87', '88'],\n S: ['90', '91', '92', '93'],\n T: ['94', '95', '96'],\n U: ['97', '98'],\n V: ['99'],\n };\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Processes classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parent = classItems[index - 1] ?? {};\n const child = classItems[index] ?? {};\n const parentLevel = Number(parent['@level']);\n const childLevel = Number(child['@level']);\n const parentId = String(parent['@classId'] ?? '');\n const childId = String(child['@classId'] ?? '');\n\n if (parentLevel === 0 && childLevel === 1) {\n const validCodes = level0ToLevel1Mapping[parentId] ?? [];\n if (!validCodes.includes(childId)) {\n errors.push(\n `Processes classification code error: level 1 code '${childId}' does not correspond to level 0 code '${parentId}'`,\n );\n }\n continue;\n }\n\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Processes classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateSourcesClassificationHierarchy(\n classItems: Array<Record<string, unknown>> | Record<string, unknown> | undefined,\n): string[] {\n const normalizedItems = ensureArray(classItems);\n const errors: string[] = [];\n\n normalizedItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (!Number.isFinite(level)) {\n errors.push(\n `Sources classification level parsing error: missing or invalid '@level' at index ${index}`,\n );\n return;\n }\n if (level !== index) {\n errors.push(\n `Sources classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < normalizedItems.length; index += 1) {\n const parentId = normalizedItems[index - 1]?.['@classId'];\n const childId = normalizedItems[index]?.['@classId'];\n if (typeof parentId !== 'string' || typeof childId !== 'string') {\n errors.push(\n `Sources classification code error: missing '@classId' for parent index ${index - 1} or child index ${index}`,\n );\n continue;\n }\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Sources classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateLocalizedTextLanguageConstraints(node: unknown, currentPath = ''): string[] {\n const errors: string[] = [];\n const currentNode = asRecord(node);\n\n if (currentNode) {\n const language = currentNode['@xml:lang'];\n const text = currentNode['#text'];\n const location = currentPath || '<root>';\n\n if (typeof language === 'string' && typeof text === 'string') {\n const normalizedLanguage = language.toLowerCase();\n const hasChinese = CHINESE_CHARACTER_RE.test(text);\n\n if ((normalizedLanguage === 'zh' || normalizedLanguage.startsWith('zh-')) && !hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must include at least one Chinese character`,\n );\n }\n\n if ((normalizedLanguage === 'en' || normalizedLanguage.startsWith('en-')) && hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must not contain Chinese characters`,\n );\n }\n }\n\n for (const [key, value] of Object.entries(currentNode)) {\n const childPath = currentPath ? `${currentPath}/${key}` : key;\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n }\n return errors;\n }\n\n if (Array.isArray(node)) {\n node.forEach((value, index) => {\n const childPath = currentPath ? `${currentPath}/${index}` : String(index);\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n });\n }\n\n return errors;\n}\n\nfunction collectFlowClassificationStructureIssues(\n items: unknown,\n category: string,\n filePath: string,\n locationBase: string,\n requiredIdKey: '@classId' | '@catId',\n): ValidationIssue[] {\n if (!Array.isArray(items)) {\n return [];\n }\n\n const issues: ValidationIssue[] = [];\n\n items.forEach((item, index) => {\n const record = asRecord(item);\n if (!record) {\n return;\n }\n\n for (const fieldName of ['@level', requiredIdKey, '#text'] as const) {\n if (record[fieldName] !== undefined) {\n continue;\n }\n\n issues.push(\n makeIssue(\n category,\n filePath,\n `${locationBase}/${index}`,\n `Schema Error at ${locationBase}/${index}: '${fieldName}' is a required property`,\n ),\n );\n }\n });\n\n return issues;\n}\n\nfunction extractLocalizedTextLocation(message: string): string {\n if (!message.startsWith('Localized text error at ') || !message.includes(':')) {\n return '<root>';\n }\n\n const location = message.slice('Localized text error at '.length).split(':', 1)[0];\n return location.length > 0 ? location : '<root>';\n}\n\nfunction collectLocalizedTextIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n return validateLocalizedTextLanguageConstraints(jsonItem).map((message) => {\n return makeIssue(\n category,\n filePath,\n extractLocalizedTextLocation(message),\n message,\n 'localized_text_language_error',\n );\n });\n}\n\nfunction collectFlowSchemaGapIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n if (category !== 'flows') {\n return [];\n }\n\n const flowDataSet = asRecord(asRecord(jsonItem)?.flowDataSet);\n const modellingAndValidation = asRecord(flowDataSet?.modellingAndValidation);\n const lciMethod = asRecord(modellingAndValidation?.LCIMethod);\n const dataSetType = lciMethod?.typeOfDataSet;\n const dataSetInformation = asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation);\n const classificationInformation = asRecord(dataSetInformation?.classificationInformation);\n\n if (dataSetType === 'Product flow') {\n const classes = asRecord(classificationInformation?.['common:classification'])?.[\n 'common:class'\n ];\n return collectFlowClassificationStructureIssues(\n classes,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:classification/common:class',\n '@classId',\n );\n }\n\n if (dataSetType === 'Elementary flow') {\n const categories = asRecord(\n classificationInformation?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n return collectFlowClassificationStructureIssues(\n categories,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:elementaryFlowCategorization/common:category',\n '@catId',\n );\n }\n\n return [];\n}\n\nfunction collectClassificationIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const root = asRecord(jsonItem);\n\n try {\n if (category === 'flows') {\n const flowDataSet = asRecord(root?.flowDataSet);\n const dataSetType = asRecord(asRecord(flowDataSet?.modellingAndValidation)?.LCIMethod)?.[\n 'typeOfDataSet'\n ];\n\n if (dataSetType === 'Product flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'],\n )?.['common:class'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateProductFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (dataSetType === 'Elementary flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateElementaryFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n }\n } else if (category === 'processes') {\n const items = asRecord(\n asRecord(asRecord(asRecord(root?.processDataSet)?.processInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'];\n\n const classes = asRecord(items)?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'lifecyclemodels') {\n const items = asRecord(\n asRecord(asRecord(root?.lifecycleModelDataSet)?.lifecycleModelInformation)\n ?.dataSetInformation,\n )?.classificationInformation;\n\n const classes = asRecord(asRecord(items)?.['common:classification'])?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'sources') {\n const classes = asRecord(\n asRecord(asRecord(asRecord(root?.sourceDataSet)?.sourceInformation)?.dataSetInformation)\n ?.classificationInformation,\n );\n issues.push(\n ...validateSourcesClassificationHierarchy(\n asRecord(asRecord(classes)?.['common:classification'])?.['common:class'] as\n | Array<Record<string, unknown>>\n | Record<string, unknown>\n | undefined,\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } catch {\n return issues;\n }\n\n return issues;\n}\n\nfunction collectSchemaIssues(\n schema: SafeParseSchema,\n jsonItem: unknown,\n category: SupportedCategory,\n filePath: string,\n): ValidationIssue[] {\n try {\n const result = schema.safeParse(jsonItem);\n if (result.success) {\n return [];\n }\n\n const rawIssues = Array.isArray(result.error?.issues) ? result.error.issues : [];\n if (rawIssues.length === 0) {\n return [createValidationErrorIssue(category, filePath, 'Schema validation failed')];\n }\n\n return rawIssues.map((issue) => createSchemaIssue(category, filePath, issue));\n } catch (error) {\n return [createValidationErrorIssue(category, filePath, error)];\n }\n}\n\nfunction categoryValidate(\n jsonFilePath: string,\n category: SupportedCategory,\n schema: SafeParseSchema,\n emitLogs = true,\n): CategoryValidationReport {\n const issues: ValidationIssue[] = [];\n\n for (const fileName of readdirSync(jsonFilePath).sort()) {\n if (!fileName.endsWith('.json')) {\n continue;\n }\n\n const fullPath = path.join(jsonFilePath, fileName);\n let jsonItem: unknown;\n\n try {\n jsonItem = JSON.parse(readFileSync(fullPath, 'utf8')) as unknown;\n } catch (error) {\n issues.push(createInvalidJsonIssue(category, fullPath, error));\n continue;\n }\n\n const itemIssues = dedupeIssues([\n ...collectSchemaIssues(schema, jsonItem, category, fullPath),\n ...collectFlowSchemaGapIssues(jsonItem, category, fullPath),\n ...collectLocalizedTextIssues(jsonItem, category, fullPath),\n ...collectClassificationIssues(jsonItem, category, fullPath),\n ]);\n\n issues.push(...itemIssues);\n\n if (!emitLogs) {\n continue;\n }\n\n if (itemIssues.length === 0) {\n console.info(`INFO: ${fullPath} PASSED.`);\n continue;\n }\n\n itemIssues.forEach((issue) => {\n console.error(`ERROR: ${fullPath} ${issue.message}`);\n });\n }\n\n return buildCategoryReport(category, issues);\n}\n\nfunction isSafeParseSchema(value: unknown): value is SafeParseSchema {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'safeParse' in value &&\n typeof (value as { safeParse?: unknown }).safeParse === 'function'\n );\n}\n\nfunction resolveCategorySchemas(\n moduleExports: TidasSdkPublicModule,\n): Map<SupportedCategory, SafeParseSchema> | null {\n const schemas = new Map<SupportedCategory, SafeParseSchema>();\n\n for (const category of SUPPORTED_CATEGORIES) {\n const exportName = CATEGORY_SCHEMA_EXPORTS[category];\n const schema = moduleExports[exportName];\n if (!isSafeParseSchema(schema)) {\n return null;\n }\n schemas.set(category, schema);\n }\n\n return schemas;\n}\n\nexport function createTidasSdkPackageValidator(\n moduleExports: TidasSdkPublicModule,\n location: string,\n): {\n location: string;\n validatePackageDir: (inputDir: string, emitLogs?: boolean) => PackageValidationReport;\n} | null {\n const schemas = resolveCategorySchemas(moduleExports);\n if (!schemas) {\n return null;\n }\n\n return {\n location,\n validatePackageDir(inputDir: string, emitLogs = false): PackageValidationReport {\n const categoryReports = SUPPORTED_CATEGORIES.flatMap((category) => {\n const categoryDir = path.join(inputDir, category);\n const schema = schemas.get(category);\n if (!schema || !existsSync(categoryDir)) {\n return [];\n }\n\n return [categoryValidate(categoryDir, category, schema, emitLogs)];\n });\n\n return buildPackageReport(inputDir, categoryReports);\n },\n };\n}\n\nexport const __testInternals = {\n summarizeIssues,\n buildCategoryReport,\n buildPackageReport,\n asRecord,\n ensureArray,\n toLocation,\n createInvalidJsonIssue,\n createValidationErrorIssue,\n createSchemaIssue,\n dedupeIssues,\n makeIssue,\n validateElementaryFlowsClassificationHierarchy,\n validateProductFlowsClassificationHierarchy,\n validateProcessesClassificationHierarchy,\n validateSourcesClassificationHierarchy,\n validateLocalizedTextLanguageConstraints,\n collectFlowClassificationStructureIssues,\n extractLocalizedTextLocation,\n collectLocalizedTextIssues,\n collectFlowSchemaGapIssues,\n collectClassificationIssues,\n collectSchemaIssues,\n categoryValidate,\n resolveCategorySchemas,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"tidas-sdk-package-validator.js","sourceRoot":"","sources":["../../../src/lib/tidas-sdk-package-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport {\n type SafeParseIssue,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\n\ntype JsonObject = Record<string, unknown>;\n\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\nexport type ValidationIssue = {\n issue_code: string;\n severity: ValidationSeverity;\n category: string;\n file_path: string;\n message: string;\n location: string;\n context: Record<string, unknown>;\n};\n\ntype ValidationSummary = {\n issue_count: number;\n error_count: number;\n warning_count: number;\n info_count: number;\n};\n\ntype CategoryValidationReport = {\n category: string;\n ok: boolean;\n summary: ValidationSummary;\n issues: ValidationIssue[];\n};\n\nexport type PackageValidationReport = {\n input_dir: string;\n ok: boolean;\n summary: ValidationSummary & { category_count: number };\n categories: CategoryValidationReport[];\n issues: ValidationIssue[];\n};\n\ntype SupportedCategory =\n | 'contacts'\n | 'flowproperties'\n | 'flows'\n | 'lciamethods'\n | 'lifecyclemodels'\n | 'processes'\n | 'sources'\n | 'unitgroups';\n\ntype TidasSdkPublicModule = {\n ContactSchema?: SafeParseSchema;\n FlowPropertySchema?: SafeParseSchema;\n FlowSchema?: SafeParseSchema;\n LCIAMethodSchema?: SafeParseSchema;\n LifeCycleModelSchema?: SafeParseSchema;\n ProcessSchema?: SafeParseSchema;\n SourceSchema?: SafeParseSchema;\n UnitGroupSchema?: SafeParseSchema;\n createContact?: SdkValidationFactory;\n createFlowProperty?: SdkValidationFactory;\n createFlow?: SdkValidationFactory;\n createLCIAMethod?: SdkValidationFactory;\n createLifeCycleModel?: SdkValidationFactory;\n createProcess?: SdkValidationFactory;\n createSource?: SdkValidationFactory;\n createUnitGroup?: SdkValidationFactory;\n};\n\nconst SUPPORTED_CATEGORIES: SupportedCategory[] = [\n 'contacts',\n 'flowproperties',\n 'flows',\n 'lciamethods',\n 'lifecyclemodels',\n 'processes',\n 'sources',\n 'unitgroups',\n];\n\nconst CATEGORY_SCHEMA_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'ContactSchema',\n flowproperties: 'FlowPropertySchema',\n flows: 'FlowSchema',\n lciamethods: 'LCIAMethodSchema',\n lifecyclemodels: 'LifeCycleModelSchema',\n processes: 'ProcessSchema',\n sources: 'SourceSchema',\n unitgroups: 'UnitGroupSchema',\n};\n\nconst CATEGORY_FACTORY_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'createContact',\n flowproperties: 'createFlowProperty',\n flows: 'createFlow',\n lciamethods: 'createLCIAMethod',\n lifecyclemodels: 'createLifeCycleModel',\n processes: 'createProcess',\n sources: 'createSource',\n unitgroups: 'createUnitGroup',\n};\n\nconst CHINESE_CHARACTER_RE = /[\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]/u;\n\nfunction summarizeIssues(issues: ValidationIssue[]): ValidationSummary {\n const errorCount = issues.filter((issue) => issue.severity === 'error').length;\n const warningCount = issues.filter((issue) => issue.severity === 'warning').length;\n const infoCount = issues.filter((issue) => issue.severity === 'info').length;\n\n return {\n issue_count: issues.length,\n error_count: errorCount,\n warning_count: warningCount,\n info_count: infoCount,\n };\n}\n\nfunction buildCategoryReport(\n category: string,\n issues: ValidationIssue[],\n): CategoryValidationReport {\n return {\n category,\n ok: issues.length === 0,\n summary: summarizeIssues(issues),\n issues,\n };\n}\n\nfunction buildPackageReport(\n inputDir: string,\n categoryReports: CategoryValidationReport[],\n): PackageValidationReport {\n const issues = categoryReports.flatMap((report) => report.issues);\n const summary = summarizeIssues(issues);\n\n return {\n input_dir: inputDir,\n ok: issues.length === 0,\n summary: {\n category_count: categoryReports.length,\n ...summary,\n },\n categories: categoryReports,\n issues,\n };\n}\n\nfunction asRecord(value: unknown): JsonObject | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JsonObject) : null;\n}\n\nfunction ensureArray<T>(value: T | T[] | undefined | null): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [value];\n}\n\nfunction toLocation(pathParts: Array<string | number> | undefined): string {\n if (!Array.isArray(pathParts) || pathParts.length === 0) {\n return '<root>';\n }\n return pathParts.join('/');\n}\n\nfunction createInvalidJsonIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'invalid_json',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Invalid JSON: ${\n error instanceof Error ? error.name : 'Error'\n }: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createValidationErrorIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'validation_error',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Validation error: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createSchemaIssue(\n category: string,\n filePath: string,\n issue: SafeParseIssue,\n): ValidationIssue {\n const location = toLocation(issue.path);\n return {\n issue_code: 'schema_error',\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message: `Schema Error at ${location}: ${issue.message ?? 'Validation failed'}`,\n context: {\n validator: issue.code ?? 'custom',\n },\n };\n}\n\nfunction dedupeIssues(issues: ValidationIssue[]): ValidationIssue[] {\n const seen = new Set<string>();\n const deduped: ValidationIssue[] = [];\n\n for (const issue of issues) {\n const key = `${issue.issue_code}|${issue.file_path}|${issue.location}|${issue.message}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(issue);\n }\n\n return deduped;\n}\n\nfunction makeIssue(\n category: string,\n filePath: string,\n location: string,\n message: string,\n issueCode = 'schema_error',\n): ValidationIssue {\n return {\n issue_code: issueCode,\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message,\n context: {},\n };\n}\n\nfunction validateElementaryFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Elementary flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@catId'] ?? '');\n const childId = String(classItems[index]?.['@catId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Elementary flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateProductFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Product flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@classId'] ?? '');\n const childId = String(classItems[index]?.['@classId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Product flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateProcessesClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n const level0ToLevel1Mapping: Record<string, string[]> = {\n A: ['01', '02', '03'],\n B: ['05', '06', '07', '08', '09'],\n C: Array.from({ length: 24 }, (_, index) => String(index + 10).padStart(2, '0')),\n D: ['35'],\n E: ['36', '37', '38', '39'],\n F: ['41', '42', '43'],\n G: ['46', '47'],\n H: ['49', '50', '51', '52', '53'],\n I: ['55', '56'],\n J: ['58', '59', '60'],\n K: ['61', '62', '63'],\n L: ['64', '65', '66'],\n M: ['68'],\n N: ['69', '70', '71', '72', '73', '74', '75'],\n O: ['77', '78', '79', '80', '81', '82'],\n P: ['84'],\n Q: ['85'],\n R: ['86', '87', '88'],\n S: ['90', '91', '92', '93'],\n T: ['94', '95', '96'],\n U: ['97', '98'],\n V: ['99'],\n };\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Processes classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parent = classItems[index - 1] ?? {};\n const child = classItems[index] ?? {};\n const parentLevel = Number(parent['@level']);\n const childLevel = Number(child['@level']);\n const parentId = String(parent['@classId'] ?? '');\n const childId = String(child['@classId'] ?? '');\n\n if (parentLevel === 0 && childLevel === 1) {\n const validCodes = level0ToLevel1Mapping[parentId] ?? [];\n if (!validCodes.includes(childId)) {\n errors.push(\n `Processes classification code error: level 1 code '${childId}' does not correspond to level 0 code '${parentId}'`,\n );\n }\n continue;\n }\n\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Processes classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateSourcesClassificationHierarchy(\n classItems: Array<Record<string, unknown>> | Record<string, unknown> | undefined,\n): string[] {\n const normalizedItems = ensureArray(classItems);\n const errors: string[] = [];\n\n normalizedItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (!Number.isFinite(level)) {\n errors.push(\n `Sources classification level parsing error: missing or invalid '@level' at index ${index}`,\n );\n return;\n }\n if (level !== index) {\n errors.push(\n `Sources classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < normalizedItems.length; index += 1) {\n const parentId = normalizedItems[index - 1]?.['@classId'];\n const childId = normalizedItems[index]?.['@classId'];\n if (typeof parentId !== 'string' || typeof childId !== 'string') {\n errors.push(\n `Sources classification code error: missing '@classId' for parent index ${index - 1} or child index ${index}`,\n );\n continue;\n }\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Sources classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateLocalizedTextLanguageConstraints(node: unknown, currentPath = ''): string[] {\n const errors: string[] = [];\n const currentNode = asRecord(node);\n\n if (currentNode) {\n const language = currentNode['@xml:lang'];\n const text = currentNode['#text'];\n const location = currentPath || '<root>';\n\n if (typeof language === 'string' && typeof text === 'string') {\n const normalizedLanguage = language.toLowerCase();\n const hasChinese = CHINESE_CHARACTER_RE.test(text);\n\n if ((normalizedLanguage === 'zh' || normalizedLanguage.startsWith('zh-')) && !hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must include at least one Chinese character`,\n );\n }\n\n if ((normalizedLanguage === 'en' || normalizedLanguage.startsWith('en-')) && hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must not contain Chinese characters`,\n );\n }\n }\n\n for (const [key, value] of Object.entries(currentNode)) {\n const childPath = currentPath ? `${currentPath}/${key}` : key;\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n }\n return errors;\n }\n\n if (Array.isArray(node)) {\n node.forEach((value, index) => {\n const childPath = currentPath ? `${currentPath}/${index}` : String(index);\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n });\n }\n\n return errors;\n}\n\nfunction collectFlowClassificationStructureIssues(\n items: unknown,\n category: string,\n filePath: string,\n locationBase: string,\n requiredIdKey: '@classId' | '@catId',\n): ValidationIssue[] {\n if (!Array.isArray(items)) {\n return [];\n }\n\n const issues: ValidationIssue[] = [];\n\n items.forEach((item, index) => {\n const record = asRecord(item);\n if (!record) {\n return;\n }\n\n for (const fieldName of ['@level', requiredIdKey, '#text'] as const) {\n if (record[fieldName] !== undefined) {\n continue;\n }\n\n issues.push(\n makeIssue(\n category,\n filePath,\n `${locationBase}/${index}`,\n `Schema Error at ${locationBase}/${index}: '${fieldName}' is a required property`,\n ),\n );\n }\n });\n\n return issues;\n}\n\nfunction extractLocalizedTextLocation(message: string): string {\n if (!message.startsWith('Localized text error at ') || !message.includes(':')) {\n return '<root>';\n }\n\n const location = message.slice('Localized text error at '.length).split(':', 1)[0];\n return location.length > 0 ? location : '<root>';\n}\n\nfunction collectLocalizedTextIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n return validateLocalizedTextLanguageConstraints(jsonItem).map((message) => {\n return makeIssue(\n category,\n filePath,\n extractLocalizedTextLocation(message),\n message,\n 'localized_text_language_error',\n );\n });\n}\n\nfunction collectFlowSchemaGapIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n if (category !== 'flows') {\n return [];\n }\n\n const flowDataSet = asRecord(asRecord(jsonItem)?.flowDataSet);\n const modellingAndValidation = asRecord(flowDataSet?.modellingAndValidation);\n const lciMethod = asRecord(modellingAndValidation?.LCIMethod);\n const dataSetType = lciMethod?.typeOfDataSet;\n const dataSetInformation = asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation);\n const classificationInformation = asRecord(dataSetInformation?.classificationInformation);\n\n if (dataSetType === 'Product flow') {\n const classes = asRecord(classificationInformation?.['common:classification'])?.[\n 'common:class'\n ];\n return collectFlowClassificationStructureIssues(\n classes,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:classification/common:class',\n '@classId',\n );\n }\n\n if (dataSetType === 'Elementary flow') {\n const categories = asRecord(\n classificationInformation?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n return collectFlowClassificationStructureIssues(\n categories,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:elementaryFlowCategorization/common:category',\n '@catId',\n );\n }\n\n return [];\n}\n\nfunction collectClassificationIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const root = asRecord(jsonItem);\n\n try {\n if (category === 'flows') {\n const flowDataSet = asRecord(root?.flowDataSet);\n const dataSetType = asRecord(asRecord(flowDataSet?.modellingAndValidation)?.LCIMethod)?.[\n 'typeOfDataSet'\n ];\n\n if (dataSetType === 'Product flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'],\n )?.['common:class'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateProductFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (dataSetType === 'Elementary flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateElementaryFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n }\n } else if (category === 'processes') {\n const items = asRecord(\n asRecord(asRecord(asRecord(root?.processDataSet)?.processInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'];\n\n const classes = asRecord(items)?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'lifecyclemodels') {\n const items = asRecord(\n asRecord(asRecord(root?.lifecycleModelDataSet)?.lifecycleModelInformation)\n ?.dataSetInformation,\n )?.classificationInformation;\n\n const classes = asRecord(asRecord(items)?.['common:classification'])?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'sources') {\n const classes = asRecord(\n asRecord(asRecord(asRecord(root?.sourceDataSet)?.sourceInformation)?.dataSetInformation)\n ?.classificationInformation,\n );\n issues.push(\n ...validateSourcesClassificationHierarchy(\n asRecord(asRecord(classes)?.['common:classification'])?.['common:class'] as\n | Array<Record<string, unknown>>\n | Record<string, unknown>\n | undefined,\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } catch {\n return issues;\n }\n\n return issues;\n}\n\nfunction collectSchemaIssues(\n schema: SafeParseSchema,\n jsonItem: unknown,\n category: SupportedCategory,\n filePath: string,\n createEntity: SdkValidationFactory | null = null,\n): ValidationIssue[] {\n try {\n const result = validateSchemaWithDeepFallback(schema, jsonItem, createEntity);\n if (result.success) {\n return [];\n }\n\n const rawIssues = result.issues;\n if (rawIssues.length === 0) {\n return [createValidationErrorIssue(category, filePath, 'Schema validation failed')];\n }\n\n return rawIssues.map((issue) => createSchemaIssue(category, filePath, issue));\n } catch (error) {\n return [createValidationErrorIssue(category, filePath, error)];\n }\n}\n\nfunction categoryValidate(\n jsonFilePath: string,\n category: SupportedCategory,\n schema: SafeParseSchema,\n createEntity: SdkValidationFactory | null = null,\n emitLogs = true,\n): CategoryValidationReport {\n const issues: ValidationIssue[] = [];\n\n for (const fileName of readdirSync(jsonFilePath).sort()) {\n if (!fileName.endsWith('.json')) {\n continue;\n }\n\n const fullPath = path.join(jsonFilePath, fileName);\n let jsonItem: unknown;\n\n try {\n jsonItem = JSON.parse(readFileSync(fullPath, 'utf8')) as unknown;\n } catch (error) {\n issues.push(createInvalidJsonIssue(category, fullPath, error));\n continue;\n }\n\n const itemIssues = dedupeIssues([\n ...collectSchemaIssues(schema, jsonItem, category, fullPath, createEntity),\n ...collectFlowSchemaGapIssues(jsonItem, category, fullPath),\n ...collectLocalizedTextIssues(jsonItem, category, fullPath),\n ...collectClassificationIssues(jsonItem, category, fullPath),\n ]);\n\n issues.push(...itemIssues);\n\n if (!emitLogs) {\n continue;\n }\n\n if (itemIssues.length === 0) {\n console.info(`INFO: ${fullPath} PASSED.`);\n continue;\n }\n\n itemIssues.forEach((issue) => {\n console.error(`ERROR: ${fullPath} ${issue.message}`);\n });\n }\n\n return buildCategoryReport(category, issues);\n}\n\nfunction isSafeParseSchema(value: unknown): value is SafeParseSchema {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'safeParse' in value &&\n typeof (value as { safeParse?: unknown }).safeParse === 'function'\n );\n}\n\nfunction resolveCategorySchemas(\n moduleExports: TidasSdkPublicModule,\n): Map<\n SupportedCategory,\n { schema: SafeParseSchema; createEntity: SdkValidationFactory | null }\n> | null {\n const schemas = new Map<\n SupportedCategory,\n { schema: SafeParseSchema; createEntity: SdkValidationFactory | null }\n >();\n\n for (const category of SUPPORTED_CATEGORIES) {\n const exportName = CATEGORY_SCHEMA_EXPORTS[category];\n const schema = moduleExports[exportName];\n if (!isSafeParseSchema(schema)) {\n return null;\n }\n const factoryName = CATEGORY_FACTORY_EXPORTS[category];\n const createEntity = moduleExports[factoryName];\n schemas.set(category, {\n schema,\n createEntity: typeof createEntity === 'function' ? createEntity : null,\n });\n }\n\n return schemas;\n}\n\nexport function createTidasSdkPackageValidator(\n moduleExports: TidasSdkPublicModule,\n location: string,\n): {\n location: string;\n validatePackageDir: (inputDir: string, emitLogs?: boolean) => PackageValidationReport;\n} | null {\n const schemas = resolveCategorySchemas(moduleExports);\n if (!schemas) {\n return null;\n }\n\n return {\n location,\n validatePackageDir(inputDir: string, emitLogs = false): PackageValidationReport {\n const categoryReports = SUPPORTED_CATEGORIES.flatMap((category) => {\n const categoryDir = path.join(inputDir, category);\n const validator = schemas.get(category);\n if (!validator || !existsSync(categoryDir)) {\n return [];\n }\n\n return [\n categoryValidate(\n categoryDir,\n category,\n validator.schema,\n validator.createEntity,\n emitLogs,\n ),\n ];\n });\n\n return buildPackageReport(inputDir, categoryReports);\n },\n };\n}\n\nexport const __testInternals = {\n summarizeIssues,\n buildCategoryReport,\n buildPackageReport,\n asRecord,\n ensureArray,\n toLocation,\n createInvalidJsonIssue,\n createValidationErrorIssue,\n createSchemaIssue,\n dedupeIssues,\n makeIssue,\n validateElementaryFlowsClassificationHierarchy,\n validateProductFlowsClassificationHierarchy,\n validateProcessesClassificationHierarchy,\n validateSourcesClassificationHierarchy,\n validateLocalizedTextLanguageConstraints,\n collectFlowClassificationStructureIssues,\n extractLocalizedTextLocation,\n collectLocalizedTextIssues,\n collectFlowSchemaGapIssues,\n collectClassificationIssues,\n collectSchemaIssues,\n categoryValidate,\n CATEGORY_FACTORY_EXPORTS,\n resolveCategorySchemas,\n};\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
function isIssueLike(value) {
|
|
5
|
+
return isRecord(value);
|
|
6
|
+
}
|
|
7
|
+
function issueArray(value) {
|
|
8
|
+
return Array.isArray(value) ? value.filter(isIssueLike) : [];
|
|
9
|
+
}
|
|
10
|
+
export function validationSucceeded(result) {
|
|
11
|
+
return isRecord(result) && result.success === true;
|
|
12
|
+
}
|
|
13
|
+
export function validationIssues(result) {
|
|
14
|
+
if (!isRecord(result)) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const error = isRecord(result.error) ? result.error : null;
|
|
18
|
+
const errorIssues = issueArray(error?.issues);
|
|
19
|
+
if (errorIssues.length > 0) {
|
|
20
|
+
return errorIssues;
|
|
21
|
+
}
|
|
22
|
+
return issueArray(result.validationIssues);
|
|
23
|
+
}
|
|
24
|
+
export function normalizeIssuePath(pathParts, separator = '.') {
|
|
25
|
+
if (!Array.isArray(pathParts) || pathParts.length === 0) {
|
|
26
|
+
return '<root>';
|
|
27
|
+
}
|
|
28
|
+
return pathParts.map((part) => String(part)).join(separator);
|
|
29
|
+
}
|
|
30
|
+
export function runEntityValidation(entity) {
|
|
31
|
+
if (!isRecord(entity)) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (typeof entity.validateEnhanced === 'function') {
|
|
35
|
+
return entity.validateEnhanced();
|
|
36
|
+
}
|
|
37
|
+
if (typeof entity.validate === 'function') {
|
|
38
|
+
return entity.validate();
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
export function validateEntityWithDeepFallback(payload, createEntity) {
|
|
43
|
+
const fastEntity = createEntity(payload, {
|
|
44
|
+
mode: 'strict',
|
|
45
|
+
throwOnError: false,
|
|
46
|
+
deepValidation: false,
|
|
47
|
+
});
|
|
48
|
+
const fastResult = runEntityValidation(fastEntity);
|
|
49
|
+
if (validationSucceeded(fastResult)) {
|
|
50
|
+
return fastResult;
|
|
51
|
+
}
|
|
52
|
+
const deepEntity = createEntity(payload, {
|
|
53
|
+
mode: 'strict',
|
|
54
|
+
throwOnError: false,
|
|
55
|
+
deepValidation: true,
|
|
56
|
+
});
|
|
57
|
+
return runEntityValidation(deepEntity) ?? fastResult;
|
|
58
|
+
}
|
|
59
|
+
export function validateSchemaWithDeepFallback(schema, payload, createEntity) {
|
|
60
|
+
const fastResult = schema.safeParse(payload);
|
|
61
|
+
if (fastResult.success) {
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
issues: [],
|
|
65
|
+
result: fastResult,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const fastIssues = validationIssues(fastResult);
|
|
69
|
+
if (!createEntity) {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
issues: fastIssues,
|
|
73
|
+
result: fastResult,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const deepResult = validateEntityWithDeepFallback(payload, createEntity);
|
|
78
|
+
const deepIssues = validationIssues(deepResult);
|
|
79
|
+
if (!validationSucceeded(deepResult) && (deepIssues.length > 0 || fastIssues.length === 0)) {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
issues: deepIssues,
|
|
83
|
+
result: deepResult,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Keep the existing schema error path if SDK entity validation itself fails.
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
issues: fastIssues,
|
|
93
|
+
result: fastResult,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=tidas-sdk-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tidas-sdk-validation.js","sourceRoot":"","sources":["../../../src/lib/tidas-sdk-validation.ts"],"names":[],"mappings":"AAkDA,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAA6C,EAC7C,SAAS,GAAG,GAAG;IAEf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,OAAgB,EAChB,YAAkC;IAElC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE;QACvC,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,KAAK;QACnB,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE;QACvC,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,KAAK;QACnB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,OAAO,mBAAmB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAAuB,EACvB,OAAgB,EAChB,YAA0C;IAE1C,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,8BAA8B,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3F,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,UAAU;aACnB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;IAC/E,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC","sourcesContent":["export type SafeParseIssue = {\n code?: string;\n message?: string;\n path?: Array<string | number>;\n};\n\nexport type SafeParseResult =\n | {\n success: true;\n data?: unknown;\n }\n | {\n success: false;\n error?: {\n issues?: SafeParseIssue[];\n };\n };\n\nexport type SafeParseSchema = {\n safeParse: (value: unknown) => SafeParseResult;\n};\n\nexport type EntityValidationConfig = {\n mode: 'strict';\n throwOnError: false;\n deepValidation: boolean;\n};\n\nexport type SdkValidationEntity = {\n validateEnhanced?: () => unknown;\n validate?: () => unknown;\n};\n\nexport type SdkValidationFactory = (\n data?: unknown,\n validationConfig?: EntityValidationConfig,\n) => SdkValidationEntity | unknown;\n\nexport type SchemaValidationOutcome =\n | {\n success: true;\n issues: [];\n result: SafeParseResult;\n }\n | {\n success: false;\n issues: SafeParseIssue[];\n result: unknown;\n };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isIssueLike(value: unknown): value is SafeParseIssue {\n return isRecord(value);\n}\n\nfunction issueArray(value: unknown): SafeParseIssue[] {\n return Array.isArray(value) ? value.filter(isIssueLike) : [];\n}\n\nexport function validationSucceeded(result: unknown): boolean {\n return isRecord(result) && result.success === true;\n}\n\nexport function validationIssues(result: unknown): SafeParseIssue[] {\n if (!isRecord(result)) {\n return [];\n }\n\n const error = isRecord(result.error) ? result.error : null;\n const errorIssues = issueArray(error?.issues);\n if (errorIssues.length > 0) {\n return errorIssues;\n }\n\n return issueArray(result.validationIssues);\n}\n\nexport function normalizeIssuePath(\n pathParts: Array<string | number> | undefined,\n separator = '.',\n): string {\n if (!Array.isArray(pathParts) || pathParts.length === 0) {\n return '<root>';\n }\n return pathParts.map((part) => String(part)).join(separator);\n}\n\nexport function runEntityValidation(entity: unknown): unknown | null {\n if (!isRecord(entity)) {\n return null;\n }\n\n if (typeof entity.validateEnhanced === 'function') {\n return entity.validateEnhanced();\n }\n\n if (typeof entity.validate === 'function') {\n return entity.validate();\n }\n\n return null;\n}\n\nexport function validateEntityWithDeepFallback(\n payload: unknown,\n createEntity: SdkValidationFactory,\n): unknown | null {\n const fastEntity = createEntity(payload, {\n mode: 'strict',\n throwOnError: false,\n deepValidation: false,\n });\n const fastResult = runEntityValidation(fastEntity);\n if (validationSucceeded(fastResult)) {\n return fastResult;\n }\n\n const deepEntity = createEntity(payload, {\n mode: 'strict',\n throwOnError: false,\n deepValidation: true,\n });\n return runEntityValidation(deepEntity) ?? fastResult;\n}\n\nexport function validateSchemaWithDeepFallback(\n schema: SafeParseSchema,\n payload: unknown,\n createEntity?: SdkValidationFactory | null,\n): SchemaValidationOutcome {\n const fastResult = schema.safeParse(payload);\n if (fastResult.success) {\n return {\n success: true,\n issues: [],\n result: fastResult,\n };\n }\n\n const fastIssues = validationIssues(fastResult);\n\n if (!createEntity) {\n return {\n success: false,\n issues: fastIssues,\n result: fastResult,\n };\n }\n\n try {\n const deepResult = validateEntityWithDeepFallback(payload, createEntity);\n const deepIssues = validationIssues(deepResult);\n if (!validationSucceeded(deepResult) && (deepIssues.length > 0 || fastIssues.length === 0)) {\n return {\n success: false,\n issues: deepIssues,\n result: deepResult,\n };\n }\n } catch {\n // Keep the existing schema error path if SDK entity validation itself fails.\n }\n\n return {\n success: false,\n issues: fastIssues,\n result: fastResult,\n };\n}\n"]}
|
|
@@ -37,7 +37,7 @@ export function decodeUserApiKey(apiKey) {
|
|
|
37
37
|
export function requireUserApiKeyCredentials(apiKey) {
|
|
38
38
|
const credentials = decodeUserApiKey(apiKey);
|
|
39
39
|
if (!credentials) {
|
|
40
|
-
throw new CliError('TIANGONG_LCA_API_KEY is invalid. Generate a new user API key from the TianGong
|
|
40
|
+
throw new CliError('TIANGONG_LCA_API_KEY is invalid. Generate a new user API key from the TianGong user API key page.', {
|
|
41
41
|
code: 'USER_API_KEY_INVALID',
|
|
42
42
|
exitCode: 2,
|
|
43
43
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-api-key.js","sourceRoot":"","sources":["../../../src/lib/user-api-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvC,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,KAAK;YACL,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAChB,
|
|
1
|
+
{"version":3,"file":"user-api-key.js","sourceRoot":"","sources":["../../../src/lib/user-api-key.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { CliError } from './errors.js';\n\nexport type UserApiKeyCredentials = {\n email: string;\n password: string;\n};\n\nfunction normalizeToken(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction normalizeCredentialValue(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function decodeUserApiKey(apiKey: string): UserApiKeyCredentials | null {\n const normalizedApiKey = normalizeToken(apiKey);\n if (!normalizedApiKey) {\n return null;\n }\n\n try {\n const jsonText = Buffer.from(normalizedApiKey, 'base64').toString('utf8');\n const parsed = JSON.parse(jsonText);\n if (!isRecord(parsed)) {\n return null;\n }\n\n const email = normalizeCredentialValue(parsed.email);\n const password = normalizeCredentialValue(parsed.password);\n if (!email || !password) {\n return null;\n }\n\n return {\n email,\n password,\n };\n } catch {\n return null;\n }\n}\n\nexport function requireUserApiKeyCredentials(apiKey: string): UserApiKeyCredentials {\n const credentials = decodeUserApiKey(apiKey);\n if (!credentials) {\n throw new CliError(\n 'TIANGONG_LCA_API_KEY is invalid. Generate a new user API key from the TianGong user API key page.',\n {\n code: 'USER_API_KEY_INVALID',\n exitCode: 2,\n },\n );\n }\n\n return credentials;\n}\n\nexport function fingerprintSecret(value: string): string {\n const normalized = normalizeToken(value);\n if (!normalized) {\n throw new CliError('Cannot fingerprint an empty secret value.', {\n code: 'SECRET_FINGERPRINT_VALUE_REQUIRED',\n exitCode: 2,\n });\n }\n\n return `sha256:${createHash('sha256').update(normalized).digest('hex')}`;\n}\n\nexport function fingerprintUserApiKey(apiKey: string): string {\n return fingerprintSecret(apiKey);\n}\n\nexport function redactEmail(email: string): string {\n const normalized = normalizeCredentialValue(email);\n const [localPart, domainPart] = normalized.split('@');\n if (!localPart || !domainPart) {\n return '****';\n }\n\n if (localPart.length <= 2) {\n return `****@${domainPart}`;\n }\n\n return `${localPart.slice(0, 2)}****@${domainPart}`;\n}\n\nexport const __testInternals = {\n normalizeCredentialValue,\n normalizeToken,\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiangong-lca/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "Unified TianGong LCA CLI with direct REST adapters and low-entropy command surface.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
14
|
"bin": {
|
|
15
|
-
"tiangong": "./bin/tiangong.js"
|
|
15
|
+
"tiangong-lca": "./bin/tiangong-lca.js"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"bin/",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
|
-
"start": "npm run build && node ./bin/tiangong.js",
|
|
27
|
+
"start": "npm run build && node ./bin/tiangong-lca.js",
|
|
28
28
|
"dev": "tsx watch src/main.ts",
|
|
29
29
|
"typecheck": "npm run tsc",
|
|
30
30
|
"tsc": "tsc --noEmit",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"node": ">=24 <25"
|
|
57
57
|
},
|
|
58
58
|
"keywords": [
|
|
59
|
-
"tiangong",
|
|
59
|
+
"tiangong-lca",
|
|
60
60
|
"lca",
|
|
61
61
|
"cli",
|
|
62
62
|
"rest"
|
|
File without changes
|
|
File without changes
|