@dragonmastery/tamer 0.31.4 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/{apply-C_70Hgcf.mjs → apply-BsVQ9cbK.mjs} +25 -11
- package/dist/apply-BsVQ9cbK.mjs.map +1 -0
- package/dist/{applyTarget-Ce_mtRQX.mjs → applyTarget-BJlVrED9.mjs} +3 -3
- package/dist/{applyTarget-Ce_mtRQX.mjs.map → applyTarget-BJlVrED9.mjs.map} +1 -1
- package/dist/{bootstrap-CQS5s33A.mjs → bootstrap-CV6OT-c9.mjs} +2 -2
- package/dist/{bootstrap-CQS5s33A.mjs.map → bootstrap-CV6OT-c9.mjs.map} +1 -1
- package/dist/{buildDispatchUploadForm-CVnPmHg4.mjs → buildDispatchUploadForm-BNDcS5_9.mjs} +1 -1
- package/dist/{buildDispatchUploadForm-CVnPmHg4.mjs.map → buildDispatchUploadForm-BNDcS5_9.mjs.map} +1 -1
- package/dist/{cloudflareSnapshot-CFErW72O.mjs → cloudflareSnapshot-CMbPQIsN.mjs} +4 -4
- package/dist/{cloudflareSnapshot-CFErW72O.mjs.map → cloudflareSnapshot-CMbPQIsN.mjs.map} +1 -1
- package/dist/{deploy-D-GXzsWR.mjs → deploy-BP65Wvm1.mjs} +18 -7
- package/dist/deploy-BP65Wvm1.mjs.map +1 -0
- package/dist/{destroy-DJRw_qLX.mjs → destroy-DPSuQg9v.mjs} +9 -9
- package/dist/{destroy-DJRw_qLX.mjs.map → destroy-DPSuQg9v.mjs.map} +1 -1
- package/dist/{destroy-tenant-DFHfNImL.mjs → destroy-tenant-hyEb1gEz.mjs} +1 -1
- package/dist/{destroy-tenant-DFHfNImL.mjs.map → destroy-tenant-hyEb1gEz.mjs.map} +1 -1
- package/dist/{dev-caJxohHI.mjs → dev-Bug5l5OZ.mjs} +6 -6
- package/dist/{dev-caJxohHI.mjs.map → dev-Bug5l5OZ.mjs.map} +1 -1
- package/dist/{dns-records.resolve-8a_eHfVI.mjs → dns-records.resolve-BBTlY3T5.mjs} +1 -1
- package/dist/{dns-records.resolve-BB2agPAb.mjs → dns-records.resolve-DV6XBZf3.mjs} +1 -1
- package/dist/{dns-records.resolve-BB2agPAb.mjs.map → dns-records.resolve-DV6XBZf3.mjs.map} +1 -1
- package/dist/{dns-records.sync-Ck0Q2OK3.mjs → dns-records.sync-FyzKl-Ph.mjs} +2 -2
- package/dist/{dns-records.sync-Ck0Q2OK3.mjs.map → dns-records.sync-FyzKl-Ph.mjs.map} +1 -1
- package/dist/{doctor-32YLAXXl.mjs → doctor-BwuEPYM6.mjs} +1 -1
- package/dist/{doctor-32YLAXXl.mjs.map → doctor-BwuEPYM6.mjs.map} +1 -1
- package/dist/{drift-C-qnJ-mH.mjs → drift-Bp-P13-B.mjs} +6 -6
- package/dist/{drift-C-qnJ-mH.mjs.map → drift-Bp-P13-B.mjs.map} +1 -1
- package/dist/drift-RM0vq3uF.mjs +8 -0
- package/dist/emit-DTpaIMkn.mjs +141 -0
- package/dist/emit-DTpaIMkn.mjs.map +1 -0
- package/dist/{events-Bor7XgLC.mjs → events-B7Lencm8.mjs} +1 -1
- package/dist/{events-Bor7XgLC.mjs.map → events-B7Lencm8.mjs.map} +1 -1
- package/dist/{generator-gvCy7ouY.mjs → generator-ZTEeHlft.mjs} +2 -2
- package/dist/{generator-gvCy7ouY.mjs.map → generator-ZTEeHlft.mjs.map} +1 -1
- package/dist/{import-Vn9lhWic.mjs → import-Ciq9MN3v.mjs} +4 -4
- package/dist/{import-Vn9lhWic.mjs.map → import-Ciq9MN3v.mjs.map} +1 -1
- package/dist/index.d.mts +121 -21
- package/dist/index.d.mts.map +1 -1
- package/dist/{logpush-job-DJPlpnRu.mjs → logpush-job-GqVKG_HI.mjs} +1 -1
- package/dist/{logpush-job-DJPlpnRu.mjs.map → logpush-job-GqVKG_HI.mjs.map} +1 -1
- package/dist/{migrate-skvsDG6d.mjs → migrate-ODEnh6Tv.mjs} +4 -4
- package/dist/{migrate-skvsDG6d.mjs.map → migrate-ODEnh6Tv.mjs.map} +1 -1
- package/dist/normalize-DVSTRZhO.mjs.map +1 -1
- package/dist/{plan-BLy8FaE2.mjs → plan-BuG21Atq.mjs} +9 -9
- package/dist/{plan-BLy8FaE2.mjs.map → plan-BuG21Atq.mjs.map} +1 -1
- package/dist/{provision-tenant-CleOYFwr.mjs → provision-tenant-BHDWTC2U.mjs} +3 -3
- package/dist/{provision-tenant-CleOYFwr.mjs.map → provision-tenant-BHDWTC2U.mjs.map} +1 -1
- package/dist/{registry-EWWdkLf7.mjs → registry-BlHEOKlN.mjs} +75 -28
- package/dist/registry-BlHEOKlN.mjs.map +1 -0
- package/dist/{stackOutputs-BLvUMsQO.mjs → stackOutputs-CkpNSng8.mjs} +1 -1
- package/dist/{stackOutputs-BLvUMsQO.mjs.map → stackOutputs-CkpNSng8.mjs.map} +1 -1
- package/dist/{status-BxStsax8.mjs → status-PlMHsDzT.mjs} +5 -5
- package/dist/{status-BxStsax8.mjs.map → status-PlMHsDzT.mjs.map} +1 -1
- package/dist/{sync-KTzMVc_o.mjs → sync-YKZ5HD8v.mjs} +5 -5
- package/dist/{sync-KTzMVc_o.mjs.map → sync-YKZ5HD8v.mjs.map} +1 -1
- package/dist/tamer.mjs +69 -37
- package/dist/tamer.mjs.map +1 -1
- package/dist/{tamerArtifactsR2-DnUJmxnO.mjs → tamerArtifactsR2-Ba29OVp9.mjs} +1 -1
- package/dist/{tamerArtifactsR2-DnUJmxnO.mjs.map → tamerArtifactsR2-Ba29OVp9.mjs.map} +1 -1
- package/dist/{types-D7qKnGsm.mjs → types-DuK39eYA.mjs} +4 -4
- package/dist/{types-D7qKnGsm.mjs.map → types-DuK39eYA.mjs.map} +1 -1
- package/dist/{verifyPlanFile-CR2bELdE.mjs → verifyPlanFile-BBAwWzUo.mjs} +2 -2
- package/dist/{verifyPlanFile-CR2bELdE.mjs.map → verifyPlanFile-BBAwWzUo.mjs.map} +1 -1
- package/dist/{wfp-delete-CDBFqmrM.mjs → wfp-delete-CQc9tveU.mjs} +1 -1
- package/dist/{wfp-delete-CDBFqmrM.mjs.map → wfp-delete-CQc9tveU.mjs.map} +1 -1
- package/dist/{wfp-put-BrwICc9i.mjs → wfp-put-CVw8cloM.mjs} +2 -2
- package/dist/{wfp-put-BrwICc9i.mjs.map → wfp-put-CVw8cloM.mjs.map} +1 -1
- package/dist/{worker-route-tOqVbhv3.mjs → worker-route-CqBDvjgo.mjs} +2 -2
- package/dist/{worker-route-tOqVbhv3.mjs.map → worker-route-CqBDvjgo.mjs.map} +1 -1
- package/dist/{workers-6r2ONF9J.mjs → workers-DAv1ze8_.mjs} +2 -2
- package/dist/{workers-6r2ONF9J.mjs.map → workers-DAv1ze8_.mjs.map} +1 -1
- package/dist/{wranglerSpawn-CUlo2qOJ.mjs → wranglerSpawn-B3TKjpt2.mjs} +1 -1
- package/dist/{wranglerSpawn-CUlo2qOJ.mjs.map → wranglerSpawn-B3TKjpt2.mjs.map} +1 -1
- package/dist/{zoneResolver-DNNNmO_w.mjs → zoneResolver-D9bz6-0l.mjs} +1 -1
- package/dist/{zoneResolver-DNNNmO_w.mjs.map → zoneResolver-D9bz6-0l.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/apply-C_70Hgcf.mjs.map +0 -1
- package/dist/deploy-D-GXzsWR.mjs.map +0 -1
- package/dist/drift-5_LwAdZo.mjs +0 -8
- package/dist/registry-EWWdkLf7.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stackOutputs-
|
|
1
|
+
{"version":3,"file":"stackOutputs-CkpNSng8.mjs","names":["out: Record<string, CfiStackOutputValue>","rows: StackOutputRow[]","status: StackOutputRow[\"status\"]"],"sources":["../src/core/outputs/stackOutputs.ts"],"sourcesContent":["/**\n * Tamer's CloudFormation `Outputs` analogue.\n *\n * `tamer.config.ts > outputs` declares named exports as Tamer reference\n * strings (e.g. `\"${tamer:d1:users.id}\"`). After a successful `apply` the\n * engine resolves every entry against the just-completed state and persists\n * the literal under {@link CfiState.stackOutputs}. Sibling stacks consume\n * them via `${tamer:import:<stackName>.<outputName>}` (added separately).\n *\n * Resolution is **strict**: any unresolved/unknown reference fails the\n * apply (and rolls back when `--rollback-on-failure` is set). Read-only\n * commands like `status` use {@link buildOutputsView} which is tolerant\n * and shows the placeholder verbatim alongside the persisted value.\n */\nimport type {\n CfiConfig,\n CfiStackOutputValue,\n} from \"../../types.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport type { NamingEngine } from \"../naming/NamingEngine.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport {\n resolveReferencesInString,\n TamerReferenceError,\n} from \"../references/references.js\";\n\n/**\n * Resolve every `outputs:` entry against the current state. Throws\n * {@link TamerReferenceError} on the first unresolved reference so a failed\n * apply can roll back instead of silently persisting half-resolved values.\n *\n * Pass an explicit `now` only from tests — production code should let it\n * default to wall-clock so `resolvedAt` reflects the real persist time.\n */\nexport function resolveStackOutputs(\n config: CfiConfig,\n ctx: {\n env: string;\n state: StateManager;\n naming: NamingEngine;\n /**\n * Outputs from sibling stacks pre-fetched by `fetchStackImports`.\n * An output may chain through an import (e.g.\n * `outputs: { region: \"${tamer:import:net.region}\" }`) — strict\n * resolution requires the sibling row to be hydrated already.\n */\n imports?: Record<string, Record<string, string>>;\n /** Same as wrangler / apply `accountId` (for `${tamer:config:stack.account_id}` in outputs). */\n accountId?: string;\n },\n now: () => string = () => new Date().toISOString(),\n): Record<string, CfiStackOutputValue> {\n const outputs = config.outputs;\n if (!outputs || Object.keys(outputs).length === 0) return {};\n const refCtx = {\n config,\n env: ctx.env,\n state: ctx.state,\n naming: ctx.naming,\n tolerant: false,\n imports: ctx.imports,\n accountId: ctx.accountId,\n };\n const resolvedAt = now();\n const out: Record<string, CfiStackOutputValue> = {};\n for (const [name, source] of Object.entries(outputs)) {\n const sourceStr = materializeTamerResolvable(source);\n const value = resolveReferencesInString(\n sourceStr,\n refCtx,\n `outputs.${name}`,\n );\n out[name] = { value, source: sourceStr, resolvedAt };\n }\n return out;\n}\n\n/**\n * One row in the `tamer status` outputs panel. Combines the *declared*\n * source (from `tamer.config.ts`) with the *persisted* value (from state)\n * so operators can see drift between \"what the config says\" and \"what we\n * last resolved\". `value` is `null` when the output is declared but has\n * never been resolved (no `apply` yet), or when a stale persisted entry\n * exists for an output that has since been removed from config.\n */\nexport interface StackOutputRow {\n name: string;\n /** Live source from `tamer.config.ts > outputs[name]`, if still declared. */\n declaredSource: string | undefined;\n /** Persisted resolved literal, if `apply` has run for this output. */\n value: string | null;\n /** Source string at last persist (drifts vs. `declaredSource` after edits). */\n persistedSource: string | undefined;\n /** ISO timestamp of last persist (undefined when never resolved). */\n resolvedAt: string | undefined;\n /**\n * `\"resolved\"` when persisted matches declared source, `\"stale\"` when\n * source has drifted since persist (re-run apply), `\"orphan\"` when\n * persisted but no longer declared, `\"pending\"` when declared but never\n * resolved.\n */\n status: \"resolved\" | \"stale\" | \"orphan\" | \"pending\";\n}\n\n/**\n * Tolerant union of declared + persisted outputs for `tamer status` and the\n * machine-readable `--json` envelope. Never throws.\n */\nexport function buildOutputsView(\n config: CfiConfig,\n state: StateManager,\n): StackOutputRow[] {\n const declared = config.outputs ?? {};\n const persisted = state.getStackOutputs();\n const names = new Set<string>([\n ...Object.keys(declared),\n ...Object.keys(persisted),\n ]);\n const rows: StackOutputRow[] = [];\n for (const name of [...names].sort()) {\n const rawDeclared = declared[name];\n const declaredSource =\n rawDeclared !== undefined ? materializeTamerResolvable(rawDeclared) : undefined;\n const p = persisted[name];\n let status: StackOutputRow[\"status\"];\n if (declaredSource && !p) status = \"pending\";\n else if (!declaredSource && p) status = \"orphan\";\n else if (declaredSource && p && declaredSource !== p.source) status = \"stale\";\n else status = \"resolved\";\n rows.push({\n name,\n declaredSource,\n value: p?.value ?? null,\n persistedSource: p?.source,\n resolvedAt: p?.resolvedAt,\n status,\n });\n }\n return rows;\n}\n\nexport { TamerReferenceError };\n"],"mappings":";;;;;;;;;;;;AAkCA,SAAgB,oBACd,QACA,KAcA,6BAA0B,IAAI,MAAM,EAAC,aAAa,EACb;CACrC,MAAM,UAAU,OAAO;AACvB,KAAI,CAAC,WAAW,OAAO,KAAK,QAAQ,CAAC,WAAW,EAAG,QAAO,EAAE;CAC5D,MAAM,SAAS;EACb;EACA,KAAK,IAAI;EACT,OAAO,IAAI;EACX,QAAQ,IAAI;EACZ,UAAU;EACV,SAAS,IAAI;EACb,WAAW,IAAI;EAChB;CACD,MAAM,aAAa,KAAK;CACxB,MAAMA,MAA2C,EAAE;AACnD,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,YAAY,2BAA2B,OAAO;AAMpD,MAAI,QAAQ;GAAE,OALA,0BACZ,WACA,QACA,WAAW,OACZ;GACoB,QAAQ;GAAW;GAAY;;AAEtD,QAAO;;;;;;AAkCT,SAAgB,iBACd,QACA,OACkB;CAClB,MAAM,WAAW,OAAO,WAAW,EAAE;CACrC,MAAM,YAAY,MAAM,iBAAiB;CACzC,MAAM,QAAQ,IAAI,IAAY,CAC5B,GAAG,OAAO,KAAK,SAAS,EACxB,GAAG,OAAO,KAAK,UAAU,CAC1B,CAAC;CACF,MAAMC,OAAyB,EAAE;AACjC,MAAK,MAAM,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;EACpC,MAAM,cAAc,SAAS;EAC7B,MAAM,iBACJ,gBAAgB,SAAY,2BAA2B,YAAY,GAAG;EACxE,MAAM,IAAI,UAAU;EACpB,IAAIC;AACJ,MAAI,kBAAkB,CAAC,EAAG,UAAS;WAC1B,CAAC,kBAAkB,EAAG,UAAS;WAC/B,kBAAkB,KAAK,mBAAmB,EAAE,OAAQ,UAAS;MACjE,UAAS;AACd,OAAK,KAAK;GACR;GACA;GACA,OAAO,GAAG,SAAS;GACnB,iBAAiB,GAAG;GACpB,YAAY,GAAG;GACf;GACD,CAAC;;AAEJ,QAAO"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
|
|
2
2
|
import { B as getWorkers, E as mergeWorkerConfigForResourcePick, L as CFApiClient, O as resolveDeployedWorkerName, R as cloudflareAccountIdFromEnv, V as loadConfig, f as fetchStackImports, h as StateManager, m as scanConfigForImports, u as namingFromConfig, w as stackNameForConfig, y as tenantStateKey } from "./tamer.mjs";
|
|
3
|
-
import { n as resourceModules } from "./registry-
|
|
3
|
+
import { n as resourceModules } from "./registry-BlHEOKlN.mjs";
|
|
4
4
|
import "./r2S3EmptyBucket-B9_pHfvB.mjs";
|
|
5
|
-
import { r as dnsRecordStateKey, t as dnsRecordAppliesToEnv } from "./dns-records.resolve-
|
|
6
|
-
import { t as logpushJobStatus } from "./logpush-job-
|
|
7
|
-
import { t as buildOutputsView } from "./stackOutputs-
|
|
5
|
+
import { r as dnsRecordStateKey, t as dnsRecordAppliesToEnv } from "./dns-records.resolve-DV6XBZf3.mjs";
|
|
6
|
+
import { t as logpushJobStatus } from "./logpush-job-GqVKG_HI.mjs";
|
|
7
|
+
import { t as buildOutputsView } from "./stackOutputs-CkpNSng8.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/features/dispatch-namespace/dispatch-namespace.status.ts
|
|
10
10
|
function dispatchNamespaceStatus(resources, _env, state, _naming) {
|
|
@@ -193,4 +193,4 @@ async function runStatus(options) {
|
|
|
193
193
|
|
|
194
194
|
//#endregion
|
|
195
195
|
export { runStatus };
|
|
196
|
-
//# sourceMappingURL=status-
|
|
196
|
+
//# sourceMappingURL=status-PlMHsDzT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-BxStsax8.mjs","names":["results: Array<{\n logicalName: string;\n namespace: string;\n status: ResourceStatus;\n }>","rows: DnsRecordStatusRow[]","meta: string[]","siblingImports: Record<string, Record<string, string>>","logpushLive:\n | Awaited<ReturnType<CFApiClient[\"logpushAccountJobsList\"]>>\n | undefined","hints: string[]"],"sources":["../src/features/dispatch-namespace/dispatch-namespace.status.ts","../src/features/dns-records/dns-records.status.ts","../src/cli/commands/status.ts"],"sourcesContent":["import type { DispatchNamespaceResourceConfig } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport type { NamingEngine } from \"../../core/naming/NamingEngine.js\";\nimport type { ResourceStatus } from \"../../types.js\";\n\nexport function dispatchNamespaceStatus(\n resources: DispatchNamespaceResourceConfig[],\n _env: string,\n state: StateManager,\n _naming: NamingEngine,\n): Array<{ logicalName: string; namespace: string; status: ResourceStatus }> {\n const results: Array<{\n logicalName: string;\n namespace: string;\n status: ResourceStatus;\n }> = [];\n\n for (const config of resources) {\n const key = `dispatch_ns:${config.namespace}`;\n const entry = state.get(key);\n results.push({\n logicalName: config.logicalName,\n namespace: config.namespace,\n status:\n entry?.type === \"dispatch_namespace\" ? \"ok\" : \"missing\",\n });\n }\n\n return results;\n}\n","import type { DnsRecordResourceConfig, ResourceStatus } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport {\n dnsRecordAppliesToEnv,\n dnsRecordStateKey,\n} from \"./dns-records.resolve.js\";\n\nexport interface DnsRecordStatusRow {\n logicalName: string;\n type: string;\n name: string;\n recordId?: string;\n status: ResourceStatus;\n}\n\nexport function dnsRecordStatus(\n resources: DnsRecordResourceConfig[],\n env: string,\n state: StateManager,\n): DnsRecordStatusRow[] {\n const rows: DnsRecordStatusRow[] = [];\n for (const config of resources) {\n if (!dnsRecordAppliesToEnv(config, env)) {\n rows.push({\n logicalName: config.logicalName,\n type: config.type,\n name: config.name,\n status: \"ok\",\n });\n continue;\n }\n const entry = state.get(\n dnsRecordStateKey(config.zoneId, config.type, config.name),\n );\n if (entry?.type === \"dns_record\") {\n rows.push({\n logicalName: config.logicalName,\n type: entry.recordType,\n name: entry.name,\n recordId: entry.recordId,\n status: \"ok\",\n });\n } else {\n rows.push({\n logicalName: config.logicalName,\n type: config.type,\n name: config.name,\n status: \"missing\",\n });\n }\n }\n return rows;\n}\n","import { loadConfig, getWorkers } from \"../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../core/config/namingFromConfig.js\";\nimport { StateManager } from \"../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../core/state/stackName.js\";\nimport { CFApiClient } from \"../../core/api/CFApiClient.js\";\nimport { dispatchNamespaceStatus } from \"../../features/dispatch-namespace/index.js\";\nimport { dnsRecordStatus } from \"../../features/dns-records/index.js\";\nimport { getDispatchNamespaces, getDnsRecords, getLogpushJobs } from \"../../types.js\";\nimport { logpushJobStatus } from \"../../features/logpush-job/index.js\";\nimport { tenantStateKey } from \"../../core/tenant/tenantKeys.js\";\nimport { resourceModules } from \"../../core/registry/registry.js\";\nimport {\n resolveDeployedWorkerName,\n mergeWorkerConfigForResourcePick,\n} from \"../../core/config/resolver.js\";\nimport { buildOutputsView } from \"../../core/outputs/stackOutputs.js\";\nimport {\n fetchStackImports,\n scanConfigForImports,\n} from \"../../core/imports/fetchStackImports.js\";\n\nexport async function runStatus(options: {\n env?: string;\n configPath?: string;\n /** `product:workspace` — show only this workspace tenant from state. */\n tenant?: string;\n}): Promise<void> {\n const env = options.env ?? \"local\";\n const configPath = options.configPath;\n const baseDir = process.cwd();\n\n const config = await loadConfig(configPath, { env });\n const accountId =\n config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n const naming = namingFromConfig(config);\n const api = new CFApiClient(accountId);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n\n const workers = await getWorkers(config, baseDir);\n console.log(\n `\\nStatus for ${config.tenant.name} (${config.tenant.slug}) — env: ${env}\\n`,\n );\n\n if (options.tenant?.trim()) {\n const raw = options.tenant.trim();\n const colon = raw.indexOf(\":\");\n if (colon < 1) {\n throw new Error(\n 'status --tenant expects \"product:workspace\" (e.g. todo:acme)',\n );\n }\n const product = raw.slice(0, colon);\n const workspace = raw.slice(colon + 1);\n const t = state.getTenant(product, workspace);\n console.log(`Workspace tenant ${tenantStateKey(product, workspace)}:`);\n if (!t) {\n console.log(\" (no record in tamer state)\\n\");\n return;\n }\n console.log(` status: ${t.provisioningStatus}`);\n console.log(` dispatch namespace: ${t.dispatchNamespaceName}`);\n console.log(` script: ${t.scriptName}`);\n if (t.d1Shards?.length) {\n console.log(\" D1 shards:\");\n for (const s of t.d1Shards) {\n console.log(` ${s.role}: ${s.derivedName} [${s.cfId}]`);\n }\n }\n console.log();\n return;\n }\n\n const outputRows = buildOutputsView(config, state);\n if (outputRows.length > 0) {\n console.log(\"Stack outputs:\");\n for (const r of outputRows) {\n const valueText =\n r.value === null\n ? \"(unresolved — run apply)\"\n : r.value;\n const meta: string[] = [r.status];\n if (r.status === \"stale\" && r.declaredSource) {\n meta.push(`source drifted → ${r.declaredSource}`);\n }\n console.log(` ${r.name}: ${valueText} [${meta.join(\", \")}]`);\n }\n console.log();\n }\n\n // Inbound imports — show every `${tamer:import:<stack>.<output>}`\n // referenced by config, grouped by source stack. We tolerate fetch\n // failures so `tamer status` still works in offline / partial-cred\n // environments; a missing sibling row just displays \"(unresolved)\".\n const importRefs = scanConfigForImports(config);\n let siblingImports: Record<string, Record<string, string>> = {};\n try {\n siblingImports = await fetchStackImports(api, config, env);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`(could not pre-fetch imported stacks: ${msg})`);\n }\n if (importRefs.length > 0) {\n console.log(\"Stack imports:\");\n const byStack = new Map<string, Set<string>>();\n for (const r of importRefs) {\n if (!byStack.has(r.stack)) byStack.set(r.stack, new Set());\n byStack.get(r.stack)!.add(r.output);\n }\n for (const [stack, outputs] of [...byStack].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n console.log(` from stack \"${stack}\":`);\n const stackOutputs = siblingImports[stack] ?? {};\n for (const out of [...outputs].sort()) {\n const v = stackOutputs[out];\n const status = v === undefined ? \"unresolved\" : \"resolved\";\n const value = v ?? \"(missing — run `tamer apply` on that stack)\";\n console.log(` ${out}: ${value} [${status}]`);\n }\n }\n console.log();\n }\n\n const dns = dispatchNamespaceStatus(\n getDispatchNamespaces(config),\n env,\n state,\n naming,\n );\n if (dns.length > 0) {\n console.log(\"Dispatch namespaces:\");\n for (const r of dns) {\n console.log(` ${r.logicalName} (${r.namespace}) [${r.status}]`);\n }\n console.log();\n }\n\n const dnsRows = dnsRecordStatus(getDnsRecords(config), env, state);\n if (dnsRows.length > 0) {\n console.log(\"DNS records:\");\n for (const r of dnsRows) {\n const id = r.recordId ? ` [${r.recordId}]` : \"\";\n console.log(` ${r.logicalName}: ${r.type} ${r.name}${id} [${r.status}]`);\n }\n console.log();\n }\n\n let logpushLive:\n | Awaited<ReturnType<CFApiClient[\"logpushAccountJobsList\"]>>\n | undefined;\n if (env !== \"local\") {\n try {\n logpushLive = await api.logpushAccountJobsList();\n } catch {\n // Token may lack Logpush list; state-only rows still print.\n }\n }\n const logpushRows = logpushJobStatus(\n getLogpushJobs(config),\n config.tenant,\n env,\n state,\n logpushLive,\n );\n if (logpushRows.length > 0) {\n console.log(\"Logpush jobs:\");\n for (const r of logpushRows) {\n const id = r.cfJobId != null ? ` [id ${r.cfJobId}]` : \"\";\n const hints: string[] = [];\n if (r.cfEnabled === false) hints.push(\"disabled on Cloudflare\");\n if (r.cfError) hints.push(`CF error: ${r.cfError}`);\n const hint = hints.length > 0 ? ` — ${hints.join(\"; \")}` : \"\";\n console.log(` ${r.logicalName}: ${r.jobName}${id} [${r.status}]${hint}`);\n }\n console.log();\n }\n\n for (const [workerKey, workerConfig] of workers) {\n console.log(`Worker: ${workerKey}`);\n const deployedName = resolveDeployedWorkerName(\n config,\n workerKey,\n workerConfig,\n env,\n naming,\n );\n const mergedWorker = mergeWorkerConfigForResourcePick(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n { referencesMode: \"tolerant\", imports: siblingImports },\n );\n let printedAny = false;\n for (const mod of resourceModules) {\n const resources = mod.pickResources(mergedWorker);\n if (resources.length === 0) continue;\n const rows = mod.status({\n resources,\n env,\n state,\n naming,\n worker: { workerKey, deployedName },\n });\n if (rows.length === 0) continue;\n printedAny = true;\n console.log(` ${mod.label}:`);\n for (const r of rows) {\n console.log(` ${r.binding}: ${r.name} [${r.status}]`);\n }\n }\n if (!printedAny) console.log(\" (no resources)\");\n console.log();\n }\n}\n"],"mappings":";;;;;;;;;AAKA,SAAgB,wBACd,WACA,MACA,OACA,SAC2E;CAC3E,MAAMA,UAID,EAAE;AAEP,MAAK,MAAM,UAAU,WAAW;EAC9B,MAAM,MAAM,eAAe,OAAO;EAClC,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,UAAQ,KAAK;GACX,aAAa,OAAO;GACpB,WAAW,OAAO;GAClB,QACE,OAAO,SAAS,uBAAuB,OAAO;GACjD,CAAC;;AAGJ,QAAO;;;;;ACbT,SAAgB,gBACd,WACA,KACA,OACsB;CACtB,MAAMC,OAA6B,EAAE;AACrC,MAAK,MAAM,UAAU,WAAW;AAC9B,MAAI,CAAC,sBAAsB,QAAQ,IAAI,EAAE;AACvC,QAAK,KAAK;IACR,aAAa,OAAO;IACpB,MAAM,OAAO;IACb,MAAM,OAAO;IACb,QAAQ;IACT,CAAC;AACF;;EAEF,MAAM,QAAQ,MAAM,IAClB,kBAAkB,OAAO,QAAQ,OAAO,MAAM,OAAO,KAAK,CAC3D;AACD,MAAI,OAAO,SAAS,aAClB,MAAK,KAAK;GACR,aAAa,OAAO;GACpB,MAAM,MAAM;GACZ,MAAM,MAAM;GACZ,UAAU,MAAM;GAChB,QAAQ;GACT,CAAC;MAEF,MAAK,KAAK;GACR,aAAa,OAAO;GACpB,MAAM,OAAO;GACb,MAAM,OAAO;GACb,QAAQ;GACT,CAAC;;AAGN,QAAO;;;;;AC7BT,eAAsB,UAAU,SAKd;CAChB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,aAAa,QAAQ;CAC3B,MAAM,UAAU,QAAQ,KAAK;CAE7B,MAAM,SAAS,MAAM,WAAW,YAAY,EAAE,KAAK,CAAC;CACpD,MAAM,YACJ,OAAO,cAAc,4BAA4B;AACnD,KAAI,CAAC,UACH,OAAM,IAAI,MACR,iEACD;CAEH,MAAM,SAAS,iBAAiB,OAAO;CACvC,MAAM,MAAM,IAAI,YAAY,UAAU;CACtC,MAAM,QAAQ,IAAI,aAChB,OAAO,OAAO,IACd,KACA,mBAAmB,OAAO,CAC3B;AACD,OAAM,MAAM,QAAQ,IAAI;CAExB,MAAM,UAAU,MAAM,WAAW,QAAQ,QAAQ;AACjD,SAAQ,IACN,gBAAgB,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,IAC1E;AAED,KAAI,QAAQ,QAAQ,MAAM,EAAE;EAC1B,MAAM,MAAM,QAAQ,OAAO,MAAM;EACjC,MAAM,QAAQ,IAAI,QAAQ,IAAI;AAC9B,MAAI,QAAQ,EACV,OAAM,IAAI,MACR,iEACD;EAEH,MAAM,UAAU,IAAI,MAAM,GAAG,MAAM;EACnC,MAAM,YAAY,IAAI,MAAM,QAAQ,EAAE;EACtC,MAAM,IAAI,MAAM,UAAU,SAAS,UAAU;AAC7C,UAAQ,IAAI,oBAAoB,eAAe,SAAS,UAAU,CAAC,GAAG;AACtE,MAAI,CAAC,GAAG;AACN,WAAQ,IAAI,iCAAiC;AAC7C;;AAEF,UAAQ,IAAI,aAAa,EAAE,qBAAqB;AAChD,UAAQ,IAAI,yBAAyB,EAAE,wBAAwB;AAC/D,UAAQ,IAAI,aAAa,EAAE,aAAa;AACxC,MAAI,EAAE,UAAU,QAAQ;AACtB,WAAQ,IAAI,eAAe;AAC3B,QAAK,MAAM,KAAK,EAAE,SAChB,SAAQ,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE,YAAY,IAAI,EAAE,KAAK,GAAG;;AAG9D,UAAQ,KAAK;AACb;;CAGF,MAAM,aAAa,iBAAiB,QAAQ,MAAM;AAClD,KAAI,WAAW,SAAS,GAAG;AACzB,UAAQ,IAAI,iBAAiB;AAC7B,OAAK,MAAM,KAAK,YAAY;GAC1B,MAAM,YACJ,EAAE,UAAU,OACR,6BACA,EAAE;GACR,MAAMC,OAAiB,CAAC,EAAE,OAAO;AACjC,OAAI,EAAE,WAAW,WAAW,EAAE,eAC5B,MAAK,KAAK,oBAAoB,EAAE,iBAAiB;AAEnD,WAAQ,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG;;AAE/D,UAAQ,KAAK;;CAOf,MAAM,aAAa,qBAAqB,OAAO;CAC/C,IAAIC,iBAAyD,EAAE;AAC/D,KAAI;AACF,mBAAiB,MAAM,kBAAkB,KAAK,QAAQ,IAAI;UACnD,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,yCAAyC,IAAI,GAAG;;AAE/D,KAAI,WAAW,SAAS,GAAG;AACzB,UAAQ,IAAI,iBAAiB;EAC7B,MAAM,0BAAU,IAAI,KAA0B;AAC9C,OAAK,MAAM,KAAK,YAAY;AAC1B,OAAI,CAAC,QAAQ,IAAI,EAAE,MAAM,CAAE,SAAQ,IAAI,EAAE,uBAAO,IAAI,KAAK,CAAC;AAC1D,WAAQ,IAAI,EAAE,MAAM,CAAE,IAAI,EAAE,OAAO;;AAErC,OAAK,MAAM,CAAC,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OACtD,EAAE,cAAc,EAAE,CACnB,EAAE;AACD,WAAQ,IAAI,iBAAiB,MAAM,IAAI;GACvC,MAAM,eAAe,eAAe,UAAU,EAAE;AAChD,QAAK,MAAM,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;IACrC,MAAM,IAAI,aAAa;IACvB,MAAM,SAAS,MAAM,SAAY,eAAe;IAChD,MAAM,QAAQ,KAAK;AACnB,YAAQ,IAAI,OAAO,IAAI,IAAI,MAAM,IAAI,OAAO,GAAG;;;AAGnD,UAAQ,KAAK;;CAGf,MAAM,MAAM,wBACV,sBAAsB,OAAO,EAC7B,KACA,OACA,OACD;AACD,KAAI,IAAI,SAAS,GAAG;AAClB,UAAQ,IAAI,uBAAuB;AACnC,OAAK,MAAM,KAAK,IACd,SAAQ,IAAI,KAAK,EAAE,YAAY,IAAI,EAAE,UAAU,KAAK,EAAE,OAAO,GAAG;AAElE,UAAQ,KAAK;;CAGf,MAAM,UAAU,gBAAgB,cAAc,OAAO,EAAE,KAAK,MAAM;AAClE,KAAI,QAAQ,SAAS,GAAG;AACtB,UAAQ,IAAI,eAAe;AAC3B,OAAK,MAAM,KAAK,SAAS;GACvB,MAAM,KAAK,EAAE,WAAW,KAAK,EAAE,SAAS,KAAK;AAC7C,WAAQ,IAAI,KAAK,EAAE,YAAY,IAAI,EAAE,KAAK,GAAG,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,GAAG;;AAE3E,UAAQ,KAAK;;CAGf,IAAIC;AAGJ,KAAI,QAAQ,QACV,KAAI;AACF,gBAAc,MAAM,IAAI,wBAAwB;SAC1C;CAIV,MAAM,cAAc,iBAClB,eAAe,OAAO,EACtB,OAAO,QACP,KACA,OACA,YACD;AACD,KAAI,YAAY,SAAS,GAAG;AAC1B,UAAQ,IAAI,gBAAgB;AAC5B,OAAK,MAAM,KAAK,aAAa;GAC3B,MAAM,KAAK,EAAE,WAAW,OAAO,QAAQ,EAAE,QAAQ,KAAK;GACtD,MAAMC,QAAkB,EAAE;AAC1B,OAAI,EAAE,cAAc,MAAO,OAAM,KAAK,yBAAyB;AAC/D,OAAI,EAAE,QAAS,OAAM,KAAK,aAAa,EAAE,UAAU;GACnD,MAAM,OAAO,MAAM,SAAS,IAAI,MAAM,MAAM,KAAK,KAAK,KAAK;AAC3D,WAAQ,IAAI,KAAK,EAAE,YAAY,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO;;AAE3E,UAAQ,KAAK;;AAGf,MAAK,MAAM,CAAC,WAAW,iBAAiB,SAAS;AAC/C,UAAQ,IAAI,WAAW,YAAY;EACnC,MAAM,eAAe,0BACnB,QACA,WACA,cACA,KACA,OACD;EACD,MAAM,eAAe,iCACnB,QACA,WACA,cACA,KACA,WACA,QACA,OACA;GAAE,gBAAgB;GAAY,SAAS;GAAgB,CACxD;EACD,IAAI,aAAa;AACjB,OAAK,MAAM,OAAO,iBAAiB;GACjC,MAAM,YAAY,IAAI,cAAc,aAAa;AACjD,OAAI,UAAU,WAAW,EAAG;GAC5B,MAAM,OAAO,IAAI,OAAO;IACtB;IACA;IACA;IACA;IACA,QAAQ;KAAE;KAAW;KAAc;IACpC,CAAC;AACF,OAAI,KAAK,WAAW,EAAG;AACvB,gBAAa;AACb,WAAQ,IAAI,KAAK,IAAI,MAAM,GAAG;AAC9B,QAAK,MAAM,KAAK,KACd,SAAQ,IAAI,OAAO,EAAE,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE,OAAO,GAAG;;AAG5D,MAAI,CAAC,WAAY,SAAQ,IAAI,mBAAmB;AAChD,UAAQ,KAAK"}
|
|
1
|
+
{"version":3,"file":"status-PlMHsDzT.mjs","names":["results: Array<{\n logicalName: string;\n namespace: string;\n status: ResourceStatus;\n }>","rows: DnsRecordStatusRow[]","meta: string[]","siblingImports: Record<string, Record<string, string>>","logpushLive:\n | Awaited<ReturnType<CFApiClient[\"logpushAccountJobsList\"]>>\n | undefined","hints: string[]"],"sources":["../src/features/dispatch-namespace/dispatch-namespace.status.ts","../src/features/dns-records/dns-records.status.ts","../src/cli/commands/status.ts"],"sourcesContent":["import type { DispatchNamespaceResourceConfig } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport type { NamingEngine } from \"../../core/naming/NamingEngine.js\";\nimport type { ResourceStatus } from \"../../types.js\";\n\nexport function dispatchNamespaceStatus(\n resources: DispatchNamespaceResourceConfig[],\n _env: string,\n state: StateManager,\n _naming: NamingEngine,\n): Array<{ logicalName: string; namespace: string; status: ResourceStatus }> {\n const results: Array<{\n logicalName: string;\n namespace: string;\n status: ResourceStatus;\n }> = [];\n\n for (const config of resources) {\n const key = `dispatch_ns:${config.namespace}`;\n const entry = state.get(key);\n results.push({\n logicalName: config.logicalName,\n namespace: config.namespace,\n status:\n entry?.type === \"dispatch_namespace\" ? \"ok\" : \"missing\",\n });\n }\n\n return results;\n}\n","import type { DnsRecordResourceConfig, ResourceStatus } from \"../../types.js\";\nimport type { StateManager } from \"../../core/state/StateManager.js\";\nimport {\n dnsRecordAppliesToEnv,\n dnsRecordStateKey,\n} from \"./dns-records.resolve.js\";\n\nexport interface DnsRecordStatusRow {\n logicalName: string;\n type: string;\n name: string;\n recordId?: string;\n status: ResourceStatus;\n}\n\nexport function dnsRecordStatus(\n resources: DnsRecordResourceConfig[],\n env: string,\n state: StateManager,\n): DnsRecordStatusRow[] {\n const rows: DnsRecordStatusRow[] = [];\n for (const config of resources) {\n if (!dnsRecordAppliesToEnv(config, env)) {\n rows.push({\n logicalName: config.logicalName,\n type: config.type,\n name: config.name,\n status: \"ok\",\n });\n continue;\n }\n const entry = state.get(\n dnsRecordStateKey(config.zoneId, config.type, config.name),\n );\n if (entry?.type === \"dns_record\") {\n rows.push({\n logicalName: config.logicalName,\n type: entry.recordType,\n name: entry.name,\n recordId: entry.recordId,\n status: \"ok\",\n });\n } else {\n rows.push({\n logicalName: config.logicalName,\n type: config.type,\n name: config.name,\n status: \"missing\",\n });\n }\n }\n return rows;\n}\n","import { loadConfig, getWorkers } from \"../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../core/config/namingFromConfig.js\";\nimport { StateManager } from \"../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../core/state/stackName.js\";\nimport { CFApiClient } from \"../../core/api/CFApiClient.js\";\nimport { dispatchNamespaceStatus } from \"../../features/dispatch-namespace/index.js\";\nimport { dnsRecordStatus } from \"../../features/dns-records/index.js\";\nimport { getDispatchNamespaces, getDnsRecords, getLogpushJobs } from \"../../types.js\";\nimport { logpushJobStatus } from \"../../features/logpush-job/index.js\";\nimport { tenantStateKey } from \"../../core/tenant/tenantKeys.js\";\nimport { resourceModules } from \"../../core/registry/registry.js\";\nimport {\n resolveDeployedWorkerName,\n mergeWorkerConfigForResourcePick,\n} from \"../../core/config/resolver.js\";\nimport { buildOutputsView } from \"../../core/outputs/stackOutputs.js\";\nimport {\n fetchStackImports,\n scanConfigForImports,\n} from \"../../core/imports/fetchStackImports.js\";\n\nexport async function runStatus(options: {\n env?: string;\n configPath?: string;\n /** `product:workspace` — show only this workspace tenant from state. */\n tenant?: string;\n}): Promise<void> {\n const env = options.env ?? \"local\";\n const configPath = options.configPath;\n const baseDir = process.cwd();\n\n const config = await loadConfig(configPath, { env });\n const accountId =\n config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n const naming = namingFromConfig(config);\n const api = new CFApiClient(accountId);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n\n const workers = await getWorkers(config, baseDir);\n console.log(\n `\\nStatus for ${config.tenant.name} (${config.tenant.slug}) — env: ${env}\\n`,\n );\n\n if (options.tenant?.trim()) {\n const raw = options.tenant.trim();\n const colon = raw.indexOf(\":\");\n if (colon < 1) {\n throw new Error(\n 'status --tenant expects \"product:workspace\" (e.g. todo:acme)',\n );\n }\n const product = raw.slice(0, colon);\n const workspace = raw.slice(colon + 1);\n const t = state.getTenant(product, workspace);\n console.log(`Workspace tenant ${tenantStateKey(product, workspace)}:`);\n if (!t) {\n console.log(\" (no record in tamer state)\\n\");\n return;\n }\n console.log(` status: ${t.provisioningStatus}`);\n console.log(` dispatch namespace: ${t.dispatchNamespaceName}`);\n console.log(` script: ${t.scriptName}`);\n if (t.d1Shards?.length) {\n console.log(\" D1 shards:\");\n for (const s of t.d1Shards) {\n console.log(` ${s.role}: ${s.derivedName} [${s.cfId}]`);\n }\n }\n console.log();\n return;\n }\n\n const outputRows = buildOutputsView(config, state);\n if (outputRows.length > 0) {\n console.log(\"Stack outputs:\");\n for (const r of outputRows) {\n const valueText =\n r.value === null\n ? \"(unresolved — run apply)\"\n : r.value;\n const meta: string[] = [r.status];\n if (r.status === \"stale\" && r.declaredSource) {\n meta.push(`source drifted → ${r.declaredSource}`);\n }\n console.log(` ${r.name}: ${valueText} [${meta.join(\", \")}]`);\n }\n console.log();\n }\n\n // Inbound imports — show every `${tamer:import:<stack>.<output>}`\n // referenced by config, grouped by source stack. We tolerate fetch\n // failures so `tamer status` still works in offline / partial-cred\n // environments; a missing sibling row just displays \"(unresolved)\".\n const importRefs = scanConfigForImports(config);\n let siblingImports: Record<string, Record<string, string>> = {};\n try {\n siblingImports = await fetchStackImports(api, config, env);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`(could not pre-fetch imported stacks: ${msg})`);\n }\n if (importRefs.length > 0) {\n console.log(\"Stack imports:\");\n const byStack = new Map<string, Set<string>>();\n for (const r of importRefs) {\n if (!byStack.has(r.stack)) byStack.set(r.stack, new Set());\n byStack.get(r.stack)!.add(r.output);\n }\n for (const [stack, outputs] of [...byStack].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n console.log(` from stack \"${stack}\":`);\n const stackOutputs = siblingImports[stack] ?? {};\n for (const out of [...outputs].sort()) {\n const v = stackOutputs[out];\n const status = v === undefined ? \"unresolved\" : \"resolved\";\n const value = v ?? \"(missing — run `tamer apply` on that stack)\";\n console.log(` ${out}: ${value} [${status}]`);\n }\n }\n console.log();\n }\n\n const dns = dispatchNamespaceStatus(\n getDispatchNamespaces(config),\n env,\n state,\n naming,\n );\n if (dns.length > 0) {\n console.log(\"Dispatch namespaces:\");\n for (const r of dns) {\n console.log(` ${r.logicalName} (${r.namespace}) [${r.status}]`);\n }\n console.log();\n }\n\n const dnsRows = dnsRecordStatus(getDnsRecords(config), env, state);\n if (dnsRows.length > 0) {\n console.log(\"DNS records:\");\n for (const r of dnsRows) {\n const id = r.recordId ? ` [${r.recordId}]` : \"\";\n console.log(` ${r.logicalName}: ${r.type} ${r.name}${id} [${r.status}]`);\n }\n console.log();\n }\n\n let logpushLive:\n | Awaited<ReturnType<CFApiClient[\"logpushAccountJobsList\"]>>\n | undefined;\n if (env !== \"local\") {\n try {\n logpushLive = await api.logpushAccountJobsList();\n } catch {\n // Token may lack Logpush list; state-only rows still print.\n }\n }\n const logpushRows = logpushJobStatus(\n getLogpushJobs(config),\n config.tenant,\n env,\n state,\n logpushLive,\n );\n if (logpushRows.length > 0) {\n console.log(\"Logpush jobs:\");\n for (const r of logpushRows) {\n const id = r.cfJobId != null ? ` [id ${r.cfJobId}]` : \"\";\n const hints: string[] = [];\n if (r.cfEnabled === false) hints.push(\"disabled on Cloudflare\");\n if (r.cfError) hints.push(`CF error: ${r.cfError}`);\n const hint = hints.length > 0 ? ` — ${hints.join(\"; \")}` : \"\";\n console.log(` ${r.logicalName}: ${r.jobName}${id} [${r.status}]${hint}`);\n }\n console.log();\n }\n\n for (const [workerKey, workerConfig] of workers) {\n console.log(`Worker: ${workerKey}`);\n const deployedName = resolveDeployedWorkerName(\n config,\n workerKey,\n workerConfig,\n env,\n naming,\n );\n const mergedWorker = mergeWorkerConfigForResourcePick(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n { referencesMode: \"tolerant\", imports: siblingImports },\n );\n let printedAny = false;\n for (const mod of resourceModules) {\n const resources = mod.pickResources(mergedWorker);\n if (resources.length === 0) continue;\n const rows = mod.status({\n resources,\n env,\n state,\n naming,\n worker: { workerKey, deployedName },\n });\n if (rows.length === 0) continue;\n printedAny = true;\n console.log(` ${mod.label}:`);\n for (const r of rows) {\n console.log(` ${r.binding}: ${r.name} [${r.status}]`);\n }\n }\n if (!printedAny) console.log(\" (no resources)\");\n console.log();\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
|
|
2
2
|
import { B as getWorkers, E as mergeWorkerConfigForResourcePick, L as CFApiClient, R as cloudflareAccountIdFromEnv, V as loadConfig, f as fetchStackImports, h as StateManager, u as namingFromConfig, w as stackNameForConfig } from "./tamer.mjs";
|
|
3
|
-
import { n as resourceModules } from "./registry-
|
|
3
|
+
import { n as resourceModules } from "./registry-BlHEOKlN.mjs";
|
|
4
4
|
import "./r2S3EmptyBucket-B9_pHfvB.mjs";
|
|
5
|
-
import { n as dispatchNamespaceSync, t as dnsRecordSync } from "./dns-records.sync-
|
|
6
|
-
import { i as logpushJobSync } from "./logpush-job-
|
|
7
|
-
import { i as workerRouteSync } from "./worker-route-
|
|
5
|
+
import { n as dispatchNamespaceSync, t as dnsRecordSync } from "./dns-records.sync-FyzKl-Ph.mjs";
|
|
6
|
+
import { i as logpushJobSync } from "./logpush-job-GqVKG_HI.mjs";
|
|
7
|
+
import { i as workerRouteSync } from "./worker-route-CqBDvjgo.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/cli/commands/sync.ts
|
|
10
10
|
async function runSync(options) {
|
|
@@ -85,4 +85,4 @@ async function runSync(options) {
|
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
87
87
|
export { runSync };
|
|
88
|
-
//# sourceMappingURL=sync-
|
|
88
|
+
//# sourceMappingURL=sync-YKZ5HD8v.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-
|
|
1
|
+
{"version":3,"file":"sync-YKZ5HD8v.mjs","names":[],"sources":["../src/cli/commands/sync.ts"],"sourcesContent":["import { loadConfig, getWorkers } from \"../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../core/config/namingFromConfig.js\";\nimport { StateManager } from \"../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../core/state/stackName.js\";\nimport { CFApiClient } from \"../../core/api/CFApiClient.js\";\nimport { dispatchNamespaceSync } from \"../../features/dispatch-namespace/index.js\";\nimport { dnsRecordSync } from \"../../features/dns-records/index.js\";\nimport { getDispatchNamespaces, getDnsRecords, getLogpushJobs } from \"../../types.js\";\nimport { logpushJobSync } from \"../../features/logpush-job/index.js\";\nimport { workerRouteSync } from \"../../features/worker-route/index.js\";\nimport { resourceModules } from \"../../core/registry/registry.js\";\nimport { fetchStackImports } from \"../../core/imports/fetchStackImports.js\";\nimport { mergeWorkerConfigForResourcePick } from \"../../core/config/resolver.js\";\n\nexport async function runSync(options: {\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const env = options.env ?? \"local\";\n const configPath = options.configPath;\n const baseDir = process.cwd();\n\n const config = await loadConfig(configPath, { env });\n const accountId =\n config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n\n const api = new CFApiClient(accountId);\n const naming = namingFromConfig(config);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n // Tolerant pre-fetch: sync runs against existing cloud state, so we\n // pass real import values into worker-route resolution to avoid\n // matching against `${tamer:import:…}` placeholders.\n const imports = await fetchStackImports(api, config, env).catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping cross-stack imports: ${msg}`);\n return {} as Record<string, Record<string, string>>;\n });\n\n async function safeList<T>(\n label: string,\n fn: () => Promise<T[]>,\n ): Promise<T[]> {\n try {\n return await fn();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping ${label}: ${msg}`);\n return [];\n }\n }\n\n const lists = await Promise.all(\n resourceModules.map((m) =>\n safeList(`${m.label} list`, () => m.fetchAll(api)),\n ),\n );\n\n if (getDispatchNamespaces(config).length > 0) {\n try {\n await dispatchNamespaceSync(\n getDispatchNamespaces(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping dispatch namespaces: ${msg}`);\n }\n }\n\n if (getDnsRecords(config).length > 0) {\n try {\n await dnsRecordSync(\n getDnsRecords(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping dns records: ${msg}`);\n }\n }\n\n if (getLogpushJobs(config).length > 0 && env !== \"local\") {\n try {\n await logpushJobSync(\n getLogpushJobs(config),\n config.tenant,\n env,\n api,\n state,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping logpush jobs: ${msg}`);\n }\n }\n\n const workers = await getWorkers(config, baseDir);\n for (const [workerKey, workerConfig] of workers) {\n const mergedWorker = mergeWorkerConfigForResourcePick(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n { referencesMode: \"tolerant\", imports },\n );\n resourceModules.forEach((mod, i) => {\n const resources = mod.pickResources(mergedWorker);\n if (resources.length === 0) return;\n mod.sync({\n resources,\n all: lists[i],\n tenant: config.tenant,\n env,\n api,\n state,\n naming,\n config,\n baseDir,\n });\n });\n }\n\n try {\n await workerRouteSync(env, config, baseDir, accountId, naming, state, api, {\n imports,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[sync] skipping worker routes: ${msg}`);\n }\n\n await state.persist(api);\n console.log(`Synced state for env: ${env}`);\n}\n"],"mappings":";;;;;;;;;AAeA,eAAsB,QAAQ,SAGZ;CAChB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,aAAa,QAAQ;CAC3B,MAAM,UAAU,QAAQ,KAAK;CAE7B,MAAM,SAAS,MAAM,WAAW,YAAY,EAAE,KAAK,CAAC;CACpD,MAAM,YACJ,OAAO,cAAc,4BAA4B;AACnD,KAAI,CAAC,UACH,OAAM,IAAI,MACR,iEACD;CAGH,MAAM,MAAM,IAAI,YAAY,UAAU;CACtC,MAAM,SAAS,iBAAiB,OAAO;CACvC,MAAM,QAAQ,IAAI,aAChB,OAAO,OAAO,IACd,KACA,mBAAmB,OAAO,CAC3B;AACD,OAAM,MAAM,QAAQ,IAAI;CAIxB,MAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ,IAAI,CAAC,OAAO,QAAQ;EACvE,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,wCAAwC,MAAM;AAC3D,SAAO,EAAE;GACT;CAEF,eAAe,SACb,OACA,IACc;AACd,MAAI;AACF,UAAO,MAAM,IAAI;WACV,KAAK;GACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,WAAQ,KAAK,mBAAmB,MAAM,IAAI,MAAM;AAChD,UAAO,EAAE;;;CAIb,MAAM,QAAQ,MAAM,QAAQ,IAC1B,gBAAgB,KAAK,MACnB,SAAS,GAAG,EAAE,MAAM,cAAc,EAAE,SAAS,IAAI,CAAC,CACnD,CACF;AAED,KAAI,sBAAsB,OAAO,CAAC,SAAS,EACzC,KAAI;AACF,QAAM,sBACJ,sBAAsB,OAAO,EAC7B,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,wCAAwC,MAAM;;AAI/D,KAAI,cAAc,OAAO,CAAC,SAAS,EACjC,KAAI;AACF,QAAM,cACJ,cAAc,OAAO,EACrB,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,gCAAgC,MAAM;;AAIvD,KAAI,eAAe,OAAO,CAAC,SAAS,KAAK,QAAQ,QAC/C,KAAI;AACF,QAAM,eACJ,eAAe,OAAO,EACtB,OAAO,QACP,KACA,KACA,MACD;UACM,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,iCAAiC,MAAM;;CAIxD,MAAM,UAAU,MAAM,WAAW,QAAQ,QAAQ;AACjD,MAAK,MAAM,CAAC,WAAW,iBAAiB,SAAS;EAC/C,MAAM,eAAe,iCACnB,QACA,WACA,cACA,KACA,WACA,QACA,OACA;GAAE,gBAAgB;GAAY;GAAS,CACxC;AACD,kBAAgB,SAAS,KAAK,MAAM;GAClC,MAAM,YAAY,IAAI,cAAc,aAAa;AACjD,OAAI,UAAU,WAAW,EAAG;AAC5B,OAAI,KAAK;IACP;IACA,KAAK,MAAM;IACX,QAAQ,OAAO;IACf;IACA;IACA;IACA;IACA;IACA;IACD,CAAC;IACF;;AAGJ,KAAI;AACF,QAAM,gBAAgB,KAAK,QAAQ,SAAS,WAAW,QAAQ,OAAO,KAAK,EACzE,SACD,CAAC;UACK,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,UAAQ,KAAK,kCAAkC,MAAM;;AAGvD,OAAM,MAAM,QAAQ,IAAI;AACxB,SAAQ,IAAI,yBAAyB,MAAM"}
|
package/dist/tamer.mjs
CHANGED
|
@@ -4294,10 +4294,19 @@ const D1ResourceConfigSchema = object({
|
|
|
4294
4294
|
ownership: _enum(["managed", "external"]).optional(),
|
|
4295
4295
|
databaseName: string().optional(),
|
|
4296
4296
|
binding: string().optional(),
|
|
4297
|
+
shardDate: string().optional(),
|
|
4298
|
+
registryRole: string().optional(),
|
|
4299
|
+
legacyIds: array(string().min(1)).optional(),
|
|
4300
|
+
legacyBindings: array(string().min(1)).optional(),
|
|
4301
|
+
current: boolean().optional(),
|
|
4297
4302
|
migrationsDir: string().optional(),
|
|
4298
4303
|
migrationsTable: string().optional(),
|
|
4299
4304
|
preserveOnDestroy: boolean().optional()
|
|
4300
|
-
}).refine((d) => d.ownership !== "external" || typeof d.databaseName === "string" && d.databaseName.length > 0, { error: "resources.d1: ownership 'external' requires non-empty databaseName" }).refine((d) => d.ownership !== "external" || d.type === "single", { error: "resources.d1: ownership 'external' only supports type 'single'" })
|
|
4305
|
+
}).refine((d) => d.ownership !== "external" || typeof d.databaseName === "string" && d.databaseName.length > 0, { error: "resources.d1: ownership 'external' requires non-empty databaseName" }).refine((d) => d.ownership !== "external" || d.type === "single", { error: "resources.d1: ownership 'external' only supports type 'single'" }).refine((d) => !d.shardDate || d.type === "sharded", { error: "resources.d1: shardDate only applies to type 'sharded'" }).refine((d) => {
|
|
4306
|
+
if (!d.shardDate) return true;
|
|
4307
|
+
const t = d.shardDate.trim();
|
|
4308
|
+
return /^\d{4}-\d{2}-\d{2}$/.test(t) || /^\d{8}$/.test(t);
|
|
4309
|
+
}, { error: "resources.d1: shardDate must be YYYY-MM-DD or YYYYMMDD" });
|
|
4301
4310
|
const R2ResourceConfigSchema = object({
|
|
4302
4311
|
logicalName: string().min(1),
|
|
4303
4312
|
cloudflareName: CloudflareNameFnSchema,
|
|
@@ -4514,11 +4523,18 @@ const WorkerConfigSchema = object({
|
|
|
4514
4523
|
route: union([WranglerRouteSchema, array(WranglerRouteSchema)]).optional(),
|
|
4515
4524
|
routes: array(WranglerRouteSchema).optional()
|
|
4516
4525
|
}).passthrough();
|
|
4526
|
+
const ShardRegistryCodegenConfigSchema = object({
|
|
4527
|
+
worker: string().min(1).optional(),
|
|
4528
|
+
outFile: string().min(1).optional(),
|
|
4529
|
+
exportName: string().min(1).regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/, { error: "codegen.shardRegistry.exportName must be a valid JS identifier" }).optional()
|
|
4530
|
+
});
|
|
4531
|
+
const CodegenConfigSchema = object({ shardRegistry: ShardRegistryCodegenConfigSchema.optional() });
|
|
4517
4532
|
const CfiConfigSchema = object({
|
|
4518
4533
|
tenant: TenantMetaSchema,
|
|
4519
4534
|
account_id: string().optional(),
|
|
4520
4535
|
compatibility_date: string().optional(),
|
|
4521
4536
|
naming: any().optional(),
|
|
4537
|
+
codegen: CodegenConfigSchema.optional(),
|
|
4522
4538
|
dispatchNamespaces: array(DispatchNamespaceResourceSchema).optional(),
|
|
4523
4539
|
dnsRecords: array(DnsRecordResourceConfigSchema).optional(),
|
|
4524
4540
|
logpushJobs: array(LogpushJobResourceConfigSchema).optional(),
|
|
@@ -8041,13 +8057,7 @@ function secretsDrift(entries) {
|
|
|
8041
8057
|
detail: "removed from vault"
|
|
8042
8058
|
});
|
|
8043
8059
|
break;
|
|
8044
|
-
case "undeclared_on_worker":
|
|
8045
|
-
drift.unrecordedInState.push({
|
|
8046
|
-
logicalName: e.name,
|
|
8047
|
-
derivedName,
|
|
8048
|
-
detail: "undeclared on worker"
|
|
8049
|
-
});
|
|
8050
|
-
break;
|
|
8060
|
+
case "undeclared_on_worker": break;
|
|
8051
8061
|
}
|
|
8052
8062
|
}
|
|
8053
8063
|
return drift;
|
|
@@ -8102,8 +8112,20 @@ const STATUS_LABEL = {
|
|
|
8102
8112
|
never_deployed: "never deployed",
|
|
8103
8113
|
rotated_not_deployed: "rotated, not deployed",
|
|
8104
8114
|
removed_from_vault: "removed from vault",
|
|
8105
|
-
undeclared_on_worker: "
|
|
8115
|
+
undeclared_on_worker: "not in secrets.required"
|
|
8106
8116
|
};
|
|
8117
|
+
function isDeclaredIssue(status) {
|
|
8118
|
+
return status !== "in_sync" && status !== "undeclared_on_worker";
|
|
8119
|
+
}
|
|
8120
|
+
function sortEntries(entries) {
|
|
8121
|
+
return [...entries].sort((a, b) => secretDerivedName(a.worker, a.name).localeCompare(secretDerivedName(b.worker, b.name)));
|
|
8122
|
+
}
|
|
8123
|
+
function printEntry(entry) {
|
|
8124
|
+
const label = STATUS_LABEL[entry.status];
|
|
8125
|
+
const id = secretDerivedName(entry.worker, entry.name);
|
|
8126
|
+
const workerFlag = entry.onWorker ? "on worker" : "not on worker";
|
|
8127
|
+
console.log(` ${id} ${label} (${workerFlag})`);
|
|
8128
|
+
}
|
|
8107
8129
|
async function runSecretsVerify(options) {
|
|
8108
8130
|
const ctx = await createSecretsContext({
|
|
8109
8131
|
env: options.env,
|
|
@@ -8123,21 +8145,31 @@ async function runSecretsVerify(options) {
|
|
|
8123
8145
|
vault: vaultReaderFromVault(ctx.vault),
|
|
8124
8146
|
state: ctx.state
|
|
8125
8147
|
});
|
|
8148
|
+
const declared = sortEntries(entries.filter((e) => e.status !== "undeclared_on_worker"));
|
|
8149
|
+
const onWorkerOnly = sortEntries(entries.filter((e) => e.status === "undeclared_on_worker"));
|
|
8126
8150
|
console.log(`\nSecrets verify — env ${ctx.env}\n`);
|
|
8127
|
-
if (
|
|
8151
|
+
if (declared.length === 0 && onWorkerOnly.length === 0) {
|
|
8128
8152
|
console.log(" (no declared secrets)\n");
|
|
8129
8153
|
return 0;
|
|
8130
8154
|
}
|
|
8131
|
-
|
|
8132
|
-
|
|
8133
|
-
const
|
|
8134
|
-
|
|
8135
|
-
|
|
8136
|
-
|
|
8137
|
-
|
|
8155
|
+
if (declared.length > 0) {
|
|
8156
|
+
console.log(" Declared in config (secrets.required):\n");
|
|
8157
|
+
for (const entry of declared) printEntry(entry);
|
|
8158
|
+
console.log("");
|
|
8159
|
+
}
|
|
8160
|
+
if (onWorkerOnly.length > 0) {
|
|
8161
|
+
console.log(" On worker, not in secrets.required (outside Tamer management — add to config or remove from worker):\n");
|
|
8162
|
+
for (const entry of onWorkerOnly) printEntry(entry);
|
|
8163
|
+
console.log("");
|
|
8164
|
+
}
|
|
8165
|
+
const declaredIssues = declared.filter((e) => isDeclaredIssue(e.status)).length;
|
|
8166
|
+
if (declaredIssues === 0) {
|
|
8167
|
+
const suffix = onWorkerOnly.length > 0 ? ` (${onWorkerOnly.length} on worker but not in config — informational only)` : "";
|
|
8168
|
+
console.log(`All declared secrets in sync.${suffix}\n`);
|
|
8169
|
+
return 0;
|
|
8138
8170
|
}
|
|
8139
|
-
console.log(
|
|
8140
|
-
return
|
|
8171
|
+
console.log(`${declaredIssues} declared secret(s) need attention.\n`);
|
|
8172
|
+
return 1;
|
|
8141
8173
|
}
|
|
8142
8174
|
|
|
8143
8175
|
//#endregion
|
|
@@ -8622,14 +8654,14 @@ async function main() {
|
|
|
8622
8654
|
try {
|
|
8623
8655
|
switch (command) {
|
|
8624
8656
|
case "bootstrap":
|
|
8625
|
-
await import("./bootstrap-
|
|
8657
|
+
await import("./bootstrap-CV6OT-c9.mjs").then((m) => m.runBootstrap(parseBootstrapArgs(rest)));
|
|
8626
8658
|
break;
|
|
8627
8659
|
case "sync":
|
|
8628
|
-
await import("./sync-
|
|
8660
|
+
await import("./sync-YKZ5HD8v.mjs").then((m) => m.runSync(parseSyncArgs(rest)));
|
|
8629
8661
|
break;
|
|
8630
8662
|
case "apply": {
|
|
8631
8663
|
const a = parseApplyArgs(rest);
|
|
8632
|
-
await import("./apply-
|
|
8664
|
+
await import("./apply-BsVQ9cbK.mjs").then((m) => m.runApply({
|
|
8633
8665
|
env: a.env,
|
|
8634
8666
|
addShard: a.addShard,
|
|
8635
8667
|
configPath: a.configPath,
|
|
@@ -8641,11 +8673,11 @@ async function main() {
|
|
|
8641
8673
|
break;
|
|
8642
8674
|
}
|
|
8643
8675
|
case "dev":
|
|
8644
|
-
await import("./dev-
|
|
8676
|
+
await import("./dev-Bug5l5OZ.mjs").then((m) => m.runDev(parseDevArgs(rest)));
|
|
8645
8677
|
break;
|
|
8646
8678
|
case "deploy": {
|
|
8647
8679
|
const d = parseDeployArgs(rest);
|
|
8648
|
-
await import("./deploy-
|
|
8680
|
+
await import("./deploy-BP65Wvm1.mjs").then((m) => m.runDeploy({
|
|
8649
8681
|
worker: d.worker,
|
|
8650
8682
|
env: d.env,
|
|
8651
8683
|
configPath: d.configPath,
|
|
@@ -8654,23 +8686,23 @@ async function main() {
|
|
|
8654
8686
|
break;
|
|
8655
8687
|
}
|
|
8656
8688
|
case "migrate":
|
|
8657
|
-
await import("./migrate-
|
|
8689
|
+
await import("./migrate-ODEnh6Tv.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
|
|
8658
8690
|
break;
|
|
8659
8691
|
case "types":
|
|
8660
|
-
await import("./types-
|
|
8692
|
+
await import("./types-DuK39eYA.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
|
|
8661
8693
|
break;
|
|
8662
8694
|
case "status":
|
|
8663
|
-
await import("./status-
|
|
8695
|
+
await import("./status-PlMHsDzT.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
|
|
8664
8696
|
break;
|
|
8665
8697
|
case "events":
|
|
8666
|
-
await import("./events-
|
|
8698
|
+
await import("./events-B7Lencm8.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
|
|
8667
8699
|
break;
|
|
8668
8700
|
case "drift":
|
|
8669
|
-
exitStatus = await import("./drift-
|
|
8701
|
+
exitStatus = await import("./drift-RM0vq3uF.mjs").then((m) => m.runDrift(parseDriftArgs(rest)));
|
|
8670
8702
|
break;
|
|
8671
8703
|
case "plan": {
|
|
8672
8704
|
const p = parsePlanArgs(rest);
|
|
8673
|
-
exitStatus = await import("./plan-
|
|
8705
|
+
exitStatus = await import("./plan-BuG21Atq.mjs").then((m) => m.runPlan({
|
|
8674
8706
|
env: p.env,
|
|
8675
8707
|
configPath: p.configPath,
|
|
8676
8708
|
json: p.json,
|
|
@@ -8682,14 +8714,14 @@ async function main() {
|
|
|
8682
8714
|
break;
|
|
8683
8715
|
}
|
|
8684
8716
|
case "import":
|
|
8685
|
-
await import("./import-
|
|
8717
|
+
await import("./import-Ciq9MN3v.mjs").then((m) => m.runImport(parseImportArgs(rest)));
|
|
8686
8718
|
break;
|
|
8687
8719
|
case "doctor":
|
|
8688
|
-
exitStatus = await import("./doctor-
|
|
8720
|
+
exitStatus = await import("./doctor-BwuEPYM6.mjs").then((m) => m.runDoctor(parseDoctorArgs(rest)));
|
|
8689
8721
|
break;
|
|
8690
8722
|
case "provision-tenant": {
|
|
8691
8723
|
const p = parseProvisionTenantArgs(rest);
|
|
8692
|
-
await import("./provision-tenant-
|
|
8724
|
+
await import("./provision-tenant-BHDWTC2U.mjs").then((m) => m.runProvisionTenant({
|
|
8693
8725
|
env: p.env,
|
|
8694
8726
|
product: p.product,
|
|
8695
8727
|
workspace: p.workspace,
|
|
@@ -8706,7 +8738,7 @@ async function main() {
|
|
|
8706
8738
|
}
|
|
8707
8739
|
case "destroy-tenant": {
|
|
8708
8740
|
const t = parseDestroyTenantArgs(rest);
|
|
8709
|
-
await import("./destroy-tenant-
|
|
8741
|
+
await import("./destroy-tenant-hyEb1gEz.mjs").then((m) => m.runDestroyTenant({
|
|
8710
8742
|
env: t.env,
|
|
8711
8743
|
product: t.product,
|
|
8712
8744
|
workspace: t.workspace,
|
|
@@ -8719,7 +8751,7 @@ async function main() {
|
|
|
8719
8751
|
}
|
|
8720
8752
|
case "destroy": {
|
|
8721
8753
|
const d = parseDestroyArgs(rest);
|
|
8722
|
-
await import("./destroy-
|
|
8754
|
+
await import("./destroy-DPSuQg9v.mjs").then((m) => m.runDestroy({
|
|
8723
8755
|
env: d.env,
|
|
8724
8756
|
force: d.force,
|
|
8725
8757
|
skipWorkers: d.skipWorkers,
|
|
@@ -8734,12 +8766,12 @@ async function main() {
|
|
|
8734
8766
|
case "wfp": {
|
|
8735
8767
|
const [sub, ...wfpRest] = rest;
|
|
8736
8768
|
if (sub === "put") {
|
|
8737
|
-
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-
|
|
8769
|
+
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-CVw8cloM.mjs");
|
|
8738
8770
|
await runWfpPut(parseWfpPutArgs(wfpRest));
|
|
8739
8771
|
break;
|
|
8740
8772
|
}
|
|
8741
8773
|
if (sub === "delete") {
|
|
8742
|
-
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-
|
|
8774
|
+
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-CQc9tveU.mjs");
|
|
8743
8775
|
await runWfpDelete(parseWfpDeleteArgs(wfpRest));
|
|
8744
8776
|
break;
|
|
8745
8777
|
}
|