@dragonmastery/tamer 0.35.3 → 0.35.4

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.
Files changed (64) hide show
  1. package/dist/{apply-Cz1lxAOp.mjs → apply-BL5JfcZI.mjs} +11 -11
  2. package/dist/apply-BL5JfcZI.mjs.map +1 -0
  3. package/dist/{applyTarget-BI6QAVwA.mjs → applyTarget-BJlVrED9.mjs} +2 -2
  4. package/dist/{applyTarget-BI6QAVwA.mjs.map → applyTarget-BJlVrED9.mjs.map} +1 -1
  5. package/dist/{bootstrap-CsL4IT9Z.mjs → bootstrap-BYxkCI8L.mjs} +2 -2
  6. package/dist/{bootstrap-CsL4IT9Z.mjs.map → bootstrap-BYxkCI8L.mjs.map} +1 -1
  7. package/dist/{cloudflareSnapshot-CpNFH4zd.mjs → cloudflareSnapshot-CjPk6xYL.mjs} +3 -3
  8. package/dist/{cloudflareSnapshot-CpNFH4zd.mjs.map → cloudflareSnapshot-CjPk6xYL.mjs.map} +1 -1
  9. package/dist/{deploy-D2tQrtN9.mjs → deploy-DxUCsnnc.mjs} +8 -8
  10. package/dist/deploy-DxUCsnnc.mjs.map +1 -0
  11. package/dist/{destroy-CEv14T0X.mjs → destroy-BtHfgI6x.mjs} +9 -9
  12. package/dist/destroy-BtHfgI6x.mjs.map +1 -0
  13. package/dist/{destroy-tenant-Ugu7Y1EH.mjs → destroy-tenant-CT_uzdl7.mjs} +2 -2
  14. package/dist/{destroy-tenant-Ugu7Y1EH.mjs.map → destroy-tenant-CT_uzdl7.mjs.map} +1 -1
  15. package/dist/{dev-vGQIP7tD.mjs → dev-BTBTiCyd.mjs} +7 -7
  16. package/dist/dev-BTBTiCyd.mjs.map +1 -0
  17. package/dist/{drift-C3wIrNyg.mjs → drift-1nXkTBh5.mjs} +4 -4
  18. package/dist/{drift-C7pgj4Iw.mjs → drift-pb0PoOfK.mjs} +6 -6
  19. package/dist/drift-pb0PoOfK.mjs.map +1 -0
  20. package/dist/{emit-vpibELHm.mjs → emit-TUYG7bi5.mjs} +2 -2
  21. package/dist/{emit-vpibELHm.mjs.map → emit-TUYG7bi5.mjs.map} +1 -1
  22. package/dist/{events-yk4J3l0M.mjs → events-B0bvWdiQ.mjs} +2 -2
  23. package/dist/{events-yk4J3l0M.mjs.map → events-B0bvWdiQ.mjs.map} +1 -1
  24. package/dist/{generator-7b97QsuM.mjs → generator-ZTEeHlft.mjs} +2 -2
  25. package/dist/{generator-7b97QsuM.mjs.map → generator-ZTEeHlft.mjs.map} +1 -1
  26. package/dist/{import-CZ6509_t.mjs → import-yXAfQXg2.mjs} +4 -4
  27. package/dist/import-yXAfQXg2.mjs.map +1 -0
  28. package/dist/{migrate-DDBMzPtR.mjs → migrate-C0xs4MUW.mjs} +5 -5
  29. package/dist/migrate-C0xs4MUW.mjs.map +1 -0
  30. package/dist/{plan-Dot2VV7R.mjs → plan-C8oQWM35.mjs} +8 -8
  31. package/dist/{plan-Dot2VV7R.mjs.map → plan-C8oQWM35.mjs.map} +1 -1
  32. package/dist/{provision-tenant-C2EL79oz.mjs → provision-tenant-Dh3-p5ZK.mjs} +2 -2
  33. package/dist/{provision-tenant-C2EL79oz.mjs.map → provision-tenant-Dh3-p5ZK.mjs.map} +1 -1
  34. package/dist/{registry-D-vo1TTV.mjs → registry-BlHEOKlN.mjs} +2 -2
  35. package/dist/{registry-D-vo1TTV.mjs.map → registry-BlHEOKlN.mjs.map} +1 -1
  36. package/dist/{status-_k3a77Fw.mjs → status-CZBPBtNy.mjs} +4 -4
  37. package/dist/status-CZBPBtNy.mjs.map +1 -0
  38. package/dist/{sync-C5RjLfgk.mjs → sync-Cjml_emC.mjs} +5 -5
  39. package/dist/sync-Cjml_emC.mjs.map +1 -0
  40. package/dist/tamer.mjs +78 -48
  41. package/dist/tamer.mjs.map +1 -1
  42. package/dist/{types-CqmFeIBf.mjs → types-CN3DpOC2.mjs} +5 -5
  43. package/dist/types-CN3DpOC2.mjs.map +1 -0
  44. package/dist/{verifyPlanFile-DSO-yS64.mjs → verifyPlanFile-DxO0Ad6o.mjs} +2 -2
  45. package/dist/{verifyPlanFile-DSO-yS64.mjs.map → verifyPlanFile-DxO0Ad6o.mjs.map} +1 -1
  46. package/dist/{wfp-delete-C-1pIY3Z.mjs → wfp-delete-DJXpe2B7.mjs} +2 -2
  47. package/dist/{wfp-delete-C-1pIY3Z.mjs.map → wfp-delete-DJXpe2B7.mjs.map} +1 -1
  48. package/dist/{wfp-put-D0tDs0J5.mjs → wfp-put-BMSAGpZ6.mjs} +2 -2
  49. package/dist/{wfp-put-D0tDs0J5.mjs.map → wfp-put-BMSAGpZ6.mjs.map} +1 -1
  50. package/dist/{worker-route-RexL6xCk.mjs → worker-route-C7kgtUXH.mjs} +2 -2
  51. package/dist/{worker-route-RexL6xCk.mjs.map → worker-route-C7kgtUXH.mjs.map} +1 -1
  52. package/dist/{workers-CS0tlbdk.mjs → workers-Bq1AY8aB.mjs} +2 -2
  53. package/dist/{workers-CS0tlbdk.mjs.map → workers-Bq1AY8aB.mjs.map} +1 -1
  54. package/package.json +1 -1
  55. package/dist/apply-Cz1lxAOp.mjs.map +0 -1
  56. package/dist/deploy-D2tQrtN9.mjs.map +0 -1
  57. package/dist/destroy-CEv14T0X.mjs.map +0 -1
  58. package/dist/dev-vGQIP7tD.mjs.map +0 -1
  59. package/dist/drift-C7pgj4Iw.mjs.map +0 -1
  60. package/dist/import-CZ6509_t.mjs.map +0 -1
  61. package/dist/migrate-DDBMzPtR.mjs.map +0 -1
  62. package/dist/status-_k3a77Fw.mjs.map +0 -1
  63. package/dist/sync-C5RjLfgk.mjs.map +0 -1
  64. package/dist/types-CqmFeIBf.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
2
- import { B as loadConfig, C as stackNameForConfig, D as resolveDeployedWorkerName, I as CFApiClient, L as cloudflareAccountIdFromEnv, T as mergeWorkerConfigForResourcePick, f as fetchStackImports, h as StateManager, m as scanConfigForImports, u as namingFromConfig, y as tenantStateKey, z as getWorkers } from "./tamer.mjs";
3
- import { n as resourceModules } from "./registry-D-vo1TTV.mjs";
2
+ import { B as getWorkers, C as stackNameForConfig, D as resolveDeployedWorkerName, I as CFApiClient, L as cloudflareAccountIdFromEnv, T as mergeWorkerConfigForResourcePick, V as loadConfig, f as fetchStackImports, h as StateManager, m as scanConfigForImports, u as namingFromConfig, y as tenantStateKey, z as getConfigBaseDir } from "./tamer.mjs";
3
+ import { n as resourceModules } from "./registry-BlHEOKlN.mjs";
4
4
  import "./r2S3EmptyBucket-B9_pHfvB.mjs";
5
5
  import { r as dnsRecordStateKey, t as dnsRecordAppliesToEnv } from "./dns-records.resolve-DV6XBZf3.mjs";
6
6
  import { t as logpushJobStatus } from "./logpush-job-GqVKG_HI.mjs";
@@ -58,8 +58,8 @@ function dnsRecordStatus(resources, env, state) {
58
58
  async function runStatus(options) {
59
59
  const env = options.env ?? "local";
60
60
  const configPath = options.configPath;
61
- const baseDir = process.cwd();
62
61
  const config = await loadConfig(configPath, { env });
62
+ const baseDir = getConfigBaseDir();
63
63
  const accountId = config.account_id ?? cloudflareAccountIdFromEnv();
64
64
  if (!accountId) throw new Error("account_id required in config or CLOUDFLARE_ACCOUNT_ID env var");
65
65
  const naming = namingFromConfig(config);
@@ -193,4 +193,4 @@ async function runStatus(options) {
193
193
 
194
194
  //#endregion
195
195
  export { runStatus };
196
- //# sourceMappingURL=status-_k3a77Fw.mjs.map
196
+ //# sourceMappingURL=status-CZBPBtNy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-CZBPBtNy.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, getConfigBaseDir } 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\n const config = await loadConfig(configPath, { env });\n const baseDir = getConfigBaseDir();\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,17 +1,17 @@
1
1
  import { f as getDispatchNamespaces, m as getLogpushJobs, p as getDnsRecords } from "./normalize-DVSTRZhO.mjs";
2
- import { B as loadConfig, C as stackNameForConfig, I as CFApiClient, L as cloudflareAccountIdFromEnv, T as mergeWorkerConfigForResourcePick, f as fetchStackImports, h as StateManager, u as namingFromConfig, z as getWorkers } from "./tamer.mjs";
3
- import { n as resourceModules } from "./registry-D-vo1TTV.mjs";
2
+ import { B as getWorkers, C as stackNameForConfig, I as CFApiClient, L as cloudflareAccountIdFromEnv, T as mergeWorkerConfigForResourcePick, V as loadConfig, f as fetchStackImports, h as StateManager, u as namingFromConfig, z as getConfigBaseDir } from "./tamer.mjs";
3
+ import { n as resourceModules } from "./registry-BlHEOKlN.mjs";
4
4
  import "./r2S3EmptyBucket-B9_pHfvB.mjs";
5
5
  import { n as dispatchNamespaceSync, t as dnsRecordSync } from "./dns-records.sync-PoahWQjY.mjs";
6
6
  import { i as logpushJobSync } from "./logpush-job-GqVKG_HI.mjs";
7
- import { i as workerRouteSync } from "./worker-route-RexL6xCk.mjs";
7
+ import { i as workerRouteSync } from "./worker-route-C7kgtUXH.mjs";
8
8
 
9
9
  //#region src/cli/commands/sync.ts
10
10
  async function runSync(options) {
11
11
  const env = options.env ?? "local";
12
12
  const configPath = options.configPath;
13
- const baseDir = process.cwd();
14
13
  const config = await loadConfig(configPath, { env });
14
+ const baseDir = getConfigBaseDir();
15
15
  const accountId = config.account_id ?? cloudflareAccountIdFromEnv();
16
16
  if (!accountId) throw new Error("account_id required in config or CLOUDFLARE_ACCOUNT_ID env var");
17
17
  const api = new CFApiClient(accountId);
@@ -85,4 +85,4 @@ async function runSync(options) {
85
85
 
86
86
  //#endregion
87
87
  export { runSync };
88
- //# sourceMappingURL=sync-C5RjLfgk.mjs.map
88
+ //# sourceMappingURL=sync-Cjml_emC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-Cjml_emC.mjs","names":[],"sources":["../src/cli/commands/sync.ts"],"sourcesContent":["import { loadConfig, getWorkers, getConfigBaseDir } 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\n const config = await loadConfig(configPath, { env });\n const baseDir = getConfigBaseDir();\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;CAE3B,MAAM,SAAS,MAAM,WAAW,YAAY,EAAE,KAAK,CAAC;CACpD,MAAM,UAAU,kBAAkB;CAClC,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
@@ -4206,7 +4206,41 @@ function rejectLegacyTamerConfigFile(context) {
4206
4206
  throw new Error(`${context}: tamer.config.ts is not supported. Move the default export to tamer/project.config.ts and optional per-env overlays to tamer/env/<env>.config.ts (or use tamer.project.config.ts at the repo root with optional tamer.env.<env>.ts).`);
4207
4207
  }
4208
4208
  /**
4209
- * Resolve which config file(s) to load. See docs/design-tamer-project-config.md.
4209
+ * Check a single directory for Tamer config files. Returns the resolved
4210
+ * sources if found, or undefined to continue walking up.
4211
+ */
4212
+ function checkDir(dir, env) {
4213
+ const nestedProject = resolve(dir, "tamer", "project.config.ts");
4214
+ if (existsSync(nestedProject)) {
4215
+ let overlay = null;
4216
+ if (env) {
4217
+ const candidate = overlayPathForNestedLayout(dirname(nestedProject), env);
4218
+ if (existsSync(candidate)) overlay = candidate;
4219
+ }
4220
+ return {
4221
+ mode: "merged",
4222
+ projectPath: nestedProject,
4223
+ overlayPath: overlay
4224
+ };
4225
+ }
4226
+ const flatProject = resolve(dir, "tamer.project.config.ts");
4227
+ if (existsSync(flatProject)) {
4228
+ let overlay = null;
4229
+ if (env) {
4230
+ const candidate = overlayPathForFlatLayout(dir, env);
4231
+ if (existsSync(candidate)) overlay = candidate;
4232
+ }
4233
+ return {
4234
+ mode: "merged",
4235
+ projectPath: flatProject,
4236
+ overlayPath: overlay
4237
+ };
4238
+ }
4239
+ if (existsSync(resolve(dir, "tamer.config.ts"))) rejectLegacyTamerConfigFile("Config discovery");
4240
+ }
4241
+ /**
4242
+ * Resolve which config file(s) to load. Walks up from `cwd` to the filesystem
4243
+ * root, so commands work from any subdirectory (like `git` or `npm`).
4210
4244
  *
4211
4245
  * - **Merged:** `tamer/project.config.ts` or `tamer.project.config.ts`, plus optional env overlay.
4212
4246
  * - **Single:** explicit `--config` path to any `.ts` file **except** `tamer.config.ts` (e.g. alternate snapshots in tests).
@@ -4237,34 +4271,15 @@ function resolveConfigSources(cwd, explicitConfigPath, env) {
4237
4271
  path: abs
4238
4272
  };
4239
4273
  }
4240
- const nestedProject = resolve(cwd, "tamer", "project.config.ts");
4241
- if (existsSync(nestedProject)) {
4242
- let overlay = null;
4243
- if (env) {
4244
- const candidate = overlayPathForNestedLayout(dirname(nestedProject), env);
4245
- if (existsSync(candidate)) overlay = candidate;
4246
- }
4247
- return {
4248
- mode: "merged",
4249
- projectPath: nestedProject,
4250
- overlayPath: overlay
4251
- };
4274
+ let dir = cwd;
4275
+ for (;;) {
4276
+ const found = checkDir(dir, env);
4277
+ if (found) return found;
4278
+ const parent = dirname(dir);
4279
+ if (parent === dir) break;
4280
+ dir = parent;
4252
4281
  }
4253
- const flatProject = resolve(cwd, "tamer.project.config.ts");
4254
- if (existsSync(flatProject)) {
4255
- let overlay = null;
4256
- if (env) {
4257
- const candidate = overlayPathForFlatLayout(cwd, env);
4258
- if (existsSync(candidate)) overlay = candidate;
4259
- }
4260
- return {
4261
- mode: "merged",
4262
- projectPath: flatProject,
4263
- overlayPath: overlay
4264
- };
4265
- }
4266
- if (existsSync(resolve(cwd, "tamer.config.ts"))) rejectLegacyTamerConfigFile("Config discovery");
4267
- throw new Error(`No Tamer project config under ${cwd}. Create tamer/project.config.ts (or tamer.project.config.ts at the repo root).`);
4282
+ throw new Error(`No Tamer project config found walking up from ${cwd}. Create tamer/project.config.ts (or tamer.project.config.ts at the repo root).`);
4268
4283
  }
4269
4284
 
4270
4285
  //#endregion
@@ -4546,8 +4561,23 @@ const CfiConfigSchema = object({
4546
4561
  worker: WorkerConfigSchema.optional(),
4547
4562
  workers: record(string(), WorkerConfigSchema).optional()
4548
4563
  }).refine((data) => (data.worker ?? data.workers) && !(data.worker && data.workers), { error: "Must have either worker or workers, not both" });
4564
+ /**
4565
+ * Directory where the config was discovered. When config is found via
4566
+ * walk-up from a subdirectory, this is the parent directory containing the
4567
+ * config — use it as `baseDir` for worker `path` resolution instead of
4568
+ * `process.cwd()`.
4569
+ */
4570
+ let _configBaseDir = process.cwd();
4571
+ function getConfigBaseDir() {
4572
+ return _configBaseDir;
4573
+ }
4549
4574
  async function loadConfig(configPath, options = {}) {
4550
- const sources = resolveConfigSources(options.cwd ?? process.cwd(), configPath, options.env);
4575
+ const cwd = options.cwd ?? process.cwd();
4576
+ const sources = resolveConfigSources(cwd, configPath, options.env);
4577
+ if (sources.mode === "merged") {
4578
+ const projectDir = dirname(sources.projectPath);
4579
+ _configBaseDir = basename(projectDir) === "tamer" ? dirname(projectDir) : projectDir;
4580
+ } else _configBaseDir = cwd;
4551
4581
  let raw;
4552
4582
  if (sources.mode === "single") {
4553
4583
  raw = (await import(sources.path)).default;
@@ -7615,7 +7645,7 @@ function assertSecretName(name) {
7615
7645
  }
7616
7646
  /** Resolve worker dir + declared secret names for `secrets load`. */
7617
7647
  async function resolveWorkerSecretsLoadTarget(ctx, workerKey, options) {
7618
- const baseDir = process.cwd();
7648
+ const baseDir = getConfigBaseDir();
7619
7649
  const workers = await getWorkers(ctx.config, baseDir);
7620
7650
  const hit = workers.find(([key]) => key === workerKey);
7621
7651
  if (!hit) {
@@ -8716,14 +8746,14 @@ async function main() {
8716
8746
  try {
8717
8747
  switch (command) {
8718
8748
  case "bootstrap":
8719
- await import("./bootstrap-CsL4IT9Z.mjs").then((m) => m.runBootstrap(parseBootstrapArgs(rest)));
8749
+ await import("./bootstrap-BYxkCI8L.mjs").then((m) => m.runBootstrap(parseBootstrapArgs(rest)));
8720
8750
  break;
8721
8751
  case "sync":
8722
- await import("./sync-C5RjLfgk.mjs").then((m) => m.runSync(parseSyncArgs(rest)));
8752
+ await import("./sync-Cjml_emC.mjs").then((m) => m.runSync(parseSyncArgs(rest)));
8723
8753
  break;
8724
8754
  case "apply": {
8725
8755
  const a = parseApplyArgs(rest);
8726
- await import("./apply-Cz1lxAOp.mjs").then((m) => m.runApply({
8756
+ await import("./apply-BL5JfcZI.mjs").then((m) => m.runApply({
8727
8757
  env: a.env,
8728
8758
  addShard: a.addShard,
8729
8759
  configPath: a.configPath,
@@ -8735,11 +8765,11 @@ async function main() {
8735
8765
  break;
8736
8766
  }
8737
8767
  case "dev":
8738
- await import("./dev-vGQIP7tD.mjs").then((m) => m.runDev(parseDevArgs(rest)));
8768
+ await import("./dev-BTBTiCyd.mjs").then((m) => m.runDev(parseDevArgs(rest)));
8739
8769
  break;
8740
8770
  case "deploy": {
8741
8771
  const d = parseDeployArgs(rest);
8742
- await import("./deploy-D2tQrtN9.mjs").then((m) => m.runDeploy({
8772
+ await import("./deploy-DxUCsnnc.mjs").then((m) => m.runDeploy({
8743
8773
  worker: d.worker,
8744
8774
  env: d.env,
8745
8775
  configPath: d.configPath,
@@ -8748,23 +8778,23 @@ async function main() {
8748
8778
  break;
8749
8779
  }
8750
8780
  case "migrate":
8751
- await import("./migrate-DDBMzPtR.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
8781
+ await import("./migrate-C0xs4MUW.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
8752
8782
  break;
8753
8783
  case "types":
8754
- await import("./types-CqmFeIBf.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
8784
+ await import("./types-CN3DpOC2.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
8755
8785
  break;
8756
8786
  case "status":
8757
- await import("./status-_k3a77Fw.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
8787
+ await import("./status-CZBPBtNy.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
8758
8788
  break;
8759
8789
  case "events":
8760
- await import("./events-yk4J3l0M.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
8790
+ await import("./events-B0bvWdiQ.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
8761
8791
  break;
8762
8792
  case "drift":
8763
- exitStatus = await import("./drift-C3wIrNyg.mjs").then((m) => m.runDrift(parseDriftArgs(rest)));
8793
+ exitStatus = await import("./drift-1nXkTBh5.mjs").then((m) => m.runDrift(parseDriftArgs(rest)));
8764
8794
  break;
8765
8795
  case "plan": {
8766
8796
  const p = parsePlanArgs(rest);
8767
- exitStatus = await import("./plan-Dot2VV7R.mjs").then((m) => m.runPlan({
8797
+ exitStatus = await import("./plan-C8oQWM35.mjs").then((m) => m.runPlan({
8768
8798
  env: p.env,
8769
8799
  configPath: p.configPath,
8770
8800
  json: p.json,
@@ -8776,14 +8806,14 @@ async function main() {
8776
8806
  break;
8777
8807
  }
8778
8808
  case "import":
8779
- await import("./import-CZ6509_t.mjs").then((m) => m.runImport(parseImportArgs(rest)));
8809
+ await import("./import-yXAfQXg2.mjs").then((m) => m.runImport(parseImportArgs(rest)));
8780
8810
  break;
8781
8811
  case "doctor":
8782
8812
  exitStatus = await import("./doctor-BnsOxqnA.mjs").then((m) => m.runDoctor(parseDoctorArgs(rest)));
8783
8813
  break;
8784
8814
  case "provision-tenant": {
8785
8815
  const p = parseProvisionTenantArgs(rest);
8786
- await import("./provision-tenant-C2EL79oz.mjs").then((m) => m.runProvisionTenant({
8816
+ await import("./provision-tenant-Dh3-p5ZK.mjs").then((m) => m.runProvisionTenant({
8787
8817
  env: p.env,
8788
8818
  product: p.product,
8789
8819
  workspace: p.workspace,
@@ -8800,7 +8830,7 @@ async function main() {
8800
8830
  }
8801
8831
  case "destroy-tenant": {
8802
8832
  const t = parseDestroyTenantArgs(rest);
8803
- await import("./destroy-tenant-Ugu7Y1EH.mjs").then((m) => m.runDestroyTenant({
8833
+ await import("./destroy-tenant-CT_uzdl7.mjs").then((m) => m.runDestroyTenant({
8804
8834
  env: t.env,
8805
8835
  product: t.product,
8806
8836
  workspace: t.workspace,
@@ -8813,7 +8843,7 @@ async function main() {
8813
8843
  }
8814
8844
  case "destroy": {
8815
8845
  const d = parseDestroyArgs(rest);
8816
- await import("./destroy-CEv14T0X.mjs").then((m) => m.runDestroy({
8846
+ await import("./destroy-BtHfgI6x.mjs").then((m) => m.runDestroy({
8817
8847
  env: d.env,
8818
8848
  force: d.force,
8819
8849
  skipWorkers: d.skipWorkers,
@@ -8828,12 +8858,12 @@ async function main() {
8828
8858
  case "wfp": {
8829
8859
  const [sub, ...wfpRest] = rest;
8830
8860
  if (sub === "put") {
8831
- const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-D0tDs0J5.mjs");
8861
+ const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-BMSAGpZ6.mjs");
8832
8862
  await runWfpPut(parseWfpPutArgs(wfpRest));
8833
8863
  break;
8834
8864
  }
8835
8865
  if (sub === "delete") {
8836
- const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-C-1pIY3Z.mjs");
8866
+ const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-DJXpe2B7.mjs");
8837
8867
  await runWfpDelete(parseWfpDeleteArgs(wfpRest));
8838
8868
  break;
8839
8869
  }
@@ -8933,5 +8963,5 @@ Environment variables (same as Wrangler):
8933
8963
  main();
8934
8964
 
8935
8965
  //#endregion
8936
- export { resolveReferencesInString as A, loadConfig as B, stackNameForConfig as C, resolveDeployedWorkerName as D, mergedWorkerConfigForEnv as E, ensureTamerSecretsDatabase as F, CFApiClient as I, cloudflareAccountIdFromEnv as L, effectiveDispatchNamespaceName as M, isEphemeralEnv as N, resolveWorkerConfig as O, deleteEnvSecretRows as P, cloudflareApiTokenFromEnv as R, ensureTamerStateDatabase as S, mergeWorkerConfigForResourcePick as T, tenantDispatchScriptName as _, reconcileSecrets as a, createEmptyCfiState as b, vaultReaderFromMap as c, requiredSecretsForWorker as d, fetchStackImports as f, parseTenantShardRoles as g, StateManager as h, pushSecretsForDeploy as i, wranglerConfigCliArgs as j, rewriteIntraStackServiceTargets as k, createDeploySecretsResources as l, scanConfigForImports as m, parseSecretsArgs as n, secretsDrift as o, importedStackNames as p, runSecrets as r, secretsPlanItems as s, SECRETS_USAGE as t, namingFromConfig as u, tenantShardDatabaseName as v, buildIntraStackScriptNameMap as w, deleteEnvStateRows as x, tenantStateKey as y, getWorkers as z };
8966
+ export { resolveReferencesInString as A, getWorkers as B, stackNameForConfig as C, resolveDeployedWorkerName as D, mergedWorkerConfigForEnv as E, ensureTamerSecretsDatabase as F, CFApiClient as I, cloudflareAccountIdFromEnv as L, effectiveDispatchNamespaceName as M, isEphemeralEnv as N, resolveWorkerConfig as O, deleteEnvSecretRows as P, cloudflareApiTokenFromEnv as R, ensureTamerStateDatabase as S, mergeWorkerConfigForResourcePick as T, loadConfig as V, tenantDispatchScriptName as _, reconcileSecrets as a, createEmptyCfiState as b, vaultReaderFromMap as c, requiredSecretsForWorker as d, fetchStackImports as f, parseTenantShardRoles as g, StateManager as h, pushSecretsForDeploy as i, wranglerConfigCliArgs as j, rewriteIntraStackServiceTargets as k, createDeploySecretsResources as l, scanConfigForImports as m, parseSecretsArgs as n, secretsDrift as o, importedStackNames as p, runSecrets as r, secretsPlanItems as s, SECRETS_USAGE as t, namingFromConfig as u, tenantShardDatabaseName as v, buildIntraStackScriptNameMap as w, deleteEnvStateRows as x, tenantStateKey as y, getConfigBaseDir as z };
8937
8967
  //# sourceMappingURL=tamer.mjs.map