@dragonmastery/tamer 0.35.3 → 0.36.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/dist/{apply-Cz1lxAOp.mjs → apply-BL5JfcZI.mjs} +11 -11
- package/dist/apply-BL5JfcZI.mjs.map +1 -0
- package/dist/{applyTarget-BI6QAVwA.mjs → applyTarget-BJlVrED9.mjs} +2 -2
- package/dist/{applyTarget-BI6QAVwA.mjs.map → applyTarget-BJlVrED9.mjs.map} +1 -1
- package/dist/{bootstrap-CsL4IT9Z.mjs → bootstrap-BYxkCI8L.mjs} +2 -2
- package/dist/{bootstrap-CsL4IT9Z.mjs.map → bootstrap-BYxkCI8L.mjs.map} +1 -1
- package/dist/{cloudflareSnapshot-CpNFH4zd.mjs → cloudflareSnapshot-CjPk6xYL.mjs} +3 -3
- package/dist/{cloudflareSnapshot-CpNFH4zd.mjs.map → cloudflareSnapshot-CjPk6xYL.mjs.map} +1 -1
- package/dist/{deploy-D2tQrtN9.mjs → deploy-DxUCsnnc.mjs} +8 -8
- package/dist/deploy-DxUCsnnc.mjs.map +1 -0
- package/dist/{destroy-CEv14T0X.mjs → destroy-BtHfgI6x.mjs} +9 -9
- package/dist/destroy-BtHfgI6x.mjs.map +1 -0
- package/dist/{destroy-tenant-Ugu7Y1EH.mjs → destroy-tenant-CT_uzdl7.mjs} +2 -2
- package/dist/{destroy-tenant-Ugu7Y1EH.mjs.map → destroy-tenant-CT_uzdl7.mjs.map} +1 -1
- package/dist/{dev-vGQIP7tD.mjs → dev-BTBTiCyd.mjs} +7 -7
- package/dist/dev-BTBTiCyd.mjs.map +1 -0
- package/dist/{drift-C3wIrNyg.mjs → drift-1nXkTBh5.mjs} +4 -4
- package/dist/{drift-C7pgj4Iw.mjs → drift-pb0PoOfK.mjs} +6 -6
- package/dist/drift-pb0PoOfK.mjs.map +1 -0
- package/dist/{emit-vpibELHm.mjs → emit-TUYG7bi5.mjs} +2 -2
- package/dist/{emit-vpibELHm.mjs.map → emit-TUYG7bi5.mjs.map} +1 -1
- package/dist/{events-yk4J3l0M.mjs → events-B0bvWdiQ.mjs} +2 -2
- package/dist/{events-yk4J3l0M.mjs.map → events-B0bvWdiQ.mjs.map} +1 -1
- package/dist/{generator-7b97QsuM.mjs → generator-ZTEeHlft.mjs} +2 -2
- package/dist/{generator-7b97QsuM.mjs.map → generator-ZTEeHlft.mjs.map} +1 -1
- package/dist/{import-CZ6509_t.mjs → import-yXAfQXg2.mjs} +4 -4
- package/dist/import-yXAfQXg2.mjs.map +1 -0
- package/dist/{migrate-DDBMzPtR.mjs → migrate-C0xs4MUW.mjs} +5 -5
- package/dist/migrate-C0xs4MUW.mjs.map +1 -0
- package/dist/{plan-Dot2VV7R.mjs → plan-C8oQWM35.mjs} +8 -8
- package/dist/{plan-Dot2VV7R.mjs.map → plan-C8oQWM35.mjs.map} +1 -1
- package/dist/{provision-tenant-C2EL79oz.mjs → provision-tenant-Dh3-p5ZK.mjs} +2 -2
- package/dist/{provision-tenant-C2EL79oz.mjs.map → provision-tenant-Dh3-p5ZK.mjs.map} +1 -1
- package/dist/{registry-D-vo1TTV.mjs → registry-BlHEOKlN.mjs} +2 -2
- package/dist/{registry-D-vo1TTV.mjs.map → registry-BlHEOKlN.mjs.map} +1 -1
- package/dist/{status-_k3a77Fw.mjs → status-CZBPBtNy.mjs} +4 -4
- package/dist/status-CZBPBtNy.mjs.map +1 -0
- package/dist/{sync-C5RjLfgk.mjs → sync-Cjml_emC.mjs} +5 -5
- package/dist/sync-Cjml_emC.mjs.map +1 -0
- package/dist/tamer.mjs +90 -50
- package/dist/tamer.mjs.map +1 -1
- package/dist/{types-CqmFeIBf.mjs → types-CN3DpOC2.mjs} +5 -5
- package/dist/types-CN3DpOC2.mjs.map +1 -0
- package/dist/{verifyPlanFile-DSO-yS64.mjs → verifyPlanFile-DxO0Ad6o.mjs} +2 -2
- package/dist/{verifyPlanFile-DSO-yS64.mjs.map → verifyPlanFile-DxO0Ad6o.mjs.map} +1 -1
- package/dist/{wfp-delete-C-1pIY3Z.mjs → wfp-delete-DJXpe2B7.mjs} +2 -2
- package/dist/{wfp-delete-C-1pIY3Z.mjs.map → wfp-delete-DJXpe2B7.mjs.map} +1 -1
- package/dist/{wfp-put-D0tDs0J5.mjs → wfp-put-BMSAGpZ6.mjs} +2 -2
- package/dist/{wfp-put-D0tDs0J5.mjs.map → wfp-put-BMSAGpZ6.mjs.map} +1 -1
- package/dist/{worker-route-RexL6xCk.mjs → worker-route-C7kgtUXH.mjs} +2 -2
- package/dist/{worker-route-RexL6xCk.mjs.map → worker-route-C7kgtUXH.mjs.map} +1 -1
- package/dist/{workers-CS0tlbdk.mjs → workers-Bq1AY8aB.mjs} +2 -2
- package/dist/{workers-CS0tlbdk.mjs.map → workers-Bq1AY8aB.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/apply-Cz1lxAOp.mjs.map +0 -1
- package/dist/deploy-D2tQrtN9.mjs.map +0 -1
- package/dist/destroy-CEv14T0X.mjs.map +0 -1
- package/dist/dev-vGQIP7tD.mjs.map +0 -1
- package/dist/drift-C7pgj4Iw.mjs.map +0 -1
- package/dist/import-CZ6509_t.mjs.map +0 -1
- package/dist/migrate-DDBMzPtR.mjs.map +0 -1
- package/dist/status-_k3a77Fw.mjs.map +0 -1
- package/dist/sync-C5RjLfgk.mjs.map +0 -1
- 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
|
|
3
|
-
import { n as resourceModules } from "./registry-
|
|
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-
|
|
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
|
|
3
|
-
import { n as resourceModules } from "./registry-
|
|
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-
|
|
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-
|
|
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
|
-
*
|
|
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
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
if (
|
|
4244
|
-
|
|
4245
|
-
|
|
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
|
-
|
|
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
|
|
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;
|
|
@@ -5721,6 +5751,7 @@ const REF_RE = /\$\{tamer:([a-z0-9_]+):([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\}/g;
|
|
|
5721
5751
|
* least one reference is present (used for cheap pre-checks).
|
|
5722
5752
|
*/
|
|
5723
5753
|
function stringHasReference(s) {
|
|
5754
|
+
if (s.includes("${tamer:env}")) return true;
|
|
5724
5755
|
REF_RE.lastIndex = 0;
|
|
5725
5756
|
return REF_RE.test(s);
|
|
5726
5757
|
}
|
|
@@ -5728,9 +5759,14 @@ function stringHasReference(s) {
|
|
|
5728
5759
|
* Resolve every `${tamer:...}` reference in `value`. Replacement preserves
|
|
5729
5760
|
* surrounding text for partial-string interpolation. `fieldPath` is included
|
|
5730
5761
|
* in any thrown {@link TamerReferenceError} for actionable diagnostics.
|
|
5762
|
+
*
|
|
5763
|
+
* Built-in scalar references (no state lookup needed):
|
|
5764
|
+
* `${tamer:env}` → the current env name (e.g. `"dev"`, `"pr-1234"`)
|
|
5731
5765
|
*/
|
|
5732
5766
|
function resolveReferencesInString(value, ctx, fieldPath) {
|
|
5733
|
-
|
|
5767
|
+
let result = value;
|
|
5768
|
+
if (result.includes("${tamer:env}")) result = result.split("${tamer:env}").join(ctx.env);
|
|
5769
|
+
if (!stringHasReference(result)) return result;
|
|
5734
5770
|
return value.replace(REF_RE, (match, kind, logicalName, field) => {
|
|
5735
5771
|
try {
|
|
5736
5772
|
return lookupReference(kind, logicalName, field, ctx, fieldPath);
|
|
@@ -5999,7 +6035,11 @@ function mergedWorkerConfigForEnv(workerConfig, env, tenant) {
|
|
|
5999
6035
|
...envOverride,
|
|
6000
6036
|
vars: mergeVars(workerConfig.vars, envOverride.vars)
|
|
6001
6037
|
};
|
|
6002
|
-
}
|
|
6038
|
+
} else if (isEphemeralEnv(env, tenant) && workerConfig.env?.dev) merged = {
|
|
6039
|
+
...merged,
|
|
6040
|
+
...workerConfig.env.dev,
|
|
6041
|
+
vars: mergeVars(workerConfig.vars, workerConfig.env.dev.vars)
|
|
6042
|
+
};
|
|
6003
6043
|
const mv = merged.vars;
|
|
6004
6044
|
if (mv && Object.prototype.hasOwnProperty.call(mv, "BRANCH_SUFFIX")) merged = {
|
|
6005
6045
|
...merged,
|
|
@@ -7615,7 +7655,7 @@ function assertSecretName(name) {
|
|
|
7615
7655
|
}
|
|
7616
7656
|
/** Resolve worker dir + declared secret names for `secrets load`. */
|
|
7617
7657
|
async function resolveWorkerSecretsLoadTarget(ctx, workerKey, options) {
|
|
7618
|
-
const baseDir =
|
|
7658
|
+
const baseDir = getConfigBaseDir();
|
|
7619
7659
|
const workers = await getWorkers(ctx.config, baseDir);
|
|
7620
7660
|
const hit = workers.find(([key]) => key === workerKey);
|
|
7621
7661
|
if (!hit) {
|
|
@@ -8716,14 +8756,14 @@ async function main() {
|
|
|
8716
8756
|
try {
|
|
8717
8757
|
switch (command) {
|
|
8718
8758
|
case "bootstrap":
|
|
8719
|
-
await import("./bootstrap-
|
|
8759
|
+
await import("./bootstrap-BYxkCI8L.mjs").then((m) => m.runBootstrap(parseBootstrapArgs(rest)));
|
|
8720
8760
|
break;
|
|
8721
8761
|
case "sync":
|
|
8722
|
-
await import("./sync-
|
|
8762
|
+
await import("./sync-Cjml_emC.mjs").then((m) => m.runSync(parseSyncArgs(rest)));
|
|
8723
8763
|
break;
|
|
8724
8764
|
case "apply": {
|
|
8725
8765
|
const a = parseApplyArgs(rest);
|
|
8726
|
-
await import("./apply-
|
|
8766
|
+
await import("./apply-BL5JfcZI.mjs").then((m) => m.runApply({
|
|
8727
8767
|
env: a.env,
|
|
8728
8768
|
addShard: a.addShard,
|
|
8729
8769
|
configPath: a.configPath,
|
|
@@ -8735,11 +8775,11 @@ async function main() {
|
|
|
8735
8775
|
break;
|
|
8736
8776
|
}
|
|
8737
8777
|
case "dev":
|
|
8738
|
-
await import("./dev-
|
|
8778
|
+
await import("./dev-BTBTiCyd.mjs").then((m) => m.runDev(parseDevArgs(rest)));
|
|
8739
8779
|
break;
|
|
8740
8780
|
case "deploy": {
|
|
8741
8781
|
const d = parseDeployArgs(rest);
|
|
8742
|
-
await import("./deploy-
|
|
8782
|
+
await import("./deploy-DxUCsnnc.mjs").then((m) => m.runDeploy({
|
|
8743
8783
|
worker: d.worker,
|
|
8744
8784
|
env: d.env,
|
|
8745
8785
|
configPath: d.configPath,
|
|
@@ -8748,23 +8788,23 @@ async function main() {
|
|
|
8748
8788
|
break;
|
|
8749
8789
|
}
|
|
8750
8790
|
case "migrate":
|
|
8751
|
-
await import("./migrate-
|
|
8791
|
+
await import("./migrate-C0xs4MUW.mjs").then((m) => m.runMigrate(parseMigrateArgs(rest)));
|
|
8752
8792
|
break;
|
|
8753
8793
|
case "types":
|
|
8754
|
-
await import("./types-
|
|
8794
|
+
await import("./types-CN3DpOC2.mjs").then((m) => m.runTypes(parseTypesArgs(rest)));
|
|
8755
8795
|
break;
|
|
8756
8796
|
case "status":
|
|
8757
|
-
await import("./status-
|
|
8797
|
+
await import("./status-CZBPBtNy.mjs").then((m) => m.runStatus(parseStatusArgs(rest)));
|
|
8758
8798
|
break;
|
|
8759
8799
|
case "events":
|
|
8760
|
-
await import("./events-
|
|
8800
|
+
await import("./events-B0bvWdiQ.mjs").then((m) => m.runEvents(parseEventsArgs(rest)));
|
|
8761
8801
|
break;
|
|
8762
8802
|
case "drift":
|
|
8763
|
-
exitStatus = await import("./drift-
|
|
8803
|
+
exitStatus = await import("./drift-1nXkTBh5.mjs").then((m) => m.runDrift(parseDriftArgs(rest)));
|
|
8764
8804
|
break;
|
|
8765
8805
|
case "plan": {
|
|
8766
8806
|
const p = parsePlanArgs(rest);
|
|
8767
|
-
exitStatus = await import("./plan-
|
|
8807
|
+
exitStatus = await import("./plan-C8oQWM35.mjs").then((m) => m.runPlan({
|
|
8768
8808
|
env: p.env,
|
|
8769
8809
|
configPath: p.configPath,
|
|
8770
8810
|
json: p.json,
|
|
@@ -8776,14 +8816,14 @@ async function main() {
|
|
|
8776
8816
|
break;
|
|
8777
8817
|
}
|
|
8778
8818
|
case "import":
|
|
8779
|
-
await import("./import-
|
|
8819
|
+
await import("./import-yXAfQXg2.mjs").then((m) => m.runImport(parseImportArgs(rest)));
|
|
8780
8820
|
break;
|
|
8781
8821
|
case "doctor":
|
|
8782
8822
|
exitStatus = await import("./doctor-BnsOxqnA.mjs").then((m) => m.runDoctor(parseDoctorArgs(rest)));
|
|
8783
8823
|
break;
|
|
8784
8824
|
case "provision-tenant": {
|
|
8785
8825
|
const p = parseProvisionTenantArgs(rest);
|
|
8786
|
-
await import("./provision-tenant-
|
|
8826
|
+
await import("./provision-tenant-Dh3-p5ZK.mjs").then((m) => m.runProvisionTenant({
|
|
8787
8827
|
env: p.env,
|
|
8788
8828
|
product: p.product,
|
|
8789
8829
|
workspace: p.workspace,
|
|
@@ -8800,7 +8840,7 @@ async function main() {
|
|
|
8800
8840
|
}
|
|
8801
8841
|
case "destroy-tenant": {
|
|
8802
8842
|
const t = parseDestroyTenantArgs(rest);
|
|
8803
|
-
await import("./destroy-tenant-
|
|
8843
|
+
await import("./destroy-tenant-CT_uzdl7.mjs").then((m) => m.runDestroyTenant({
|
|
8804
8844
|
env: t.env,
|
|
8805
8845
|
product: t.product,
|
|
8806
8846
|
workspace: t.workspace,
|
|
@@ -8813,7 +8853,7 @@ async function main() {
|
|
|
8813
8853
|
}
|
|
8814
8854
|
case "destroy": {
|
|
8815
8855
|
const d = parseDestroyArgs(rest);
|
|
8816
|
-
await import("./destroy-
|
|
8856
|
+
await import("./destroy-BtHfgI6x.mjs").then((m) => m.runDestroy({
|
|
8817
8857
|
env: d.env,
|
|
8818
8858
|
force: d.force,
|
|
8819
8859
|
skipWorkers: d.skipWorkers,
|
|
@@ -8828,12 +8868,12 @@ async function main() {
|
|
|
8828
8868
|
case "wfp": {
|
|
8829
8869
|
const [sub, ...wfpRest] = rest;
|
|
8830
8870
|
if (sub === "put") {
|
|
8831
|
-
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-
|
|
8871
|
+
const { parseWfpPutArgs, runWfpPut } = await import("./wfp-put-BMSAGpZ6.mjs");
|
|
8832
8872
|
await runWfpPut(parseWfpPutArgs(wfpRest));
|
|
8833
8873
|
break;
|
|
8834
8874
|
}
|
|
8835
8875
|
if (sub === "delete") {
|
|
8836
|
-
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-
|
|
8876
|
+
const { parseWfpDeleteArgs, runWfpDelete } = await import("./wfp-delete-DJXpe2B7.mjs");
|
|
8837
8877
|
await runWfpDelete(parseWfpDeleteArgs(wfpRest));
|
|
8838
8878
|
break;
|
|
8839
8879
|
}
|
|
@@ -8933,5 +8973,5 @@ Environment variables (same as Wrangler):
|
|
|
8933
8973
|
main();
|
|
8934
8974
|
|
|
8935
8975
|
//#endregion
|
|
8936
|
-
export { resolveReferencesInString as A,
|
|
8976
|
+
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
8977
|
//# sourceMappingURL=tamer.mjs.map
|