@dragonmastery/tamer 0.28.0 → 0.29.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 -1
- package/dist/{apply-B0b_jjGv.mjs → apply-BOABC3UB.mjs} +12 -12
- package/dist/{apply-B0b_jjGv.mjs.map → apply-BOABC3UB.mjs.map} +1 -1
- package/dist/{applyTarget-BetDYdeS.mjs → applyTarget-GWDEOXeY.mjs} +3 -3
- package/dist/{applyTarget-BetDYdeS.mjs.map → applyTarget-GWDEOXeY.mjs.map} +1 -1
- package/dist/{bootstrap-CBzPilB1.mjs → bootstrap-BxwxC_2Z.mjs} +2 -2
- package/dist/{bootstrap-CBzPilB1.mjs.map → bootstrap-BxwxC_2Z.mjs.map} +1 -1
- package/dist/{cloudflareSnapshot-B4FOaNr0.mjs → cloudflareSnapshot-DzPuCRTh.mjs} +5 -5
- package/dist/{cloudflareSnapshot-B4FOaNr0.mjs.map → cloudflareSnapshot-DzPuCRTh.mjs.map} +1 -1
- package/dist/{deploy-gHEQxhmx.mjs → deploy-C0edCpn9.mjs} +7 -7
- package/dist/{deploy-gHEQxhmx.mjs.map → deploy-C0edCpn9.mjs.map} +1 -1
- package/dist/{destroy-B21f3wgq.mjs → destroy-DzgA4lCA.mjs} +10 -10
- package/dist/{destroy-B21f3wgq.mjs.map → destroy-DzgA4lCA.mjs.map} +1 -1
- package/dist/{destroy-tenant-BW2nasnK.mjs → destroy-tenant-U0t7BeJ0.mjs} +2 -2
- package/dist/{destroy-tenant-BW2nasnK.mjs.map → destroy-tenant-U0t7BeJ0.mjs.map} +1 -1
- package/dist/{dev-Dt26nzMJ.mjs → dev-CZbKfdFw.mjs} +7 -7
- package/dist/{dev-Dt26nzMJ.mjs.map → dev-CZbKfdFw.mjs.map} +1 -1
- package/dist/{drift-D8ZrSgTn.mjs → drift-B5bpkI0i.mjs} +7 -7
- package/dist/{drift-D8ZrSgTn.mjs.map → drift-B5bpkI0i.mjs.map} +1 -1
- package/dist/drift-BNa92AK5.mjs +10 -0
- package/dist/{events-BSwGdkGj.mjs → events-BIznt8Sj.mjs} +2 -2
- package/dist/{events-BSwGdkGj.mjs.map → events-BIznt8Sj.mjs.map} +1 -1
- package/dist/{fetchStackImports-B4ZJahOt.mjs → fetchStackImports-C-1THPYL.mjs} +16 -7
- package/dist/fetchStackImports-C-1THPYL.mjs.map +1 -0
- package/dist/{generator-CIMbcPzv.mjs → generator-Ba-vqyBG.mjs} +2 -2
- package/dist/{generator-CIMbcPzv.mjs.map → generator-Ba-vqyBG.mjs.map} +1 -1
- package/dist/{import-BrduwA9Z.mjs → import-B0dlwKoQ.mjs} +3 -3
- package/dist/{import-BrduwA9Z.mjs.map → import-B0dlwKoQ.mjs.map} +1 -1
- package/dist/index.d.mts +115 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{loader-DP7yXqT6.mjs → loader-DAvCKLTT.mjs} +2 -2
- package/dist/{loader-DP7yXqT6.mjs.map → loader-DAvCKLTT.mjs.map} +1 -1
- package/dist/{logpush-job-xS7270FZ.mjs → logpush-job-DsRkOORJ.mjs} +2 -2
- package/dist/{logpush-job-xS7270FZ.mjs.map → logpush-job-DsRkOORJ.mjs.map} +1 -1
- package/dist/{migrate-CahG6BYV.mjs → migrate-BpW6JkIg.mjs} +4 -4
- package/dist/{migrate-CahG6BYV.mjs.map → migrate-BpW6JkIg.mjs.map} +1 -1
- package/dist/{normalize-Bx0bpFop.mjs → normalize-DVSTRZhO.mjs} +18 -1
- package/dist/normalize-DVSTRZhO.mjs.map +1 -0
- package/dist/{plan-DWvsvy1U.mjs → plan-Do5rE-c5.mjs} +10 -10
- package/dist/{plan-DWvsvy1U.mjs.map → plan-Do5rE-c5.mjs.map} +1 -1
- package/dist/{provision-tenant-WTKo93Y0.mjs → provision-tenant-Wfck-2Oa.mjs} +3 -3
- package/dist/{provision-tenant-WTKo93Y0.mjs.map → provision-tenant-Wfck-2Oa.mjs.map} +1 -1
- package/dist/{stackOutputs-W9mnnJuj.mjs → stackOutputs-CQQHtdPA.mjs} +3 -3
- package/dist/{stackOutputs-W9mnnJuj.mjs.map → stackOutputs-CQQHtdPA.mjs.map} +1 -1
- package/dist/{status-DLwREPjb.mjs → status-D5GLpWyn.mjs} +6 -6
- package/dist/{status-DLwREPjb.mjs.map → status-D5GLpWyn.mjs.map} +1 -1
- package/dist/{sync-f2K2blwm.mjs → sync-B_pyPi7Z.mjs} +6 -6
- package/dist/{sync-f2K2blwm.mjs.map → sync-B_pyPi7Z.mjs.map} +1 -1
- package/dist/tamer.mjs +17 -17
- package/dist/{types-CqxqYnrT.mjs → types-JrdlG7Dy.mjs} +4 -4
- package/dist/{types-CqxqYnrT.mjs.map → types-JrdlG7Dy.mjs.map} +1 -1
- package/dist/{verifyPlanFile-c16z1AMH.mjs → verifyPlanFile-ah_4tvTu.mjs} +2 -2
- package/dist/{verifyPlanFile-c16z1AMH.mjs.map → verifyPlanFile-ah_4tvTu.mjs.map} +1 -1
- package/dist/{wfp-delete-DysvX1u7.mjs → wfp-delete-BhuUrBUA.mjs} +2 -2
- package/dist/{wfp-delete-DysvX1u7.mjs.map → wfp-delete-BhuUrBUA.mjs.map} +1 -1
- package/dist/{wfp-put-jaVd_LjO.mjs → wfp-put-DL0mJNNz.mjs} +2 -2
- package/dist/{wfp-put-jaVd_LjO.mjs.map → wfp-put-DL0mJNNz.mjs.map} +1 -1
- package/dist/{worker-route-Be2IvOdr.mjs → worker-route-CMbtozNa.mjs} +3 -3
- package/dist/{worker-route-Be2IvOdr.mjs.map → worker-route-CMbtozNa.mjs.map} +1 -1
- package/dist/{workers-aGILs77X.mjs → workers-C-oeZhdD.mjs} +3 -3
- package/dist/{workers-aGILs77X.mjs.map → workers-C-oeZhdD.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/drift-D5qzCTft.mjs +0 -10
- package/dist/fetchStackImports-B4ZJahOt.mjs.map +0 -1
- package/dist/normalize-Bx0bpFop.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as resourceModules } from "./fetchStackImports-
|
|
1
|
+
import { a as resourceModules } from "./fetchStackImports-C-1THPYL.mjs";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { writeFileSync } from "fs";
|
|
4
4
|
|
|
@@ -74,4 +74,4 @@ function writeWranglerJson(workerDir, config, outFile = "wrangler.json") {
|
|
|
74
74
|
|
|
75
75
|
//#endregion
|
|
76
76
|
export { writeWranglerJson as n, generateWranglerConfig as t };
|
|
77
|
-
//# sourceMappingURL=generator-
|
|
77
|
+
//# sourceMappingURL=generator-Ba-vqyBG.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator-
|
|
1
|
+
{"version":3,"file":"generator-Ba-vqyBG.mjs","names":["out: GeneratedSecretsStoreSecretBinding[]","config: WranglerConfig"],"sources":["../src/features/secrets-store/secrets-store.generate.ts","../src/core/wrangler/generator.ts"],"sourcesContent":["import type { NamingEngine } from \"../../core/naming/NamingEngine.js\";\nimport type {\n StateEntry,\n SecretsStoreSecretBinding,\n SecretsStoreStateEntry,\n} from \"../../types.js\";\n\nexport interface SecretsStoreStateLike {\n get(key: string): StateEntry | undefined;\n getAll(): Record<string, StateEntry>;\n}\n\n/**\n * One row of wrangler's `secrets_store_secrets[]` array. Resolved from a\n * worker's declared `secretsStoreSecrets[]` by looking up the\n * Tamer-managed store's `store_id` in state. The named secret itself must\n * already exist inside the store (created out-of-band via wrangler\n * `secrets-store secret create`); Tamer never reads or writes secret\n * values.\n */\nexport interface GeneratedSecretsStoreSecretBinding {\n binding: string;\n store_id: string;\n secret_name: string;\n}\n\n/**\n * Resolve `secretsStoreSecrets[]` worker bindings into wrangler-shape\n * `secrets_store_secrets[]` entries by looking up the referenced\n * Tamer-managed store's `store_id` in state. Throws with an actionable\n * message if a referenced store has never been applied — the binding\n * would otherwise be deployed against a non-existent store.\n */\nexport function secretsStoreSecretsGenerate(\n bindings: SecretsStoreSecretBinding[],\n env: string,\n state: SecretsStoreStateLike,\n naming: NamingEngine,\n): GeneratedSecretsStoreSecretBinding[] {\n const out: GeneratedSecretsStoreSecretBinding[] = [];\n for (const b of bindings) {\n const derivedName = naming.secretsStoreName(b.store, env);\n const entry = state.get(`secrets_store:${derivedName}`) as\n | SecretsStoreStateEntry\n | undefined;\n if (!entry || entry.type !== \"secrets_store\") {\n throw new Error(\n `Secrets Store binding \"${b.binding}\" references store \"${b.store}\" — ` +\n `not in state. Declare it under \\`resources.secretsStores\\` and run ` +\n `'tamer apply --env ${env}' first.`,\n );\n }\n out.push({\n binding: b.binding,\n store_id: entry.cfId,\n secret_name: b.secretName,\n });\n }\n return out;\n}\n","import { writeFileSync } from \"fs\";\nimport { join } from \"path\";\nimport type { WranglerConfig } from \"../../generated/wrangler-types.js\";\nimport type { ResolvedWorkerConfig } from \"../config/resolver.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport type { NamingEngine } from \"../naming/NamingEngine.js\";\nimport { resourceModules } from \"../registry/registry.js\";\nimport { secretsStoreSecretsGenerate } from \"../../features/secrets-store/secrets-store.generate.js\";\n\nexport class CfiError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CfiError\";\n }\n}\n\n/**\n * Build the worker's `wrangler.json` by asking every registered resource\n * module for its bindings fragment, then merging on top of the\n * passthrough config (`resolved.wranglerConfig`). Adding a new resource\n * kind requires zero edits here — register the module, done.\n */\nexport function generateWranglerConfig(\n resolved: ResolvedWorkerConfig,\n state: StateManager,\n naming: NamingEngine,\n): WranglerConfig {\n let config: WranglerConfig = {\n ...resolved.wranglerConfig,\n $schema: \"node_modules/wrangler/config-schema.json\",\n };\n\n const worker = {\n workerKey: resolved.workerKey,\n deployedName: resolved.workerName,\n };\n for (const mod of resourceModules) {\n const resources = mod.pickResources(resolved.resources);\n const fragment = mod.generate({\n resources,\n env: resolved.env,\n state,\n naming,\n passthrough: resolved.wranglerConfig,\n worker,\n });\n config = { ...config, ...fragment };\n }\n\n const secretBindings = resolved.resources?.secretsStoreSecrets ?? [];\n if (secretBindings.length > 0) {\n const passthroughSecrets =\n resolved.wranglerConfig.secrets_store_secrets ?? [];\n const generated = secretsStoreSecretsGenerate(\n secretBindings,\n resolved.env,\n state,\n naming,\n );\n config = {\n ...config,\n secrets_store_secrets: [...passthroughSecrets, ...generated],\n };\n }\n\n return config;\n}\n\nexport function writeWranglerJson(\n workerDir: string,\n config: WranglerConfig,\n outFile: string = \"wrangler.json\",\n): void {\n const path = join(workerDir, outFile);\n writeFileSync(path, JSON.stringify(config, null, 2), \"utf-8\");\n}\n"],"mappings":";;;;;;;;;;;;AAiCA,SAAgB,4BACd,UACA,KACA,OACA,QACsC;CACtC,MAAMA,MAA4C,EAAE;AACpD,MAAK,MAAM,KAAK,UAAU;EACxB,MAAM,cAAc,OAAO,iBAAiB,EAAE,OAAO,IAAI;EACzD,MAAM,QAAQ,MAAM,IAAI,iBAAiB,cAAc;AAGvD,MAAI,CAAC,SAAS,MAAM,SAAS,gBAC3B,OAAM,IAAI,MACR,0BAA0B,EAAE,QAAQ,sBAAsB,EAAE,MAAM,4FAE1C,IAAI,UAC7B;AAEH,MAAI,KAAK;GACP,SAAS,EAAE;GACX,UAAU,MAAM;GAChB,aAAa,EAAE;GAChB,CAAC;;AAEJ,QAAO;;;;;;;;;;;ACpCT,SAAgB,uBACd,UACA,OACA,QACgB;CAChB,IAAIC,SAAyB;EAC3B,GAAG,SAAS;EACZ,SAAS;EACV;CAED,MAAM,SAAS;EACb,WAAW,SAAS;EACpB,cAAc,SAAS;EACxB;AACD,MAAK,MAAM,OAAO,iBAAiB;EACjC,MAAM,YAAY,IAAI,cAAc,SAAS,UAAU;EACvD,MAAM,WAAW,IAAI,SAAS;GAC5B;GACA,KAAK,SAAS;GACd;GACA;GACA,aAAa,SAAS;GACtB;GACD,CAAC;AACF,WAAS;GAAE,GAAG;GAAQ,GAAG;GAAU;;CAGrC,MAAM,iBAAiB,SAAS,WAAW,uBAAuB,EAAE;AACpE,KAAI,eAAe,SAAS,GAAG;EAC7B,MAAM,qBACJ,SAAS,eAAe,yBAAyB,EAAE;EACrD,MAAM,YAAY,4BAChB,gBACA,SAAS,KACT,OACA,OACD;AACD,WAAS;GACP,GAAG;GACH,uBAAuB,CAAC,GAAG,oBAAoB,GAAG,UAAU;GAC7D;;AAGH,QAAO;;AAGT,SAAgB,kBACd,WACA,QACA,UAAkB,iBACZ;AAEN,eADa,KAAK,WAAW,QAAQ,EACjB,KAAK,UAAU,QAAQ,MAAM,EAAE,EAAE,QAAQ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as loadConfig, t as getWorkers } from "./loader-
|
|
1
|
+
import { n as loadConfig, t as getWorkers } from "./loader-DAvCKLTT.mjs";
|
|
2
2
|
import { n as cloudflareAccountIdFromEnv, t as CFApiClient } from "./CFApiClient-DhbyyV71.mjs";
|
|
3
|
-
import { _ as namingFromConfig, a as resourceModules, i as getResourceModule, p as resolveWorkerConfig, t as fetchStackImports } from "./fetchStackImports-
|
|
3
|
+
import { _ as namingFromConfig, a as resourceModules, i as getResourceModule, p as resolveWorkerConfig, t as fetchStackImports } from "./fetchStackImports-C-1THPYL.mjs";
|
|
4
4
|
import { f as stackNameForConfig, t as StateManager } from "./StateManager-DTqtLLVX.mjs";
|
|
5
5
|
import "./r2S3EmptyBucket-DD81ZWQ7.mjs";
|
|
6
6
|
import { n as workerRouteStateKey, t as findZoneIdByName } from "./zoneResolver-VoxLHM4N.mjs";
|
|
@@ -161,4 +161,4 @@ async function importWorkerRoute(ctx) {
|
|
|
161
161
|
|
|
162
162
|
//#endregion
|
|
163
163
|
export { runImport };
|
|
164
|
-
//# sourceMappingURL=import-
|
|
164
|
+
//# sourceMappingURL=import-B0dlwKoQ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-BrduwA9Z.mjs","names":[],"sources":["../src/cli/commands/import.ts"],"sourcesContent":["import { loadConfig, getWorkers } from \"../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../core/config/namingFromConfig.js\";\nimport { CFApiClient } from \"../../core/api/CFApiClient.js\";\nimport { StateManager } from \"../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../core/state/stackName.js\";\nimport { resolveWorkerConfig } from \"../../core/config/resolver.js\";\nimport { fetchStackImports } from \"../../core/imports/fetchStackImports.js\";\nimport { workerRouteStateKey } from \"../../features/worker-route/worker-route.stateKey.js\";\nimport { findZoneIdByName } from \"../../core/routes/zoneResolver.js\";\nimport {\n getResourceModule,\n resourceModules,\n type ResourceKind,\n} from \"../../core/registry/registry.js\";\n\n/** All registered resource kinds plus the non-registry imports. */\nexport type ImportKind =\n | ResourceKind\n | \"dispatch_namespace\"\n | \"dns_record\"\n | \"worker_route\";\n\nexport interface ImportOptions {\n env: string;\n kind: ImportKind;\n /** Logical name from `tamer.config.ts` (or worker key, for `worker_route`). */\n logical: string;\n /** Cloudflare resource id (D1 uuid, KV id, R2 bucket name, or namespace name). */\n cfId?: string;\n /** Required for sharded D1 imports (YYYY-MM-DD). */\n shardDate?: string;\n /** R2 buckets only: creation date (YYYY-MM-DD) used in the binding key. */\n createdDate?: string;\n /** worker_route only: the route id from `/zones/{id}/workers/routes`. */\n routeId?: string;\n /** worker_route only: zone name from `tamerRoutes`. */\n zoneName?: string;\n configPath?: string;\n}\n\nconst REGISTRY_KINDS = new Set<string>(resourceModules.map((m) => m.kind));\n\n/**\n * `tamer import` — register an existing Cloudflare resource into Tamer state\n * by logical name (CloudFormation `import_resources` analogue). For all\n * resource-registry kinds the work is delegated to the module's\n * `importOne` hook; `dispatch_namespace` and `worker_route` remain inline\n * because they aren't registry resources today.\n */\nexport async function runImport(options: ImportOptions): Promise<void> {\n const env = options.env;\n if (env === \"local\") {\n throw new Error(\"import: --env local is not supported (no persisted state)\");\n }\n const baseDir = process.cwd();\n const config = await loadConfig(options.configPath, { env });\n const accountId = 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 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 state.beginOperation(\"import\", `${options.kind}:${options.logical}`);\n\n const ts = new Date().toISOString();\n\n try {\n if (REGISTRY_KINDS.has(options.kind)) {\n const mod = getResourceModule(options.kind as ResourceKind);\n if (!mod) throw new Error(`unknown import kind \"${options.kind}\"`);\n await mod.importOne({\n options: {\n env,\n kind: options.kind,\n logical: options.logical,\n cfId: options.cfId,\n shardDate: options.shardDate,\n createdDate: options.createdDate,\n routeId: options.routeId,\n zoneName: options.zoneName,\n },\n env,\n api,\n state,\n naming,\n ts,\n });\n } else if (options.kind === \"dispatch_namespace\") {\n await importDispatchNamespace({ options, env, api, state, ts });\n } else if (options.kind === \"dns_record\") {\n await importDnsRecord({ options, env, api, state, config, ts });\n } else if (options.kind === \"worker_route\") {\n await importWorkerRoute({\n options,\n env,\n baseDir,\n accountId,\n api,\n naming,\n state,\n config,\n ts,\n });\n } else {\n throw new Error(`unknown import kind \"${options.kind}\"`);\n }\n\n state.finishOperation(\"imported\");\n await state.persist(api);\n console.log(`Imported ${options.kind} \"${options.logical}\" into ${env} state.`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n state.failOperation(msg);\n try {\n await state.persist(api);\n } catch {\n /* swallow secondary persist failure */\n }\n throw err;\n }\n}\n\nasync function importDispatchNamespace(ctx: {\n options: ImportOptions;\n env: string;\n api: CFApiClient;\n state: StateManager;\n ts: string;\n}): Promise<void> {\n const { options, api, state, ts } = ctx;\n const namespaces = await api.dispatchNamespaceListAll();\n const hit = namespaces.find((n) => n.namespace_name === options.cfId);\n if (!hit) {\n throw new Error(\n `import dispatch_namespace: namespace \"${options.cfId}\" not found`,\n );\n }\n const derivedName = hit.namespace_name;\n const key = `dispatch_ns:${derivedName}`;\n const existing = state.get(key);\n state.set(key, {\n type: \"dispatch_namespace\",\n logicalName: options.logical,\n derivedName,\n createdAt:\n existing?.type === \"dispatch_namespace\" ? existing.createdAt : ts,\n updatedAt: ts,\n });\n}\n\nasync function importDnsRecord(ctx: {\n options: ImportOptions;\n env: string;\n api: CFApiClient;\n state: StateManager;\n config: Awaited<ReturnType<typeof loadConfig>>;\n ts: string;\n}): Promise<void> {\n const { options, api, state, config, ts } = ctx;\n if (!options.cfId) {\n throw new Error(\n \"import dns_record: --cf-id <recordId> is required (the record id from `tamer drift` or the Cloudflare dashboard URL)\",\n );\n }\n const declared = (config.dnsRecords ?? []).find(\n (r) => r.logicalName === options.logical,\n );\n if (!declared) {\n throw new Error(\n `import dns_record: no dnsRecords entry with logicalName \"${options.logical}\" in the Tamer project config`,\n );\n }\n const list = await api.zoneDnsRecordListAll(declared.zoneId);\n const hit = list.find((r) => r.id === options.cfId);\n if (!hit) {\n throw new Error(\n `import dns_record: record id \"${options.cfId}\" not found in zone \"${declared.zoneId}\"`,\n );\n }\n if (hit.type !== declared.type) {\n throw new Error(\n `import dns_record: cf record type \"${hit.type}\" does not match declared type \"${declared.type}\"`,\n );\n }\n const { dnsRecordStateKey } = await import(\n \"../../features/dns-records/dns-records.resolve.js\"\n );\n const key = dnsRecordStateKey(declared.zoneId, declared.type, declared.name);\n const existing = state.get(key);\n state.set(key, {\n type: \"dns_record\",\n logicalName: options.logical,\n zoneId: declared.zoneId,\n recordType: declared.type,\n name: hit.name,\n content: hit.content,\n ttl: hit.ttl ?? 1,\n proxied: hit.proxied ?? false,\n priority: hit.priority,\n comment: hit.comment ?? \"\",\n recordId: hit.id,\n createdAt: existing?.type === \"dns_record\" ? existing.createdAt : ts,\n updatedAt: ts,\n });\n}\n\nasync function importWorkerRoute(ctx: {\n options: ImportOptions;\n env: string;\n baseDir: string;\n accountId: string;\n api: CFApiClient;\n naming: ReturnType<typeof namingFromConfig>;\n state: StateManager;\n config: Awaited<ReturnType<typeof loadConfig>>;\n ts: string;\n}): Promise<void> {\n const { options, env, baseDir, accountId, api, naming, state, config, ts } =\n ctx;\n if (!options.routeId) {\n throw new Error(\"import worker_route: --route-id <id> is required\");\n }\n const workers = await getWorkers(config, baseDir);\n const wc = workers.find(([k]) => k === options.logical)?.[1];\n if (!wc) {\n throw new Error(\n `import worker_route: no worker key \"${options.logical}\" in the Tamer project config`,\n );\n }\n const imports = await fetchStackImports(api, config, env);\n const resolved = await resolveWorkerConfig(\n config,\n options.logical,\n wc,\n env,\n baseDir,\n accountId,\n naming,\n state,\n { imports },\n );\n if (resolved.apiManagedRoutes.length === 0) {\n throw new Error(\n `import worker_route: worker \"${options.logical}\" declares no api-managed tamerRoutes for env ${env}`,\n );\n }\n\n const route = options.zoneName\n ? resolved.apiManagedRoutes.find((r) => r.zone_name === options.zoneName)\n : resolved.apiManagedRoutes[0];\n if (!route) {\n throw new Error(\n `import worker_route: no route for zone \"${options.zoneName}\" in resolved config`,\n );\n }\n const zoneId = await findZoneIdByName(api, route.zone_name);\n if (!zoneId) {\n throw new Error(`import worker_route: zone \"${route.zone_name}\" not found`);\n }\n const list = await api.zoneWorkerRoutesList(zoneId);\n const hit = list.find((r) => r.id === options.routeId);\n if (!hit) {\n throw new Error(\n `import worker_route: route id \"${options.routeId}\" not found in zone \"${route.zone_name}\"`,\n );\n }\n if (hit.pattern !== route.pattern) {\n throw new Error(\n `import worker_route: cf pattern \"${hit.pattern}\" does not match resolved \"${route.pattern}\"`,\n );\n }\n const key = workerRouteStateKey(zoneId, options.routeId);\n const existing = state.get(key);\n state.set(key, {\n type: \"worker_route\",\n workerKey: options.logical,\n workerName: resolved.workerName,\n zoneId,\n zoneName: route.zone_name,\n routeId: options.routeId,\n pattern: route.pattern,\n createdAt: existing?.type === \"worker_route\" ? existing.createdAt : ts,\n updatedAt: ts,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"import-B0dlwKoQ.mjs","names":[],"sources":["../src/cli/commands/import.ts"],"sourcesContent":["import { loadConfig, getWorkers } from \"../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../core/config/namingFromConfig.js\";\nimport { CFApiClient } from \"../../core/api/CFApiClient.js\";\nimport { StateManager } from \"../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../core/state/stackName.js\";\nimport { resolveWorkerConfig } from \"../../core/config/resolver.js\";\nimport { fetchStackImports } from \"../../core/imports/fetchStackImports.js\";\nimport { workerRouteStateKey } from \"../../features/worker-route/worker-route.stateKey.js\";\nimport { findZoneIdByName } from \"../../core/routes/zoneResolver.js\";\nimport {\n getResourceModule,\n resourceModules,\n type ResourceKind,\n} from \"../../core/registry/registry.js\";\n\n/** All registered resource kinds plus the non-registry imports. */\nexport type ImportKind =\n | ResourceKind\n | \"dispatch_namespace\"\n | \"dns_record\"\n | \"worker_route\";\n\nexport interface ImportOptions {\n env: string;\n kind: ImportKind;\n /** Logical name from `tamer.config.ts` (or worker key, for `worker_route`). */\n logical: string;\n /** Cloudflare resource id (D1 uuid, KV id, R2 bucket name, or namespace name). */\n cfId?: string;\n /** Required for sharded D1 imports (YYYY-MM-DD). */\n shardDate?: string;\n /** R2 buckets only: creation date (YYYY-MM-DD) used in the binding key. */\n createdDate?: string;\n /** worker_route only: the route id from `/zones/{id}/workers/routes`. */\n routeId?: string;\n /** worker_route only: zone name from `tamerRoutes`. */\n zoneName?: string;\n configPath?: string;\n}\n\nconst REGISTRY_KINDS = new Set<string>(resourceModules.map((m) => m.kind));\n\n/**\n * `tamer import` — register an existing Cloudflare resource into Tamer state\n * by logical name (CloudFormation `import_resources` analogue). For all\n * resource-registry kinds the work is delegated to the module's\n * `importOne` hook; `dispatch_namespace` and `worker_route` remain inline\n * because they aren't registry resources today.\n */\nexport async function runImport(options: ImportOptions): Promise<void> {\n const env = options.env;\n if (env === \"local\") {\n throw new Error(\"import: --env local is not supported (no persisted state)\");\n }\n const baseDir = process.cwd();\n const config = await loadConfig(options.configPath, { env });\n const accountId = 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 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 state.beginOperation(\"import\", `${options.kind}:${options.logical}`);\n\n const ts = new Date().toISOString();\n\n try {\n if (REGISTRY_KINDS.has(options.kind)) {\n const mod = getResourceModule(options.kind as ResourceKind);\n if (!mod) throw new Error(`unknown import kind \"${options.kind}\"`);\n await mod.importOne({\n options: {\n env,\n kind: options.kind,\n logical: options.logical,\n cfId: options.cfId,\n shardDate: options.shardDate,\n createdDate: options.createdDate,\n routeId: options.routeId,\n zoneName: options.zoneName,\n },\n env,\n api,\n state,\n naming,\n ts,\n });\n } else if (options.kind === \"dispatch_namespace\") {\n await importDispatchNamespace({ options, env, api, state, ts });\n } else if (options.kind === \"dns_record\") {\n await importDnsRecord({ options, env, api, state, config, ts });\n } else if (options.kind === \"worker_route\") {\n await importWorkerRoute({\n options,\n env,\n baseDir,\n accountId,\n api,\n naming,\n state,\n config,\n ts,\n });\n } else {\n throw new Error(`unknown import kind \"${options.kind}\"`);\n }\n\n state.finishOperation(\"imported\");\n await state.persist(api);\n console.log(`Imported ${options.kind} \"${options.logical}\" into ${env} state.`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n state.failOperation(msg);\n try {\n await state.persist(api);\n } catch {\n /* swallow secondary persist failure */\n }\n throw err;\n }\n}\n\nasync function importDispatchNamespace(ctx: {\n options: ImportOptions;\n env: string;\n api: CFApiClient;\n state: StateManager;\n ts: string;\n}): Promise<void> {\n const { options, api, state, ts } = ctx;\n const namespaces = await api.dispatchNamespaceListAll();\n const hit = namespaces.find((n) => n.namespace_name === options.cfId);\n if (!hit) {\n throw new Error(\n `import dispatch_namespace: namespace \"${options.cfId}\" not found`,\n );\n }\n const derivedName = hit.namespace_name;\n const key = `dispatch_ns:${derivedName}`;\n const existing = state.get(key);\n state.set(key, {\n type: \"dispatch_namespace\",\n logicalName: options.logical,\n derivedName,\n createdAt:\n existing?.type === \"dispatch_namespace\" ? existing.createdAt : ts,\n updatedAt: ts,\n });\n}\n\nasync function importDnsRecord(ctx: {\n options: ImportOptions;\n env: string;\n api: CFApiClient;\n state: StateManager;\n config: Awaited<ReturnType<typeof loadConfig>>;\n ts: string;\n}): Promise<void> {\n const { options, api, state, config, ts } = ctx;\n if (!options.cfId) {\n throw new Error(\n \"import dns_record: --cf-id <recordId> is required (the record id from `tamer drift` or the Cloudflare dashboard URL)\",\n );\n }\n const declared = (config.dnsRecords ?? []).find(\n (r) => r.logicalName === options.logical,\n );\n if (!declared) {\n throw new Error(\n `import dns_record: no dnsRecords entry with logicalName \"${options.logical}\" in the Tamer project config`,\n );\n }\n const list = await api.zoneDnsRecordListAll(declared.zoneId);\n const hit = list.find((r) => r.id === options.cfId);\n if (!hit) {\n throw new Error(\n `import dns_record: record id \"${options.cfId}\" not found in zone \"${declared.zoneId}\"`,\n );\n }\n if (hit.type !== declared.type) {\n throw new Error(\n `import dns_record: cf record type \"${hit.type}\" does not match declared type \"${declared.type}\"`,\n );\n }\n const { dnsRecordStateKey } = await import(\n \"../../features/dns-records/dns-records.resolve.js\"\n );\n const key = dnsRecordStateKey(declared.zoneId, declared.type, declared.name);\n const existing = state.get(key);\n state.set(key, {\n type: \"dns_record\",\n logicalName: options.logical,\n zoneId: declared.zoneId,\n recordType: declared.type,\n name: hit.name,\n content: hit.content,\n ttl: hit.ttl ?? 1,\n proxied: hit.proxied ?? false,\n priority: hit.priority,\n comment: hit.comment ?? \"\",\n recordId: hit.id,\n createdAt: existing?.type === \"dns_record\" ? existing.createdAt : ts,\n updatedAt: ts,\n });\n}\n\nasync function importWorkerRoute(ctx: {\n options: ImportOptions;\n env: string;\n baseDir: string;\n accountId: string;\n api: CFApiClient;\n naming: ReturnType<typeof namingFromConfig>;\n state: StateManager;\n config: Awaited<ReturnType<typeof loadConfig>>;\n ts: string;\n}): Promise<void> {\n const { options, env, baseDir, accountId, api, naming, state, config, ts } =\n ctx;\n if (!options.routeId) {\n throw new Error(\"import worker_route: --route-id <id> is required\");\n }\n const workers = await getWorkers(config, baseDir);\n const wc = workers.find(([k]) => k === options.logical)?.[1];\n if (!wc) {\n throw new Error(\n `import worker_route: no worker key \"${options.logical}\" in the Tamer project config`,\n );\n }\n const imports = await fetchStackImports(api, config, env);\n const resolved = await resolveWorkerConfig(\n config,\n options.logical,\n wc,\n env,\n baseDir,\n accountId,\n naming,\n state,\n { imports },\n );\n if (resolved.apiManagedRoutes.length === 0) {\n throw new Error(\n `import worker_route: worker \"${options.logical}\" declares no api-managed tamerRoutes for env ${env}`,\n );\n }\n\n const route = options.zoneName\n ? resolved.apiManagedRoutes.find((r) => r.zone_name === options.zoneName)\n : resolved.apiManagedRoutes[0];\n if (!route) {\n throw new Error(\n `import worker_route: no route for zone \"${options.zoneName}\" in resolved config`,\n );\n }\n const zoneId = await findZoneIdByName(api, route.zone_name);\n if (!zoneId) {\n throw new Error(`import worker_route: zone \"${route.zone_name}\" not found`);\n }\n const list = await api.zoneWorkerRoutesList(zoneId);\n const hit = list.find((r) => r.id === options.routeId);\n if (!hit) {\n throw new Error(\n `import worker_route: route id \"${options.routeId}\" not found in zone \"${route.zone_name}\"`,\n );\n }\n if (hit.pattern !== route.pattern) {\n throw new Error(\n `import worker_route: cf pattern \"${hit.pattern}\" does not match resolved \"${route.pattern}\"`,\n );\n }\n const key = workerRouteStateKey(zoneId, options.routeId);\n const existing = state.get(key);\n state.set(key, {\n type: \"worker_route\",\n workerKey: options.logical,\n workerName: resolved.workerName,\n zoneId,\n zoneName: route.zone_name,\n routeId: options.routeId,\n pattern: route.pattern,\n createdAt: existing?.type === \"worker_route\" ? existing.createdAt : ts,\n updatedAt: ts,\n });\n}\n"],"mappings":";;;;;;;;AAyCA,MAAM,iBAAiB,IAAI,IAAY,gBAAgB,KAAK,MAAM,EAAE,KAAK,CAAC;;;;;;;;AAS1E,eAAsB,UAAU,SAAuC;CACrE,MAAM,MAAM,QAAQ;AACpB,KAAI,QAAQ,QACV,OAAM,IAAI,MAAM,4DAA4D;CAE9E,MAAM,UAAU,QAAQ,KAAK;CAC7B,MAAM,SAAS,MAAM,WAAW,QAAQ,YAAY,EAAE,KAAK,CAAC;CAC5D,MAAM,YAAY,OAAO,cAAc,4BAA4B;AACnE,KAAI,CAAC,UACH,OAAM,IAAI,MACR,iEACD;CAEH,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;AACxB,OAAM,eAAe,UAAU,GAAG,QAAQ,KAAK,GAAG,QAAQ,UAAU;CAEpE,MAAM,sBAAK,IAAI,MAAM,EAAC,aAAa;AAEnC,KAAI;AACF,MAAI,eAAe,IAAI,QAAQ,KAAK,EAAE;GACpC,MAAM,MAAM,kBAAkB,QAAQ,KAAqB;AAC3D,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,wBAAwB,QAAQ,KAAK,GAAG;AAClE,SAAM,IAAI,UAAU;IAClB,SAAS;KACP;KACA,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,MAAM,QAAQ;KACd,WAAW,QAAQ;KACnB,aAAa,QAAQ;KACrB,SAAS,QAAQ;KACjB,UAAU,QAAQ;KACnB;IACD;IACA;IACA;IACA;IACA;IACD,CAAC;aACO,QAAQ,SAAS,qBAC1B,OAAM,wBAAwB;GAAE;GAAS;GAAK;GAAK;GAAO;GAAI,CAAC;WACtD,QAAQ,SAAS,aAC1B,OAAM,gBAAgB;GAAE;GAAS;GAAK;GAAK;GAAO;GAAQ;GAAI,CAAC;WACtD,QAAQ,SAAS,eAC1B,OAAM,kBAAkB;GACtB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;MAEF,OAAM,IAAI,MAAM,wBAAwB,QAAQ,KAAK,GAAG;AAG1D,QAAM,gBAAgB,WAAW;AACjC,QAAM,MAAM,QAAQ,IAAI;AACxB,UAAQ,IAAI,YAAY,QAAQ,KAAK,IAAI,QAAQ,QAAQ,SAAS,IAAI,SAAS;UACxE,KAAK;EACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC5D,QAAM,cAAc,IAAI;AACxB,MAAI;AACF,SAAM,MAAM,QAAQ,IAAI;UAClB;AAGR,QAAM;;;AAIV,eAAe,wBAAwB,KAMrB;CAChB,MAAM,EAAE,SAAS,KAAK,OAAO,OAAO;CAEpC,MAAM,OADa,MAAM,IAAI,0BAA0B,EAChC,MAAM,MAAM,EAAE,mBAAmB,QAAQ,KAAK;AACrE,KAAI,CAAC,IACH,OAAM,IAAI,MACR,yCAAyC,QAAQ,KAAK,aACvD;CAEH,MAAM,cAAc,IAAI;CACxB,MAAM,MAAM,eAAe;CAC3B,MAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,OAAM,IAAI,KAAK;EACb,MAAM;EACN,aAAa,QAAQ;EACrB;EACA,WACE,UAAU,SAAS,uBAAuB,SAAS,YAAY;EACjE,WAAW;EACZ,CAAC;;AAGJ,eAAe,gBAAgB,KAOb;CAChB,MAAM,EAAE,SAAS,KAAK,OAAO,QAAQ,OAAO;AAC5C,KAAI,CAAC,QAAQ,KACX,OAAM,IAAI,MACR,uHACD;CAEH,MAAM,YAAY,OAAO,cAAc,EAAE,EAAE,MACxC,MAAM,EAAE,gBAAgB,QAAQ,QAClC;AACD,KAAI,CAAC,SACH,OAAM,IAAI,MACR,4DAA4D,QAAQ,QAAQ,+BAC7E;CAGH,MAAM,OADO,MAAM,IAAI,qBAAqB,SAAS,OAAO,EAC3C,MAAM,MAAM,EAAE,OAAO,QAAQ,KAAK;AACnD,KAAI,CAAC,IACH,OAAM,IAAI,MACR,iCAAiC,QAAQ,KAAK,uBAAuB,SAAS,OAAO,GACtF;AAEH,KAAI,IAAI,SAAS,SAAS,KACxB,OAAM,IAAI,MACR,sCAAsC,IAAI,KAAK,kCAAkC,SAAS,KAAK,GAChG;CAEH,MAAM,EAAE,sBAAsB,MAAM,OAClC;CAEF,MAAM,MAAM,kBAAkB,SAAS,QAAQ,SAAS,MAAM,SAAS,KAAK;CAC5E,MAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,OAAM,IAAI,KAAK;EACb,MAAM;EACN,aAAa,QAAQ;EACrB,QAAQ,SAAS;EACjB,YAAY,SAAS;EACrB,MAAM,IAAI;EACV,SAAS,IAAI;EACb,KAAK,IAAI,OAAO;EAChB,SAAS,IAAI,WAAW;EACxB,UAAU,IAAI;EACd,SAAS,IAAI,WAAW;EACxB,UAAU,IAAI;EACd,WAAW,UAAU,SAAS,eAAe,SAAS,YAAY;EAClE,WAAW;EACZ,CAAC;;AAGJ,eAAe,kBAAkB,KAUf;CAChB,MAAM,EAAE,SAAS,KAAK,SAAS,WAAW,KAAK,QAAQ,OAAO,QAAQ,OACpE;AACF,KAAI,CAAC,QAAQ,QACX,OAAM,IAAI,MAAM,mDAAmD;CAGrE,MAAM,MADU,MAAM,WAAW,QAAQ,QAAQ,EAC9B,MAAM,CAAC,OAAO,MAAM,QAAQ,QAAQ,GAAG;AAC1D,KAAI,CAAC,GACH,OAAM,IAAI,MACR,uCAAuC,QAAQ,QAAQ,+BACxD;CAEH,MAAM,UAAU,MAAM,kBAAkB,KAAK,QAAQ,IAAI;CACzD,MAAM,WAAW,MAAM,oBACrB,QACA,QAAQ,SACR,IACA,KACA,SACA,WACA,QACA,OACA,EAAE,SAAS,CACZ;AACD,KAAI,SAAS,iBAAiB,WAAW,EACvC,OAAM,IAAI,MACR,gCAAgC,QAAQ,QAAQ,gDAAgD,MACjG;CAGH,MAAM,QAAQ,QAAQ,WAClB,SAAS,iBAAiB,MAAM,MAAM,EAAE,cAAc,QAAQ,SAAS,GACvE,SAAS,iBAAiB;AAC9B,KAAI,CAAC,MACH,OAAM,IAAI,MACR,2CAA2C,QAAQ,SAAS,sBAC7D;CAEH,MAAM,SAAS,MAAM,iBAAiB,KAAK,MAAM,UAAU;AAC3D,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,8BAA8B,MAAM,UAAU,aAAa;CAG7E,MAAM,OADO,MAAM,IAAI,qBAAqB,OAAO,EAClC,MAAM,MAAM,EAAE,OAAO,QAAQ,QAAQ;AACtD,KAAI,CAAC,IACH,OAAM,IAAI,MACR,kCAAkC,QAAQ,QAAQ,uBAAuB,MAAM,UAAU,GAC1F;AAEH,KAAI,IAAI,YAAY,MAAM,QACxB,OAAM,IAAI,MACR,oCAAoC,IAAI,QAAQ,6BAA6B,MAAM,QAAQ,GAC5F;CAEH,MAAM,MAAM,oBAAoB,QAAQ,QAAQ,QAAQ;CACxD,MAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,OAAM,IAAI,KAAK;EACb,MAAM;EACN,WAAW,QAAQ;EACnB,YAAY,SAAS;EACrB;EACA,UAAU,MAAM;EAChB,SAAS,QAAQ;EACjB,SAAS,MAAM;EACf,WAAW,UAAU,SAAS,iBAAiB,SAAS,YAAY;EACpE,WAAW;EACZ,CAAC"}
|
package/dist/index.d.mts
CHANGED
|
@@ -5444,6 +5444,11 @@ type TamerResolvableString = string | CfBinding;
|
|
|
5444
5444
|
type WranglerR2BucketResolvable = Omit<WranglerR2Bucket, "bucket_name"> & {
|
|
5445
5445
|
bucket_name?: TamerResolvableString;
|
|
5446
5446
|
};
|
|
5447
|
+
/**
|
|
5448
|
+
* Stack identity in `defineConfig({ tenant: … })`. `id` and `slug` feed
|
|
5449
|
+
* default resource names and state keys; `slug` is also the default
|
|
5450
|
+
* {@link CfiStackConfig.name} when `stack.name` is omitted.
|
|
5451
|
+
*/
|
|
5447
5452
|
interface TenantMeta {
|
|
5448
5453
|
id: string;
|
|
5449
5454
|
name: string;
|
|
@@ -5495,8 +5500,14 @@ interface TenantMeta {
|
|
|
5495
5500
|
*/
|
|
5496
5501
|
ephemeralEnvPattern?: string;
|
|
5497
5502
|
}
|
|
5503
|
+
/**
|
|
5504
|
+
* D1 database declared on a worker's `resources.d1[]`.
|
|
5505
|
+
* Cloudflare **name** comes from {@link NamingConventions.d1Single} or
|
|
5506
|
+
* {@link NamingConventions.d1Shard}; **id** is stored in state after `sync` / `apply`.
|
|
5507
|
+
*/
|
|
5498
5508
|
interface D1ResourceConfig {
|
|
5499
5509
|
logicalName: string;
|
|
5510
|
+
/** `"single"`: one DB per logical name. `"sharded"`: date-stamped shards (see `d1Shard` naming hook). */
|
|
5500
5511
|
type: "single" | "sharded";
|
|
5501
5512
|
/**
|
|
5502
5513
|
* `managed` (default): Tamer creates the database; the Cloudflare name follows
|
|
@@ -5527,6 +5538,7 @@ interface D1ResourceConfig {
|
|
|
5527
5538
|
*/
|
|
5528
5539
|
preserveOnDestroy?: boolean;
|
|
5529
5540
|
}
|
|
5541
|
+
/** R2 bucket on `resources.r2[]`. Name from {@link NamingConventions.r2Bucket} or default. */
|
|
5530
5542
|
interface R2ResourceConfig {
|
|
5531
5543
|
logicalName: string;
|
|
5532
5544
|
/** When set, used as the Wrangler R2 `binding` instead of the generated stable name. */
|
|
@@ -6139,7 +6151,13 @@ interface CfiConfigBase {
|
|
|
6139
6151
|
tenant: TenantMeta;
|
|
6140
6152
|
account_id?: string;
|
|
6141
6153
|
compatibility_date?: string;
|
|
6142
|
-
/**
|
|
6154
|
+
/**
|
|
6155
|
+
* Optional overrides for Cloudflare-side **names** (D1, R2, worker scripts,
|
|
6156
|
+
* workflows). Use for brownfield stacks whose live names differ from Tamer
|
|
6157
|
+
* defaults; IDs stay in state after `sync` / `apply`, never in config.
|
|
6158
|
+
* @see {@link NamingConventions}
|
|
6159
|
+
* @see docs/brownfield-adoption.md
|
|
6160
|
+
*/
|
|
6143
6161
|
naming?: NamingConventions;
|
|
6144
6162
|
/** CloudFormation-style stack identity. See {@link CfiStackConfig}. */
|
|
6145
6163
|
stack?: CfiStackConfig;
|
|
@@ -6191,15 +6209,35 @@ interface CfiConfigBase {
|
|
|
6191
6209
|
*/
|
|
6192
6210
|
outputs?: Record<string, TamerResolvableString>;
|
|
6193
6211
|
}
|
|
6212
|
+
/** Single-worker stack: one top-level `worker` (no `workers` map). */
|
|
6194
6213
|
interface CfiConfigSingle extends CfiConfigBase {
|
|
6195
6214
|
worker: WorkerConfig;
|
|
6196
6215
|
workers?: never;
|
|
6197
6216
|
}
|
|
6217
|
+
/** Multi-worker stack: `workers` keyed by deploy target (e.g. `api`, `admin`). */
|
|
6198
6218
|
interface CfiConfigMulti extends CfiConfigBase {
|
|
6199
6219
|
workers: Record<string, WorkerConfig>;
|
|
6200
6220
|
worker?: never;
|
|
6201
6221
|
}
|
|
6222
|
+
/**
|
|
6223
|
+
* Root document for `tamer/project.config.ts` (or `tamer.project.config.ts`).
|
|
6224
|
+
* Single-worker stacks use {@link CfiConfigSingle}; multi-worker use
|
|
6225
|
+
* {@link CfiConfigMulti}.
|
|
6226
|
+
*/
|
|
6202
6227
|
type CfiConfig = CfiConfigSingle | CfiConfigMulti;
|
|
6228
|
+
/**
|
|
6229
|
+
* Identity helper for `tamer/project.config.ts` so the config object is typed
|
|
6230
|
+
* as {@link CfiConfig} in the IDE. No runtime transformation — the CLI loads
|
|
6231
|
+
* and validates the exported default.
|
|
6232
|
+
*
|
|
6233
|
+
* @example
|
|
6234
|
+
* ```ts
|
|
6235
|
+
* export default defineConfig({
|
|
6236
|
+
* tenant: { id: "acme", name: "Acme", slug: "acme" },
|
|
6237
|
+
* workers: { api: { main: "workers/api/src/index.ts" } },
|
|
6238
|
+
* });
|
|
6239
|
+
* ```
|
|
6240
|
+
*/
|
|
6203
6241
|
declare function defineConfig(config: CfiConfig): CfiConfig;
|
|
6204
6242
|
/**
|
|
6205
6243
|
* Optional metadata on env overlay objects. Stripped before merge; when set, it must
|
|
@@ -6220,6 +6258,10 @@ declare const TAMER_OVERLAY_ENV_KEY: "tamerOverlayEnv";
|
|
|
6220
6258
|
*/
|
|
6221
6259
|
declare function defineProjectOverlay<E extends string, T extends Record<string, unknown>>(forEnv: E, fragment: T): T & { [K in typeof TAMER_OVERLAY_ENV_KEY]: E };
|
|
6222
6260
|
declare function defineProjectOverlay<T extends Record<string, unknown>>(fragment: T): T;
|
|
6261
|
+
/**
|
|
6262
|
+
* Identity helper for one entry in `workers` (or the sole `worker` field).
|
|
6263
|
+
* Same pattern as {@link defineConfig} — improves hover types only.
|
|
6264
|
+
*/
|
|
6223
6265
|
declare function defineWorker(config: WorkerConfig): WorkerConfig;
|
|
6224
6266
|
declare function getDispatchNamespaces(config: CfiConfig): DispatchNamespaceResourceConfig[];
|
|
6225
6267
|
declare function getDnsRecords(config: CfiConfig): DnsRecordResourceConfig[];
|
|
@@ -6579,15 +6621,85 @@ interface TenantStatus {
|
|
|
6579
6621
|
env: string;
|
|
6580
6622
|
workers: WorkerStatus[];
|
|
6581
6623
|
}
|
|
6624
|
+
/**
|
|
6625
|
+
* Optional functions that derive **Cloudflare resource names** from config
|
|
6626
|
+
* (`logicalName`, `tenant.id`, `env`, etc.). Used by `apply`, `sync`, `plan`,
|
|
6627
|
+
* `drift`, and `import` through one shared naming derivation path.
|
|
6628
|
+
*
|
|
6629
|
+
* **Greenfield:** omit this block — Tamer uses built-in defaults below.
|
|
6630
|
+
*
|
|
6631
|
+
* **Brownfield:** reproduce legacy names here (functions, not UUIDs). Config
|
|
6632
|
+
* holds logical names and hooks; **state** holds `cfId` after `tamer sync`.
|
|
6633
|
+
* Run bootstrap → sync → plan before expecting adoption to succeed.
|
|
6634
|
+
*
|
|
6635
|
+
* KV, queues, hyperdrive, vectorize, pipelines, AI gateway, secrets store,
|
|
6636
|
+
* dispatch namespaces, and DNS use fixed derived names today (no hooks).
|
|
6637
|
+
*
|
|
6638
|
+
* @see docs/brownfield-adoption.md
|
|
6639
|
+
* @see docs/consumer-quickstart.md
|
|
6640
|
+
*/
|
|
6582
6641
|
interface NamingConventions {
|
|
6642
|
+
/**
|
|
6643
|
+
* Cloudflare D1 database name for `resources.d1[]` with `type: "single"`.
|
|
6644
|
+
*
|
|
6645
|
+
* **Default:** `db_{logicalName}_t_{tenantId}_{env}`.
|
|
6646
|
+
*
|
|
6647
|
+
* **`sync`:** exact match on the derived name.
|
|
6648
|
+
*/
|
|
6583
6649
|
d1Single?: (logicalName: string, tenantId: string, env: string) => string;
|
|
6650
|
+
/**
|
|
6651
|
+
* Cloudflare D1 database name for `resources.d1[]` with `type: "sharded"`.
|
|
6652
|
+
*
|
|
6653
|
+
* **`date`:** shard stamp passed to apply (`YYYY-MM-DD` or compact
|
|
6654
|
+
* `YYYYMMDD` after normalization). Your hook should embed it the same way
|
|
6655
|
+
* legacy DBs do (often `date.replace(/-/g, "")`).
|
|
6656
|
+
*
|
|
6657
|
+
* **Default:** `db_{logicalName}_{YYYYMMDD}_t_{tenantId}_{env}` (omits
|
|
6658
|
+
* `{logicalName}_` when logical is `default` or empty).
|
|
6659
|
+
*
|
|
6660
|
+
* **`sync`:** with a custom hook, **derive-and-match** — Tamer parses the
|
|
6661
|
+
* shard date from each account D1 name (`_YYYYMMDD_t_` or `_YYYY_MM_DD_t_`),
|
|
6662
|
+
* re-derives via this function, and adopts when the names are equal. Without
|
|
6663
|
+
* a hook, prefix/suffix regex matching is used instead.
|
|
6664
|
+
*/
|
|
6584
6665
|
d1Shard?: (logicalName: string, date: string, tenantId: string, env: string) => string;
|
|
6585
6666
|
/**
|
|
6586
|
-
*
|
|
6587
|
-
*
|
|
6667
|
+
* R2 bucket name for `resources.r2[]`.
|
|
6668
|
+
*
|
|
6669
|
+
* **`date`:** `YYYYMMDD` (no dashes) from the calendar day **apply** or
|
|
6670
|
+
* **sync** runs. Ignore unless your legacy scheme embeds a date stamp.
|
|
6671
|
+
*
|
|
6672
|
+
* **Default:** `r2-{logicalName}-t-{tenantId}-{env}` (no date segment).
|
|
6673
|
+
*
|
|
6674
|
+
* **`sync`:** exact match on the name produced by calling this hook with
|
|
6675
|
+
* today's date (same as apply). Legacy dated buckets
|
|
6676
|
+
* `r2-{logical}-YYYYMMDD-t-{tenant}-{env}` still match when the hook is
|
|
6677
|
+
* omitted.
|
|
6588
6678
|
*/
|
|
6589
6679
|
r2Bucket?: (logicalName: string, date: string, tenantId: string, env: string) => string;
|
|
6680
|
+
/**
|
|
6681
|
+
* Deployed Worker **script** name (wrangler `name` / `tamer deploy` target).
|
|
6682
|
+
*
|
|
6683
|
+
* **Default:** `{slug}-{workerKey}-{tenantId}` for `local`; otherwise
|
|
6684
|
+
* `{slug}-{workerKey}-{env}-{tenantId}`. Overridable per worker via
|
|
6685
|
+
* {@link WorkerConfig.scriptName}.
|
|
6686
|
+
*
|
|
6687
|
+
* **`sync`:** worker script list is matched by deployed name (routes use
|
|
6688
|
+
* the same derivation).
|
|
6689
|
+
*/
|
|
6590
6690
|
workerName?: (slug: string, workerKey: string, env: string, tenantId: string) => string;
|
|
6691
|
+
/**
|
|
6692
|
+
* Cloudflare workflow **registration** name for `resources.workflows[]`.
|
|
6693
|
+
* Workflow names are immutable on Cloudflare — brownfield stacks must
|
|
6694
|
+
* return the live registration name here.
|
|
6695
|
+
*
|
|
6696
|
+
* **Default:** `wf-{logicalName}-t-{tenantId}-{env}` (lowercased).
|
|
6697
|
+
*
|
|
6698
|
+
* **`sync`:** exact match on the derived name (same as D1 single / default
|
|
6699
|
+
* R2). Prefer `tamer import --kind workflow` only when a legacy name cannot
|
|
6700
|
+
* be expressed as a function of logical name, tenant, and env.
|
|
6701
|
+
*/
|
|
6702
|
+
workflow?: (logicalName: string, tenantId: string, env: string) => string;
|
|
6591
6703
|
}
|
|
6592
6704
|
//#endregion
|
|
6593
6705
|
//#region src/dx/normalize.d.ts
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/generated/wrangler-types.generated.ts","../src/generated/wrangler-types.ts","../src/dx/cloudflare-bindings.ts","../src/types.ts","../src/dx/normalize.ts","../src/dx/index.ts"],"sourcesContent":[],"mappings":";;AASA;;;;;AAOA;AAYA;AAaY,KAhCA,KAAA,GAgCA,MAAA,GAhCiB,WAgCI,GAhCU,aAgCV,GAhC0B,iBAgC1B;AAihEjC;;;;;;AAiHU,KA3pEE,oBAAA,GA2pEF,UAAA,GAAA,UAAA,GAAA,cAAA,GAAA,MAAA,GAAA,MAAA,GAAA,cAAA,GAAA,mBAAA;;;;;AAiOkB,KAh3EhB,IAAA,GAg3EgB,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,IAAA,GA32ExB,IA22EwB,EAAA,GAAA;EA2BZ,CAAA,CAAA,EAAA,MAAA,CAAA,EAp4EG,IAo4EH;CAOA;;;;;AAqwBF,KA1oGF,qBAAA,GA0oGE;EAOA;;;EA0fe,IAAA,EAAA,MAAA;EAAqB;AAoOlD;AASA;EASiB,UAAA,EAAA,MAAA;EAYA;AA+BjB;AAWA;EAsDW,WAAA,CAAA,EAAA,MAAA;EAMQ;;;EAoBL,WAAA,CAAA,EAAA,MAAA;CAiCL,EAAA;;;;;;;;;UAvhEQ,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAsDN;;;;;;mBAMQ,cAAc,gBAAgB;;;;;;;;;;;;;;;;;;;;eAoBlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAiCL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6MI;oBACM;aACP;YACD;;;;;;;;;;;;;;;;;4BAiBgB;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BZ;;;;;;;gBAOA;;;;;;;;;;;;;;;;;;;iBAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAieI;;;;;;+BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAgPL;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BZ;;;;;;;cAOA;;;;;;;;;;;;;;;;;;;eAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAieI;;;;;;6BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAieI;;;;;;+BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAgPL;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BZ;;;;;;;cAOA;;;;;;;;;;;;;;;;;;;eAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAieI;;;;;;6BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/generated/wrangler-types.generated.ts","../src/generated/wrangler-types.ts","../src/dx/cloudflare-bindings.ts","../src/types.ts","../src/dx/normalize.ts","../src/dx/index.ts"],"sourcesContent":[],"mappings":";;AASA;;;;;AAOA;AAYA;AAaY,KAhCA,KAAA,GAgCA,MAAA,GAhCiB,WAgCI,GAhCU,aAgCV,GAhC0B,iBAgC1B;AAihEjC;;;;;;AAiHU,KA3pEE,oBAAA,GA2pEF,UAAA,GAAA,UAAA,GAAA,cAAA,GAAA,MAAA,GAAA,MAAA,GAAA,cAAA,GAAA,mBAAA;;;;;AAiOkB,KAh3EhB,IAAA,GAg3EgB,MAAA,GAAA,MAAA,GAAA,OAAA,GAAA,IAAA,GA32ExB,IA22EwB,EAAA,GAAA;EA2BZ,CAAA,CAAA,EAAA,MAAA,CAAA,EAp4EG,IAo4EH;CAOA;;;;;AAqwBF,KA1oGF,qBAAA,GA0oGE;EAOA;;;EA0fe,IAAA,EAAA,MAAA;EAAqB;AAoOlD;AASA;EASiB,UAAA,EAAA,MAAA;EAYA;AA+BjB;AAWA;EAsDW,WAAA,CAAA,EAAA,MAAA;EAMQ;;;EAoBL,WAAA,CAAA,EAAA,MAAA;CAiCL,EAAA;;;;;;;;;UAvhEQ,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAsDN;;;;;;mBAMQ,cAAc,gBAAgB;;;;;;;;;;;;;;;;;;;;eAoBlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAiCL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6MI;oBACM;aACP;YACD;;;;;;;;;;;;;;;;;4BAiBgB;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BZ;;;;;;;gBAOA;;;;;;;;;;;;;;;;;;;iBAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAieI;;;;;;+BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAgPL;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BZ;;;;;;;cAOA;;;;;;;;;;;;;;;;;;;eAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAieI;;;;;;6BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoOZ,WAAA;;;;;;;;;UASA,aAAA;;;;;;;;;UASA,iBAAA;;;;;;;;;;;;UAYA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA+BA,IAAA;QACT;;;;;;;;;;UAUS,oDAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAsDN;;;;;;mBAMQ,cAAc,gBAAgB;;;;;;;;;;;;;;;;;;;;cAoBnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAiCL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6MK;oBACM;aACP;YACD;;;;;;;;;;;;;;;;;4BAiBgB;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BZ;;;;;;;gBAOA;;;;;;;;;;;;;;;;;;;iBAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAieI;;;;;;+BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAqOd,eAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAyCA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0GA,YAAA;;;;;;;;;;;;;;UAcA,qBAAA;;;;;;;;;;UAUA,mBAAA;;;;;;;;;;;;;;UAcA,SAAA;;;;;;;;;;;;;iBAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAuDN;;;;;;mBAMQ,cAAc,gBAAgB;;;;;;;;;;;;;;;;;;;;eAoBlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAiCL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA6MI;oBACM;aACP;YACD;;;;;;;;;;;;;;;;;4BAiBgB;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BZ;;;;;;;gBAOA;;;;;;;;;;;;;;;;;;;iBAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAieI;;;;;;+BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAgPL;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BZ;;;;;;;cAOA;;;;;;;;;;;;;;;;;;;eAmBC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAieI;;;;;;6BAMU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as cf, c as TAMER_OVERLAY_ENV_KEY, d as defineWorker, f as getDispatchNamespaces, i as CfBinding, l as defineConfig, m as getLogpushJobs, n as materializeTamerResolvable, o as cfBindingSpecToTamerRef, p as getDnsRecords, r as materializeVars, s as isCfBinding, t as materializeCloudflareBindings, u as defineProjectOverlay } from "./normalize-
|
|
1
|
+
import { a as cf, c as TAMER_OVERLAY_ENV_KEY, d as defineWorker, f as getDispatchNamespaces, i as CfBinding, l as defineConfig, m as getLogpushJobs, n as materializeTamerResolvable, o as cfBindingSpecToTamerRef, p as getDnsRecords, r as materializeVars, s as isCfBinding, t as materializeCloudflareBindings, u as defineProjectOverlay } from "./normalize-DVSTRZhO.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/dx/index.ts
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as TAMER_OVERLAY_ENV_KEY, t as materializeCloudflareBindings } from "./normalize-
|
|
1
|
+
import { c as TAMER_OVERLAY_ENV_KEY, t as materializeCloudflareBindings } from "./normalize-DVSTRZhO.mjs";
|
|
2
2
|
import { a as boolean, c as number, d as string, f as union, i as array, l as object, n as _enum, r as any, s as literal, u as record } from "./tamer.mjs";
|
|
3
3
|
import { basename, dirname, resolve } from "path";
|
|
4
4
|
import { existsSync } from "fs";
|
|
@@ -515,4 +515,4 @@ async function resolveWorkerConfigRef(wc, baseDir) {
|
|
|
515
515
|
|
|
516
516
|
//#endregion
|
|
517
517
|
export { loadConfig as n, getWorkers as t };
|
|
518
|
-
//# sourceMappingURL=loader-
|
|
518
|
+
//# sourceMappingURL=loader-DAvCKLTT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-DP7yXqT6.mjs","names":["out: Record<string, unknown>","overlay: string | null","z.object","z.string","z\n .array","z\n .string","z.array","z\n .string","z\n .object","z.enum","z.boolean","z.union","z.number","z\n .object","z.literal","z\n .enum","z.record","z\n .union","z.any","z\n .object","z\n .string","z\n .record","raw: unknown","entries: [string, WorkerConfig][]"],"sources":["../src/core/config/merge-project-overlay.ts","../src/core/config/resolve-config-sources.ts","../src/core/config/loader.ts"],"sourcesContent":["/**\n * Deep-merge `tamer/env/<env>.config.ts` onto `tamer/project.config.ts`.\n * See docs/design-tamer-project-config.md.\n */\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return (\n v !== null &&\n typeof v === \"object\" &&\n !Array.isArray(v) &&\n !(v instanceof Date)\n );\n}\n\nfunction validateOverlayWorkers(\n projectWorkers: Record<string, unknown>,\n overlayWorkers: Record<string, unknown>,\n): void {\n for (const k of Object.keys(overlayWorkers)) {\n if (!(k in projectWorkers)) {\n throw new Error(\n `Tamer env overlay: unknown worker key \"${k}\". ` +\n `Declare \"${k}\" in tamer/project.config.ts first — overlays may only patch existing workers.`,\n );\n }\n }\n}\n\nfunction mergeWorkerResources(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const pk = patch[k];\n if (pk !== undefined) {\n out[k] = pk;\n }\n }\n return out;\n}\n\nfunction mergeEnvMap(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\nfunction mergeWorkerConfig(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...base };\n for (const key of Object.keys(patch)) {\n const pv = patch[key];\n if (pv === undefined) continue;\n\n if (key === \"vars\") {\n const bv = isPlainObject(base.vars) ? base.vars : {};\n const ov = isPlainObject(patch.vars) ? patch.vars : {};\n out.vars = { ...bv, ...ov };\n continue;\n }\n if (key === \"tamerRoutes\") {\n out.tamerRoutes = pv;\n continue;\n }\n if (key === \"tamerStaleRouteSweepZones\") {\n out.tamerStaleRouteSweepZones = pv;\n continue;\n }\n if (key === \"resources\") {\n if (isPlainObject(base.resources) && isPlainObject(pv)) {\n out.resources = mergeWorkerResources(base.resources, pv);\n } else {\n out.resources = pv;\n }\n continue;\n }\n if (key === \"env\") {\n if (isPlainObject(base.env) && isPlainObject(pv)) {\n out.env = mergeEnvMap(base.env, pv);\n } else {\n out.env = pv;\n }\n continue;\n }\n if (key === \"local\") {\n if (isPlainObject(base.local) && isPlainObject(pv)) {\n out.local = mergeWorkerConfig(\n base.local as Record<string, unknown>,\n pv as Record<string, unknown>,\n );\n } else {\n out.local = pv;\n }\n continue;\n }\n out[key] = pv;\n }\n return out;\n}\n\nfunction mergeWorkersRecord(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\n/**\n * Merge env overlay onto project config (both plain objects from `default` exports).\n * Does not run {@link materializeCloudflareBindings} — caller does that on the result.\n */\nexport function mergeProjectOverlay(\n project: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...project };\n for (const key of Object.keys(overlay)) {\n const ov = overlay[key];\n if (ov === undefined) continue;\n const pv = project[key];\n\n switch (key) {\n case \"tenant\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"naming\":\n out[key] = ov;\n break;\n case \"workers\":\n if (!isPlainObject(pv) || !isPlainObject(ov)) {\n out[key] = ov;\n break;\n }\n validateOverlayWorkers(pv, ov);\n out[key] = mergeWorkersRecord(pv, ov);\n break;\n case \"worker\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = mergeWorkerConfig(pv, ov);\n } else {\n out[key] = ov;\n }\n break;\n case \"outputs\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"logpushJobs\":\n case \"dispatchNamespaces\":\n case \"dnsRecords\":\n out[key] = ov;\n break;\n default:\n out[key] = ov;\n }\n }\n return out;\n}\n","import { existsSync } from \"fs\";\nimport { basename, dirname, join, resolve } from \"path\";\n\nexport type ResolvedConfigSources =\n | { mode: \"single\"; path: string }\n | { mode: \"merged\"; projectPath: string; overlayPath: string | null };\n\nfunction isProjectFileName(file: string): boolean {\n return file === \"project.config.ts\" || file === \"tamer.project.config.ts\";\n}\n\nfunction projectDirForMergedEntry(absProject: string): string {\n const dir = dirname(absProject);\n const file = basename(absProject);\n if (file === \"project.config.ts\") {\n return dir;\n }\n return dir;\n}\n\nfunction overlayPathForNestedLayout(projectDir: string, env: string): string {\n return resolve(projectDir, \"env\", `${env}.config.ts`);\n}\n\nfunction overlayPathForFlatLayout(projectRoot: string, env: string): string {\n return resolve(projectRoot, `tamer.env.${env}.ts`);\n}\n\nfunction rejectLegacyTamerConfigFile(context: string): never {\n throw new Error(\n `${context}: tamer.config.ts is not supported. ` +\n `Move the default export to tamer/project.config.ts and optional per-env overlays to tamer/env/<env>.config.ts ` +\n `(or use tamer.project.config.ts at the repo root with optional tamer.env.<env>.ts).`,\n );\n}\n\n/**\n * Resolve which config file(s) to load. See docs/design-tamer-project-config.md.\n *\n * - **Merged:** `tamer/project.config.ts` or `tamer.project.config.ts`, plus optional env overlay.\n * - **Single:** explicit `--config` path to any `.ts` file **except** `tamer.config.ts` (e.g. alternate snapshots in tests).\n */\nexport function resolveConfigSources(\n cwd: string,\n explicitConfigPath: string | undefined,\n env: string | undefined,\n): ResolvedConfigSources {\n if (explicitConfigPath) {\n const abs = resolve(cwd, explicitConfigPath);\n const file = basename(abs);\n if (file === \"tamer.config.ts\") {\n rejectLegacyTamerConfigFile(\"--config\");\n }\n if (isProjectFileName(file)) {\n const projectDir = projectDirForMergedEntry(abs);\n let overlay: string | null = null;\n if (env) {\n if (file === \"project.config.ts\") {\n const candidate = overlayPathForNestedLayout(projectDir, env);\n if (existsSync(candidate)) overlay = candidate;\n } else {\n const candidate = overlayPathForFlatLayout(dirname(abs), env);\n if (existsSync(candidate)) overlay = candidate;\n }\n }\n return { mode: \"merged\", projectPath: abs, overlayPath: overlay };\n }\n return { mode: \"single\", path: abs };\n }\n\n const nestedProject = resolve(cwd, \"tamer\", \"project.config.ts\");\n if (existsSync(nestedProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForNestedLayout(\n dirname(nestedProject),\n env,\n );\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: nestedProject,\n overlayPath: overlay,\n };\n }\n\n const flatProject = resolve(cwd, \"tamer.project.config.ts\");\n if (existsSync(flatProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForFlatLayout(cwd, env);\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: flatProject,\n overlayPath: overlay,\n };\n }\n\n if (existsSync(resolve(cwd, \"tamer.config.ts\"))) {\n rejectLegacyTamerConfigFile(\"Config discovery\");\n }\n\n throw new Error(\n `No Tamer project config under ${cwd}. ` +\n `Create tamer/project.config.ts (or tamer.project.config.ts at the repo root).`,\n );\n}\n","import { resolve } from \"path\";\nimport { z } from \"zod\";\nimport { materializeCloudflareBindings } from \"../../dx/normalize.js\";\nimport type { CfiConfig, WorkerConfig } from \"../../types.js\";\nimport { TAMER_OVERLAY_ENV_KEY } from \"../../types.js\";\nimport { mergeProjectOverlay } from \"./merge-project-overlay.js\";\nimport { resolveConfigSources } from \"./resolve-config-sources.js\";\n\nconst TENANT_SHARD_ROLE_RE = /^[a-z][a-z0-9_-]*$/;\n\nconst TenantMetaSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n slug: z.string().min(1),\n d1Shards: z\n .array(\n z\n .string()\n .min(1)\n .refine((s) => TENANT_SHARD_ROLE_RE.test(s), {\n // Roles flow into D1 database names (`db_{role}_…`); D1 names\n // accept `[A-Za-z0-9_-]` and Cloudflare lowercases on read,\n // so we lock roles to the same lowercase subset to avoid the\n // \"config says `System` but Cloudflare returns `system`\"\n // adoption drift.\n error:\n \"tenant.d1Shards entries must be lowercase ASCII (letters, digits, `_`, `-`) and start with a letter\",\n }),\n )\n .optional()\n .refine(\n (arr) => !arr || new Set(arr).size === arr.length,\n \"tenant.d1Shards must not contain duplicate roles\",\n ),\n protectedEnvs: z.array(z.string().min(1)).optional(),\n ephemeralEnvPattern: z\n .string()\n .min(1)\n .optional()\n .refine(\n (s) => {\n if (s == null) return true;\n try {\n new RegExp(s);\n return true;\n } catch {\n return false;\n }\n },\n // Compile-fail at config-load time so a typo in\n // `ephemeralEnvPattern` surfaces here instead of later when\n // `apply` / `provision-tenant` tries to resolve a namespace.\n \"tenant.ephemeralEnvPattern must be a valid JavaScript RegExp source string\",\n ),\n});\n\nconst D1ResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n type: z.enum([\"single\", \"sharded\"]),\n ownership: z.enum([\"managed\", \"external\"]).optional(),\n databaseName: z.string().optional(),\n binding: z.string().optional(),\n migrationsDir: z.string().optional(),\n migrationsTable: z.string().optional(),\n preserveOnDestroy: z.boolean().optional(),\n })\n .refine(\n (d) =>\n d.ownership !== \"external\" ||\n (typeof d.databaseName === \"string\" && d.databaseName.length > 0),\n { error: \"resources.d1: ownership 'external' requires non-empty databaseName\" },\n )\n .refine(\n (d) => d.ownership !== \"external\" || d.type === \"single\",\n { error: \"resources.d1: ownership 'external' only supports type 'single'\" },\n );\n\nconst R2ResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n});\n\nconst KVResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n});\n\nconst QueueResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n consumerOnly: z.boolean().optional(),\n});\n\nconst HyperdriveSecretSchema = z.union([\n z.string(),\n z.object({ fromEnv: z.string().min(1) }),\n]);\n\nconst HyperdriveOriginSchema = z.object({\n scheme: z.enum([\"postgres\", \"postgresql\", \"mysql\"]),\n host: z.string().min(1),\n port: z.number().optional(),\n database: z.string().min(1),\n user: z.string().min(1),\n password: HyperdriveSecretSchema,\n access_client_id: z.string().optional(),\n access_client_secret: HyperdriveSecretSchema.optional(),\n});\n\nconst HyperdriveResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n origin: HyperdriveOriginSchema,\n caching: z\n .object({\n disabled: z.boolean().optional(),\n max_age: z.number().optional(),\n stale_while_revalidate: z.number().optional(),\n })\n .optional(),\n mtls: z\n .object({\n ca_certificate_id: z.string().optional(),\n mtls_certificate_id: z.string().optional(),\n })\n .optional(),\n localConnectionString: z.string().optional(),\n});\n\nconst VectorizeResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n dimensions: z.number().int().positive(),\n metric: z.enum([\"cosine\", \"euclidean\", \"dot-product\"]),\n description: z.string().optional(),\n});\n\nconst AIGatewayResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cacheTtl: z.number().int().nonnegative().optional(),\n cacheInvalidateOnUpdate: z.boolean().optional(),\n collectLogs: z.boolean().optional(),\n authentication: z.boolean().optional(),\n rateLimitingInterval: z.number().int().nonnegative().optional(),\n rateLimitingLimit: z.number().int().nonnegative().optional(),\n rateLimitingTechnique: z.enum([\"fixed\", \"sliding\"]).optional(),\n});\n\nconst DispatchNamespaceResourceSchema = z.object({\n logicalName: z.string().min(1),\n namespace: z.string().min(1),\n envSuffix: z.boolean().optional(),\n});\n\nconst LogpushJobR2DestinationSchema = z.object({\n bucketLogicalName: z.string().min(1),\n pathPrefix: z.string().optional(),\n accessKeyIdEnv: z.string().min(1),\n secretAccessKeyEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesIngestSchema = z.object({\n streamId: z.string().min(1),\n pipelineId: z.string().min(1),\n bearerTokenEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesAutoSchema = z.object({\n catalogBucketLogicalName: z.string().min(1),\n tableName: z.string().min(1),\n namespace: z.string().min(1).optional(),\n /** When not `false`, new sinks get `${tableName}_${Date.now()}` (default). */\n tableNameAppendTimestamp: z.boolean().optional(),\n sinkRowGroupBytes: z.number().int().positive().optional(),\n sinkRollingFileSizeBytes: z.number().int().positive().optional(),\n sinkRollingIntervalSeconds: z.number().int().positive().optional(),\n});\n\nconst LogpushJobResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n dataset: z.literal(\"workers_trace_events\"),\n jobName: z.string().optional(),\n r2: LogpushJobR2DestinationSchema.optional(),\n pipelinesIngest: LogpushJobPipelinesIngestSchema.optional(),\n pipelinesAuto: LogpushJobPipelinesAutoSchema.optional(),\n destinationConfEnv: z.string().min(1).optional(),\n destinationConfFromJobId: z.number().int().positive().optional(),\n destinationConfFromJobIdEnv: z.string().min(1).optional(),\n filter: z.string().min(1).optional(),\n fieldNames: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n })\n .refine(\n (d) => {\n const hasR2 = Boolean(d.r2);\n const n =\n (d.destinationConfEnv ? 1 : 0) +\n (d.destinationConfFromJobId != null ? 1 : 0) +\n (d.destinationConfFromJobIdEnv ? 1 : 0) +\n (d.pipelinesIngest ? 1 : 0) +\n (d.pipelinesAuto ? 1 : 0);\n if (hasR2) return n === 0;\n return n === 1;\n },\n {\n error:\n \"logpushJobs: set exactly one of r2 | pipelinesIngest | pipelinesAuto | destinationConfEnv | destinationConfFromJobId | destinationConfFromJobIdEnv\",\n },\n )\n .refine(\n (d) =>\n !(\n d.destinationConfFromJobId != null && d.destinationConfFromJobIdEnv\n ),\n {\n error:\n \"logpushJobs: use only one of destinationConfFromJobId or destinationConfFromJobIdEnv\",\n },\n )\n .refine((d) => !(d.pipelinesIngest && d.pipelinesAuto), {\n error: \"logpushJobs: use only one of pipelinesIngest or pipelinesAuto\",\n });\n\nconst DnsRecordResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n zoneId: z.string().min(1),\n type: z.enum([\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"TXT\",\n \"MX\",\n \"NS\",\n \"CAA\",\n \"SRV\",\n \"PTR\",\n \"HTTPS\",\n \"SVCB\",\n ]),\n name: z.string().min(1),\n content: z.string().min(1),\n ttl: z.number().int().positive().optional(),\n proxied: z.boolean().optional(),\n priority: z.number().int().nonnegative().optional(),\n comment: z.string().optional(),\n skipEnvs: z.array(z.string()).optional(),\n preserveOnDestroy: z.boolean().optional(),\n});\n\nconst PipelineResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n sql: z.string().min(1),\n binding: z.string().min(1).optional(),\n});\n\nconst WorkflowResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n className: z.string().min(1),\n scriptName: z.string().min(1).optional(),\n binding: z.string().min(1).optional(),\n limits: z\n .object({ steps: z.number().int().positive().optional() })\n .optional(),\n});\n\nconst SecretsStoreResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n});\n\nconst SecretsStoreSecretBindingSchema = z.object({\n binding: z.string().min(1),\n store: z.string().min(1),\n secretName: z.string().min(1),\n});\n\nconst WorkerResourcesSchema = z.object({\n d1: z.array(D1ResourceConfigSchema).optional(),\n r2: z.array(R2ResourceConfigSchema).optional(),\n kv: z.array(KVResourceConfigSchema).optional(),\n queues: z.array(QueueResourceConfigSchema).optional(),\n hyperdrive: z.array(HyperdriveResourceConfigSchema).optional(),\n vectorize: z.array(VectorizeResourceConfigSchema).optional(),\n aiGateway: z.array(AIGatewayResourceConfigSchema).optional(),\n pipelines: z.array(PipelineResourceConfigSchema).optional(),\n workflows: z.array(WorkflowResourceConfigSchema).optional(),\n secretsStores: z.array(SecretsStoreResourceConfigSchema).optional(),\n secretsStoreSecrets: z.array(SecretsStoreSecretBindingSchema).optional(),\n});\n\nconst WranglerRouteSchema = z.object({\n pattern: z.string(),\n custom_domain: z.boolean().optional(),\n zone_name: z.string().optional(),\n zone_id: z.string().optional(),\n});\n\nconst WranglerAssetsSchema = z.object({\n directory: z.string(),\n binding: z.string().optional(),\n not_found_handling: z\n .enum([\"single-page-application\", \"return-404\"])\n .optional(),\n});\n\nconst EnvOverrideSchema = z\n .object({\n vars: z.record(z.string(), z.string()).optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst WorkerConfigSchema = z\n .object({\n path: z.string().optional(),\n config: z.string().optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n dispatchNamespace: z.string().optional(),\n main: z.string().optional(),\n compatibility_date: z.string().optional(),\n compatibility_flags: z.array(z.string()).optional(),\n limits: z.record(z.string(), z.union([z.number(), z.string()])).optional(),\n workers_dev: z.boolean().optional(),\n preview_urls: z.boolean().optional(),\n resources: WorkerResourcesSchema.optional(),\n alias: z.record(z.string(), z.string()).optional(),\n vars: z.record(z.string(), z.string()).optional(),\n local: EnvOverrideSchema.optional(),\n env: z.record(z.string(), EnvOverrideSchema).optional(),\n assets: WranglerAssetsSchema.optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst CfiConfigSchema = z\n .object({\n tenant: TenantMetaSchema,\n account_id: z.string().optional(),\n compatibility_date: z.string().optional(),\n naming: z.any().optional(),\n dispatchNamespaces: z.array(DispatchNamespaceResourceSchema).optional(),\n dnsRecords: z.array(DnsRecordResourceConfigSchema).optional(),\n logpushJobs: z.array(LogpushJobResourceConfigSchema).optional(),\n stack: z\n .object({\n // Stack name flows into the D1 row key (`cfi_state:{name}`) and the\n // `${tamer:import:<name>.<output>}` parser, so the same identifier\n // shape as output names keeps both surfaces consistent.\n name: z\n .string()\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"stack.name must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n })\n .optional(),\n description: z.string().min(1).optional(),\n })\n .optional(),\n outputs: z\n .record(\n // CloudFormation-ish output names: must start with a letter, then\n // letters/digits/`_`/`-`. Keeps them safe for filenames, env-var\n // exports, and `${tamer:import:stack.<name>}` parsing.\n z.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"outputs key must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n }),\n z.string().min(1),\n )\n .optional(),\n worker: WorkerConfigSchema.optional(),\n workers: z.record(z.string(), WorkerConfigSchema).optional(),\n })\n .refine(\n (data: { worker?: unknown; workers?: unknown }) =>\n (data.worker ?? data.workers) && !(data.worker && data.workers),\n { error: \"Must have either worker or workers, not both\" },\n );\n\nexport interface LoadConfigOptions {\n /** Selects `tamer/env/<env>.config.ts` when present (merged project layout). */\n env?: string;\n cwd?: string;\n}\n\nexport async function loadConfig(\n configPath?: string,\n options: LoadConfigOptions = {},\n): Promise<CfiConfig> {\n const cwd = options.cwd ?? process.cwd();\n const sources = resolveConfigSources(cwd, configPath, options.env);\n\n let raw: unknown;\n\n if (sources.mode === \"single\") {\n const mod = await import(sources.path);\n raw = mod.default;\n if (!raw) {\n throw new Error(`No default export in ${sources.path}`);\n }\n } else {\n const pMod = await import(sources.projectPath);\n const projectRaw = pMod.default;\n if (!projectRaw || typeof projectRaw !== \"object\") {\n throw new Error(`No default export in ${sources.projectPath}`);\n }\n let merged = projectRaw as Record<string, unknown>;\n if (sources.overlayPath) {\n const oMod = await import(sources.overlayPath);\n const overlayRaw = oMod.default;\n if (!overlayRaw || typeof overlayRaw !== \"object\") {\n throw new Error(\n `Env overlay must default-export an object: ${sources.overlayPath}`,\n );\n }\n const overlayObj = overlayRaw as Record<string, unknown>;\n const declaredEnv = overlayObj[TAMER_OVERLAY_ENV_KEY];\n if (declaredEnv !== undefined) {\n if (typeof declaredEnv !== \"string\") {\n throw new Error(\n `Env overlay ${sources.overlayPath}: ${TAMER_OVERLAY_ENV_KEY} must be a string`,\n );\n }\n if (options.env !== declaredEnv) {\n throw new Error(\n `Env overlay ${sources.overlayPath} sets ${TAMER_OVERLAY_ENV_KEY} \"${declaredEnv}\" but this load uses --env \"${options.env ?? \"(none)\"}\".`,\n );\n }\n }\n const { [TAMER_OVERLAY_ENV_KEY]: _strip, ...overlayRest } = overlayObj;\n merged = mergeProjectOverlay(merged, overlayRest);\n }\n raw = merged;\n }\n\n const parsed = CfiConfigSchema.safeParse(materializeCloudflareBindings(raw));\n if (!parsed.success) {\n throw new Error(`Invalid Tamer project config: ${parsed.error.message}`);\n }\n return parsed.data as CfiConfig;\n}\n\nexport async function getWorkers(\n config: CfiConfig,\n baseDir?: string,\n): Promise<[string, WorkerConfig][]> {\n const cwd = baseDir ?? process.cwd();\n\n if (\"worker\" in config && config.worker) {\n const w = await resolveWorkerConfigRef(config.worker, cwd);\n return [[\"default\", w]];\n }\n if (\"workers\" in config && config.workers) {\n const entries: [string, WorkerConfig][] = [];\n for (const [key, wc] of Object.entries(config.workers)) {\n entries.push([key, await resolveWorkerConfigRef(wc, cwd)]);\n }\n return entries;\n }\n return [];\n}\n\nasync function resolveWorkerConfigRef(\n wc: WorkerConfig,\n baseDir: string,\n): Promise<WorkerConfig> {\n if (!wc.config) return wc;\n const configPath = resolve(baseDir, wc.config);\n const mod = await import(configPath);\n const loaded = mod.default;\n if (!loaded) {\n throw new Error(`No default export in ${configPath}`);\n }\n return {\n ...loaded,\n path: wc.path,\n config: wc.config,\n } as WorkerConfig;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader-DAvCKLTT.mjs","names":["out: Record<string, unknown>","overlay: string | null","z.object","z.string","z\n .array","z\n .string","z.array","z\n .string","z\n .object","z.enum","z.boolean","z.union","z.number","z\n .object","z.literal","z\n .enum","z.record","z\n .union","z.any","z\n .object","z\n .string","z\n .record","raw: unknown","entries: [string, WorkerConfig][]"],"sources":["../src/core/config/merge-project-overlay.ts","../src/core/config/resolve-config-sources.ts","../src/core/config/loader.ts"],"sourcesContent":["/**\n * Deep-merge `tamer/env/<env>.config.ts` onto `tamer/project.config.ts`.\n * See docs/design-tamer-project-config.md.\n */\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return (\n v !== null &&\n typeof v === \"object\" &&\n !Array.isArray(v) &&\n !(v instanceof Date)\n );\n}\n\nfunction validateOverlayWorkers(\n projectWorkers: Record<string, unknown>,\n overlayWorkers: Record<string, unknown>,\n): void {\n for (const k of Object.keys(overlayWorkers)) {\n if (!(k in projectWorkers)) {\n throw new Error(\n `Tamer env overlay: unknown worker key \"${k}\". ` +\n `Declare \"${k}\" in tamer/project.config.ts first — overlays may only patch existing workers.`,\n );\n }\n }\n}\n\nfunction mergeWorkerResources(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const pk = patch[k];\n if (pk !== undefined) {\n out[k] = pk;\n }\n }\n return out;\n}\n\nfunction mergeEnvMap(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\nfunction mergeWorkerConfig(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...base };\n for (const key of Object.keys(patch)) {\n const pv = patch[key];\n if (pv === undefined) continue;\n\n if (key === \"vars\") {\n const bv = isPlainObject(base.vars) ? base.vars : {};\n const ov = isPlainObject(patch.vars) ? patch.vars : {};\n out.vars = { ...bv, ...ov };\n continue;\n }\n if (key === \"tamerRoutes\") {\n out.tamerRoutes = pv;\n continue;\n }\n if (key === \"tamerStaleRouteSweepZones\") {\n out.tamerStaleRouteSweepZones = pv;\n continue;\n }\n if (key === \"resources\") {\n if (isPlainObject(base.resources) && isPlainObject(pv)) {\n out.resources = mergeWorkerResources(base.resources, pv);\n } else {\n out.resources = pv;\n }\n continue;\n }\n if (key === \"env\") {\n if (isPlainObject(base.env) && isPlainObject(pv)) {\n out.env = mergeEnvMap(base.env, pv);\n } else {\n out.env = pv;\n }\n continue;\n }\n if (key === \"local\") {\n if (isPlainObject(base.local) && isPlainObject(pv)) {\n out.local = mergeWorkerConfig(\n base.local as Record<string, unknown>,\n pv as Record<string, unknown>,\n );\n } else {\n out.local = pv;\n }\n continue;\n }\n out[key] = pv;\n }\n return out;\n}\n\nfunction mergeWorkersRecord(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\n/**\n * Merge env overlay onto project config (both plain objects from `default` exports).\n * Does not run {@link materializeCloudflareBindings} — caller does that on the result.\n */\nexport function mergeProjectOverlay(\n project: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...project };\n for (const key of Object.keys(overlay)) {\n const ov = overlay[key];\n if (ov === undefined) continue;\n const pv = project[key];\n\n switch (key) {\n case \"tenant\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"naming\":\n out[key] = ov;\n break;\n case \"workers\":\n if (!isPlainObject(pv) || !isPlainObject(ov)) {\n out[key] = ov;\n break;\n }\n validateOverlayWorkers(pv, ov);\n out[key] = mergeWorkersRecord(pv, ov);\n break;\n case \"worker\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = mergeWorkerConfig(pv, ov);\n } else {\n out[key] = ov;\n }\n break;\n case \"outputs\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"logpushJobs\":\n case \"dispatchNamespaces\":\n case \"dnsRecords\":\n out[key] = ov;\n break;\n default:\n out[key] = ov;\n }\n }\n return out;\n}\n","import { existsSync } from \"fs\";\nimport { basename, dirname, join, resolve } from \"path\";\n\nexport type ResolvedConfigSources =\n | { mode: \"single\"; path: string }\n | { mode: \"merged\"; projectPath: string; overlayPath: string | null };\n\nfunction isProjectFileName(file: string): boolean {\n return file === \"project.config.ts\" || file === \"tamer.project.config.ts\";\n}\n\nfunction projectDirForMergedEntry(absProject: string): string {\n const dir = dirname(absProject);\n const file = basename(absProject);\n if (file === \"project.config.ts\") {\n return dir;\n }\n return dir;\n}\n\nfunction overlayPathForNestedLayout(projectDir: string, env: string): string {\n return resolve(projectDir, \"env\", `${env}.config.ts`);\n}\n\nfunction overlayPathForFlatLayout(projectRoot: string, env: string): string {\n return resolve(projectRoot, `tamer.env.${env}.ts`);\n}\n\nfunction rejectLegacyTamerConfigFile(context: string): never {\n throw new Error(\n `${context}: tamer.config.ts is not supported. ` +\n `Move the default export to tamer/project.config.ts and optional per-env overlays to tamer/env/<env>.config.ts ` +\n `(or use tamer.project.config.ts at the repo root with optional tamer.env.<env>.ts).`,\n );\n}\n\n/**\n * Resolve which config file(s) to load. See docs/design-tamer-project-config.md.\n *\n * - **Merged:** `tamer/project.config.ts` or `tamer.project.config.ts`, plus optional env overlay.\n * - **Single:** explicit `--config` path to any `.ts` file **except** `tamer.config.ts` (e.g. alternate snapshots in tests).\n */\nexport function resolveConfigSources(\n cwd: string,\n explicitConfigPath: string | undefined,\n env: string | undefined,\n): ResolvedConfigSources {\n if (explicitConfigPath) {\n const abs = resolve(cwd, explicitConfigPath);\n const file = basename(abs);\n if (file === \"tamer.config.ts\") {\n rejectLegacyTamerConfigFile(\"--config\");\n }\n if (isProjectFileName(file)) {\n const projectDir = projectDirForMergedEntry(abs);\n let overlay: string | null = null;\n if (env) {\n if (file === \"project.config.ts\") {\n const candidate = overlayPathForNestedLayout(projectDir, env);\n if (existsSync(candidate)) overlay = candidate;\n } else {\n const candidate = overlayPathForFlatLayout(dirname(abs), env);\n if (existsSync(candidate)) overlay = candidate;\n }\n }\n return { mode: \"merged\", projectPath: abs, overlayPath: overlay };\n }\n return { mode: \"single\", path: abs };\n }\n\n const nestedProject = resolve(cwd, \"tamer\", \"project.config.ts\");\n if (existsSync(nestedProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForNestedLayout(\n dirname(nestedProject),\n env,\n );\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: nestedProject,\n overlayPath: overlay,\n };\n }\n\n const flatProject = resolve(cwd, \"tamer.project.config.ts\");\n if (existsSync(flatProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForFlatLayout(cwd, env);\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: flatProject,\n overlayPath: overlay,\n };\n }\n\n if (existsSync(resolve(cwd, \"tamer.config.ts\"))) {\n rejectLegacyTamerConfigFile(\"Config discovery\");\n }\n\n throw new Error(\n `No Tamer project config under ${cwd}. ` +\n `Create tamer/project.config.ts (or tamer.project.config.ts at the repo root).`,\n );\n}\n","import { resolve } from \"path\";\nimport { z } from \"zod\";\nimport { materializeCloudflareBindings } from \"../../dx/normalize.js\";\nimport type { CfiConfig, WorkerConfig } from \"../../types.js\";\nimport { TAMER_OVERLAY_ENV_KEY } from \"../../types.js\";\nimport { mergeProjectOverlay } from \"./merge-project-overlay.js\";\nimport { resolveConfigSources } from \"./resolve-config-sources.js\";\n\nconst TENANT_SHARD_ROLE_RE = /^[a-z][a-z0-9_-]*$/;\n\nconst TenantMetaSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n slug: z.string().min(1),\n d1Shards: z\n .array(\n z\n .string()\n .min(1)\n .refine((s) => TENANT_SHARD_ROLE_RE.test(s), {\n // Roles flow into D1 database names (`db_{role}_…`); D1 names\n // accept `[A-Za-z0-9_-]` and Cloudflare lowercases on read,\n // so we lock roles to the same lowercase subset to avoid the\n // \"config says `System` but Cloudflare returns `system`\"\n // adoption drift.\n error:\n \"tenant.d1Shards entries must be lowercase ASCII (letters, digits, `_`, `-`) and start with a letter\",\n }),\n )\n .optional()\n .refine(\n (arr) => !arr || new Set(arr).size === arr.length,\n \"tenant.d1Shards must not contain duplicate roles\",\n ),\n protectedEnvs: z.array(z.string().min(1)).optional(),\n ephemeralEnvPattern: z\n .string()\n .min(1)\n .optional()\n .refine(\n (s) => {\n if (s == null) return true;\n try {\n new RegExp(s);\n return true;\n } catch {\n return false;\n }\n },\n // Compile-fail at config-load time so a typo in\n // `ephemeralEnvPattern` surfaces here instead of later when\n // `apply` / `provision-tenant` tries to resolve a namespace.\n \"tenant.ephemeralEnvPattern must be a valid JavaScript RegExp source string\",\n ),\n});\n\nconst D1ResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n type: z.enum([\"single\", \"sharded\"]),\n ownership: z.enum([\"managed\", \"external\"]).optional(),\n databaseName: z.string().optional(),\n binding: z.string().optional(),\n migrationsDir: z.string().optional(),\n migrationsTable: z.string().optional(),\n preserveOnDestroy: z.boolean().optional(),\n })\n .refine(\n (d) =>\n d.ownership !== \"external\" ||\n (typeof d.databaseName === \"string\" && d.databaseName.length > 0),\n { error: \"resources.d1: ownership 'external' requires non-empty databaseName\" },\n )\n .refine(\n (d) => d.ownership !== \"external\" || d.type === \"single\",\n { error: \"resources.d1: ownership 'external' only supports type 'single'\" },\n );\n\nconst R2ResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n});\n\nconst KVResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n});\n\nconst QueueResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n consumerOnly: z.boolean().optional(),\n});\n\nconst HyperdriveSecretSchema = z.union([\n z.string(),\n z.object({ fromEnv: z.string().min(1) }),\n]);\n\nconst HyperdriveOriginSchema = z.object({\n scheme: z.enum([\"postgres\", \"postgresql\", \"mysql\"]),\n host: z.string().min(1),\n port: z.number().optional(),\n database: z.string().min(1),\n user: z.string().min(1),\n password: HyperdriveSecretSchema,\n access_client_id: z.string().optional(),\n access_client_secret: HyperdriveSecretSchema.optional(),\n});\n\nconst HyperdriveResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n origin: HyperdriveOriginSchema,\n caching: z\n .object({\n disabled: z.boolean().optional(),\n max_age: z.number().optional(),\n stale_while_revalidate: z.number().optional(),\n })\n .optional(),\n mtls: z\n .object({\n ca_certificate_id: z.string().optional(),\n mtls_certificate_id: z.string().optional(),\n })\n .optional(),\n localConnectionString: z.string().optional(),\n});\n\nconst VectorizeResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n binding: z.string().optional(),\n dimensions: z.number().int().positive(),\n metric: z.enum([\"cosine\", \"euclidean\", \"dot-product\"]),\n description: z.string().optional(),\n});\n\nconst AIGatewayResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cacheTtl: z.number().int().nonnegative().optional(),\n cacheInvalidateOnUpdate: z.boolean().optional(),\n collectLogs: z.boolean().optional(),\n authentication: z.boolean().optional(),\n rateLimitingInterval: z.number().int().nonnegative().optional(),\n rateLimitingLimit: z.number().int().nonnegative().optional(),\n rateLimitingTechnique: z.enum([\"fixed\", \"sliding\"]).optional(),\n});\n\nconst DispatchNamespaceResourceSchema = z.object({\n logicalName: z.string().min(1),\n namespace: z.string().min(1),\n envSuffix: z.boolean().optional(),\n});\n\nconst LogpushJobR2DestinationSchema = z.object({\n bucketLogicalName: z.string().min(1),\n pathPrefix: z.string().optional(),\n accessKeyIdEnv: z.string().min(1),\n secretAccessKeyEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesIngestSchema = z.object({\n streamId: z.string().min(1),\n pipelineId: z.string().min(1),\n bearerTokenEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesAutoSchema = z.object({\n catalogBucketLogicalName: z.string().min(1),\n tableName: z.string().min(1),\n namespace: z.string().min(1).optional(),\n /** When not `false`, new sinks get `${tableName}_${Date.now()}` (default). */\n tableNameAppendTimestamp: z.boolean().optional(),\n sinkRowGroupBytes: z.number().int().positive().optional(),\n sinkRollingFileSizeBytes: z.number().int().positive().optional(),\n sinkRollingIntervalSeconds: z.number().int().positive().optional(),\n});\n\nconst LogpushJobResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n dataset: z.literal(\"workers_trace_events\"),\n jobName: z.string().optional(),\n r2: LogpushJobR2DestinationSchema.optional(),\n pipelinesIngest: LogpushJobPipelinesIngestSchema.optional(),\n pipelinesAuto: LogpushJobPipelinesAutoSchema.optional(),\n destinationConfEnv: z.string().min(1).optional(),\n destinationConfFromJobId: z.number().int().positive().optional(),\n destinationConfFromJobIdEnv: z.string().min(1).optional(),\n filter: z.string().min(1).optional(),\n fieldNames: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n })\n .refine(\n (d) => {\n const hasR2 = Boolean(d.r2);\n const n =\n (d.destinationConfEnv ? 1 : 0) +\n (d.destinationConfFromJobId != null ? 1 : 0) +\n (d.destinationConfFromJobIdEnv ? 1 : 0) +\n (d.pipelinesIngest ? 1 : 0) +\n (d.pipelinesAuto ? 1 : 0);\n if (hasR2) return n === 0;\n return n === 1;\n },\n {\n error:\n \"logpushJobs: set exactly one of r2 | pipelinesIngest | pipelinesAuto | destinationConfEnv | destinationConfFromJobId | destinationConfFromJobIdEnv\",\n },\n )\n .refine(\n (d) =>\n !(\n d.destinationConfFromJobId != null && d.destinationConfFromJobIdEnv\n ),\n {\n error:\n \"logpushJobs: use only one of destinationConfFromJobId or destinationConfFromJobIdEnv\",\n },\n )\n .refine((d) => !(d.pipelinesIngest && d.pipelinesAuto), {\n error: \"logpushJobs: use only one of pipelinesIngest or pipelinesAuto\",\n });\n\nconst DnsRecordResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n zoneId: z.string().min(1),\n type: z.enum([\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"TXT\",\n \"MX\",\n \"NS\",\n \"CAA\",\n \"SRV\",\n \"PTR\",\n \"HTTPS\",\n \"SVCB\",\n ]),\n name: z.string().min(1),\n content: z.string().min(1),\n ttl: z.number().int().positive().optional(),\n proxied: z.boolean().optional(),\n priority: z.number().int().nonnegative().optional(),\n comment: z.string().optional(),\n skipEnvs: z.array(z.string()).optional(),\n preserveOnDestroy: z.boolean().optional(),\n});\n\nconst PipelineResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n sql: z.string().min(1),\n binding: z.string().min(1).optional(),\n});\n\nconst WorkflowResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n className: z.string().min(1),\n scriptName: z.string().min(1).optional(),\n binding: z.string().min(1).optional(),\n limits: z\n .object({ steps: z.number().int().positive().optional() })\n .optional(),\n});\n\nconst SecretsStoreResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n});\n\nconst SecretsStoreSecretBindingSchema = z.object({\n binding: z.string().min(1),\n store: z.string().min(1),\n secretName: z.string().min(1),\n});\n\nconst WorkerResourcesSchema = z.object({\n d1: z.array(D1ResourceConfigSchema).optional(),\n r2: z.array(R2ResourceConfigSchema).optional(),\n kv: z.array(KVResourceConfigSchema).optional(),\n queues: z.array(QueueResourceConfigSchema).optional(),\n hyperdrive: z.array(HyperdriveResourceConfigSchema).optional(),\n vectorize: z.array(VectorizeResourceConfigSchema).optional(),\n aiGateway: z.array(AIGatewayResourceConfigSchema).optional(),\n pipelines: z.array(PipelineResourceConfigSchema).optional(),\n workflows: z.array(WorkflowResourceConfigSchema).optional(),\n secretsStores: z.array(SecretsStoreResourceConfigSchema).optional(),\n secretsStoreSecrets: z.array(SecretsStoreSecretBindingSchema).optional(),\n});\n\nconst WranglerRouteSchema = z.object({\n pattern: z.string(),\n custom_domain: z.boolean().optional(),\n zone_name: z.string().optional(),\n zone_id: z.string().optional(),\n});\n\nconst WranglerAssetsSchema = z.object({\n directory: z.string(),\n binding: z.string().optional(),\n not_found_handling: z\n .enum([\"single-page-application\", \"return-404\"])\n .optional(),\n});\n\nconst EnvOverrideSchema = z\n .object({\n vars: z.record(z.string(), z.string()).optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst WorkerConfigSchema = z\n .object({\n path: z.string().optional(),\n config: z.string().optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n dispatchNamespace: z.string().optional(),\n main: z.string().optional(),\n compatibility_date: z.string().optional(),\n compatibility_flags: z.array(z.string()).optional(),\n limits: z.record(z.string(), z.union([z.number(), z.string()])).optional(),\n workers_dev: z.boolean().optional(),\n preview_urls: z.boolean().optional(),\n resources: WorkerResourcesSchema.optional(),\n alias: z.record(z.string(), z.string()).optional(),\n vars: z.record(z.string(), z.string()).optional(),\n local: EnvOverrideSchema.optional(),\n env: z.record(z.string(), EnvOverrideSchema).optional(),\n assets: WranglerAssetsSchema.optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst CfiConfigSchema = z\n .object({\n tenant: TenantMetaSchema,\n account_id: z.string().optional(),\n compatibility_date: z.string().optional(),\n naming: z.any().optional(),\n dispatchNamespaces: z.array(DispatchNamespaceResourceSchema).optional(),\n dnsRecords: z.array(DnsRecordResourceConfigSchema).optional(),\n logpushJobs: z.array(LogpushJobResourceConfigSchema).optional(),\n stack: z\n .object({\n // Stack name flows into the D1 row key (`cfi_state:{name}`) and the\n // `${tamer:import:<name>.<output>}` parser, so the same identifier\n // shape as output names keeps both surfaces consistent.\n name: z\n .string()\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"stack.name must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n })\n .optional(),\n description: z.string().min(1).optional(),\n })\n .optional(),\n outputs: z\n .record(\n // CloudFormation-ish output names: must start with a letter, then\n // letters/digits/`_`/`-`. Keeps them safe for filenames, env-var\n // exports, and `${tamer:import:stack.<name>}` parsing.\n z.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"outputs key must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n }),\n z.string().min(1),\n )\n .optional(),\n worker: WorkerConfigSchema.optional(),\n workers: z.record(z.string(), WorkerConfigSchema).optional(),\n })\n .refine(\n (data: { worker?: unknown; workers?: unknown }) =>\n (data.worker ?? data.workers) && !(data.worker && data.workers),\n { error: \"Must have either worker or workers, not both\" },\n );\n\nexport interface LoadConfigOptions {\n /** Selects `tamer/env/<env>.config.ts` when present (merged project layout). */\n env?: string;\n cwd?: string;\n}\n\nexport async function loadConfig(\n configPath?: string,\n options: LoadConfigOptions = {},\n): Promise<CfiConfig> {\n const cwd = options.cwd ?? process.cwd();\n const sources = resolveConfigSources(cwd, configPath, options.env);\n\n let raw: unknown;\n\n if (sources.mode === \"single\") {\n const mod = await import(sources.path);\n raw = mod.default;\n if (!raw) {\n throw new Error(`No default export in ${sources.path}`);\n }\n } else {\n const pMod = await import(sources.projectPath);\n const projectRaw = pMod.default;\n if (!projectRaw || typeof projectRaw !== \"object\") {\n throw new Error(`No default export in ${sources.projectPath}`);\n }\n let merged = projectRaw as Record<string, unknown>;\n if (sources.overlayPath) {\n const oMod = await import(sources.overlayPath);\n const overlayRaw = oMod.default;\n if (!overlayRaw || typeof overlayRaw !== \"object\") {\n throw new Error(\n `Env overlay must default-export an object: ${sources.overlayPath}`,\n );\n }\n const overlayObj = overlayRaw as Record<string, unknown>;\n const declaredEnv = overlayObj[TAMER_OVERLAY_ENV_KEY];\n if (declaredEnv !== undefined) {\n if (typeof declaredEnv !== \"string\") {\n throw new Error(\n `Env overlay ${sources.overlayPath}: ${TAMER_OVERLAY_ENV_KEY} must be a string`,\n );\n }\n if (options.env !== declaredEnv) {\n throw new Error(\n `Env overlay ${sources.overlayPath} sets ${TAMER_OVERLAY_ENV_KEY} \"${declaredEnv}\" but this load uses --env \"${options.env ?? \"(none)\"}\".`,\n );\n }\n }\n const { [TAMER_OVERLAY_ENV_KEY]: _strip, ...overlayRest } = overlayObj;\n merged = mergeProjectOverlay(merged, overlayRest);\n }\n raw = merged;\n }\n\n const parsed = CfiConfigSchema.safeParse(materializeCloudflareBindings(raw));\n if (!parsed.success) {\n throw new Error(`Invalid Tamer project config: ${parsed.error.message}`);\n }\n return parsed.data as CfiConfig;\n}\n\nexport async function getWorkers(\n config: CfiConfig,\n baseDir?: string,\n): Promise<[string, WorkerConfig][]> {\n const cwd = baseDir ?? process.cwd();\n\n if (\"worker\" in config && config.worker) {\n const w = await resolveWorkerConfigRef(config.worker, cwd);\n return [[\"default\", w]];\n }\n if (\"workers\" in config && config.workers) {\n const entries: [string, WorkerConfig][] = [];\n for (const [key, wc] of Object.entries(config.workers)) {\n entries.push([key, await resolveWorkerConfigRef(wc, cwd)]);\n }\n return entries;\n }\n return [];\n}\n\nasync function resolveWorkerConfigRef(\n wc: WorkerConfig,\n baseDir: string,\n): Promise<WorkerConfig> {\n if (!wc.config) return wc;\n const configPath = resolve(baseDir, wc.config);\n const mod = await import(configPath);\n const loaded = mod.default;\n if (!loaded) {\n throw new Error(`No default export in ${configPath}`);\n }\n return {\n ...loaded,\n path: wc.path,\n config: wc.config,\n } as WorkerConfig;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as getLogpushJobs } from "./normalize-
|
|
1
|
+
import { m as getLogpushJobs } from "./normalize-DVSTRZhO.mjs";
|
|
2
2
|
import { n as r2S3CredentialsFromEnv, t as emptyR2BucketViaS3 } from "./r2S3EmptyBucket-DD81ZWQ7.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/features/logpush-job/logpush-job.resolve.ts
|
|
@@ -1103,4 +1103,4 @@ function logpushJobStatus(resources, tenant, env, state, liveJobs) {
|
|
|
1103
1103
|
|
|
1104
1104
|
//#endregion
|
|
1105
1105
|
export { logpushJobApply as a, logpushJobSync as i, logpushJobDestroy as n, logpushJobDiffPlanItems as o, logpushJobDrift as r, logpushJobStateKey as s, logpushJobStatus as t };
|
|
1106
|
-
//# sourceMappingURL=logpush-job-
|
|
1106
|
+
//# sourceMappingURL=logpush-job-DsRkOORJ.mjs.map
|