@tiangong-lca/cli 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"process-save-draft.js","sourceRoot":"","sources":["../../../src/lib/process-save-draft.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EACL,6BAA6B,GAE9B,MAAM,kCAAkC,CAAC;AAI1C,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,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,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAoCD,SAAS,mBAAmB,CAAC,WAAmB,EAAE,EAAU,EAAE,OAAe;IAC3E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;IACrE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;IAChE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB,EAAE,GAAW;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAAC,mDAAmD,GAAG,EAAE,EAAE;YAC3E,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAAC,qBAAqB,KAAK,8BAA8B,GAAG,EAAE,EAAE;gBAChF,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;YAC5B,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACtC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;YAChC,UAAU,EAAE,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;SACzE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAM/B;IAMC,MAAM,OAAO,GAAG,yBAAyB,CAAC;QACxC,OAAO,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC;QAChD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,wBAAwB,CACtD,OAAO,EACP,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,CAClB,CAAC;IACF,MAAM,GAAG,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,qBAAqB,CACzC,MAAM;SACH,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,+BAA+B,CAAC;SACvC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;SACpB,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EACjC,GAAG,CACJ,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC;QACpC,WAAW;QACX,WAAW,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE;QAC3C,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAyB;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1D,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAyB,EACzB,YAA2B;IAE3B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,YAAY,CAAC,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,OAAO,GAAG,4BAA4B,CAAC,WAAW,CAAC,eAAe,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAM5B;IACC,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;QAC5B,GAAG;QACH,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC;QAC9E,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;YAC9E,IAAI,EAAE,4CAA4C;YAClD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,8BAA8B,CAAC,OAGvC;IACC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,IAAI,QAAQ,CAChB,kCAAkC,OAAO,CAAC,YAAY,yCAAyC,OAAO,CAAC,aAAa,GAAG,EACvH;YACE,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,cAAc,EAAE,OAAO,CAAC,YAAY;gBACpC,eAAe,EAAE,OAAO,CAAC,aAAa;aACvC;SACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B,CACtC,EAAU,EACV,OAAe,EACf,IAAyB;IAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnC,MAAM,SAAS,GACb,UAAU,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,EAAE,UAAU,KAAK,SAAS;QACrE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,UAAU,EAAE,OAAO,IAAI,SAAS,CAAC;IAEtD,OAAO,IAAI,QAAQ,CACjB,WAAW,EAAE,IAAI,OAAO,iHAAiH,SAAS,mBAAmB,YAAY,IAAI,EACrL;QACE,IAAI,EAAE,oDAAoD;QAC1D,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE;YACP,EAAE;YACF,OAAO;YACP,YAAY,EAAE,IAAI;SACnB;KACF,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAWxB;IACC,MAAM,UAAU,GAAG,wBAAwB,CAAC;QAC1C,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,wBAAwB;KAC/B,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,sBAAsB,CACpC,MAAM,QAAQ,CAAC;QACb,GAAG;QACH,OAAO,EAAE,0BAA0B,CACjC;YACE,GAAG,wBAAwB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC;YACxE,cAAc,EAAE,kBAAkB;SACnC,EACD,UAAU,EACV,MAAM,CACP;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,OAAO,CAAC,EAAE;YAChB,SAAS,EAAE,OAAO,CAAC,OAAO;YAC1B,cAAc,EAAE,OAAO,CAAC,OAAO;YAC/B,UAAU,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YACnC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;SAC/B;QACD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,EACF,GAAG,CACJ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,QAAQ,CAAC,6DAA6D,GAAG,EAAE,EAAE;YACrF,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAoC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA2C;IAE3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;QACrC,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS;KACV,CAAC,CAAC;IACH,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS;YACT,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QACH,8BAA8B,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,+BAA+B,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,6BAA6B,CAAC;YACnC,KAAK,EAAE,WAAW;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,wBAAwB;YACnC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,YAAY;QACvB,UAAU,EAAE,wBAAwB;QACpC,UAAU,EAAE,MAAM,SAAS,CAAC;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS;YACT,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACF,WAAW,EAAE,QAAQ;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,wBAAwB;IACxB,8BAA8B;IAC9B,+BAA+B;CAChC,CAAC","sourcesContent":["// data-api-relations: processes\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { getJson, postJson, requireRemoteOkPayload } from './http.js';\nimport {\n buildSupabaseAuthHeaders,\n createSupabaseDataClient,\n deriveSupabaseProjectBaseUrl,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedWriteResult,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nexport type VisibleProcessRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n};\n\nexport type ProcessSaveDraftRpcResult = {\n ok: true;\n [key: string]: unknown;\n};\n\nexport type ProcessStateAwareWriteResult =\n | SupabaseJsonOrderedWriteResult\n | {\n status: 'success';\n operation: 'save_draft';\n write_path: 'cmd_dataset_save_draft';\n rpc_result: ProcessSaveDraftRpcResult;\n visible_row: VisibleProcessRow;\n };\n\nexport type SyncStateAwareProcessRecordOptions = {\n id: string;\n version: string;\n payload: JsonObject;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n audit?: JsonObject;\n modelId?: string | null;\n targetUserId?: string | null;\n};\n\nfunction buildVisibleRowsUrl(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/processes`);\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 parseVisibleRows(payload: unknown, url: string): VisibleProcessRow[] {\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: trimToken(item.id) ?? '',\n version: trimToken(item.version) ?? '',\n user_id: trimToken(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function exactVisibleRows(options: {\n id: string;\n version: string;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n}): Promise<{\n rows: VisibleProcessRow[];\n restBaseUrl: string;\n accessToken: string;\n publishableKey: string;\n}> {\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env),\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(\n runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const url = buildVisibleRowsUrl(restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n client\n .from('processes')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n\n return {\n rows: parseVisibleRows(payload, url),\n restBaseUrl,\n accessToken: await runtime.getAccessToken(),\n publishableKey: runtime.publishableKey,\n };\n}\n\nfunction visibleDraftRow(rows: VisibleProcessRow[]): VisibleProcessRow | null {\n return rows.find((row) => row.state_code === 0) ?? null;\n}\n\nfunction visibleDraftRowForTarget(\n rows: VisibleProcessRow[],\n targetUserId: string | null,\n): VisibleProcessRow | null {\n if (!targetUserId) {\n return visibleDraftRow(rows);\n }\n return rows.find((row) => row.state_code === 0 && row.user_id === targetUserId) ?? null;\n}\n\nfunction buildCurrentUserUrl(restBaseUrl: string): string {\n return `${deriveSupabaseProjectBaseUrl(restBaseUrl)}/auth/v1/user`;\n}\n\nasync function currentUserId(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n timeoutMs: number;\n fetchImpl: FetchLike;\n}): Promise<string> {\n const url = buildCurrentUserUrl(options.restBaseUrl);\n const payload = await getJson({\n url,\n headers: buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n const userId = isRecord(payload) ? trimToken(payload.id) : null;\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_SAVE_DRAFT_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n return userId;\n}\n\nfunction assertTargetUserMatchesCurrent(options: {\n targetUserId: string | null;\n currentUserId: string;\n}): void {\n if (!options.targetUserId) {\n return;\n }\n if (options.currentUserId !== options.targetUserId) {\n throw new CliError(\n `Process save-draft target user ${options.targetUserId} does not match current CLI auth user ${options.currentUserId}.`,\n {\n code: 'PROCESS_SAVE_DRAFT_TARGET_USER_MISMATCH',\n exitCode: 1,\n details: {\n target_user_id: options.targetUserId,\n current_user_id: options.currentUserId,\n },\n },\n );\n }\n}\n\nfunction buildUnsupportedVisibleRowError(\n id: string,\n version: string,\n rows: VisibleProcessRow[],\n): CliError {\n const primaryRow = rows[0] ?? null;\n const stateCode =\n primaryRow?.state_code === null || primaryRow?.state_code === undefined\n ? 'unknown'\n : String(primaryRow.state_code);\n const visibleOwner = primaryRow?.user_id ?? 'unknown';\n\n return new CliError(\n `Process ${id}@${version} is already visible but cannot use save-draft because the visible row is not a current-user draft (state_code=${stateCode}, visible_owner=${visibleOwner}).`,\n {\n code: 'PUBLISH_PROCESS_SAVE_DRAFT_UNSUPPORTED_VISIBLE_ROW',\n exitCode: 1,\n details: {\n id,\n version,\n visible_rows: rows,\n },\n },\n );\n}\n\nasync function saveDraft(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n id: string;\n version: string;\n payload: JsonObject;\n timeoutMs: number;\n fetchImpl: FetchLike;\n audit?: JsonObject;\n modelId?: string | null;\n}): Promise<ProcessSaveDraftRpcResult> {\n const capability = resolveDataApiCapability({\n kind: 'rpc',\n name: 'cmd_dataset_save_draft',\n });\n const url = buildDataApiUrl(options.restBaseUrl, capability);\n const payload = requireRemoteOkPayload(\n await postJson({\n url,\n headers: applyDataApiProfileHeaders(\n {\n ...buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n 'Content-Type': 'application/json',\n },\n capability,\n 'POST',\n ),\n body: {\n p_table: 'processes',\n p_id: options.id,\n p_version: options.version,\n p_json_ordered: options.payload,\n p_model_id: options.modelId ?? null,\n p_audit: options.audit ?? null,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n }),\n url,\n );\n\n if (!isRecord(payload) || payload.ok !== true) {\n throw new CliError(`Process save-draft RPC returned an unexpected payload for ${url}`, {\n code: 'REMOTE_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload as ProcessSaveDraftRpcResult;\n}\n\nexport async function syncStateAwareProcessRecord(\n options: SyncStateAwareProcessRecordOptions,\n): Promise<ProcessStateAwareWriteResult> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const targetUserId = trimToken(options.targetUserId);\n const visible = await exactVisibleRows({\n id: options.id,\n version: options.version,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n if (targetUserId) {\n const userId = await currentUserId({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n assertTargetUserMatchesCurrent({ targetUserId, currentUserId: userId });\n }\n\n const draftRow = visibleDraftRowForTarget(visible.rows, targetUserId);\n\n if (!draftRow) {\n if (visible.rows.length > 0) {\n throw buildUnsupportedVisibleRowError(options.id, options.version, visible.rows);\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: 'processes',\n id: options.id,\n version: options.version,\n payload: options.payload,\n writeMode: 'upsert_current_version',\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n }\n\n return {\n status: 'success',\n operation: 'save_draft',\n write_path: 'cmd_dataset_save_draft',\n rpc_result: await saveDraft({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n id: options.id,\n version: options.version,\n payload: options.payload,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n audit: options.audit,\n modelId: options.modelId,\n }),\n visible_row: draftRow,\n };\n}\n\nexport const __testInternals = {\n buildVisibleRowsUrl,\n buildCurrentUserUrl,\n parseVisibleRows,\n visibleDraftRow,\n visibleDraftRowForTarget,\n assertTargetUserMatchesCurrent,\n buildUnsupportedVisibleRowError,\n};\n"]}
1
+ {"version":3,"file":"process-save-draft.js","sourceRoot":"","sources":["../../../src/lib/process-save-draft.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: processes\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { getJson, postJson, requireRemoteOkPayload } from './http.js';\nimport {\n buildSupabaseAuthHeaders,\n createSupabaseDataClient,\n deriveSupabaseProjectBaseUrl,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedWriteResult,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nexport type VisibleProcessRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n};\n\nexport type ProcessSaveDraftRpcResult = {\n ok: true;\n [key: string]: unknown;\n};\n\nexport type ProcessStateAwareWriteResult =\n | SupabaseJsonOrderedWriteResult\n | {\n status: 'success';\n operation: 'save_draft';\n write_path: 'cmd_dataset_save_draft';\n rpc_result: ProcessSaveDraftRpcResult;\n visible_row: VisibleProcessRow;\n };\n\nexport type SyncStateAwareProcessRecordOptions = {\n id: string;\n version: string;\n payload: JsonObject;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n audit?: JsonObject;\n modelId?: string | null;\n modelVersion?: string | null;\n targetUserId?: string | null;\n};\n\nfunction buildVisibleRowsUrl(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/processes`);\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 parseVisibleRows(payload: unknown, url: string): VisibleProcessRow[] {\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: trimToken(item.id) ?? '',\n version: trimToken(item.version) ?? '',\n user_id: trimToken(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function exactVisibleRows(options: {\n id: string;\n version: string;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n}): Promise<{\n rows: VisibleProcessRow[];\n restBaseUrl: string;\n accessToken: string;\n publishableKey: string;\n}> {\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env),\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(\n runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const url = buildVisibleRowsUrl(restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n client\n .from('processes')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n\n return {\n rows: parseVisibleRows(payload, url),\n restBaseUrl,\n accessToken: await runtime.getAccessToken(),\n publishableKey: runtime.publishableKey,\n };\n}\n\nfunction visibleDraftRow(rows: VisibleProcessRow[]): VisibleProcessRow | null {\n return rows.find((row) => row.state_code === 0) ?? null;\n}\n\nfunction visibleDraftRowForTarget(\n rows: VisibleProcessRow[],\n targetUserId: string | null,\n): VisibleProcessRow | null {\n if (!targetUserId) {\n return visibleDraftRow(rows);\n }\n return rows.find((row) => row.state_code === 0 && row.user_id === targetUserId) ?? null;\n}\n\nfunction buildCurrentUserUrl(restBaseUrl: string): string {\n return `${deriveSupabaseProjectBaseUrl(restBaseUrl)}/auth/v1/user`;\n}\n\nasync function currentUserId(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n timeoutMs: number;\n fetchImpl: FetchLike;\n}): Promise<string> {\n const url = buildCurrentUserUrl(options.restBaseUrl);\n const payload = await getJson({\n url,\n headers: buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n const userId = isRecord(payload) ? trimToken(payload.id) : null;\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_SAVE_DRAFT_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n return userId;\n}\n\nfunction assertTargetUserMatchesCurrent(options: {\n targetUserId: string | null;\n currentUserId: string;\n}): void {\n if (!options.targetUserId) {\n return;\n }\n if (options.currentUserId !== options.targetUserId) {\n throw new CliError(\n `Process save-draft target user ${options.targetUserId} does not match current CLI auth user ${options.currentUserId}.`,\n {\n code: 'PROCESS_SAVE_DRAFT_TARGET_USER_MISMATCH',\n exitCode: 1,\n details: {\n target_user_id: options.targetUserId,\n current_user_id: options.currentUserId,\n },\n },\n );\n }\n}\n\nfunction buildUnsupportedVisibleRowError(\n id: string,\n version: string,\n rows: VisibleProcessRow[],\n): CliError {\n const primaryRow = rows[0] ?? null;\n const stateCode =\n primaryRow?.state_code === null || primaryRow?.state_code === undefined\n ? 'unknown'\n : String(primaryRow.state_code);\n const visibleOwner = primaryRow?.user_id ?? 'unknown';\n\n return new CliError(\n `Process ${id}@${version} is already visible but cannot use save-draft because the visible row is not a current-user draft (state_code=${stateCode}, visible_owner=${visibleOwner}).`,\n {\n code: 'PUBLISH_PROCESS_SAVE_DRAFT_UNSUPPORTED_VISIBLE_ROW',\n exitCode: 1,\n details: {\n id,\n version,\n visible_rows: rows,\n },\n },\n );\n}\n\nasync function saveDraft(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n id: string;\n version: string;\n payload: JsonObject;\n timeoutMs: number;\n fetchImpl: FetchLike;\n audit?: JsonObject;\n modelId?: string | null;\n modelVersion?: string | null;\n}): Promise<ProcessSaveDraftRpcResult> {\n const capability = resolveDataApiCapability({\n kind: 'rpc',\n name: 'cmd_dataset_save_draft',\n });\n const url = buildDataApiUrl(options.restBaseUrl, capability);\n const payload = requireRemoteOkPayload(\n await postJson({\n url,\n headers: applyDataApiProfileHeaders(\n {\n ...buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n 'Content-Type': 'application/json',\n },\n capability,\n 'POST',\n ),\n body: {\n p_table: 'processes',\n p_id: options.id,\n p_version: options.version,\n p_json_ordered: options.payload,\n p_model_id: options.modelId ?? null,\n p_model_version: options.modelVersion ?? null,\n p_audit: options.audit ?? null,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n }),\n url,\n );\n\n if (!isRecord(payload) || payload.ok !== true) {\n throw new CliError(`Process save-draft RPC returned an unexpected payload for ${url}`, {\n code: 'REMOTE_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload as ProcessSaveDraftRpcResult;\n}\n\nexport async function syncStateAwareProcessRecord(\n options: SyncStateAwareProcessRecordOptions,\n): Promise<ProcessStateAwareWriteResult> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const targetUserId = trimToken(options.targetUserId);\n const visible = await exactVisibleRows({\n id: options.id,\n version: options.version,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n if (targetUserId) {\n const userId = await currentUserId({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n assertTargetUserMatchesCurrent({ targetUserId, currentUserId: userId });\n }\n\n const draftRow = visibleDraftRowForTarget(visible.rows, targetUserId);\n\n if (!draftRow) {\n if (visible.rows.length > 0) {\n throw buildUnsupportedVisibleRowError(options.id, options.version, visible.rows);\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: 'processes',\n id: options.id,\n version: options.version,\n payload: options.payload,\n writeMode: 'upsert_current_version',\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n extraData:\n options.modelId !== undefined || options.modelVersion !== undefined\n ? {\n modelId: options.modelId ?? null,\n modelVersion: options.modelVersion ?? null,\n }\n : undefined,\n });\n }\n\n return {\n status: 'success',\n operation: 'save_draft',\n write_path: 'cmd_dataset_save_draft',\n rpc_result: await saveDraft({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n id: options.id,\n version: options.version,\n payload: options.payload,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n audit: options.audit,\n modelId: options.modelId,\n modelVersion: options.modelVersion,\n }),\n visible_row: draftRow,\n };\n}\n\nexport const __testInternals = {\n buildVisibleRowsUrl,\n buildCurrentUserUrl,\n parseVisibleRows,\n visibleDraftRow,\n visibleDraftRowForTarget,\n assertTargetUserMatchesCurrent,\n buildUnsupportedVisibleRowError,\n};\n"]}
@@ -70,10 +70,15 @@ export type DatasetPublishExecutorArgs = {
70
70
  version: string;
71
71
  payload: JsonObject;
72
72
  metadata?: LifecyclemodelPublishMetadata | null;
73
+ processModel?: ProcessModelReference;
73
74
  source: 'bundle' | 'input';
74
75
  bundle_path: string | null;
75
76
  publish: PublishRequest['publish'];
76
77
  };
78
+ export type ProcessModelReference = {
79
+ modelId: string;
80
+ modelVersion: string | null;
81
+ };
77
82
  export type ProcessBuildRunPublishExecutorArgs = {
78
83
  run_id: string;
79
84
  entry: PublishProcessBuildRunEntry;
@@ -96,6 +101,8 @@ export type PublishDatasetReport = {
96
101
  source: 'bundle' | 'input';
97
102
  bundle_path: string | null;
98
103
  reason?: string;
104
+ model_id?: string;
105
+ model_version?: string | null;
99
106
  validation?: ProcessPayloadValidationResult;
100
107
  execution?: unknown;
101
108
  error?: {
@@ -162,6 +162,9 @@ function extract_source_identity(payload) {
162
162
  }
163
163
  function load_dataset_entry(entry, baseDir) {
164
164
  const source = load_dataset_entry_source(entry, baseDir);
165
+ return unwrap_dataset_entry_source(source);
166
+ }
167
+ function unwrap_dataset_entry_source(source) {
165
168
  if (isRecord(source)) {
166
169
  for (const key of ['json_ordered', 'jsonOrdered', 'payload']) {
167
170
  const candidate = source[key];
@@ -218,6 +221,86 @@ function load_lifecyclemodel_publish_entry(entry, baseDir) {
218
221
  metadata: Object.keys(metadata).length > 0 ? metadata : null,
219
222
  };
220
223
  }
224
+ function read_optional_string_field(source, keys) {
225
+ for (const key of keys) {
226
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
227
+ return {
228
+ present: true,
229
+ value: first_non_empty(source[key]),
230
+ };
231
+ }
232
+ }
233
+ return { present: false, value: null };
234
+ }
235
+ function process_model_reference_candidate(options) {
236
+ if (!options.source) {
237
+ return { present: false, reference: null };
238
+ }
239
+ const modelId = read_optional_string_field(options.source, options.idKeys);
240
+ const modelVersion = read_optional_string_field(options.source, options.versionKeys);
241
+ if (!modelId.present && !modelVersion.present) {
242
+ return { present: false, reference: null };
243
+ }
244
+ if (modelVersion.value && !modelId.value) {
245
+ throw new CliError('Process modelVersion requires modelId.', {
246
+ code: 'PUBLISH_PROCESS_MODEL_ID_REQUIRED',
247
+ exitCode: 2,
248
+ details: {
249
+ model_version: modelVersion.value,
250
+ },
251
+ });
252
+ }
253
+ return {
254
+ present: true,
255
+ reference: modelId.value
256
+ ? {
257
+ modelId: modelId.value,
258
+ modelVersion: modelVersion.value,
259
+ }
260
+ : null,
261
+ };
262
+ }
263
+ function resolve_process_model_reference(source, payload) {
264
+ const payloadRoot = isRecord(payload.processDataSet) ? payload.processDataSet : payload;
265
+ const processInformation = isRecord(payloadRoot.processInformation)
266
+ ? payloadRoot.processInformation
267
+ : null;
268
+ const dataSetInformation = processInformation && isRecord(processInformation.dataSetInformation)
269
+ ? processInformation.dataSetInformation
270
+ : null;
271
+ const generatedFromLifecycleModel = dataSetInformation && isRecord(dataSetInformation.generatedFromLifecycleModel)
272
+ ? dataSetInformation.generatedFromLifecycleModel
273
+ : null;
274
+ const candidateOptions = [
275
+ {
276
+ source,
277
+ idKeys: ['modelId', 'model_id'],
278
+ versionKeys: ['modelVersion', 'model_version'],
279
+ },
280
+ {
281
+ source: isRecord(source.metadata) ? source.metadata : null,
282
+ idKeys: ['generated_from_lifecyclemodel_id'],
283
+ versionKeys: ['generated_from_lifecyclemodel_version'],
284
+ },
285
+ {
286
+ source: isRecord(payload.projectionMetadata) ? payload.projectionMetadata : null,
287
+ idKeys: ['generated_from_lifecyclemodel_id'],
288
+ versionKeys: ['generated_from_lifecyclemodel_version'],
289
+ },
290
+ {
291
+ source: generatedFromLifecycleModel,
292
+ idKeys: ['id'],
293
+ versionKeys: ['version'],
294
+ },
295
+ ];
296
+ for (const candidateOptionsEntry of candidateOptions) {
297
+ const candidate = process_model_reference_candidate(candidateOptionsEntry);
298
+ if (candidate.present) {
299
+ return candidate.reference;
300
+ }
301
+ }
302
+ return null;
303
+ }
221
304
  function push_collected_entries(target, entries, origin) {
222
305
  for (const entry of entries) {
223
306
  target.push({ entry: entry, origin });
@@ -320,7 +403,7 @@ async function maybe_execute_dataset(report, payload, options) {
320
403
  return report;
321
404
  }
322
405
  try {
323
- report.execution = await options.executor({
406
+ const executorArgs = {
324
407
  table: options.table,
325
408
  id: report.id,
326
409
  version: report.version,
@@ -329,7 +412,11 @@ async function maybe_execute_dataset(report, payload, options) {
329
412
  source: report.source,
330
413
  bundle_path: report.bundle_path,
331
414
  publish: options.publish,
332
- });
415
+ };
416
+ if (options.processModel) {
417
+ executorArgs.processModel = options.processModel;
418
+ }
419
+ report.execution = await options.executor(executorArgs);
333
420
  report.status = 'executed';
334
421
  }
335
422
  catch (error) {
@@ -365,8 +452,11 @@ async function publish_processes(entries, options) {
365
452
  const reports = [];
366
453
  const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;
367
454
  for (const item of entries) {
368
- const payload = load_dataset_entry(item.entry, item.origin.base_dir);
455
+ let payload = {};
369
456
  try {
457
+ const source = load_dataset_entry_source(item.entry, item.origin.base_dir);
458
+ payload = unwrap_dataset_entry_source(source);
459
+ const modelReference = resolve_process_model_reference(source, payload);
370
460
  const [datasetId, version] = extract_process_identity(payload);
371
461
  const validation = validate(payload);
372
462
  if (!validation.ok) {
@@ -392,24 +482,36 @@ async function publish_processes(entries, options) {
392
482
  source: item.origin.source,
393
483
  bundle_path: item.origin.bundle_path,
394
484
  validation,
485
+ ...(modelReference
486
+ ? {
487
+ model_id: modelReference.modelId,
488
+ model_version: modelReference.modelVersion,
489
+ }
490
+ : {}),
395
491
  };
396
492
  reports.push(await maybe_execute_dataset(report, payload, {
397
493
  ...options,
398
494
  table: 'processes',
399
495
  executor: options.executor,
496
+ ...(modelReference ? { processModel: modelReference } : {}),
400
497
  }));
401
498
  }
402
499
  catch (error) {
500
+ const invalidModelReference = error instanceof CliError && error.code === 'PUBLISH_PROCESS_MODEL_ID_REQUIRED';
403
501
  const report = {
404
502
  table: 'processes',
405
503
  id: first_non_empty(payload['@id'], payload.id),
406
504
  version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),
407
- status: 'deferred_projection_payload',
505
+ status: invalidModelReference ? 'failed' : 'deferred_projection_payload',
408
506
  source: item.origin.source,
409
507
  bundle_path: item.origin.bundle_path,
410
- reason: error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'
411
- ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'
412
- : serialize_error(error).message,
508
+ ...(invalidModelReference
509
+ ? { error: serialize_error(error) }
510
+ : {
511
+ reason: error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'
512
+ ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'
513
+ : serialize_error(error).message,
514
+ }),
413
515
  };
414
516
  reports.push(report);
415
517
  }
@@ -504,6 +606,8 @@ function build_default_dataset_executor(options) {
504
606
  env: options.env,
505
607
  fetchImpl: options.fetchImpl,
506
608
  timeoutMs: options.timeoutMs,
609
+ modelId: args.processModel?.modelId,
610
+ modelVersion: args.processModel?.modelVersion,
507
611
  audit: {
508
612
  command: 'tiangong-lca publish run',
509
613
  source: args.source,
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/lib/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { CliError } from './errors.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n syncLifecyclemodelBundleRecord,\n type LifecyclemodelPublishMetadata,\n} from './lifecyclemodel-bundle-save.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport { syncStateAwareProcessRecord } from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport { getRuntimeRuleset } from './runtime-rulesets.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedTable,\n type SupabaseJsonOrderedWriteMode,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_MAX_ATTEMPTS = 5;\nconst DEFAULT_RETRY_DELAY_SECONDS = 2.0;\nconst DEFAULT_DATASET_VERSION = '01.01.000';\nconst PUBLISH_VERIFICATION_RULESET_ID = 'publish-run/default';\nconst PUBLISH_VERIFICATION_RULESET_VERSION = '1';\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensure_list(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction to_positive_integer(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? Number.parseInt(value, 10)\n : Number.NaN;\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError('Publish request expected a positive integer value.', {\n code: 'PUBLISH_INVALID_INTEGER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_non_negative_number(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError('Publish request expected a non-negative number value.', {\n code: 'PUBLISH_INVALID_NUMBER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_boolean(value: unknown, defaultValue: boolean): boolean {\n return value === undefined ? defaultValue : Boolean(value);\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction load_json_object(filePath: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PUBLISH_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction default_out_dir(baseDir: string, commit: boolean, now: Date = new Date()): string {\n const runId = buildRunId({\n namespace: 'publish',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(path.join(baseDir, 'artifacts'), 'publish', runId).runRoot;\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nexport type PublishDatasetEntry =\n | string\n | {\n file?: string;\n path?: string;\n json_ordered?: JsonObject;\n jsonOrdered?: JsonObject;\n payload?: JsonObject;\n [key: string]: unknown;\n };\n\nexport type PublishProcessBuildRunEntry =\n | string\n | {\n run_id?: string;\n run_root?: string;\n exports_dir?: string;\n [key: string]: unknown;\n };\n\nexport type PublishCollectedOrigin = {\n source: 'bundle' | 'input';\n base_dir: string;\n bundle_path: string | null;\n};\n\nexport type PublishCollectedDatasetEntry = {\n entry: PublishDatasetEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedProcessBuildRunEntry = {\n entry: PublishProcessBuildRunEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedRelationEntry = {\n entry: unknown;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishRequest = {\n inputs: {\n bundle_paths: string[];\n lifecyclemodels: PublishDatasetEntry[];\n processes: PublishDatasetEntry[];\n sources: PublishDatasetEntry[];\n relations: unknown[];\n process_build_runs: PublishProcessBuildRunEntry[];\n };\n publish: {\n commit: boolean;\n publish_lifecyclemodels: boolean;\n publish_processes: boolean;\n publish_sources: boolean;\n publish_relations: boolean;\n publish_process_build_runs: boolean;\n relation_mode: 'local_manifest_only';\n max_attempts: number;\n retry_delay_seconds: number;\n process_build_forward_args: string[];\n };\n out_dir: string;\n};\n\nexport type PublishCollectedInputs = {\n bundle_paths: string[];\n lifecyclemodels: PublishCollectedDatasetEntry[];\n processes: PublishCollectedDatasetEntry[];\n sources: PublishCollectedDatasetEntry[];\n relations: PublishCollectedRelationEntry[];\n process_build_runs: PublishCollectedProcessBuildRunEntry[];\n};\n\nexport type DatasetPublishExecutorArgs = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string;\n version: string;\n payload: JsonObject;\n metadata?: LifecyclemodelPublishMetadata | null;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n publish: PublishRequest['publish'];\n};\n\nexport type ProcessBuildRunPublishExecutorArgs = {\n run_id: string;\n entry: PublishProcessBuildRunEntry;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n publish: PublishRequest['publish'];\n};\n\nexport type PublishExecutors = {\n lifecyclemodels?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n processes?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n sources?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n process_build_runs?: (args: ProcessBuildRunPublishExecutorArgs) => Promise<unknown> | unknown;\n};\n\nexport type PublishDatasetReport = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string | null;\n version: string | null;\n status:\n 'prepared' | 'executed' | 'deferred_no_executor' | 'deferred_projection_payload' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n reason?: string;\n validation?: ProcessPayloadValidationResult;\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishProcessBuildRunReport = {\n run_id: string;\n status: 'prepared' | 'executed' | 'deferred_no_executor' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishRelationManifest = {\n generated_at_utc: string;\n relation_mode: 'local_manifest_only';\n status: 'prepared_local_relation_manifest';\n relations: unknown[];\n};\n\nexport type PublishVerificationFinding = {\n code: string;\n severity: 'warning' | 'blocker';\n message: string;\n table: 'lifecyclemodels' | 'processes' | 'sources' | 'process_build_runs';\n id: string | null;\n version: string | null;\n path?: string;\n bundle_path?: string | null;\n};\n\nexport type PublishVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n command: 'publish run';\n status: 'passed' | 'blocked';\n ruleset_id: string;\n ruleset_version: string;\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n commit: boolean;\n findings: PublishVerificationFinding[];\n blockers: PublishVerificationFinding[];\n next_action: 'ready_for_commit_or_publish' | 'fix_blockers';\n counts: {\n findings: number;\n blockers: number;\n failed: number;\n deferred: number;\n executed: number;\n };\n};\n\nexport type PublishReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n commit: boolean;\n status: 'completed' | 'completed_with_failures';\n counts: {\n bundle_paths: number;\n lifecyclemodels: number;\n processes: number;\n sources: number;\n relations: number;\n process_build_runs: number;\n executed: number;\n deferred: number;\n failed: number;\n };\n files: {\n normalized_request: string;\n collected_inputs: string;\n relation_manifest: string;\n verification_report: string;\n publish_report: string;\n };\n verification: PublishVerificationReport;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n process_build_runs: PublishProcessBuildRunReport[];\n relations: PublishRelationManifest;\n};\n\nexport type RunPublishOptions = {\n inputPath: string;\n rawRequest?: unknown;\n outDir?: string | null;\n commit?: boolean | null;\n executors?: PublishExecutors;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedPublishDatasetReport = PublishDatasetReport & {\n id: string;\n version: string;\n};\n\ntype NormalizePublishRequestOptions = {\n requestPath: string;\n outDirOverride?: string;\n commitOverride?: boolean;\n now?: Date;\n};\n\ntype PublishRequestOptions = {\n commit: boolean;\n executor:\n | PublishExecutors['lifecyclemodels']\n | PublishExecutors['processes']\n | PublishExecutors['sources']\n | undefined;\n publish: PublishRequest['publish'];\n};\n\ntype ProcessPublishRequestOptions = PublishRequestOptions & {\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype LoadedLifecyclemodelPublishEntry = {\n payload: JsonObject;\n metadata: LifecyclemodelPublishMetadata | null;\n};\n\nfunction extract_lifecyclemodel_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n const lifeCycleModelInformation = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(lifeCycleModelInformation.dataSetInformation)\n ? lifeCycleModelInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(payload['@id'], payload.id, dataSetInformation['common:UUID']);\n const version = first_non_empty(\n payload['@version'],\n payload.version,\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Lifecycle model payload missing @id/id.', {\n code: 'PUBLISH_LIFECYCLEMODEL_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction extract_process_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return [datasetId, version];\n}\n\nfunction extract_source_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n const sourceInformation = isRecord(root.sourceInformation) ? root.sourceInformation : {};\n const dataSetInformation = isRecord(sourceInformation.dataSetInformation)\n ? sourceInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Source payload missing sourceInformation.dataSetInformation.common:UUID.', {\n code: 'PUBLISH_SOURCE_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction load_dataset_entry(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n const source = load_dataset_entry_source(entry, baseDir);\n if (isRecord(source)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload'] as const) {\n const candidate = source[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n }\n\n return source;\n}\n\nfunction load_dataset_entry_source(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n return load_json_object(resolve_path(baseDir, fileValue));\n }\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n return load_json_object(resolve_path(baseDir, entry));\n }\n\n throw new CliError('Unsupported dataset entry in publish request.', {\n code: 'PUBLISH_UNSUPPORTED_DATASET_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction load_lifecyclemodel_publish_entry(\n entry: PublishDatasetEntry,\n baseDir: string,\n): LoadedLifecyclemodelPublishEntry {\n const source = load_dataset_entry_source(entry, baseDir);\n const payload = load_dataset_entry(entry, baseDir);\n const metadata: LifecyclemodelPublishMetadata = {};\n const jsonTg = isRecord(source.json_tg)\n ? source.json_tg\n : isRecord(source.jsonTg)\n ? source.jsonTg\n : null;\n if (jsonTg) {\n metadata.json_tg = jsonTg;\n }\n\n const processMutations = source.processMutations ?? source.process_mutations;\n if (Array.isArray(processMutations)) {\n metadata.processMutations = processMutations as JsonObject[];\n }\n\n const ruleVerification =\n typeof source.ruleVerification === 'boolean'\n ? source.ruleVerification\n : typeof source.rule_verification === 'boolean'\n ? source.rule_verification\n : undefined;\n if (typeof ruleVerification === 'boolean') {\n metadata.ruleVerification = ruleVerification;\n }\n\n return {\n payload,\n metadata: Object.keys(metadata).length > 0 ? metadata : null,\n };\n}\n\nfunction push_collected_entries<T>(\n target: Array<{ entry: T; origin: PublishCollectedOrigin }>,\n entries: unknown[],\n origin: PublishCollectedOrigin,\n): void {\n for (const entry of entries) {\n target.push({ entry: entry as T, origin });\n }\n}\n\nexport function normalizePublishRequest(\n raw: unknown,\n options: NormalizePublishRequestOptions,\n): PublishRequest {\n if (!isRecord(raw)) {\n throw new CliError('Publish request must be a JSON object.', {\n code: 'PUBLISH_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const requestDir = path.dirname(options.requestPath);\n const inputs = isRecord(raw.inputs) ? raw.inputs : {};\n const publish = isRecord(raw.publish) ? raw.publish : {};\n const commit =\n options.commitOverride === undefined\n ? to_boolean(publish.commit, false)\n : options.commitOverride;\n const outDirValue = first_non_empty(options.outDirOverride, raw.out_dir, raw.output_dir);\n const outDir = outDirValue\n ? resolve_path(requestDir, outDirValue)\n : default_out_dir(requestDir, commit, options.now);\n const relationMode = first_non_empty(publish.relation_mode, 'local_manifest_only');\n\n if (relationMode !== 'local_manifest_only') {\n throw new CliError(\"publish.relation_mode only supports 'local_manifest_only'.\", {\n code: 'PUBLISH_UNSUPPORTED_RELATION_MODE',\n exitCode: 2,\n details: relationMode,\n });\n }\n\n return {\n inputs: {\n bundle_paths: ensure_list(inputs.bundle_paths)\n .map((value) => String(value).trim())\n .filter(Boolean)\n .map((value) => resolve_path(requestDir, value)),\n lifecyclemodels: ensure_list(inputs.lifecyclemodels) as PublishDatasetEntry[],\n processes: ensure_list(inputs.processes) as PublishDatasetEntry[],\n sources: ensure_list(inputs.sources) as PublishDatasetEntry[],\n relations: ensure_list(inputs.relations),\n process_build_runs: ensure_list(inputs.process_build_runs) as PublishProcessBuildRunEntry[],\n },\n publish: {\n commit,\n publish_lifecyclemodels: to_boolean(publish.publish_lifecyclemodels, true),\n publish_processes: to_boolean(publish.publish_processes, true),\n publish_sources: to_boolean(publish.publish_sources, true),\n publish_relations: to_boolean(publish.publish_relations, true),\n publish_process_build_runs: to_boolean(publish.publish_process_build_runs, true),\n relation_mode: 'local_manifest_only',\n max_attempts: to_positive_integer(publish.max_attempts, DEFAULT_MAX_ATTEMPTS),\n retry_delay_seconds: to_non_negative_number(\n publish.retry_delay_seconds,\n DEFAULT_RETRY_DELAY_SECONDS,\n ),\n process_build_forward_args: ensure_list(publish.process_build_forward_args)\n .map((value) => String(value).trim())\n .filter(Boolean),\n },\n out_dir: outDir,\n };\n}\n\nexport function collectPublishInputs(\n normalized: PublishRequest,\n requestBaseDir: string,\n): PublishCollectedInputs {\n const collected: PublishCollectedInputs = {\n bundle_paths: [...normalized.inputs.bundle_paths],\n lifecyclemodels: [],\n processes: [],\n sources: [],\n relations: [],\n process_build_runs: [],\n };\n\n for (const bundlePath of normalized.inputs.bundle_paths) {\n const bundle = load_json_object(bundlePath);\n const origin: PublishCollectedOrigin = {\n source: 'bundle',\n base_dir: path.dirname(bundlePath),\n bundle_path: bundlePath,\n };\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n ensure_list(bundle.lifecyclemodels),\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n [...ensure_list(bundle.projected_processes), ...ensure_list(bundle.processes)],\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n ensure_list(bundle.sources),\n origin,\n );\n push_collected_entries(\n collected.relations,\n [...ensure_list(bundle.resulting_process_relations), ...ensure_list(bundle.relations)],\n origin,\n );\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n ensure_list(bundle.process_build_runs),\n origin,\n );\n }\n\n const directOrigin: PublishCollectedOrigin = {\n source: 'input',\n base_dir: requestBaseDir,\n bundle_path: null,\n };\n\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n normalized.inputs.lifecyclemodels,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n normalized.inputs.processes,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n normalized.inputs.sources,\n directOrigin,\n );\n push_collected_entries(collected.relations, normalized.inputs.relations, directOrigin);\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n normalized.inputs.process_build_runs,\n directOrigin,\n );\n\n return collected;\n}\n\nasync function maybe_execute_dataset(\n report: PreparedPublishDatasetReport,\n payload: JsonObject,\n options: PublishRequestOptions & {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n metadata?: LifecyclemodelPublishMetadata | null;\n },\n): Promise<PublishDatasetReport> {\n if (!options.commit) {\n return report;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n return report;\n }\n\n try {\n report.execution = await options.executor({\n table: options.table,\n id: report.id,\n version: report.version,\n payload,\n metadata: options.metadata,\n source: report.source,\n bundle_path: report.bundle_path,\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n return report;\n}\n\nasync function publish_lifecyclemodels(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const loaded = load_lifecyclemodel_publish_entry(item.entry, item.origin.base_dir);\n const payload = loaded.payload;\n const [datasetId, version] = extract_lifecyclemodel_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'lifecyclemodels',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'lifecyclemodels',\n executor: options.executor,\n metadata: loaded.metadata,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_processes(\n entries: PublishCollectedDatasetEntry[],\n options: ProcessPublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n try {\n const [datasetId, version] = extract_process_identity(payload);\n const validation = validate(payload);\n if (!validation.ok) {\n reports.push({\n table: 'processes',\n id: datasetId,\n version,\n status: 'failed',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n });\n continue;\n }\n\n const report: PreparedPublishDatasetReport = {\n table: 'processes',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'processes',\n executor: options.executor,\n }),\n );\n } catch (error) {\n const report: PublishDatasetReport = {\n table: 'processes',\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),\n status: 'deferred_projection_payload',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n reason:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'\n : serialize_error(error).message,\n };\n reports.push(report);\n }\n }\n return reports;\n}\n\nasync function publish_sources(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n const [datasetId, version] = extract_source_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'sources',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'sources',\n executor: options.executor,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_process_build_runs(\n entries: PublishCollectedProcessBuildRunEntry[],\n options: {\n commit: boolean;\n executor: PublishExecutors['process_build_runs'];\n publish: PublishRequest['publish'];\n },\n): Promise<PublishProcessBuildRunReport[]> {\n const reports: PublishProcessBuildRunReport[] = [];\n for (const item of entries) {\n const runId =\n typeof item.entry === 'string' ? item.entry.trim() : first_non_empty(item.entry.run_id);\n\n if (!runId) {\n throw new CliError('process_build_run entry missing run_id.', {\n code: 'PUBLISH_PROCESS_BUILD_RUN_ID_MISSING',\n exitCode: 2,\n details: item.entry,\n });\n }\n\n const report: PublishProcessBuildRunReport = {\n run_id: runId,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n };\n\n if (!options.commit) {\n reports.push(report);\n continue;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await options.executor({\n run_id: runId,\n entry: item.entry,\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n return reports;\n}\n\nfunction build_relation_manifest(\n relations: PublishCollectedRelationEntry[],\n publish: PublishRequest['publish'],\n now: Date,\n): PublishRelationManifest {\n return {\n generated_at_utc: now.toISOString(),\n relation_mode: publish.relation_mode,\n status: 'prepared_local_relation_manifest',\n relations: publish.publish_relations ? relations.map((item) => item.entry) : [],\n };\n}\n\nfunction table_write_mode_for_publish(): SupabaseJsonOrderedWriteMode {\n return 'upsert_current_version';\n}\n\nfunction build_default_dataset_executor(options: {\n table: SupabaseJsonOrderedTable;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}) {\n return async (args: DatasetPublishExecutorArgs): Promise<unknown> => {\n if (options.table === 'processes') {\n return syncStateAwareProcessRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'tiangong-lca publish run',\n source: args.source,\n bundle_path: args.bundle_path,\n },\n });\n }\n\n if (options.table === 'lifecyclemodels') {\n return syncLifecyclemodelBundleRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n metadata: args.metadata ?? null,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: options.table,\n id: args.id,\n version: args.version,\n payload: args.payload,\n writeMode: table_write_mode_for_publish(),\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n };\n}\n\nfunction resolve_dataset_executors(options: RunPublishOptions): PublishExecutors {\n const explicit = options.executors ?? {};\n const env = options.env;\n const fetchImpl = options.fetchImpl;\n\n if (!env || !fetchImpl || !hasSupabaseRestRuntime(env)) {\n return explicit;\n }\n\n return {\n lifecyclemodels:\n explicit.lifecyclemodels ??\n build_default_dataset_executor({\n table: 'lifecyclemodels',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n processes:\n explicit.processes ??\n build_default_dataset_executor({\n table: 'processes',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n sources:\n explicit.sources ??\n build_default_dataset_executor({\n table: 'sources',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n process_build_runs: explicit.process_build_runs,\n };\n}\n\nfunction dataset_failure_finding(\n report: PublishDatasetReport,\n fallbackCode: string,\n): PublishVerificationFinding {\n const validationIssue = report.validation?.ok === false ? report.validation.issues[0] : null;\n return {\n code: validationIssue?.code ?? fallbackCode,\n severity: 'blocker',\n message:\n validationIssue?.message ??\n report.error?.message ??\n report.reason ??\n 'Publish dataset failed.',\n table: report.table,\n id: report.id,\n version: report.version,\n ...(validationIssue?.path ? { path: validationIssue.path } : {}),\n ...(report.bundle_path !== undefined ? { bundle_path: report.bundle_path } : {}),\n };\n}\n\nfunction process_build_run_failure_finding(\n report: PublishProcessBuildRunReport,\n): PublishVerificationFinding {\n return {\n code: 'process_build_run_publish_failed',\n severity: 'blocker',\n message: report.error?.message ?? 'Process build run publish failed.',\n table: 'process_build_runs',\n id: report.run_id,\n version: null,\n bundle_path: report.bundle_path,\n };\n}\n\nfunction build_publish_verification_report(options: {\n now: Date;\n commit: boolean;\n failed: number;\n deferred: number;\n executed: number;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n processBuildRuns: PublishProcessBuildRunReport[];\n}): PublishVerificationReport {\n const ruleset = getRuntimeRuleset('publish-run/default');\n const datasetFindings = [\n ...options.lifecyclemodels,\n ...options.processes,\n ...options.sources,\n ].flatMap((report) =>\n report.status === 'failed'\n ? [dataset_failure_finding(report, `${report.table}_publish_failed`)]\n : [],\n );\n const processBuildRunFindings = options.processBuildRuns.flatMap((report) =>\n report.status === 'failed' ? [process_build_run_failure_finding(report)] : [],\n );\n const blockers = [...datasetFindings, ...processBuildRunFindings];\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n command: 'publish run',\n status: blockers.length > 0 ? 'blocked' : 'passed',\n ruleset_id: PUBLISH_VERIFICATION_RULESET_ID,\n ruleset_version: PUBLISH_VERIFICATION_RULESET_VERSION,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n commit: options.commit,\n findings: blockers,\n blockers,\n next_action: blockers.length > 0 ? 'fix_blockers' : 'ready_for_commit_or_publish',\n counts: {\n findings: blockers.length,\n blockers: blockers.length,\n failed: options.failed,\n deferred: options.deferred,\n executed: options.executed,\n },\n };\n}\n\nexport async function runPublish(options: RunPublishOptions): Promise<PublishReport> {\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const raw = options.rawRequest ?? readJsonInput(requestPath);\n const normalized = normalizePublishRequest(raw, {\n requestPath,\n outDirOverride: options.outDir ?? undefined,\n commitOverride: options.commit ?? undefined,\n now: options.now,\n });\n const collected = collectPublishInputs(normalized, requestDir);\n const now = options.now ?? new Date();\n const outDir = normalized.out_dir;\n const executors = resolve_dataset_executors(options);\n\n const files = {\n normalized_request: path.join(outDir, 'normalized-request.json'),\n collected_inputs: path.join(outDir, 'collected-inputs.json'),\n relation_manifest: path.join(outDir, 'relation-manifest.json'),\n verification_report: path.join(outDir, 'verification-report.json'),\n publish_report: path.join(outDir, 'publish-report.json'),\n };\n\n writeJsonArtifact(files.normalized_request, normalized);\n writeJsonArtifact(files.collected_inputs, collected);\n\n const lifecyclemodels = normalized.publish.publish_lifecyclemodels\n ? await publish_lifecyclemodels(collected.lifecyclemodels, {\n commit: normalized.publish.commit,\n executor: executors.lifecyclemodels,\n publish: normalized.publish,\n })\n : [];\n const processes = normalized.publish.publish_processes\n ? await publish_processes(collected.processes, {\n commit: normalized.publish.commit,\n executor: executors.processes,\n publish: normalized.publish,\n validateProcessPayloadImpl: options.validateProcessPayloadImpl,\n })\n : [];\n const sources = normalized.publish.publish_sources\n ? await publish_sources(collected.sources, {\n commit: normalized.publish.commit,\n executor: executors.sources,\n publish: normalized.publish,\n })\n : [];\n const processBuildRuns = normalized.publish.publish_process_build_runs\n ? await publish_process_build_runs(collected.process_build_runs, {\n commit: normalized.publish.commit,\n executor: executors.process_build_runs,\n publish: normalized.publish,\n })\n : [];\n const relations = build_relation_manifest(collected.relations, normalized.publish, now);\n\n writeJsonArtifact(files.relation_manifest, relations);\n\n const publishEntries = [...lifecyclemodels, ...processes, ...sources, ...processBuildRuns];\n const failed = publishEntries.filter((item) => item.status === 'failed').length;\n const executed = publishEntries.filter((item) => item.status === 'executed').length;\n const deferred = publishEntries.filter((item) => item.status.startsWith('deferred')).length;\n const verification = build_publish_verification_report({\n now,\n commit: normalized.publish.commit,\n failed,\n deferred,\n executed,\n lifecyclemodels,\n processes,\n sources,\n processBuildRuns,\n });\n\n const report: PublishReport = {\n generated_at_utc: now.toISOString(),\n request_path: requestPath,\n out_dir: outDir,\n commit: normalized.publish.commit,\n status: failed > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n bundle_paths: collected.bundle_paths.length,\n lifecyclemodels: lifecyclemodels.length,\n processes: processes.length,\n sources: sources.length,\n relations: relations.relations.length,\n process_build_runs: processBuildRuns.length,\n executed,\n deferred,\n failed,\n },\n files,\n verification,\n lifecyclemodels,\n processes,\n sources,\n process_build_runs: processBuildRuns,\n relations,\n };\n\n writeJsonArtifact(files.verification_report, verification);\n writeJsonArtifact(files.publish_report, report);\n return report;\n}\n\nexport const __testInternals = {\n build_publish_verification_report,\n};\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/lib/publish.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACL,8BAA8B,GAE/B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iCAAiC,EACjC,sBAAsB,GAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,6BAA6B,GAG9B,MAAM,kCAAkC,CAAC;AAI1C,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAC5C,MAAM,+BAA+B,GAAG,qBAAqB,CAAC;AAC9D,MAAM,oCAAoC,GAAG,GAAG,CAAC;AAEjD,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,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,GAAG,MAAiB;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,YAAoB;IAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACnB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAAC,oDAAoD,EAAE;YACvE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAE,YAAoB;IAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,uDAAuD,EAAE;YAC1E,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,YAAqB;IACvD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,KAAa;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,+BAA+B,QAAQ,EAAE,EAAE;YAC5D,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,MAAe,EAAE,GAAG,GAAS,IAAI,IAAI,EAAE;IAC/E,MAAM,KAAK,GAAG,UAAU,CAAC;QACvB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACxC,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC;AACrF,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC,CAAC;AA2PD,SAAS,+BAA+B,CAAC,OAAmB;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/F,MAAM,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,kBAAkB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,kBAAkB,CAAC;QAC/E,CAAC,CAAC,yBAAyB,CAAC,kBAAkB;QAC9C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,eAAe,CAC7B,OAAO,CAAC,UAAU,CAAC,EACnB,OAAO,CAAC,OAAO,EACf,uBAAuB,CAAC,uBAAuB,CAAC,EAChD,uBAAuB,CACvB,CAAC;IACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,yCAAyC,EAAE;YAC5D,IAAI,EAAE,mCAAmC;YACzC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAmB;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACjF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;QACxE,CAAC,CAAC,kBAAkB,CAAC,kBAAkB;QACvC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,eAAe,CAC7B,uBAAuB,CAAC,uBAAuB,CAAC,EAChD,uBAAuB,CACvB,CAAC;IACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,4EAA4E,EAC5E;YACE,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAmB;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/E,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;QACvE,CAAC,CAAC,iBAAiB,CAAC,kBAAkB;QACtC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,eAAe,CAC7B,uBAAuB,CAAC,uBAAuB,CAAC,EAChD,uBAAuB,CACvB,CAAC;IACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,0EAA0E,EAAE;YAC7F,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA0B,EAAE,OAAe;IACrE,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAkB;IACrD,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,CAAU,EAAE,CAAC;YACtE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,yBAAyB,CAAC,KAA0B,EAAE,OAAe;IAC5E,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,OAAO,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE;QAClE,IAAI,EAAE,mCAAmC;QACzC,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iCAAiC,CACxC,KAA0B,EAC1B,OAAe;IAEf,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAkC,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,iBAAiB,CAAC;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,gBAAgB,GAAG,gBAAgC,CAAC;IAC/D,CAAC;IAED,MAAM,gBAAgB,GACpB,OAAO,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAC1C,CAAC,CAAC,MAAM,CAAC,gBAAgB;QACzB,CAAC,CAAC,OAAO,MAAM,CAAC,iBAAiB,KAAK,SAAS;YAC7C,CAAC,CAAC,MAAM,CAAC,iBAAiB;YAC1B,CAAC,CAAC,SAAS,CAAC;IAClB,IAAI,OAAO,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC1C,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;KAC7D,CAAC;AACJ,CAAC;AAOD,SAAS,0BAA0B,CACjC,MAAkB,EAClB,IAAuB;IAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,iCAAiC,CAAC,OAI1C;IACC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,0BAA0B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACrF,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,IAAI,QAAQ,CAAC,wCAAwC,EAAE;YAC3D,IAAI,EAAE,mCAAmC;YACzC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,aAAa,EAAE,YAAY,CAAC,KAAK;aAClC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,OAAO,CAAC,KAAK;YACtB,CAAC,CAAC;gBACE,OAAO,EAAE,OAAO,CAAC,KAAK;gBACtB,YAAY,EAAE,YAAY,CAAC,KAAK;aACjC;YACH,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,MAAkB,EAClB,OAAmB;IAEnB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC;QACjE,CAAC,CAAC,WAAW,CAAC,kBAAkB;QAChC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,kBAAkB,GACtB,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;QACnE,CAAC,CAAC,kBAAkB,CAAC,kBAAkB;QACvC,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,2BAA2B,GAC/B,kBAAkB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,2BAA2B,CAAC;QAC5E,CAAC,CAAC,kBAAkB,CAAC,2BAA2B;QAChD,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,gBAAgB,GAAG;QACvB;YACE,MAAM;YACN,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;YAC/B,WAAW,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;SAC/C;QACD;YACE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YAC1D,MAAM,EAAE,CAAC,kCAAkC,CAAC;YAC5C,WAAW,EAAE,CAAC,uCAAuC,CAAC;SACvD;QACD;YACE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;YAChF,MAAM,EAAE,CAAC,kCAAkC,CAAC;YAC5C,WAAW,EAAE,CAAC,uCAAuC,CAAC;SACvD;QACD;YACE,MAAM,EAAE,2BAA2B;YACnC,MAAM,EAAE,CAAC,IAAI,CAAC;YACd,WAAW,EAAE,CAAC,SAAS,CAAC;SACzB;KACF,CAAC;IAEF,KAAK,MAAM,qBAAqB,IAAI,gBAAgB,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,iCAAiC,CAAC,qBAAqB,CAAC,CAAC;QAC3E,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAA2D,EAC3D,OAAkB,EAClB,MAA8B;IAE9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAY,EACZ,OAAuC;IAEvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,QAAQ,CAAC,wCAAwC,EAAE;YAC3D,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,MAAM,GACV,OAAO,CAAC,cAAc,KAAK,SAAS;QAClC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC7B,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAEnF,IAAI,YAAY,KAAK,qBAAqB,EAAE,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,4DAA4D,EAAE;YAC/E,IAAI,EAAE,mCAAmC;YACzC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE;YACN,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC;iBAC3C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpC,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAClD,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,eAAe,CAA0B;YAC7E,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,CAA0B;YACjE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAA0B;YAC7D,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;YACxC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAkC;SAC5F;QACD,OAAO,EAAE;YACP,MAAM;YACN,uBAAuB,EAAE,UAAU,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;YAC1E,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;YAC9D,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;YAC1D,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;YAC9D,0BAA0B,EAAE,UAAU,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC;YAChF,aAAa,EAAE,qBAAqB;YACpC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC;YAC7E,mBAAmB,EAAE,sBAAsB,CACzC,OAAO,CAAC,mBAAmB,EAC3B,2BAA2B,CAC5B;YACD,0BAA0B,EAAE,WAAW,CAAC,OAAO,CAAC,0BAA0B,CAAC;iBACxE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpC,MAAM,CAAC,OAAO,CAAC;SACnB;QACD,OAAO,EAAE,MAAM;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAA0B,EAC1B,cAAsB;IAEtB,MAAM,SAAS,GAA2B;QACxC,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;QACjD,eAAe,EAAE,EAAE;QACnB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,kBAAkB,EAAE,EAAE;KACvB,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,MAAM,GAA2B;YACrC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAClC,WAAW,EAAE,UAAU;SACxB,CAAC;QACF,sBAAsB,CACpB,SAAS,CAAC,eAAe,EACzB,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,EACnC,MAAM,CACP,CAAC;QACF,sBAAsB,CACpB,SAAS,CAAC,SAAS,EACnB,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAC9E,MAAM,CACP,CAAC;QACF,sBAAsB,CACpB,SAAS,CAAC,OAAO,EACjB,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAC3B,MAAM,CACP,CAAC;QACF,sBAAsB,CACpB,SAAS,CAAC,SAAS,EACnB,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,2BAA2B,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EACtF,MAAM,CACP,CAAC;QACF,sBAAsB,CACpB,SAAS,CAAC,kBAAkB,EAC5B,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,EACtC,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAA2B;QAC3C,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,IAAI;KAClB,CAAC;IAEF,sBAAsB,CACpB,SAAS,CAAC,eAAe,EACzB,UAAU,CAAC,MAAM,CAAC,eAAe,EACjC,YAAY,CACb,CAAC;IACF,sBAAsB,CACpB,SAAS,CAAC,SAAS,EACnB,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,YAAY,CACb,CAAC;IACF,sBAAsB,CACpB,SAAS,CAAC,OAAO,EACjB,UAAU,CAAC,MAAM,CAAC,OAAO,EACzB,YAAY,CACb,CAAC;IACF,sBAAsB,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvF,sBAAsB,CACpB,SAAS,CAAC,kBAAkB,EAC5B,UAAU,CAAC,MAAM,CAAC,kBAAkB,EACpC,YAAY,CACb,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,MAAoC,EACpC,OAAmB,EACnB,OAIC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,GAAG,sBAAsB,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAA+B;YAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO;YACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAAuC,EACvC,OAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,iCAAiC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAiC;YAC3C,KAAK,EAAE,iBAAiB;YACxB,EAAE,EAAE,SAAS;YACb,OAAO;YACP,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;SACrC,CAAC;QACF,OAAO,CAAC,IAAI,CACV,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE;YAC3C,GAAG,OAAO;YACV,KAAK,EAAE,iBAAiB;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAuC,EACvC,OAAqC;IAErC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,IAAI,sBAAsB,CAAC;IAC9E,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAe,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3E,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,WAAW;oBAClB,EAAE,EAAE,SAAS;oBACb,OAAO;oBACP,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;oBAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;oBACpC,UAAU;oBACV,KAAK,EAAE;wBACL,OAAO,EAAE,iCAAiC,CAAC,UAAU,CAAC;qBACvD;iBACF,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAiC;gBAC3C,KAAK,EAAE,WAAW;gBAClB,EAAE,EAAE,SAAS;gBACb,OAAO;gBACP,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACpC,UAAU;gBACV,GAAG,CAAC,cAAc;oBAChB,CAAC,CAAC;wBACE,QAAQ,EAAE,cAAc,CAAC,OAAO;wBAChC,aAAa,EAAE,cAAc,CAAC,YAAY;qBAC3C;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,OAAO,CAAC,IAAI,CACV,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE;gBAC3C,GAAG,OAAO;gBACV,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,qBAAqB,GACzB,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,mCAAmC,CAAC;YAClF,MAAM,MAAM,GAAyB;gBACnC,KAAK,EAAE,WAAW;gBAClB,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/C,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,uBAAuB,CAAC;gBACvF,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B;gBACxE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACpC,GAAG,CAAC,qBAAqB;oBACvB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE;oBACnC,CAAC,CAAC;wBACE,MAAM,EACJ,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,4BAA4B;4BACtE,CAAC,CAAC,gIAAgI;4BAClI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO;qBACrC,CAAC;aACP,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,OAAuC,EACvC,OAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAiC;YAC3C,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,SAAS;YACb,OAAO;YACP,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;SACrC,CAAC;QACF,OAAO,CAAC,IAAI,CACV,MAAM,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE;YAC3C,GAAG,OAAO;YACV,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,OAA+C,EAC/C,OAIC;IAED,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE1F,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,QAAQ,CAAC,yCAAyC,EAAE;gBAC5D,IAAI,EAAE,sCAAsC;gBAC5C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,IAAI,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAiC;YAC3C,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC;SAC9D,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,GAAG,sBAAsB,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC;gBACxC,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACpC,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC;gBAC7D,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAA0C,EAC1C,OAAkC,EAClC,GAAS;IAET,OAAO;QACL,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,kCAAkC;QAC1C,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;KAChF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B;IACnC,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED,SAAS,8BAA8B,CAAC,OAKvC;IACC,OAAO,KAAK,EAAE,IAAgC,EAAoB,EAAE;QAClE,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,2BAA2B,CAAC;gBACjC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO;gBACnC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,0BAA0B;oBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACxC,OAAO,8BAA8B,CAAC;gBACpC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;gBAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,6BAA6B,CAAC;YACnC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,4BAA4B,EAAE;YACzC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,OAA0B;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAEpC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO;QACL,eAAe,EACb,QAAQ,CAAC,eAAe;YACxB,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,iBAAiB;gBACxB,GAAG;gBACH,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC;QACJ,SAAS,EACP,QAAQ,CAAC,SAAS;YAClB,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,WAAW;gBAClB,GAAG;gBACH,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC;QACJ,OAAO,EACL,QAAQ,CAAC,OAAO;YAChB,8BAA8B,CAAC;gBAC7B,KAAK,EAAE,SAAS;gBAChB,GAAG;gBACH,SAAS;gBACT,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC;QACJ,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAA4B,EAC5B,YAAoB;IAEpB,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,OAAO;QACL,IAAI,EAAE,eAAe,EAAE,IAAI,IAAI,YAAY;QAC3C,QAAQ,EAAE,SAAS;QACnB,OAAO,EACL,eAAe,EAAE,OAAO;YACxB,MAAM,CAAC,KAAK,EAAE,OAAO;YACrB,MAAM,CAAC,MAAM;YACb,yBAAyB;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CACxC,MAAoC;IAEpC,OAAO;QACL,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,mCAAmC;QACrE,KAAK,EAAE,oBAAoB;QAC3B,EAAE,EAAE,MAAM,CAAC,MAAM;QACjB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,OAU1C;IACC,MAAM,OAAO,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG;QACtB,GAAG,OAAO,CAAC,eAAe;QAC1B,GAAG,OAAO,CAAC,SAAS;QACpB,GAAG,OAAO,CAAC,OAAO;KACnB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACnB,MAAM,CAAC,MAAM,KAAK,QAAQ;QACxB,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,iBAAiB,CAAC,CAAC;QACrE,CAAC,CAAC,EAAE,CACP,CAAC;IACF,MAAM,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1E,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAC9E,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,uBAAuB,CAAC,CAAC;IAElE,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QAC3C,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAClD,UAAU,EAAE,+BAA+B;QAC3C,eAAe,EAAE,oCAAoC;QACrD,sBAAsB,EAAE,OAAO,CAAC,cAAc;QAC9C,gBAAgB,EAAE,OAAO,CAAC,QAAQ;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,QAAQ;QAClB,QAAQ;QACR,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,6BAA6B;QACjF,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,EAAE;QAC9C,WAAW;QACX,cAAc,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;QAC3C,cAAc,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;QAC3C,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAClC,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG;QACZ,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,yBAAyB,CAAC;QAChE,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC;QAC5D,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC;QAC9D,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,0BAA0B,CAAC;QAClE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC;KACzD,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IACxD,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAErD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,uBAAuB;QAChE,CAAC,CAAC,MAAM,uBAAuB,CAAC,SAAS,CAAC,eAAe,EAAE;YACvD,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACjC,QAAQ,EAAE,SAAS,CAAC,eAAe;YACnC,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,iBAAiB;QACpD,CAAC,CAAC,MAAM,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE;YAC3C,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACjC,QAAQ,EAAE,SAAS,CAAC,SAAS;YAC7B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,0BAA0B,EAAE,OAAO,CAAC,0BAA0B;SAC/D,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe;QAChD,CAAC,CAAC,MAAM,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE;YACvC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACjC,QAAQ,EAAE,SAAS,CAAC,OAAO;YAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,0BAA0B;QACpE,CAAC,CAAC,MAAM,0BAA0B,CAAC,SAAS,CAAC,kBAAkB,EAAE;YAC7D,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;YACjC,QAAQ,EAAE,SAAS,CAAC,kBAAkB;YACtC,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAExF,iBAAiB,CAAC,KAAK,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAEtD,MAAM,cAAc,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IAChF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACpF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5F,MAAM,YAAY,GAAG,iCAAiC,CAAC;QACrD,GAAG;QACH,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;QACjC,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,SAAS;QACT,OAAO;QACP,gBAAgB;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAkB;QAC5B,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,YAAY,EAAE,WAAW;QACzB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM;QACjC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW;QAC5D,MAAM,EAAE;YACN,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM;YAC3C,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,SAAS,EAAE,SAAS,CAAC,MAAM;YAC3B,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM;YACrC,kBAAkB,EAAE,gBAAgB,CAAC,MAAM;YAC3C,QAAQ;YACR,QAAQ;YACR,MAAM;SACP;QACD,KAAK;QACL,YAAY;QACZ,eAAe;QACf,SAAS;QACT,OAAO;QACP,kBAAkB,EAAE,gBAAgB;QACpC,SAAS;KACV,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;IAC3D,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iCAAiC;CAClC,CAAC","sourcesContent":["import path from 'node:path';\nimport { CliError } from './errors.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n syncLifecyclemodelBundleRecord,\n type LifecyclemodelPublishMetadata,\n} from './lifecyclemodel-bundle-save.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport { syncStateAwareProcessRecord } from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport { getRuntimeRuleset } from './runtime-rulesets.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedTable,\n type SupabaseJsonOrderedWriteMode,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_MAX_ATTEMPTS = 5;\nconst DEFAULT_RETRY_DELAY_SECONDS = 2.0;\nconst DEFAULT_DATASET_VERSION = '01.01.000';\nconst PUBLISH_VERIFICATION_RULESET_ID = 'publish-run/default';\nconst PUBLISH_VERIFICATION_RULESET_VERSION = '1';\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensure_list(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction to_positive_integer(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? Number.parseInt(value, 10)\n : Number.NaN;\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError('Publish request expected a positive integer value.', {\n code: 'PUBLISH_INVALID_INTEGER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_non_negative_number(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError('Publish request expected a non-negative number value.', {\n code: 'PUBLISH_INVALID_NUMBER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_boolean(value: unknown, defaultValue: boolean): boolean {\n return value === undefined ? defaultValue : Boolean(value);\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction load_json_object(filePath: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PUBLISH_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction default_out_dir(baseDir: string, commit: boolean, now: Date = new Date()): string {\n const runId = buildRunId({\n namespace: 'publish',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(path.join(baseDir, 'artifacts'), 'publish', runId).runRoot;\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nexport type PublishDatasetEntry =\n | string\n | {\n file?: string;\n path?: string;\n json_ordered?: JsonObject;\n jsonOrdered?: JsonObject;\n payload?: JsonObject;\n [key: string]: unknown;\n };\n\nexport type PublishProcessBuildRunEntry =\n | string\n | {\n run_id?: string;\n run_root?: string;\n exports_dir?: string;\n [key: string]: unknown;\n };\n\nexport type PublishCollectedOrigin = {\n source: 'bundle' | 'input';\n base_dir: string;\n bundle_path: string | null;\n};\n\nexport type PublishCollectedDatasetEntry = {\n entry: PublishDatasetEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedProcessBuildRunEntry = {\n entry: PublishProcessBuildRunEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedRelationEntry = {\n entry: unknown;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishRequest = {\n inputs: {\n bundle_paths: string[];\n lifecyclemodels: PublishDatasetEntry[];\n processes: PublishDatasetEntry[];\n sources: PublishDatasetEntry[];\n relations: unknown[];\n process_build_runs: PublishProcessBuildRunEntry[];\n };\n publish: {\n commit: boolean;\n publish_lifecyclemodels: boolean;\n publish_processes: boolean;\n publish_sources: boolean;\n publish_relations: boolean;\n publish_process_build_runs: boolean;\n relation_mode: 'local_manifest_only';\n max_attempts: number;\n retry_delay_seconds: number;\n process_build_forward_args: string[];\n };\n out_dir: string;\n};\n\nexport type PublishCollectedInputs = {\n bundle_paths: string[];\n lifecyclemodels: PublishCollectedDatasetEntry[];\n processes: PublishCollectedDatasetEntry[];\n sources: PublishCollectedDatasetEntry[];\n relations: PublishCollectedRelationEntry[];\n process_build_runs: PublishCollectedProcessBuildRunEntry[];\n};\n\nexport type DatasetPublishExecutorArgs = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string;\n version: string;\n payload: JsonObject;\n metadata?: LifecyclemodelPublishMetadata | null;\n processModel?: ProcessModelReference;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n publish: PublishRequest['publish'];\n};\n\nexport type ProcessModelReference = {\n modelId: string;\n modelVersion: string | null;\n};\n\nexport type ProcessBuildRunPublishExecutorArgs = {\n run_id: string;\n entry: PublishProcessBuildRunEntry;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n publish: PublishRequest['publish'];\n};\n\nexport type PublishExecutors = {\n lifecyclemodels?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n processes?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n sources?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n process_build_runs?: (args: ProcessBuildRunPublishExecutorArgs) => Promise<unknown> | unknown;\n};\n\nexport type PublishDatasetReport = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string | null;\n version: string | null;\n status:\n 'prepared' | 'executed' | 'deferred_no_executor' | 'deferred_projection_payload' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n reason?: string;\n model_id?: string;\n model_version?: string | null;\n validation?: ProcessPayloadValidationResult;\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishProcessBuildRunReport = {\n run_id: string;\n status: 'prepared' | 'executed' | 'deferred_no_executor' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishRelationManifest = {\n generated_at_utc: string;\n relation_mode: 'local_manifest_only';\n status: 'prepared_local_relation_manifest';\n relations: unknown[];\n};\n\nexport type PublishVerificationFinding = {\n code: string;\n severity: 'warning' | 'blocker';\n message: string;\n table: 'lifecyclemodels' | 'processes' | 'sources' | 'process_build_runs';\n id: string | null;\n version: string | null;\n path?: string;\n bundle_path?: string | null;\n};\n\nexport type PublishVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n command: 'publish run';\n status: 'passed' | 'blocked';\n ruleset_id: string;\n ruleset_version: string;\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n commit: boolean;\n findings: PublishVerificationFinding[];\n blockers: PublishVerificationFinding[];\n next_action: 'ready_for_commit_or_publish' | 'fix_blockers';\n counts: {\n findings: number;\n blockers: number;\n failed: number;\n deferred: number;\n executed: number;\n };\n};\n\nexport type PublishReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n commit: boolean;\n status: 'completed' | 'completed_with_failures';\n counts: {\n bundle_paths: number;\n lifecyclemodels: number;\n processes: number;\n sources: number;\n relations: number;\n process_build_runs: number;\n executed: number;\n deferred: number;\n failed: number;\n };\n files: {\n normalized_request: string;\n collected_inputs: string;\n relation_manifest: string;\n verification_report: string;\n publish_report: string;\n };\n verification: PublishVerificationReport;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n process_build_runs: PublishProcessBuildRunReport[];\n relations: PublishRelationManifest;\n};\n\nexport type RunPublishOptions = {\n inputPath: string;\n rawRequest?: unknown;\n outDir?: string | null;\n commit?: boolean | null;\n executors?: PublishExecutors;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedPublishDatasetReport = PublishDatasetReport & {\n id: string;\n version: string;\n};\n\ntype NormalizePublishRequestOptions = {\n requestPath: string;\n outDirOverride?: string;\n commitOverride?: boolean;\n now?: Date;\n};\n\ntype PublishRequestOptions = {\n commit: boolean;\n executor:\n | PublishExecutors['lifecyclemodels']\n | PublishExecutors['processes']\n | PublishExecutors['sources']\n | undefined;\n publish: PublishRequest['publish'];\n};\n\ntype ProcessPublishRequestOptions = PublishRequestOptions & {\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype LoadedLifecyclemodelPublishEntry = {\n payload: JsonObject;\n metadata: LifecyclemodelPublishMetadata | null;\n};\n\nfunction extract_lifecyclemodel_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n const lifeCycleModelInformation = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(lifeCycleModelInformation.dataSetInformation)\n ? lifeCycleModelInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(payload['@id'], payload.id, dataSetInformation['common:UUID']);\n const version = first_non_empty(\n payload['@version'],\n payload.version,\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Lifecycle model payload missing @id/id.', {\n code: 'PUBLISH_LIFECYCLEMODEL_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction extract_process_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return [datasetId, version];\n}\n\nfunction extract_source_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n const sourceInformation = isRecord(root.sourceInformation) ? root.sourceInformation : {};\n const dataSetInformation = isRecord(sourceInformation.dataSetInformation)\n ? sourceInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Source payload missing sourceInformation.dataSetInformation.common:UUID.', {\n code: 'PUBLISH_SOURCE_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction load_dataset_entry(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n const source = load_dataset_entry_source(entry, baseDir);\n return unwrap_dataset_entry_source(source);\n}\n\nfunction unwrap_dataset_entry_source(source: JsonObject): JsonObject {\n if (isRecord(source)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload'] as const) {\n const candidate = source[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n }\n\n return source;\n}\n\nfunction load_dataset_entry_source(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n return load_json_object(resolve_path(baseDir, fileValue));\n }\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n return load_json_object(resolve_path(baseDir, entry));\n }\n\n throw new CliError('Unsupported dataset entry in publish request.', {\n code: 'PUBLISH_UNSUPPORTED_DATASET_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction load_lifecyclemodel_publish_entry(\n entry: PublishDatasetEntry,\n baseDir: string,\n): LoadedLifecyclemodelPublishEntry {\n const source = load_dataset_entry_source(entry, baseDir);\n const payload = load_dataset_entry(entry, baseDir);\n const metadata: LifecyclemodelPublishMetadata = {};\n const jsonTg = isRecord(source.json_tg)\n ? source.json_tg\n : isRecord(source.jsonTg)\n ? source.jsonTg\n : null;\n if (jsonTg) {\n metadata.json_tg = jsonTg;\n }\n\n const processMutations = source.processMutations ?? source.process_mutations;\n if (Array.isArray(processMutations)) {\n metadata.processMutations = processMutations as JsonObject[];\n }\n\n const ruleVerification =\n typeof source.ruleVerification === 'boolean'\n ? source.ruleVerification\n : typeof source.rule_verification === 'boolean'\n ? source.rule_verification\n : undefined;\n if (typeof ruleVerification === 'boolean') {\n metadata.ruleVerification = ruleVerification;\n }\n\n return {\n payload,\n metadata: Object.keys(metadata).length > 0 ? metadata : null,\n };\n}\n\ntype OptionalStringField = {\n present: boolean;\n value: string | null;\n};\n\nfunction read_optional_string_field(\n source: JsonObject,\n keys: readonly string[],\n): OptionalStringField {\n for (const key of keys) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n return {\n present: true,\n value: first_non_empty(source[key]),\n };\n }\n }\n return { present: false, value: null };\n}\n\nfunction process_model_reference_candidate(options: {\n source: JsonObject | null;\n idKeys: readonly string[];\n versionKeys: readonly string[];\n}): { present: boolean; reference: ProcessModelReference | null } {\n if (!options.source) {\n return { present: false, reference: null };\n }\n\n const modelId = read_optional_string_field(options.source, options.idKeys);\n const modelVersion = read_optional_string_field(options.source, options.versionKeys);\n if (!modelId.present && !modelVersion.present) {\n return { present: false, reference: null };\n }\n if (modelVersion.value && !modelId.value) {\n throw new CliError('Process modelVersion requires modelId.', {\n code: 'PUBLISH_PROCESS_MODEL_ID_REQUIRED',\n exitCode: 2,\n details: {\n model_version: modelVersion.value,\n },\n });\n }\n\n return {\n present: true,\n reference: modelId.value\n ? {\n modelId: modelId.value,\n modelVersion: modelVersion.value,\n }\n : null,\n };\n}\n\nfunction resolve_process_model_reference(\n source: JsonObject,\n payload: JsonObject,\n): ProcessModelReference | null {\n const payloadRoot = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(payloadRoot.processInformation)\n ? payloadRoot.processInformation\n : null;\n const dataSetInformation =\n processInformation && isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : null;\n const generatedFromLifecycleModel =\n dataSetInformation && isRecord(dataSetInformation.generatedFromLifecycleModel)\n ? dataSetInformation.generatedFromLifecycleModel\n : null;\n const candidateOptions = [\n {\n source,\n idKeys: ['modelId', 'model_id'],\n versionKeys: ['modelVersion', 'model_version'],\n },\n {\n source: isRecord(source.metadata) ? source.metadata : null,\n idKeys: ['generated_from_lifecyclemodel_id'],\n versionKeys: ['generated_from_lifecyclemodel_version'],\n },\n {\n source: isRecord(payload.projectionMetadata) ? payload.projectionMetadata : null,\n idKeys: ['generated_from_lifecyclemodel_id'],\n versionKeys: ['generated_from_lifecyclemodel_version'],\n },\n {\n source: generatedFromLifecycleModel,\n idKeys: ['id'],\n versionKeys: ['version'],\n },\n ];\n\n for (const candidateOptionsEntry of candidateOptions) {\n const candidate = process_model_reference_candidate(candidateOptionsEntry);\n if (candidate.present) {\n return candidate.reference;\n }\n }\n return null;\n}\n\nfunction push_collected_entries<T>(\n target: Array<{ entry: T; origin: PublishCollectedOrigin }>,\n entries: unknown[],\n origin: PublishCollectedOrigin,\n): void {\n for (const entry of entries) {\n target.push({ entry: entry as T, origin });\n }\n}\n\nexport function normalizePublishRequest(\n raw: unknown,\n options: NormalizePublishRequestOptions,\n): PublishRequest {\n if (!isRecord(raw)) {\n throw new CliError('Publish request must be a JSON object.', {\n code: 'PUBLISH_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const requestDir = path.dirname(options.requestPath);\n const inputs = isRecord(raw.inputs) ? raw.inputs : {};\n const publish = isRecord(raw.publish) ? raw.publish : {};\n const commit =\n options.commitOverride === undefined\n ? to_boolean(publish.commit, false)\n : options.commitOverride;\n const outDirValue = first_non_empty(options.outDirOverride, raw.out_dir, raw.output_dir);\n const outDir = outDirValue\n ? resolve_path(requestDir, outDirValue)\n : default_out_dir(requestDir, commit, options.now);\n const relationMode = first_non_empty(publish.relation_mode, 'local_manifest_only');\n\n if (relationMode !== 'local_manifest_only') {\n throw new CliError(\"publish.relation_mode only supports 'local_manifest_only'.\", {\n code: 'PUBLISH_UNSUPPORTED_RELATION_MODE',\n exitCode: 2,\n details: relationMode,\n });\n }\n\n return {\n inputs: {\n bundle_paths: ensure_list(inputs.bundle_paths)\n .map((value) => String(value).trim())\n .filter(Boolean)\n .map((value) => resolve_path(requestDir, value)),\n lifecyclemodels: ensure_list(inputs.lifecyclemodels) as PublishDatasetEntry[],\n processes: ensure_list(inputs.processes) as PublishDatasetEntry[],\n sources: ensure_list(inputs.sources) as PublishDatasetEntry[],\n relations: ensure_list(inputs.relations),\n process_build_runs: ensure_list(inputs.process_build_runs) as PublishProcessBuildRunEntry[],\n },\n publish: {\n commit,\n publish_lifecyclemodels: to_boolean(publish.publish_lifecyclemodels, true),\n publish_processes: to_boolean(publish.publish_processes, true),\n publish_sources: to_boolean(publish.publish_sources, true),\n publish_relations: to_boolean(publish.publish_relations, true),\n publish_process_build_runs: to_boolean(publish.publish_process_build_runs, true),\n relation_mode: 'local_manifest_only',\n max_attempts: to_positive_integer(publish.max_attempts, DEFAULT_MAX_ATTEMPTS),\n retry_delay_seconds: to_non_negative_number(\n publish.retry_delay_seconds,\n DEFAULT_RETRY_DELAY_SECONDS,\n ),\n process_build_forward_args: ensure_list(publish.process_build_forward_args)\n .map((value) => String(value).trim())\n .filter(Boolean),\n },\n out_dir: outDir,\n };\n}\n\nexport function collectPublishInputs(\n normalized: PublishRequest,\n requestBaseDir: string,\n): PublishCollectedInputs {\n const collected: PublishCollectedInputs = {\n bundle_paths: [...normalized.inputs.bundle_paths],\n lifecyclemodels: [],\n processes: [],\n sources: [],\n relations: [],\n process_build_runs: [],\n };\n\n for (const bundlePath of normalized.inputs.bundle_paths) {\n const bundle = load_json_object(bundlePath);\n const origin: PublishCollectedOrigin = {\n source: 'bundle',\n base_dir: path.dirname(bundlePath),\n bundle_path: bundlePath,\n };\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n ensure_list(bundle.lifecyclemodels),\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n [...ensure_list(bundle.projected_processes), ...ensure_list(bundle.processes)],\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n ensure_list(bundle.sources),\n origin,\n );\n push_collected_entries(\n collected.relations,\n [...ensure_list(bundle.resulting_process_relations), ...ensure_list(bundle.relations)],\n origin,\n );\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n ensure_list(bundle.process_build_runs),\n origin,\n );\n }\n\n const directOrigin: PublishCollectedOrigin = {\n source: 'input',\n base_dir: requestBaseDir,\n bundle_path: null,\n };\n\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n normalized.inputs.lifecyclemodels,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n normalized.inputs.processes,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n normalized.inputs.sources,\n directOrigin,\n );\n push_collected_entries(collected.relations, normalized.inputs.relations, directOrigin);\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n normalized.inputs.process_build_runs,\n directOrigin,\n );\n\n return collected;\n}\n\nasync function maybe_execute_dataset(\n report: PreparedPublishDatasetReport,\n payload: JsonObject,\n options: PublishRequestOptions & {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n metadata?: LifecyclemodelPublishMetadata | null;\n processModel?: ProcessModelReference;\n },\n): Promise<PublishDatasetReport> {\n if (!options.commit) {\n return report;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n return report;\n }\n\n try {\n const executorArgs: DatasetPublishExecutorArgs = {\n table: options.table,\n id: report.id,\n version: report.version,\n payload,\n metadata: options.metadata,\n source: report.source,\n bundle_path: report.bundle_path,\n publish: options.publish,\n };\n if (options.processModel) {\n executorArgs.processModel = options.processModel;\n }\n report.execution = await options.executor(executorArgs);\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n return report;\n}\n\nasync function publish_lifecyclemodels(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const loaded = load_lifecyclemodel_publish_entry(item.entry, item.origin.base_dir);\n const payload = loaded.payload;\n const [datasetId, version] = extract_lifecyclemodel_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'lifecyclemodels',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'lifecyclemodels',\n executor: options.executor,\n metadata: loaded.metadata,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_processes(\n entries: PublishCollectedDatasetEntry[],\n options: ProcessPublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n for (const item of entries) {\n let payload: JsonObject = {};\n try {\n const source = load_dataset_entry_source(item.entry, item.origin.base_dir);\n payload = unwrap_dataset_entry_source(source);\n const modelReference = resolve_process_model_reference(source, payload);\n const [datasetId, version] = extract_process_identity(payload);\n const validation = validate(payload);\n if (!validation.ok) {\n reports.push({\n table: 'processes',\n id: datasetId,\n version,\n status: 'failed',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n });\n continue;\n }\n\n const report: PreparedPublishDatasetReport = {\n table: 'processes',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n ...(modelReference\n ? {\n model_id: modelReference.modelId,\n model_version: modelReference.modelVersion,\n }\n : {}),\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'processes',\n executor: options.executor,\n ...(modelReference ? { processModel: modelReference } : {}),\n }),\n );\n } catch (error) {\n const invalidModelReference =\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_MODEL_ID_REQUIRED';\n const report: PublishDatasetReport = {\n table: 'processes',\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),\n status: invalidModelReference ? 'failed' : 'deferred_projection_payload',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n ...(invalidModelReference\n ? { error: serialize_error(error) }\n : {\n reason:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'\n : serialize_error(error).message,\n }),\n };\n reports.push(report);\n }\n }\n return reports;\n}\n\nasync function publish_sources(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n const [datasetId, version] = extract_source_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'sources',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'sources',\n executor: options.executor,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_process_build_runs(\n entries: PublishCollectedProcessBuildRunEntry[],\n options: {\n commit: boolean;\n executor: PublishExecutors['process_build_runs'];\n publish: PublishRequest['publish'];\n },\n): Promise<PublishProcessBuildRunReport[]> {\n const reports: PublishProcessBuildRunReport[] = [];\n for (const item of entries) {\n const runId =\n typeof item.entry === 'string' ? item.entry.trim() : first_non_empty(item.entry.run_id);\n\n if (!runId) {\n throw new CliError('process_build_run entry missing run_id.', {\n code: 'PUBLISH_PROCESS_BUILD_RUN_ID_MISSING',\n exitCode: 2,\n details: item.entry,\n });\n }\n\n const report: PublishProcessBuildRunReport = {\n run_id: runId,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n };\n\n if (!options.commit) {\n reports.push(report);\n continue;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await options.executor({\n run_id: runId,\n entry: item.entry,\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n return reports;\n}\n\nfunction build_relation_manifest(\n relations: PublishCollectedRelationEntry[],\n publish: PublishRequest['publish'],\n now: Date,\n): PublishRelationManifest {\n return {\n generated_at_utc: now.toISOString(),\n relation_mode: publish.relation_mode,\n status: 'prepared_local_relation_manifest',\n relations: publish.publish_relations ? relations.map((item) => item.entry) : [],\n };\n}\n\nfunction table_write_mode_for_publish(): SupabaseJsonOrderedWriteMode {\n return 'upsert_current_version';\n}\n\nfunction build_default_dataset_executor(options: {\n table: SupabaseJsonOrderedTable;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}) {\n return async (args: DatasetPublishExecutorArgs): Promise<unknown> => {\n if (options.table === 'processes') {\n return syncStateAwareProcessRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n modelId: args.processModel?.modelId,\n modelVersion: args.processModel?.modelVersion,\n audit: {\n command: 'tiangong-lca publish run',\n source: args.source,\n bundle_path: args.bundle_path,\n },\n });\n }\n\n if (options.table === 'lifecyclemodels') {\n return syncLifecyclemodelBundleRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n metadata: args.metadata ?? null,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: options.table,\n id: args.id,\n version: args.version,\n payload: args.payload,\n writeMode: table_write_mode_for_publish(),\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n };\n}\n\nfunction resolve_dataset_executors(options: RunPublishOptions): PublishExecutors {\n const explicit = options.executors ?? {};\n const env = options.env;\n const fetchImpl = options.fetchImpl;\n\n if (!env || !fetchImpl || !hasSupabaseRestRuntime(env)) {\n return explicit;\n }\n\n return {\n lifecyclemodels:\n explicit.lifecyclemodels ??\n build_default_dataset_executor({\n table: 'lifecyclemodels',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n processes:\n explicit.processes ??\n build_default_dataset_executor({\n table: 'processes',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n sources:\n explicit.sources ??\n build_default_dataset_executor({\n table: 'sources',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n process_build_runs: explicit.process_build_runs,\n };\n}\n\nfunction dataset_failure_finding(\n report: PublishDatasetReport,\n fallbackCode: string,\n): PublishVerificationFinding {\n const validationIssue = report.validation?.ok === false ? report.validation.issues[0] : null;\n return {\n code: validationIssue?.code ?? fallbackCode,\n severity: 'blocker',\n message:\n validationIssue?.message ??\n report.error?.message ??\n report.reason ??\n 'Publish dataset failed.',\n table: report.table,\n id: report.id,\n version: report.version,\n ...(validationIssue?.path ? { path: validationIssue.path } : {}),\n ...(report.bundle_path !== undefined ? { bundle_path: report.bundle_path } : {}),\n };\n}\n\nfunction process_build_run_failure_finding(\n report: PublishProcessBuildRunReport,\n): PublishVerificationFinding {\n return {\n code: 'process_build_run_publish_failed',\n severity: 'blocker',\n message: report.error?.message ?? 'Process build run publish failed.',\n table: 'process_build_runs',\n id: report.run_id,\n version: null,\n bundle_path: report.bundle_path,\n };\n}\n\nfunction build_publish_verification_report(options: {\n now: Date;\n commit: boolean;\n failed: number;\n deferred: number;\n executed: number;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n processBuildRuns: PublishProcessBuildRunReport[];\n}): PublishVerificationReport {\n const ruleset = getRuntimeRuleset('publish-run/default');\n const datasetFindings = [\n ...options.lifecyclemodels,\n ...options.processes,\n ...options.sources,\n ].flatMap((report) =>\n report.status === 'failed'\n ? [dataset_failure_finding(report, `${report.table}_publish_failed`)]\n : [],\n );\n const processBuildRunFindings = options.processBuildRuns.flatMap((report) =>\n report.status === 'failed' ? [process_build_run_failure_finding(report)] : [],\n );\n const blockers = [...datasetFindings, ...processBuildRunFindings];\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n command: 'publish run',\n status: blockers.length > 0 ? 'blocked' : 'passed',\n ruleset_id: PUBLISH_VERIFICATION_RULESET_ID,\n ruleset_version: PUBLISH_VERIFICATION_RULESET_VERSION,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n commit: options.commit,\n findings: blockers,\n blockers,\n next_action: blockers.length > 0 ? 'fix_blockers' : 'ready_for_commit_or_publish',\n counts: {\n findings: blockers.length,\n blockers: blockers.length,\n failed: options.failed,\n deferred: options.deferred,\n executed: options.executed,\n },\n };\n}\n\nexport async function runPublish(options: RunPublishOptions): Promise<PublishReport> {\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const raw = options.rawRequest ?? readJsonInput(requestPath);\n const normalized = normalizePublishRequest(raw, {\n requestPath,\n outDirOverride: options.outDir ?? undefined,\n commitOverride: options.commit ?? undefined,\n now: options.now,\n });\n const collected = collectPublishInputs(normalized, requestDir);\n const now = options.now ?? new Date();\n const outDir = normalized.out_dir;\n const executors = resolve_dataset_executors(options);\n\n const files = {\n normalized_request: path.join(outDir, 'normalized-request.json'),\n collected_inputs: path.join(outDir, 'collected-inputs.json'),\n relation_manifest: path.join(outDir, 'relation-manifest.json'),\n verification_report: path.join(outDir, 'verification-report.json'),\n publish_report: path.join(outDir, 'publish-report.json'),\n };\n\n writeJsonArtifact(files.normalized_request, normalized);\n writeJsonArtifact(files.collected_inputs, collected);\n\n const lifecyclemodels = normalized.publish.publish_lifecyclemodels\n ? await publish_lifecyclemodels(collected.lifecyclemodels, {\n commit: normalized.publish.commit,\n executor: executors.lifecyclemodels,\n publish: normalized.publish,\n })\n : [];\n const processes = normalized.publish.publish_processes\n ? await publish_processes(collected.processes, {\n commit: normalized.publish.commit,\n executor: executors.processes,\n publish: normalized.publish,\n validateProcessPayloadImpl: options.validateProcessPayloadImpl,\n })\n : [];\n const sources = normalized.publish.publish_sources\n ? await publish_sources(collected.sources, {\n commit: normalized.publish.commit,\n executor: executors.sources,\n publish: normalized.publish,\n })\n : [];\n const processBuildRuns = normalized.publish.publish_process_build_runs\n ? await publish_process_build_runs(collected.process_build_runs, {\n commit: normalized.publish.commit,\n executor: executors.process_build_runs,\n publish: normalized.publish,\n })\n : [];\n const relations = build_relation_manifest(collected.relations, normalized.publish, now);\n\n writeJsonArtifact(files.relation_manifest, relations);\n\n const publishEntries = [...lifecyclemodels, ...processes, ...sources, ...processBuildRuns];\n const failed = publishEntries.filter((item) => item.status === 'failed').length;\n const executed = publishEntries.filter((item) => item.status === 'executed').length;\n const deferred = publishEntries.filter((item) => item.status.startsWith('deferred')).length;\n const verification = build_publish_verification_report({\n now,\n commit: normalized.publish.commit,\n failed,\n deferred,\n executed,\n lifecyclemodels,\n processes,\n sources,\n processBuildRuns,\n });\n\n const report: PublishReport = {\n generated_at_utc: now.toISOString(),\n request_path: requestPath,\n out_dir: outDir,\n commit: normalized.publish.commit,\n status: failed > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n bundle_paths: collected.bundle_paths.length,\n lifecyclemodels: lifecyclemodels.length,\n processes: processes.length,\n sources: sources.length,\n relations: relations.relations.length,\n process_build_runs: processBuildRuns.length,\n executed,\n deferred,\n failed,\n },\n files,\n verification,\n lifecyclemodels,\n processes,\n sources,\n process_build_runs: processBuildRuns,\n relations,\n };\n\n writeJsonArtifact(files.verification_report, verification);\n writeJsonArtifact(files.publish_report, report);\n return report;\n}\n\nexport const __testInternals = {\n build_publish_verification_report,\n};\n"]}