@tiangong-lca/cli 0.0.32 → 0.1.0
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/LICENSE +21 -0
- package/README.md +33 -12
- package/assets/import-smoke/simapro.csv +20 -0
- package/bin/tiangong-lca.js +1 -1
- package/dist/src/cli.js +103 -65
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-bilingual.js.map +1 -1
- package/dist/src/lib/dataset-classification.js.map +1 -1
- package/dist/src/lib/dataset-contract.js.map +1 -1
- package/dist/src/lib/dataset-evidence-search.js.map +1 -1
- package/dist/src/lib/dataset-import-lca.js +302 -131
- package/dist/src/lib/dataset-import-lca.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-apply.js +916 -43
- package/dist/src/lib/dataset-maintenance-apply.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-clear-account.js +10 -4
- package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-contract.js +1 -6
- package/dist/src/lib/dataset-maintenance-contract.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-derivatives.js +0 -1
- package/dist/src/lib/dataset-maintenance-derivatives.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-flow-identity-capture.js +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-capture.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-pagination.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-before.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-contract.js +0 -1
- package/dist/src/lib/dataset-maintenance-protected-contract.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-freeze.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-preparation.js +0 -2
- package/dist/src/lib/dataset-maintenance-protected-preparation.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-seal.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-protected-verify.js +0 -3
- package/dist/src/lib/dataset-maintenance-protected-verify.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-remote.js +68 -12
- package/dist/src/lib/dataset-maintenance-remote.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-verify.js +1 -2
- package/dist/src/lib/dataset-maintenance-verify.js.map +1 -1
- package/dist/src/lib/dataset-remote-refresh.js.map +1 -1
- package/dist/src/lib/dataset-remote-verify.js +2 -0
- package/dist/src/lib/dataset-remote-verify.js.map +1 -1
- package/dist/src/lib/dataset-save-draft-run.js +2 -0
- package/dist/src/lib/dataset-save-draft-run.js.map +1 -1
- package/dist/src/lib/flow-build-alias-map.js.map +1 -1
- package/dist/src/lib/flow-fetch-rows.js.map +1 -1
- package/dist/src/lib/flow-get.js.map +1 -1
- package/dist/src/lib/flow-governance.js.map +1 -1
- package/dist/src/lib/flow-list.js +1 -0
- package/dist/src/lib/flow-list.js.map +1 -1
- package/dist/src/lib/flow-payload-validation.js.map +1 -1
- package/dist/src/lib/flow-publish-version.js +1 -0
- package/dist/src/lib/flow-publish-version.js.map +1 -1
- package/dist/src/lib/flow-read.js +1 -0
- package/dist/src/lib/flow-read.js.map +1 -1
- package/dist/src/lib/flow-regen-product.js.map +1 -1
- package/dist/src/lib/flow-remediate.js.map +1 -1
- package/dist/src/lib/identity-preflight.js +4 -10
- package/dist/src/lib/identity-preflight.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-bundle-save.js +1 -0
- package/dist/src/lib/lifecyclemodel-bundle-save.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-orchestrate.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-publish-resulting-process.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
- package/dist/src/lib/package-version.js.map +1 -1
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +14 -7
- package/dist/src/lib/process-dedup-review.js.map +1 -1
- package/dist/src/lib/process-flow-build-plan.js +111 -30
- package/dist/src/lib/process-flow-build-plan.js.map +1 -1
- package/dist/src/lib/process-get.js +1 -0
- package/dist/src/lib/process-get.js.map +1 -1
- package/dist/src/lib/process-list.js +1 -0
- package/dist/src/lib/process-list.js.map +1 -1
- package/dist/src/lib/process-payload-validation.js.map +1 -1
- package/dist/src/lib/process-qa.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +15 -10
- package/dist/src/lib/process-refresh-references.js.map +1 -1
- package/dist/src/lib/process-save-draft.js +9 -3
- package/dist/src/lib/process-save-draft.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +11 -4
- package/dist/src/lib/process-scope-statistics.js.map +1 -1
- package/dist/src/lib/process-verify-rows.js.map +1 -1
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/run.js.map +1 -1
- package/dist/src/lib/supabase-client.js +13 -1
- package/dist/src/lib/supabase-client.js.map +1 -1
- package/dist/src/lib/supabase-data-api-contract.js +328 -0
- package/dist/src/lib/supabase-data-api-contract.js.map +1 -0
- package/dist/src/lib/supabase-data-api-replay.js +69 -0
- package/dist/src/lib/supabase-data-api-replay.js.map +1 -0
- package/dist/src/lib/supabase-json-ordered-write.js +2 -0
- package/dist/src/lib/supabase-json-ordered-write.js.map +1 -1
- package/dist/src/lib/supabase-rest.js +1 -0
- package/dist/src/lib/supabase-rest.js.map +1 -1
- package/dist/src/lib/tidas-sdk-package-validator.js +5 -5
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/dist/src/lib/validation.js.map +1 -1
- package/dist/src/main.js.map +1 -1
- package/package.json +40 -40
- package/dist/scripts/assert-full-coverage.js +0 -77
- package/dist/scripts/assert-full-coverage.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-publish-version.js","sourceRoot":"","sources":["../../../src/lib/flow-publish-version.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { collectImportContentIssues } from './dataset-validate.js';\nimport {\n buildDatasetCommandTransport,\n createDatasetRecord,\n saveDraftDatasetRecord,\n type DatasetCommandTransport,\n} from './dataset-command.js';\nimport { CliError } from './errors.js';\nimport {\n FLOW_SCHEMA_VALIDATOR,\n validateFlowPayload,\n type FlowPayloadValidationIssue,\n type FlowPayloadValidationResult,\n} from './flow-payload-validation.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n type JsonRecord,\n} from './flow-governance.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport { getRuntimeRuleset, resolveRuntimeRuleId } from './runtime-rulesets.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_WORKERS = 4;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst FLOW_PUBLISH_VALIDATOR = `${FLOW_SCHEMA_VALIDATOR}+tiangong/import-content`;\n\ntype FlowPublishMode = 'dry_run' | 'commit';\ntype FlowPublishOperation =\n | 'would_insert'\n | 'would_update_existing'\n | 'insert'\n | 'update_existing'\n | 'update_after_insert_error';\n\ntype FlowPublishFailureReason = {\n validator: 'remote_rest' | 'flow_schema' | 'import_content';\n stage: string;\n path: string;\n message: string;\n code: string;\n visible_user_id?: string;\n visible_state_code?: string;\n};\n\ntype VisibleFlowRow = {\n id: string;\n version: string;\n user_id: string;\n state_code: number | null;\n};\n\ntype SupabaseDataClient = ReturnType<typeof createSupabaseDataClient>['client'];\n\ntype FlowPublishFailureRow = {\n id: unknown;\n user_id: unknown;\n json_ordered: JsonRecord;\n reason: FlowPublishFailureReason[];\n state_code: unknown;\n};\n\ntype FlowPublishSuccessRow = {\n id: string;\n version: string;\n operation: FlowPublishOperation;\n};\n\ntype FlowPublishFiles = {\n successList: string;\n remoteFailed: string;\n gateReport: string;\n report: string;\n};\n\ntype FlowPublishGateFinding = {\n code: string;\n severity: 'blocker';\n methodology_rule_id: string | null;\n message: string;\n path: string;\n dataset_index: number;\n dataset_id: string | null;\n dataset_version: string | null;\n};\n\nexport type FlowPublishVersionGateReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed' | 'blocked';\n ruleset_id: 'flow-publish/default';\n ruleset_version: '1';\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n validator: string;\n counts: {\n total: number;\n valid: number;\n invalid: number;\n };\n findings: FlowPublishGateFinding[];\n blockers: FlowPublishGateFinding[];\n next_action: 'query_remote_write_plan' | 'fix_flow_payloads';\n flows: Array<{\n index: number;\n id: string | null;\n version: string | null;\n ok: boolean;\n issue_count: number;\n issues: FlowPayloadValidationIssue[];\n }>;\n};\n\ntype FlowPublishOutcome =\n | {\n status: 'success';\n success: FlowPublishSuccessRow;\n }\n | {\n status: 'failure';\n failure: FlowPublishFailureRow;\n };\n\nexport type FlowPublishVersionReport = {\n schema_version: 1;\n generated_at_utc: string;\n status:\n | 'prepared_flow_publish_version'\n | 'completed_flow_publish_version'\n | 'completed_flow_publish_version_with_failures';\n mode: FlowPublishMode;\n input_file: string;\n out_dir: string;\n counts: {\n total_rows: number;\n success_count: number;\n failure_count: number;\n };\n flow_gate: {\n status: FlowPublishVersionGateReport['status'];\n ruleset_id: FlowPublishVersionGateReport['ruleset_id'];\n ruleset_version: FlowPublishVersionGateReport['ruleset_version'];\n counts: FlowPublishVersionGateReport['counts'];\n blocker_count: number;\n next_action: FlowPublishVersionGateReport['next_action'];\n };\n operation_counts: Record<string, number>;\n max_workers: number;\n limit: number | null;\n target_user_id_override: string | null;\n files: {\n success_list: string;\n remote_failed: string;\n gate_report: string;\n report: string;\n };\n};\n\nexport type RunFlowPublishVersionOptions = {\n inputFile: string;\n outDir: string;\n commit?: boolean;\n maxWorkers?: number;\n limit?: number;\n targetUserId?: string | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n};\n\nfunction normalize_token(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction assert_input_file(inputFile: string): string {\n const resolved = path.resolve(inputFile);\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_PUBLISH_VERSION_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n if (!existsSync(resolved)) {\n throw new CliError(`Flow publish-version input file not found: ${resolved}`, {\n code: 'FLOW_PUBLISH_VERSION_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_PUBLISH_VERSION_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction to_positive_integer(\n value: number | undefined,\n label: string,\n code: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction to_non_negative_integer(\n value: number | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === undefined) {\n return null;\n }\n if (!Number.isInteger(value) || value < 0) {\n throw new CliError(`Expected ${label} to be a non-negative integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction build_output_files(outDir: string): FlowPublishFiles {\n return {\n successList: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),\n remoteFailed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),\n gateReport: path.join(outDir, 'flow-publish-version-gate-report.json'),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),\n };\n}\n\nfunction flow_payload(row: JsonRecord): JsonRecord {\n if (isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n if (isRecord(row.jsonOrdered)) {\n return row.jsonOrdered;\n }\n if (isRecord(row.json)) {\n return row.json;\n }\n if (isRecord(row.flowDataSet)) {\n return row;\n }\n throw new CliError(\n 'Flow row is missing json_ordered/jsonOrdered/json or a top-level flowDataSet payload.',\n {\n code: 'FLOW_PUBLISH_VERSION_PAYLOAD_REQUIRED',\n exitCode: 2,\n },\n );\n}\n\nfunction flow_id(row: JsonRecord, payload: JsonRecord): string {\n return (\n coerceText(row.id) ||\n coerceText(\n deepGet(payload, ['flowDataSet', 'flowInformation', 'dataSetInformation', 'common:UUID']),\n )\n );\n}\n\nfunction flow_version(payload: JsonRecord): string {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (!version) {\n throw new CliError(\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n {\n code: 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n exitCode: 2,\n },\n );\n }\n return version;\n}\n\nfunction flow_version_gate_result(payload: JsonRecord): {\n version: string | null;\n issue: FlowPayloadValidationIssue | null;\n} {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (version) {\n return { version, issue: null };\n }\n return {\n version: null,\n issue: validation_issue(\n 'flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion',\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n ),\n };\n}\n\nfunction validation_issue(\n pathValue: string,\n message: string,\n code: string,\n): FlowPayloadValidationIssue {\n return {\n path: pathValue,\n message,\n code,\n };\n}\n\nfunction validate_publish_flow_row(\n row: JsonRecord,\n index: number,\n validate: (payload: JsonRecord) => FlowPayloadValidationResult,\n): FlowPublishVersionGateReport['flows'][number] {\n const issues: FlowPayloadValidationIssue[] = [];\n let payload: JsonRecord | null = null;\n let id: string | null = null;\n let version: string | null = null;\n\n try {\n payload = flow_payload(row);\n } catch (error) {\n const cliError = error as CliError;\n issues.push(\n validation_issue('<root>', cliError.message, cliError.code || 'flow_payload_required'),\n );\n }\n\n if (payload) {\n id = flow_id(row, payload) || null;\n if (!id) {\n issues.push(\n validation_issue(\n 'flowDataSet.flowInformation.dataSetInformation.common:UUID',\n 'Flow row is missing a resolvable id/common:UUID value.',\n 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n ),\n );\n }\n\n const versionGate = flow_version_gate_result(payload);\n version = versionGate.version;\n if (versionGate.issue) {\n issues.push(versionGate.issue);\n }\n\n const validation = validate(payload);\n if (!validation.ok) {\n issues.push(...validation.issues);\n }\n issues.push(...collectImportContentIssues(payload));\n }\n\n return {\n index,\n id,\n version,\n ok: issues.length === 0,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction build_flow_publish_gate_report(\n rows: JsonRecord[],\n options: {\n now: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n },\n): FlowPublishVersionGateReport {\n const ruleset = getRuntimeRuleset('flow-publish/default');\n const validate = options.validateFlowPayloadImpl ?? validateFlowPayload;\n const flows = rows.map((row, index) => validate_publish_flow_row(row, index, validate));\n const invalid = flows.filter((flow) => !flow.ok).length;\n const blockers = flows.flatMap((flow) =>\n flow.issues.map((issue) => ({\n code: issue.code,\n severity: 'blocker' as const,\n methodology_rule_id: resolveRuntimeRuleId(ruleset.id, issue.code),\n message: issue.message,\n path: issue.path,\n dataset_index: flow.index,\n dataset_id: flow.id,\n dataset_version: flow.version,\n })),\n );\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n status: invalid > 0 ? 'blocked' : 'passed',\n ruleset_id: ruleset.id,\n ruleset_version: ruleset.version,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n validator: FLOW_PUBLISH_VALIDATOR,\n counts: {\n total: flows.length,\n valid: flows.length - invalid,\n invalid,\n },\n findings: blockers,\n blockers,\n next_action: invalid > 0 ? 'fix_flow_payloads' : 'query_remote_write_plan',\n flows,\n };\n}\n\nfunction flow_gate_summary(\n gate: FlowPublishVersionGateReport,\n): FlowPublishVersionReport['flow_gate'] {\n return {\n status: gate.status,\n ruleset_id: gate.ruleset_id,\n ruleset_version: gate.ruleset_version,\n counts: gate.counts,\n blocker_count: gate.blockers.length,\n next_action: gate.next_action,\n };\n}\n\nfunction gate_failure_rows(\n rows: JsonRecord[],\n gate: FlowPublishVersionGateReport,\n): FlowPublishFailureRow[] {\n return gate.flows.flatMap((flow) => {\n if (flow.ok) {\n return [];\n }\n const row = rows[flow.index];\n if (!row) {\n return [];\n }\n return [\n failure_row(\n row,\n flow.issues.map((issue) => ({\n validator:\n issue.code === 'dataset_import_placeholder_content'\n ? ('import_content' as const)\n : ('flow_schema' as const),\n stage: 'schema_gate',\n path: issue.path,\n message: issue.message,\n code: issue.code,\n })),\n ),\n ];\n });\n}\n\nfunction resolve_target_user_id(\n row: JsonRecord,\n targetUserIdOverride: string | null,\n): string | null {\n return normalize_token(coerceText(row.user_id)) ?? targetUserIdOverride;\n}\n\nfunction build_visible_rows_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction build_update_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nasync function parse_response(response: ResponseLike, url: string): Promise<unknown> {\n const rawText = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n\n if (!response.ok) {\n throw new CliError(`HTTP ${response.status} returned from ${url}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: rawText,\n });\n }\n\n if (!rawText) {\n return null;\n }\n\n if (contentType.includes('application/json')) {\n try {\n return JSON.parse(rawText);\n } catch (error) {\n throw new CliError(`Remote response was not valid JSON for ${url}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n return rawText;\n}\n\nfunction parse_visible_rows(payload: unknown, url: string): VisibleFlowRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: coerceText(item.id),\n version: coerceText(item.version),\n user_id: coerceText(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function visible_exact_rows(options: {\n client: SupabaseDataClient;\n restBaseUrl: string;\n id: string;\n version: string;\n}): Promise<VisibleFlowRow[]> {\n const url = build_visible_rows_url(options.restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n options.client\n .from('flows')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n return parse_visible_rows(payload, url);\n}\n\nfunction own_visible_row(\n rows: VisibleFlowRow[],\n targetUserId: string | null,\n): VisibleFlowRow | null {\n if (!targetUserId) {\n return null;\n }\n return rows.find((row) => row.user_id === targetUserId) ?? null;\n}\n\nfunction visible_conflict_reasons(\n stage: string,\n visibleRows: VisibleFlowRow[],\n targetUserId: string | null,\n): FlowPublishFailureReason[] {\n if (visibleRows.length === 0) {\n return [];\n }\n\n if (!targetUserId) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message:\n 'Exact UUID/version is already visible, but no target user id was available to determine whether the row is writable.',\n code: 'target_user_id_required',\n },\n ];\n }\n\n return visibleRows.map((row) => ({\n validator: 'remote_rest',\n stage,\n path: '',\n message: 'Exact UUID/version is already visible but not writable under the target user.',\n code: 'exact_version_visible_not_owned',\n visible_user_id: row.user_id,\n visible_state_code: row.state_code === null ? '' : String(row.state_code),\n }));\n}\n\nfunction failure_row(\n sourceRow: JsonRecord,\n reasons: FlowPublishFailureReason[],\n): FlowPublishFailureRow {\n let payload: JsonRecord;\n try {\n payload = flow_payload(sourceRow);\n } catch {\n payload = {};\n }\n return {\n id: sourceRow.id,\n user_id: sourceRow.user_id,\n json_ordered: payload,\n reason: reasons,\n state_code: sourceRow.state_code,\n };\n}\n\nfunction build_error_reasons(stage: string, error: unknown): FlowPublishFailureReason[] {\n if (error instanceof CliError) {\n const detailText = typeof error.details === 'string' ? error.details.trim() : error.message;\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: detailText || error.message,\n code: error.code,\n },\n ];\n }\n\n if (error instanceof Error) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: error.message,\n code: error.name || 'Error',\n },\n ];\n }\n\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: String(error),\n code: 'UnknownError',\n },\n ];\n}\n\nasync function insert_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n payload: JsonRecord;\n}): Promise<void> {\n await createDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n payload: options.payload,\n });\n}\n\nasync function update_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n version: string;\n payload: JsonRecord;\n}): Promise<void> {\n await saveDraftDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n version: options.version,\n payload: options.payload,\n });\n}\n\nasync function sync_one_row(options: {\n row: JsonRecord;\n mode: FlowPublishMode;\n client: SupabaseDataClient;\n restBaseUrl: string;\n commandTransport: DatasetCommandTransport;\n targetUserIdOverride: string | null;\n}): Promise<FlowPublishOutcome> {\n try {\n const payload = flow_payload(options.row);\n const rowId = flow_id(options.row, payload);\n if (!rowId) {\n throw new CliError('Flow row is missing a resolvable id/common:UUID value.', {\n code: 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n exitCode: 2,\n });\n }\n const version = flow_version(payload);\n const targetUserId = resolve_target_user_id(options.row, options.targetUserIdOverride);\n const visibleBefore = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownBefore = own_visible_row(visibleBefore, targetUserId);\n\n if (options.mode === 'dry_run') {\n if (ownBefore) {\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('dry_run_preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_insert',\n },\n };\n }\n\n if (ownBefore) {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n try {\n await insert_flow_version({\n transport: options.commandTransport,\n rowId,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'insert',\n },\n };\n } catch (error) {\n const visibleAfter = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownAfter = own_visible_row(visibleAfter, targetUserId);\n if (ownAfter) {\n try {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_after_insert_error',\n },\n };\n } catch (updateError) {\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...build_error_reasons('update_after_insert_error', updateError),\n ]),\n };\n }\n }\n\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...visible_conflict_reasons('post_insert_error_preflight', visibleAfter, targetUserId),\n ]),\n };\n }\n } catch (error) {\n return {\n status: 'failure',\n failure: failure_row(options.row, build_error_reasons('sync_one_unhandled', error)),\n };\n }\n}\n\nasync function map_with_concurrency<T, R>(\n items: T[],\n maxWorkers: number,\n worker: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n const workerCount = Math.min(Math.max(1, maxWorkers), Math.max(items.length, 1));\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (true) {\n const currentIndex = nextIndex;\n nextIndex += 1;\n if (currentIndex >= items.length) {\n return;\n }\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: workerCount }, () => runWorker()));\n return results;\n}\n\nfunction status_from_mode(\n mode: FlowPublishMode,\n failureCount: number,\n): FlowPublishVersionReport['status'] {\n if (mode === 'dry_run') {\n return 'prepared_flow_publish_version';\n }\n return failureCount > 0\n ? 'completed_flow_publish_version_with_failures'\n : 'completed_flow_publish_version';\n}\n\nexport async function runFlowPublishVersion(\n options: RunFlowPublishVersionOptions,\n): Promise<FlowPublishVersionReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const mode: FlowPublishMode = options.commit ? 'commit' : 'dry_run';\n const maxWorkers = to_positive_integer(\n options.maxWorkers,\n '--max-workers',\n 'FLOW_PUBLISH_VERSION_MAX_WORKERS_INVALID',\n DEFAULT_MAX_WORKERS,\n );\n const limit = to_non_negative_integer(\n options.limit,\n '--limit',\n 'FLOW_PUBLISH_VERSION_LIMIT_INVALID',\n );\n const now = options.now ?? new Date();\n const files = build_output_files(outDir);\n\n let rows = loadRowsFromFile(inputFile);\n if (limit !== null && limit > 0) {\n rows = rows.slice(0, limit);\n }\n if (rows.length === 0) {\n throw new CliError(`No rows found in ${inputFile}`, {\n code: 'FLOW_PUBLISH_VERSION_EMPTY_INPUT',\n exitCode: 2,\n });\n }\n\n const flowGate = build_flow_publish_gate_report(rows, {\n now,\n validateFlowPayloadImpl: options.validateFlowPayloadImpl,\n });\n await writeJsonArtifact(files.gateReport, flowGate);\n\n if (flowGate.status === 'blocked') {\n const failures = gate_failure_rows(rows, flowGate);\n await writeJsonArtifact(files.successList, []);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: 0,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: {},\n max_workers: maxWorkers,\n limit,\n target_user_id_override: normalize_token(options.targetUserId ?? null),\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n }\n\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env ?? process.env),\n fetchImpl,\n timeoutMs,\n now,\n });\n const commandTransport = await buildDatasetCommandTransport({\n runtime,\n fetchImpl,\n timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(runtime, fetchImpl, timeoutMs);\n const targetUserIdOverride = normalize_token(options.targetUserId ?? null);\n\n const outcomes = await map_with_concurrency(rows, maxWorkers, async (row) =>\n sync_one_row({\n row,\n mode,\n client,\n restBaseUrl,\n commandTransport,\n targetUserIdOverride,\n }),\n );\n\n const successes: FlowPublishSuccessRow[] = [];\n const failures: FlowPublishFailureRow[] = [];\n const operationCounts: Record<string, number> = {};\n\n for (const outcome of outcomes) {\n if (outcome.status === 'success') {\n successes.push(outcome.success);\n operationCounts[outcome.success.operation] =\n (operationCounts[outcome.success.operation] ?? 0) + 1;\n } else {\n failures.push(outcome.failure);\n }\n }\n\n await writeJsonArtifact(files.successList, successes);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: successes.length,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: operationCounts,\n max_workers: maxWorkers,\n limit,\n target_user_id_override: targetUserIdOverride,\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n to_positive_integer,\n to_non_negative_integer,\n build_output_files,\n flow_payload,\n flow_id,\n flow_version,\n flow_version_gate_result,\n validate_publish_flow_row,\n build_flow_publish_gate_report,\n flow_gate_summary,\n gate_failure_rows,\n sync_one_row,\n resolve_target_user_id,\n build_visible_rows_url,\n build_update_url,\n parse_response,\n parse_visible_rows,\n visible_conflict_reasons,\n failure_row,\n build_error_reasons,\n map_with_concurrency,\n status_from_mode,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"flow-publish-version.js","sourceRoot":"","sources":["../../../src/lib/flow-publish-version.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: flows\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { collectImportContentIssues } from './dataset-validate.js';\nimport {\n buildDatasetCommandTransport,\n createDatasetRecord,\n saveDraftDatasetRecord,\n type DatasetCommandTransport,\n} from './dataset-command.js';\nimport { CliError } from './errors.js';\nimport {\n FLOW_SCHEMA_VALIDATOR,\n validateFlowPayload,\n type FlowPayloadValidationIssue,\n type FlowPayloadValidationResult,\n} from './flow-payload-validation.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n type JsonRecord,\n} from './flow-governance.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport { getRuntimeRuleset, resolveRuntimeRuleId } from './runtime-rulesets.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_WORKERS = 4;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst FLOW_PUBLISH_VALIDATOR = `${FLOW_SCHEMA_VALIDATOR}+tiangong/import-content`;\n\ntype FlowPublishMode = 'dry_run' | 'commit';\ntype FlowPublishOperation =\n | 'would_insert'\n | 'would_update_existing'\n | 'insert'\n | 'update_existing'\n | 'update_after_insert_error';\n\ntype FlowPublishFailureReason = {\n validator: 'remote_rest' | 'flow_schema' | 'import_content';\n stage: string;\n path: string;\n message: string;\n code: string;\n visible_user_id?: string;\n visible_state_code?: string;\n};\n\ntype VisibleFlowRow = {\n id: string;\n version: string;\n user_id: string;\n state_code: number | null;\n};\n\ntype SupabaseDataClient = ReturnType<typeof createSupabaseDataClient>['client'];\n\ntype FlowPublishFailureRow = {\n id: unknown;\n user_id: unknown;\n json_ordered: JsonRecord;\n reason: FlowPublishFailureReason[];\n state_code: unknown;\n};\n\ntype FlowPublishSuccessRow = {\n id: string;\n version: string;\n operation: FlowPublishOperation;\n};\n\ntype FlowPublishFiles = {\n successList: string;\n remoteFailed: string;\n gateReport: string;\n report: string;\n};\n\ntype FlowPublishGateFinding = {\n code: string;\n severity: 'blocker';\n methodology_rule_id: string | null;\n message: string;\n path: string;\n dataset_index: number;\n dataset_id: string | null;\n dataset_version: string | null;\n};\n\nexport type FlowPublishVersionGateReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed' | 'blocked';\n ruleset_id: 'flow-publish/default';\n ruleset_version: '1';\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n validator: string;\n counts: {\n total: number;\n valid: number;\n invalid: number;\n };\n findings: FlowPublishGateFinding[];\n blockers: FlowPublishGateFinding[];\n next_action: 'query_remote_write_plan' | 'fix_flow_payloads';\n flows: Array<{\n index: number;\n id: string | null;\n version: string | null;\n ok: boolean;\n issue_count: number;\n issues: FlowPayloadValidationIssue[];\n }>;\n};\n\ntype FlowPublishOutcome =\n | {\n status: 'success';\n success: FlowPublishSuccessRow;\n }\n | {\n status: 'failure';\n failure: FlowPublishFailureRow;\n };\n\nexport type FlowPublishVersionReport = {\n schema_version: 1;\n generated_at_utc: string;\n status:\n | 'prepared_flow_publish_version'\n | 'completed_flow_publish_version'\n | 'completed_flow_publish_version_with_failures';\n mode: FlowPublishMode;\n input_file: string;\n out_dir: string;\n counts: {\n total_rows: number;\n success_count: number;\n failure_count: number;\n };\n flow_gate: {\n status: FlowPublishVersionGateReport['status'];\n ruleset_id: FlowPublishVersionGateReport['ruleset_id'];\n ruleset_version: FlowPublishVersionGateReport['ruleset_version'];\n counts: FlowPublishVersionGateReport['counts'];\n blocker_count: number;\n next_action: FlowPublishVersionGateReport['next_action'];\n };\n operation_counts: Record<string, number>;\n max_workers: number;\n limit: number | null;\n target_user_id_override: string | null;\n files: {\n success_list: string;\n remote_failed: string;\n gate_report: string;\n report: string;\n };\n};\n\nexport type RunFlowPublishVersionOptions = {\n inputFile: string;\n outDir: string;\n commit?: boolean;\n maxWorkers?: number;\n limit?: number;\n targetUserId?: string | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n};\n\nfunction normalize_token(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction assert_input_file(inputFile: string): string {\n const resolved = path.resolve(inputFile);\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_PUBLISH_VERSION_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n if (!existsSync(resolved)) {\n throw new CliError(`Flow publish-version input file not found: ${resolved}`, {\n code: 'FLOW_PUBLISH_VERSION_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_PUBLISH_VERSION_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction to_positive_integer(\n value: number | undefined,\n label: string,\n code: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction to_non_negative_integer(\n value: number | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === undefined) {\n return null;\n }\n if (!Number.isInteger(value) || value < 0) {\n throw new CliError(`Expected ${label} to be a non-negative integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction build_output_files(outDir: string): FlowPublishFiles {\n return {\n successList: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),\n remoteFailed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),\n gateReport: path.join(outDir, 'flow-publish-version-gate-report.json'),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),\n };\n}\n\nfunction flow_payload(row: JsonRecord): JsonRecord {\n if (isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n if (isRecord(row.jsonOrdered)) {\n return row.jsonOrdered;\n }\n if (isRecord(row.json)) {\n return row.json;\n }\n if (isRecord(row.flowDataSet)) {\n return row;\n }\n throw new CliError(\n 'Flow row is missing json_ordered/jsonOrdered/json or a top-level flowDataSet payload.',\n {\n code: 'FLOW_PUBLISH_VERSION_PAYLOAD_REQUIRED',\n exitCode: 2,\n },\n );\n}\n\nfunction flow_id(row: JsonRecord, payload: JsonRecord): string {\n return (\n coerceText(row.id) ||\n coerceText(\n deepGet(payload, ['flowDataSet', 'flowInformation', 'dataSetInformation', 'common:UUID']),\n )\n );\n}\n\nfunction flow_version(payload: JsonRecord): string {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (!version) {\n throw new CliError(\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n {\n code: 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n exitCode: 2,\n },\n );\n }\n return version;\n}\n\nfunction flow_version_gate_result(payload: JsonRecord): {\n version: string | null;\n issue: FlowPayloadValidationIssue | null;\n} {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (version) {\n return { version, issue: null };\n }\n return {\n version: null,\n issue: validation_issue(\n 'flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion',\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n ),\n };\n}\n\nfunction validation_issue(\n pathValue: string,\n message: string,\n code: string,\n): FlowPayloadValidationIssue {\n return {\n path: pathValue,\n message,\n code,\n };\n}\n\nfunction validate_publish_flow_row(\n row: JsonRecord,\n index: number,\n validate: (payload: JsonRecord) => FlowPayloadValidationResult,\n): FlowPublishVersionGateReport['flows'][number] {\n const issues: FlowPayloadValidationIssue[] = [];\n let payload: JsonRecord | null = null;\n let id: string | null = null;\n let version: string | null = null;\n\n try {\n payload = flow_payload(row);\n } catch (error) {\n const cliError = error as CliError;\n issues.push(\n validation_issue('<root>', cliError.message, cliError.code || 'flow_payload_required'),\n );\n }\n\n if (payload) {\n id = flow_id(row, payload) || null;\n if (!id) {\n issues.push(\n validation_issue(\n 'flowDataSet.flowInformation.dataSetInformation.common:UUID',\n 'Flow row is missing a resolvable id/common:UUID value.',\n 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n ),\n );\n }\n\n const versionGate = flow_version_gate_result(payload);\n version = versionGate.version;\n if (versionGate.issue) {\n issues.push(versionGate.issue);\n }\n\n const validation = validate(payload);\n if (!validation.ok) {\n issues.push(...validation.issues);\n }\n issues.push(...collectImportContentIssues(payload));\n }\n\n return {\n index,\n id,\n version,\n ok: issues.length === 0,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction build_flow_publish_gate_report(\n rows: JsonRecord[],\n options: {\n now: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n },\n): FlowPublishVersionGateReport {\n const ruleset = getRuntimeRuleset('flow-publish/default');\n const validate = options.validateFlowPayloadImpl ?? validateFlowPayload;\n const flows = rows.map((row, index) => validate_publish_flow_row(row, index, validate));\n const invalid = flows.filter((flow) => !flow.ok).length;\n const blockers = flows.flatMap((flow) =>\n flow.issues.map((issue) => ({\n code: issue.code,\n severity: 'blocker' as const,\n methodology_rule_id: resolveRuntimeRuleId(ruleset.id, issue.code),\n message: issue.message,\n path: issue.path,\n dataset_index: flow.index,\n dataset_id: flow.id,\n dataset_version: flow.version,\n })),\n );\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n status: invalid > 0 ? 'blocked' : 'passed',\n ruleset_id: ruleset.id,\n ruleset_version: ruleset.version,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n validator: FLOW_PUBLISH_VALIDATOR,\n counts: {\n total: flows.length,\n valid: flows.length - invalid,\n invalid,\n },\n findings: blockers,\n blockers,\n next_action: invalid > 0 ? 'fix_flow_payloads' : 'query_remote_write_plan',\n flows,\n };\n}\n\nfunction flow_gate_summary(\n gate: FlowPublishVersionGateReport,\n): FlowPublishVersionReport['flow_gate'] {\n return {\n status: gate.status,\n ruleset_id: gate.ruleset_id,\n ruleset_version: gate.ruleset_version,\n counts: gate.counts,\n blocker_count: gate.blockers.length,\n next_action: gate.next_action,\n };\n}\n\nfunction gate_failure_rows(\n rows: JsonRecord[],\n gate: FlowPublishVersionGateReport,\n): FlowPublishFailureRow[] {\n return gate.flows.flatMap((flow) => {\n if (flow.ok) {\n return [];\n }\n const row = rows[flow.index];\n if (!row) {\n return [];\n }\n return [\n failure_row(\n row,\n flow.issues.map((issue) => ({\n validator:\n issue.code === 'dataset_import_placeholder_content'\n ? ('import_content' as const)\n : ('flow_schema' as const),\n stage: 'schema_gate',\n path: issue.path,\n message: issue.message,\n code: issue.code,\n })),\n ),\n ];\n });\n}\n\nfunction resolve_target_user_id(\n row: JsonRecord,\n targetUserIdOverride: string | null,\n): string | null {\n return normalize_token(coerceText(row.user_id)) ?? targetUserIdOverride;\n}\n\nfunction build_visible_rows_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction build_update_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nasync function parse_response(response: ResponseLike, url: string): Promise<unknown> {\n const rawText = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n\n if (!response.ok) {\n throw new CliError(`HTTP ${response.status} returned from ${url}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: rawText,\n });\n }\n\n if (!rawText) {\n return null;\n }\n\n if (contentType.includes('application/json')) {\n try {\n return JSON.parse(rawText);\n } catch (error) {\n throw new CliError(`Remote response was not valid JSON for ${url}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n return rawText;\n}\n\nfunction parse_visible_rows(payload: unknown, url: string): VisibleFlowRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: coerceText(item.id),\n version: coerceText(item.version),\n user_id: coerceText(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function visible_exact_rows(options: {\n client: SupabaseDataClient;\n restBaseUrl: string;\n id: string;\n version: string;\n}): Promise<VisibleFlowRow[]> {\n const url = build_visible_rows_url(options.restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n options.client\n .from('flows')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n return parse_visible_rows(payload, url);\n}\n\nfunction own_visible_row(\n rows: VisibleFlowRow[],\n targetUserId: string | null,\n): VisibleFlowRow | null {\n if (!targetUserId) {\n return null;\n }\n return rows.find((row) => row.user_id === targetUserId) ?? null;\n}\n\nfunction visible_conflict_reasons(\n stage: string,\n visibleRows: VisibleFlowRow[],\n targetUserId: string | null,\n): FlowPublishFailureReason[] {\n if (visibleRows.length === 0) {\n return [];\n }\n\n if (!targetUserId) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message:\n 'Exact UUID/version is already visible, but no target user id was available to determine whether the row is writable.',\n code: 'target_user_id_required',\n },\n ];\n }\n\n return visibleRows.map((row) => ({\n validator: 'remote_rest',\n stage,\n path: '',\n message: 'Exact UUID/version is already visible but not writable under the target user.',\n code: 'exact_version_visible_not_owned',\n visible_user_id: row.user_id,\n visible_state_code: row.state_code === null ? '' : String(row.state_code),\n }));\n}\n\nfunction failure_row(\n sourceRow: JsonRecord,\n reasons: FlowPublishFailureReason[],\n): FlowPublishFailureRow {\n let payload: JsonRecord;\n try {\n payload = flow_payload(sourceRow);\n } catch {\n payload = {};\n }\n return {\n id: sourceRow.id,\n user_id: sourceRow.user_id,\n json_ordered: payload,\n reason: reasons,\n state_code: sourceRow.state_code,\n };\n}\n\nfunction build_error_reasons(stage: string, error: unknown): FlowPublishFailureReason[] {\n if (error instanceof CliError) {\n const detailText = typeof error.details === 'string' ? error.details.trim() : error.message;\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: detailText || error.message,\n code: error.code,\n },\n ];\n }\n\n if (error instanceof Error) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: error.message,\n code: error.name || 'Error',\n },\n ];\n }\n\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: String(error),\n code: 'UnknownError',\n },\n ];\n}\n\nasync function insert_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n payload: JsonRecord;\n}): Promise<void> {\n await createDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n payload: options.payload,\n });\n}\n\nasync function update_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n version: string;\n payload: JsonRecord;\n}): Promise<void> {\n await saveDraftDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n version: options.version,\n payload: options.payload,\n });\n}\n\nasync function sync_one_row(options: {\n row: JsonRecord;\n mode: FlowPublishMode;\n client: SupabaseDataClient;\n restBaseUrl: string;\n commandTransport: DatasetCommandTransport;\n targetUserIdOverride: string | null;\n}): Promise<FlowPublishOutcome> {\n try {\n const payload = flow_payload(options.row);\n const rowId = flow_id(options.row, payload);\n if (!rowId) {\n throw new CliError('Flow row is missing a resolvable id/common:UUID value.', {\n code: 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n exitCode: 2,\n });\n }\n const version = flow_version(payload);\n const targetUserId = resolve_target_user_id(options.row, options.targetUserIdOverride);\n const visibleBefore = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownBefore = own_visible_row(visibleBefore, targetUserId);\n\n if (options.mode === 'dry_run') {\n if (ownBefore) {\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('dry_run_preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_insert',\n },\n };\n }\n\n if (ownBefore) {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n try {\n await insert_flow_version({\n transport: options.commandTransport,\n rowId,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'insert',\n },\n };\n } catch (error) {\n const visibleAfter = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownAfter = own_visible_row(visibleAfter, targetUserId);\n if (ownAfter) {\n try {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_after_insert_error',\n },\n };\n } catch (updateError) {\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...build_error_reasons('update_after_insert_error', updateError),\n ]),\n };\n }\n }\n\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...visible_conflict_reasons('post_insert_error_preflight', visibleAfter, targetUserId),\n ]),\n };\n }\n } catch (error) {\n return {\n status: 'failure',\n failure: failure_row(options.row, build_error_reasons('sync_one_unhandled', error)),\n };\n }\n}\n\nasync function map_with_concurrency<T, R>(\n items: T[],\n maxWorkers: number,\n worker: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n const workerCount = Math.min(Math.max(1, maxWorkers), Math.max(items.length, 1));\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (true) {\n const currentIndex = nextIndex;\n nextIndex += 1;\n if (currentIndex >= items.length) {\n return;\n }\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: workerCount }, () => runWorker()));\n return results;\n}\n\nfunction status_from_mode(\n mode: FlowPublishMode,\n failureCount: number,\n): FlowPublishVersionReport['status'] {\n if (mode === 'dry_run') {\n return 'prepared_flow_publish_version';\n }\n return failureCount > 0\n ? 'completed_flow_publish_version_with_failures'\n : 'completed_flow_publish_version';\n}\n\nexport async function runFlowPublishVersion(\n options: RunFlowPublishVersionOptions,\n): Promise<FlowPublishVersionReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const mode: FlowPublishMode = options.commit ? 'commit' : 'dry_run';\n const maxWorkers = to_positive_integer(\n options.maxWorkers,\n '--max-workers',\n 'FLOW_PUBLISH_VERSION_MAX_WORKERS_INVALID',\n DEFAULT_MAX_WORKERS,\n );\n const limit = to_non_negative_integer(\n options.limit,\n '--limit',\n 'FLOW_PUBLISH_VERSION_LIMIT_INVALID',\n );\n const now = options.now ?? new Date();\n const files = build_output_files(outDir);\n\n let rows = loadRowsFromFile(inputFile);\n if (limit !== null && limit > 0) {\n rows = rows.slice(0, limit);\n }\n if (rows.length === 0) {\n throw new CliError(`No rows found in ${inputFile}`, {\n code: 'FLOW_PUBLISH_VERSION_EMPTY_INPUT',\n exitCode: 2,\n });\n }\n\n const flowGate = build_flow_publish_gate_report(rows, {\n now,\n validateFlowPayloadImpl: options.validateFlowPayloadImpl,\n });\n await writeJsonArtifact(files.gateReport, flowGate);\n\n if (flowGate.status === 'blocked') {\n const failures = gate_failure_rows(rows, flowGate);\n await writeJsonArtifact(files.successList, []);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: 0,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: {},\n max_workers: maxWorkers,\n limit,\n target_user_id_override: normalize_token(options.targetUserId ?? null),\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n }\n\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env ?? process.env),\n fetchImpl,\n timeoutMs,\n now,\n });\n const commandTransport = await buildDatasetCommandTransport({\n runtime,\n fetchImpl,\n timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(runtime, fetchImpl, timeoutMs);\n const targetUserIdOverride = normalize_token(options.targetUserId ?? null);\n\n const outcomes = await map_with_concurrency(rows, maxWorkers, async (row) =>\n sync_one_row({\n row,\n mode,\n client,\n restBaseUrl,\n commandTransport,\n targetUserIdOverride,\n }),\n );\n\n const successes: FlowPublishSuccessRow[] = [];\n const failures: FlowPublishFailureRow[] = [];\n const operationCounts: Record<string, number> = {};\n\n for (const outcome of outcomes) {\n if (outcome.status === 'success') {\n successes.push(outcome.success);\n operationCounts[outcome.success.operation] =\n (operationCounts[outcome.success.operation] ?? 0) + 1;\n } else {\n failures.push(outcome.failure);\n }\n }\n\n await writeJsonArtifact(files.successList, successes);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: successes.length,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: operationCounts,\n max_workers: maxWorkers,\n limit,\n target_user_id_override: targetUserIdOverride,\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n to_positive_integer,\n to_non_negative_integer,\n build_output_files,\n flow_payload,\n flow_id,\n flow_version,\n flow_version_gate_result,\n validate_publish_flow_row,\n build_flow_publish_gate_report,\n flow_gate_summary,\n gate_failure_rows,\n sync_one_row,\n resolve_target_user_id,\n build_visible_rows_url,\n build_update_url,\n parse_response,\n parse_visible_rows,\n visible_conflict_reasons,\n failure_row,\n build_error_reasons,\n map_with_concurrency,\n status_from_mode,\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// data-api-relations: flows
|
|
1
2
|
import { CliError } from './errors.js';
|
|
2
3
|
import { buildSupabaseAuthHeaders, createSupabaseDataClient, runSupabaseArrayQuery, } from './supabase-client.js';
|
|
3
4
|
const TYPE_OF_DATASET_QUERY_PATH = 'json->flowDataSet->modellingAndValidation->LCIMethod->>typeOfDataSet';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-read.js","sourceRoot":"","sources":["../../../src/lib/flow-read.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport {\n buildSupabaseAuthHeaders,\n createSupabaseDataClient,\n runSupabaseArrayQuery,\n type SupabaseDataRuntime,\n} from './supabase-client.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst TYPE_OF_DATASET_QUERY_PATH =\n 'json->flowDataSet->modellingAndValidation->LCIMethod->>typeOfDataSet';\n\nexport type SupabaseFlowRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n modified_at: string | null;\n json: unknown;\n};\n\nexport type FlowListQueryFilters = {\n ids?: string[];\n version?: string | null;\n userId?: string | null;\n stateCodes?: number[];\n typeOfDataset?: string[];\n order?: string | null;\n limit?: number | null;\n offset?: number | null;\n};\n\nexport type SupabaseFlowLookup = {\n row: SupabaseFlowRow;\n sourceUrl: string;\n resolution:\n | 'remote_supabase_exact'\n | 'remote_supabase_latest'\n | 'remote_supabase_latest_fallback';\n};\n\ntype QueryWithUrl = {\n url: URL;\n limit: (count: number) => QueryWithUrl;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction buildHeaders(publishableKey: string, accessToken: string): Record<string, string> {\n return buildSupabaseAuthHeaders(publishableKey, accessToken);\n}\n\nfunction normalizeTokenList(values: readonly string[] | undefined): string[] {\n if (!Array.isArray(values)) {\n return [];\n }\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n for (const value of values) {\n const trimmed = typeof value === 'string' ? value.trim() : '';\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n normalized.push(trimmed);\n seen.add(trimmed);\n }\n return normalized;\n}\n\nfunction normalizeStateCodeList(values: readonly number[] | undefined): number[] {\n if (!Array.isArray(values)) {\n return [];\n }\n\n const seen = new Set<number>();\n const normalized: number[] = [];\n for (const value of values) {\n if (!Number.isInteger(value) || value < 0 || seen.has(value)) {\n continue;\n }\n normalized.push(value);\n seen.add(value);\n }\n return normalized;\n}\n\nfunction buildFlowListUrl(restBaseUrl: string, filters: FlowListQueryFilters): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('select', 'id,version,user_id,state_code,modified_at,json');\n\n const ids = normalizeTokenList(filters.ids);\n if (ids.length === 1) {\n url.searchParams.set('id', `eq.${ids[0]}`);\n } else if (ids.length > 1) {\n url.searchParams.set('id', `in.(${ids.join(',')})`);\n }\n\n if (typeof filters.version === 'string' && filters.version.trim()) {\n url.searchParams.set('version', `eq.${filters.version.trim()}`);\n }\n\n if (typeof filters.userId === 'string' && filters.userId.trim()) {\n url.searchParams.set('user_id', `eq.${filters.userId.trim()}`);\n }\n\n const stateCodes = normalizeStateCodeList(filters.stateCodes);\n if (stateCodes.length === 1) {\n url.searchParams.set('state_code', `eq.${stateCodes[0]}`);\n } else if (stateCodes.length > 1) {\n url.searchParams.set('state_code', `in.(${stateCodes.join(',')})`);\n }\n\n const typeOfDataset = normalizeTokenList(filters.typeOfDataset);\n if (typeOfDataset.length === 1) {\n url.searchParams.set(TYPE_OF_DATASET_QUERY_PATH, `eq.${typeOfDataset[0]}`);\n } else if (typeOfDataset.length > 1) {\n url.searchParams.set(TYPE_OF_DATASET_QUERY_PATH, `in.(${typeOfDataset.join(',')})`);\n }\n\n if (typeof filters.order === 'string' && filters.order.trim()) {\n url.searchParams.set('order', filters.order.trim());\n }\n\n if (Number.isInteger(filters.limit) && (filters.limit as number) > 0) {\n url.searchParams.set('limit', String(filters.limit));\n }\n\n if (Number.isInteger(filters.offset) && (filters.offset as number) >= 0) {\n url.searchParams.set('offset', String(filters.offset));\n }\n\n return url.toString();\n}\n\nfunction parseFlowRows(payload: unknown, url: string): SupabaseFlowRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: typeof item.id === 'string' ? item.id : '',\n version: typeof item.version === 'string' ? item.version : '',\n user_id: typeof item.user_id === 'string' ? item.user_id : null,\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n modified_at: typeof item.modified_at === 'string' ? item.modified_at : null,\n json: item.json,\n };\n });\n}\n\nfunction normalizeSupabaseFlowPayload(payload: unknown, lookupKey: string): JsonObject {\n if (typeof payload === 'string') {\n try {\n const parsed = JSON.parse(payload);\n if (!isRecord(parsed)) {\n throw new CliError(`Supabase REST payload was not a JSON object for ${lookupKey}.`, {\n code: 'SUPABASE_REST_PAYLOAD_INVALID',\n exitCode: 1,\n details: parsed,\n });\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n\n throw new CliError(`Supabase REST payload was not valid JSON for ${lookupKey}.`, {\n code: 'SUPABASE_REST_PAYLOAD_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n if (!isRecord(payload)) {\n throw new CliError(`Supabase REST payload was missing json for ${lookupKey}.`, {\n code: 'SUPABASE_REST_PAYLOAD_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload;\n}\n\nfunction applyOrder<Query extends { order: (column: string, options?: object) => Query }>(\n query: Query,\n orderValue: string | null | undefined,\n): Query {\n const normalizedOrder = typeof orderValue === 'string' ? orderValue.trim() : '';\n if (!normalizedOrder) {\n return query;\n }\n\n let nextQuery = query;\n for (const rawToken of normalizedOrder.split(',')) {\n const token = rawToken.trim();\n if (!token) {\n continue;\n }\n\n const [column, direction, nulls] = token.split('.');\n if (!column) {\n continue;\n }\n\n nextQuery = nextQuery.order(column, {\n ascending: direction !== 'desc',\n nullsFirst: nulls === 'nullsfirst' ? true : nulls === 'nullslast' ? false : undefined,\n });\n }\n\n return nextQuery;\n}\n\nasync function listFlowRows(options: {\n runtime: SupabaseDataRuntime;\n filters: FlowListQueryFilters;\n timeoutMs: number;\n fetchImpl: FetchLike;\n}): Promise<{ rows: SupabaseFlowRow[]; sourceUrl: string }> {\n const { client, restBaseUrl } = createSupabaseDataClient(\n options.runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const sourceUrl = buildFlowListUrl(restBaseUrl, options.filters);\n let query = client.from('flows').select('id,version,user_id,state_code,modified_at,json');\n\n const ids = normalizeTokenList(options.filters.ids);\n if (ids.length === 1) {\n query = query.eq('id', ids[0] as string);\n } else if (ids.length > 1) {\n query = query.filter('id', 'in', `(${ids.join(',')})`);\n }\n\n if (typeof options.filters.version === 'string' && options.filters.version.trim()) {\n query = query.eq('version', options.filters.version.trim());\n }\n\n if (typeof options.filters.userId === 'string' && options.filters.userId.trim()) {\n query = query.eq('user_id', options.filters.userId.trim());\n }\n\n const stateCodes = normalizeStateCodeList(options.filters.stateCodes);\n if (stateCodes.length === 1) {\n query = query.eq('state_code', stateCodes[0] as number);\n } else if (stateCodes.length > 1) {\n query = query.filter('state_code', 'in', `(${stateCodes.join(',')})`);\n }\n\n const typeOfDataset = normalizeTokenList(options.filters.typeOfDataset);\n if (typeOfDataset.length === 1) {\n query = query.filter(TYPE_OF_DATASET_QUERY_PATH, 'eq', typeOfDataset[0] as string);\n } else if (typeOfDataset.length > 1) {\n query = query.filter(TYPE_OF_DATASET_QUERY_PATH, 'in', `(${typeOfDataset.join(',')})`);\n }\n\n query = applyOrder(query, options.filters.order ?? null);\n\n const limit =\n Number.isInteger(options.filters.limit) && (options.filters.limit as number) > 0\n ? (options.filters.limit as number)\n : null;\n const offset =\n Number.isInteger(options.filters.offset) && (options.filters.offset as number) >= 0\n ? (options.filters.offset as number)\n : null;\n\n if (limit !== null && offset !== null) {\n query = query.limit(limit);\n (query as unknown as QueryWithUrl).url.searchParams.set('offset', String(offset));\n } else if (limit !== null) {\n query = query.limit(limit);\n }\n\n const rows = parseFlowRows(await runSupabaseArrayQuery(query, sourceUrl), sourceUrl);\n return { rows, sourceUrl };\n}\n\nfunction buildAmbiguousMatchDetails(rows: SupabaseFlowRow[]): Array<{\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n}> {\n return rows.map((row) => ({\n id: row.id,\n version: row.version,\n user_id: row.user_id,\n state_code: row.state_code,\n }));\n}\n\nfunction latestRowsAreAmbiguous(rows: SupabaseFlowRow[]): boolean {\n return rows.length > 1 && rows[0]?.version === rows[1]?.version;\n}\n\nasync function fetchOneFlowRow(options: {\n runtime: SupabaseDataRuntime;\n id: string;\n version?: string | null;\n userId?: string | null;\n stateCode?: number | null;\n timeoutMs: number;\n fetchImpl: FetchLike;\n fallbackToLatest?: boolean;\n}): Promise<SupabaseFlowLookup | null> {\n const stateCodes =\n Number.isInteger(options.stateCode) && (options.stateCode as number) >= 0\n ? [options.stateCode as number]\n : [];\n const sharedFilters = {\n ids: [options.id],\n userId: options.userId ?? null,\n stateCodes,\n } satisfies FlowListQueryFilters;\n\n if (options.version) {\n const exact = await listFlowRows({\n runtime: options.runtime,\n filters: {\n ...sharedFilters,\n version: options.version,\n order: 'version.desc',\n limit: 2,\n offset: 0,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n\n if (exact.rows.length === 1) {\n return {\n row: exact.rows[0] as SupabaseFlowRow,\n sourceUrl: exact.sourceUrl,\n resolution: 'remote_supabase_exact',\n };\n }\n\n if (exact.rows.length > 1) {\n throw new CliError(\n `Multiple visible flow rows matched ${options.id}@${options.version}. Add a stricter --state-code or --user-id filter.`,\n {\n code: 'FLOW_GET_AMBIGUOUS',\n exitCode: 2,\n details: {\n flow_id: options.id,\n version: options.version,\n matches: buildAmbiguousMatchDetails(exact.rows),\n source_url: exact.sourceUrl,\n },\n },\n );\n }\n\n if (!options.fallbackToLatest) {\n return null;\n }\n }\n\n const latest = await listFlowRows({\n runtime: options.runtime,\n filters: {\n ...sharedFilters,\n order: 'version.desc',\n limit: 2,\n offset: 0,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n\n if (latest.rows.length === 0) {\n return null;\n }\n\n if (latestRowsAreAmbiguous(latest.rows)) {\n throw new CliError(\n `Multiple visible flow rows matched the latest version for ${options.id}. Add a stricter --state-code or --user-id filter.`,\n {\n code: 'FLOW_GET_AMBIGUOUS',\n exitCode: 2,\n details: {\n flow_id: options.id,\n version: latest.rows[0].version,\n matches: buildAmbiguousMatchDetails(latest.rows),\n source_url: latest.sourceUrl,\n },\n },\n );\n }\n\n return {\n row: latest.rows[0] as SupabaseFlowRow,\n sourceUrl: latest.sourceUrl,\n resolution: options.version ? 'remote_supabase_latest_fallback' : 'remote_supabase_latest',\n };\n}\n\nexport {\n buildFlowListUrl,\n buildHeaders,\n buildAmbiguousMatchDetails,\n fetchOneFlowRow,\n latestRowsAreAmbiguous,\n listFlowRows,\n normalizeStateCodeList,\n normalizeSupabaseFlowPayload,\n normalizeTokenList,\n parseFlowRows,\n};\n\nexport const __testInternals = {\n buildFlowListUrl,\n buildHeaders,\n buildAmbiguousMatchDetails,\n latestRowsAreAmbiguous,\n normalizeStateCodeList,\n normalizeSupabaseFlowPayload,\n normalizeTokenList,\n parseFlowRows,\n};\n\nexport type { SupabaseDataRuntime };\n"]}
|
|
1
|
+
{"version":3,"file":"flow-read.js","sourceRoot":"","sources":["../../../src/lib/flow-read.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: flows\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport {\n buildSupabaseAuthHeaders,\n createSupabaseDataClient,\n runSupabaseArrayQuery,\n type SupabaseDataRuntime,\n} from './supabase-client.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst TYPE_OF_DATASET_QUERY_PATH =\n 'json->flowDataSet->modellingAndValidation->LCIMethod->>typeOfDataSet';\n\nexport type SupabaseFlowRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n modified_at: string | null;\n json: unknown;\n};\n\nexport type FlowListQueryFilters = {\n ids?: string[];\n version?: string | null;\n userId?: string | null;\n stateCodes?: number[];\n typeOfDataset?: string[];\n order?: string | null;\n limit?: number | null;\n offset?: number | null;\n};\n\nexport type SupabaseFlowLookup = {\n row: SupabaseFlowRow;\n sourceUrl: string;\n resolution:\n | 'remote_supabase_exact'\n | 'remote_supabase_latest'\n | 'remote_supabase_latest_fallback';\n};\n\ntype QueryWithUrl = {\n url: URL;\n limit: (count: number) => QueryWithUrl;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction buildHeaders(publishableKey: string, accessToken: string): Record<string, string> {\n return buildSupabaseAuthHeaders(publishableKey, accessToken);\n}\n\nfunction normalizeTokenList(values: readonly string[] | undefined): string[] {\n if (!Array.isArray(values)) {\n return [];\n }\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n for (const value of values) {\n const trimmed = typeof value === 'string' ? value.trim() : '';\n if (!trimmed || seen.has(trimmed)) {\n continue;\n }\n normalized.push(trimmed);\n seen.add(trimmed);\n }\n return normalized;\n}\n\nfunction normalizeStateCodeList(values: readonly number[] | undefined): number[] {\n if (!Array.isArray(values)) {\n return [];\n }\n\n const seen = new Set<number>();\n const normalized: number[] = [];\n for (const value of values) {\n if (!Number.isInteger(value) || value < 0 || seen.has(value)) {\n continue;\n }\n normalized.push(value);\n seen.add(value);\n }\n return normalized;\n}\n\nfunction buildFlowListUrl(restBaseUrl: string, filters: FlowListQueryFilters): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('select', 'id,version,user_id,state_code,modified_at,json');\n\n const ids = normalizeTokenList(filters.ids);\n if (ids.length === 1) {\n url.searchParams.set('id', `eq.${ids[0]}`);\n } else if (ids.length > 1) {\n url.searchParams.set('id', `in.(${ids.join(',')})`);\n }\n\n if (typeof filters.version === 'string' && filters.version.trim()) {\n url.searchParams.set('version', `eq.${filters.version.trim()}`);\n }\n\n if (typeof filters.userId === 'string' && filters.userId.trim()) {\n url.searchParams.set('user_id', `eq.${filters.userId.trim()}`);\n }\n\n const stateCodes = normalizeStateCodeList(filters.stateCodes);\n if (stateCodes.length === 1) {\n url.searchParams.set('state_code', `eq.${stateCodes[0]}`);\n } else if (stateCodes.length > 1) {\n url.searchParams.set('state_code', `in.(${stateCodes.join(',')})`);\n }\n\n const typeOfDataset = normalizeTokenList(filters.typeOfDataset);\n if (typeOfDataset.length === 1) {\n url.searchParams.set(TYPE_OF_DATASET_QUERY_PATH, `eq.${typeOfDataset[0]}`);\n } else if (typeOfDataset.length > 1) {\n url.searchParams.set(TYPE_OF_DATASET_QUERY_PATH, `in.(${typeOfDataset.join(',')})`);\n }\n\n if (typeof filters.order === 'string' && filters.order.trim()) {\n url.searchParams.set('order', filters.order.trim());\n }\n\n if (Number.isInteger(filters.limit) && (filters.limit as number) > 0) {\n url.searchParams.set('limit', String(filters.limit));\n }\n\n if (Number.isInteger(filters.offset) && (filters.offset as number) >= 0) {\n url.searchParams.set('offset', String(filters.offset));\n }\n\n return url.toString();\n}\n\nfunction parseFlowRows(payload: unknown, url: string): SupabaseFlowRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: typeof item.id === 'string' ? item.id : '',\n version: typeof item.version === 'string' ? item.version : '',\n user_id: typeof item.user_id === 'string' ? item.user_id : null,\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n modified_at: typeof item.modified_at === 'string' ? item.modified_at : null,\n json: item.json,\n };\n });\n}\n\nfunction normalizeSupabaseFlowPayload(payload: unknown, lookupKey: string): JsonObject {\n if (typeof payload === 'string') {\n try {\n const parsed = JSON.parse(payload);\n if (!isRecord(parsed)) {\n throw new CliError(`Supabase REST payload was not a JSON object for ${lookupKey}.`, {\n code: 'SUPABASE_REST_PAYLOAD_INVALID',\n exitCode: 1,\n details: parsed,\n });\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n\n throw new CliError(`Supabase REST payload was not valid JSON for ${lookupKey}.`, {\n code: 'SUPABASE_REST_PAYLOAD_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n if (!isRecord(payload)) {\n throw new CliError(`Supabase REST payload was missing json for ${lookupKey}.`, {\n code: 'SUPABASE_REST_PAYLOAD_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload;\n}\n\nfunction applyOrder<Query extends { order: (column: string, options?: object) => Query }>(\n query: Query,\n orderValue: string | null | undefined,\n): Query {\n const normalizedOrder = typeof orderValue === 'string' ? orderValue.trim() : '';\n if (!normalizedOrder) {\n return query;\n }\n\n let nextQuery = query;\n for (const rawToken of normalizedOrder.split(',')) {\n const token = rawToken.trim();\n if (!token) {\n continue;\n }\n\n const [column, direction, nulls] = token.split('.');\n if (!column) {\n continue;\n }\n\n nextQuery = nextQuery.order(column, {\n ascending: direction !== 'desc',\n nullsFirst: nulls === 'nullsfirst' ? true : nulls === 'nullslast' ? false : undefined,\n });\n }\n\n return nextQuery;\n}\n\nasync function listFlowRows(options: {\n runtime: SupabaseDataRuntime;\n filters: FlowListQueryFilters;\n timeoutMs: number;\n fetchImpl: FetchLike;\n}): Promise<{ rows: SupabaseFlowRow[]; sourceUrl: string }> {\n const { client, restBaseUrl } = createSupabaseDataClient(\n options.runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const sourceUrl = buildFlowListUrl(restBaseUrl, options.filters);\n let query = client.from('flows').select('id,version,user_id,state_code,modified_at,json');\n\n const ids = normalizeTokenList(options.filters.ids);\n if (ids.length === 1) {\n query = query.eq('id', ids[0] as string);\n } else if (ids.length > 1) {\n query = query.filter('id', 'in', `(${ids.join(',')})`);\n }\n\n if (typeof options.filters.version === 'string' && options.filters.version.trim()) {\n query = query.eq('version', options.filters.version.trim());\n }\n\n if (typeof options.filters.userId === 'string' && options.filters.userId.trim()) {\n query = query.eq('user_id', options.filters.userId.trim());\n }\n\n const stateCodes = normalizeStateCodeList(options.filters.stateCodes);\n if (stateCodes.length === 1) {\n query = query.eq('state_code', stateCodes[0] as number);\n } else if (stateCodes.length > 1) {\n query = query.filter('state_code', 'in', `(${stateCodes.join(',')})`);\n }\n\n const typeOfDataset = normalizeTokenList(options.filters.typeOfDataset);\n if (typeOfDataset.length === 1) {\n query = query.filter(TYPE_OF_DATASET_QUERY_PATH, 'eq', typeOfDataset[0] as string);\n } else if (typeOfDataset.length > 1) {\n query = query.filter(TYPE_OF_DATASET_QUERY_PATH, 'in', `(${typeOfDataset.join(',')})`);\n }\n\n query = applyOrder(query, options.filters.order ?? null);\n\n const limit =\n Number.isInteger(options.filters.limit) && (options.filters.limit as number) > 0\n ? (options.filters.limit as number)\n : null;\n const offset =\n Number.isInteger(options.filters.offset) && (options.filters.offset as number) >= 0\n ? (options.filters.offset as number)\n : null;\n\n if (limit !== null && offset !== null) {\n query = query.limit(limit);\n (query as unknown as QueryWithUrl).url.searchParams.set('offset', String(offset));\n } else if (limit !== null) {\n query = query.limit(limit);\n }\n\n const rows = parseFlowRows(await runSupabaseArrayQuery(query, sourceUrl), sourceUrl);\n return { rows, sourceUrl };\n}\n\nfunction buildAmbiguousMatchDetails(rows: SupabaseFlowRow[]): Array<{\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n}> {\n return rows.map((row) => ({\n id: row.id,\n version: row.version,\n user_id: row.user_id,\n state_code: row.state_code,\n }));\n}\n\nfunction latestRowsAreAmbiguous(rows: SupabaseFlowRow[]): boolean {\n return rows.length > 1 && rows[0]?.version === rows[1]?.version;\n}\n\nasync function fetchOneFlowRow(options: {\n runtime: SupabaseDataRuntime;\n id: string;\n version?: string | null;\n userId?: string | null;\n stateCode?: number | null;\n timeoutMs: number;\n fetchImpl: FetchLike;\n fallbackToLatest?: boolean;\n}): Promise<SupabaseFlowLookup | null> {\n const stateCodes =\n Number.isInteger(options.stateCode) && (options.stateCode as number) >= 0\n ? [options.stateCode as number]\n : [];\n const sharedFilters = {\n ids: [options.id],\n userId: options.userId ?? null,\n stateCodes,\n } satisfies FlowListQueryFilters;\n\n if (options.version) {\n const exact = await listFlowRows({\n runtime: options.runtime,\n filters: {\n ...sharedFilters,\n version: options.version,\n order: 'version.desc',\n limit: 2,\n offset: 0,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n\n if (exact.rows.length === 1) {\n return {\n row: exact.rows[0] as SupabaseFlowRow,\n sourceUrl: exact.sourceUrl,\n resolution: 'remote_supabase_exact',\n };\n }\n\n if (exact.rows.length > 1) {\n throw new CliError(\n `Multiple visible flow rows matched ${options.id}@${options.version}. Add a stricter --state-code or --user-id filter.`,\n {\n code: 'FLOW_GET_AMBIGUOUS',\n exitCode: 2,\n details: {\n flow_id: options.id,\n version: options.version,\n matches: buildAmbiguousMatchDetails(exact.rows),\n source_url: exact.sourceUrl,\n },\n },\n );\n }\n\n if (!options.fallbackToLatest) {\n return null;\n }\n }\n\n const latest = await listFlowRows({\n runtime: options.runtime,\n filters: {\n ...sharedFilters,\n order: 'version.desc',\n limit: 2,\n offset: 0,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n\n if (latest.rows.length === 0) {\n return null;\n }\n\n if (latestRowsAreAmbiguous(latest.rows)) {\n throw new CliError(\n `Multiple visible flow rows matched the latest version for ${options.id}. Add a stricter --state-code or --user-id filter.`,\n {\n code: 'FLOW_GET_AMBIGUOUS',\n exitCode: 2,\n details: {\n flow_id: options.id,\n version: latest.rows[0].version,\n matches: buildAmbiguousMatchDetails(latest.rows),\n source_url: latest.sourceUrl,\n },\n },\n );\n }\n\n return {\n row: latest.rows[0] as SupabaseFlowRow,\n sourceUrl: latest.sourceUrl,\n resolution: options.version ? 'remote_supabase_latest_fallback' : 'remote_supabase_latest',\n };\n}\n\nexport {\n buildFlowListUrl,\n buildHeaders,\n buildAmbiguousMatchDetails,\n fetchOneFlowRow,\n latestRowsAreAmbiguous,\n listFlowRows,\n normalizeStateCodeList,\n normalizeSupabaseFlowPayload,\n normalizeTokenList,\n parseFlowRows,\n};\n\nexport const __testInternals = {\n buildFlowListUrl,\n buildHeaders,\n buildAmbiguousMatchDetails,\n latestRowsAreAmbiguous,\n normalizeStateCodeList,\n normalizeSupabaseFlowPayload,\n normalizeTokenList,\n parseFlowRows,\n};\n\nexport type { SupabaseDataRuntime };\n"]}
|