@nightintelligence/cloudflare-workers-utils 0.35.0-patch3 → 0.35.0-patch4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.mjs +2 -2
- package/dist/browser.mjs.map +1 -1
- package/dist/chunk-47QFQIPP.mjs +180 -0
- package/dist/chunk-47QFQIPP.mjs.map +1 -0
- package/dist/chunk-555CCIJE.mjs +75 -0
- package/dist/chunk-555CCIJE.mjs.map +1 -0
- package/dist/chunk-CGILA3WO.mjs +12 -0
- package/dist/{chunk-PAWJFY3S.mjs.map → chunk-CGILA3WO.mjs.map} +1 -1
- package/dist/chunk-FEHWZI5W.mjs +54 -0
- package/dist/chunk-FEHWZI5W.mjs.map +1 -0
- package/dist/chunk-KAEJMITB.mjs +64 -0
- package/dist/chunk-KAEJMITB.mjs.map +1 -0
- package/dist/chunk-T6I7NOR4.mjs +35 -0
- package/dist/chunk-T6I7NOR4.mjs.map +1 -0
- package/dist/chunk-VTOON473.mjs +237 -0
- package/dist/chunk-VTOON473.mjs.map +1 -0
- package/dist/chunk-W4SU7D4X.mjs +575 -0
- package/dist/chunk-W4SU7D4X.mjs.map +1 -0
- package/dist/chunk-YTEYGQOX.mjs +157 -0
- package/dist/chunk-YTEYGQOX.mjs.map +1 -0
- package/dist/chunk-Z7Q743IF.mjs +477 -0
- package/dist/chunk-Z7Q743IF.mjs.map +1 -0
- package/dist/chunk-ZZBYXY7A.mjs +44 -0
- package/dist/chunk-ZZBYXY7A.mjs.map +1 -0
- package/dist/compatibility-date.mjs +2 -42
- package/dist/compatibility-date.mjs.map +1 -1
- package/dist/compliance.mjs +6 -2
- package/dist/compliance.mjs.map +1 -1
- package/dist/docker-path.mjs +3 -11
- package/dist/docker-path.mjs.map +1 -1
- package/dist/errors.mjs +2 -61
- package/dist/errors.mjs.map +1 -1
- package/dist/fs-helpers.mjs +2 -33
- package/dist/fs-helpers.mjs.map +1 -1
- package/dist/global-wrangler-config-path.mjs +3 -28
- package/dist/global-wrangler-config-path.mjs.map +1 -1
- package/dist/index.mjs +9398 -54
- package/dist/index.mjs.map +1 -1
- package/dist/local-env.mjs +3 -3
- package/dist/local-env.mjs.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/prometheus-metrics.mjs +2 -51
- package/dist/prometheus-metrics.mjs.map +1 -1
- package/dist/test-helpers/index.mjs +307 -7
- package/dist/test-helpers/index.mjs.map +1 -1
- package/dist/zod-format.mjs +2 -235
- package/dist/zod-format.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-PAWJFY3S.mjs +0 -6
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEO,MAAM,uBAAuB,UAAA,CAAW","file":"index.mjs","sourcesContent":["export type {\n\tRawConfig,\n\tConfig,\n\tRawDevConfig,\n\tConfigFields,\n\tRawEnvironment,\n\tConfigBindingOptions,\n} from \"./config\";\nexport * from \"./config/environment\";\nexport { partitionExports } from \"./config/exports\";\nexport type { ExportType, PartitionedExports } from \"./config/exports\";\nexport {\n\tgetDurableObjectExports,\n\thasDurableObjectExports,\n} from \"./config/durable-object-exports\";\nexport {\n\tgetContainerDurableObjectClassNames,\n\tgetContainerNameToClassNameMap,\n\tresolveContainerClassName,\n} from \"./config/containers\";\nexport {\n\ttype RedirectedRawConfig,\n\tdefaultWranglerConfig,\n} from \"./config/config\";\nexport {\n\tformatConfigSnippet,\n\tconfigFormat,\n\tconfigFileName,\n\texperimental_readRawConfig,\n} from \"./config\";\nexport {\n\texperimental_patchConfig,\n\tPatchConfigError,\n} from \"./config/patch-config\";\nexport * from \"./worker\";\nexport * from \"./types\";\nexport {\n\ttype Message,\n\ttype Location,\n\ttype ParseFile,\n\tParseError,\n\tAPIError,\n\tparseTOML,\n\ttype PackageJSON,\n\tparsePackageJSON,\n\tparseJSON,\n\tparseJSONC,\n\treadFileSyncToBuffer,\n\treadFileSync,\n\tindexLocation,\n\tsearchLocation,\n\tparseHumanDuration,\n\tparseNonHyphenedUuid,\n\tparseByteSize,\n} from \"./parse\";\nexport {\n\tgetBindingTypeFriendlyName,\n\tisPagesConfig,\n\tnormalizeAndValidateConfig,\n\ttype NormalizeAndValidateConfigArgs,\n\ttype ConfigBindingFieldName,\n\tisValidR2BucketName,\n\tbucketFormatMessage,\n} from \"./config/validation\";\n\nimport * as validation from \"./config/validation\";\n\n/**\n * @deprecated new code should use getBindingTypeFriendlyName() instead\n */\nexport const friendlyBindingNames = validation.friendlyBindingNames;\n\nexport {\n\ttype BindingLocalSupport,\n\tgetBindingLocalSupport,\n\tvalidateBindingRemoteSetting,\n} from \"./config/binding-local-support\";\n\nexport { validatePagesConfig } from \"./config/validation-pages\";\n\nexport { Diagnostics } from \"./config/diagnostics\";\n\nexport {\n\thasProperty,\n\tisRequiredProperty,\n\tisOptionalProperty,\n} from \"./config/validation-helpers\";\n\nexport {\n\tresolveWranglerConfigPath,\n\tfindWranglerConfig,\n\tisRedirectedConfig,\n} from \"./config/config-helpers\";\nexport type { ResolveConfigPathOptions } from \"./config/config-helpers\";\nexport * from \"./errors\";\nexport { assertNever } from \"./assert-never\";\n\nexport {\n\tgetPackagePath,\n\tisPackageInstalled,\n\tgetInstalledPackageVersion,\n} from \"./package-resolution\";\n\nexport * from \"./constants\";\n\nexport { mapWorkerMetadataBindings } from \"./map-worker-metadata-bindings\";\nexport { constructWranglerConfig } from \"./construct-wrangler-config\";\nexport {\n\tconvertConfigToBindings,\n\textractBindingsOfType,\n\tgetBindings,\n\tisUnsafeBindingType,\n} from \"./binding-utils\";\nexport type { ConvertBindingsOptions } from \"./binding-utils\";\nexport { printBindings } from \"./print-bindings\";\nexport type { PrintBindingsOptions } from \"./print-bindings\";\n\nexport {\n\tgetBooleanEnvironmentVariableFactory,\n\tgetEnvironmentVariableFactory,\n} from \"./environment-variables/factory\";\n\nexport * from \"./environment-variables/misc-variables\";\n\nexport {\n\tgetGlobalConfigPath,\n\tgetGlobalWranglerCachePath,\n} from \"./global-wrangler-config-path\";\nexport type { GetGlobalConfigPathOptions } from \"./global-wrangler-config-path\";\n\nexport {\n\tisCompatDate,\n\tgetTodaysCompatDate,\n\tisNodejsCompatDefaultOn,\n\tNODEJS_COMPAT_DEFAULT_ON_DATE,\n\tNODEJS_COMPAT_V2_SWITCH_OVER_DATE,\n\tresolveNodejsCompat,\n\tstripRedundantNodejsCompatFlags,\n} from \"./compatibility-date\";\nexport type { CompatDate } from \"./compatibility-date\";\nexport { DEFAULT_COMPAT_DATE } from \"./default-compat-date\";\n\nexport { isDockerfile } from \"./config/validation\";\n\nexport { isDirectory, removeDir, removeDirSync } from \"./fs-helpers\";\n\nexport { createConfigCache } from \"./config-cache\";\nexport type { ConfigCache, ConfigCacheOptions } from \"./config-cache\";\n\nexport {\n\ttype EphemeralDirectory,\n\tgetWranglerHiddenDirPath,\n\tgetWranglerTmpDir,\n\tsweepStaleWranglerTmpDirs,\n} from \"./wrangler-tmp-dir\";\n\nexport { MetricsRegistry } from \"./prometheus-metrics\";\nexport type { Counter } from \"./prometheus-metrics\";\n\nexport type { Tunnel, TunnelOptions } from \"./tunnel\";\nexport { startTunnel } from \"./tunnel\";\nexport { spawnCloudflared } from \"./cloudflared\";\n\nexport * from \"./cfetch\";\n\nexport { fetchLatestNpmVersion } from \"./update-check\";\nexport type { NpmVersionCheckResult } from \"./update-check\";\n\nexport { LOGGER_LEVELS } from \"./logger\";\nexport type { Logger, LoggerLevel } from \"./logger\";\n\nexport { isCI, isInteractive, isNonInteractiveOrCI } from \"./is-interactive\";\nexport { openInBrowser } from \"./open-in-browser\";\nexport { clearOutputFilePath, writeOutput } from \"./output\";\nexport type { OutputEntry } from \"./output\";\n\nexport { retryOnAPIFailure } from \"./retry\";\nexport { formatTime } from \"./format-time\";\nexport {\n\tgetHostFromRoute,\n\tgetHostFromUrl,\n\tgetZoneFromRoute,\n} from \"./route-utils\";\n\nexport type { PackageManager } from \"./package-manager\";\nexport {\n\tNpmPackageManager,\n\tPnpmPackageManager,\n\tYarnPackageManager,\n\tBunPackageManager,\n\tNubPackageManager,\n} from \"./package-manager\";\n\nexport {\n\tcheckWorkerNameValidity,\n\ttoValidWorkerName,\n\tgetWorkerName,\n\tgetWorkerNameFromProject,\n} from \"./worker-name\";\n\nexport { _forceColour, formatZodError } from \"./zod-format\";\n\nexport { toUrlPath } from \"./url-path\";\nexport type { UrlPath } from \"./url-path\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/environment.ts","../src/config/config.ts","../src/config/patch-config.ts","../src/config/diagnostics.ts","../src/config/validation-helpers.ts","../src/config/validation.ts","../src/config/binding-local-support.ts","../src/config/validation-pages.ts","../src/package-resolution.ts","../src/binding-utils.ts","../src/print-bindings.ts","../src/is-interactive.ts","../src/config-cache.ts","../src/wrangler-tmp-dir.ts","../src/cloudflared.ts","../src/tunnel.ts","../src/cfetch/errors.ts","../src/cfetch/index.ts","../src/update-check.ts","../src/logger.ts","../src/open-in-browser.ts","../src/output.ts","../src/retry.ts","../src/format-time.ts","../src/route-utils.ts","../src/package-manager.ts","../src/worker-name.ts","../src/url-path.ts","../src/index.ts"],"names":["path","isRedirectedConfig","dir","exports","fs","validateDurableObjectBinding","assertNever","truncate","title","path3","readFileSync","writeFileSync","join","commandExistsSync","dirname","existsSync","mkdirSync","process","resolve","assert","fetch","error","setTimeout","friendlyBindingNames"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Wrangler configuration types. The JSDoc on these fields is also the source\n * of truth for the equivalent fields in `@cloudflare/config`\n * (`packages/config/src/types.ts` — `WorkerConfig` — and the binding option\n * interfaces in `packages/config/src/config.ts`). When editing prose here,\n * mirror the changes there.\n */\n\nimport type { Json } from \"../types\";\n\n/**\n * The `Environment` interface declares all the configuration fields that\n * can be specified for an environment.\n *\n * This could be the top-level default environment, or a specific named environment.\n */\nexport interface Environment\n\textends EnvironmentInheritable, EnvironmentNonInheritable {}\n\ntype SimpleRoute = string;\n/** AWS SigV4 credentials for miniflare's local S3-compatible endpoint */\nexport interface LocalS3Credentials {\n\taccessKeyId: string;\n\tsecretAccessKey: string;\n}\n\nexport type ZoneIdRoute = {\n\tpattern: string;\n\tzone_id: string;\n\tcustom_domain?: boolean;\n};\nexport type ZoneNameRoute = {\n\tpattern: string;\n\tzone_name: string;\n\tcustom_domain?: boolean;\n};\nexport type CustomDomainRoute = {\n\tpattern: string;\n\tcustom_domain: boolean;\n\tenabled?: boolean;\n\tpreviews_enabled?: boolean;\n};\nexport type Route =\n\t| SimpleRoute\n\t| ZoneIdRoute\n\t| ZoneNameRoute\n\t| CustomDomainRoute;\n\n/**\n * Configuration in wrangler for Cloudchamber\n */\nexport type CloudchamberConfig = {\n\timage?: string;\n\tlocation?: string;\n\tinstance_type?:\n\t\t| \"dev\"\n\t\t| \"basic\"\n\t\t| \"standard\"\n\t\t| \"lite\"\n\t\t| \"standard-1\"\n\t\t| \"standard-2\"\n\t\t| \"standard-3\"\n\t\t| \"standard-4\";\n\tvcpu?: number;\n\tmemory?: string;\n\tipv4?: boolean;\n};\n\ntype UnsafeBinding = {\n\t/**\n\t * The name of the binding provided to the Worker\n\t */\n\tname: string;\n\t/**\n\t * The 'type' of the unsafe binding.\n\t */\n\ttype: string;\n\tdev?: {\n\t\tplugin: {\n\t\t\t/**\n\t\t\t * Package is the bare specifier of the package that exposes plugins to integrate into Miniflare via a named `plugins` export.\n\t\t\t * @example \"@cloudflare/my-external-miniflare-plugin\"\n\t\t\t */\n\t\t\tpackage: string;\n\t\t\t/**\n\t\t\t * Plugin is the name of the plugin exposed by the package.\n\t\t\t * @example \"MY_UNSAFE_PLUGIN\"\n\t\t\t */\n\t\t\tname: string;\n\t\t};\n\n\t\t/**\n\t\t * Optional mapping of unsafe bindings names to options provided for the plugin.\n\t\t */\n\t\toptions?: Record<string, unknown>;\n\t};\n\t[key: string]: unknown;\n};\n\n/**\n * Configuration for a container application\n */\nexport type ContainerApp = {\n\t// TODO: fill out the entire type\n\n\t/**\n\t * Name of the application.\n\t *\n\t * This is also the identifier used to reference the container from a Durable\n\t * Object's `exports` entry via its `container` field.\n\t *\n\t * @optional Defaults to `worker_name-class_name` if not specified. A name is\n\t * required when `class_name` is not set, since there is no class name to\n\t * derive the default from.\n\t */\n\tname?: string;\n\n\t// not used when deploying container with wrangler deploy\n\t/**\n\t * Number of application instances\n\t * @deprecated\n\t * @hidden\n\t */\n\tinstances?: number;\n\n\t/**\n\t * Number of maximum application instances.\n\t * @optional\n\t */\n\tmax_instances?: number;\n\n\t/**\n\t * The path to a Dockerfile, or an image URI for the Cloudflare registry.\n\t */\n\timage: string;\n\n\t/**\n\t * Build context of the application.\n\t * @optional - defaults to the directory of `image`.\n\t */\n\timage_build_context?: string;\n\n\t/**\n\t * Image variables available to the image at build-time only.\n\t * For runtime env vars, refer to https://developers.cloudflare.com/containers/examples/env-vars-and-secrets/\n\t * @optional\n\t */\n\timage_vars?: Record<string, string>;\n\n\t/**\n\t * The class name of the Durable Object the container is connected to.\n\t *\n\t * @optional Instead of naming the Durable Object here, you can reference this\n\t * container from the Durable Object's `exports` entry via its `container`\n\t * field. Exactly one of the two directions must be configured.\n\t */\n\tclass_name?: string;\n\n\t/**\n\t * The scheduling policy of the application\n\t * @optional\n\t * @default \"default\"\n\t */\n\tscheduling_policy?: \"default\" | \"moon\" | \"regional\";\n\n\t/**\n\t * The instance type to be used for the container.\n\t * Select from one of the following named instance types:\n\t * - lite: 1/16 vCPU, 256 MiB memory, and 2 GB disk\n\t * - basic: 1/4 vCPU, 1 GiB memory, and 4 GB disk\n\t * - standard-1: 1/2 vCPU, 4 GiB memory, and 8 GB disk\n\t * - standard-2: 1 vCPU, 6 GiB memory, and 12 GB disk\n\t * - standard-3: 2 vCPU, 8 GiB memory, and 16 GB disk\n\t * - standard-4: 4 vCPU, 12 GiB memory, and 20 GB disk\n\t * - dev: 1/16 vCPU, 256 MiB memory, and 2 GB disk (deprecated, use \"lite\" instead)\n\t * - standard: 1 vCPU, 4 GiB memory, and 4 GB disk (deprecated, use \"standard-1\" instead)\n\t *\n\t * Customers on an enterprise plan have the additional option to set custom limits.\n\t *\n\t * @optional\n\t * @default \"dev\"\n\t */\n\tinstance_type?:\n\t\t| \"dev\"\n\t\t| \"basic\"\n\t\t| \"standard\"\n\t\t| \"lite\"\n\t\t| \"standard-1\"\n\t\t| \"standard-2\"\n\t\t| \"standard-3\"\n\t\t| \"standard-4\"\n\t\t| {\n\t\t\t\t/** @defaults to 0.0625 (1/16 vCPU) */\n\t\t\t\tvcpu?: number;\n\n\t\t\t\t/** @defaults to 256 MiB */\n\t\t\t\tmemory_mib?: number;\n\n\t\t\t\t/** @defaults to 2 GB */\n\t\t\t\tdisk_mb?: number;\n\t\t };\n\n\tssh?: {\n\t\t/**\n\t\t * If enabled, those with write access to a container will be able to SSH into it through Wrangler.\n\t\t * @default false\n\t\t */\n\t\tenabled: boolean;\n\t\t/**\n\t\t * Port that the SSH service is running on\n\t\t * @defaults to 22\n\t\t */\n\t\tport?: number;\n\t};\n\n\t/**\n\t * @deprecated Use `ssh` instead.\n\t * @hidden\n\t */\n\twrangler_ssh?: {\n\t\tenabled: boolean;\n\t\tport?: number;\n\t};\n\n\t/**\n\t * SSH public keys to put in the container's authorized_keys file.\n\t */\n\tauthorized_keys?: { name: string; public_key: string }[];\n\n\t/**\n\t * Trusted user CA keys to put in the container's trusted_user_ca_keys file.\n\t */\n\ttrusted_user_ca_keys?: { name?: string; public_key: string }[];\n\n\t/**\n\t * @deprecated Use top level `containers` fields instead.\n\t * `configuration.image` should be `image`\n\t * limits should be set via `instance_type`\n\t * @hidden\n\t */\n\tconfiguration?: {\n\t\timage?: string;\n\t\t// not used when deploying container with wrangler deploy\n\t\tlabels?: { name: string; value: string }[];\n\t\t// not used when deploying container with wrangler deploy\n\t\tsecrets?: { name: string; type: \"env\"; secret: string }[];\n\t\tdisk?: { size_mb: number };\n\t\tvcpu?: number;\n\t\tmemory_mib?: number;\n\t};\n\n\t/**\n\t * Scheduling constraints for container placement.\n\t */\n\tconstraints?: {\n\t\t/**\n\t\t * Limit container placement to specific geographic regions.\n\t\t */\n\t\tregions?: (\n\t\t\t| \"ENAM\"\n\t\t\t| \"WNAM\"\n\t\t\t| \"EEUR\"\n\t\t\t| \"WEUR\"\n\t\t\t| \"APAC\"\n\t\t\t| \"SAM\"\n\t\t\t| \"ME\"\n\t\t\t| \"OC\"\n\t\t\t| \"AFR\"\n\t\t)[];\n\t\t/**\n\t\t * Restrict containers to compliance boundaries.\n\t\t */\n\t\tjurisdiction?: \"eu\" | \"fedramp\";\n\t\t/**\n\t\t * @hidden\n\t\t */\n\t\tcities?: string[];\n\t\t/**\n\t\t * @deprecated Use `tiers` instead\n\t\t * @hidden\n\t\t */\n\t\ttier?: number;\n\t\t/**\n\t\t * @hidden\n\t\t */\n\t\ttiers?: number[];\n\t};\n\n\t/**\n\t * Scheduling affinities\n\t * @hidden\n\t */\n\taffinities?: {\n\t\tcolocation?: \"datacenter\";\n\t\thardware_generation?: \"highest-overall-performance\";\n\t};\n\n\t// not used when deploying container with wrangler deploy\n\t/**\n\t * @deprecated use the `class_name` field instead.\n\t * @hidden\n\t */\n\tdurable_objects?: {\n\t\tnamespace_id: string;\n\t};\n\n\t/**\n\t * Configures what percentage of instances should be updated at each step of a rollout.\n\t * You can specify this as a single number, or an array of numbers.\n\t *\n\t * If this is a single number, each step will progress by that percentage.\n\t * The options are 5, 10, 20, 25, 50 or 100.\n\t *\n\t * If this is an array, each step specifies the cumulative rollout progress.\n\t * The final step must be 100.\n\t *\n\t * This can be overridden adhoc by deploying with the `--containers-rollout=immediate` flag,\n\t * which will roll out to 100% of instances in one step.\n\t *\n\t * @optional\n\t * @default [10,100]\n\t * */\n\trollout_step_percentage?: number | number[];\n\n\t/**\n\t * How a rollout should be created. It supports the following modes:\n\t * - full_auto: The container application will be rolled out fully automatically.\n\t * - none: The container application won't have a roll out or update.\n\t * - manual: The container application will be rollout fully by manually actioning progress steps.\n\t * @optional\n\t * @default \"full_auto\"\n\t * @hidden\n\t */\n\trollout_kind?: \"full_auto\" | \"none\" | \"full_manual\";\n\n\t/**\n\t * Configures the grace period (in seconds) for active instances before being shutdown during a rollout.\n\t * @optional\n\t * @default 0\n\t */\n\trollout_active_grace_period?: number;\n\n\t/**\n\t * Directly passed to the API without wrangler-side validation or transformation.\n\t * @hidden\n\t */\n\tunsafe?: Record<string, unknown>;\n};\n\n/**\n * Configuration in wrangler for Durable Object Migrations\n */\nexport type DurableObjectMigration = {\n\t/** A unique identifier for this migration. */\n\ttag: string;\n\t/** The new Durable Objects being defined. */\n\tnew_classes?: string[];\n\t/** The new SQLite Durable Objects being defined. */\n\tnew_sqlite_classes?: string[];\n\t/** The Durable Objects being renamed. */\n\trenamed_classes?: {\n\t\tfrom: string;\n\t\tto: string;\n\t}[];\n\t/** The Durable Objects being removed. */\n\tdeleted_classes?: string[];\n};\n\n/**\n * Storage backend for a declarative Durable Object export. See\n * {@link DurableObjectExport}.\n */\nexport type DurableObjectExportStorage = \"sqlite\" | \"legacy-kv\";\n\n/**\n * A single declarative Durable Object export entry in the `exports` config\n * map. `type` is reserved for the export kind. `state` carries the Durable\n * Object lifecycle and defaults to `\"created\"` (live) when omitted.\n *\n * Mutually exclusive with {@link DurableObjectMigration} at the config-\n * validation boundary.\n *\n * - `created` (default, live): `storage` is required.\n * - `deleted` (tombstone): retire a provisioned namespace whose class has\n * been removed from code.\n * - `renamed` (tombstone): rewrite a provisioned namespace's class name to\n * `renamed_to`. The target name must also appear as a live (state\n * `\"created\"`) `durable-object` entry in the same map.\n * - `transferred` (tombstone): hand ownership of the namespace to another\n * script in the same account (`transferred_to`). Two-phase commit;\n * the target must first deploy an `expecting-transfer` entry naming this\n * script via `transfer_from`.\n * - `expecting-transfer` (live): receiving side of a two-phase transfer;\n * `storage` and `transfer_from` are both required.\n *\n * The live states may additionally attach a container via `container`, which\n * names an entry in the top-level `containers` array. Tombstones cannot.\n */\nexport type DurableObjectExport =\n\t| {\n\t\t\ttype: \"durable-object\";\n\t\t\tstate?: \"created\";\n\t\t\tstorage: DurableObjectExportStorage;\n\t\t\t/**\n\t\t\t * Attach a container to this Durable Object. Must match the `name` of an\n\t\t\t * entry in the top-level `containers` array, and requires\n\t\t\t * `storage: \"sqlite\"`.\n\t\t\t *\n\t\t\t * @optional\n\t\t\t */\n\t\t\tcontainer?: string;\n\t }\n\t| { type: \"durable-object\"; state: \"deleted\" }\n\t| { type: \"durable-object\"; state: \"renamed\"; renamed_to: string }\n\t| {\n\t\t\ttype: \"durable-object\";\n\t\t\tstate: \"transferred\";\n\t\t\ttransferred_to: string;\n\t }\n\t| {\n\t\t\ttype: \"durable-object\";\n\t\t\tstate: \"expecting-transfer\";\n\t\t\tstorage: DurableObjectExportStorage;\n\t\t\ttransfer_from: string;\n\t\t\t/**\n\t\t\t * Attach a container to this Durable Object. Must match the `name` of an\n\t\t\t * entry in the top-level `containers` array, and requires\n\t\t\t * `storage: \"sqlite\"`.\n\t\t\t *\n\t\t\t * @optional\n\t\t\t */\n\t\t\tcontainer?: string;\n\t };\n\nexport interface WorkerEntrypointExport {\n\ttype: \"worker\";\n\tcache?: {\n\t\t/** Whether cache is enabled for this entrypoint. */\n\t\tenabled: boolean;\n\t};\n}\n\nexport type ConfiguredExport = DurableObjectExport | WorkerEntrypointExport;\n\n/**\n * The declarative `exports` map keyed by export name. Durable Object exports\n * are mutually exclusive with `migrations` at the wrangler config layer.\n */\nexport type Exports = Record<string, ConfiguredExport>;\n\n/**\n * The `EnvironmentInheritable` interface declares all the configuration fields for an environment\n * that can be inherited (and overridden) from the top-level environment.\n */\ninterface EnvironmentInheritable {\n\t/**\n\t * The name of your Worker. Alphanumeric + dashes only.\n\t *\n\t * @inheritable\n\t */\n\tname: string | undefined;\n\n\t/**\n\t * This is the ID of the account associated with your zone.\n\t * You might have more than one account, so make sure to use\n\t * the ID of the account associated with the zone/route you\n\t * provide, if you provide one. It can also be specified through\n\t * the CLOUDFLARE_ACCOUNT_ID environment variable.\n\t *\n\t * @inheritable\n\t */\n\taccount_id: string | undefined;\n\n\t/**\n\t * A date in the form yyyy-mm-dd, which will be used to determine\n\t * which version of the Workers runtime is used.\n\t *\n\t * More details at https://developers.cloudflare.com/workers/configuration/compatibility-dates\n\t *\n\t * @inheritable\n\t */\n\tcompatibility_date: string | undefined;\n\n\t/**\n\t * A list of flags that enable features from upcoming features of\n\t * the Workers runtime, usually used together with compatibility_date.\n\t *\n\t * More details at https://developers.cloudflare.com/workers/configuration/compatibility-flags/\n\t *\n\t * @default []\n\t * @inheritable\n\t */\n\tcompatibility_flags: string[];\n\n\t/**\n\t * The entrypoint/path to the JavaScript file that will be executed.\n\t *\n\t * @inheritable\n\t */\n\tmain: string | undefined;\n\n\t/**\n\t * If true then Wrangler will traverse the file tree below `base_dir`;\n\t * Any files that match `rules` will be included in the deployed Worker.\n\t * Defaults to true if `no_bundle` is true, otherwise false.\n\t *\n\t * @inheritable\n\t */\n\tfind_additional_modules: boolean | undefined;\n\n\t/**\n\t * Determines whether Wrangler will preserve bundled file names.\n\t * Defaults to false.\n\t * If left unset, files will be named using the pattern ${fileHash}-${basename},\n\t * for example, `34de60b44167af5c5a709e62a4e20c4f18c9e3b6-favicon.ico`.\n\t *\n\t * @inheritable\n\t */\n\tpreserve_file_names: boolean | undefined;\n\n\t/**\n\t * The directory in which module rules should be evaluated when including additional files into a Worker deployment.\n\t * This defaults to the directory containing the `main` entry point of the Worker if not specified.\n\t *\n\t * @inheritable\n\t */\n\tbase_dir: string | undefined;\n\n\t// Carmen according to our tests the default is undefined\n\t// warning: you must force \"workers_dev: true\" in tests to match expected behavior\n\t/**\n\t * Whether we use <name>.<subdomain>.workers.dev to\n\t * test and deploy your Worker.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#workersdev\n\t *\n\t * @default true\n\t * @breaking\n\t * @inheritable\n\t */\n\n\tworkers_dev: boolean | undefined;\n\n\t/**\n\t * Whether we use <version>-<name>.<subdomain>.workers.dev to\n\t * serve Preview URLs for your Worker.\n\t *\n\t * @default false\n\t * @inheritable\n\t */\n\tpreview_urls: boolean | undefined;\n\n\t/**\n\t * A list of routes that your Worker should be published to.\n\t * Only one of `routes` or `route` is required.\n\t *\n\t * Only required when workers_dev is false, and there's no scheduled Worker (see `triggers`)\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#types-of-routes\n\t *\n\t * @inheritable\n\t */\n\troutes: Route[] | undefined;\n\n\t/**\n\t * A route that your Worker should be published to. Literally\n\t * the same as routes, but only one.\n\t * Only one of `routes` or `route` is required.\n\t *\n\t * Only required when workers_dev is false, and there's no scheduled Worker\n\t *\n\t * @inheritable\n\t */\n\troute: Route | undefined;\n\n\t/**\n\t * Path to a custom tsconfig\n\t *\n\t * @inheritable\n\t */\n\ttsconfig: string | undefined;\n\n\t/**\n\t * The function to use to replace jsx syntax.\n\t *\n\t * @default \"React.createElement\"\n\t * @inheritable\n\t */\n\tjsx_factory: string;\n\n\t/**\n\t * The function to use to replace jsx fragment syntax.\n\t *\n\t * @default \"React.Fragment\"\n\t * @inheritable\n\t */\n\tjsx_fragment: string;\n\n\t/**\n\t * A list of migrations that should be uploaded with your Worker.\n\t *\n\t * These define changes in your Durable Object declarations.\n\t *\n\t * More details at https://developers.cloudflare.com/workers/learning/using-durable-objects#configuring-durable-object-classes-with-migrations\n\t *\n\t * @default []\n\t * @inheritable\n\t */\n\tmigrations: DurableObjectMigration[];\n\n\t/**\n\t * Declarative exports configuration — a map of class name to export configuration.\n\t *\n\t * The configuration of Durable Objects via `exports` is mutually exclusive with `migrations`.\n\t *\n\t * @default {}\n\t * @inheritable\n\t */\n\texports: Exports;\n\n\t/**\n\t * Definitions that trigger a Worker from a schedule or a Cloudflare event.\n\t *\n\t * More details about cron triggers: https://developers.cloudflare.com/workers/platform/cron-triggers\n\t *\n\t * More details about Artifacts events: https://developers.cloudflare.com/artifacts/guides/event-subscriptions/\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers\n\t *\n\t * @default {crons:[]}\n\t * @inheritable\n\t */\n\ttriggers: {\n\t\tcrons?: string[];\n\t\tevents?: ArtifactsEventTrigger[];\n\t};\n\n\t/**\n\t * Specify limits for runtime behavior.\n\t * Only supported for the \"standard\" Usage Model\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#limits\n\t *\n\t * @inheritable\n\t */\n\tlimits: UserLimits | undefined;\n\n\t/**\n\t * An ordered list of rules that define which modules to import,\n\t * and what type to import them as. You will need to specify rules\n\t * to use Text, Data, and CompiledWasm modules, or when you wish to\n\t * have a .js file be treated as an ESModule instead of CommonJS.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#bundling\n\t *\n\t * @inheritable\n\t */\n\trules: Rule[];\n\n\t/**\n\t * Configures a custom build step to be run by Wrangler when building your Worker.\n\t *\n\t * Refer to the [custom builds documentation](https://developers.cloudflare.com/workers/cli-wrangler/configuration#build)\n\t * for more details.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#custom-builds\n\t *\n\t * @default {watch_dir:\"./src\"}\n\t */\n\tbuild: {\n\t\t/** The command used to build your Worker. On Linux and macOS, the command is executed in the `sh` shell and the `cmd` shell for Windows. The `&&` and `||` shell operators may be used. */\n\t\tcommand?: string;\n\t\t/** The directory in which the command is executed. */\n\t\tcwd?: string;\n\t\t/** The directory to watch for changes while using wrangler dev, defaults to the current working directory */\n\t\twatch_dir?: string | string[];\n\t};\n\n\t/**\n\t * Skip internal build steps and directly deploy script\n\t * @inheritable\n\t */\n\tno_bundle: boolean | undefined;\n\n\t/**\n\t * Minify the script before uploading.\n\t * @inheritable\n\t */\n\tminify: boolean | undefined;\n\n\t/**\n\t * Set the `name` property to the original name for functions and classes renamed during minification.\n\t *\n\t * See https://esbuild.github.io/api/#keep-names\n\t *\n\t * @default true\n\t * @inheritable\n\t */\n\tkeep_names: boolean | undefined;\n\n\t/**\n\t * Designates this Worker as an internal-only \"first-party\" Worker.\n\t *\n\t * @inheritable\n\t */\n\tfirst_party_worker: boolean | undefined;\n\n\t/**\n\t * List of bindings that you will send to logfwdr\n\t *\n\t * @default {bindings:[]}\n\t * @inheritable\n\t */\n\tlogfwdr: {\n\t\tbindings: {\n\t\t\t/** The binding name used to refer to logfwdr */\n\t\t\tname: string;\n\t\t\t/** The destination for this logged message */\n\t\t\tdestination: string;\n\t\t}[];\n\t};\n\n\t/**\n\t * Send Trace Events from this Worker to Workers Logpush.\n\t *\n\t * This will not configure a corresponding Logpush job automatically.\n\t *\n\t * For more information about Workers Logpush, see:\n\t * https://blog.cloudflare.com/logpush-for-workers/\n\t *\n\t * @inheritable\n\t */\n\tlogpush: boolean | undefined;\n\n\t/**\n\t * Include source maps when uploading this worker.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#source-maps\n\t *\n\t * @inheritable\n\t */\n\tupload_source_maps: boolean | undefined;\n\n\t/**\n\t * Specify how the Worker should be located to minimize round-trip time.\n\t *\n\t * More details: https://developers.cloudflare.com/workers/platform/smart-placement/\n\t *\n\t * @inheritable\n\t */\n\tplacement:\n\t\t| { mode: \"off\" | \"smart\"; hint?: string }\n\t\t| { mode?: \"targeted\"; region: string }\n\t\t| { mode?: \"targeted\"; host: string }\n\t\t| { mode?: \"targeted\"; hostname: string }\n\t\t| undefined;\n\n\t/**\n\t * Specify the directory of static assets to deploy/serve\n\t *\n\t * More details at https://developers.cloudflare.com/workers/frameworks/\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#assets\n\t *\n\t * @inheritable\n\t */\n\tassets: Assets | undefined;\n\n\t/**\n\t * Specify the observability behavior of the Worker.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#observability\n\t *\n\t * @inheritable\n\t */\n\tobservability: Observability | undefined;\n\n\t/**\n\t * Specify the Cloudflare Access authentication behavior of the Worker.\n\t *\n\t * @inheritable\n\t */\n\taccess: Access | undefined;\n\n\t/**\n\t * Specify the cache behavior of the Worker.\n\t *\n\t * @inheritable\n\t */\n\tcache: CacheOptions | undefined;\n\n\t/**\n\t * Specify the compliance region mode of the Worker.\n\t *\n\t * Although if the user does not specify a compliance region, the default is `public`,\n\t * it can be set to `undefined` in configuration to delegate to the CLOUDFLARE_COMPLIANCE_REGION environment variable.\n\t */\n\tcompliance_region: \"public\" | \"fedramp_high\" | undefined;\n\n\t/**\n\t * Configuration for Python modules.\n\t *\n\t * @inheritable\n\t */\n\tpython_modules: {\n\t\t/**\n\t\t * A list of glob patterns to exclude files from the python_modules directory when bundling.\n\t\t *\n\t\t * Patterns are relative to the python_modules directory and use glob syntax.\n\t\t *\n\t\t * @default [\"**\\*.pyc\"]\n\t\t */\n\t\texclude: string[];\n\t};\n\n\t/**\n\t * Configuration for Worker Previews.\n\t *\n\t * Previews are branches of your Worker's main instance used to test features\n\t * in development outside of production. This block defines the settings\n\t * used when creating Preview deployments via `wrangler preview`.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#previews\n\t *\n\t * @inheritable\n\t */\n\tpreviews: PreviewsConfig | undefined;\n}\n\nexport type DurableObjectBindings = {\n\t/** The name of the binding used to refer to the Durable Object */\n\tname: string;\n\t/** The exported class name of the Durable Object */\n\tclass_name: string;\n\t/** The script where the Durable Object is defined (if it's external to this Worker) */\n\tscript_name?: string;\n\t/** The service environment of the script_name to bind to */\n\tenvironment?: string;\n}[];\n\nexport const ARTIFACTS_EVENT_TYPES = [\n\t\"cf.artifacts.repo.created\",\n\t\"cf.artifacts.repo.deleted\",\n\t\"cf.artifacts.repo.forked\",\n\t\"cf.artifacts.repo.imported\",\n\t\"cf.artifacts.repo.pushed\",\n\t\"cf.artifacts.repo.cloned\",\n\t\"cf.artifacts.repo.fetched\",\n\t\"cf.artifacts.repo.token.created\",\n\t\"cf.artifacts.repo.token.revoked\",\n] as const;\n\nexport type ArtifactsEventType = (typeof ARTIFACTS_EVENT_TYPES)[number];\n\nexport type ArtifactsEventTrigger = {\n\ttype: ArtifactsEventType;\n\tfilter?: {\n\t\tnamespace?: string;\n\t\trepo_name?: string;\n\t};\n\ttargets: {\n\t\ttype: \"workflow\";\n\t\tworkflow_name: string;\n\t}[];\n};\n\nexport type WorkflowBinding = {\n\t/** The name of the binding used to refer to the Workflow */\n\tbinding: string;\n\t/** The name of the Workflow */\n\tname: string;\n\t/** The exported class name of the Workflow */\n\tclass_name: string;\n\t/** The script where the Workflow is defined (if it's external to this Worker) */\n\tscript_name?: string;\n\t/** Optional limits for the Workflow */\n\tlimits?: {\n\t\t/** Maximum number of steps a Workflow instance can execute */\n\t\tsteps?: number;\n\t};\n\t/** Optional concurrency configuration for the Workflow */\n\tconcurrency?: {\n\t\t/** Maximum number of Workflow instances that can run concurrently */\n\t\tlimit?: number;\n\t};\n\t/** Optional cron schedule(s) for automatically triggering workflow instances */\n\tschedules?: string | string[];\n\t/**\n\t * Optional default retention for instances of this Workflow, applied when an instance does not\n\t * set its own retention. Accepts milliseconds or a duration string such as `\"3 days\"`, and is\n\t * validated by the Workflows API at deploy time.\n\t */\n\tdefault_retention?: {\n\t\t/** How long to retain instances that completed successfully or were terminated */\n\t\tsuccess_retention?: number | string;\n\t\t/** How long to retain errored instances */\n\t\terror_retention?: number | string;\n\t};\n};\n\n/**\n * The `EnvironmentNonInheritable` interface declares all the configuration fields for an environment\n * that cannot be inherited from the top-level environment, and must be defined specifically.\n *\n * If any of these fields are defined at the top-level then they should also be specifically defined\n * for each named environment.\n */\nexport interface EnvironmentNonInheritable {\n\t/**\n\t * A map of values to substitute when deploying your Worker.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tdefine: Record<string, string>;\n\t/**\n\t * A map of environment variables to set when deploying your Worker.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tvars: Record<string, string | Json>;\n\n\t/**\n\t * Secrets configuration.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#secrets-configuration-property\n\t *\n\t * @nonInheritable\n\t */\n\tsecrets?: {\n\t\t/**\n\t\t * List of secret names that are required by your Worker.\n\t\t * When defined, this property:\n\t\t * - Replaces .dev.vars/.env/process.env inference for type generation\n\t\t * - Enables local dev validation with warnings for missing secrets\n\t\t */\n\t\trequired?: string[];\n\t};\n\n\t/**\n\t * A list of durable objects that your Worker should be bound to.\n\t *\n\t * For more information about Durable Objects, see the documentation at\n\t * https://developers.cloudflare.com/workers/learning/using-durable-objects\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#durable-objects\n\t *\n\t * @default {bindings:[]}\n\t * @nonInheritable\n\t */\n\tdurable_objects: {\n\t\tbindings: DurableObjectBindings;\n\t};\n\n\t/**\n\t * A list of workflows that your Worker should be bound to.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tworkflows: WorkflowBinding[];\n\n\t/**\n\t * Cloudchamber configuration\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tcloudchamber: CloudchamberConfig;\n\n\t/**\n\t * Container related configuration\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tcontainers?: ContainerApp[];\n\n\t/**\n\t * These specify any Workers KV Namespaces you want to\n\t * access from inside your Worker.\n\t *\n\t * To learn more about KV Namespaces,\n\t * see the documentation at https://developers.cloudflare.com/workers/learning/how-kv-works\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#kv-namespaces\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tkv_namespaces: {\n\t\t/** The binding name used to refer to the KV Namespace */\n\t\tbinding: string;\n\t\t/** The ID of the KV namespace */\n\t\tid?: string;\n\t\t/** The ID of the KV namespace used during `wrangler dev` */\n\t\tpreview_id?: string;\n\t\t/** Whether the KV namespace should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * These specify bindings to send email from inside your Worker.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#email-bindings\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tsend_email: {\n\t\t/** The binding name used to refer to the this binding */\n\t\tname: string;\n\t\t/** If this binding should be restricted to a specific verified address */\n\t\tdestination_address?: string;\n\t\t/** If this binding should be restricted to a set of verified addresses */\n\t\tallowed_destination_addresses?: string[];\n\t\t/** If this binding should be restricted to a set of sender addresses */\n\t\tallowed_sender_addresses?: string[];\n\t\t/** Whether the binding should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies Queues that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#queues\n\t *\n\t * @default {consumers:[],producers:[]}\n\t * @nonInheritable\n\t */\n\tqueues: {\n\t\t/** Producer bindings */\n\t\tproducers?: {\n\t\t\t/** The binding name used to refer to the Queue in the Worker. */\n\t\t\tbinding: string;\n\n\t\t\t/** The name of this Queue. */\n\t\t\tqueue?: string;\n\n\t\t\t/** The number of seconds to wait before delivering a message */\n\t\t\tdelivery_delay?: number;\n\n\t\t\t/** Whether the Queue producer should be remote or not in local development */\n\t\t\tremote?: boolean;\n\t\t}[];\n\n\t\t/** Consumer configuration */\n\t\tconsumers?: {\n\t\t\t/** The name of the queue from which this consumer should consume. */\n\t\t\tqueue: string;\n\n\t\t\t/** The consumer type. Only \"worker\" is supported in wrangler config. Default is \"worker\". */\n\t\t\ttype?: \"worker\";\n\n\t\t\t/** The maximum number of messages per batch */\n\t\t\tmax_batch_size?: number;\n\n\t\t\t/** The maximum number of seconds to wait to fill a batch with messages. */\n\t\t\tmax_batch_timeout?: number;\n\n\t\t\t/** The maximum number of retries for each message. */\n\t\t\tmax_retries?: number;\n\n\t\t\t/** The queue to send messages that failed to be consumed. */\n\t\t\tdead_letter_queue?: string;\n\n\t\t\t/** The maximum number of concurrent consumer Worker invocations. Leaving this unset will allow your consumer to scale to the maximum concurrency needed to keep up with the message backlog. */\n\t\t\tmax_concurrency?: number | null;\n\n\t\t\t/** The number of milliseconds to wait for pulled messages to become visible again */\n\t\t\tvisibility_timeout_ms?: number;\n\n\t\t\t/** The number of seconds to wait before retrying a message */\n\t\t\tretry_delay?: number;\n\t\t}[];\n\t};\n\n\t/**\n\t * Specifies raw sockets that this Worker should listen on.\n\t * Each entry opens a listening socket on the\n\t * given port that delivers incoming connections directly to the Worker's\n\t * `connect(socket, env, ctx)` handler.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tconnect: {\n\t\t/** The transport protocol to listen for. */\n\t\tprotocol: \"tcp\";\n\n\t\t/** The port to listen on. */\n\t\tport: number;\n\n\t\t/** The address to bind to. Defaults to `127.0.0.1`. */\n\t\taddress?: string;\n\t}[];\n\n\t/**\n\t * Specifies R2 buckets that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#r2-buckets\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tr2_buckets: {\n\t\t/** The binding name used to refer to the R2 bucket in the Worker. */\n\t\tbinding: string;\n\t\t/** The name of this R2 bucket at the edge. */\n\t\tbucket_name?: string;\n\t\t/** The preview name of this R2 bucket at the edge. */\n\t\tpreview_bucket_name?: string;\n\t\t/** The jurisdiction that the bucket exists in. Default if not present. */\n\t\tjurisdiction?: string;\n\t\t/** Whether the R2 bucket should be remote or not in local development */\n\t\tremote?: boolean;\n\t\t/** Settings that only apply to local development */\n\t\tlocal_dev?: {\n\t\t\t/**\n\t\t\t * EXPERIMENTAL: AWS SigV4 credentials for the local S3-compatible\n\t\t\t * endpoint. When set, the bucket is served at\n\t\t\t * `/cdn-cgi/local/r2/s3/<bucket-name>` during local development.\n\t\t\t * Ignored when the bucket runs remotely.\n\t\t\t */\n\t\t\texperimental_s3_credentials?: LocalS3Credentials;\n\t\t};\n\t}[];\n\n\t/**\n\t * Specifies D1 databases that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#d1-databases\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\td1_databases: {\n\t\t/** The binding name used to refer to the D1 database in the Worker. */\n\t\tbinding: string;\n\t\t/** The name of this D1 database. */\n\t\tdatabase_name?: string;\n\t\t/** The UUID of this D1 database (not required). */\n\t\tdatabase_id?: string;\n\t\t/** The UUID of this D1 database for Wrangler Dev (if specified). */\n\t\tpreview_database_id?: string;\n\t\t/** The name of the migrations table for this D1 database (defaults to 'd1_migrations'). */\n\t\tmigrations_table?: string;\n\t\t/** The path to the directory of migrations for this D1 database (defaults to './migrations'). */\n\t\tmigrations_dir?: string;\n\t\t/**\n\t\t * A glob pattern (relative to the Wrangler config file) used to discover\n\t\t * migration files for this D1 database. Defaults to `${migrations_dir}/*.sql`\n\t\t * if not specified.\n\t\t *\n\t\t * Use this to opt in to nested layouts such as `migrations/*\\/migration.sql`\n\t\t * (as produced by some ORMs).\n\t\t *\n\t\t * When `migrations_pattern` is set, `migrations_dir` must also be set, and\n\t\t * `migrations_pattern` must start with `${migrations_dir}/`. This keeps the\n\t\t * relationship between the two settings explicit and lets Wrangler record\n\t\t * each migration's name in the migrations table as a path relative to\n\t\t * `migrations_dir`.\n\t\t */\n\t\tmigrations_pattern?: string;\n\t\t/** Internal use only. */\n\t\tdatabase_internal_env?: string;\n\t\t/** Whether the D1 database should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies Vectorize indexes that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#vectorize-indexes\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tvectorize: {\n\t\t/** The binding name used to refer to the Vectorize index in the Worker. */\n\t\tbinding: string;\n\t\t/** The name of the index. */\n\t\tindex_name: string;\n\t\t/** Whether the Vectorize index should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies AI Search namespace bindings that are bound to this Worker environment.\n\t * Each binding is scoped to a namespace and allows dynamic instance CRUD within it.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tai_search_namespaces: {\n\t\t/** The binding name used to refer to the AI Search namespace in the Worker. */\n\t\tbinding: string;\n\t\t/** The user-chosen namespace name. Must exist in Cloudflare at deploy time. */\n\t\tnamespace: string;\n\t\t/** Whether the AI Search namespace binding should be remote in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies AI Search instance bindings that are bound to this Worker environment.\n\t * Each binding is bound directly to a single pre-existing instance within the \"default\" namespace.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tai_search: {\n\t\t/** The binding name used to refer to the AI Search instance in the Worker. */\n\t\tbinding: string;\n\t\t/** The user-chosen instance name. Must exist in Cloudflare at deploy time. */\n\t\tinstance_name: string;\n\t\t/** Whether the AI Search instance binding should be remote in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies Agent Memory namespace bindings that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tagent_memory: {\n\t\t/** The binding name used to refer to the Agent Memory namespace in the Worker. */\n\t\tbinding: string;\n\t\t/** The user-chosen namespace name. Must exist in Cloudflare at deploy time. */\n\t\tnamespace: string;\n\t\t/** Whether the Agent Memory binding should be remote in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Cloudflare Web Search binding. There is exactly one shared web corpus, so the\n\t * binding is zero-config -- only the variable name is required, declared as a\n\t * single object (not an array).\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\twebsearch:\n\t\t| {\n\t\t\t\t/** The binding name used to refer to Web Search in the Worker. */\n\t\t\t\tbinding: string;\n\t\t\t\t/** Whether the Web Search binding should be remote or not in local development */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Specifies Hyperdrive configs that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#hyperdrive\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\thyperdrive: {\n\t\t/** The binding name used to refer to the project in the Worker. */\n\t\tbinding: string;\n\t\t/** The id of the database. */\n\t\tid: string;\n\t\t/** The local database connection string for `wrangler dev` */\n\t\tlocalConnectionString?: string;\n\t}[];\n\n\t/**\n\t * Specifies service bindings (Worker-to-Worker) that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tservices:\n\t\t| {\n\t\t\t\t/** The binding name used to refer to the bound service. */\n\t\t\t\tbinding: string;\n\t\t\t\t/**\n\t\t\t\t * The name of the service.\n\t\t\t\t * To bind to a worker in a specific environment,\n\t\t\t\t * you should use the format `<worker_name>-<environment_name>`.\n\t\t\t\t */\n\t\t\t\tservice: string;\n\t\t\t\t/**\n\t\t\t\t * @hidden\n\t\t\t\t * @deprecated you should use `service: <worker_name>-<environment_name>` instead.\n\t\t\t\t * This refers to the deprecated concept of 'service environments'.\n\t\t\t\t * The environment of the service (e.g. production, staging, etc).\n\t\t\t\t */\n\t\t\t\tenvironment?: string;\n\t\t\t\t/** Optionally, the entrypoint (named export) of the service to bind to. */\n\t\t\t\tentrypoint?: string;\n\t\t\t\t/** Optional properties that will be made available to the service via ctx.props. */\n\t\t\t\tprops?: Record<string, unknown>;\n\t\t\t\t/** Whether the service binding should be remote or not in local development */\n\t\t\t\tremote?: boolean;\n\t\t }[]\n\t\t| undefined;\n\n\t/**\n\t * Specifies analytics engine datasets that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#analytics-engine-datasets\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tanalytics_engine_datasets: {\n\t\t/** The binding name used to refer to the dataset in the Worker. */\n\t\tbinding: string;\n\t\t/** The name of this dataset to write to. */\n\t\tdataset?: string;\n\t}[];\n\n\t/**\n\t * A browser that will be usable from the Worker.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#browser-rendering\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tbrowser:\n\t\t| {\n\t\t\t\tbinding: string;\n\t\t\t\t/** Whether the Browser binding should be remote or not in local development */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Binding to the AI project.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#workers-ai\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tai:\n\t\t| {\n\t\t\t\tbinding: string;\n\t\t\t\tstaging?: boolean;\n\t\t\t\t/** Whether the AI binding should be remote or not in local development */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Binding to Cloudflare Images\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#images\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\timages:\n\t\t| {\n\t\t\t\tbinding: string;\n\t\t\t\t/** Whether the Images binding should be remote or not in local development */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Binding to Cloudflare Media Transformations\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tmedia:\n\t\t| {\n\t\t\t\tbinding: string;\n\t\t\t\t/** Whether the Media binding should be remote or not */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Binding to Cloudflare Stream\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tstream:\n\t\t| {\n\t\t\t\tbinding: string;\n\t\t\t\t/** Whether the Stream binding should be remote or not in local development */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Binding to the Worker Version's metadata\n\t */\n\tversion_metadata:\n\t\t| {\n\t\t\t\tbinding: string;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * \"Unsafe\" tables for features that aren't directly supported by wrangler.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default {}\n\t * @nonInheritable\n\t */\n\tunsafe: {\n\t\t/**\n\t\t * A set of bindings that should be put into a Worker's upload metadata without changes. These\n\t\t * can be used to implement bindings for features that haven't released and aren't supported\n\t\t * directly by wrangler or miniflare.\n\t\t */\n\t\tbindings?: UnsafeBinding[];\n\n\t\t/**\n\t\t * Arbitrary key/value pairs that will be included in the uploaded metadata. Values specified\n\t\t * here will always be applied to metadata last, so can add new or override existing fields.\n\t\t */\n\t\tmetadata?: {\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\t/**\n\t\t * Used for internal capnp uploads for the Workers runtime\n\t\t */\n\t\tcapnp?:\n\t\t\t| {\n\t\t\t\t\tbase_path: string;\n\t\t\t\t\tsource_schemas: string[];\n\t\t\t\t\tcompiled_schema?: never;\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tbase_path?: never;\n\t\t\t\t\tsource_schemas?: never;\n\t\t\t\t\tcompiled_schema: string;\n\t\t\t };\n\t};\n\n\t/**\n\t * Specifies a list of mTLS certificates that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#mtls-certificates\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tmtls_certificates: {\n\t\t/** The binding name used to refer to the certificate in the Worker */\n\t\tbinding: string;\n\t\t/** The uuid of the uploaded mTLS certificate */\n\t\tcertificate_id: string;\n\t\t/** Whether the mtls fetcher should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies a list of Tail Workers that are bound to this Worker environment\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\ttail_consumers?: TailConsumer[];\n\n\t/**\n\t * Specifies a list of Streaming Tail Workers that are bound to this Worker environment\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tstreaming_tail_consumers?: StreamingTailConsumer[];\n\n\t/**\n\t * Specifies namespace bindings that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#dispatch-namespace-bindings-workers-for-platforms\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tdispatch_namespaces: {\n\t\t/** The binding name used to refer to the bound service. */\n\t\tbinding: string;\n\t\t/** The namespace to bind to. */\n\t\tnamespace?: string;\n\t\t/** Details about the outbound Worker which will handle outbound requests from your namespace */\n\t\toutbound?: DispatchNamespaceOutbound;\n\t\t/** Whether the Dispatch Namespace should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies list of Pipelines bound to this Worker environment\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tpipelines: {\n\t\t/** The binding name used to refer to the bound service. */\n\t\tbinding: string;\n\t\t/** Id of the Stream to bind */\n\t\tstream?: string;\n\t\t/**\n\t\t * Id of the Stream to bind\n\t\t * @deprecated Use `stream` instead.\n\t\t */\n\t\tpipeline?: string;\n\t\t/** Whether the pipeline should be remote or not in local development */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies Secret Store bindings that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tsecrets_store_secrets: {\n\t\t/** The binding name used to refer to the bound service. */\n\t\tbinding: string;\n\n\t\t/** Id of the secret store */\n\t\tstore_id: string;\n\n\t\t/** Name of the secret */\n\t\tsecret_name: string;\n\t}[];\n\n\t/**\n\t * Specifies Artifacts bindings that are bound to this Worker environment.\n\t * Artifacts provides git-compatible file storage on Cloudflare Workers.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tartifacts: {\n\t\t/** The binding name used to refer to the Artifacts instance. */\n\t\tbinding: string;\n\n\t\t/** The namespace to use. */\n\t\tnamespace: string;\n\n\t\t/** Whether to use the remote Artifacts service in local dev. */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * **DO NOT USE**. Hello World Binding Config to serve as an explanatory example.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tunsafe_hello_world: {\n\t\t/** The binding name used to refer to the bound service. */\n\t\tbinding: string;\n\n\t\t/** Whether the timer is enabled */\n\t\tenable_timer?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies Flagship feature flag bindings that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tflagship: {\n\t\t/** The binding name used to refer to the bound Flagship service. */\n\t\tbinding: string;\n\n\t\t/** The Flagship app ID to bind to. */\n\t\tapp_id?: string;\n\n\t\t/** Set to `true` to suppress the remote binding warning in local dev. Flagship bindings are always remote. */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies rate limit bindings that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tratelimits: {\n\t\t/** The binding name used to refer to the rate limiter in the Worker. */\n\t\tname: string;\n\t\t/** The namespace ID for this rate limiter. */\n\t\tnamespace_id: string;\n\t\t/** Simple rate limiting configuration. */\n\t\tsimple: {\n\t\t\t/** The maximum number of requests allowed in the time period. */\n\t\t\tlimit: number;\n\t\t\t/** The time period in seconds (10 for ten seconds, 60 for one minute). */\n\t\t\tperiod: 10 | 60;\n\t\t};\n\t}[];\n\n\t/**\n\t * Specifies Worker Loader bindings that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tworker_loaders: {\n\t\t/** The binding name used to refer to the Worker Loader in the Worker. */\n\t\tbinding: string;\n\t}[];\n\n\t/**\n\t * Specifies VPC services that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tvpc_services: {\n\t\t/** The binding name used to refer to the VPC service in the Worker. */\n\t\tbinding: string;\n\t\t/** The service ID of the VPC connectivity service. */\n\t\tservice_id: string;\n\t\t/** Whether the VPC service is remote or not */\n\t\tremote?: boolean;\n\t}[];\n\n\t/**\n\t * Specifies VPC networks that are bound to this Worker environment.\n\t *\n\t * NOTE: This field is not automatically inherited from the top level environment,\n\t * and so must be specified in every named environment.\n\t *\n\t * @default []\n\t * @nonInheritable\n\t */\n\tvpc_networks: (\n\t\t| {\n\t\t\t\t/** The binding name used to refer to the VPC network in the Worker. */\n\t\t\t\tbinding: string;\n\t\t\t\t/** The tunnel ID of the Cloudflare Tunnel to route traffic through. Mutually exclusive with network_id. */\n\t\t\t\ttunnel_id: string;\n\t\t\t\t/** Whether the VPC network is remote or not */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t\t| {\n\t\t\t\t/** The binding name used to refer to the VPC network in the Worker. */\n\t\t\t\tbinding: string;\n\t\t\t\t/** The network ID to route traffic through. Mutually exclusive with tunnel_id. */\n\t\t\t\tnetwork_id: string;\n\t\t\t\t/** Whether the VPC network is remote or not */\n\t\t\t\tremote?: boolean;\n\t\t }\n\t)[];\n}\n\n/**\n * The raw environment configuration that we read from the config file.\n *\n * All the properties are optional, and will be replaced with defaults in the configuration that\n * is used in the rest of the codebase.\n */\nexport type RawEnvironment = Partial<Environment>;\n\n/**\n * A bundling resolver rule, defining the modules type for paths that match the specified globs.\n */\nexport type Rule = {\n\ttype: ConfigModuleRuleType;\n\tglobs: string[];\n\tfallthrough?: boolean;\n};\n\n/**\n * The possible types for a `Rule`.\n */\nexport type ConfigModuleRuleType =\n\t| \"ESModule\"\n\t| \"CommonJS\"\n\t| \"CompiledWasm\"\n\t| \"Text\"\n\t| \"Data\"\n\t| \"PythonModule\"\n\t| \"PythonRequirement\";\n\nexport type TailConsumer = {\n\t/** The name of the service tail events will be forwarded to. */\n\tservice: string;\n\t/** (Optional) The environment of the service. */\n\tenvironment?: string;\n};\n\nexport type StreamingTailConsumer = {\n\t/** The name of the service streaming tail events will be forwarded to. */\n\tservice: string;\n};\n\nexport interface DispatchNamespaceOutbound {\n\t/** Name of the service handling the outbound requests */\n\tservice: string;\n\t/** (Optional) Name of the environment handling the outbound requests. */\n\tenvironment?: string;\n\t/** (Optional) List of parameter names, for sending context from your dispatch Worker to the outbound handler */\n\tparameters?: string[];\n}\n\nexport interface UserLimits {\n\t/** Maximum allowed CPU time for a Worker's invocation in milliseconds */\n\tcpu_ms?: number;\n\t/** Maximum allowed number of fetch requests that a Worker's invocation can execute */\n\tsubrequests?: number;\n}\n\nexport type Assets = {\n\t/** Absolute path to assets directory */\n\tdirectory?: string;\n\t/** Name of `env` binding property in the User Worker. */\n\tbinding?: string;\n\t/** How to handle HTML requests. */\n\thtml_handling?:\n\t\t| \"auto-trailing-slash\"\n\t\t| \"force-trailing-slash\"\n\t\t| \"drop-trailing-slash\"\n\t\t| \"none\";\n\t/** How to handle requests that do not match an asset. */\n\tnot_found_handling?: \"single-page-application\" | \"404-page\" | \"none\";\n\t/**\n\t * Matches will be routed to the User Worker, and matches to negative rules will go to the Asset Worker.\n\t *\n\t * Can also be `true`, indicating that every request should be routed to the User Worker.\n\t */\n\trun_worker_first?: string[] | boolean;\n};\n\nexport interface Observability {\n\t/** If observability is enabled for this Worker */\n\tenabled?: boolean;\n\t/** The sampling rate */\n\thead_sampling_rate?: number;\n\t/**\n\t * Whether query strings are removed from request URLs in logs and traces.\n\t *\n\t * @default false\n\t */\n\tredact_query_string?: boolean;\n\tlogs?: {\n\t\tenabled?: boolean;\n\t\t/** The sampling rate */\n\t\thead_sampling_rate?: number;\n\t\t/** Set to false to disable invocation logs */\n\t\tinvocation_logs?: boolean;\n\t\t/**\n\t\t * If logs should be persisted to the Cloudflare observability platform where they can be queried in the dashboard.\n\t\t *\n\t\t * @default true\n\t\t */\n\t\tpersist?: boolean;\n\t\t/**\n\t\t * What destinations logs emitted from the Worker should be sent to.\n\t\t *\n\t\t * @default []\n\t\t */\n\t\tdestinations?: string[];\n\t};\n\ttraces?: {\n\t\tenabled?: boolean;\n\t\t/** The sampling rate */\n\t\thead_sampling_rate?: number;\n\t\t/**\n\t\t * If traces should be persisted to the Cloudflare observability platform where they can be queried in the dashboard.\n\t\t *\n\t\t * @default true\n\t\t */\n\t\tpersist?: boolean;\n\t\t/**\n\t\t * What destinations traces emitted from the Worker should be sent to.\n\t\t *\n\t\t * @default []\n\t\t */\n\t\tdestinations?: string[];\n\t};\n}\n\nexport interface Access {\n\t/** Local dev simulation of Cloudflare Access authentication */\n\tdev?: {\n\t\t/** The Access application audience tag (aud) */\n\t\taud: string;\n\t\t/** Mock identity object returned by ctx.access.getIdentity() */\n\t\tidentity?: Record<string, unknown>;\n\t};\n}\n\nexport interface CacheOptions {\n\t/** If cache is enabled for this Worker */\n\tenabled: boolean;\n\t/** Whether cached assets may be reused across Worker versions. */\n\tcross_version_cache?: boolean;\n}\n\nexport type DockerConfiguration = {\n\t/** Socket used by miniflare to communicate with Docker */\n\tsocketPath: string;\n\t/** Docker image name for the container egress interceptor sidecar */\n\tcontainerEgressInterceptorImage?: string;\n};\n\nexport type ContainerEngine =\n\t| {\n\t\t\tlocalDocker: DockerConfiguration;\n\t }\n\t| string;\n\n/**\n * Configuration for Worker Previews.\n *\n * This defines the settings used when creating Preview deployments.\n * Previews are branches of your Worker's main instance used to test features\n * during feature development outside of production.\n *\n * The `previews` block contains any intentionally divergent configuration intended solely for Previews, including:\n * - All non-inheritable properties (environment variables and bindings like KV, D1, R2, etc.)\n * - Select inheritable properties: `logpush`, `observability`, `limits`, `cache`\n *\n * @inheritable\n */\nexport interface PreviewsConfig\n\textends\n\t\tPartial<EnvironmentNonInheritable>,\n\t\tPartial<\n\t\t\tPick<\n\t\t\t\tEnvironmentInheritable,\n\t\t\t\t\"logpush\" | \"observability\" | \"limits\" | \"cache\"\n\t\t\t>\n\t\t> {}\n","import type {\n\tContainerEngine,\n\tEnvironment,\n\tRawEnvironment,\n} from \"./environment\";\n\n/**\n * This is the static type definition for the configuration object.\n *\n * It reflects a normalized and validated version of the configuration that you can write in a Wrangler configuration file,\n * and optionally augment with arguments passed directly to wrangler.\n *\n * For more information about the configuration object, see the\n * documentation at https://developers.cloudflare.com/workers/cli-wrangler/configuration\n *\n * Notes:\n *\n * - Fields that are only specified in `ConfigFields` and not `Environment` can only appear\n * in the top level config and should not appear in any environments.\n * - Fields that are specified in `PagesConfigFields` are only relevant for Pages projects\n * - All top level fields in config and environments are optional in the Wrangler configuration file.\n *\n * Legend for the annotations:\n *\n * - `@breaking`: the deprecation/optionality is a breaking change from Wrangler v1.\n * - `@todo`: there's more work to be done (with details attached).\n */\nexport type Config = ComputedFields &\n\tConfigFields<DevConfig> &\n\tPagesConfigFields &\n\tEnvironment;\n\nexport type RawConfig = Partial<ConfigFields<RawDevConfig>> &\n\tPagesConfigFields &\n\tRawEnvironment &\n\tEnvironmentMap & { $schema?: string };\n\nexport type RedirectedRawConfig = RawConfig & Partial<ComputedFields>;\n\nexport interface ComputedFields {\n\t/** The path to the Wrangler configuration file (if any, and possibly redirected from the user Wrangler configuration) used to create this configuration. */\n\tconfigPath: string | undefined;\n\t/** The path to the user's Wrangler configuration file (if any), which may have been redirected to another file that used to create this configuration. */\n\tuserConfigPath: string | undefined;\n\t/**\n\t * The original top level name for the Worker in the raw configuration.\n\t *\n\t * When a raw configuration has been flattened to a single environment the worker name may have been replaced or transformed.\n\t * It can be useful to know what the top-level name was before the flattening.\n\t */\n\ttopLevelName: string | undefined;\n\t/** A list of environment names declared in the raw configuration. */\n\tdefinedEnvironments: string[] | undefined;\n\t/** The name of the environment being targeted. */\n\ttargetEnvironment: string | undefined;\n}\n\nexport interface ConfigFields<Dev extends RawDevConfig> {\n\t/**\n\t * Whether Wrangler should send usage metrics to Cloudflare for this project.\n\t *\n\t * When defined this will override any user settings.\n\t * Otherwise, Wrangler will use the user's preference.\n\t */\n\tsend_metrics: boolean | undefined;\n\n\t/**\n\t * Configuration for npm package dependency instrumentation.\n\t *\n\t * Controls whether Wrangler should collect and send npm package dependency\n\t * metadata when deploying or uploading a Worker version.\n\t *\n\t * When `enabled` is set to `false`, Wrangler will not include\n\t * `package_dependencies` in the upload payload. Defaults to enabled when\n\t * not specified.\n\t *\n\t * Note: This is considered build metadata, so managed separately from the\n\t * telemetry one and not disabled when\n\t * `send_metrics`/`WRANGLER_SEND_METRICS` is set to `false`\n\t */\n\tdependencies_instrumentation:\n\t\t| {\n\t\t\t\t/** Whether dependency instrumentation is enabled. Defaults to `true`. */\n\t\t\t\tenabled: boolean;\n\t\t\t\t/**\n\t\t\t\t * An optional list of package name patterns to exclude from the\n\t\t\t\t * collected dependency metadata.\n\t\t\t\t *\n\t\t\t\t * Each entry can be an exact package name (e.g. `\"lodash\"`) or a glob\n\t\t\t\t * pattern using `*` as a wildcard (e.g. `\"@internal/*\"` to exclude all\n\t\t\t\t * packages under the `@internal` scope).\n\t\t\t\t */\n\t\t\t\texclude_packages?: string[];\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * Options to configure the development server that your worker will use.\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#local-development-settings\n\t */\n\tdev: Dev;\n\n\t/**\n\t * The definition of a Worker Site, a feature that lets you upload\n\t * static assets with your Worker.\n\t *\n\t * More details at https://developers.cloudflare.com/workers/platform/sites\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#workers-sites\n\t */\n\tsite:\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * The directory containing your static assets.\n\t\t\t\t *\n\t\t\t\t * It must be a path relative to your Wrangler configuration file.\n\t\t\t\t * Example: bucket = \"./public\"\n\t\t\t\t *\n\t\t\t\t * If there is a `site` field then it must contain this `bucket` field.\n\t\t\t\t */\n\t\t\t\tbucket: string;\n\n\t\t\t\t/**\n\t\t\t\t * The location of your Worker script.\n\t\t\t\t *\n\t\t\t\t * @deprecated DO NOT use this (it's a holdover from Wrangler v1.x). Either use the top level `main` field, or pass the path to your entry file as a command line argument.\n\t\t\t\t * @breaking\n\t\t\t\t */\n\t\t\t\t\"entry-point\"?: string;\n\n\t\t\t\t/**\n\t\t\t\t * An exclusive list of .gitignore-style patterns that match file\n\t\t\t\t * or directory names from your bucket location. Only matched\n\t\t\t\t * items will be uploaded. Example: include = [\"upload_dir\"]\n\t\t\t\t *\n\t\t\t\t * @optional\n\t\t\t\t * @default []\n\t\t\t\t */\n\t\t\t\tinclude?: string[];\n\n\t\t\t\t/**\n\t\t\t\t * A list of .gitignore-style patterns that match files or\n\t\t\t\t * directories in your bucket that should be excluded from\n\t\t\t\t * uploads. Example: exclude = [\"ignore_dir\"]\n\t\t\t\t *\n\t\t\t\t * @optional\n\t\t\t\t * @default []\n\t\t\t\t */\n\t\t\t\texclude?: string[];\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * A list of wasm modules that your worker should be bound to. This is\n\t * the \"legacy\" way of binding to a wasm module. ES module workers should\n\t * do proper module imports.\n\t */\n\twasm_modules:\n\t\t| {\n\t\t\t\t[key: string]: string;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * A list of text files that your worker should be bound to. This is\n\t * the \"legacy\" way of binding to a text file. ES module workers should\n\t * do proper module imports.\n\t */\n\ttext_blobs:\n\t\t| {\n\t\t\t\t[key: string]: string;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * A list of data files that your worker should be bound to. This is\n\t * the \"legacy\" way of binding to a data file. ES module workers should\n\t * do proper module imports.\n\t */\n\tdata_blobs:\n\t\t| {\n\t\t\t\t[key: string]: string;\n\t\t }\n\t\t| undefined;\n\n\t/**\n\t * A map of module aliases. Lets you swap out a module for any others.\n\t * Corresponds with esbuild's `alias` config\n\t *\n\t * For reference, see https://developers.cloudflare.com/workers/wrangler/configuration/#module-aliasing\n\t */\n\talias: { [key: string]: string } | undefined;\n\n\t/**\n\t * By default, the Wrangler configuration file is the source of truth for your environment configuration, like a terraform file.\n\t *\n\t * If you change your vars in the dashboard, wrangler *will* override/delete them on its next deploy.\n\t *\n\t * If you want to keep your dashboard vars when wrangler deploys, set this field to true.\n\t *\n\t * @default false\n\t * @nonInheritable\n\t */\n\tkeep_vars?: boolean;\n\n\t/**\n\t * The inbound email addresses handled by the Worker being deployed.\n\t *\n\t * Each entry is a literal recipient address (e.g. `\"support@example.com\"`)\n\t * or a `*@domain` catch-all (e.g. `\"*@example.com\"`). Every entry creates an\n\t * Email Routing rule whose action routes mail to this Worker.\n\t *\n\t * This field is top-level only and applies to every environment of the\n\t * Worker; it cannot be set under `env.*`.\n\t *\n\t * @nonInheritable\n\t */\n\taddresses?: string[];\n}\n\n// Pages-specific configuration fields\ninterface PagesConfigFields {\n\t/**\n\t * The directory of static assets to serve.\n\t *\n\t * The presence of this field in a Wrangler configuration file indicates a Pages project,\n\t * and will prompt the handling of the configuration file according to the\n\t * Pages-specific validation rules.\n\t */\n\tpages_build_output_dir?: string;\n}\n\nexport interface DevConfig {\n\t/**\n\t * IP address for the local dev server to listen on,\n\t *\n\t * @default localhost\n\t */\n\tip: string;\n\n\t/**\n\t * Port for the local dev server to listen on\n\t *\n\t * @default 8787\n\t */\n\tport: number | undefined;\n\n\t/**\n\t * Port for the local dev server's inspector to listen on\n\t *\n\t * @default 9229\n\t */\n\tinspector_port: number | undefined;\n\n\t/**\n\t * IP address for the local dev server's inspector to listen on\n\t *\n\t * @default 127.0.0.1\n\t */\n\tinspector_ip: string | undefined;\n\n\t/**\n\t * Protocol that local wrangler dev server listens to requests on.\n\t *\n\t * @default http\n\t */\n\tlocal_protocol: \"http\" | \"https\";\n\n\t/**\n\t * Protocol that wrangler dev forwards requests on\n\t *\n\t * Setting this to `http` is not currently implemented for remote mode.\n\t * See https://github.com/cloudflare/workers-sdk/issues/583\n\t *\n\t * @default https\n\t */\n\tupstream_protocol: \"https\" | \"http\";\n\n\t/**\n\t * Host to forward requests to, defaults to the host of the first route of project\n\t */\n\thost: string | undefined;\n\n\t/**\n\t * When developing, whether to build and connect to containers. This requires a Docker daemon to be running.\n\t * Defaults to `true`.\n\t *\n\t * @default true\n\t */\n\tenable_containers: boolean;\n\n\t/**\n\t * Either the Docker unix socket i.e. `unix:///var/run/docker.sock` or a full configuration.\n\t * Note that windows is only supported via WSL at the moment\n\t */\n\tcontainer_engine: ContainerEngine | undefined;\n\n\t/**\n\t * Re-generate your worker types when your Wrangler configuration file changes.\n\t *\n\t * @default false\n\t */\n\tgenerate_types: boolean;\n}\n\nexport type RawDevConfig = Partial<DevConfig>;\n\ninterface EnvironmentMap {\n\t/**\n\t * The `env` section defines overrides for the configuration for different environments.\n\t *\n\t * All environment fields can be specified at the top level of the config indicating the default environment settings.\n\t *\n\t * - Some fields are inherited and overridable in each environment.\n\t * - But some are not inherited and must be explicitly specified in every environment, if they are specified at the top level.\n\t *\n\t * For more information, see the documentation at https://developers.cloudflare.com/workers/cli-wrangler/configuration#environments\n\t *\n\t * @default {}\n\t */\n\tenv?: {\n\t\t[envName: string]: RawEnvironment;\n\t};\n}\n\nexport const defaultWranglerConfig: Config = {\n\t/* COMPUTED_FIELDS */\n\tconfigPath: undefined,\n\tuserConfigPath: undefined,\n\ttopLevelName: undefined,\n\tdefinedEnvironments: undefined,\n\ttargetEnvironment: undefined,\n\n\t/*====================================================*/\n\t/* Fields supported by both Workers & Pages */\n\t/*====================================================*/\n\t/* TOP-LEVEL ONLY FIELDS */\n\tpages_build_output_dir: undefined,\n\tsend_metrics: undefined,\n\tdependencies_instrumentation: undefined,\n\tdev: {\n\t\tip: process.platform === \"win32\" ? \"127.0.0.1\" : \"localhost\",\n\t\tport: undefined, // the default of 8787 is set at runtime\n\t\tinspector_port: undefined, // the default of 9229 is set at runtime\n\t\tinspector_ip: undefined, // the default of 127.0.0.1 is set at runtime\n\t\tlocal_protocol: \"http\",\n\t\tupstream_protocol: \"http\",\n\t\thost: undefined,\n\t\t// Note this one is also workers only\n\t\tenable_containers: true,\n\t\tcontainer_engine: undefined,\n\t\tgenerate_types: false,\n\t},\n\n\t/** INHERITABLE ENVIRONMENT FIELDS **/\n\tname: undefined,\n\tcompatibility_date: undefined,\n\tcompatibility_flags: [],\n\tlimits: undefined,\n\tplacement: undefined,\n\n\t/** NON-INHERITABLE ENVIRONMENT FIELDS **/\n\tvars: {},\n\tdurable_objects: { bindings: [] },\n\tkv_namespaces: [],\n\tqueues: {\n\t\tproducers: [],\n\t\tconsumers: [], // WORKERS SUPPORT ONLY!!\n\t},\n\tconnect: [],\n\tr2_buckets: [],\n\td1_databases: [],\n\tvectorize: [],\n\tai_search_namespaces: [],\n\tai_search: [],\n\twebsearch: undefined,\n\tagent_memory: [],\n\thyperdrive: [],\n\tworkflows: [],\n\tsecrets_store_secrets: [],\n\tartifacts: [],\n\tservices: [],\n\tanalytics_engine_datasets: [],\n\tai: undefined,\n\timages: undefined,\n\tstream: undefined,\n\tmedia: undefined,\n\tversion_metadata: undefined,\n\tunsafe_hello_world: [],\n\tflagship: [],\n\tratelimits: [],\n\tworker_loaders: [],\n\n\t/*====================================================*/\n\t/* Fields supported by Workers only */\n\t/*====================================================*/\n\t/* TOP-LEVEL ONLY FIELDS */\n\tsite: undefined,\n\twasm_modules: undefined,\n\ttext_blobs: undefined,\n\tdata_blobs: undefined,\n\tkeep_vars: undefined,\n\talias: undefined,\n\taddresses: undefined,\n\n\t/** INHERITABLE ENVIRONMENT FIELDS **/\n\taccount_id: undefined,\n\tmain: undefined,\n\tfind_additional_modules: undefined,\n\tpreserve_file_names: undefined,\n\tbase_dir: undefined,\n\tworkers_dev: undefined,\n\tpreview_urls: undefined,\n\troute: undefined,\n\troutes: undefined,\n\ttsconfig: undefined,\n\tjsx_factory: \"React.createElement\",\n\tjsx_fragment: \"React.Fragment\",\n\tmigrations: [],\n\texports: {},\n\ttriggers: {\n\t\tcrons: undefined,\n\t},\n\trules: [],\n\tbuild: { command: undefined, watch_dir: \"./src\", cwd: undefined },\n\tno_bundle: undefined,\n\tminify: undefined,\n\tkeep_names: undefined,\n\tdispatch_namespaces: [],\n\tfirst_party_worker: undefined,\n\tlogfwdr: { bindings: [] },\n\tlogpush: undefined,\n\tupload_source_maps: undefined,\n\tassets: undefined,\n\tobservability: { enabled: true },\n\taccess: undefined,\n\tcache: undefined,\n\t/** The default here is undefined so that we can delegate to the CLOUDFLARE_COMPLIANCE_REGION environment variable. */\n\tcompliance_region: undefined,\n\tpython_modules: { exclude: [\"**/*.pyc\"] },\n\tpreviews: undefined,\n\n\t/** NON-INHERITABLE ENVIRONMENT FIELDS **/\n\tdefine: {},\n\tcloudchamber: {},\n\tcontainers: undefined,\n\tsend_email: [],\n\tbrowser: undefined,\n\tunsafe: {},\n\tmtls_certificates: [],\n\ttail_consumers: undefined,\n\tstreaming_tail_consumers: undefined,\n\tpipelines: [],\n\tvpc_services: [],\n\tvpc_networks: [],\n};\n","import { writeFileSync } from \"node:fs\";\nimport { applyEdits, format, modify } from \"jsonc-parser\";\nimport TOML from \"smol-toml\";\nimport { parseJSONC, parseTOML, readFileSync } from \"../parse\";\nimport type { RawConfig } from \"./config\";\nimport type { JSONPath } from \"jsonc-parser\";\n\nexport const experimental_patchConfig = (\n\tconfigPath: string,\n\t/**\n\t * if you want to add something new, e.g. a binding, you can just provide that {kv_namespace:[{binding:\"KV\"}]}\n\t * and set isArrayInsertion = true\n\t *\n\t * if you want to edit or delete existing array elements, you have to provide the whole array\n\t * e.g. {kv_namespace:[{binding:\"KV\", id:\"new-id\"}, {binding:\"KV2\", id:\"untouched\"}]}\n\t * and set isArrayInsertion = false\n\t */\n\tpatch: RawConfig,\n\tisArrayInsertion: boolean = true\n) => {\n\tlet configString = readFileSync(configPath);\n\n\tif (configPath.endsWith(\"toml\")) {\n\t\t// the TOML parser we use does not preserve comments\n\t\tif (configString.includes(\"#\")) {\n\t\t\tthrow new PatchConfigError(\n\t\t\t\t\"cannot patch .toml config if comments are present\"\n\t\t\t);\n\t\t} else {\n\t\t\t// for simplicity, use the JSONC editor to make all edits\n\t\t\t// toml -> js object -> json string -> edits -> js object -> toml\n\t\t\tconfigString = JSON.stringify(parseTOML(configString));\n\t\t}\n\t}\n\n\tconst patchPaths: JSONPath[] = [];\n\tgetJSONPath(patch, patchPaths, isArrayInsertion);\n\tfor (const patchPath of patchPaths) {\n\t\tconst value = patchPath.pop();\n\t\tconst edit = modify(configString, patchPath, value, {\n\t\t\tisArrayInsertion,\n\t\t});\n\t\tconfigString = applyEdits(configString, edit);\n\t}\n\tconst formatEdit = format(configString, undefined, {});\n\tconfigString = applyEdits(configString, formatEdit);\n\n\tif (configPath.endsWith(\".toml\")) {\n\t\tconfigString = TOML.stringify(parseJSONC(configString));\n\t}\n\twriteFileSync(configPath, configString);\n\treturn configString;\n};\n\n/**\n *\n * Gets all the JSON paths for a given object by recursing through the object, recording the properties encountered.\n * e.g. {a : { b: \"c\", d: [\"e\", \"f\"]}} -> [[\"a\", \"b\", \"c\"], [\"a\", \"d\", 0], [\"a\", \"d\", 1]]\n * The jsonc-parser library requires JSON paths for each edit.\n * Note the final 'path' segment is the value we want to insert,\n * so in the above example,[\"a\", \"b\"] would be the path and we would insert \"c\"\n *\n * If isArrayInsertion = false, when we encounter an array, we use the item index as part of the path and continue\n * If isArrayInsertion = false, we stop recursing down and treat the whole array item as the final path segment/value.\n *\n */\nconst getJSONPath = (\n\tobj: RawConfig,\n\tallPaths: JSONPath[],\n\tisArrayInsertion: boolean,\n\tprevPath: JSONPath = []\n) => {\n\tfor (const [k, v] of Object.entries(obj)) {\n\t\tconst currentPath = [...prevPath, k];\n\t\tif (Array.isArray(v)) {\n\t\t\tv.forEach((x, i) => {\n\t\t\t\tif (isArrayInsertion) {\n\t\t\t\t\t// makes sure we insert new array items at the end\n\t\t\t\t\tallPaths.push([...currentPath, -1, x]);\n\t\t\t\t} else if (typeof x === \"object\" && x !== null) {\n\t\t\t\t\tgetJSONPath(x, allPaths, isArrayInsertion, [...currentPath, i]);\n\t\t\t\t} else {\n\t\t\t\t\tallPaths.push([...currentPath, i, x]);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (typeof v === \"object\" && v !== null) {\n\t\t\tgetJSONPath(v, allPaths, isArrayInsertion, currentPath);\n\t\t} else {\n\t\t\tallPaths.push([...currentPath, v]);\n\t\t}\n\t}\n};\n\n/**\n * Custom error class for config patching errors\n */\nexport class PatchConfigError extends Error {}\n","/**\n * Diagnostic errors and warnings.\n *\n * The structure is a tree, where each node can contain zero or more errors, warnings and child diagnostics objects.\n * You can check whether the overall tree has errors or warnings, and you can render a string representation of the errors or warnings.\n */\nexport class Diagnostics {\n\terrors: string[] = [];\n\twarnings: string[] = [];\n\tchildren: Diagnostics[] = [];\n\t/** Set to true when an unexpected/unknown field is encountered during validation. */\n\thasUnexpectedFields: boolean = false;\n\n\t/**\n\t * Create a new Diagnostics object.\n\t * @param description A general description of this collection of messages.\n\t */\n\tconstructor(public description: string) {}\n\n\t/**\n\t * Merge the given `diagnostics` into this as a child.\n\t */\n\taddChild(diagnostics: Diagnostics): void {\n\t\tif (diagnostics.hasErrors() || diagnostics.hasWarnings()) {\n\t\t\tthis.children.push(diagnostics);\n\t\t}\n\t}\n\n\t/** Does this or any of its children have errors. */\n\thasErrors(): boolean {\n\t\tif (this.errors.length > 0) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn this.children.some((child) => child.hasErrors());\n\t\t}\n\t}\n\n\t/** Does this or any of its children have unexpected fields. */\n\thasUnexpectedFieldsInTree(): boolean {\n\t\tif (this.hasUnexpectedFields) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn this.children.some((child) => child.hasUnexpectedFieldsInTree());\n\t\t}\n\t}\n\n\t/** Render the errors of this and all its children. */\n\trenderErrors(): string {\n\t\treturn this.render(\"errors\");\n\t}\n\n\t/** Does this or any of its children have warnings. */\n\thasWarnings(): boolean {\n\t\tif (this.warnings.length > 0) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn this.children.some((child) => child.hasWarnings());\n\t\t}\n\t}\n\n\t/** Render the warnings of this and all its children. */\n\trenderWarnings(): string {\n\t\treturn this.render(\"warnings\");\n\t}\n\n\tprivate render(field: \"errors\" | \"warnings\"): string {\n\t\tconst hasMethod = field === \"errors\" ? \"hasErrors\" : \"hasWarnings\";\n\t\treturn indentText(\n\t\t\t`${this.description}\\n` +\n\t\t\t\t// Output all the fields (errors or warnings) at this level\n\t\t\t\tthis[field].map((message) => `- ${indentText(message)}`).join(\"\\n\") +\n\t\t\t\t// Output all the child diagnostics at the next level\n\t\t\t\tthis.children\n\t\t\t\t\t.map((child) =>\n\t\t\t\t\t\tchild[hasMethod]() ? \"\\n- \" + child.render(field) : \"\"\n\t\t\t\t\t)\n\t\t\t\t\t.filter((output) => output !== \"\")\n\t\t\t\t\t.join(\"\\n\")\n\t\t);\n\t}\n}\n\n/** Indent all the but the first line by two spaces. */\nfunction indentText(str: string): string {\n\treturn str\n\t\t.split(\"\\n\")\n\t\t.map((line, index) =>\n\t\t\t(index === 0 ? line : ` ${line}`).replace(/^\\s*$/, \"\")\n\t\t)\n\t\t.join(\"\\n\");\n}\n","import type { RawConfig } from \"./config\";\nimport type { Diagnostics } from \"./diagnostics\";\nimport type { Environment, RawEnvironment } from \"./environment\";\n\n/**\n * Mark a field as deprecated.\n *\n * This function will add a diagnostics warning if the deprecated field is found in the `rawEnv` (or an error if it's also a breaking deprecation)\n * The `fieldPath` is a dot separated property path, e.g. `\"build.upload.format\"`.\n */\nexport function deprecated<T extends object>(\n\tdiagnostics: Diagnostics,\n\tconfig: T,\n\tfieldPath: DeepKeyOf<T>,\n\tmessage: string,\n\tremove: boolean,\n\ttitle = \"Deprecation\",\n\ttype: \"warning\" | \"error\" = \"warning\"\n): void {\n\tconst BOLD = \"\\x1b[1m\";\n\tconst NORMAL = \"\\x1b[0m\";\n\tconst diagnosticMessage = `${BOLD}${title}${NORMAL}: \"${fieldPath}\":\\n${message}`;\n\tconst result = unwindPropertyPath(config, fieldPath);\n\tif (result !== undefined && result.field in result.container) {\n\t\tdiagnostics[`${type}s`].push(diagnosticMessage);\n\t\tif (remove) {\n\t\t\tdelete (result.container as Record<string, unknown>)[result.field];\n\t\t}\n\t}\n}\n\n/**\n * Mark a field as experimental.\n *\n * This function will add a diagnostics warning if the experimental field is found in the `rawEnv`.\n * The `fieldPath` is a dot separated property path, e.g. `\"build.upload.format\"`.\n */\nexport function experimental<T extends object>(\n\tdiagnostics: Diagnostics,\n\tconfig: T,\n\tfieldPath: DeepKeyOf<T>\n): void {\n\tconst result = unwindPropertyPath(config, fieldPath);\n\tif (\n\t\tresult !== undefined &&\n\t\tresult.field in result.container &&\n\t\t!(\"WRANGLER_DISABLE_EXPERIMENTAL_WARNING\" in process.env)\n\t) {\n\t\tdiagnostics.warnings.push(\n\t\t\t`\"${fieldPath}\" fields are experimental and may change or break at any time.`\n\t\t);\n\t}\n}\n\n/**\n * Get an inheritable environment field, after computing and validating its value.\n *\n * If the field is not defined in the given environment, then fallback to the value from the top-level config,\n * and then the `defaultValue`.\n */\nexport function inheritable<K extends keyof Environment>(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment,\n\tfield: K,\n\tvalidate: ValidatorFn,\n\tdefaultValue: Environment[K],\n\ttransformFn: TransformFn<Environment[K]> = (v) => v\n): Environment[K] {\n\tvalidate(diagnostics, field, rawEnv[field], topLevelEnv);\n\treturn (\n\t\t// `rawEnv === topLevelEnv` is a special case where the user has provided an environment name\n\t\t// but that named environment is not actually defined in the configuration.\n\t\t// In that case we have reused the topLevelEnv as the rawEnv,\n\t\t// and so we need to process the `transformFn()` anyway rather than just using the field in the `rawEnv`.\n\t\t(rawEnv !== topLevelEnv ? (rawEnv[field] as Environment[K]) : undefined) ??\n\t\ttransformFn(topLevelEnv?.[field]) ??\n\t\tdefaultValue\n\t);\n}\n\n/**\n * Type of function that is used to transform an inheritable environment field.\n */\ntype TransformFn<T> = (fieldValue: T | undefined) => T | undefined;\n\n/**\n * Transform an environment field by appending current environment name to it.\n */\nexport const appendEnvName =\n\t(envName: string): TransformFn<string | undefined> =>\n\t(fieldValue) =>\n\t\tfieldValue ? `${fieldValue}-${envName}` : undefined;\n\n/**\n * Get a not inheritable environment field, after computing and validating its value.\n *\n * If the field is not defined in the given environment but it is defined in the top-level config,\n * then log a warning and return the `defaultValue`.\n */\nexport function notInheritable<K extends keyof Environment>(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawConfig: RawConfig | undefined,\n\trawEnv: RawEnvironment,\n\tenvName: string,\n\tfield: K,\n\tvalidate: ValidatorFn,\n\tdefaultValue: Environment[K]\n): Environment[K] {\n\tif (rawEnv[field] !== undefined) {\n\t\tvalidate(diagnostics, field, rawEnv[field], topLevelEnv);\n\t} else {\n\t\tif (rawConfig?.[field] !== undefined) {\n\t\t\tdiagnostics.warnings.push(\n\t\t\t\t`\"${field}\" exists at the top level, but not on \"env.${envName}\".\\n` +\n\t\t\t\t\t`This is not what you probably want, since \"${field}\" is not inherited by environments.\\n` +\n\t\t\t\t\t`Please add \"${field}\" to \"env.${envName}\".`\n\t\t\t);\n\t\t}\n\t}\n\treturn (rawEnv[field] as Environment[K]) ?? defaultValue;\n}\n\n// Idea taken from https://stackoverflow.com/a/66661477\ntype DeepKeyOf<T> = (\n\tT extends object\n\t\t? {\n\t\t\t\t[K in Exclude<keyof T, symbol>]: `${K}${DotPrefix<DeepKeyOf<T[K]>>}`;\n\t\t\t}[Exclude<keyof T, symbol>]\n\t\t: \"\"\n) extends infer D\n\t? Extract<D, string>\n\t: never;\n\ntype DotPrefix<T extends string> = T extends \"\" ? \"\" : `.${T}`;\n\n/**\n * Return a container object and field name for the last property in a given property path.\n *\n * For example, given a path of `\"build.upload.format\"`) and a starting `root` object\n * this will return:\n *\n * ```\n * { container: root.build.upload, field: \"format\" }\n * ```\n */\nfunction unwindPropertyPath<T extends object>(\n\troot: T,\n\tpath: DeepKeyOf<T>\n): { container: object; field: string } | undefined {\n\tlet container: object = root;\n\tconst parts = (path as string).split(\".\");\n\tfor (let i = 0; i < parts.length - 1; i++) {\n\t\tif (!hasProperty(container, parts[i])) {\n\t\t\treturn;\n\t\t}\n\t\tcontainer = container[parts[i]];\n\t}\n\treturn { container, field: parts[parts.length - 1] };\n}\n\n/**\n * The type of a function that can be used to validate a configuration field.\n */\nexport type ValidatorFn = (\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: unknown,\n\ttopLevelEnv: Environment | undefined\n) => boolean;\n\n/**\n * Validate that the field is a string.\n */\nexport const isString: ValidatorFn = (diagnostics, field, value) => {\n\tif (value !== undefined && typeof value !== \"string\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be of type string but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n\treturn true;\n};\n\n/**\n * Validate that the `name` field is compliant with EWC constraints.\n */\nexport const isValidName: ValidatorFn = (diagnostics, field, value) => {\n\tif (\n\t\t(typeof value === \"string\" && /^$|^[a-z0-9_][a-z0-9-_]*$/.test(value)) ||\n\t\tvalue === undefined\n\t) {\n\t\treturn true;\n\t} else {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be of type string, alphanumeric and lowercase with dashes only but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n};\n\n/**\n * Validate that the field is a valid ISO-8601 date time string\n * see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format\n * or https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date-time-string-format\n */\nexport const isValidDateTimeStringFormat = (\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: string\n): boolean => {\n\tlet isValid = true;\n\n\t// en/em dashes are not valid characters in the JS date time string format.\n\t// While they would be caught by the `isNaN(data.getTime())` check below,\n\t// we want to single these use cases out, and throw a more specific error\n\tif (\n\t\tvalue.includes(\"–\") || // en-dash\n\t\tvalue.includes(\"—\") // em-dash\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" field should use ISO-8601 accepted hyphens (-) rather than en-dashes (–) or em-dashes (—).`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\t// en/em dashes were already handled above. Let's replace them with hyphens,\n\t// which is a valid date time string format character, and evaluate the\n\t// resulting date time string further. This ensures we validate for hyphens\n\t// only once!\n\tconst data = new Date(value.replaceAll(/–|—/g, \"-\"));\n\n\tif (isNaN(data.getTime())) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" field should be a valid ISO-8601 date (YYYY-MM-DD), but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\n/**\n * Validate that the field is an array of strings.\n */\nexport const isStringArray: ValidatorFn = (diagnostics, field, value) => {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Array.isArray(value) || value.some((item) => typeof item !== \"string\"))\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be of type string array but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n\treturn true;\n};\n\n/**\n * Validate that the field is an object containing the given properties.\n */\nexport const isObjectWith =\n\t(...properties: string[]): ValidatorFn =>\n\t(diagnostics, field, value) => {\n\t\tif (\n\t\t\tvalue !== undefined &&\n\t\t\t(typeof value !== \"object\" ||\n\t\t\t\tvalue === null ||\n\t\t\t\t!properties.every((prop) => prop in value))\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`Expected \"${field}\" to be of type object, containing only properties ${properties}, but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t\t// it's an object with the field as desired,\n\t\t// but let's also check for unexpected fields\n\t\tif (value !== undefined) {\n\t\t\tconst restFields = Object.keys(value).filter(\n\t\t\t\t(key) => !properties.includes(key)\n\t\t\t);\n\t\t\tvalidateAdditionalProperties(diagnostics, field, restFields, []);\n\t\t}\n\n\t\treturn true;\n\t};\n\n/**\n * Validate that the field value is one of the given choices.\n */\nexport const isOneOf =\n\t(...choices: unknown[]): ValidatorFn =>\n\t(diagnostics, field, value) => {\n\t\tif (value !== undefined && !choices.some((choice) => value === choice)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`Expected \"${field}\" field to be one of ${JSON.stringify(\n\t\t\t\t\tchoices\n\t\t\t\t)} but got ${JSON.stringify(value)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n/**\n * Aggregate multiple validator functions\n */\nexport const all = (...validations: ValidatorFn[]): ValidatorFn => {\n\treturn (diagnostics, field, value, config) => {\n\t\tlet passedValidations = true;\n\n\t\tfor (const validate of validations) {\n\t\t\tif (!validate(diagnostics, field, value, config)) {\n\t\t\t\tpassedValidations = false;\n\t\t\t}\n\t\t}\n\n\t\treturn passedValidations;\n\t};\n};\n\n/**\n * Check that the field is mutually exclusive with a list of other fields.\n *\n * @param container the container of the fields to check against.\n * @param fields the names of the fields to check against.\n */\nexport const isMutuallyExclusiveWith = <T extends RawEnvironment | RawConfig>(\n\tcontainer: T,\n\t...fields: (keyof T)[]\n): ValidatorFn => {\n\treturn (diagnostics, field, value) => {\n\t\tif (value === undefined) {\n\t\t\treturn true;\n\t\t}\n\n\t\tfor (const exclusiveWith of fields) {\n\t\t\tif (container[exclusiveWith] !== undefined) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected exactly one of the following fields ${JSON.stringify([\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t])}.`\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n};\n\n/**\n * Validate that the field is a boolean.\n */\nexport const isBoolean: ValidatorFn = (diagnostics, field, value) => {\n\tif (value !== undefined && typeof value !== \"boolean\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be of type boolean but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n\treturn true;\n};\n\n/**\n * Validate that the required field exists and has the expected type.\n */\nexport const validateRequiredProperty = (\n\tdiagnostics: Diagnostics,\n\tcontainer: string,\n\tkey: string,\n\tvalue: unknown,\n\ttype: TypeofType,\n\tchoices?: unknown[]\n): boolean => {\n\tif (container) {\n\t\tcontainer += \".\";\n\t}\n\tif (value === undefined) {\n\t\tdiagnostics.errors.push(`\"${container}${key}\" is a required field.`);\n\t\treturn false;\n\t} else if (typeof value !== type) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${container}${key}\" to be of type ${type} but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t} else if (choices) {\n\t\tif (\n\t\t\t!isOneOf(...choices)(diagnostics, `${container}${key}`, value, undefined)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\n/**\n * Validate that at least one of the properties in the list is required.\n */\nexport const validateAtLeastOnePropertyRequired = (\n\tdiagnostics: Diagnostics,\n\tcontainer: string,\n\tproperties: {\n\t\tkey: string;\n\t\tvalue: unknown;\n\t\ttype: TypeofType;\n\t}[]\n): boolean => {\n\tconst containerPath = container ? `${container}.` : \"\";\n\n\tif (properties.every((property) => property.value === undefined)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`${properties.map(({ key }) => `\"${containerPath}${key}\"`).join(\" or \")} is required.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst errors = [];\n\tfor (const prop of properties) {\n\t\tif (typeof prop.value === prop.type) {\n\t\t\treturn true;\n\t\t}\n\t\terrors.push(\n\t\t\t`Expected \"${containerPath}${prop.key}\" to be of type ${prop.type} but got ${JSON.stringify(\n\t\t\t\tprop.value\n\t\t\t)}.`\n\t\t);\n\t}\n\n\tdiagnostics.errors.push(...errors);\n\treturn false;\n};\n\n/**\n * Validate that, if the optional field exists, then it has the expected type.\n */\nexport const validateOptionalProperty = (\n\tdiagnostics: Diagnostics,\n\tcontainer: string,\n\tkey: string,\n\tvalue: unknown,\n\ttype: TypeofType,\n\tchoices?: unknown[]\n): boolean => {\n\tif (value !== undefined) {\n\t\treturn validateRequiredProperty(\n\t\t\tdiagnostics,\n\t\t\tcontainer,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\ttype,\n\t\t\tchoices\n\t\t);\n\t}\n\treturn true;\n};\n\n/**\n * Validate that the field is an array of elements of the given type.\n */\nexport const validateTypedArray = (\n\tdiagnostics: Diagnostics,\n\tcontainer: string,\n\tvalue: unknown,\n\ttype: TypeofType\n): boolean => {\n\tlet isValid = true;\n\tif (!Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${container}\" to be an array of ${type}s but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\tisValid = false;\n\t} else {\n\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\tisValid =\n\t\t\t\tvalidateRequiredProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tcontainer,\n\t\t\t\t\t`[${i}]`,\n\t\t\t\t\tvalue[i],\n\t\t\t\t\ttype\n\t\t\t\t) && isValid;\n\t\t}\n\t}\n\treturn isValid;\n};\n\n/**\n * Validate that, if the optional field exists, it is an array of elements of the given type.\n */\nexport const validateOptionalTypedArray = (\n\tdiagnostics: Diagnostics,\n\tcontainer: string,\n\tvalue: unknown,\n\ttype: TypeofType\n) => {\n\tif (value !== undefined) {\n\t\treturn validateTypedArray(diagnostics, container, value, type);\n\t}\n\treturn true;\n};\n\n/**\n * Returns whether `target` has the required property `property` of type `type`.\n *\n * @param target the object to test.\n * @param property the property name to test.\n * @param type the expected type of the property.\n * @param choices optional list of allowed values for the property.\n * @returns whether `target` has the required property `property` of type `type`, and optionally one of `choices`.\n */\nexport const isRequiredProperty = <T extends object>(\n\ttarget: object,\n\tproperty: keyof T,\n\ttype: TypeofType,\n\tchoices?: unknown[]\n): target is T =>\n\thasProperty<T>(target, property) &&\n\ttypeof target[property] === type &&\n\t(choices === undefined || choices.includes(target[property]));\n\n/**\n * Returns whether `target` has the optional property `property` of type `type`.\n *\n * @param target the object to test.\n * @param property the property name to test.\n * @param type the expected type of the property.\n * @returns whether `target` has the optional property `property` of type `type`.\n */\nexport const isOptionalProperty = <T extends object>(\n\ttarget: object,\n\tproperty: keyof T,\n\ttype: TypeofType\n): target is T =>\n\t!hasProperty<T>(target, property) || typeof target[property] === type;\n\n/**\n * Returns whether `target` has the property `property`.\n *\n * @param target the object to test.\n * @param property the property name to test.\n * @returns whether `target` has the property `property`.\n */\nexport const hasProperty = <T extends object>(\n\ttarget: object,\n\tproperty: keyof T\n): target is T => property in target;\n\n/**\n * Add warning messages about any properties in the given field that are not expected to be there.\n */\nexport const validateAdditionalProperties = (\n\tdiagnostics: Diagnostics,\n\tfieldPath: string,\n\trestProps: Iterable<string>,\n\tknownProps: Iterable<string>\n): boolean => {\n\tconst restPropSet = new Set(restProps);\n\tfor (const knownProp of knownProps) {\n\t\trestPropSet.delete(knownProp);\n\t}\n\tif (restPropSet.size > 0) {\n\t\tconst fields = Array.from(restPropSet.keys()).map((field) => `\"${field}\"`);\n\t\tdiagnostics.warnings.push(\n\t\t\t`Unexpected fields found in ${fieldPath} field: ${fields}`\n\t\t);\n\t\tdiagnostics.hasUnexpectedFields = true;\n\t\treturn false;\n\t}\n\treturn true;\n};\n\n/**\n * Get the names of the bindings collection in `value`.\n *\n * Will return an empty array if it doesn't understand the value\n * passed in, so another form of validation should be\n * performed externally.\n */\nexport const getBindingNames = (value: unknown): string[] => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn [];\n\t}\n\tif (isBindingList(value)) {\n\t\treturn value.bindings.map(({ name }) => name);\n\t} else if (isNamespaceList(value)) {\n\t\treturn value.map(({ binding }) => binding);\n\t} else if (isRecord(value)) {\n\t\t// browser and AI bindings are single values with a similar shape\n\t\t// { binding = \"name\" }\n\t\tif (value[\"binding\"] !== undefined) {\n\t\t\treturn [value[\"binding\"] as string];\n\t\t}\n\t\treturn Object.keys(value).filter((k) => value[k] !== undefined);\n\t} else {\n\t\treturn [];\n\t}\n};\n\nconst isBindingList = (\n\tvalue: unknown\n): value is {\n\tbindings: {\n\t\tname: string;\n\t}[];\n} =>\n\tisRecord(value) &&\n\t\"bindings\" in value &&\n\tArray.isArray(value.bindings) &&\n\tvalue.bindings.every(\n\t\t(binding) =>\n\t\t\tisRecord(binding) && \"name\" in binding && typeof binding.name === \"string\"\n\t);\n\nconst isNamespaceList = (value: unknown): value is { binding: string }[] =>\n\tArray.isArray(value) &&\n\tvalue.every(\n\t\t(entry) =>\n\t\t\tisRecord(entry) && \"binding\" in entry && typeof entry.binding === \"string\"\n\t);\n\nconst isRecord = (\n\tvalue: unknown\n): value is Record<string | number | symbol, unknown> =>\n\ttypeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/**\n * Ensure that all bindings in an array have unique `name` properties.\n */\nexport const validateUniqueNameProperty: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (Array.isArray(value)) {\n\t\tconst nameCount = new Map<string, number>();\n\n\t\tObject.entries(value).forEach(([_, entry]) => {\n\t\t\tnameCount.set(entry.name, (nameCount.get(entry.name) ?? 0) + 1);\n\t\t});\n\n\t\tconst duplicates = Array.from(nameCount.entries())\n\t\t\t.filter(([_, count]) => count > 1)\n\t\t\t.map(([name]) => name);\n\n\t\tif (duplicates.length > 0) {\n\t\t\tconst list = duplicates.join('\", \"');\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings must have unique \"name\" values; duplicate(s) found: \"${list}\"`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n\n/**\n * JavaScript `typeof` operator return values.\n */\nexport type TypeofType =\n\t| \"string\"\n\t| \"number\"\n\t| \"bigint\"\n\t| \"boolean\"\n\t| \"symbol\"\n\t| \"undefined\"\n\t| \"object\"\n\t| \"function\";\n","import assert from \"node:assert\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { isValidWorkflowName } from \"@cloudflare/workflows-shared/src/lib/validators\";\nimport { dedent } from \"ts-dedent\";\nimport { getCloudflareEnv } from \"../environment-variables/misc-variables\";\nimport { UserError } from \"../errors\";\nimport { isDirectory } from \"../fs-helpers\";\nimport { isRedirectedRawConfig } from \"./config-helpers\";\nimport { getContainerNameToClassNameMap } from \"./containers\";\nimport { Diagnostics } from \"./diagnostics\";\nimport { getDurableObjectExports } from \"./durable-object-exports\";\nimport { ARTIFACTS_EVENT_TYPES } from \"./environment\";\nimport {\n\tall,\n\tappendEnvName,\n\tdeprecated,\n\texperimental,\n\tgetBindingNames,\n\thasProperty,\n\tinheritable,\n\tisBoolean,\n\tisMutuallyExclusiveWith,\n\tisOneOf,\n\tisOptionalProperty,\n\tisRequiredProperty,\n\tisString,\n\tisStringArray,\n\tisValidDateTimeStringFormat,\n\tisValidName,\n\tnotInheritable,\n\tvalidateAdditionalProperties,\n\tvalidateAtLeastOnePropertyRequired,\n\tvalidateOptionalProperty,\n\tvalidateOptionalTypedArray,\n\tvalidateRequiredProperty,\n\tvalidateTypedArray,\n\tvalidateUniqueNameProperty,\n} from \"./validation-helpers\";\nimport { configFileName, formatConfigSnippet } from \".\";\nimport type { Binding } from \"../types\";\nimport type { Config, DevConfig, RawConfig, RawDevConfig } from \"./config\";\nimport type {\n\tAccess,\n\tAssets,\n\tCacheOptions,\n\tContainerApp,\n\tCustomDomainRoute,\n\tDispatchNamespaceOutbound,\n\tDurableObjectExport,\n\tEnvironment,\n\tObservability,\n\tRawEnvironment,\n\tRule,\n\tStreamingTailConsumer,\n\tTailConsumer,\n} from \"./environment\";\nimport type { TypeofType, ValidatorFn } from \"./validation-helpers\";\n\n/**\n * R2 bucket names must:\n * - contain lower case letters, numbers, and `-`\n * - start and end with with a lower case letter or number\n * - be between 6 and 63 characters long\n *\n * See https://developers.cloudflare.com/r2/buckets/create-buckets/#bucket-level-operations\n */\nexport function isValidR2BucketName(name: string | undefined): name is string {\n\treturn (\n\t\ttypeof name === \"string\" && /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/.test(name)\n\t);\n}\n\nexport const bucketFormatMessage = `Bucket names must begin and end with an alphanumeric character, only contain lowercase letters, numbers, and hyphens, and be between 3 and 63 characters long.`;\n\n/**\n * Config field names for bindings (e.g., \"kv_namespaces\", \"d1_databases\").\n * These are the keys used in Wrangler's config file\n */\nexport type ConfigBindingFieldName =\n\t| \"data_blobs\"\n\t| \"durable_objects\"\n\t| \"kv_namespaces\"\n\t| \"send_email\"\n\t| \"queues\"\n\t| \"d1_databases\"\n\t| \"vectorize\"\n\t| \"ai_search_namespaces\"\n\t| \"ai_search\"\n\t| \"websearch\"\n\t| \"agent_memory\"\n\t| \"hyperdrive\"\n\t| \"r2_buckets\"\n\t| \"logfwdr\"\n\t| \"services\"\n\t| \"analytics_engine_datasets\"\n\t| \"text_blobs\"\n\t| \"browser\"\n\t| \"ai\"\n\t| \"images\"\n\t| \"stream\"\n\t| \"media\"\n\t| \"version_metadata\"\n\t| \"unsafe\"\n\t| \"vars\"\n\t| \"wasm_modules\"\n\t| \"dispatch_namespaces\"\n\t| \"mtls_certificates\"\n\t| \"workflows\"\n\t| \"pipelines\"\n\t| \"secrets_store_secrets\"\n\t| \"artifacts\"\n\t| \"ratelimits\"\n\t| \"assets\"\n\t| \"unsafe_hello_world\"\n\t| \"flagship\"\n\t| \"worker_loaders\"\n\t| \"vpc_services\"\n\t| \"vpc_networks\";\n\nexport const friendlyBindingNames: Record<ConfigBindingFieldName, string> = {\n\tdata_blobs: \"Data Blob\",\n\tdurable_objects: \"Durable Object\",\n\tkv_namespaces: \"KV Namespace\",\n\tsend_email: \"Send Email\",\n\tqueues: \"Queue\",\n\td1_databases: \"D1 Database\",\n\tvectorize: \"Vectorize Index\",\n\tai_search_namespaces: \"AI Search Namespace\",\n\tai_search: \"AI Search Instance\",\n\twebsearch: \"Web Search\",\n\tagent_memory: \"Agent Memory\",\n\thyperdrive: \"Hyperdrive Config\",\n\tr2_buckets: \"R2 Bucket\",\n\tlogfwdr: \"logfwdr\",\n\tservices: \"Worker\",\n\tanalytics_engine_datasets: \"Analytics Engine Dataset\",\n\ttext_blobs: \"Text Blob\",\n\tbrowser: \"Browser Run\",\n\tai: \"AI\",\n\timages: \"Images\",\n\tstream: \"Stream\",\n\tmedia: \"Media\",\n\tversion_metadata: \"Worker Version Metadata\",\n\tunsafe: \"Unsafe Metadata\",\n\tvars: \"Environment Variable\",\n\twasm_modules: \"Wasm Module\",\n\tdispatch_namespaces: \"Dispatch Namespace\",\n\tmtls_certificates: \"mTLS Certificate\",\n\tworkflows: \"Workflow\",\n\tpipelines: \"Pipeline\",\n\tsecrets_store_secrets: \"Secrets Store Secret\",\n\tartifacts: \"Artifacts\",\n\tratelimits: \"Rate Limit\",\n\tassets: \"Assets\",\n\tunsafe_hello_world: \"Hello World\",\n\tflagship: \"Flagship\",\n\tworker_loaders: \"Worker Loader\",\n\tvpc_services: \"VPC Service\",\n\tvpc_networks: \"VPC Network\",\n} as const;\n\n/**\n * Friendly names for binding types (keyed by Binding[\"type\"] discriminator).\n * These are mostly (but not always) non-plural versions of friendlyBindingNames\n */\nconst bindingTypeFriendlyNames: Record<Binding[\"type\"], string> = {\n\t// The 3 binding types below are all rendered as \"Environment Variable\" to preserve existing behaviour (friendlyBindingNames.vars)\n\tplain_text: \"Environment Variable\",\n\tsecret_text: \"Environment Variable\",\n\tjson: \"Environment Variable\",\n\tkv_namespace: \"KV Namespace\",\n\tsend_email: \"Send Email\",\n\twasm_module: \"Wasm Module\",\n\ttext_blob: \"Text Blob\",\n\tbrowser: \"Browser Run\",\n\tai: \"AI\",\n\timages: \"Images\",\n\tstream: \"Stream\",\n\tversion_metadata: \"Worker Version Metadata\",\n\tdata_blob: \"Data Blob\",\n\tdurable_object_namespace: \"Durable Object\",\n\tworkflow: \"Workflow\",\n\tqueue: \"Queue\",\n\tr2_bucket: \"R2 Bucket\",\n\td1: \"D1 Database\",\n\tvectorize: \"Vectorize Index\",\n\tai_search_namespace: \"AI Search Namespace\",\n\tai_search: \"AI Search Instance\",\n\twebsearch: \"Web Search\",\n\tagent_memory: \"Agent Memory\",\n\thyperdrive: \"Hyperdrive Config\",\n\tservice: \"Worker\",\n\tfetcher: \"Service Binding\",\n\tanalytics_engine: \"Analytics Engine Dataset\",\n\tdispatch_namespace: \"Dispatch Namespace\",\n\tmtls_certificate: \"mTLS Certificate\",\n\tpipeline: \"Pipeline\",\n\tsecrets_store_secret: \"Secrets Store Secret\",\n\tartifacts: \"Artifacts\",\n\tlogfwdr: \"logfwdr\",\n\tunsafe_hello_world: \"Hello World\",\n\tflagship: \"Flagship\",\n\tratelimit: \"Rate Limit\",\n\tworker_loader: \"Worker Loader\",\n\tvpc_service: \"VPC Service\",\n\tvpc_network: \"VPC Network\",\n\tmedia: \"Media\",\n\tassets: \"Assets\",\n\tinherit: \"Inherited\",\n} as const;\n\n/**\n * Get a friendly name for a binding type, handling unsafe bindings\n */\nexport function getBindingTypeFriendlyName(\n\tbindingType: Binding[\"type\"]\n): string {\n\tif (bindingType in bindingTypeFriendlyNames) {\n\t\treturn bindingTypeFriendlyNames[bindingType];\n\t}\n\n\tif (bindingType.startsWith(\"unsafe_\")) {\n\t\treturn \"Unsafe Metadata\";\n\t}\n\n\treturn bindingType;\n}\n\nexport type NormalizeAndValidateConfigArgs = {\n\tname?: string;\n\tenv?: string;\n\t// This is not relevant in dev. It's only purpose is loosening Worker name validation when deploying to a dispatch namespace\n\t\"dispatch-namespace\"?: string;\n\tremote?: boolean;\n\tlocalProtocol?: string;\n\tupstreamProtocol?: string;\n\tscript?: string;\n\tenableContainers?: boolean;\n\tgenerateTypes?: boolean;\n};\n\nconst ENGLISH = new Intl.ListFormat(\"en-US\");\n\nconst ALLOWED_INSTANCE_TYPES = [\n\t\"lite\",\n\t\"basic\",\n\t\"standard-1\",\n\t\"standard-2\",\n\t\"standard-3\",\n\t\"standard-4\",\n\t\"dev\", // legacy\n\t\"standard\", // legacy\n];\n\nexport function isPagesConfig(rawConfig: RawConfig): boolean {\n\treturn rawConfig.pages_build_output_dir !== undefined;\n}\n\n/**\n * Validate the given `rawConfig` object that was loaded from `configPath`.\n *\n * The configuration is normalized, which includes using default values for missing field,\n * and copying over inheritable fields into named environments.\n *\n * Any errors or warnings from the validation are available in the returned `diagnostics` object.\n *\n * @param rawConfig The config loaded from `configPath`\n * @param configPath The path to the config file\n * @param userConfigPath\n * @param args\n * @param preserveOriginalMain\n * @returns The normalized `config` and `diagnostics` message\n */\nexport function normalizeAndValidateConfig(\n\trawConfig: RawConfig,\n\tconfigPath: string | undefined,\n\tuserConfigPath: string | undefined,\n\targs: NormalizeAndValidateConfigArgs,\n\tpreserveOriginalMain = false\n): {\n\tconfig: Config;\n\tdiagnostics: Diagnostics;\n} {\n\tconst diagnostics = new Diagnostics(\n\t\t`Processing ${\n\t\t\tconfigPath ? path.relative(process.cwd(), configPath) : \"wrangler\"\n\t\t} configuration:`\n\t);\n\n\tconst isRedirectedConfig = isRedirectedRawConfig(\n\t\trawConfig,\n\t\tconfigPath,\n\t\tuserConfigPath\n\t);\n\n\tif (\"legacy_env\" in rawConfig) {\n\t\t// Older versions of tools such as the Vite plugin can generate redirected\n\t\t// configurations that still include the removed `legacy_env` field.\n\t\t// `legacy_env = true` was the historical default (so removing it does not\n\t\t// change how the Worker is deployed), we silently strip it here rather than\n\t\t// erroring. For user-authored configurations we still surface the error so\n\t\t// that they know to remove the field.\n\t\tif (!isRedirectedConfig) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\tdedent`\n\t\t\t\t\tThe \"legacy_env\" field is no longer supported, so please remove it from your configuration file.\n\t\t\t\t\tService environments have been removed, and each environment is now deployed as its own Worker named \"<name>-<environment>\". This matches the behaviour of \"legacy_env = true\", which was the default, so removing the field will not change how your Worker is deployed.\n\t\t\t\t\tRefer to https://developers.cloudflare.com/workers/wrangler/environments/ for more information.\n\t\t\t\t`\n\t\t\t);\n\t\t}\n\t\t// Remove the field so it is not also reported as an unexpected top-level field.\n\t\tdelete (rawConfig as Record<string, unknown>).legacy_env;\n\t}\n\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"\",\n\t\t\"send_metrics\",\n\t\trawConfig.send_metrics,\n\t\t\"boolean\"\n\t);\n\n\tif (\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\t\"\",\n\t\t\t\"dependencies_instrumentation\",\n\t\t\trawConfig.dependencies_instrumentation,\n\t\t\t\"object\"\n\t\t)\n\t) {\n\t\tif (typeof rawConfig.dependencies_instrumentation === \"object\") {\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"dependencies_instrumentation\",\n\t\t\t\t\"enabled\",\n\t\t\t\trawConfig.dependencies_instrumentation.enabled,\n\t\t\t\t\"boolean\"\n\t\t\t);\n\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"dependencies_instrumentation.exclude_packages\",\n\t\t\t\trawConfig.dependencies_instrumentation.exclude_packages,\n\t\t\t\t\"string\"\n\t\t\t);\n\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"dependencies_instrumentation\",\n\t\t\t\tObject.keys(\n\t\t\t\t\trawConfig.dependencies_instrumentation as Record<string, unknown>\n\t\t\t\t),\n\t\t\t\t[\"enabled\", \"exclude_packages\"]\n\t\t\t);\n\t\t}\n\t}\n\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"\",\n\t\t\"keep_vars\",\n\t\trawConfig.keep_vars,\n\t\t\"boolean\"\n\t);\n\n\tvalidateOptionalTypedArray(\n\t\tdiagnostics,\n\t\t\"addresses\",\n\t\trawConfig.addresses,\n\t\t\"string\"\n\t);\n\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"\",\n\t\t\"pages_build_output_dir\",\n\t\trawConfig.pages_build_output_dir,\n\t\t\"string\"\n\t);\n\n\t// Support explicit JSON schema setting\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"\",\n\t\t\"$schema\",\n\t\trawConfig.$schema,\n\t\t\"string\"\n\t);\n\n\tconst isDispatchNamespace =\n\t\ttypeof args[\"dispatch-namespace\"] === \"string\" &&\n\t\targs[\"dispatch-namespace\"].trim() !== \"\";\n\n\tconst topLevelEnv = normalizeAndValidateEnvironment(\n\t\tdiagnostics,\n\t\tconfigPath,\n\t\trawConfig,\n\t\tisDispatchNamespace,\n\t\tpreserveOriginalMain\n\t);\n\n\tconst definedEnvironments = Object.keys(rawConfig.env ?? {});\n\n\tif (isRedirectedConfig && definedEnvironments.length > 0) {\n\t\tdiagnostics.errors.push(\n\t\t\tdedent`\n\t\t\t\tRedirected configurations cannot include environments but the following have been found:\\n${definedEnvironments\n\t\t\t\t\t.map((env) => `\t- ${env}`)\n\t\t\t\t\t.join(\"\\n\")}\n\n\n\t\t\t\tSuch configurations are generated by tools, meaning that one of the tools\n\t\t\t\tyour application is using is generating the incorrect configuration.\n\t\t\t\tReport this issue to the tool's author so that this can be fixed there.\n\t\t\t\t`\n\t\t);\n\t}\n\n\t// The environment can come from the CLI args (i.e. `--env`) or from the `CLOUDFLARE_ENV` environment variable.\n\tconst envName = args.env ?? getCloudflareEnv();\n\tassert(envName === undefined || typeof envName === \"string\");\n\n\tlet activeEnv = topLevelEnv;\n\n\tif (envName) {\n\t\tif (isRedirectedConfig) {\n\t\t\t// Check that if we are loading a redirected config, any specified environment must match the target environment\n\t\t\t// from the original user config.\n\t\t\t// Note: we don't error for pages commands where the environment is always set (to either \"preview\" or \"production\")\n\t\t\tif (\n\t\t\t\t!isPagesConfig(rawConfig) &&\n\t\t\t\trawConfig.targetEnvironment &&\n\t\t\t\trawConfig.targetEnvironment !== envName\n\t\t\t) {\n\t\t\t\tconst via =\n\t\t\t\t\targs.env !== undefined\n\t\t\t\t\t\t? \"via the `--env/-e` CLI argument\"\n\t\t\t\t\t\t: \"via the CLOUDFLARE_ENV environment variable\";\n\t\t\t\t// We are throwing here rather than just adding to the diagnostics because this is a hard error\n\t\t\t\t// and we'd like to collect Sentry data on when and how often this is happening.\n\t\t\t\tthrow new Error(dedent`\n\t\t\t\t\tYou have specified the environment \"${envName}\" ${via}.\n\t\t\t\t\tThis does not match the target environment \"${rawConfig.targetEnvironment}\" that was used when building the application.\n\t\t\t\t\tPerhaps you need to re-run the custom build of the project with \"${envName}\" as the selected environment?\n\t\t\t\t`);\n\t\t\t}\n\t\t} else {\n\t\t\tconst envDiagnostics = new Diagnostics(\n\t\t\t\t`\"env.${envName}\" environment configuration`\n\t\t\t);\n\t\t\tconst rawEnv = rawConfig.env?.[envName];\n\n\t\t\t/**\n\t\t\t * If an environment name was specified, and we found corresponding configuration\n\t\t\t * for it in the config file, we will use that corresponding environment. If the\n\t\t\t * environment name was specified, but no configuration for it was found, we will:\n\t\t\t *\n\t\t\t * - default to the top-level environment for Pages. For Pages, Wrangler does not\n\t\t\t * require both of supported named environments (\"preview\" or \"production\") to be\n\t\t\t * explicitly defined in the config file. If either`[env.production]` or\n\t\t\t * `[env.preview]` is left unspecified, we will use the top-level environment when\n\t\t\t * targeting that named Pages environment.\n\t\t\t *\n\t\t\t * - create a fake active environment with the specified `envName` for Workers.\n\t\t\t * This is done to cover any legacy environment cases, where the `envName` is used.\n\t\t\t */\n\t\t\tif (rawEnv !== undefined) {\n\t\t\t\tactiveEnv = normalizeAndValidateEnvironment(\n\t\t\t\t\tenvDiagnostics,\n\t\t\t\t\tconfigPath,\n\t\t\t\t\trawEnv,\n\t\t\t\t\tisDispatchNamespace,\n\t\t\t\t\tpreserveOriginalMain,\n\t\t\t\t\tenvName,\n\t\t\t\t\ttopLevelEnv,\n\t\t\t\t\trawConfig\n\t\t\t\t);\n\t\t\t\tdiagnostics.addChild(envDiagnostics);\n\t\t\t} else if (!isPagesConfig(rawConfig)) {\n\t\t\t\tactiveEnv = normalizeAndValidateEnvironment(\n\t\t\t\t\tenvDiagnostics,\n\t\t\t\t\tconfigPath,\n\t\t\t\t\ttopLevelEnv, // in this case reuse the topLevelEnv to ensure that nonInherited fields are not removed\n\t\t\t\t\tisDispatchNamespace,\n\t\t\t\t\tpreserveOriginalMain,\n\t\t\t\t\tenvName,\n\t\t\t\t\ttopLevelEnv,\n\t\t\t\t\trawConfig\n\t\t\t\t);\n\t\t\t\tconst envNames = rawConfig.env\n\t\t\t\t\t? `The available configured environment names are: ${JSON.stringify(\n\t\t\t\t\t\t\tObject.keys(rawConfig.env)\n\t\t\t\t\t\t)}\\n`\n\t\t\t\t\t: \"\";\n\t\t\t\tconst message =\n\t\t\t\t\t`No environment found in configuration with name \"${envName}\".\\n` +\n\t\t\t\t\t`Before using \\`--env=${envName}\\` there should be an equivalent environment section in the configuration.\\n` +\n\t\t\t\t\t`${envNames}\\n` +\n\t\t\t\t\t`Consider adding an environment configuration section to the ${configFileName(configPath)} file:\\n` +\n\t\t\t\t\t\"```\\n[env.\" +\n\t\t\t\t\tenvName +\n\t\t\t\t\t\"]\\n```\\n\";\n\n\t\t\t\tif (envNames.length > 0) {\n\t\t\t\t\tdiagnostics.errors.push(message);\n\t\t\t\t} else {\n\t\t\t\t\t// Only warn (rather than error) if there are not actually any environments configured in the Wrangler configuration file.\n\t\t\t\t\tdiagnostics.warnings.push(message);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Process the top-level default environment configuration.\n\tconst config: Config = {\n\t\tconfigPath,\n\t\tuserConfigPath,\n\t\ttopLevelName: isRedirectedConfig ? rawConfig.topLevelName : rawConfig.name,\n\t\tdefinedEnvironments: isRedirectedConfig\n\t\t\t? rawConfig.definedEnvironments\n\t\t\t: definedEnvironments,\n\t\ttargetEnvironment: isRedirectedConfig\n\t\t\t? rawConfig.targetEnvironment\n\t\t\t: envName,\n\t\tpages_build_output_dir: normalizeAndValidatePagesBuildOutputDir(\n\t\t\tconfigPath,\n\t\t\trawConfig.pages_build_output_dir\n\t\t),\n\t\tsend_metrics: rawConfig.send_metrics,\n\t\tdependencies_instrumentation: rawConfig.dependencies_instrumentation,\n\t\tkeep_vars: rawConfig.keep_vars,\n\t\taddresses: rawConfig.addresses,\n\t\t...activeEnv,\n\t\tdev: normalizeAndValidateDev(diagnostics, rawConfig.dev ?? {}, args),\n\t\tsite: normalizeAndValidateSite(\n\t\t\tdiagnostics,\n\t\t\tconfigPath,\n\t\t\trawConfig,\n\t\t\tactiveEnv.main\n\t\t),\n\t\talias: normalizeAndValidateAliases(diagnostics, configPath, rawConfig),\n\t\twasm_modules: normalizeAndValidateModulePaths(\n\t\t\tdiagnostics,\n\t\t\tconfigPath,\n\t\t\t\"wasm_modules\",\n\t\t\trawConfig.wasm_modules\n\t\t),\n\t\ttext_blobs: normalizeAndValidateModulePaths(\n\t\t\tdiagnostics,\n\t\t\tconfigPath,\n\t\t\t\"text_blobs\",\n\t\t\trawConfig.text_blobs\n\t\t),\n\t\tdata_blobs: normalizeAndValidateModulePaths(\n\t\t\tdiagnostics,\n\t\t\tconfigPath,\n\t\t\t\"data_blobs\",\n\t\t\trawConfig.data_blobs\n\t\t),\n\t};\n\n\tvalidateBindingsHaveUniqueNames(diagnostics, config);\n\n\tvalidateAdditionalProperties(\n\t\tdiagnostics,\n\t\t\"top-level\",\n\t\tObject.keys(rawConfig),\n\t\t[...Object.keys(config), \"env\", \"$schema\"]\n\t);\n\n\tapplyPythonConfig(config, args);\n\n\treturn { config, diagnostics };\n}\n\n/**\n * Modifies the provided config to support python workers, if the entrypoint is a .py file\n */\nfunction applyPythonConfig(\n\tconfig: Config,\n\targs: NormalizeAndValidateConfigArgs\n) {\n\tconst mainModule = args.script ?? config.main;\n\tif (typeof mainModule === \"string\" && mainModule.endsWith(\".py\")) {\n\t\t// Workers with a python entrypoint should have bundling turned off, since all of Wrangler's bundling is JS/TS specific\n\t\tconfig.no_bundle = true;\n\n\t\t// Workers with a python entrypoint need module rules for \"*.py\". Add one automatically as a DX nicety\n\t\tif (!config.rules.some((rule) => rule.type === \"PythonModule\")) {\n\t\t\tconfig.rules.push({ type: \"PythonModule\", globs: [\"**/*.py\"] });\n\t\t}\n\t\tif (!config.compatibility_flags.includes(\"python_workers\")) {\n\t\t\tthrow new UserError(\n\t\t\t\t\"The `python_workers` compatibility flag is required to use Python.\",\n\t\t\t\t{ telemetryMessage: false }\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Validate the `build` configuration and return the normalized values.\n */\nfunction normalizeAndValidateBuild(\n\tdiagnostics: Diagnostics,\n\trawEnv: RawEnvironment,\n\trawBuild: Config[\"build\"],\n\tconfigPath: string | undefined\n): Config[\"build\"] {\n\tconst { command, cwd, watch_dir = \"./src\", ...rest } = rawBuild;\n\tvalidateAdditionalProperties(diagnostics, \"build\", Object.keys(rest), []);\n\n\tvalidateOptionalProperty(diagnostics, \"build\", \"command\", command, \"string\");\n\tvalidateOptionalProperty(diagnostics, \"build\", \"cwd\", cwd, \"string\");\n\tif (Array.isArray(watch_dir)) {\n\t\tvalidateTypedArray(diagnostics, \"build.watch_dir\", watch_dir, \"string\");\n\t} else {\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\t\"build\",\n\t\t\t\"watch_dir\",\n\t\t\twatch_dir,\n\t\t\t\"string\"\n\t\t);\n\t}\n\n\treturn {\n\t\tcommand,\n\t\twatch_dir:\n\t\t\t// - `watch_dir` only matters when `command` is defined, so we apply\n\t\t\t// a default only when `command` is defined\n\t\t\t// - `configPath` will always be defined since `build` can only\n\t\t\t// be configured in the Wrangler configuration file, but who knows, that may\n\t\t\t// change in the future, so we do a check anyway\n\t\t\tcommand && configPath\n\t\t\t\t? Array.isArray(watch_dir)\n\t\t\t\t\t? watch_dir.map((dir) =>\n\t\t\t\t\t\t\tpath.relative(\n\t\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t\tpath.join(path.dirname(configPath), `${dir}`)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t: path.relative(\n\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\tpath.join(path.dirname(configPath), `${watch_dir}`)\n\t\t\t\t\t\t)\n\t\t\t\t: watch_dir,\n\t\tcwd,\n\t};\n}\n\n/**\n * Validate the `main` field and return the normalized values.\n */\nfunction normalizeAndValidateMainField(\n\tconfigPath: string | undefined,\n\trawMain: string | undefined\n): string | undefined {\n\tconst configDir = path.dirname(configPath ?? \"wrangler.toml\");\n\tif (rawMain !== undefined) {\n\t\tif (typeof rawMain === \"string\") {\n\t\t\tconst directory = path.resolve(configDir);\n\t\t\treturn path.resolve(directory, rawMain);\n\t\t} else {\n\t\t\treturn rawMain;\n\t\t}\n\t} else {\n\t\treturn;\n\t}\n}\n\n/**\n * Validate the `base_dir` field and return the normalized values.\n */\nfunction normalizeAndValidateBaseDirField(\n\tconfigPath: string | undefined,\n\trawDir: string | undefined\n): string | undefined {\n\tconst configDir = path.dirname(configPath ?? \"wrangler.toml\");\n\tif (rawDir !== undefined) {\n\t\tif (typeof rawDir === \"string\") {\n\t\t\tconst directory = path.resolve(configDir);\n\t\t\treturn path.resolve(directory, rawDir);\n\t\t} else {\n\t\t\treturn rawDir;\n\t\t}\n\t} else {\n\t\treturn;\n\t}\n}\n\n/**\n * Validate the `pages_build_output_dir` field and return the normalized values.\n */\nfunction normalizeAndValidatePagesBuildOutputDir(\n\tconfigPath: string | undefined,\n\trawPagesDir: string | undefined\n): string | undefined {\n\tconst configDir = path.dirname(configPath ?? \"wrangler.toml\");\n\tif (rawPagesDir !== undefined) {\n\t\tif (typeof rawPagesDir === \"string\") {\n\t\t\tconst directory = path.resolve(configDir);\n\t\t\treturn path.resolve(directory, rawPagesDir);\n\t\t} else {\n\t\t\treturn rawPagesDir;\n\t\t}\n\t} else {\n\t\treturn;\n\t}\n}\n\n/**\n * Validate the `dev` configuration and return the normalized values.\n */\nfunction normalizeAndValidateDev(\n\tdiagnostics: Diagnostics,\n\trawDev: RawDevConfig,\n\targs: NormalizeAndValidateConfigArgs\n): DevConfig {\n\tassert(typeof args === \"object\" && args !== null && !Array.isArray(args));\n\tconst {\n\t\tlocalProtocol: localProtocolArg,\n\t\tupstreamProtocol: upstreamProtocolArg,\n\t\tremote: remoteArg,\n\t\tenableContainers: enableContainersArg,\n\t\tgenerateTypes: generateTypesArg,\n\t} = args;\n\tassert(\n\t\tlocalProtocolArg === undefined ||\n\t\t\tlocalProtocolArg === \"http\" ||\n\t\t\tlocalProtocolArg === \"https\"\n\t);\n\tassert(\n\t\tupstreamProtocolArg === undefined ||\n\t\t\tupstreamProtocolArg === \"http\" ||\n\t\t\tupstreamProtocolArg === \"https\"\n\t);\n\tassert(remoteArg === undefined || typeof remoteArg === \"boolean\");\n\tassert(\n\t\tenableContainersArg === undefined ||\n\t\t\ttypeof enableContainersArg === \"boolean\"\n\t);\n\tassert(\n\t\tgenerateTypesArg === undefined || typeof generateTypesArg === \"boolean\"\n\t);\n\tconst {\n\t\t// On Windows, when specifying `localhost` as the socket hostname, `workerd`\n\t\t// will only listen on the IPv4 loopback `127.0.0.1`, not the IPv6 `::1`:\n\t\t// https://github.com/cloudflare/workerd/issues/1408\n\t\t// On Node 17+, `fetch()` will only try to fetch the IPv6 address.\n\t\t// For now, on Windows, we default to listening on IPv4 only and using\n\t\t// `127.0.0.1` when sending control requests to `workerd` (e.g. with the\n\t\t// `ProxyController`).\n\t\tip = process.platform === \"win32\" ? \"127.0.0.1\" : \"localhost\",\n\t\tport,\n\t\tinspector_port,\n\t\tinspector_ip,\n\t\tlocal_protocol = localProtocolArg ?? \"http\",\n\t\t// In remote mode upstream_protocol must be https, otherwise it defaults to local_protocol.\n\t\tupstream_protocol = (upstreamProtocolArg ?? remoteArg)\n\t\t\t? \"https\"\n\t\t\t: local_protocol,\n\t\thost,\n\t\tenable_containers = enableContainersArg ?? true,\n\t\tcontainer_engine,\n\t\tgenerate_types = generateTypesArg ?? false,\n\t\t...rest\n\t} = rawDev;\n\tvalidateAdditionalProperties(diagnostics, \"dev\", Object.keys(rest), []);\n\n\tvalidateOptionalProperty(diagnostics, \"dev\", \"ip\", ip, \"string\");\n\tvalidateOptionalProperty(diagnostics, \"dev\", \"port\", port, \"number\");\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"inspector_port\",\n\t\tinspector_port,\n\t\t\"number\"\n\t);\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"inspector_ip\",\n\t\tinspector_ip,\n\t\t\"string\"\n\t);\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"local_protocol\",\n\t\tlocal_protocol,\n\t\t\"string\",\n\t\t[\"http\", \"https\"]\n\t);\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"upstream_protocol\",\n\t\tupstream_protocol,\n\t\t\"string\",\n\t\t[\"http\", \"https\"]\n\t);\n\tvalidateOptionalProperty(diagnostics, \"dev\", \"host\", host, \"string\");\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"enable_containers\",\n\t\tenable_containers,\n\t\t\"boolean\"\n\t);\n\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"container_engine\",\n\t\tcontainer_engine,\n\t\t\"string\"\n\t);\n\n\tvalidateOptionalProperty(\n\t\tdiagnostics,\n\t\t\"dev\",\n\t\t\"generate_types\",\n\t\tgenerate_types,\n\t\t\"boolean\"\n\t);\n\n\treturn {\n\t\tip,\n\t\tport,\n\t\tinspector_port,\n\t\tinspector_ip,\n\t\tlocal_protocol,\n\t\tupstream_protocol,\n\t\thost,\n\t\tenable_containers,\n\t\tcontainer_engine,\n\t\tgenerate_types,\n\t};\n}\n\nfunction normalizeAndValidateAssets(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment\n): Config[\"assets\"] {\n\treturn inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"assets\",\n\t\tvalidateAssetsConfig,\n\t\tundefined\n\t);\n}\n\n/**\n * Validate the `site` configuration and return the normalized values.\n */\nfunction normalizeAndValidateSite(\n\tdiagnostics: Diagnostics,\n\tconfigPath: string | undefined,\n\trawConfig: RawConfig,\n\tmainEntryPoint: string | undefined\n): Config[\"site\"] {\n\tif (rawConfig?.site !== undefined) {\n\t\tconst { bucket, include = [], exclude = [], ...rest } = rawConfig.site;\n\n\t\tvalidateAdditionalProperties(diagnostics, \"site\", Object.keys(rest), [\n\t\t\t\"entry-point\",\n\t\t]);\n\t\tvalidateRequiredProperty(diagnostics, \"site\", \"bucket\", bucket, \"string\");\n\t\tvalidateTypedArray(diagnostics, \"sites.include\", include, \"string\");\n\t\tvalidateTypedArray(diagnostics, \"sites.exclude\", exclude, \"string\");\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated -- this code handles the deprecated site.entry-point field\n\t\tconst legacySiteEntryPoint = rawConfig.site[\"entry-point\"];\n\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\t\"site\",\n\t\t\t\"entry-point\",\n\t\t\tlegacySiteEntryPoint,\n\t\t\t\"string\"\n\t\t);\n\n\t\tdeprecated(\n\t\t\tdiagnostics,\n\t\t\trawConfig,\n\t\t\t`site.entry-point`,\n\t\t\t`Delete the \\`site.entry-point\\` field, then add the top level \\`main\\` field to your configuration file:\\n` +\n\t\t\t\t`\\`\\`\\`\\n` +\n\t\t\t\t`main = \"${path.join(\n\t\t\t\t\tString(legacySiteEntryPoint) || \"workers-site\",\n\t\t\t\t\tpath.extname(String(legacySiteEntryPoint) || \"workers-site\")\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: \"index.js\"\n\t\t\t\t)}\"\\n` +\n\t\t\t\t`\\`\\`\\``,\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\t\"warning\"\n\t\t);\n\n\t\tlet siteEntryPoint = legacySiteEntryPoint;\n\n\t\tif (!mainEntryPoint && !siteEntryPoint) {\n\t\t\t// this means that we're defaulting to \"workers-site\"\n\t\t\t// so let's add the deprecation warning\n\t\t\tdiagnostics.warnings.push(\n\t\t\t\t`Because you've defined a [site] configuration, we're defaulting to \"workers-site\" for the deprecated \\`site.entry-point\\`field.\\n` +\n\t\t\t\t\t`Add the top level \\`main\\` field to your configuration file:\\n` +\n\t\t\t\t\t`\\`\\`\\`\\n` +\n\t\t\t\t\t`main = \"workers-site/index.js\"\\n` +\n\t\t\t\t\t`\\`\\`\\``\n\t\t\t);\n\t\t\tsiteEntryPoint = \"workers-site\";\n\t\t} else if (mainEntryPoint && siteEntryPoint) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`Don't define both the \\`main\\` and \\`site.entry-point\\` fields in your configuration.\\n` +\n\t\t\t\t\t`They serve the same purpose: to point to the entry-point of your worker.\\n` +\n\t\t\t\t\t`Delete the deprecated \\`site.entry-point\\` field from your config.`\n\t\t\t);\n\t\t}\n\n\t\tif (configPath && siteEntryPoint) {\n\t\t\t// rewrite the path to be relative to the working directory\n\t\t\tsiteEntryPoint = path.relative(\n\t\t\t\tprocess.cwd(),\n\t\t\t\tpath.join(path.dirname(configPath), siteEntryPoint)\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tbucket,\n\t\t\t\"entry-point\": siteEntryPoint,\n\t\t\tinclude,\n\t\t\texclude,\n\t\t};\n\t}\n\treturn undefined;\n}\n\n/**\n * Validate the `alias` configuration\n */\nfunction normalizeAndValidateAliases(\n\tdiagnostics: Diagnostics,\n\tconfigPath: string | undefined,\n\trawConfig: RawConfig\n): Config[\"alias\"] {\n\tif (rawConfig?.alias === undefined) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\t[\"string\", \"boolean\", \"number\"].includes(typeof rawConfig?.alias) ||\n\t\ttypeof rawConfig?.alias !== \"object\"\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected alias to be an object, but got ${typeof rawConfig?.alias}`\n\t\t);\n\t\treturn undefined;\n\t}\n\n\tlet isValid = true;\n\tfor (const [key, value] of Object.entries(rawConfig?.alias)) {\n\t\tif (typeof value !== \"string\") {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`Expected alias[\"${key}\"] to be a string, but got ${typeof value}`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\t}\n\tif (isValid) {\n\t\treturn rawConfig.alias;\n\t}\n\n\treturn;\n}\n\n/**\n * Map the paths of the `wasm_modules`, `text_blobs` or `data_blobs` configuration to be relative to the current working directory.\n */\nfunction normalizeAndValidateModulePaths(\n\tdiagnostics: Diagnostics,\n\tconfigPath: string | undefined,\n\tfield: \"wasm_modules\" | \"text_blobs\" | \"data_blobs\",\n\trawMapping: Record<string, string> | undefined\n): Record<string, string> | undefined {\n\tif (rawMapping === undefined) {\n\t\treturn undefined;\n\t}\n\tconst mapping: Record<string, string> = {};\n\t// Rewrite paths to be relative to the cwd, rather than the config path.\n\tfor (const [name, filePath] of Object.entries(rawMapping)) {\n\t\tif (isString(diagnostics, `${field}['${name}']`, filePath, undefined)) {\n\t\t\tif (configPath) {\n\t\t\t\tmapping[name] = configPath\n\t\t\t\t\t? path.relative(\n\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\tpath.join(path.dirname(configPath), filePath)\n\t\t\t\t\t\t)\n\t\t\t\t\t: filePath;\n\t\t\t}\n\t\t}\n\t}\n\treturn mapping;\n}\n\n/**\n * Check whether a value has the shape of a route, which can be a string\n * or an object that looks like {pattern: string, zone_id: string }\n */\nfunction isValidRouteValue(item: unknown): boolean {\n\tif (!item) {\n\t\treturn false;\n\t}\n\tif (typeof item === \"string\") {\n\t\treturn true;\n\t}\n\tif (typeof item === \"object\") {\n\t\tif (!hasProperty(item, \"pattern\") || typeof item.pattern !== \"string\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst hasZoneId =\n\t\t\thasProperty(item, \"zone_id\") && typeof item.zone_id === \"string\";\n\t\tconst hasZoneName =\n\t\t\thasProperty(item, \"zone_name\") && typeof item.zone_name === \"string\";\n\t\tconst hasCustomDomainFlag =\n\t\t\thasProperty(item, \"custom_domain\") &&\n\t\t\ttypeof item.custom_domain === \"boolean\";\n\t\tconst hasEnabled =\n\t\t\thasProperty(item, \"enabled\") && typeof item.enabled === \"boolean\";\n\t\tconst hasPreviewsEnabled =\n\t\t\thasProperty(item, \"previews_enabled\") &&\n\t\t\ttypeof item.previews_enabled === \"boolean\";\n\n\t\tconst recognizedKeys = [\n\t\t\thasZoneId,\n\t\t\thasZoneName,\n\t\t\thasCustomDomainFlag,\n\t\t\thasEnabled,\n\t\t\thasPreviewsEnabled,\n\t\t].filter(Boolean).length;\n\t\tconst otherKeys = Object.keys(item).length - 1; // minus one to subtract \"pattern\"\n\n\t\t// All keys must be recognized\n\t\tif (recognizedKeys !== otherKeys) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// zone_id and zone_name are mutually exclusive\n\t\tif (hasZoneId && hasZoneName) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// enabled and previews_enabled are only valid on custom domain routes\n\t\tif ((hasEnabled || hasPreviewsEnabled) && !hasCustomDomainFlag) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must have at least one of: zone_id, zone_name, or custom_domain\n\t\tif (hasZoneId || hasZoneName || hasCustomDomainFlag) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * If account_id has been passed as an empty string, normalise it to undefined.\n * This is to workaround older Wrangler v1-era templates that have account_id = '',\n * which isn't a valid value anyway\n */\nfunction mutateEmptyStringAccountIDValue(\n\tdiagnostics: Diagnostics,\n\trawEnv: RawEnvironment\n) {\n\tif (rawEnv.account_id === \"\") {\n\t\tdiagnostics.warnings.push(\n\t\t\t`The \"account_id\" field in your configuration is an empty string and will be ignored.\\n` +\n\t\t\t\t`Please remove the \"account_id\" field from your configuration.`\n\t\t);\n\t\trawEnv.account_id = undefined;\n\t}\n\treturn rawEnv;\n}\n\n/**\n * Normalize empty string to `undefined` by mutating rawEnv.route value.\n * As part of backward compatibility with Wrangler v1 converting empty string to `undefined`\n */\nfunction mutateEmptyStringRouteValue(\n\tdiagnostics: Diagnostics,\n\trawEnv: RawEnvironment\n): RawEnvironment {\n\tif (rawEnv[\"route\"] === \"\") {\n\t\tdiagnostics.warnings.push(\n\t\t\t`The \"route\" field in your configuration is an empty string and will be ignored.\\n` +\n\t\t\t\t`Please remove the \"route\" field from your configuration.`\n\t\t);\n\t\trawEnv[\"route\"] = undefined;\n\t}\n\n\treturn rawEnv;\n}\n\n/**\n * Validate that the field is a route.\n */\nconst isRoute: ValidatorFn = (diagnostics, field, value) => {\n\tif (value !== undefined && !isValidRouteValue(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be either a string, or an object with shape { pattern, custom_domain, zone_id | zone_name, enabled, previews_enabled }, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n\treturn true;\n};\n\n/**\n * Validate that the field is an array of routes.\n */\nconst isRouteArray: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\tif (!Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be an array but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\tconst invalidRoutes = [];\n\tfor (const item of value) {\n\t\tif (!isValidRouteValue(item)) {\n\t\t\tinvalidRoutes.push(item);\n\t\t}\n\t}\n\tif (invalidRoutes.length > 0) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be an array of either strings or objects with the shape { pattern, custom_domain, zone_id | zone_name, enabled, previews_enabled }, but these weren't valid: ${JSON.stringify(\n\t\t\t\tinvalidRoutes,\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)}.`\n\t\t);\n\t}\n\treturn invalidRoutes.length === 0;\n};\n\nfunction normalizeAndValidateRoute(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment\n): Config[\"route\"] {\n\treturn inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\tmutateEmptyStringRouteValue(diagnostics, rawEnv),\n\t\t\"route\",\n\t\tisRoute,\n\t\tundefined\n\t);\n}\n\nfunction validateRoutes(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment,\n\tenvName?: string\n): Config[\"routes\"] {\n\tconst result = inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"routes\",\n\t\tall(isRouteArray, isMutuallyExclusiveWith(rawEnv, \"route\")),\n\t\tundefined\n\t);\n\n\tif (\n\t\ttopLevelEnv !== undefined &&\n\t\tenvName !== undefined &&\n\t\trawEnv.routes === undefined\n\t) {\n\t\tconst customDomainRoutes = topLevelEnv.routes?.filter(\n\t\t\t(r): r is CustomDomainRoute =>\n\t\t\t\ttypeof r === \"object\" && r !== null && r.custom_domain === true\n\t\t);\n\t\tif (customDomainRoutes && customDomainRoutes.length > 0) {\n\t\t\tconst customDomains = customDomainRoutes.map((r) => r.pattern).join(\", \");\n\t\t\tdiagnostics.warnings.push(\n\t\t\t\t`The \"env.${envName}\" environment inherits the top-level \\`routes\\` configuration, which includes the custom domain(s): ${customDomains}. Deploying this environment will reassign these custom domains away from the top-level Worker. Add \\`\"routes\": []\\` to \"env.${envName}\" to prevent inheritance, or copy the route configuration from the top level to hide this warning.`\n\t\t\t);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction normalizeAndValidatePlacement(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment\n): Config[\"placement\"] {\n\tif (rawEnv.placement) {\n\t\tconst placement = rawEnv.placement as Record<string, unknown>;\n\n\t\t// Detect which format is being used\n\t\tconst hasHint = \"hint\" in placement;\n\t\tconst hasRegion = \"region\" in placement;\n\t\tconst hasHost = \"host\" in placement;\n\t\tconst hasHostname = \"hostname\" in placement;\n\t\tconst hasTargetedFields = hasRegion || hasHost || hasHostname;\n\n\t\t// Validate that formats aren't mixed\n\t\tif (hasHint && hasTargetedFields) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"placement\" cannot have both \"hint\" (smart format) and \"region\"/\"host\"/\"hostname\" (targeted format) fields`\n\t\t\t);\n\t\t\treturn inheritable(\n\t\t\t\tdiagnostics,\n\t\t\t\ttopLevelEnv,\n\t\t\t\trawEnv,\n\t\t\t\t\"placement\",\n\t\t\t\t() => true,\n\t\t\t\tundefined\n\t\t\t);\n\t\t}\n\n\t\t// Validate old format (with hint)\n\t\tif (hasHint) {\n\t\t\tvalidateRequiredProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"placement\",\n\t\t\t\t\"mode\",\n\t\t\t\tplacement.mode,\n\t\t\t\t\"string\",\n\t\t\t\t[\"off\", \"smart\"]\n\t\t\t);\n\n\t\t\tconst mode = placement.mode as string;\n\t\t\tconst hint = placement.hint;\n\n\t\t\t// Hint must be a string (if provided)\n\t\t\tif (hint !== undefined && typeof hint !== \"string\") {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"placement.hint\" must be a string when \"placement.mode\" is \"${mode}\"`\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (hint && mode !== \"smart\") {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"placement.hint\" can only be set when \"placement.mode\" is \"smart\"`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// Validate new format (with region/host/hostname)\n\t\telse if (hasTargetedFields) {\n\t\t\t// Mode is optional for new format, but if present must be \"off\" or \"targeted\"\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"placement\",\n\t\t\t\t\"mode\",\n\t\t\t\tplacement.mode,\n\t\t\t\t\"string\",\n\t\t\t\t[\"off\", \"targeted\"]\n\t\t\t);\n\n\t\t\t// Validate that region/host/hostname are strings if present\n\t\t\tif (hasRegion) {\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\"placement\",\n\t\t\t\t\t\"region\",\n\t\t\t\t\tplacement.region,\n\t\t\t\t\t\"string\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (hasHost) {\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\"placement\",\n\t\t\t\t\t\"host\",\n\t\t\t\t\tplacement.host,\n\t\t\t\t\t\"string\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (hasHostname) {\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\"placement\",\n\t\t\t\t\t\"hostname\",\n\t\t\t\t\tplacement.hostname,\n\t\t\t\t\t\"string\"\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Validate that region/host/hostname are mutually exclusive\n\t\t\tconst fieldsPresent = [hasRegion, hasHost, hasHostname].filter(Boolean);\n\t\t\tif (fieldsPresent.length > 1) {\n\t\t\t\tconst presentFields = [];\n\t\t\t\tif (hasRegion) {\n\t\t\t\t\tpresentFields.push(\"region\");\n\t\t\t\t}\n\t\t\t\tif (hasHost) {\n\t\t\t\t\tpresentFields.push(\"host\");\n\t\t\t\t}\n\t\t\t\tif (hasHostname) {\n\t\t\t\t\tpresentFields.push(\"hostname\");\n\t\t\t\t}\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"placement\" fields ${presentFields.map((f) => `\"${f}\"`).join(\", \")} are mutually exclusive. Only one can be specified.`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// Just mode, no hint or new format fields\n\t\telse {\n\t\t\tvalidateRequiredProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"placement\",\n\t\t\t\t\"mode\",\n\t\t\t\tplacement.mode,\n\t\t\t\t\"string\",\n\t\t\t\t[\"off\", \"smart\", \"targeted\"]\n\t\t\t);\n\t\t}\n\t}\n\n\treturn inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"placement\",\n\t\t() => true,\n\t\tundefined\n\t);\n}\n\nfunction validateTailConsumer(\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: TailConsumer\n) {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\n\tisValid =\n\t\tisValid &&\n\t\tvalidateRequiredProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"service\",\n\t\t\tvalue.service,\n\t\t\t\"string\"\n\t\t);\n\tisValid =\n\t\tisValid &&\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"environment\",\n\t\t\tvalue.environment,\n\t\t\t\"string\"\n\t\t);\n\n\treturn isValid;\n}\n\nconst validateTailConsumers: ValidatorFn = (diagnostics, field, value) => {\n\tif (!value) {\n\t\treturn true;\n\t}\n\tif (!Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be an array but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\tfor (let i = 0; i < value.length; i++) {\n\t\tisValid =\n\t\t\tvalidateTailConsumer(diagnostics, `${field}[${i}]`, value[i]) && isValid;\n\t}\n\n\treturn isValid;\n};\n\n/**\n * Streaming tail consumers should match:\n * {\n * service: string,\n * entrypoint?: string\n * }\n */\nfunction validateStreamingTailConsumer(\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: StreamingTailConsumer\n) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn validateRequiredProperty(\n\t\tdiagnostics,\n\t\tfield,\n\t\t\"service\",\n\t\tvalue.service,\n\t\t\"string\"\n\t);\n}\n\nconst validateStreamingTailConsumers: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (!value) {\n\t\treturn true;\n\t}\n\tif (!Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be an array but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\tfor (let i = 0; i < value.length; i++) {\n\t\tisValid =\n\t\t\tvalidateStreamingTailConsumer(diagnostics, `${field}[${i}]`, value[i]) &&\n\t\t\tisValid;\n\t}\n\n\treturn isValid;\n};\n\n/**\n * Validate top-level environment configuration and return the normalized values.\n */\nfunction normalizeAndValidateEnvironment(\n\tdiagnostics: Diagnostics,\n\tconfigPath: string | undefined,\n\ttopLevelEnv: RawConfig,\n\tisDispatchNamespace: boolean,\n\tpreserveOriginalMain: boolean\n): Environment;\n/**\n * Validate the named environment configuration and return the normalized values.\n */\nfunction normalizeAndValidateEnvironment(\n\tdiagnostics: Diagnostics,\n\tconfigPath: string | undefined,\n\trawEnv: RawEnvironment,\n\tisDispatchNamespace: boolean,\n\tpreserveOriginalMain: boolean,\n\tenvName: string,\n\ttopLevelEnv: Environment,\n\trawConfig: RawConfig\n): Environment;\nfunction normalizeAndValidateEnvironment(\n\tdiagnostics: Diagnostics,\n\tconfigPath: string | undefined,\n\trawEnv: RawEnvironment | RawConfig,\n\tisDispatchNamespace: boolean,\n\tpreserveOriginalMain: boolean,\n\tenvName = \"top level\",\n\ttopLevelEnv?: Environment | undefined,\n\trawConfig?: RawConfig | undefined\n): Environment {\n\tdeprecated(\n\t\tdiagnostics,\n\t\trawEnv,\n\t\t// @ts-expect-error Removed from the config type\n\t\t\"node_compat\",\n\t\t`The \"node_compat\" field is no longer supported as of Wrangler v4. Instead, use the \\`nodejs_compat\\` compatibility flag. This includes the functionality from legacy \\`node_compat\\` polyfills and natively implemented Node.js APIs. See https://developers.cloudflare.com/workers/runtime-apis/nodejs for more information.`,\n\t\ttrue,\n\t\t\"Removed\",\n\t\t\"error\"\n\t);\n\n\tif (topLevelEnv === undefined || rawConfig?.unsafe === undefined) {\n\t\texperimental(diagnostics, rawEnv, \"unsafe\");\n\t}\n\n\tconst route = normalizeAndValidateRoute(diagnostics, topLevelEnv, rawEnv);\n\n\tconst account_id = inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\tmutateEmptyStringAccountIDValue(diagnostics, rawEnv),\n\t\t\"account_id\",\n\t\tisString,\n\t\tundefined\n\t);\n\n\tconst routes = validateRoutes(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\ttopLevelEnv === undefined ? undefined : envName\n\t);\n\n\tconst workers_dev = inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"workers_dev\",\n\t\tisBoolean,\n\t\tundefined\n\t);\n\n\tconst preview_urls = inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"preview_urls\",\n\t\tisBoolean,\n\t\tundefined\n\t);\n\n\tconst build = normalizeAndValidateBuild(\n\t\tdiagnostics,\n\t\trawEnv,\n\t\trawEnv.build ?? topLevelEnv?.build ?? {},\n\t\tconfigPath\n\t);\n\n\tconst environment: Environment = {\n\t\t// Inherited fields\n\t\taccount_id,\n\t\tcompatibility_date: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"compatibility_date\",\n\t\t\tvalidateCompatibilityDate,\n\t\t\tundefined\n\t\t),\n\t\tcompatibility_flags: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"compatibility_flags\",\n\t\t\tisStringArray,\n\t\t\t[]\n\t\t),\n\t\tjsx_factory: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"jsx_factory\",\n\t\t\tisString,\n\t\t\t\"React.createElement\"\n\t\t),\n\t\tjsx_fragment: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"jsx_fragment\",\n\t\t\tisString,\n\t\t\t\"React.Fragment\"\n\t\t),\n\t\ttsconfig: validateAndNormalizeTsconfig(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\tconfigPath\n\t\t),\n\t\trules: validateAndNormalizeRules(diagnostics, topLevelEnv, rawEnv, envName),\n\t\tname: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"name\",\n\t\t\tisDispatchNamespace ? isString : isValidName,\n\t\t\tundefined,\n\t\t\tappendEnvName(envName)\n\t\t),\n\t\tmain: preserveOriginalMain\n\t\t\t? inheritable(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\ttopLevelEnv,\n\t\t\t\t\trawEnv,\n\t\t\t\t\t\"main\",\n\t\t\t\t\tisString,\n\t\t\t\t\tundefined\n\t\t\t\t)\n\t\t\t: normalizeAndValidateMainField(\n\t\t\t\t\tconfigPath,\n\t\t\t\t\tinheritable(\n\t\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\ttopLevelEnv,\n\t\t\t\t\t\trawEnv,\n\t\t\t\t\t\t\"main\",\n\t\t\t\t\t\tisString,\n\t\t\t\t\t\tundefined\n\t\t\t\t\t)\n\t\t\t\t),\n\t\tfind_additional_modules: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"find_additional_modules\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tpreserve_file_names: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"preserve_file_names\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tbase_dir: normalizeAndValidateBaseDirField(\n\t\t\tconfigPath,\n\t\t\tinheritable(\n\t\t\t\tdiagnostics,\n\t\t\t\ttopLevelEnv,\n\t\t\t\trawEnv,\n\t\t\t\t\"base_dir\",\n\t\t\t\tisString,\n\t\t\t\tundefined\n\t\t\t)\n\t\t),\n\t\troute,\n\t\troutes,\n\t\ttriggers: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"triggers\",\n\t\t\tvalidateTriggers,\n\t\t\t{ crons: undefined }\n\t\t),\n\t\tassets: normalizeAndValidateAssets(diagnostics, topLevelEnv, rawEnv),\n\t\tlimits: normalizeAndValidateLimits(diagnostics, topLevelEnv, rawEnv),\n\t\tplacement: normalizeAndValidatePlacement(diagnostics, topLevelEnv, rawEnv),\n\t\tbuild,\n\t\tworkers_dev,\n\t\tpreview_urls,\n\t\t// Not inherited fields\n\t\tvars: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"vars\",\n\t\t\tvalidateVars(envName),\n\t\t\t{}\n\t\t),\n\t\tsecrets: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"secrets\",\n\t\t\tvalidateSecrets(envName),\n\t\t\tundefined\n\t\t),\n\t\tdefine: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"define\",\n\t\t\tvalidateDefines(envName),\n\t\t\t{}\n\t\t),\n\t\tdurable_objects: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"durable_objects\",\n\t\t\tvalidateBindingsProperty(envName, validateDurableObjectBinding),\n\t\t\t{\n\t\t\t\tbindings: [],\n\t\t\t}\n\t\t),\n\t\tworkflows: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"workflows\",\n\t\t\tall(\n\t\t\t\tvalidateBindingArray(envName, validateWorkflowBinding),\n\t\t\t\tvalidateUniqueNameProperty\n\t\t\t),\n\t\t\t[]\n\t\t),\n\t\tmigrations: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"migrations\",\n\t\t\tvalidateMigrations,\n\t\t\t[]\n\t\t),\n\t\texports: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"exports\",\n\t\t\tvalidateExports,\n\t\t\t{}\n\t\t),\n\t\tkv_namespaces: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"kv_namespaces\",\n\t\t\tvalidateBindingArray(envName, validateKVBinding),\n\t\t\t[]\n\t\t),\n\t\tcloudchamber: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"cloudchamber\",\n\t\t\tvalidateCloudchamberConfig,\n\t\t\t{}\n\t\t),\n\t\tcontainers: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"containers\",\n\t\t\t// `name` is inheritable, so a named environment that doesn't redeclare it\n\t\t\t// still runs under the top level Worker name — fall back to it so the\n\t\t\t// generated container name isn't built from `undefined`.\n\t\t\tvalidateContainerApp(envName, rawEnv.name ?? rawConfig?.name, configPath),\n\t\t\tundefined\n\t\t),\n\t\tsend_email: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"send_email\",\n\t\t\tvalidateBindingArray(envName, validateSendEmailBinding),\n\t\t\t[]\n\t\t),\n\t\tqueues: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"queues\",\n\t\t\tvalidateQueues(envName),\n\t\t\t{ producers: [], consumers: [] }\n\t\t),\n\t\tconnect: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"connect\",\n\t\t\tvalidateConnectHandlers(envName),\n\t\t\t[]\n\t\t),\n\t\tr2_buckets: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"r2_buckets\",\n\t\t\tvalidateBindingArray(envName, validateR2Binding),\n\t\t\t[]\n\t\t),\n\t\td1_databases: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"d1_databases\",\n\t\t\tvalidateBindingArray(envName, validateD1Binding),\n\t\t\t[]\n\t\t),\n\t\tvectorize: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"vectorize\",\n\t\t\tvalidateBindingArray(envName, validateVectorizeBinding),\n\t\t\t[]\n\t\t),\n\t\tai_search_namespaces: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"ai_search_namespaces\",\n\t\t\tvalidateBindingArray(envName, validateAISearchNamespaceBinding),\n\t\t\t[]\n\t\t),\n\t\tai_search: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"ai_search\",\n\t\t\tvalidateBindingArray(envName, validateAISearchBinding),\n\t\t\t[]\n\t\t),\n\t\twebsearch: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"websearch\",\n\t\t\tvalidateNamedSimpleBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\tagent_memory: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"agent_memory\",\n\t\t\tvalidateBindingArray(envName, validateAgentMemoryBinding),\n\t\t\t[]\n\t\t),\n\t\thyperdrive: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"hyperdrive\",\n\t\t\tvalidateBindingArray(envName, validateHyperdriveBinding),\n\t\t\t[]\n\t\t),\n\t\tservices: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"services\",\n\t\t\tvalidateBindingArray(envName, validateServiceBinding),\n\t\t\t[]\n\t\t),\n\t\tanalytics_engine_datasets: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"analytics_engine_datasets\",\n\t\t\tvalidateBindingArray(envName, validateAnalyticsEngineBinding),\n\t\t\t[]\n\t\t),\n\t\tdispatch_namespaces: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"dispatch_namespaces\",\n\t\t\tvalidateBindingArray(envName, validateWorkerNamespaceBinding),\n\t\t\t[]\n\t\t),\n\t\tmtls_certificates: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"mtls_certificates\",\n\t\t\tvalidateBindingArray(envName, validateMTlsCertificateBinding),\n\t\t\t[]\n\t\t),\n\t\ttail_consumers: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"tail_consumers\",\n\t\t\tvalidateTailConsumers,\n\t\t\tundefined\n\t\t),\n\t\tstreaming_tail_consumers: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"streaming_tail_consumers\",\n\t\t\tvalidateStreamingTailConsumers,\n\t\t\tundefined\n\t\t),\n\t\tunsafe: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"unsafe\",\n\t\t\tvalidateUnsafeSettings(envName),\n\t\t\t{}\n\t\t),\n\t\tbrowser: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"browser\",\n\t\t\tvalidateNamedSimpleBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\tai: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"ai\",\n\t\t\tvalidateAIBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\timages: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"images\",\n\t\t\tvalidateNamedSimpleBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\tstream: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"stream\",\n\t\t\tvalidateNamedSimpleBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\tmedia: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"media\",\n\t\t\tvalidateNamedSimpleBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\tpipelines: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"pipelines\",\n\t\t\tvalidateBindingArray(envName, validatePipelineBinding),\n\t\t\t[]\n\t\t),\n\t\tsecrets_store_secrets: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"secrets_store_secrets\",\n\t\t\tvalidateBindingArray(envName, validateSecretsStoreSecretBinding),\n\t\t\t[]\n\t\t),\n\t\tartifacts: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"artifacts\",\n\t\t\tvalidateBindingArray(envName, validateArtifactsBinding),\n\t\t\t[]\n\t\t),\n\t\tunsafe_hello_world: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"unsafe_hello_world\",\n\t\t\tvalidateBindingArray(envName, validateHelloWorldBinding),\n\t\t\t[]\n\t\t),\n\t\tflagship: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"flagship\",\n\t\t\tvalidateBindingArray(envName, validateFlagshipBinding),\n\t\t\t[]\n\t\t),\n\t\tworker_loaders: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"worker_loaders\",\n\t\t\tvalidateBindingArray(envName, validateWorkerLoaderBinding),\n\t\t\t[]\n\t\t),\n\t\tratelimits: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"ratelimits\",\n\t\t\tvalidateBindingArray(envName, validateRateLimitBinding),\n\t\t\t[]\n\t\t),\n\t\tvpc_services: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"vpc_services\",\n\t\t\tvalidateBindingArray(envName, validateVpcServiceBinding),\n\t\t\t[]\n\t\t),\n\t\tvpc_networks: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"vpc_networks\",\n\t\t\tvalidateBindingArray(envName, validateVpcNetworkBinding),\n\t\t\t[]\n\t\t),\n\t\tversion_metadata: notInheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawConfig,\n\t\t\trawEnv,\n\t\t\tenvName,\n\t\t\t\"version_metadata\",\n\t\t\tvalidateVersionMetadataBinding(envName),\n\t\t\tundefined\n\t\t),\n\t\tlogfwdr: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"logfwdr\",\n\t\t\tvalidateCflogfwdrObject(envName),\n\t\t\t{\n\t\t\t\tbindings: [],\n\t\t\t}\n\t\t),\n\t\tno_bundle: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"no_bundle\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tminify: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"minify\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tkeep_names: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"keep_names\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tfirst_party_worker: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"first_party_worker\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tlogpush: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"logpush\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tupload_source_maps: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"upload_source_maps\",\n\t\t\tisBoolean,\n\t\t\tundefined\n\t\t),\n\t\tobservability: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"observability\",\n\t\t\tvalidateObservability,\n\t\t\tundefined\n\t\t),\n\t\taccess: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"access\",\n\t\t\tvalidateAccess,\n\t\t\tundefined\n\t\t),\n\t\tcache: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"cache\",\n\t\t\tvalidateCache,\n\t\t\tundefined\n\t\t),\n\t\tcompliance_region: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"compliance_region\",\n\t\t\tisOneOf(\"public\", \"fedramp_high\"),\n\t\t\tundefined\n\t\t),\n\t\tpython_modules: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"python_modules\",\n\t\t\tvalidatePythonModules,\n\t\t\t{ exclude: [\"**/*.pyc\"] }\n\t\t),\n\t\tpreviews: inheritable(\n\t\t\tdiagnostics,\n\t\t\ttopLevelEnv,\n\t\t\trawEnv,\n\t\t\t\"previews\",\n\t\t\tvalidatePreviewsConfig(envName, configPath),\n\t\t\tundefined\n\t\t),\n\t};\n\n\twarnIfDurableObjectsHaveNoLifecycleConfig(\n\t\tdiagnostics,\n\t\tenvironment.durable_objects,\n\t\tenvironment.migrations,\n\t\tenvironment.exports,\n\t\tconfigPath\n\t);\n\n\terrorIfMigrationsAndExportsBothSet(\n\t\tdiagnostics,\n\t\tenvironment.migrations,\n\t\tenvironment.exports\n\t);\n\n\t// `exports` is inherited by named environments but `containers` is not, so the\n\t// idiomatic multi-environment layout declares `exports` once at the top level\n\t// and repeats `containers` in every environment. Both passes then see only one\n\t// half of the link and must not cross-check it: on a named environment pass\n\t// the top level holds the containers, and on the top level pass the named\n\t// environments do.\n\tconst containersDeclaredElsewhere =\n\t\trawConfig !== undefined\n\t\t\t? rawConfig.containers !== undefined\n\t\t\t: Object.values(\"env\" in rawEnv ? (rawEnv.env ?? {}) : {}).some(\n\t\t\t\t\t(rawNamedEnv) => rawNamedEnv?.containers !== undefined\n\t\t\t\t);\n\n\tvalidateContainerExportLinks(\n\t\tdiagnostics,\n\t\tenvironment.containers,\n\t\tenvironment.exports,\n\t\tcontainersDeclaredElsewhere\n\t);\n\n\t// top level 'rawEnv' includes inheritable keys and is validated elsewhere\n\tif (envName !== \"top level\") {\n\t\tvalidateAdditionalProperties(\n\t\t\tdiagnostics,\n\t\t\t\"env.\" + envName,\n\t\t\tObject.keys(rawEnv),\n\t\t\tObject.keys(environment)\n\t\t);\n\t}\n\treturn environment;\n}\n\nfunction validateAndNormalizeTsconfig(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment,\n\tconfigPath: string | undefined\n) {\n\tconst tsconfig = inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"tsconfig\",\n\t\tisString,\n\t\tundefined\n\t);\n\n\treturn configPath && tsconfig\n\t\t? path.relative(\n\t\t\t\tprocess.cwd(),\n\t\t\t\tpath.join(path.dirname(configPath), tsconfig)\n\t\t\t)\n\t\t: tsconfig;\n}\n\nconst validateAndNormalizeRules = (\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment,\n\tenvName: string\n): Rule[] => {\n\treturn inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"rules\",\n\t\tvalidateRules(envName),\n\t\t[]\n\t);\n};\n\nconst ARTIFACTS_EVENT_TYPE_SET: ReadonlySet<string> = new Set(\n\tARTIFACTS_EVENT_TYPES\n);\n\nconst validateTriggers: ValidatorFn = (\n\tdiagnostics,\n\ttriggersFieldName,\n\ttriggersValue\n) => {\n\tif (triggersValue === undefined || triggersValue === null) {\n\t\treturn true;\n\t}\n\n\tif (typeof triggersValue !== \"object\" || Array.isArray(triggersValue)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${triggersFieldName}\" to be of type object but got ${JSON.stringify(\n\t\t\t\ttriggersValue\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\n\tif (\"crons\" in triggersValue && !Array.isArray(triggersValue.crons)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${triggersFieldName}.crons\" to be of type array, but got ${JSON.stringify(triggersValue)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (\n\t\thasProperty(triggersValue, \"events\") &&\n\t\t!Array.isArray(triggersValue.events)\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${triggersFieldName}.events\" to be of type array, but got ${JSON.stringify(triggersValue)}.`\n\t\t);\n\t\tisValid = false;\n\t} else if (\n\t\thasProperty(triggersValue, \"events\") &&\n\t\tArray.isArray(triggersValue.events)\n\t) {\n\t\tfor (const [eventIndex, event] of triggersValue.events.entries()) {\n\t\t\tconst eventFieldName = `${triggersFieldName}.events[${eventIndex}]`;\n\t\t\tif (typeof event !== \"object\" || event === null || Array.isArray(event)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"${eventFieldName}\" to be of type object, but got ${JSON.stringify(event)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!isRequiredProperty(event, \"type\", \"string\") ||\n\t\t\t\t!ARTIFACTS_EVENT_TYPE_SET.has(event.type)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"${eventFieldName}.type\" to be a supported Artifacts event type, but got ${JSON.stringify(event.type)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\n\t\t\tif (hasProperty(event, \"filter\") && event.filter !== undefined) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof event.filter !== \"object\" ||\n\t\t\t\t\tevent.filter === null ||\n\t\t\t\t\tArray.isArray(event.filter)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`Expected \"${eventFieldName}.filter\" to be of type object, but got ${JSON.stringify(event.filter)}.`\n\t\t\t\t\t);\n\t\t\t\t\tisValid = false;\n\t\t\t\t} else {\n\t\t\t\t\tfor (const [filterName, filterValue] of Object.entries(\n\t\t\t\t\t\tevent.filter\n\t\t\t\t\t)) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(filterName !== \"namespace\" && filterName !== \"repo_name\") ||\n\t\t\t\t\t\t\ttypeof filterValue !== \"string\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t\t`Expected \"${eventFieldName}.filter\" to contain only string \"namespace\" and \"repo_name\" fields, but got ${JSON.stringify(event.filter)}.`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!Array.isArray(event.targets) || event.targets.length === 0) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"${eventFieldName}.targets\" to be a non-empty array, but got ${JSON.stringify(event.targets)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else {\n\t\t\t\tfor (const [targetIndex, target] of event.targets.entries()) {\n\t\t\t\t\tconst targetFieldName = `${eventFieldName}.targets[${targetIndex}]`;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof target !== \"object\" ||\n\t\t\t\t\t\ttarget === null ||\n\t\t\t\t\t\tArray.isArray(target) ||\n\t\t\t\t\t\ttarget.type !== \"workflow\" ||\n\t\t\t\t\t\ttypeof target.workflow_name !== \"string\" ||\n\t\t\t\t\t\ttarget.workflow_name.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`Expected \"${targetFieldName}\" to be a workflow target with a non-empty \"workflow_name\", but got ${JSON.stringify(target)}.`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvalidateAdditionalProperties(\n\t\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\ttargetFieldName,\n\t\t\t\t\t\tObject.keys(target),\n\t\t\t\t\t\t[\"type\", \"workflow_name\"]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\teventFieldName,\n\t\t\t\tObject.keys(event),\n\t\t\t\t[\"type\", \"filter\", \"targets\"]\n\t\t\t);\n\t\t}\n\t}\n\n\tisValid =\n\t\tvalidateAdditionalProperties(\n\t\t\tdiagnostics,\n\t\t\ttriggersFieldName,\n\t\t\tObject.keys(triggersValue),\n\t\t\t[\"crons\", \"events\"]\n\t\t) && isValid;\n\n\treturn isValid;\n};\n\nconst validateRules =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, envValue, config) => {\n\t\tif (!envValue) {\n\t\t\treturn true;\n\t\t}\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\t\tif (!Array.isArray(envValue)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an array but got ${JSON.stringify(\n\t\t\t\t\tenvValue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tfor (let i = 0; i < envValue.length; i++) {\n\t\t\tisValid =\n\t\t\t\tvalidateRule(diagnostics, `${fieldPath}[${i}]`, envValue[i], config) &&\n\t\t\t\tisValid;\n\t\t}\n\t\treturn isValid;\n\t};\n\nconst validateRule: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\t// Rules must have a type string and glob string array, and optionally a fallthrough boolean.\n\tlet isValid = true;\n\tconst rule = value as Rule;\n\n\tif (\n\t\t!isRequiredProperty(rule, \"type\", \"string\", [\n\t\t\t\"ESModule\",\n\t\t\t\"CommonJS\",\n\t\t\t\"CompiledWasm\",\n\t\t\t\"Text\",\n\t\t\t\"Data\",\n\t\t])\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`bindings should have a string \"type\" field, which contains one of \"ESModule\", \"CommonJS\", \"CompiledWasm\", \"Text\", or \"Data\".`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tisValid =\n\t\tvalidateTypedArray(diagnostics, `${field}.globs`, rule.globs, \"string\") &&\n\t\tisValid;\n\n\tif (!isOptionalProperty(rule, \"fallthrough\", \"boolean\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`the field \"fallthrough\", when present, should be a boolean.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nconst validateDefines =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tlet isValid = true;\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tfor (const varName in value) {\n\t\t\t\t// some casting here to appease typescript\n\t\t\t\t// even though the value might not match the type\n\t\t\t\tif (typeof (value as Record<string, string>)[varName] !== \"string\") {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`The field \"${fieldPath}.${varName}\" should be a string but got ${JSON.stringify(\n\t\t\t\t\t\t\t(value as Record<string, string>)[varName]\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (value !== undefined) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\t\tvalue\n\t\t\t\t\t)}.\\n`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t}\n\n\t\tconst configDefines = Object.keys(config?.define ?? {});\n\n\t\t// If there are no top level vars then there is nothing to do here.\n\t\tif (configDefines.length > 0) {\n\t\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\t\tconst configEnvDefines = config === undefined ? [] : Object.keys(value);\n\t\t\t\tconst missingDefines = configDefines.filter(\n\t\t\t\t\t(varName) => !(varName in value)\n\t\t\t\t);\n\n\t\t\t\tif (missingDefines.length > 0) {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`The following define entries exist at the top level, but not on \"${fieldPath}\".\\n` +\n\t\t\t\t\t\t\t`This is probably not what you want, since \"define\" configuration is not inherited by environments.\\n` +\n\t\t\t\t\t\t\t`Please add these entries to \"env.${envName}.define\":\\n` +\n\t\t\t\t\t\t\tmissingDefines.map((varName) => `- ${varName}`).join(\"\\n\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tfor (const varName of configEnvDefines) {\n\t\t\t\t\tif (!configDefines.includes(varName)) {\n\t\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t\t`\"${varName}\" exists on \"env.${envName}\", but not on the top level.\\n` +\n\t\t\t\t\t\t\t\t`This is not what you probably want, since \"define\" configuration within environments can only override existing top level \"define\" configuration\\n` +\n\t\t\t\t\t\t\t\t`Please remove \"${fieldPath}.${varName}\", or add \"define.${varName}\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn isValid;\n\t};\n\nconst validateVars =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tlet isValid = true;\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\t// Validate var values if vars is defined\n\t\tif (value !== undefined) {\n\t\t\tif (typeof value !== \"object\" || value === null) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\t\tvalue\n\t\t\t\t\t)}.\\n`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else {\n\t\t\t\t// Check each var value for invalid types (e.g., Date objects)\n\t\t\t\tfor (const [varName, varValue] of Object.entries(value)) {\n\t\t\t\t\tif (varValue instanceof Date) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`The field \"${fieldPath}.${varName}\" is a TOML date, which is not supported. ` +\n\t\t\t\t\t\t\t\t`Please use a string instead, e.g. ${varName} = \"2025-12-19\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check for vars that exist at top level but not in the current environment\n\t\tconst configVars = Object.keys(config?.vars ?? {});\n\t\tif (configVars.length > 0) {\n\t\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\t\tconst missingVars = configVars.filter((varName) => !(varName in value));\n\n\t\t\t\tif (missingVars.length > 0) {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`The following vars exist at the top level, but not on \"${fieldPath}\".\\n` +\n\t\t\t\t\t\t\t`This is probably not what you want, since \"vars\" configuration is not inherited by environments.\\n` +\n\t\t\t\t\t\t\t`Please add these vars to \"env.${envName}.vars\":\\n` +\n\t\t\t\t\t\t\tmissingVars.map((varName) => `- ${varName}`).join(\"\\n\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn isValid;\n\t};\n\nconst validateSecrets =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (value === undefined) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\n\t\t// Warn about unexpected properties\n\t\tvalidateAdditionalProperties(diagnostics, fieldPath, Object.keys(value), [\n\t\t\t\"required\",\n\t\t]);\n\n\t\t// Validate 'required' property if present\n\t\tisValid =\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${fieldPath}.required`,\n\t\t\t\t(value as Record<string, unknown>).required,\n\t\t\t\t\"string\"\n\t\t\t) && isValid;\n\n\t\treturn isValid;\n\t};\n\nconst validateBindingsProperty =\n\t(envName: string, validateBinding: ValidatorFn): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tlet isValid = true;\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (value !== undefined) {\n\t\t\t// Check the validity of the `value` as a bindings container.\n\t\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\t\tvalue\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else if (!hasProperty(value, \"bindings\")) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}\" is missing the required \"bindings\" property.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else if (!Array.isArray(value.bindings)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}.bindings\" should be an array but got ${JSON.stringify(\n\t\t\t\t\t\tvalue.bindings\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < value.bindings.length; i++) {\n\t\t\t\t\tconst binding = value.bindings[i];\n\t\t\t\t\tconst bindingDiagnostics = new Diagnostics(\n\t\t\t\t\t\t`\"${fieldPath}.bindings[${i}]\": ${JSON.stringify(binding)}`\n\t\t\t\t\t);\n\t\t\t\t\tisValid =\n\t\t\t\t\t\tvalidateBinding(\n\t\t\t\t\t\t\tbindingDiagnostics,\n\t\t\t\t\t\t\t`${fieldPath}.bindings[${i}]`,\n\t\t\t\t\t\t\tbinding,\n\t\t\t\t\t\t\tconfig\n\t\t\t\t\t\t) && isValid;\n\t\t\t\t\tdiagnostics.addChild(bindingDiagnostics);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst configBindingNames = getBindingNames(\n\t\t\t\tconfig?.[field as keyof Environment]\n\t\t\t);\n\t\t\tif (isValid && configBindingNames.length > 0) {\n\t\t\t\t// If there are top level bindings then check that they all appear in the environment.\n\t\t\t\tconst envBindingNames = new Set(getBindingNames(value));\n\t\t\t\tconst missingBindings = configBindingNames.filter(\n\t\t\t\t\t(name) => !envBindingNames.has(name)\n\t\t\t\t);\n\t\t\t\tif (missingBindings.length > 0) {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`The following bindings are at the top level, but not on \"env.${envName}\".\\n` +\n\t\t\t\t\t\t\t`This is not what you probably want, since \"${field}\" configuration is not inherited by environments.\\n` +\n\t\t\t\t\t\t\t`Please add a binding for each to \"${fieldPath}.bindings\":\\n` +\n\t\t\t\t\t\t\tmissingBindings.map((name) => `- ${name}`).join(\"\\n\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn isValid;\n\t};\n\nconst validateUnsafeSettings =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\t// unsafe.bindings\n\t\tif (hasProperty(value, \"bindings\") && value.bindings !== undefined) {\n\t\t\tconst validateBindingsFn = validateBindingsProperty(\n\t\t\t\tenvName,\n\t\t\t\tvalidateUnsafeBinding\n\t\t\t);\n\t\t\tconst valid = validateBindingsFn(diagnostics, field, value, config);\n\t\t\tif (!valid) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// unsafe.metadata\n\t\tif (\n\t\t\thasProperty(value, \"metadata\") &&\n\t\t\tvalue.metadata !== undefined &&\n\t\t\t(typeof value.metadata !== \"object\" ||\n\t\t\t\tvalue.metadata === null ||\n\t\t\t\tArray.isArray(value.metadata))\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}.metadata\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue.metadata\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\t// unsafe.capnp\n\t\tif (hasProperty(value, \"capnp\") && value.capnp !== undefined) {\n\t\t\tif (\n\t\t\t\ttypeof value.capnp !== \"object\" ||\n\t\t\t\tvalue.capnp === null ||\n\t\t\t\tArray.isArray(value.capnp)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}.capnp\" should be an object but got ${JSON.stringify(\n\t\t\t\t\t\tvalue.capnp\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// validate whether they have a compiled_schema string. If they do, they should not use base_path or source_schemas\n\t\t\tif (hasProperty(value.capnp, \"compiled_schema\")) {\n\t\t\t\tif (\n\t\t\t\t\thasProperty(value.capnp, \"base_path\") ||\n\t\t\t\t\thasProperty(value.capnp, \"source_schemas\")\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`The field \"${fieldPath}.capnp\" cannot contain both \"compiled_schema\" and one of \"base_path\" or \"source_schemas\".`\n\t\t\t\t\t);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof value.capnp.compiled_schema !== \"string\") {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`The field \"${fieldPath}.capnp.compiled_schema\", when present, should be a string but got ${JSON.stringify(\n\t\t\t\t\t\t\tvalue.capnp.compiled_schema\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// they don't have a compiled_schema property, so they must have both base_path and source_schemas\n\t\t\t\tif (!isRequiredProperty(value.capnp, \"base_path\", \"string\")) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`The field \"${fieldPath}.capnp.base_path\", when present, should be a string but got ${JSON.stringify(\n\t\t\t\t\t\t\tvalue.capnp.base_path\n\t\t\t\t\t\t)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!validateTypedArray(\n\t\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\t`${fieldPath}.capnp.source_schemas`,\n\t\t\t\t\t\tvalue.capnp.source_schemas,\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\t\"bindings\",\n\t\t\t\"metadata\",\n\t\t\t\"capnp\",\n\t\t]);\n\n\t\treturn true;\n\t};\n\n/**\n * Check that the given field is a valid \"durable_object\" binding object.\n */\nconst validateDurableObjectBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be an object but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\t// Durable Object bindings must have a name and class_name, and optionally a script_name and an environment.\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"name\", \"string\")) {\n\t\tdiagnostics.errors.push(`binding should have a string \"name\" field.`);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"class_name\", \"string\")) {\n\t\tdiagnostics.errors.push(`binding should have a string \"class_name\" field.`);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"script_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`the field \"script_name\", when present, should be a string.`\n\t\t);\n\t\tisValid = false;\n\t}\n\t// environment requires a script_name\n\tif (!isOptionalProperty(value, \"environment\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`the field \"environment\", when present, should be a string.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (\"environment\" in value && !(\"script_name\" in value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`binding should have a \"script_name\" field if \"environment\" is present.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"class_name\",\n\t\t\"environment\",\n\t\t\"name\",\n\t\t\"script_name\",\n\t]);\n\n\treturn isValid;\n};\n\nconst workflowNameFormatMessage = `Workflow names must be 1-64 characters long, start with a letter, number, or underscore, and may only contain letters, numbers, underscores, or hyphens.`;\n\n/**\n * Check the shape of a single `default_retention` value.\n */\nfunction validateWorkflowRetentionValue(\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tkey: string,\n\tvalue: unknown\n): boolean {\n\tconst isValidNumber =\n\t\ttypeof value === \"number\" && Number.isInteger(value) && value > 0;\n\tconst isValidString = typeof value === \"string\" && value.length > 0;\n\n\tif (isValidNumber || isValidString) {\n\t\treturn true;\n\t}\n\n\tdiagnostics.errors.push(\n\t\t`\"${field}\" bindings \"default_retention.${key}\" field must be a positive integer of milliseconds or a duration string such as \"3 days\", but got ${JSON.stringify(\n\t\t\tvalue\n\t\t)}.`\n\t);\n\treturn false;\n}\n\n/**\n * Check that the given field is a valid \"workflow\" binding object.\n */\nconst validateWorkflowBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"workflows\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t} else if (!isValidWorkflowName(value.name)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" binding \"name\" field is invalid. ${workflowNameFormatMessage}`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"class_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"class_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"script_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"script_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (hasProperty(value, \"schedules\") && value.schedules !== undefined) {\n\t\tif (typeof value.schedules === \"string\") {\n\t\t\tif (value.schedules.length === 0) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" bindings \"schedules\" field must not be an empty string.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t} else if (Array.isArray(value.schedules)) {\n\t\t\tif (value.schedules.length === 0) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" bindings \"schedules\" field must not be an empty array.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else if (\n\t\t\t\t!value.schedules.every((s: unknown) => typeof s === \"string\")\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" bindings should, optionally, have a string or array of strings \"schedules\" field but got ${JSON.stringify(\n\t\t\t\t\t\tvalue\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else if (value.schedules.some((s: unknown) => s === \"\")) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" bindings \"schedules\" field must not contain empty strings.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t} else {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings should, optionally, have a string or array of strings \"schedules\" field but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\t}\n\n\tif (hasProperty(value, \"limits\") && value.limits !== undefined) {\n\t\tif (\n\t\t\ttypeof value.limits !== \"object\" ||\n\t\t\tvalue.limits === null ||\n\t\t\tArray.isArray(value.limits)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings should, optionally, have an object \"limits\" field but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t} else {\n\t\t\tconst limits = value.limits as Record<string, unknown>;\n\t\t\tif (limits.steps !== undefined) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof limits.steps !== \"number\" ||\n\t\t\t\t\t!Number.isInteger(limits.steps) ||\n\t\t\t\t\tlimits.steps < 1\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"${field}\" bindings \"limits.steps\" field must be a positive integer but got ${JSON.stringify(\n\t\t\t\t\t\t\tlimits.steps\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t\tisValid = false;\n\t\t\t\t} else if (limits.steps > 25_000) {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`\"${field}\" has a step limit of ${limits.steps}, which exceeds the production maximum of 25,000. This configuration may not work when deployed.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.limits`,\n\t\t\t\tObject.keys(limits),\n\t\t\t\t[\"steps\"]\n\t\t\t);\n\t\t}\n\t}\n\n\tif (\n\t\thasProperty(value, \"default_retention\") &&\n\t\tvalue.default_retention !== undefined\n\t) {\n\t\tif (\n\t\t\ttypeof value.default_retention !== \"object\" ||\n\t\t\tvalue.default_retention === null ||\n\t\t\tArray.isArray(value.default_retention)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings should, optionally, have an object \"default_retention\" field but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t} else {\n\t\t\tconst defaultRetention = value.default_retention as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t\tfor (const key of [\"success_retention\", \"error_retention\"]) {\n\t\t\t\tif (\n\t\t\t\t\tdefaultRetention[key] !== undefined &&\n\t\t\t\t\t!validateWorkflowRetentionValue(\n\t\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tdefaultRetention[key]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.default_retention`,\n\t\t\t\tObject.keys(defaultRetention),\n\t\t\t\t[\"success_retention\", \"error_retention\"]\n\t\t\t);\n\t\t}\n\t}\n\n\tif (hasProperty(value, \"concurrency\") && value.concurrency !== undefined) {\n\t\tif (\n\t\t\ttypeof value.concurrency !== \"object\" ||\n\t\t\tvalue.concurrency === null ||\n\t\t\tArray.isArray(value.concurrency)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings should, optionally, have an object \"concurrency\" field but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t} else {\n\t\t\tconst concurrency = value.concurrency as Record<string, unknown>;\n\t\t\tif (\n\t\t\t\tconcurrency.limit !== undefined &&\n\t\t\t\t(typeof concurrency.limit !== \"number\" ||\n\t\t\t\t\t!Number.isInteger(concurrency.limit) ||\n\t\t\t\t\tconcurrency.limit < 1)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" bindings \"concurrency.limit\" field must be a positive integer but got ${JSON.stringify(\n\t\t\t\t\t\tconcurrency.limit\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.concurrency`,\n\t\t\t\tObject.keys(concurrency),\n\t\t\t\t[\"limit\"]\n\t\t\t);\n\t\t}\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"name\",\n\t\t\"class_name\",\n\t\t\"script_name\",\n\t\t\"limits\",\n\t\t\"concurrency\",\n\t\t\"schedules\",\n\t\t\"default_retention\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateCflogfwdrObject: (env: string) => ValidatorFn =\n\t(envName) => (diagnostics, field, value, topLevelEnv) => {\n\t\t//validate the bindings property first, as this also validates that it's an object, etc.\n\t\tconst bindingsValidation = validateBindingsProperty(\n\t\t\tenvName,\n\t\t\tvalidateCflogfwdrBinding\n\t\t);\n\t\tif (!bindingsValidation(diagnostics, field, value, topLevelEnv)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst v = value as {\n\t\t\tbindings: [];\n\t\t\tschema: string | undefined;\n\t\t};\n\n\t\tif (v?.schema !== undefined) {\n\t\t\t// the user should not be using the old schema property, as we've migrated to unsafe.capnp.schema for consistency with the unsafe bindings\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" binding \"schema\" property has been replaced with the \"unsafe.capnp\" object, which expects a \"base_path\" and an array of \"source_schemas\" to compile, or a \"compiled_schema\" property.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n\nconst validateCflogfwdrBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be an object but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"name\", \"string\")) {\n\t\tdiagnostics.errors.push(`binding should have a string \"name\" field.`);\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"destination\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`binding should have a string \"destination\" field.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"destination\",\n\t\t\"name\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateAssetsConfig: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object, but got value ${JSON.stringify(\n\t\t\t\tfield\n\t\t\t)} of type ${typeof value}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\n\t// ensure we validate all props before we show the validation errors\n\t// this way users have all the necessary info to fix all errors in one go\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"directory\",\n\t\t\t(value as Assets).directory,\n\t\t\t\"string\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"binding\",\n\t\t\t(value as Assets).binding,\n\t\t\t\"string\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"html_handling\",\n\t\t\t(value as Assets).html_handling,\n\t\t\t\"string\",\n\t\t\t[\n\t\t\t\t\"auto-trailing-slash\",\n\t\t\t\t\"force-trailing-slash\",\n\t\t\t\t\"drop-trailing-slash\",\n\t\t\t\t\"none\",\n\t\t\t]\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"not_found_handling\",\n\t\t\t(value as Assets).not_found_handling,\n\t\t\t\"string\",\n\t\t\t[\"single-page-application\", \"404-page\", \"none\"]\n\t\t) && isValid;\n\n\tif ((value as Assets).run_worker_first !== undefined) {\n\t\tif (typeof (value as Assets).run_worker_first === \"boolean\") {\n\t\t\tisValid =\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tfield,\n\t\t\t\t\t\"run_worker_first\",\n\t\t\t\t\t(value as Assets).run_worker_first,\n\t\t\t\t\t\"boolean\"\n\t\t\t\t) && isValid;\n\t\t} else if (Array.isArray((value as Assets).run_worker_first)) {\n\t\t\tisValid =\n\t\t\t\tvalidateOptionalTypedArray(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\"assets.run_worker_first\",\n\t\t\t\t\t(value as Assets).run_worker_first,\n\t\t\t\t\t\"string\"\n\t\t\t\t) && isValid;\n\t\t} else {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${field}.run_worker_first\" should be an array of strings or a boolean, but got ${JSON.stringify(\n\t\t\t\t\t(value as Assets).run_worker_first\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\t}\n\tisValid =\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\t\"directory\",\n\t\t\t\"binding\",\n\t\t\t\"html_handling\",\n\t\t\t\"not_found_handling\",\n\t\t\t\"run_worker_first\",\n\t\t]) && isValid;\n\n\treturn isValid;\n};\n\nconst validateNamedSimpleBinding =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\t\tdiagnostics.errors.push(`binding should have a string \"binding\" field.`);\n\t\t\tisValid = false;\n\t\t}\n\n\t\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\t\tisValid = false;\n\t\t}\n\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\t\"binding\",\n\t\t\t\"remote\",\n\t\t]);\n\n\t\treturn isValid;\n\t};\n\nconst validateAIBinding =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\t\tdiagnostics.errors.push(`binding should have a string \"binding\" field.`);\n\t\t\tisValid = false;\n\t\t}\n\n\t\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\t\tisValid = false;\n\t\t}\n\n\t\treturn isValid;\n\t};\n\nconst validateVersionMetadataBinding =\n\t(envName: string): ValidatorFn =>\n\t(diagnostics, field, value, config) => {\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\t\tdiagnostics.errors.push(`binding should have a string \"binding\" field.`);\n\t\t\tisValid = false;\n\t\t}\n\n\t\treturn isValid;\n\t};\n\n/**\n * Check that the given field is a valid \"unsafe\" binding object.\n *\n * TODO: further validation of known unsafe bindings.\n */\nconst validateUnsafeBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected ${field} to be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\t// Unsafe bindings must have a name and type.\n\tif (!isRequiredProperty(value, \"name\", \"string\")) {\n\t\tdiagnostics.errors.push(`binding should have a string \"name\" field.`);\n\t\tisValid = false;\n\t}\n\tif (isRequiredProperty(value, \"type\", \"string\")) {\n\t\tconst safeBindings = [\n\t\t\t\"plain_text\",\n\t\t\t\"secret_text\",\n\t\t\t\"json\",\n\t\t\t\"wasm_module\",\n\t\t\t\"data_blob\",\n\t\t\t\"text_blob\",\n\t\t\t\"browser\",\n\t\t\t\"ai\",\n\t\t\t\"ai_search_namespace\",\n\t\t\t\"ai_search\",\n\t\t\t\"websearch\",\n\t\t\t\"agent_memory\",\n\t\t\t\"kv_namespace\",\n\t\t\t\"durable_object_namespace\",\n\t\t\t\"d1_database\",\n\t\t\t\"r2_bucket\",\n\t\t\t\"service\",\n\t\t\t\"logfwdr\",\n\t\t\t\"mtls_certificate\",\n\t\t\t\"pipeline\",\n\t\t\t\"worker_loader\",\n\t\t\t\"vpc_service\",\n\t\t\t\"flagship\",\n\t\t\t\"vpc_network\",\n\t\t\t\"stream\",\n\t\t\t\"media\",\n\t\t\t\"artifacts\",\n\t\t];\n\n\t\tif (safeBindings.includes(value.type)) {\n\t\t\tdiagnostics.warnings.push(\n\t\t\t\t`The binding type \"${value.type}\" is directly supported by wrangler.\\n` +\n\t\t\t\t\t`Consider migrating this unsafe binding to a format for '${value.type}' bindings that is supported by wrangler for optimal support.\\n` +\n\t\t\t\t\t\"For more details, see https://developers.cloudflare.com/workers/cli-wrangler/configuration\"\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tvalue.type === \"metadata\" &&\n\t\t\tisRequiredProperty(value, \"name\", \"string\")\n\t\t) {\n\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\"The deployment object in the metadata binding is now deprecated. \" +\n\t\t\t\t\t\"Please switch using the version_metadata binding for access to version specific fields: \" +\n\t\t\t\t\t\"https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata\"\n\t\t\t);\n\t\t}\n\t} else {\n\t\tdiagnostics.errors.push(`binding should have a string \"type\" field.`);\n\t\tisValid = false;\n\t}\n\treturn isValid;\n};\n\n/**\n * Check that the given environment field is a valid array of bindings.\n */\nconst validateBindingArray =\n\t(envName: string, validateBinding: ValidatorFn): ValidatorFn =>\n\t(diagnostics, field, envValue, config) => {\n\t\tif (envValue === undefined) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\t\tif (!Array.isArray(envValue)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an array but got ${JSON.stringify(\n\t\t\t\t\tenvValue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tfor (let i = 0; i < envValue.length; i++) {\n\t\t\tisValid =\n\t\t\t\tvalidateBinding(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${fieldPath}[${i}]`,\n\t\t\t\t\tenvValue[i],\n\t\t\t\t\tconfig\n\t\t\t\t) && isValid;\n\t\t}\n\t\tconst configValue = config?.[field as keyof Environment] as {\n\t\t\tbinding: unknown;\n\t\t}[];\n\t\tif (Array.isArray(configValue)) {\n\t\t\tconst configBindingNames = configValue.map((value) => value.binding);\n\t\t\t// If there are no top level bindings then there is nothing to do here.\n\t\t\tif (configBindingNames.length > 0) {\n\t\t\t\tconst envBindingNames = new Set(envValue.map((value) => value.binding));\n\t\t\t\tfor (const configBindingName of configBindingNames) {\n\t\t\t\t\tif (!envBindingNames.has(configBindingName)) {\n\t\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t\t`There is a ${field} binding with name \"${configBindingName}\" at the top level, but not on \"env.${envName}\".\\n` +\n\t\t\t\t\t\t\t\t`This is not what you probably want, since \"${field}\" configuration is not inherited by environments.\\n` +\n\t\t\t\t\t\t\t\t`Please add a binding for \"${configBindingName}\" to \"env.${envName}.${field}.bindings\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn isValid;\n\t};\n\n/**\n * Validate a list of SSH public key entries, used by both `containers.authorized_keys`\n * and `containers.trusted_user_ca_keys`. Each check gates the next one, so a malformed\n * entry is reported as a configuration error rather than dereferenced.\n */\nfunction validateSshPublicKeys(\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: unknown,\n\tnameRequired: boolean\n): void {\n\tif (!Array.isArray(value)) {\n\t\tdiagnostics.errors.push(`${field} must be an array`);\n\t\treturn;\n\t}\n\n\tfor (const [index, key] of value.entries()) {\n\t\tconst fieldPath = `${field}[${index}]`;\n\n\t\tif (typeof key !== \"object\" || key === null || Array.isArray(key)) {\n\t\t\tdiagnostics.errors.push(`${fieldPath} must be an object`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst hasValidName = nameRequired\n\t\t\t? isRequiredProperty(key, \"name\", \"string\")\n\t\t\t: isOptionalProperty(key, \"name\", \"string\");\n\t\tif (!hasValidName) {\n\t\t\tdiagnostics.errors.push(`${fieldPath}.name must be a string`);\n\t\t}\n\n\t\tif (\n\t\t\t!isRequiredProperty<{ public_key: string }>(key, \"public_key\", \"string\")\n\t\t) {\n\t\t\tdiagnostics.errors.push(`${fieldPath}.public_key must be a string`);\n\t\t} else if (!key.public_key.toLowerCase().startsWith(\"ssh-ed25519\")) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`${fieldPath}.public_key is an unsupported key type. Please provide an ED25519 public key.`\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Validate `previews.containers`. Mirrors `validateContainerApp`, but rejects\n * the application name outright. Every preview container is named at deploy\n * time from the resolved worker name, preview slug, and class name, so that\n * two previews of the same Worker cannot claim one name.\n *\n * Default-name generation is therefore switched off here. The resolved worker\n * name is not known until deploy time, so requiring a name during validation\n * would reject a config that omits the top-level `name` and supplies it with\n * `--worker-name` instead.\n */\nfunction validatePreviewsContainers(\n\tenvName: string,\n\tconfigPath: string | undefined\n): ValidatorFn {\n\tconst innerValidator = validateContainerApp(envName, undefined, configPath, {\n\t\tgenerateDefaultName: false,\n\t});\n\treturn (diagnostics, field, value, config) => {\n\t\tif (Array.isArray(value)) {\n\t\t\tconst nameFields = [...value.entries()]\n\t\t\t\t.filter(\n\t\t\t\t\t([, entry]) => entry && typeof entry === \"object\" && \"name\" in entry\n\t\t\t\t)\n\t\t\t\t.map(([index]) => `\"${field}[${index}].name\"`);\n\t\t\tif (nameFields.length > 0) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`${nameFields.join(\", \")} cannot be set. A preview container's application name is generated from the worker name, preview slug, and Durable Object class name, so that separate previews of the same Worker do not collide. Remove it and identify the container with \"class_name\".`\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// A Durable Object class is backed by at most one container\n\t\t\t// application, so two entries for the same class are ambiguous.\n\t\t\tconst seenClasses = new Set<string>();\n\t\t\tconst duplicateClasses = new Set<string>();\n\t\t\tfor (const entry of value) {\n\t\t\t\tif (!entry || typeof entry !== \"object\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (typeof entry.class_name === \"string\") {\n\t\t\t\t\tif (seenClasses.has(entry.class_name)) {\n\t\t\t\t\t\tduplicateClasses.add(entry.class_name);\n\t\t\t\t\t}\n\t\t\t\t\tseenClasses.add(entry.class_name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (duplicateClasses.size > 0) {\n\t\t\t\tconst classList = [...duplicateClasses]\n\t\t\t\t\t.map((className) => `\"${className}\"`)\n\t\t\t\t\t.join(\", \");\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" declares more than one container for the Durable Object class ${classList}; each Durable Object class may appear at most once.`\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn innerValidator(diagnostics, field, value, config);\n\t};\n}\n\nfunction validateContainerApp(\n\tenvName: string,\n\ttopLevelName: string | undefined,\n\tconfigPath: string | undefined,\n\toptions: { generateDefaultName?: boolean } = {}\n): ValidatorFn {\n\tconst { generateDefaultName = true } = options;\n\treturn (diagnostics, field, value, config) => {\n\t\tif (!value) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"containers\" field should be an array, but got ${JSON.stringify(value)}`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (const containerAppOptional of value) {\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"class_name\",\n\t\t\t\tcontainerAppOptional.class_name,\n\t\t\t\t\"string\"\n\t\t\t);\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"name\",\n\t\t\t\tcontainerAppOptional.name,\n\t\t\t\t\"string\"\n\t\t\t);\n\t\t\t// try and add a default name\n\t\t\tif (generateDefaultName && !containerAppOptional.name) {\n\t\t\t\t// The default name is derived from the class name, so without one there\n\t\t\t\t// is nothing to derive it from. Such a container must be linked to a\n\t\t\t\t// Durable Object from the `exports` side, which references it by name.\n\t\t\t\tif (containerAppOptional.class_name === undefined) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"containers.name\" is required when \"containers.class_name\" is not defined, because there is no class name to derive a default name from. Either name this container and reference it from a Durable Object's \\`exports\\` entry, or set \"containers.class_name\".`\n\t\t\t\t\t);\n\t\t\t\t} else if (!topLevelName) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`Must have either a top level \"name\" and \"containers.class_name\" field defined, or have field \"containers.name\" defined.`\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// if there is worker name defined but no name for this container app default to:\n\t\t\t\t\t// worker_name-class_name[-envName].\n\t\t\t\t\tlet name = `${topLevelName}-${containerAppOptional.class_name}`;\n\t\t\t\t\t// config is undefined when we are at the top level instead of in a named env\n\t\t\t\t\t// If we are in a named env, append it to the generated name\n\t\t\t\t\t// so that users can re-use container definitions between different envs without issue.\n\t\t\t\t\tname += config === undefined ? \"\" : `-${envName}`;\n\t\t\t\t\tcontainerAppOptional.name = name.toLowerCase().replace(/ /g, \"-\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!containerAppOptional.configuration?.image &&\n\t\t\t\t!containerAppOptional.image\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"containers.image\" field must be defined for each container app. This should be the path to your Dockerfile or an image URI pointing to the Cloudflare registry.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\"configuration\" in containerAppOptional) {\n\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t`\"containers.configuration\" is deprecated. Use top level \"containers\" fields instead. \"configuration.image\" should be \"image\", limits should be set via \"instance_type\".`\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\ttypeof containerAppOptional.configuration !== \"object\" ||\n\t\t\t\t\tcontainerAppOptional.configuration === null ||\n\t\t\t\t\tArray.isArray(containerAppOptional.configuration)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"containers.configuration\" should be an object`\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\tcontainerAppOptional.instance_type &&\n\t\t\t\t\t(containerAppOptional.configuration.disk !== undefined ||\n\t\t\t\t\t\tcontainerAppOptional.configuration.vcpu !== undefined ||\n\t\t\t\t\t\tcontainerAppOptional.configuration.memory_mib !== undefined)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`Cannot set custom limits via \"containers.configuration\" and use preset \"instance_type\" limits at the same time.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"image_build_context\",\n\t\t\t\tcontainerAppOptional.image_build_context,\n\t\t\t\t\"string\"\n\t\t\t);\n\t\t\t// make sure both image fields is always set, because cloudchamber apply requires one and containers the other :(\n\t\t\tlet resolvedImage =\n\t\t\t\tcontainerAppOptional.image ?? containerAppOptional.configuration?.image;\n\t\t\tlet resolvedBuildContextPath: string | undefined = undefined;\n\t\t\ttry {\n\t\t\t\tif (isDockerfile(resolvedImage, configPath)) {\n\t\t\t\t\tconst baseDir = configPath ? path.dirname(configPath) : process.cwd();\n\n\t\t\t\t\tresolvedImage = path.resolve(baseDir, resolvedImage);\n\t\t\t\t\tresolvedBuildContextPath = containerAppOptional.image_build_context\n\t\t\t\t\t\t? path.resolve(baseDir, containerAppOptional.image_build_context)\n\t\t\t\t\t\t: path.dirname(resolvedImage);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof Error && err.message) {\n\t\t\t\t\tdiagnostics.errors.push(err.message);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontainerAppOptional.image = resolvedImage;\n\t\t\tcontainerAppOptional.image_build_context = resolvedBuildContextPath;\n\n\t\t\t// Validate rollout related configuration\n\t\t\tif (containerAppOptional.rollout_step_percentage !== undefined) {\n\t\t\t\tconst rolloutStep = containerAppOptional.rollout_step_percentage;\n\n\t\t\t\tif (typeof rolloutStep === \"number\") {\n\t\t\t\t\t// If it's a number, it must be one of the allowed values\n\t\t\t\t\tconst allowedSingleValues = [5, 10, 20, 25, 50, 100];\n\t\t\t\t\tif (!allowedSingleValues.includes(rolloutStep)) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`\"containers.rollout_step_percentage\" must be one of [5, 10, 20, 25, 50, 100], but got ${rolloutStep}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else if (Array.isArray(rolloutStep)) {\n\t\t\t\t\t// If it's an array, validate each step and ensure they sum to 100\n\t\t\t\t\tconst nonNumber: unknown[] = [];\n\t\t\t\t\tconst outOfRange: number[] = [];\n\t\t\t\t\tlet index = 0;\n\t\t\t\t\tlet ascending = true;\n\t\t\t\t\tfor (const step of rolloutStep) {\n\t\t\t\t\t\tif (typeof step !== \"number\") {\n\t\t\t\t\t\t\tnonNumber.push(step);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (step < 10 || step > 100) {\n\t\t\t\t\t\t\t\toutOfRange.push(step);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (ascending && index > 0 && step < rolloutStep[index - 1]) {\n\t\t\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t\t\t`\"containers.rollout_step_percentage\" array elements must be in ascending order, but got \"${rolloutStep}\"`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tascending = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (index === rolloutStep.length - 1 && step !== 100) {\n\t\t\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t\t\t`The final step in \"containers.rollout_step_percentage\" must be 100, but got \"${step}\"`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (nonNumber.length) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`\"containers.rollout_step_percentage\" array elements must be numbers, but got \"${nonNumber.join(\", \")}\"`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (outOfRange.length) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`\"containers.rollout_step_percentage\" array elements must be between 10 and 100, but got \"${outOfRange.join(\", \")}\"`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"containers.rollout_step_percentage\" must be a number or array of numbers, but got \"${rolloutStep}\"`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"rollout_kind\",\n\t\t\t\tcontainerAppOptional.rollout_kind,\n\t\t\t\t\"string\",\n\t\t\t\t[\"full_auto\", \"full_manual\", \"none\"]\n\t\t\t);\n\n\t\t\tif (\n\t\t\t\t!isOptionalProperty(\n\t\t\t\t\tcontainerAppOptional,\n\t\t\t\t\t\"rollout_active_grace_period\",\n\t\t\t\t\t\"number\"\n\t\t\t\t) ||\n\t\t\t\tcontainerAppOptional.rollout_active_grace_period < 0\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"containers.rollout_active_grace_period\" field should be a positive number but got \"${containerAppOptional.rollout_active_grace_period}\"`\n\t\t\t\t);\n\t\t\t}\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"max_instances\",\n\t\t\t\tcontainerAppOptional.max_instances,\n\t\t\t\t\"number\"\n\t\t\t);\n\t\t\tif (\n\t\t\t\tcontainerAppOptional.max_instances !== undefined &&\n\t\t\t\tcontainerAppOptional.max_instances < 0\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"containers.max_instances\" field should be a positive number, but got ${containerAppOptional.max_instances}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Validate rollout steps vs max_instances\n\t\t\tif (\n\t\t\t\tcontainerAppOptional.rollout_step_percentage !== undefined &&\n\t\t\t\tcontainerAppOptional.max_instances !== undefined &&\n\t\t\t\tArray.isArray(containerAppOptional.rollout_step_percentage)\n\t\t\t) {\n\t\t\t\tconst rolloutStepsCount =\n\t\t\t\t\tcontainerAppOptional.rollout_step_percentage.length;\n\t\t\t\tif (rolloutStepsCount > containerAppOptional.max_instances) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"containers.rollout_step_percentage\" cannot have more steps (${rolloutStepsCount}) than \"max_instances\" (${containerAppOptional.max_instances})`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"image_vars\",\n\t\t\t\tcontainerAppOptional.image_vars,\n\t\t\t\t\"object\"\n\t\t\t);\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"scheduling_policy\",\n\t\t\t\tcontainerAppOptional.scheduling_policy,\n\t\t\t\t\"string\",\n\t\t\t\t[\"regional\", \"moon\", \"default\"]\n\t\t\t);\n\n\t\t\t// Add deprecation warnings for legacy fields\n\t\t\tif (\"instances\" in containerAppOptional) {\n\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t`\"containers.instances\" is deprecated. Use \"containers.max_instances\" instead.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\"durable_objects\" in containerAppOptional) {\n\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t`\"containers.durable_objects\" is deprecated. Use the \"class_name\" field instead.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\"wrangler_ssh\" in containerAppOptional) {\n\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t`\"containers.wrangler_ssh\" is deprecated. Use \"containers.ssh\" instead.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// unsafe.containers\n\t\t\tif (\"unsafe\" in containerAppOptional) {\n\t\t\t\tif (\n\t\t\t\t\t(containerAppOptional.unsafe &&\n\t\t\t\t\t\ttypeof containerAppOptional.unsafe !== \"object\") ||\n\t\t\t\t\tArray.isArray(containerAppOptional.unsafe)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`The field \"containers.unsafe\" should be an object but got ${JSON.stringify(\n\t\t\t\t\t\t\ttypeof containerAppOptional.unsafe\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\tObject.keys(containerAppOptional),\n\t\t\t\t[\n\t\t\t\t\t\"name\",\n\t\t\t\t\t\"instances\",\n\t\t\t\t\t\"max_instances\",\n\t\t\t\t\t\"image\",\n\t\t\t\t\t\"image_build_context\",\n\t\t\t\t\t\"image_vars\",\n\t\t\t\t\t\"class_name\",\n\t\t\t\t\t\"scheduling_policy\",\n\t\t\t\t\t\"instance_type\",\n\t\t\t\t\t\"ssh\",\n\t\t\t\t\t\"wrangler_ssh\",\n\t\t\t\t\t\"authorized_keys\",\n\t\t\t\t\t\"trusted_user_ca_keys\",\n\t\t\t\t\t\"configuration\",\n\t\t\t\t\t\"constraints\",\n\t\t\t\t\t\"affinities\",\n\t\t\t\t\t\"rollout_step_percentage\",\n\t\t\t\t\t\"rollout_kind\",\n\t\t\t\t\t\"durable_objects\",\n\t\t\t\t\t\"rollout_active_grace_period\",\n\t\t\t\t\t\"unsafe\",\n\t\t\t\t]\n\t\t\t);\n\t\t\tif (\n\t\t\t\ttypeof containerAppOptional.configuration === \"object\" &&\n\t\t\t\tcontainerAppOptional.configuration !== null &&\n\t\t\t\t!Array.isArray(containerAppOptional.configuration)\n\t\t\t) {\n\t\t\t\tvalidateAdditionalProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.configuration`,\n\t\t\t\t\tObject.keys(containerAppOptional.configuration),\n\t\t\t\t\t[\"image\", \"secrets\", \"labels\", \"disk\", \"vcpu\", \"memory_mib\"]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet sshField: \"ssh\" | \"wrangler_ssh\" | undefined;\n\t\t\tlet sshConfig:\n\t\t\t\t| ContainerApp[\"ssh\"]\n\t\t\t\t| ContainerApp[\"wrangler_ssh\"]\n\t\t\t\t| undefined;\n\n\t\t\tif (\"ssh\" in containerAppOptional) {\n\t\t\t\tsshField = \"ssh\";\n\t\t\t\tsshConfig = containerAppOptional.ssh;\n\t\t\t\tcontainerAppOptional.wrangler_ssh = containerAppOptional.ssh;\n\t\t\t\tdelete containerAppOptional.ssh;\n\t\t\t} else if (\"wrangler_ssh\" in containerAppOptional) {\n\t\t\t\tsshField = \"wrangler_ssh\";\n\t\t\t\tsshConfig = containerAppOptional.wrangler_ssh;\n\t\t\t}\n\n\t\t\tif (sshField !== undefined) {\n\t\t\t\tconst sshConfigObject =\n\t\t\t\t\ttypeof sshConfig === \"object\" && sshConfig !== null ? sshConfig : {};\n\n\t\t\t\tif (!isRequiredProperty(sshConfigObject, \"enabled\", \"boolean\")) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`${field}.${sshField}.enabled must be a boolean`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst sshPort =\n\t\t\t\t\t\"port\" in sshConfigObject ? sshConfigObject.port : undefined;\n\t\t\t\tif (\n\t\t\t\t\t!isOptionalProperty(sshConfigObject, \"port\", \"number\") ||\n\t\t\t\t\t(typeof sshPort === \"number\" && (sshPort < 1 || sshPort > 65535))\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`${field}.${sshField}.port must be a number between 1 and 65535 inclusive`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\"authorized_keys\" in containerAppOptional) {\n\t\t\t\tvalidateSshPublicKeys(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.authorized_keys`,\n\t\t\t\t\tcontainerAppOptional.authorized_keys,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\"trusted_user_ca_keys\" in containerAppOptional) {\n\t\t\t\tvalidateSshPublicKeys(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.trusted_user_ca_keys`,\n\t\t\t\t\tcontainerAppOptional.trusted_user_ca_keys,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tfield,\n\t\t\t\t\t\"constraints\",\n\t\t\t\t\tcontainerAppOptional.constraints,\n\t\t\t\t\t\"object\"\n\t\t\t\t) &&\n\t\t\t\tcontainerAppOptional.constraints\n\t\t\t) {\n\t\t\t\tconst constraints = containerAppOptional.constraints;\n\t\t\t\tif (\"tier\" in constraints) {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`\"constraints.tier\" has been deprecated in favor of \"constraints.tiers\". Please update your configuration to use \"constraints.tiers\" instead.`\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\"tiers\" in constraints) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`${field}.constraints.tier and ${field}.constraints.tiers cannot both be set`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvalidateOptionalTypedArray(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.constraints.tiers`,\n\t\t\t\t\tconstraints.tiers,\n\t\t\t\t\t\"number\"\n\t\t\t\t);\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.constraints`,\n\t\t\t\t\t\"jurisdiction\",\n\t\t\t\t\tconstraints.jurisdiction,\n\t\t\t\t\t\"string\"\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\tconstraints.jurisdiction &&\n\t\t\t\t\t![\"eu\", \"fedramp\"].includes(constraints.jurisdiction)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`${field}.constraints.jurisdiction must be one of: \"eu\", \"fedramp\"`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tvalidateOptionalTypedArray(\n\t\t\t\t\t\tdiagnostics,\n\t\t\t\t\t\t`${field}.constraints.regions`,\n\t\t\t\t\t\tconstraints.regions,\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t) &&\n\t\t\t\t\tconstraints.regions &&\n\t\t\t\t\tArray.isArray(constraints.regions)\n\t\t\t\t) {\n\t\t\t\t\tconst validRegions = [\n\t\t\t\t\t\t\"ENAM\",\n\t\t\t\t\t\t\"WNAM\",\n\t\t\t\t\t\t\"EEUR\",\n\t\t\t\t\t\t\"WEUR\",\n\t\t\t\t\t\t\"APAC\",\n\t\t\t\t\t\t\"SAM\",\n\t\t\t\t\t\t\"ME\",\n\t\t\t\t\t\t\"OC\",\n\t\t\t\t\t\t\"AFR\",\n\t\t\t\t\t];\n\t\t\t\t\tfor (const region of constraints.regions) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof region === \"string\" &&\n\t\t\t\t\t\t\t!validRegions.includes(region.toUpperCase())\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t\t`${field}.constraints.regions contains invalid region \"${region}\". Valid regions are: ${validRegions.join(\", \")}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Instance Type validation: When present, the instance type should be either (1) a string\n\t\t\t// representing a predefined instance type or (2) an object that optionally defines vcpu,\n\t\t\t// memory, and disk.\n\t\t\t//\n\t\t\t// If an instance type is not set, a 'lite' instance type will be used. If a custom instance\n\t\t\t// type doesn't set a value, that value will default to the corresponding value in a 'dev'\n\t\t\t// instance type\n\t\t\tif (typeof containerAppOptional.instance_type === \"string\") {\n\t\t\t\t// validate named instance type\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tfield,\n\t\t\t\t\t\"instance_type\",\n\t\t\t\t\tcontainerAppOptional.instance_type,\n\t\t\t\t\t\"string\",\n\t\t\t\t\tALLOWED_INSTANCE_TYPES\n\t\t\t\t);\n\t\t\t\tif (containerAppOptional.instance_type === \"dev\") {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`The \"dev\" instance_type has been renamed to \"lite\" and will be removed in a subsequent version. Please update your configuration to use \"lite\" instead.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (containerAppOptional.instance_type === \"standard\") {\n\t\t\t\t\tdiagnostics.warnings.push(\n\t\t\t\t\t\t`The \"standard\" instance_type has been renamed to \"standard-1\" and will be removed in a subsequent version. Please update your configuration to use \"standard-1\" instead.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tfield,\n\t\t\t\t\t\"instance_type\",\n\t\t\t\t\tcontainerAppOptional.instance_type,\n\t\t\t\t\t\"object\"\n\t\t\t\t) &&\n\t\t\t\tcontainerAppOptional.instance_type\n\t\t\t) {\n\t\t\t\t// validate custom instance type\n\t\t\t\tconst instanceTypeProperties = [\"vcpu\", \"memory_mib\", \"disk_mb\"];\n\t\t\t\tinstanceTypeProperties.forEach((key) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!isOptionalProperty(\n\t\t\t\t\t\t\tcontainerAppOptional.instance_type,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\"number\"\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t\t`\"containers.instance_type.${key}\", when present, should be a number.`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tvalidateAdditionalProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.instance_type`,\n\t\t\t\t\tObject.keys(containerAppOptional.instance_type),\n\t\t\t\t\tinstanceTypeProperties\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (diagnostics.errors.length > 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\nconst validateCloudchamberConfig: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"cloudchamber\" should be an object, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst optionalAttrsByType = {\n\t\tstring: [\"memory\", \"image\", \"location\"],\n\t\tboolean: [\"ipv4\"],\n\t\tnumber: [\"vcpu\"],\n\t};\n\n\tlet isValid = true;\n\tObject.entries(optionalAttrsByType).forEach(([attrType, attrNames]) => {\n\t\tattrNames.forEach((key) => {\n\t\t\tif (!isOptionalProperty(value, key, attrType as TypeofType)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}\" bindings should, optionally, have a ${attrType} \"${key}\" field but got ${JSON.stringify(\n\t\t\t\t\t\tvalue\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t});\n\t});\n\n\tif (\"instance_type\" in value && value.instance_type !== undefined) {\n\t\tif (\n\t\t\ttypeof value.instance_type !== \"string\" ||\n\t\t\t!ALLOWED_INSTANCE_TYPES.includes(value.instance_type)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"instance_type\" should be one of 'lite', 'basic', 'standard-1', 'standard-2', 'standard-3', or 'standard-4', but got ${value.instance_type}`\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\t(\"memory\" in value && value.memory !== undefined) ||\n\t\t\t(\"vcpu\" in value && value.vcpu !== undefined)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" configuration should not set either \"memory\" or \"vcpu\" with \"instance_type\"`\n\t\t\t);\n\t\t}\n\t}\n\n\treturn isValid;\n};\n\nconst validateKVBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"kv_namespaces\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// KV bindings must have a binding and id.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\t!isOptionalProperty(value, \"id\", \"string\") ||\n\t\t(value.id !== undefined && value.id.length === 0)\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"preview_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"preview_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"id\",\n\t\t\"preview_id\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateSendEmailBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"send_email\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// send email bindings must have a name.\n\tif (!isRequiredProperty(value, \"name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"destination_address\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"destination_address\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"allowed_destination_addresses\", \"object\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a []string \"allowed_destination_addresses\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"allowed_sender_addresses\", \"object\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a []string \"allowed_sender_addresses\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\t\"destination_address\" in value &&\n\t\t\"allowed_destination_addresses\" in value\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have either a \"destination_address\" or \"allowed_destination_addresses\" field, but not both.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"allowed_sender_addresses\",\n\t\t\"allowed_destination_addresses\",\n\t\t\"destination_address\",\n\t\t\"name\",\n\t\t\"binding\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateQueueBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"queue\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tif (\n\t\t!validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\t\"binding\",\n\t\t\t\"queue\",\n\t\t\t\"delivery_delay\",\n\t\t\t\"remote\",\n\t\t])\n\t) {\n\t\treturn false;\n\t}\n\n\t// Queue bindings must have a binding. The queue can be provisioned at deploy time.\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (\n\t\t!isOptionalProperty(value, \"queue\", \"string\") ||\n\t\t(hasProperty(value, \"queue\") && value.queue === \"\")\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should optionally have a non-empty string \"queue\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tconst options: {\n\t\tkey: string;\n\t\ttype: \"number\" | \"string\" | \"boolean\";\n\t}[] = [{ key: \"delivery_delay\", type: \"number\" }];\n\tfor (const optionalOpt of options) {\n\t\tif (!isOptionalProperty(value, optionalOpt.key, optionalOpt.type)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" should, optionally, have a ${optionalOpt.type} \"${\n\t\t\t\t\toptionalOpt.key\n\t\t\t\t}\" field but got ${JSON.stringify(value)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\t}\n\n\t// Warn if delivery_delay is set, as it is deprecated and has no effect\n\tif (\n\t\thasProperty(value, \"delivery_delay\") &&\n\t\tvalue.delivery_delay !== undefined\n\t) {\n\t\tdiagnostics.warnings.push(\n\t\t\t`The \"delivery_delay\" field in \"${field}\" is deprecated and has no effect. ` +\n\t\t\t\t`Queue-level settings should be configured using \"wrangler queues update\" instead. ` +\n\t\t\t\t`This setting will be removed in a future version.`\n\t\t);\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nconst validateR2Binding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"r2_buckets\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// R2 bindings must have a binding and bucket_name.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\t!isOptionalProperty(value, \"bucket_name\", \"string\") ||\n\t\t(value.bucket_name !== undefined && value.bucket_name.length === 0)\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"bucket_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\tisValid &&\n\t\thasProperty(value, \"bucket_name\") &&\n\t\t!isValidR2BucketName(value.bucket_name)\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`${field}.bucket_name=${JSON.stringify(value.bucket_name)} is invalid. ${bucketFormatMessage}`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"preview_bucket_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"preview_bucket_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\tisValid &&\n\t\thasProperty(value, \"preview_bucket_name\") &&\n\t\t!isValidR2BucketName(value.preview_bucket_name)\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`${field}.preview_bucket_name= ${JSON.stringify(value.preview_bucket_name)} is invalid. ${bucketFormatMessage}`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"jurisdiction\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"jurisdiction\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tif (hasProperty(value, \"local_dev\")) {\n\t\tconst localDev = value.local_dev;\n\t\tif (typeof localDev !== \"object\" || localDev === null) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings should, optionally, have an object \"local_dev\" field but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t} else {\n\t\t\texperimental(\n\t\t\t\tdiagnostics,\n\t\t\t\t{ local_dev: localDev } as {\n\t\t\t\t\tlocal_dev: { experimental_s3_credentials?: unknown };\n\t\t\t\t},\n\t\t\t\t\"local_dev.experimental_s3_credentials\"\n\t\t\t);\n\t\t\tif (hasProperty(localDev, \"experimental_s3_credentials\")) {\n\t\t\t\tconst credentials = localDev.experimental_s3_credentials;\n\t\t\t\tif (\n\t\t\t\t\ttypeof credentials !== \"object\" ||\n\t\t\t\t\tcredentials === null ||\n\t\t\t\t\t!isRequiredProperty(credentials, \"accessKeyId\", \"string\") ||\n\t\t\t\t\t!isRequiredProperty(credentials, \"secretAccessKey\", \"string\")\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"${field}\" bindings should, optionally, have a \"local_dev.experimental_s3_credentials\" field with string \"accessKeyId\" and \"secretAccessKey\" fields, but got ${JSON.stringify(\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.local_dev`,\n\t\t\t\tObject.keys(localDev),\n\t\t\t\t[\"experimental_s3_credentials\"]\n\t\t\t);\n\t\t}\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"bucket_name\",\n\t\t\"preview_bucket_name\",\n\t\t\"jurisdiction\",\n\t\t\"remote\",\n\t\t\"local_dev\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateD1Binding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"d1_databases\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\n\t// D1 databases must have a binding and either a database_name or database_id.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"database_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a \"database_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"preview_database_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"preview_database_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"migrations_pattern\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"migrations_pattern\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"database_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"database_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"migrations_dir\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"migrations_dir\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"migrations_table\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"migrations_table\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"database_internal_env\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"database_internal_env\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"database_id\",\n\t\t\"database_internal_env\",\n\t\t\"database_name\",\n\t\t\"migrations_dir\",\n\t\t\"migrations_pattern\",\n\t\t\"migrations_table\",\n\t\t\"preview_database_id\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateVectorizeBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"vectorize\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Vectorize bindings must have a binding and a project.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"index_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have an \"index_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"index_name\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateAISearchNamespaceBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"ai_search_namespaces\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"namespace\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a \"namespace\" field but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"namespace\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateAISearchBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"ai_search\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"instance_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have an \"instance_name\" field but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"instance_name\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateAgentMemoryBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"agent_memory\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"namespace\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a \"namespace\" field but got ${JSON.stringify(value)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"namespace\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateHyperdriveBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"hyperdrive\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Hyperdrive bindings must have a binding and a project.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a \"id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"id\",\n\t\t\"localConnectionString\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateVpcServiceBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"vpc_services\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// VPC service bindings must have a binding and a service_id.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"service_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a \"service_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"service_id\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateVpcNetworkBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"vpc_networks\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// VPC network bindings must have a binding and exactly one of tunnel_id or network_id.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tconst hasTunnelId = hasProperty(value, \"tunnel_id\");\n\tconst hasNetworkId = hasProperty(value, \"network_id\");\n\tif (hasTunnelId && hasNetworkId) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have either a \"tunnel_id\" or \"network_id\", but not both.`\n\t\t);\n\t\tisValid = false;\n\t} else if (!hasTunnelId && !hasNetworkId) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have either a \"tunnel_id\" or \"network_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t} else if (hasTunnelId && typeof value.tunnel_id !== \"string\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"tunnel_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t} else if (hasNetworkId && typeof value.network_id !== \"string\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"network_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"tunnel_id\",\n\t\t\"network_id\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\n/**\n * Check that bindings whose names might conflict, don't.\n *\n * We don't want to have, for example, a KV namespace named \"DATA\"\n * and a Durable Object also named \"DATA\". Then it would be ambiguous\n * what exactly would live at `env.DATA` (or in the case of service-workers,\n * the `DATA` global).\n */\nconst validateBindingsHaveUniqueNames = (\n\tdiagnostics: Diagnostics,\n\tconfig: Partial<Config>\n): boolean => {\n\tlet hasDuplicates = false;\n\n\tconst bindingNamesArray = Object.entries(friendlyBindingNames) as [\n\t\tConfigBindingFieldName,\n\t\tstring,\n\t][];\n\n\tconst bindingsGroupedByType = Object.fromEntries(\n\t\tbindingNamesArray.map(([bindingType, binding]) => [\n\t\t\tbinding,\n\t\t\tgetBindingNames(\n\t\t\t\tbindingType === \"queues\"\n\t\t\t\t\t? config[bindingType]?.producers\n\t\t\t\t\t: config[bindingType]\n\t\t\t),\n\t\t])\n\t);\n\n\t// Add secrets to binding name validation (secrets is not a CfWorkerInit binding type,\n\t// but we want to validate that secret names don't conflict with other bindings)\n\tbindingsGroupedByType[\"Secret\"] = config.secrets?.required ?? [];\n\n\tconst bindingsGroupedByName: Record<string, string[]> = {};\n\n\tfor (const bindingType in bindingsGroupedByType) {\n\t\tconst bindingNames = bindingsGroupedByType[bindingType];\n\n\t\tfor (const bindingName of bindingNames) {\n\t\t\tif (!(bindingName in bindingsGroupedByName)) {\n\t\t\t\tbindingsGroupedByName[bindingName] = [];\n\t\t\t}\n\n\t\t\tif (bindingName === \"ASSETS\" && isPagesConfig(config)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The name 'ASSETS' is reserved in Pages projects. Please use a different name for your ${bindingType} binding.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbindingsGroupedByName[bindingName].push(bindingType);\n\t\t}\n\t}\n\n\tfor (const bindingName in bindingsGroupedByName) {\n\t\tconst bindingTypes = bindingsGroupedByName[bindingName];\n\t\tif (bindingTypes.length < 2) {\n\t\t\t// there's only one (or zero) binding(s) with this name, which is fine, actually\n\t\t\tcontinue;\n\t\t}\n\n\t\thasDuplicates = true;\n\n\t\t// there's two types of duplicates we want to look for:\n\t\t// - bindings with the same name of the same type (e.g. two Durable Objects both named \"OBJ\")\n\t\t// - bindings with the same name of different types (a KV namespace and DO both named \"DATA\")\n\n\t\tconst sameType = bindingTypes\n\t\t\t// filter once to find duplicate binding types\n\t\t\t.filter((type, i) => bindingTypes.indexOf(type) !== i)\n\t\t\t// filter twice to only get _unique_ duplicate binding types\n\t\t\t.filter(\n\t\t\t\t(type, i, duplicateBindingTypes) =>\n\t\t\t\t\tduplicateBindingTypes.indexOf(type) === i\n\t\t\t);\n\n\t\tconst differentTypes = bindingTypes.filter(\n\t\t\t(type, i) => bindingTypes.indexOf(type) === i\n\t\t);\n\n\t\tif (differentTypes.length > 1) {\n\t\t\t// we have multiple different types using the same name\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`${bindingName} assigned to ${ENGLISH.format(differentTypes)} bindings.`\n\t\t\t);\n\t\t}\n\n\t\tsameType.forEach((bindingType) => {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`${bindingName} assigned to multiple ${bindingType} bindings.`\n\t\t\t);\n\t\t});\n\t}\n\n\tif (hasDuplicates) {\n\t\tconst problem =\n\t\t\t\"Bindings must have unique names, so that they can all be referenced in the worker.\";\n\t\tconst resolution = \"Please change your bindings to have unique names.\";\n\t\tdiagnostics.errors.push(`${problem}\\n${resolution}`);\n\t}\n\n\treturn !hasDuplicates;\n};\n\nconst validateServiceBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"services\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Service bindings must have a binding, a service, optionally an environment, and, optionally an entrypoint.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"service\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"service\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"environment\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"environment\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"entrypoint\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"entrypoint\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (hasProperty(value, \"dev\") && value.dev !== undefined) {\n\t\tif (\n\t\t\ttypeof value.dev !== \"object\" ||\n\t\t\tvalue.dev === null ||\n\t\t\tArray.isArray(value.dev)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings should have an object \"dev\" field but got ${JSON.stringify(\n\t\t\t\t\tvalue.dev\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t} else {\n\t\t\tif (\n\t\t\t\t!hasProperty(value.dev, \"plugin\") ||\n\t\t\t\ttypeof value.dev.plugin !== \"object\" ||\n\t\t\t\tvalue.dev.plugin === null ||\n\t\t\t\tArray.isArray(value.dev.plugin)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}.dev\" should have an object \"plugin\" field but got ${JSON.stringify(\n\t\t\t\t\t\t(value.dev as { plugin?: unknown }).plugin\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else {\n\t\t\t\tif (!isRequiredProperty(value.dev.plugin, \"package\", \"string\")) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"${field}.dev.plugin\" should have a string \"package\" field but got ${JSON.stringify(\n\t\t\t\t\t\t\t(value.dev.plugin as { package?: unknown }).package\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t\tif (!isRequiredProperty(value.dev.plugin, \"name\", \"string\")) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"${field}.dev.plugin\" should have a string \"name\" field but got ${JSON.stringify(\n\t\t\t\t\t\t\t(value.dev.plugin as { name?: unknown }).name\n\t\t\t\t\t\t)}.`\n\t\t\t\t\t);\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\thasProperty(value.dev, \"options\") &&\n\t\t\t\tvalue.dev.options !== undefined &&\n\t\t\t\t(typeof value.dev.options !== \"object\" ||\n\t\t\t\t\tvalue.dev.options === null ||\n\t\t\t\t\tArray.isArray(value.dev.options))\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${field}.dev.options\" should be an object but got ${JSON.stringify(\n\t\t\t\t\t\tvalue.dev.options\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t}\n\t\tif ((value as { remote?: unknown }).remote === true) {\n\t\t\tdiagnostics.warnings.push(\n\t\t\t\t`\"${field}\" binding has both \"dev\" and \"remote\" set; \"remote\" is ignored when \"dev\" is present and the binding is routed through the local Miniflare plugin.`\n\t\t\t);\n\t\t}\n\t}\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\treturn isValid;\n};\n\nconst validateAnalyticsEngineBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"analytics_engine\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Service bindings must have a binding and optional dataset.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\t!isOptionalProperty(value, \"dataset\", \"string\") ||\n\t\t(value as { dataset: string }).dataset?.length === 0\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should, optionally, have a string \"dataset\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"dataset\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateWorkerNamespaceBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" binding should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Worker namespace bindings must have a binding. The namespace can be provisioned at deploy time.\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"namespace\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should optionally have a string \"namespace\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (hasProperty(value, \"outbound\")) {\n\t\tif (\n\t\t\t!validateWorkerNamespaceOutbound(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.outbound`,\n\t\t\t\tvalue.outbound ?? {}\n\t\t\t)\n\t\t) {\n\t\t\tdiagnostics.errors.push(`\"${field}\" has an invalid outbound definition.`);\n\t\t\tisValid = false;\n\t\t}\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nfunction validateWorkerNamespaceOutbound(\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: DispatchNamespaceOutbound\n): boolean {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\n\t// Namespace outbounds need at least a service name\n\tisValid =\n\t\tisValid &&\n\t\tvalidateRequiredProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"service\",\n\t\t\tvalue.service,\n\t\t\t\"string\"\n\t\t);\n\tisValid =\n\t\tisValid &&\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"environment\",\n\t\t\tvalue.environment,\n\t\t\t\"string\"\n\t\t);\n\tisValid =\n\t\tisValid &&\n\t\tvalidateOptionalTypedArray(\n\t\t\tdiagnostics,\n\t\t\t`${field}.parameters`,\n\t\t\tvalue.parameters,\n\t\t\t\"string\"\n\t\t);\n\n\treturn isValid;\n}\n\nconst validateMTlsCertificateBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"mtls_certificates\" bindings should be objects, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (\n\t\t!isRequiredProperty(value, \"certificate_id\", \"string\") ||\n\t\t(value as { certificate_id: string }).certificate_id.length === 0\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings should have a string \"certificate_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"certificate_id\",\n\t\t\"remote\",\n\t]);\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nfunction validateQueues(envName: string): ValidatorFn {\n\treturn (diagnostics, field, value, config) => {\n\t\tif (value === undefined) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (typeof value !== \"object\" || Array.isArray(value) || value === null) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tif (\n\t\t\t!validateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\tfieldPath,\n\t\t\t\tObject.keys(value),\n\t\t\t\t[\"consumers\", \"producers\"]\n\t\t\t)\n\t\t) {\n\t\t\tisValid = false;\n\t\t}\n\n\t\tif (hasProperty(value, \"consumers\")) {\n\t\t\tconst consumers = value.consumers;\n\t\t\tif (!Array.isArray(consumers)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The field \"${fieldPath}.consumers\" should be an array but got ${JSON.stringify(\n\t\t\t\t\t\tconsumers\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < consumers.length; i++) {\n\t\t\t\t\tconst consumer = consumers[i];\n\t\t\t\t\tconst consumerPath = `${fieldPath}.consumers[${i}]`;\n\t\t\t\t\tif (!validateConsumer(diagnostics, consumerPath, consumer, config)) {\n\t\t\t\t\t\tisValid = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasProperty(value, \"producers\")) {\n\t\t\tif (\n\t\t\t\t!validateBindingArray(envName, validateQueueBinding)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.producers`,\n\t\t\t\t\tvalue.producers,\n\t\t\t\t\tconfig\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t}\n\n\t\treturn isValid;\n\t};\n}\n\nconst validateConsumer: ValidatorFn = (diagnostics, field, value, _config) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be a objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\tif (\n\t\t!validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\t\"queue\",\n\t\t\t\"type\",\n\t\t\t\"max_batch_size\",\n\t\t\t\"max_batch_timeout\",\n\t\t\t\"max_retries\",\n\t\t\t\"dead_letter_queue\",\n\t\t\t\"max_concurrency\",\n\t\t\t\"visibility_timeout_ms\",\n\t\t\t\"retry_delay\",\n\t\t])\n\t) {\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"queue\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should have a string \"queue\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t}\n\n\t// Validate that consumer type, if specified, is \"worker\".\n\t// Non-worker consumer types (e.g., \"http_pull\") cannot be configured via\n\t// wrangler config. Use `wrangler queues consumer http add` instead.\n\tif (\"type\" in value && value.type !== undefined && value.type !== \"worker\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}.type\" has an invalid value \"${value.type}\". Only \"worker\" consumers can be configured in your Wrangler configuration.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tconst options: {\n\t\tkey: string;\n\t\ttype: \"number\" | \"string\" | \"boolean\";\n\t}[] = [\n\t\t{ key: \"type\", type: \"string\" },\n\t\t{ key: \"max_batch_size\", type: \"number\" },\n\t\t{ key: \"max_batch_timeout\", type: \"number\" },\n\t\t{ key: \"max_retries\", type: \"number\" },\n\t\t{ key: \"dead_letter_queue\", type: \"string\" },\n\t\t{ key: \"max_concurrency\", type: \"number\" },\n\t\t{ key: \"visibility_timeout_ms\", type: \"number\" },\n\t\t{ key: \"retry_delay\", type: \"number\" },\n\t];\n\tfor (const optionalOpt of options) {\n\t\tif (!isOptionalProperty(value, optionalOpt.key, optionalOpt.type)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" should, optionally, have a ${optionalOpt.type} \"${\n\t\t\t\t\toptionalOpt.key\n\t\t\t\t}\" field but got ${JSON.stringify(value)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\t}\n\n\treturn isValid;\n};\n\n/**\n * Validate that the field is an array of `connect` handler definitions, each with a\n * unique protocol/port combination.\n */\nfunction validateConnectHandlers(envName: string): ValidatorFn {\n\treturn (diagnostics, field, value, config) => {\n\t\tif (value === undefined) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst fieldPath =\n\t\t\tconfig === undefined ? `${field}` : `env.${envName}.${field}`;\n\n\t\tif (!Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${fieldPath}\" should be an array but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tlet isValid = true;\n\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\tif (\n\t\t\t\t!validateConnectHandler(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${fieldPath}[${i}]`,\n\t\t\t\t\tvalue[i],\n\t\t\t\t\tconfig\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t}\n\n\t\t// Reject duplicate protocol+port combinations within the same worker.\n\t\tconst firstIndexByKey = new Map<string, number>();\n\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\tconst handler = value[i];\n\t\t\tif (\n\t\t\t\ttypeof handler !== \"object\" ||\n\t\t\t\thandler === null ||\n\t\t\t\ttypeof (handler as { port?: unknown }).port !== \"number\" ||\n\t\t\t\ttypeof (handler as { protocol?: unknown }).protocol !== \"string\"\n\t\t\t) {\n\t\t\t\t// Already reported by `validateConnectHandler` above.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst { protocol, port } = handler as {\n\t\t\t\tprotocol: string;\n\t\t\t\tport: number;\n\t\t\t};\n\t\t\tconst key = `${protocol}:${port}`;\n\t\t\tconst firstIndex = firstIndexByKey.get(key);\n\t\t\tif (firstIndex !== undefined) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"${fieldPath}[${i}]\" has the same \"protocol\" (${protocol}) and \"port\" (${port}) as \"${fieldPath}[${firstIndex}]\". Each entry in \"connect\" must use a unique protocol/port combination.`\n\t\t\t\t);\n\t\t\t\tisValid = false;\n\t\t\t} else {\n\t\t\t\tfirstIndexByKey.set(key, i);\n\t\t\t}\n\t\t}\n\n\t\treturn isValid;\n\t};\n}\n\n/**\n * Check that the given field is a valid \"connect\" handler object.\n */\nconst validateConnectHandler: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet isValid = true;\n\tif (\n\t\t!validateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\t\"protocol\",\n\t\t\t\"port\",\n\t\t\t\"address\",\n\t\t])\n\t) {\n\t\tisValid = false;\n\t}\n\n\tif (\"protocol\" in value && value.protocol !== \"tcp\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should have a \"protocol\" field of \"tcp\" but got ${JSON.stringify(\n\t\t\t\tvalue.protocol\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t} else if (!(\"protocol\" in value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should have a \"protocol\" field of \"tcp\" but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"port\", \"number\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should have a number \"port\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t} else if (\n\t\t!Number.isInteger((value as { port: number }).port) ||\n\t\t(value as { port: number }).port < 1 ||\n\t\t(value as { port: number }).port > 65535\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should have an integer \"port\" field between 1 and 65535 but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isOptionalProperty(value, \"address\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should, optionally, have a string \"address\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nconst validateCompatibilityDate: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"string\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`Expected \"${field}\" to be of type string but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn isValidDateTimeStringFormat(diagnostics, field, value);\n};\n\nconst validatePipelineBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"pipeline\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Pipeline bindings must have a binding and a stream (or deprecated pipeline).\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tconst hasStream = isOptionalProperty(value, \"stream\", \"string\");\n\tconst hasPipeline = isOptionalProperty(value, \"pipeline\", \"string\");\n\tconst v = value as Record<string, unknown>;\n\n\tif (hasStream && v.stream) {\n\t\t// \"stream\" is the primary field — use it as-is\n\t} else if (hasPipeline && v.pipeline) {\n\t\t// Deprecated \"pipeline\" field — normalize to \"stream\"\n\t\tdiagnostics.warnings.push(\n\t\t\t`The \"pipeline\" field in \"${field}\" bindings is deprecated. Use \"stream\" instead.`\n\t\t);\n\t} else {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"stream\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"stream\",\n\t\t\"pipeline\",\n\t\t\"remote\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateSecretsStoreSecretBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"secrets_store_secrets\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\t// Secrets store bindings must have a binding, store_id, and secret_name\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"store_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"store_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"secret_name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"secret_name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"store_id\",\n\t\t\"secret_name\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateArtifactsBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"artifacts\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (!isRequiredProperty(value, \"namespace\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"namespace\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"namespace\",\n\t\t\"remote\",\n\t]);\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nconst validateHelloWorldBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"unsafe_hello_world\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"enable_timer\", \"boolean\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a boolean \"enable_timer\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"enable_timer\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateFlagshipBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"flagship\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isOptionalProperty(value, \"app_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings may have a string \"app_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t\t\"app_id\",\n\t\t\"remote\",\n\t]);\n\n\tif (!isRemoteValid(value, field, diagnostics)) {\n\t\tisValid = false;\n\t}\n\n\treturn isValid;\n};\n\nconst validateWorkerLoaderBinding: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue\n) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"worker_loader\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"binding\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"binding\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"binding\",\n\t]);\n\n\treturn isValid;\n};\n\nconst validateRateLimitBinding: ValidatorFn = (diagnostics, field, value) => {\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"ratelimits\" bindings should be objects, but got ${JSON.stringify(value)}`\n\t\t);\n\t\treturn false;\n\t}\n\tlet isValid = true;\n\tif (!isRequiredProperty(value, \"name\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"name\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\tif (!isRequiredProperty(value, \"namespace_id\", \"string\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a string \"namespace_id\" field but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t}\n\n\tif (\n\t\t!hasProperty(value, \"simple\") ||\n\t\ttypeof value.simple !== \"object\" ||\n\t\tvalue.simple === null\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" bindings must have a \"simple\" configuration object but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}.`\n\t\t);\n\t\tisValid = false;\n\t} else {\n\t\tif (!isRequiredProperty(value.simple, \"limit\", \"number\")) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings \"simple.limit\" must be a number but got ${JSON.stringify(\n\t\t\t\t\tvalue.simple\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\t\tif (!isRequiredProperty(value.simple, \"period\", \"number\")) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings \"simple.period\" is required and must be a number but got ${JSON.stringify(\n\t\t\t\t\tvalue.simple\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t} else if (![10, 60].includes(value.simple.period)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"${field}\" bindings \"simple.period\" must be either 10 or 60 but got ${JSON.stringify(\n\t\t\t\t\tvalue.simple.period\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tisValid = false;\n\t\t}\n\n\t\tvalidateAdditionalProperties(\n\t\t\tdiagnostics,\n\t\t\t`${field}.simple`,\n\t\t\tObject.keys(value.simple),\n\t\t\t[\"limit\", \"period\"]\n\t\t);\n\t}\n\n\tvalidateAdditionalProperties(diagnostics, field, Object.keys(value), [\n\t\t\"name\",\n\t\t\"namespace_id\",\n\t\t\"simple\",\n\t]);\n\n\treturn isValid;\n};\n\nfunction normalizeAndValidateLimits(\n\tdiagnostics: Diagnostics,\n\ttopLevelEnv: Environment | undefined,\n\trawEnv: RawEnvironment\n): Config[\"limits\"] {\n\tif (rawEnv.limits) {\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\t\"limits\",\n\t\t\t\"cpu_ms\",\n\t\t\trawEnv.limits.cpu_ms,\n\t\t\t\"number\"\n\t\t);\n\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\t\"limits\",\n\t\t\t\"subrequests\",\n\t\t\trawEnv.limits.subrequests,\n\t\t\t\"number\"\n\t\t);\n\t}\n\n\treturn inheritable(\n\t\tdiagnostics,\n\t\ttopLevelEnv,\n\t\trawEnv,\n\t\t\"limits\",\n\t\t() => true,\n\t\tundefined\n\t);\n}\n\nconst validatePreviewsConfig =\n\t(envName: string, configPath: string | undefined): ValidatorFn =>\n\t(diagnostics, field, value) => {\n\t\tif (value === undefined) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The field \"${field}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\tvalue\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst previews = value as RawEnvironment;\n\t\tlet isValid = true;\n\n\t\tisValid =\n\t\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(previews), [\n\t\t\t\t\"vars\",\n\t\t\t\t\"define\",\n\t\t\t\t\"durable_objects\",\n\t\t\t\t\"workflows\",\n\t\t\t\t\"kv_namespaces\",\n\t\t\t\t\"send_email\",\n\t\t\t\t\"queues\",\n\t\t\t\t\"d1_databases\",\n\t\t\t\t\"r2_buckets\",\n\t\t\t\t\"vectorize\",\n\t\t\t\t\"hyperdrive\",\n\t\t\t\t\"services\",\n\t\t\t\t\"analytics_engine_datasets\",\n\t\t\t\t\"dispatch_namespaces\",\n\t\t\t\t\"mtls_certificates\",\n\t\t\t\t\"tail_consumers\",\n\t\t\t\t\"streaming_tail_consumers\",\n\t\t\t\t\"unsafe\",\n\t\t\t\t\"browser\",\n\t\t\t\t\"ai\",\n\t\t\t\t\"images\",\n\t\t\t\t\"stream\",\n\t\t\t\t\"media\",\n\t\t\t\t\"pipelines\",\n\t\t\t\t\"secrets_store_secrets\",\n\t\t\t\t\"artifacts\",\n\t\t\t\t\"unsafe_hello_world\",\n\t\t\t\t\"flagship\",\n\t\t\t\t\"worker_loaders\",\n\t\t\t\t\"ratelimits\",\n\t\t\t\t\"vpc_services\",\n\t\t\t\t\"version_metadata\",\n\t\t\t\t\"containers\",\n\t\t\t\t\"logpush\",\n\t\t\t\t\"observability\",\n\t\t\t\t\"limits\",\n\t\t\t\t\"cache\",\n\t\t\t]) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateVars(envName)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.vars`,\n\t\t\t\tpreviews.vars,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateDefines(envName)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.define`,\n\t\t\t\tpreviews.define,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingsProperty(envName, validateDurableObjectBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.durable_objects`,\n\t\t\t\tpreviews.durable_objects,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tall(\n\t\t\t\tvalidateBindingArray(envName, validateWorkflowBinding),\n\t\t\t\tvalidateUniqueNameProperty\n\t\t\t)(diagnostics, `${field}.workflows`, previews.workflows, undefined) &&\n\t\t\tisValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateKVBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.kv_namespaces`,\n\t\t\t\tpreviews.kv_namespaces,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateSendEmailBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.send_email`,\n\t\t\t\tpreviews.send_email,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateQueues(envName)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.queues`,\n\t\t\t\tpreviews.queues,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateD1Binding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.d1_databases`,\n\t\t\t\tpreviews.d1_databases,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateR2Binding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.r2_buckets`,\n\t\t\t\tpreviews.r2_buckets,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateVectorizeBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.vectorize`,\n\t\t\t\tpreviews.vectorize,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateHyperdriveBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.hyperdrive`,\n\t\t\t\tpreviews.hyperdrive,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateServiceBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.services`,\n\t\t\t\tpreviews.services,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateAnalyticsEngineBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.analytics_engine_datasets`,\n\t\t\t\tpreviews.analytics_engine_datasets,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateWorkerNamespaceBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.dispatch_namespaces`,\n\t\t\t\tpreviews.dispatch_namespaces,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateMTlsCertificateBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.mtls_certificates`,\n\t\t\t\tpreviews.mtls_certificates,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateTailConsumers(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.tail_consumers`,\n\t\t\t\tpreviews.tail_consumers,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\t// The config APIs don't yet support streaming tail consumers,\n\t\t// so we don't ever send this field up.\n\t\t// Depending on how the streaming tail consumers feature develops,\n\t\t// this field may be removed in the future, but let's validate it anyways for now.\n\t\tisValid =\n\t\t\tvalidateStreamingTailConsumers(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.streaming_tail_consumers`,\n\t\t\t\tpreviews.streaming_tail_consumers,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tif (previews.unsafe !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateUnsafeSettings(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.unsafe`,\n\t\t\t\t\tpreviews.unsafe,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tif (previews.browser !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateNamedSimpleBinding(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.browser`,\n\t\t\t\t\tpreviews.browser,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tif (previews.ai !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateAIBinding(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.ai`,\n\t\t\t\t\tpreviews.ai,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tif (previews.images !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateNamedSimpleBinding(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.images`,\n\t\t\t\t\tpreviews.images,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tif (previews.stream !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateNamedSimpleBinding(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.stream`,\n\t\t\t\t\tpreviews.stream,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tif (previews.media !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateNamedSimpleBinding(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.media`,\n\t\t\t\t\tpreviews.media,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validatePipelineBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.pipelines`,\n\t\t\t\tpreviews.pipelines,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateSecretsStoreSecretBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.secrets_store_secrets`,\n\t\t\t\tpreviews.secrets_store_secrets,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateArtifactsBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.artifacts`,\n\t\t\t\tpreviews.artifacts,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateHelloWorldBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.unsafe_hello_world`,\n\t\t\t\tpreviews.unsafe_hello_world,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateFlagshipBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.flagship`,\n\t\t\t\tpreviews.flagship,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateWorkerLoaderBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.worker_loaders`,\n\t\t\t\tpreviews.worker_loaders,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateRateLimitBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.ratelimits`,\n\t\t\t\tpreviews.ratelimits,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateBindingArray(envName, validateVpcServiceBinding)(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.vpc_services`,\n\t\t\t\tpreviews.vpc_services,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tif (previews.version_metadata !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidateVersionMetadataBinding(envName)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.version_metadata`,\n\t\t\t\t\tpreviews.version_metadata,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tif (previews.containers !== undefined) {\n\t\t\tisValid =\n\t\t\t\tvalidatePreviewsContainers(envName, configPath)(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.containers`,\n\t\t\t\t\tpreviews.containers,\n\t\t\t\t\tundefined\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tisValid =\n\t\t\tisBoolean(diagnostics, `${field}.logpush`, previews.logpush, undefined) &&\n\t\t\tisValid;\n\n\t\tisValid =\n\t\t\tvalidateObservability(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.observability`,\n\t\t\t\tpreviews.observability,\n\t\t\t\tundefined\n\t\t\t) && isValid;\n\n\t\tif (previews.limits) {\n\t\t\tisValid =\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.limits`,\n\t\t\t\t\t\"cpu_ms\",\n\t\t\t\t\tpreviews.limits.cpu_ms,\n\t\t\t\t\t\"number\"\n\t\t\t\t) && isValid;\n\t\t\tisValid =\n\t\t\t\tvalidateOptionalProperty(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\t`${field}.limits`,\n\t\t\t\t\t\"subrequests\",\n\t\t\t\t\tpreviews.limits.subrequests,\n\t\t\t\t\t\"number\"\n\t\t\t\t) && isValid;\n\t\t}\n\n\t\tisValid =\n\t\t\tvalidateCache(diagnostics, `${field}.cache`, previews.cache, undefined) &&\n\t\t\tisValid;\n\n\t\treturn isValid;\n\t};\n\n/**\n * Validate the `migrations` configuration and return the normalized values.\n */\nconst validateMigrations: ValidatorFn = (diagnostics, field, value) => {\n\tconst rawMigrations = value ?? [];\n\tif (!Array.isArray(rawMigrations)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`The optional \"${field}\" field should be an array, but got ${JSON.stringify(\n\t\t\t\trawMigrations\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet valid = true;\n\tfor (let i = 0; i < rawMigrations.length; i++) {\n\t\tconst {\n\t\t\ttag,\n\t\t\tnew_classes,\n\t\t\tnew_sqlite_classes,\n\t\t\trenamed_classes,\n\t\t\tdeleted_classes,\n\t\t\ttransferred_classes,\n\t\t\t...rest\n\t\t} = rawMigrations[i];\n\n\t\tvalid =\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"migrations\",\n\t\t\t\tObject.keys(rest),\n\t\t\t\t[]\n\t\t\t) && valid;\n\n\t\tvalid =\n\t\t\tvalidateRequiredProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t`migrations[${i}]`,\n\t\t\t\t`tag`,\n\t\t\t\ttag,\n\t\t\t\t\"string\"\n\t\t\t) && valid;\n\n\t\tvalid =\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t`migrations[${i}].new_classes`,\n\t\t\t\tnew_classes,\n\t\t\t\t\"string\"\n\t\t\t) && valid;\n\n\t\tvalid =\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t`migrations[${i}].new_sqlite_classes`,\n\t\t\t\tnew_sqlite_classes,\n\t\t\t\t\"string\"\n\t\t\t) && valid;\n\n\t\tif (renamed_classes !== undefined) {\n\t\t\tif (!Array.isArray(renamed_classes)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"migrations[${i}].renamed_classes\" to be an array of \"{from: string, to: string}\" objects but got ${JSON.stringify(\n\t\t\t\t\t\trenamed_classes\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t} else if (\n\t\t\t\trenamed_classes.some(\n\t\t\t\t\t(c) =>\n\t\t\t\t\t\ttypeof c !== \"object\" ||\n\t\t\t\t\t\t!isRequiredProperty(c, \"from\", \"string\") ||\n\t\t\t\t\t\t!isRequiredProperty(c, \"to\", \"string\")\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"migrations[${i}].renamed_classes\" to be an array of \"{from: string, to: string}\" objects but got ${JSON.stringify(\n\t\t\t\t\t\trenamed_classes\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t}\n\n\t\tif (transferred_classes !== undefined) {\n\t\t\tif (!Array.isArray(transferred_classes)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"migrations[${i}].transferred_classes\" to be an array of \"{from: string, from_script: string, to: string}\" objects but got ${JSON.stringify(\n\t\t\t\t\t\ttransferred_classes\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t} else if (\n\t\t\t\ttransferred_classes.some(\n\t\t\t\t\t(c) =>\n\t\t\t\t\t\ttypeof c !== \"object\" ||\n\t\t\t\t\t\t!isRequiredProperty(c, \"from\", \"string\") ||\n\t\t\t\t\t\t!isRequiredProperty(c, \"from_script\", \"string\") ||\n\t\t\t\t\t\t!isRequiredProperty(c, \"to\", \"string\")\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Expected \"migrations[${i}].transferred_classes\" to be an array of \"{from: string, from_script: string, to: string}\" objects but got ${JSON.stringify(\n\t\t\t\t\t\ttransferred_classes\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t}\n\n\t\tvalid =\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t`migrations[${i}].deleted_classes`,\n\t\t\t\tdeleted_classes,\n\t\t\t\t\"string\"\n\t\t\t) && valid;\n\t}\n\treturn valid;\n};\n\nconst VALID_EXPORT_STORAGES = new Set([\"sqlite\", \"legacy-kv\"]);\n\n/**\n * Approximate JavaScript IdentifierName matcher used for tombstone `renamed_to`\n * validation. This catches common mistakes locally; full grammar validation\n * still happens server-side.\n */\nconst JS_IDENTIFIER_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nfunction validateDurableObjectExportProperties(\n\tdiagnostics: Diagnostics,\n\tclassName: string,\n\tdurableObjectExport: DurableObjectExport,\n\tallowedProperties: string[]\n): boolean {\n\tlet valid = true;\n\tfor (const key of Object.keys(durableObjectExport)) {\n\t\tif (!allowedProperties.includes(key)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"exports.${className}.${key}\" is forbidden on state \"${durableObjectExport.state ?? \"created\"}\".`\n\t\t\t);\n\t\t\tvalid = false;\n\t\t}\n\t}\n\tif (!valid) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Allowed properties are: ${ENGLISH.format(allowedProperties)}.`\n\t\t);\n\t}\n\treturn valid;\n}\n\n/**\n * Validate the `container` field of a live Durable Object export. The reference\n * itself is cross-checked against the `containers` array by\n * {@link validateContainerExportLinks}; here we only check the shape and the\n * storage backend, since containers require SQLite-backed Durable Objects.\n *\n * This only covers containers linked from the export side. A container that\n * names its class via `containers[].class_name` is checked against the same\n * storage requirement by {@link validateContainerExportLinks}.\n */\nfunction validateDurableObjectExportContainer(\n\tdiagnostics: Diagnostics,\n\tclassName: string,\n\tdurableObjectExport: {\n\t\tcontainer?: unknown;\n\t\tstorage?: unknown;\n\t}\n): boolean {\n\tif (durableObjectExport.container === undefined) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\ttypeof durableObjectExport.container !== \"string\" ||\n\t\tdurableObjectExport.container === \"\"\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"exports.${className}.container\" must be a non-empty string naming a container in the \"containers\" array, but got ${JSON.stringify(durableObjectExport.container)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tif (durableObjectExport.storage === \"legacy-kv\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"exports.${className}.container\" requires \"storage\" to be \"sqlite\". Containers are not supported on Durable Objects using the \"legacy-kv\" storage backend.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Validate a Durable Object `exports` configuration.\n *\n * - `type` carries the export kind and must be `\"durable-object\"`.\n * - `state` carries the lifecycle: `\"created\"`, `\"deleted\"`, `\"renamed\"`,\n * `\"transferred\"`, or `\"expecting-transfer\"`.\n * - Depending on `state`, some properties are required or forbidden.\n *\n * Deeper validation of `renamed_to` and `transferred_to` happens in the API.\n */\nfunction validateDurableObjectExport(\n\tdiagnostics: Diagnostics,\n\tclassName: string,\n\tdurableObjectExport: DurableObjectExport\n): boolean {\n\tlet valid = true;\n\n\tif (className === \"\") {\n\t\tdiagnostics.errors.push(`\"export\" keys cannot be the empty string.`);\n\t\tvalid = false;\n\t}\n\n\tswitch (durableObjectExport.state) {\n\t\tcase undefined:\n\t\tcase \"created\": {\n\t\t\tif (\n\t\t\t\ttypeof durableObjectExport.storage !== \"string\" ||\n\t\t\t\t!VALID_EXPORT_STORAGES.has(durableObjectExport.storage)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"exports.${className}.storage\" is required for state \"created\" and must be one of ${ENGLISH.format(VALID_EXPORT_STORAGES)}, but got ${JSON.stringify(durableObjectExport.storage)}`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportContainer(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport\n\t\t\t\t) && valid;\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport,\n\t\t\t\t\t[\"type\", \"state\", \"storage\", \"container\"]\n\t\t\t\t) && valid;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"deleted\": {\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport,\n\t\t\t\t\t[\"type\", \"state\"]\n\t\t\t\t) && valid;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"renamed\": {\n\t\t\tif (\n\t\t\t\ttypeof durableObjectExport.renamed_to !== \"string\" ||\n\t\t\t\tdurableObjectExport.renamed_to === \"\"\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"exports.${className}.renamed_to\" is required for state \"renamed\" and must be a non-empty string.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t} else {\n\t\t\t\tif (!JS_IDENTIFIER_RE.test(durableObjectExport.renamed_to)) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"exports.${className}.renamed_to\" must be a valid JavaScript identifier (got \"${durableObjectExport.renamed_to}\").`\n\t\t\t\t\t);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t\tif (durableObjectExport.renamed_to === className) {\n\t\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t\t`\"exports.${className}.renamed_to\" cannot equal the source class name \"${className}\".`\n\t\t\t\t\t);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport,\n\t\t\t\t\t[\"type\", \"state\", \"renamed_to\"]\n\t\t\t\t) && valid;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"transferred\": {\n\t\t\tif (\n\t\t\t\ttypeof durableObjectExport.transferred_to !== \"string\" ||\n\t\t\t\tdurableObjectExport.transferred_to === \"\"\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"exports.${className}.transferred_to\" is required for state \"transferred\" and must be a non-empty string.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport,\n\t\t\t\t\t[\"type\", \"state\", \"transferred_to\"]\n\t\t\t\t) && valid;\n\t\t\tbreak;\n\t\t}\n\t\tcase \"expecting-transfer\": {\n\t\t\tif (\n\t\t\t\ttypeof durableObjectExport.storage !== \"string\" ||\n\t\t\t\t!VALID_EXPORT_STORAGES.has(durableObjectExport.storage)\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"exports.${className}.storage\" is required for state \"expecting-transfer\" and must be one of ${ENGLISH.format(VALID_EXPORT_STORAGES)}, but got ${JSON.stringify(durableObjectExport.storage)}`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t\tif (\n\t\t\t\ttypeof durableObjectExport.transfer_from !== \"string\" ||\n\t\t\t\tdurableObjectExport.transfer_from === \"\"\n\t\t\t) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`\"exports.${className}.transfer_from\" is required for state \"expecting-transfer\" and must be a non-empty string.`\n\t\t\t\t);\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportContainer(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport\n\t\t\t\t) && valid;\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExportProperties(\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tclassName,\n\t\t\t\t\tdurableObjectExport,\n\t\t\t\t\t[\"type\", \"state\", \"storage\", \"transfer_from\", \"container\"]\n\t\t\t\t) && valid;\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\t// Need to cast here because we have exhausted all the possible values of `state` in the switch above.\n\t\t\tconst state = (durableObjectExport as { state: string }).state;\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"exports.${className}.state\" must be one of \"created\", \"deleted\", \"renamed\", \"transferred\", or \"expecting-transfer\" but got ${JSON.stringify(state)}.`\n\t\t\t);\n\t\t\tvalid = false;\n\t\t}\n\t}\n\treturn valid;\n}\n\nfunction validateWorkerExport(\n\tdiagnostics: Diagnostics,\n\texportName: string,\n\tworkerExport: { cache?: unknown } & Record<string, unknown>\n): boolean {\n\tlet valid = true;\n\n\tvalid =\n\t\tvalidateAdditionalProperties(\n\t\t\tdiagnostics,\n\t\t\t`exports.${exportName}`,\n\t\t\tObject.keys(workerExport),\n\t\t\t[\"type\", \"cache\"]\n\t\t) && valid;\n\n\tvalid =\n\t\tvalidateWorkerExportCache(\n\t\t\tdiagnostics,\n\t\t\t`exports.${exportName}.cache`,\n\t\t\tworkerExport.cache\n\t\t) && valid;\n\n\treturn valid;\n}\n\nfunction validateWorkerExportCache(\n\tdiagnostics: Diagnostics,\n\tfield: string,\n\tvalue: unknown\n): boolean {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst cache = value as Record<string, unknown>;\n\tlet valid = true;\n\n\tvalid =\n\t\tvalidateRequiredProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"enabled\",\n\t\t\tcache.enabled,\n\t\t\t\"boolean\"\n\t\t) && valid;\n\n\tvalid =\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(cache), [\n\t\t\t\"enabled\",\n\t\t]) && valid;\n\n\treturn valid;\n}\n\nconst validateExports: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined || value === null) {\n\t\treturn true;\n\t}\n\tif (typeof value !== \"object\" || Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`The optional \"${field}\" field should be an object keyed by class name, but got ${JSON.stringify(\n\t\t\t\tvalue\n\t\t\t)}`\n\t\t);\n\t\treturn false;\n\t}\n\n\tlet valid = true;\n\tfor (const [exportName, exportConfig] of Object.entries(value)) {\n\t\tif (typeof exportConfig !== \"object\" || exportConfig === null) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"exports.${exportName}\" should be an object but got ${JSON.stringify(\n\t\t\t\t\texportConfig\n\t\t\t\t)}.`\n\t\t\t);\n\t\t\tvalid = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (exportConfig.type === \"durable-object\") {\n\t\t\tvalid =\n\t\t\t\tvalidateDurableObjectExport(diagnostics, exportName, exportConfig) &&\n\t\t\t\tvalid;\n\t\t} else if (exportConfig.type === \"worker\") {\n\t\t\tvalid =\n\t\t\t\tvalidateWorkerExport(diagnostics, exportName, exportConfig) && valid;\n\t\t} else {\n\t\t\tvalid = false;\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"exports.${exportName}.type\" must be \"durable-object\" or \"worker\", but got ${JSON.stringify(exportConfig.type)}.`\n\t\t\t);\n\t\t}\n\t}\n\n\treturn valid;\n};\n\nconst validateObservability: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst val = value as Observability;\n\tlet isValid = true;\n\n\t/**\n\t * One of observability.enabled, observability.logs.enabled, observability.traces.enabled must be defined\n\t */\n\tisValid =\n\t\tvalidateAtLeastOnePropertyRequired(diagnostics, field, [\n\t\t\t{\n\t\t\t\tkey: \"enabled\",\n\t\t\t\tvalue: val.enabled,\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"logs.enabled\",\n\t\t\t\tvalue: val.logs?.enabled,\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"traces.enabled\",\n\t\t\t\tvalue: val.traces?.enabled,\n\t\t\t\ttype: \"boolean\",\n\t\t\t},\n\t\t]) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"head_sampling_rate\",\n\t\t\tval.head_sampling_rate,\n\t\t\t\"number\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"redact_query_string\",\n\t\t\tval.redact_query_string,\n\t\t\t\"boolean\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(diagnostics, field, \"logs\", val.logs, \"object\") &&\n\t\tisValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"traces\",\n\t\t\tval.traces,\n\t\t\t\"object\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(val), [\n\t\t\t\"enabled\",\n\t\t\t\"head_sampling_rate\",\n\t\t\t\"redact_query_string\",\n\t\t\t\"logs\",\n\t\t\t\"traces\",\n\t\t]) && isValid;\n\n\t/**\n\t * Validate the optional nested logs configuration\n\t */\n\tif (typeof val.logs === \"object\") {\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"logs.enabled\",\n\t\t\t\tval.logs.enabled,\n\t\t\t\t\"boolean\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"logs.head_sampling_rate\",\n\t\t\t\tval.logs.head_sampling_rate,\n\t\t\t\t\"number\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"logs.invocation_logs\",\n\t\t\t\tval.logs.invocation_logs,\n\t\t\t\t\"boolean\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"logs.destinations\",\n\t\t\t\tval.logs?.destinations,\n\t\t\t\t\"string\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"logs.persist\",\n\t\t\t\tval.logs.persist,\n\t\t\t\t\"boolean\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(val.logs), [\n\t\t\t\t\"enabled\",\n\t\t\t\t\"head_sampling_rate\",\n\t\t\t\t\"invocation_logs\",\n\t\t\t\t\"destinations\",\n\t\t\t\t\"persist\",\n\t\t\t]) && isValid;\n\t}\n\n\t/**\n\t * Validate the optional nested traces configuration\n\t */\n\tif (typeof val.traces === \"object\") {\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"traces.enabled\",\n\t\t\t\tval.traces.enabled,\n\t\t\t\t\"boolean\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"traces.head_sampling_rate\",\n\t\t\t\tval.traces.head_sampling_rate,\n\t\t\t\t\"number\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalTypedArray(\n\t\t\t\tdiagnostics,\n\t\t\t\t\"traces.destinations\",\n\t\t\t\tval.traces?.destinations,\n\t\t\t\t\"string\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\t\"traces.persist\",\n\t\t\t\tval.traces.persist,\n\t\t\t\t\"boolean\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\tfield,\n\t\t\t\tObject.keys(val.traces),\n\t\t\t\t[\"enabled\", \"head_sampling_rate\", \"destinations\", \"persist\"]\n\t\t\t) && isValid;\n\t}\n\n\tvalidateHeadSamplingRate(\n\t\tdiagnostics,\n\t\tfield,\n\t\t\"head_sampling_rate\",\n\t\tval?.head_sampling_rate\n\t);\n\tvalidateHeadSamplingRate(\n\t\tdiagnostics,\n\t\tfield,\n\t\t\"logs.head_sampling_rate\",\n\t\tval?.logs?.head_sampling_rate\n\t);\n\tvalidateHeadSamplingRate(\n\t\tdiagnostics,\n\t\tfield,\n\t\t\"traces.head_sampling_rate\",\n\t\tval?.traces?.head_sampling_rate\n\t);\n\n\treturn isValid;\n};\n\nfunction validateHeadSamplingRate(\n\tdiagnostics: Diagnostics,\n\tcontainer: string,\n\tkey: string,\n\tsamplingRate: number | undefined\n) {\n\tif (samplingRate && (samplingRate < 0 || samplingRate > 1)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${container}.${key}\" must be a value between 0 and 1.`\n\t\t);\n\t}\n}\n\nconst validateAccess: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst val = value as Access;\n\tlet isValid = true;\n\n\tisValid =\n\t\tvalidateOptionalProperty(diagnostics, field, \"dev\", val.dev, \"object\") &&\n\t\tisValid;\n\n\tisValid =\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(val), [\n\t\t\t\"dev\",\n\t\t]) && isValid;\n\n\tif (typeof val.dev === \"object\" && val.dev !== null) {\n\t\tisValid =\n\t\t\tvalidateRequiredProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.dev`,\n\t\t\t\t\"aud\",\n\t\t\t\tval.dev.aud,\n\t\t\t\t\"string\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateOptionalProperty(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.dev`,\n\t\t\t\t\"identity\",\n\t\t\t\tval.dev.identity,\n\t\t\t\t\"object\"\n\t\t\t) && isValid;\n\n\t\tisValid =\n\t\t\tvalidateAdditionalProperties(\n\t\t\t\tdiagnostics,\n\t\t\t\t`${field}.dev`,\n\t\t\t\tObject.keys(val.dev),\n\t\t\t\t[\"aud\", \"identity\"]\n\t\t\t) && isValid;\n\t}\n\n\treturn isValid;\n};\n\nconst validateCache: ValidatorFn = (diagnostics, field, value) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"object\" || value === null) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst val = value as CacheOptions;\n\tlet isValid = true;\n\n\tisValid =\n\t\tvalidateRequiredProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"enabled\",\n\t\t\tval.enabled,\n\t\t\t\"boolean\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateOptionalProperty(\n\t\t\tdiagnostics,\n\t\t\tfield,\n\t\t\t\"cross_version_cache\",\n\t\t\tval.cross_version_cache,\n\t\t\t\"boolean\"\n\t\t) && isValid;\n\n\tisValid =\n\t\tvalidateAdditionalProperties(diagnostics, field, Object.keys(val), [\n\t\t\t\"enabled\",\n\t\t\t\"cross_version_cache\",\n\t\t]) && isValid;\n\n\treturn isValid;\n};\n\n/**\n * Emit a warning if a local Durable Object binding is not covered by either a\n * live `exports` entry or a `migrations` block.\n */\nfunction warnIfDurableObjectsHaveNoLifecycleConfig(\n\tdiagnostics: Diagnostics,\n\tdurableObjects: Config[\"durable_objects\"],\n\tmigrations: Config[\"migrations\"],\n\texports: Config[\"exports\"],\n\tconfigPath: string | undefined\n) {\n\tif (\n\t\t!Array.isArray(durableObjects.bindings) ||\n\t\tdurableObjects.bindings.length === 0\n\t) {\n\t\treturn;\n\t}\n\n\t// intrinsic [durable_objects] implies [migrations] (or `exports`)\n\tconst exportedDurableObjects = durableObjects.bindings.filter(\n\t\t(binding) => !binding.script_name\n\t);\n\t// Tombstones do not cover a local binding because the class is being\n\t// retired or moved.\n\tconst exportsCovers = (className: string) => {\n\t\tconst entry = exports?.[className];\n\t\tif (entry === undefined || entry.type !== \"durable-object\") {\n\t\t\treturn false;\n\t\t}\n\t\tconst state = entry.state ?? \"created\";\n\t\treturn state === \"created\" || state === \"expecting-transfer\";\n\t};\n\tconst uncoveredByExports = exportedDurableObjects.filter(\n\t\t(binding) =>\n\t\t\ttypeof binding.class_name !== \"string\" ||\n\t\t\t!exportsCovers(binding.class_name)\n\t);\n\n\tif (uncoveredByExports.length === 0 || migrations.length > 0) {\n\t\treturn;\n\t}\n\tif (\n\t\tuncoveredByExports.some(\n\t\t\t(exportedDurableObject) =>\n\t\t\t\ttypeof exportedDurableObject.class_name !== \"string\"\n\t\t)\n\t) {\n\t\treturn;\n\t}\n\n\tconst durableObjectClassnames = uncoveredByExports.map(\n\t\t(durable) => durable.class_name\n\t) as string[];\n\n\tconst suggestedExports: NonNullable<RawConfig[\"exports\"]> = {};\n\tfor (const className of durableObjectClassnames) {\n\t\tsuggestedExports[className] = {\n\t\t\ttype: \"durable-object\",\n\t\t\tstorage: \"sqlite\",\n\t\t};\n\t}\n\n\tdiagnostics.warnings.push(dedent`\n\tIn your ${configFileName(configPath)} file, you have configured \\`durable_objects\\` exported by this Worker (${durableObjectClassnames.join(\", \")}), but no live \\`exports\\` entry for them. This may not work as expected until you add a live \\`durable-object\\` entry to \\`exports\\` for each. Add the following configuration:\n\n\t\\`\\`\\`\n\t${formatConfigSnippet({ exports: suggestedExports }, configPath)}\n\t\\`\\`\\``);\n}\n\n/**\n * `migrations` and `exports` are mutually exclusive ways to declare Durable\n * Object lifecycle. Validate this before any upload starts.\n */\nfunction errorIfMigrationsAndExportsBothSet(\n\tdiagnostics: Diagnostics,\n\tmigrations: Config[\"migrations\"],\n\texports: Config[\"exports\"]\n) {\n\tif (\n\t\tmigrations.length > 0 &&\n\t\texports !== undefined &&\n\t\tObject.values(exports).some((entry) => entry.type === \"durable-object\")\n\t) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\\`migrations\\` and \\`exports\\` are mutually exclusive. Choose one or the other to declare your Durable Object lifecycle, but not both.`\n\t\t);\n\t}\n}\n\n/**\n * A container is linked to a Durable Object from exactly one direction: either\n * the container names the class via `containers[].class_name`, or the Durable\n * Object names the container via `exports[Class].container`. Validate that the\n * two arrays agree.\n *\n * The relationship is one-to-one in both directions: a container backs at most\n * one Durable Object, and a Durable Object has at most one container. workerd\n * attaches a single container per Durable Object namespace, and in local dev\n * every container for a class builds into the same image tag, so a second\n * container for the same class cannot be honoured.\n *\n * Containers require SQLite-backed Durable Objects. That requirement is checked\n * here for containers linked via `class_name`, and by\n * {@link validateDurableObjectExportContainer} for the other direction, so the\n * combination is rejected however the link is expressed.\n */\nfunction validateContainerExportLinks(\n\tdiagnostics: Diagnostics,\n\tcontainers: Config[\"containers\"],\n\texports: Config[\"exports\"],\n\tcontainersDeclaredElsewhere: boolean\n) {\n\tif (containers !== undefined && !Array.isArray(containers)) {\n\t\t// `validateContainerApp` has already reported the non-array `containers`.\n\t\treturn;\n\t}\n\n\tif (containers === undefined && containersDeclaredElsewhere) {\n\t\t// `containers` is declared at a different environment level, so this level\n\t\t// only sees half of the link, and cross-checking `exports` against an empty\n\t\t// container list would report a link that resolves where the containers are\n\t\t// declared. Every check below either iterates `containers`, or concerns\n\t\t// containers this level does not have, so nothing is left to validate here.\n\t\treturn;\n\t}\n\n\tconst containersByName = new Map<string, ContainerApp>();\n\tconst duplicateNames = new Set<string>();\n\tfor (const container of containers ?? []) {\n\t\t// A non-string name has already been reported by `validateContainerApp`.\n\t\tif (typeof container.name !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\t\tif (containersByName.has(container.name)) {\n\t\t\tduplicateNames.add(container.name);\n\t\t} else {\n\t\t\tcontainersByName.set(container.name, container);\n\t\t}\n\t}\n\tfor (const name of [...duplicateNames].sort()) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"containers\" contains more than one container named \"${name}\". Container names must be unique.`\n\t\t);\n\t}\n\n\tconst containerCountByClassName = new Map<string, number>();\n\tfor (const container of containers ?? []) {\n\t\t// A non-string class_name has already been reported by `validateContainerApp`.\n\t\tif (typeof container.class_name !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\t\tcontainerCountByClassName.set(\n\t\t\tcontainer.class_name,\n\t\t\t(containerCountByClassName.get(container.class_name) ?? 0) + 1\n\t\t);\n\t}\n\tconst overSubscribedClassNames = new Set(\n\t\t[...containerCountByClassName]\n\t\t\t.filter(([, count]) => count > 1)\n\t\t\t.map(([className]) => className)\n\t);\n\tfor (const className of [...overSubscribedClassNames].sort()) {\n\t\tdiagnostics.errors.push(\n\t\t\t`More than one container is attached to the Durable Object \"${className}\". A Durable Object can only have one container attached to it.`\n\t\t);\n\t}\n\n\tconst durableObjectExports = getDurableObjectExports(exports);\n\tconst liveExportClassNames = new Set<string>();\n\tconst classNamesByContainerName = new Map<string, string[]>();\n\n\tfor (const [className, entry] of Object.entries(durableObjectExports)) {\n\t\tif (\n\t\t\tentry.state !== undefined &&\n\t\t\tentry.state !== \"created\" &&\n\t\t\tentry.state !== \"expecting-transfer\"\n\t\t) {\n\t\t\t// `container` is forbidden on tombstones, which is reported separately.\n\t\t\tcontinue;\n\t\t}\n\t\tliveExportClassNames.add(className);\n\n\t\t// A non-string container reference has already been reported by\n\t\t// `validateDurableObjectExportContainer`.\n\t\tif (typeof entry.container !== \"string\" || entry.container === \"\") {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!containersByName.has(entry.container)) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`\"exports.${className}.container\" references a container named \"${entry.container}\", but no container with that name is defined in \"containers\".`\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tclassNamesByContainerName.set(entry.container, [\n\t\t\t...(classNamesByContainerName.get(entry.container) ?? []),\n\t\t\tclassName,\n\t\t]);\n\t}\n\n\tfor (const [containerName, classNames] of classNamesByContainerName) {\n\t\tif (classNames.length > 1) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The container \"${containerName}\" is referenced by more than one Durable Object export (${classNames.join(\", \")}). A container can only back a single Durable Object.`\n\t\t\t);\n\t\t}\n\t}\n\n\tconst containerNameToClassName = getContainerNameToClassNameMap(exports);\n\tconst usesDurableObjectExports = Object.keys(durableObjectExports).length > 0;\n\n\tfor (const container of containers ?? []) {\n\t\tif (typeof container.name !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (container.class_name === undefined) {\n\t\t\tif (!containerNameToClassName.has(container.name)) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`The container \"${container.name}\" is not linked to a Durable Object. Either set \"containers.class_name\", or reference this container from a Durable Object's \\`exports\\` entry via its \"container\" field.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (overSubscribedClassNames.has(container.class_name)) {\n\t\t\t// Already reported above. The checks below compare this container against\n\t\t\t// the class's single `container` field, which a sibling may legitimately\n\t\t\t// own, so they would add noise on top of the real error.\n\t\t\tcontinue;\n\t\t}\n\n\t\t// The two directions can disagree in two ways, and each needs checking\n\t\t// separately: the class this container names may point at a *different*\n\t\t// container, or a *different* class may claim this container.\n\t\tconst exportEntry = durableObjectExports[container.class_name];\n\t\tconst referencedContainerName =\n\t\t\texportEntry !== undefined && \"container\" in exportEntry\n\t\t\t\t? exportEntry.container\n\t\t\t\t: undefined;\n\n\t\tif (\n\t\t\ttypeof referencedContainerName === \"string\" &&\n\t\t\treferencedContainerName !== container.name\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The container \"${container.name}\" sets \"class_name\" to \"${container.class_name}\", but \"exports.${container.class_name}.container\" is \"${referencedContainerName}\". A Durable Object and its container must reference each other consistently.`\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// When several exports claim this container, the duplicate-claim error above\n\t\t// already reports it. Singling one of them out as *the* conflicting class\n\t\t// here would depend on the order of the keys in `exports`.\n\t\tconst claimingClassNames = classNamesByContainerName.get(container.name);\n\t\tconst claimingClassName =\n\t\t\tclaimingClassNames?.length === 1 ? claimingClassNames[0] : undefined;\n\t\tif (\n\t\t\tclaimingClassName !== undefined &&\n\t\t\tclaimingClassName !== container.class_name\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The container \"${container.name}\" sets \"class_name\" to \"${container.class_name}\", but \"exports.${claimingClassName}.container\" references it. A Durable Object and its container must reference each other consistently.`\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Only enforced when the declarative `exports` flow is in use. The legacy\n\t\t// `migrations` flow silently ignores containers whose class it does not know\n\t\t// about, and we must not break those configs.\n\t\tif (\n\t\t\tusesDurableObjectExports &&\n\t\t\t!liveExportClassNames.has(container.class_name)\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The container \"${container.name}\" sets \"class_name\" to \"${container.class_name}\", but \"exports\" has no live \"durable-object\" entry for \"${container.class_name}\".`\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Only reachable when the class has a live export, whose storage is\n\t\t// therefore known. When that export names this container itself,\n\t\t// `validateDurableObjectExportContainer` has already reported the same\n\t\t// problem against `exports.<Class>.container`.\n\t\tif (\n\t\t\treferencedContainerName === undefined &&\n\t\t\texportEntry !== undefined &&\n\t\t\t\"storage\" in exportEntry &&\n\t\t\texportEntry.storage === \"legacy-kv\"\n\t\t) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`The container \"${container.name}\" sets \"class_name\" to \"${container.class_name}\", but \"exports.${container.class_name}.storage\" is \"legacy-kv\". Containers are not supported on Durable Objects using the \"legacy-kv\" storage backend.`\n\t\t\t);\n\t\t}\n\t}\n}\n\nconst validatePythonModules: ValidatorFn = (\n\tdiagnostics,\n\tfield,\n\tvalue,\n\ttopLevelEnv\n) => {\n\tif (value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${field}\" should be an object but got ${JSON.stringify(value)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst val = value as { exclude?: unknown };\n\tif (!(\"exclude\" in val)) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\t!isStringArray(diagnostics, `${field}.exclude`, val.exclude, topLevelEnv)\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nfunction isRemoteValid(\n\ttargetObject: object,\n\tfieldPath: string,\n\tdiagnostics: Diagnostics\n) {\n\tif (!isOptionalProperty(targetObject, \"remote\", \"boolean\")) {\n\t\tdiagnostics.errors.push(\n\t\t\t`\"${fieldPath}\" should, optionally, have a boolean \"remote\" field but got ${JSON.stringify(\n\t\t\t\ttargetObject\n\t\t\t)}.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns whether the provided `imagePath` is a path to a Dockerfile.\n *\n * @param imagePath path to Dockerfile or image registry path\n * @param configPath path to the wrangler config file, if any\n * @returns `true` if it is a dockerfile, `false` if it is a registry link, throws if neither\n */\nexport function isDockerfile(\n\timagePath: string,\n\tconfigPath: string | undefined\n): boolean {\n\tconst baseDir = configPath ? path.dirname(configPath) : process.cwd();\n\tconst maybeDockerfile = path.resolve(baseDir, imagePath);\n\tif (fs.existsSync(maybeDockerfile)) {\n\t\tif (isDirectory(maybeDockerfile)) {\n\t\t\tthrow new UserError(\n\t\t\t\t`${imagePath} is a directory, you should specify a path to the Dockerfile`,\n\t\t\t\t{ telemetryMessage: false }\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst errorPrefix = `The image \"${imagePath}\" does not appear to be a valid path to a Dockerfile, or a valid image registry path:\\n`;\n\t// not found, not a dockerfile, let's try parsing the image ref as an URL?\n\ttry {\n\t\tnew URL(`https://${imagePath}`);\n\t} catch (e) {\n\t\tif (e instanceof Error) {\n\t\t\tthrow new UserError(errorPrefix + e.message, {\n\t\t\t\ttelemetryMessage: false,\n\t\t\t});\n\t\t}\n\t\tthrow e;\n\t}\n\tconst imageParts = imagePath.split(\"/\");\n\n\tif (!imageParts[imageParts.length - 1]?.includes(\":\")) {\n\t\tthrow new UserError(\n\t\t\terrorPrefix +\n\t\t\t\t`If this is an image registry path, it needs to include at least a tag ':' (e.g: docker.io/httpd:1)`,\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n\t// validate URL\n\tif (imagePath.includes(\"://\")) {\n\t\tthrow new UserError(\n\t\t\terrorPrefix +\n\t\t\t\t`Image reference should not include the protocol part (e.g: docker.io/httpd:1, not https://docker.io/httpd:1)`,\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n\treturn false;\n}\n","import { assertNever } from \"../assert-never\";\nimport { UserError } from \"../errors\";\nimport { getBindingTypeFriendlyName } from \"./validation\";\nimport type { Binding } from \"../types\";\n\n/**\n * Local-dev capability of each binding type. Source of truth for\n * `pickRemoteBindings()` and `validateBindingRemoteSetting()`.\n *\n * - `local-and-remote`: local simulator; `remote: true` opts into proxying.\n * - `local-only`: local simulator only; `remote: true` is a config error.\n * - `remote`: no local simulator *yet* — requires explicit `remote: true`.\n * Move to `local-and-remote` once a simulator lands.\n * - `DO-NOT-USE-this-resource-will-never-have-a-local-simulator`: no local\n * simulator, *ever* — fundamentally remote-only. Always auto-routed; user\n * is warned about usage charges. Adding here is permanent; prefer any\n * other variant if a simulator is plausible.\n */\nexport type BindingLocalSupport =\n\t| \"local-and-remote\"\n\t| \"local-only\"\n\t| \"remote\"\n\t| \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\";\n\nconst BINDING_LOCAL_SUPPORT: Record<\n\tExclude<Binding[\"type\"], `unsafe_${string}`> | \"unsafe_hello_world\",\n\tBindingLocalSupport\n> = {\n\tplain_text: \"local-only\",\n\tsecret_text: \"local-only\",\n\tjson: \"local-only\",\n\twasm_module: \"local-only\",\n\ttext_blob: \"local-only\",\n\tdata_blob: \"local-only\",\n\tversion_metadata: \"local-only\",\n\tinherit: \"local-only\",\n\tlogfwdr: \"local-only\",\n\tassets: \"local-only\",\n\tunsafe_hello_world: \"local-only\",\n\tdurable_object_namespace: \"local-only\",\n\thyperdrive: \"local-only\",\n\tfetcher: \"local-only\",\n\tanalytics_engine: \"local-only\",\n\tsecrets_store_secret: \"local-only\",\n\tratelimit: \"local-only\",\n\tworker_loader: \"local-only\",\n\n\tkv_namespace: \"local-and-remote\",\n\tr2_bucket: \"local-and-remote\",\n\td1: \"local-and-remote\",\n\tworkflow: \"local-only\",\n\tbrowser: \"local-and-remote\",\n\timages: \"local-and-remote\",\n\tstream: \"local-and-remote\",\n\tsend_email: \"local-and-remote\",\n\tpipeline: \"local-and-remote\",\n\tservice: \"local-and-remote\",\n\t// TODO: Miniflare currently ignores `remote: true` on queues, tracked in #13727.\n\tqueue: \"local-and-remote\",\n\n\tvectorize: \"remote\",\n\tmtls_certificate: \"remote\",\n\tdispatch_namespace: \"remote\",\n\n\t// Reach out to the @cloudflare/wrangler team before adding anything here\n\tai: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tai_search: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tai_search_namespace:\n\t\t\"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tmedia: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tartifacts: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tflagship: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tvpc_service: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tvpc_network: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\twebsearch: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n\tagent_memory: \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\",\n};\n\nexport function getBindingLocalSupport(\n\ttype: Binding[\"type\"]\n): BindingLocalSupport {\n\tif (type in BINDING_LOCAL_SUPPORT) {\n\t\treturn BINDING_LOCAL_SUPPORT[type as keyof typeof BINDING_LOCAL_SUPPORT];\n\t}\n\treturn \"local-only\";\n}\n\n/**\n * Validates the user's `remote` setting for a given binding against the\n * binding type's local-development capabilities. Throws `UserError` for\n * invalid combinations and uses the caller-provided logger for\n * valid-but-noteworthy ones.\n */\nexport function validateBindingRemoteSetting(\n\ttype: Binding[\"type\"],\n\tremote: boolean | undefined,\n\twarn: (message: string) => void\n) {\n\tconst support = getBindingLocalSupport(type);\n\tswitch (support) {\n\t\tcase \"local-and-remote\":\n\t\t\treturn;\n\t\tcase \"local-only\":\n\t\t\tif (remote === true) {\n\t\t\t\tthrow new UserError(\n\t\t\t\t\t`${getBindingTypeFriendlyName(type)} bindings do not support accessing remote resources.`,\n\t\t\t\t\t{\n\t\t\t\t\t\ttelemetryMessage: \"utils bindings unsupported remote resources\",\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"remote\":\n\t\t\tif (remote === false) {\n\t\t\t\tthrow new UserError(\n\t\t\t\t\t`${getBindingTypeFriendlyName(type)} bindings do not support local development. You can set \\`remote: true\\` for the binding definition in your configuration file to access a remote version of the resource.`,\n\t\t\t\t\t{\n\t\t\t\t\t\ttelemetryMessage: \"utils bindings unsupported local development\",\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (remote === undefined) {\n\t\t\t\twarn(\n\t\t\t\t\t`${getBindingTypeFriendlyName(type)} bindings do not support local development, and so parts of your Worker may not work correctly. You can set \\`remote: true\\` for the binding definition in your configuration file to access a remote version of the resource.`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"DO-NOT-USE-this-resource-will-never-have-a-local-simulator\":\n\t\t\tif (remote === false) {\n\t\t\t\tthrow new UserError(\n\t\t\t\t\t`${getBindingTypeFriendlyName(type)} bindings do not support local development. You can set \\`remote: true\\` for the binding definition in your configuration file to access a remote version of the resource.`,\n\t\t\t\t\t{\n\t\t\t\t\t\ttelemetryMessage:\n\t\t\t\t\t\t\t\"utils bindings unsupported local development always remote\",\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (remote === undefined) {\n\t\t\t\twarn(\n\t\t\t\t\t`${getBindingTypeFriendlyName(type)} bindings always access remote resources, and so may incur usage charges even in local dev. To suppress this warning, set \\`remote: true\\` for the binding definition in your configuration file.`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tdefault:\n\t\t\tassertNever(support);\n\t}\n}\n","/**\n * Pages now supports configuration via a Wrangler configuration file. As opposed to\n * Workers however, Pages only supports a limited subset of all available\n * configuration keys.\n *\n * This file contains all Wrangler configuration file validation things, specific to\n * Pages.\n */\n\nimport { FatalError } from \"../errors\";\nimport { defaultWranglerConfig } from \"./config\";\nimport { Diagnostics } from \"./diagnostics\";\nimport { isRequiredProperty } from \"./validation-helpers\";\nimport type { Config } from \"./config\";\n\nconst supportedPagesConfigFields = [\n\t\"pages_build_output_dir\",\n\t\"name\",\n\t\"compatibility_date\",\n\t\"compatibility_flags\",\n\t\"send_metrics\",\n\t\"no_bundle\",\n\t\"limits\",\n\t\"placement\",\n\t\"vars\",\n\t\"durable_objects\",\n\t\"kv_namespaces\",\n\t\"queues\", // `producers` ONLY\n\t\"r2_buckets\",\n\t\"d1_databases\",\n\t\"vectorize\",\n\t\"hyperdrive\",\n\t\"services\",\n\t\"analytics_engine_datasets\",\n\t\"ai\",\n\t\"version_metadata\",\n\t\"dev\",\n\t\"mtls_certificates\",\n\t\"browser\",\n\t\"upload_source_maps\",\n\t// normalizeAndValidateConfig() sets these values\n\t\"configPath\",\n\t\"userConfigPath\",\n\t\"topLevelName\",\n\t\"definedEnvironments\",\n\t\"targetEnvironment\",\n] as const;\n\nexport function validatePagesConfig(\n\tconfig: Config,\n\tenvNames: string[],\n\tprojectName?: string\n): Diagnostics {\n\t// exhaustive check\n\tif (!config.pages_build_output_dir) {\n\t\tthrow new FatalError(\n\t\t\t`Attempting to validate Pages configuration file, but \"pages_build_output_dir\" field was not found.\n\t\t\"pages_build_output_dir\" is required for Pages projects.`,\n\t\t\t{ telemetryMessage: false }\n\t\t);\n\t}\n\n\tconst diagnostics = new Diagnostics(\n\t\t`Running configuration file validation for Pages:`\n\t);\n\n\tvalidateMainField(config, diagnostics);\n\tvalidateProjectName(projectName, diagnostics);\n\tvalidatePagesEnvironmentNames(envNames, diagnostics);\n\tvalidateUnsupportedFields(config, diagnostics);\n\tvalidateDurableObjectBinding(config, diagnostics);\n\n\treturn diagnostics;\n}\n\n/**\n * Validate that configuration file doesn't specify \"main\", if\n * \"pages_build_output_dir\" is present\n */\nfunction validateMainField(config: Config, diagnostics: Diagnostics) {\n\tif (config.main !== undefined) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Configuration file cannot contain both both \"main\" and \"pages_build_output_dir\" configuration keys.\\n` +\n\t\t\t\t`Please use \"main\" if you are deploying a Worker, or \"pages_build_output_dir\" if you are deploying a Pages project.`\n\t\t);\n\t}\n}\n\n/**\n * Validate that \"name\" field is specified at the top-level\n */\nfunction validateProjectName(\n\tname: string | undefined,\n\tdiagnostics: Diagnostics\n) {\n\tif (name === undefined || name.trim() === \"\") {\n\t\tdiagnostics.errors.push(\n\t\t\t`Missing top-level field \"name\" in configuration file.\\n` +\n\t\t\t\t`Pages requires the name of your project to be configured at the top-level of your Wrangler configuration file. This is because, in Pages, environments target the same project.`\n\t\t);\n\t}\n}\n\n/**\n * Validate that no named-environments other than \"preview\" and \"production\"\n * were specified in the configuration file for Pages\n */\nfunction validatePagesEnvironmentNames(\n\tenvNames: string[],\n\tdiagnostics: Diagnostics\n) {\n\tif (!envNames?.length) {\n\t\treturn;\n\t}\n\n\tconst unsupportedPagesEnvNames = envNames.filter(\n\t\t(name) => name !== \"preview\" && name !== \"production\"\n\t);\n\n\tif (unsupportedPagesEnvNames.length > 0) {\n\t\tdiagnostics.errors.push(\n\t\t\t`Configuration file contains the following environment names that are not supported by Pages projects:\\n` +\n\t\t\t\t`${unsupportedPagesEnvNames.map((name) => `\"${name}\"`).join()}.\\n` +\n\t\t\t\t`The supported named-environments for Pages are \"preview\" and \"production\".`\n\t\t);\n\t}\n}\n\n/**\n * Check for configuration fields that are not supported by Pages via the\n * configuration file\n */\nfunction validateUnsupportedFields(config: Config, diagnostics: Diagnostics) {\n\tconst unsupportedFields = new Set(Object.keys(config) as Array<keyof Config>);\n\n\tfor (const field of supportedPagesConfigFields) {\n\t\t// Pages config supports `queues.producers` only. However, let's skip\n\t\t// that validation here and keep all diagnostics handling in one place.\n\t\t// This way we'll avoid breaking the config key logical grouping in\n\t\t// `supportedPagesConfigFields`, when writing the errors to stdout.\n\t\tif (field === \"queues\" && config.queues?.consumers?.length) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tunsupportedFields.delete(field);\n\t}\n\n\tfor (const field of unsupportedFields) {\n\t\t// check for unsupported fields with default values and exclude if found.\n\t\t// These were most likely set as part of `normalizeAndValidateConfig()`\n\t\t// processing, and not via the config file.\n\t\tif (\n\t\t\tconfig[field] === undefined ||\n\t\t\tJSON.stringify(config[field]) ===\n\t\t\t\tJSON.stringify(defaultWranglerConfig[field])\n\t\t) {\n\t\t\tunsupportedFields.delete(field);\n\t\t}\n\t}\n\n\tif (unsupportedFields.size > 0) {\n\t\tconst fields = Array.from(unsupportedFields.keys());\n\n\t\tfields.forEach((field) => {\n\t\t\tif (field === \"queues\" && config.queues?.consumers?.length) {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Configuration file for Pages projects does not support \"queues.consumers\"`\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdiagnostics.errors.push(\n\t\t\t\t\t`Configuration file for Pages projects does not support \"${field}\"`\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Validate the \"script_name\" field is specified for [[durable_objects.bindings]]\n *\n * This is necessary because Pages cannot define/deploy a DO itself today,\n * and so this needs to be done with a Worker.\n */\nfunction validateDurableObjectBinding(\n\tconfig: Config,\n\tdiagnostics: Diagnostics\n) {\n\tif (config.durable_objects.bindings.length > 0) {\n\t\tconst invalidBindings = config.durable_objects.bindings.filter(\n\t\t\t(binding) => !isRequiredProperty(binding, \"script_name\", \"string\")\n\t\t);\n\t\tif (invalidBindings.length > 0) {\n\t\t\tdiagnostics.errors.push(\n\t\t\t\t`Durable Objects bindings should specify a \"script_name\".\\n` +\n\t\t\t\t\t`Pages requires Durable Object bindings to specify the name of the Worker where the Durable Object is defined.`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { statSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { parsePackageJSON, readFileSync } from \"./parse\";\n\n/**\n * Resolves the filesystem path for an installed npm package.\n *\n * Tries three strategies in order:\n * 1. `require.resolve(\"<pkg>/package.json\")` — works when the package exports its `package.json`\n * 2. `require.resolve(\"<pkg>\")` — fallback for packages that don't export `package.json`\n * 3. Direct `node_modules` filesystem lookup — fallback for ESM-only packages whose exports\n * map has no `\"require\"` or `\"default\"` condition (and no `\"./package.json\"` export),\n * which makes them invisible to `require.resolve`\n *\n * @param packageName - The npm package name to resolve (supports scoped packages like `@scope/pkg`)\n * @param projectPath - The project directory to resolve from\n * @returns The resolved directory path, or `undefined` if the package is not installed\n */\nexport function getPackagePath(\n\tpackageName: string,\n\tprojectPath: string\n): string | undefined {\n\ttry {\n\t\t// Try to resolve the package.json directly — works when the package exports it\n\t\treturn path.dirname(\n\t\t\trequire.resolve(`${packageName}/package.json`, {\n\t\t\t\tpaths: [projectPath],\n\t\t\t})\n\t\t);\n\t} catch {}\n\n\ttry {\n\t\t// Fallback: resolve the package entry point and return its directory\n\t\treturn path.dirname(\n\t\t\trequire.resolve(packageName, {\n\t\t\t\tpaths: [projectPath],\n\t\t\t})\n\t\t);\n\t} catch {}\n\n\ttry {\n\t\t// Fallback: direct node_modules lookup for ESM-only packages that aren't\n\t\t// resolvable via require.resolve (e.g. packages whose exports map only has\n\t\t// an \"import\" condition with no \"require\" or \"default\").\n\t\tconst candidate = path.join(\n\t\t\tprojectPath,\n\t\t\t\"node_modules\",\n\t\t\tpackageName,\n\t\t\t\"package.json\"\n\t\t);\n\t\tif (statSync(candidate).isFile()) {\n\t\t\treturn path.dirname(candidate);\n\t\t}\n\t} catch {}\n\n\treturn undefined;\n}\n\n/**\n * Checks whether an npm package is installed in a target project.\n *\n * @param packageName - The name of the target package\n * @param projectPath - The path of the project to check\n * @returns `true` if the package is installed, `false` otherwise\n */\nexport function isPackageInstalled(\n\tpackageName: string,\n\tprojectPath: string\n): boolean {\n\treturn !!getPackagePath(packageName, projectPath);\n}\n\n/**\n * Gets the exact version of an npm package installed in a project by resolving\n * it from node_modules and reading its package.json.\n *\n * @param packageName - The name of the target package\n * @param projectPath - The path of the project to check\n * @param opts - Options\n * @param opts.stopAtProjectPath - If `true`, stop walking up at the project's path\n * @returns The installed version string, or `undefined` if the package is not installed\n */\nexport function getInstalledPackageVersion(\n\tpackageName: string,\n\tprojectPath: string,\n\topts: {\n\t\tstopAtProjectPath?: boolean;\n\t} = {}\n): string | undefined {\n\ttry {\n\t\tconst packagePath = getPackagePath(packageName, projectPath);\n\t\tif (!packagePath) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastDir = opts.stopAtProjectPath === true ? projectPath : undefined;\n\t\tconst packageJsonPath = findFileUp(\"package.json\", packagePath, lastDir);\n\n\t\tif (!packageJsonPath) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst packageJson = parsePackageJSON(\n\t\t\treadFileSync(packageJsonPath),\n\t\t\tpackageJsonPath\n\t\t);\n\t\t// The requested package may be installed under an alias (e.g. vite+\n\t\t// installs `@voidzero-dev/vite-plus-core` under the `vite` alias). In that\n\t\t// case the resolved package.json belongs to the aliased package, so its\n\t\t// `version` is not the version of the requested package.\n\t\t//\n\t\t// `bundledVersions` is NOT a standard package.json field (it is not the\n\t\t// standard `bundledDependencies`) — it is a vite+ convention that maps the\n\t\t// names of the tools it bundles to the versions it provides. When the\n\t\t// resolved package name doesn't match the requested one, prefer the version\n\t\t// declared there for the requested package.\n\t\tif (packageJson.name !== packageName) {\n\t\t\tconst bundledVersion = packageJson.bundledVersions?.[packageName];\n\t\t\tif (bundledVersion !== undefined) {\n\t\t\t\treturn bundledVersion;\n\t\t\t}\n\t\t}\n\t\treturn packageJson.version;\n\t} catch {}\n}\n\n/**\n * Walks up from `startDir` looking for a file named `name`.\n * Stops at `lastDir` (inclusive) if provided, otherwise walks to the filesystem root.\n *\n * @param name - The filename to search for\n * @param startDir - The directory to start searching from\n * @param lastDir - If provided, stop searching after reaching this directory\n * @returns The full path to the found file, or `undefined`\n */\nfunction findFileUp(\n\tname: string,\n\tstartDir: string,\n\tlastDir?: string\n): string | undefined {\n\tlet dir = startDir;\n\tconst root = path.parse(dir).root;\n\n\twhile (true) {\n\t\tconst candidate = path.join(dir, name);\n\t\ttry {\n\t\t\tif (statSync(candidate).isFile()) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t} catch {}\n\n\t\tif (lastDir !== undefined && dir === lastDir) {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst parent = path.dirname(dir);\n\t\tif (parent === dir || dir === root) {\n\t\t\tbreak;\n\t\t}\n\t\tdir = parent;\n\t}\n\n\treturn undefined;\n}\n","import type { Config } from \"./config/config\";\nimport type { ConfigBindingFieldName } from \"./config/validation\";\nimport type { Binding } from \"./types\";\n\nfunction assertNever(_value: never) {}\n\nexport interface ConvertBindingsOptions {\n\t/**\n\t * Use preview IDs (preview_id, preview_bucket_name, preview_database_id) instead of production IDs when resolving a binding ID.\n\t * This means that the rest of Wrangler does not need to be aware of preview IDs, and can just use regular IDs.\n\t */\n\tusePreviewIds?: boolean;\n\t/**\n\t * Exclude bindings that Pages doesn't support\n\t */\n\tpages?: boolean;\n}\n\n/**\n * Convert Config to the Record<string, Binding> format for consistent internal use.\n */\nexport function convertConfigToBindings(\n\tconfig: Partial<Pick<Config, ConfigBindingFieldName>>,\n\toptions?: ConvertBindingsOptions\n): Record<string, Binding> {\n\tconst { usePreviewIds = false, pages = false } = options ?? {};\n\tconst output: Record<string, Binding> = {};\n\n\ttype Entries<T> = { [K in keyof T]: [K, T[K]] }[keyof T][];\n\ttype ConfigIterable = Entries<Required<Pick<Config, ConfigBindingFieldName>>>;\n\tconst configIterable = Object.entries(config) as ConfigIterable;\n\n\tfor (const [type, info] of configIterable) {\n\t\tif (info === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tswitch (type) {\n\t\t\tcase \"vars\": {\n\t\t\t\tfor (const [key, value] of Object.entries(info)) {\n\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\toutput[key] = { type: \"plain_text\", value };\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput[key] = { type: \"json\", value };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"kv_namespaces\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = {\n\t\t\t\t\t\ttype: \"kv_namespace\",\n\t\t\t\t\t\t...x,\n\t\t\t\t\t\tid: usePreviewIds ? (x.preview_id ?? x.id) : x.id,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"send_email\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const {\n\t\t\t\t\tname,\n\t\t\t\t\tdestination_address,\n\t\t\t\t\tallowed_destination_addresses,\n\t\t\t\t\tallowed_sender_addresses,\n\t\t\t\t\tremote,\n\t\t\t\t} of info) {\n\t\t\t\t\tconst shared = {\n\t\t\t\t\t\ttype: \"send_email\" as const,\n\t\t\t\t\t\tallowed_sender_addresses,\n\t\t\t\t\t\tremote,\n\t\t\t\t\t};\n\t\t\t\t\tif (destination_address !== undefined) {\n\t\t\t\t\t\toutput[name] = { ...shared, destination_address };\n\t\t\t\t\t} else if (allowed_destination_addresses !== undefined) {\n\t\t\t\t\t\toutput[name] = { ...shared, allowed_destination_addresses };\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput[name] = shared;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"wasm_modules\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const [key, value] of Object.entries(info)) {\n\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\toutput[key] = { type: \"wasm_module\", source: { path: value } };\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput[key] = { type: \"wasm_module\", source: { contents: value } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"text_blobs\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const [key, value] of Object.entries(info)) {\n\t\t\t\t\toutput[key] = { type: \"text_blob\", source: { path: value } };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"data_blobs\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const [key, value] of Object.entries(info)) {\n\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\toutput[key] = { type: \"data_blob\", source: { path: value } };\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput[key] = { type: \"data_blob\", source: { contents: value } };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"browser\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"browser\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"durable_objects\": {\n\t\t\t\tfor (const { name, ...x } of info.bindings ?? []) {\n\t\t\t\t\toutput[name] = { type: \"durable_object_namespace\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"workflows\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"workflow\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"queues\": {\n\t\t\t\tfor (const { binding, ...x } of info.producers ?? []) {\n\t\t\t\t\toutput[binding] = {\n\t\t\t\t\t\ttype: \"queue\",\n\t\t\t\t\t\tqueue_name: x.queue,\n\t\t\t\t\t\t...x,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"r2_buckets\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = {\n\t\t\t\t\t\ttype: \"r2_bucket\",\n\t\t\t\t\t\t...x,\n\t\t\t\t\t\tbucket_name: usePreviewIds\n\t\t\t\t\t\t\t? (x.preview_bucket_name ?? x.bucket_name)\n\t\t\t\t\t\t\t: x.bucket_name,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"d1_databases\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = {\n\t\t\t\t\t\ttype: \"d1\",\n\t\t\t\t\t\t...x,\n\t\t\t\t\t\tdatabase_id: usePreviewIds\n\t\t\t\t\t\t\t? (x.preview_database_id ?? x.database_id)\n\t\t\t\t\t\t\t: x.database_id,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"services\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"service\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"analytics_engine_datasets\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"analytics_engine\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"dispatch_namespaces\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"dispatch_namespace\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"mtls_certificates\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"mtls_certificate\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"logfwdr\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const { name, ...x } of info.bindings ?? []) {\n\t\t\t\t\toutput[name] = { type: \"logfwdr\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ai\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"ai\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"images\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"images\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"stream\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"stream\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"version_metadata\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"version_metadata\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"hyperdrive\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"hyperdrive\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"vectorize\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"vectorize\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ai_search_namespaces\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"ai_search_namespace\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ai_search\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"ai_search\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"websearch\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"websearch\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"agent_memory\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"agent_memory\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"unsafe\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const { type: unsafeType, name, ...data } of info.bindings ?? []) {\n\t\t\t\t\toutput[name] = { type: `unsafe_${unsafeType}`, ...data };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assets\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (info.binding) {\n\t\t\t\t\toutput[info.binding] = { type: \"assets\" };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"pipelines\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"pipeline\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"secrets_store_secrets\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"secrets_store_secret\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"artifacts\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"artifacts\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"unsafe_hello_world\": {\n\t\t\t\tif (pages) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"unsafe_hello_world\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"flagship\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"flagship\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ratelimits\": {\n\t\t\t\tfor (const { name, ...x } of info) {\n\t\t\t\t\toutput[name] = { type: \"ratelimit\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"worker_loaders\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"worker_loader\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"vpc_services\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"vpc_service\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"vpc_networks\": {\n\t\t\t\tfor (const { binding, ...x } of info) {\n\t\t\t\t\toutput[binding] = { type: \"vpc_network\", ...x };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"media\": {\n\t\t\t\tconst { binding, ...x } = info;\n\t\t\t\toutput[binding] = { type: \"media\", ...x };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tassertNever(type);\n\t\t}\n\t}\n\n\treturn output;\n}\n\nexport function isUnsafeBindingType(type: string): type is `unsafe_${string}` {\n\treturn type.startsWith(\"unsafe_\");\n}\n\n/**\n * What configuration key does this binding use for referring to it's binding name?\n */\nconst nameBindings = [\n\t\"durable_object_namespace\",\n\t\"logfwdr\",\n\t\"ratelimit\",\n\t\"unsafe_ratelimit\",\n\t\"send_email\",\n] as const;\n\nfunction getBindingKey(type: Binding[\"type\"]) {\n\tif ((nameBindings as readonly string[]).includes(type)) {\n\t\treturn \"name\";\n\t}\n\treturn \"binding\";\n}\n\ntype FlatBinding<Type> = Extract<Binding, { type: Type }> &\n\t(Type extends (typeof nameBindings)[number]\n\t\t? {\n\t\t\t\tname: string;\n\t\t\t}\n\t\t: {\n\t\t\t\tbinding: string;\n\t\t\t});\n\nexport function extractBindingsOfType<Type extends Binding[\"type\"]>(\n\ttype: Type,\n\tbindings: Record<string, Binding> | undefined\n): FlatBinding<Type>[] {\n\treturn Object.entries(bindings ?? {})\n\t\t.filter(\n\t\t\t(binding): binding is [string, Extract<Binding, { type: Type }>] =>\n\t\t\t\tbinding[1].type === type\n\t\t)\n\t\t.map((binding) => ({\n\t\t\t...binding[1],\n\t\t\t[getBindingKey(type)]: binding[0],\n\t\t})) as FlatBinding<Type>[];\n}\n\n/**\n * Get bindings from a Config object in the standard Record<string, Binding> format.\n */\nexport function getBindings(\n\tconfig: Config | undefined,\n\toptions?: {\n\t\tpages?: boolean;\n\t}\n): Record<string, Binding> {\n\tif (!config) {\n\t\treturn {};\n\t}\n\treturn convertConfigToBindings(config, {\n\t\tusePreviewIds: false,\n\t\tpages: options?.pages,\n\t});\n}\n","import { stripVTControlCharacters } from \"node:util\";\nimport chalk from \"chalk\";\nimport { extractBindingsOfType, isUnsafeBindingType } from \"./binding-utils\";\nimport { getBindingTypeFriendlyName } from \"./config/validation\";\nimport type { ContainerApp } from \"./config/environment\";\nimport type { Binding } from \"./types\";\nimport type { CfSendEmailBindings, CfTailConsumer } from \"./worker\";\n\nconst { dim, white } = chalk;\nconst brandColor = chalk.hex(\"#BD5B08\");\n\n/**\n * Tracks whether we have already explained the connected status\n */\nlet isConnectedStatusExplained = false;\n\nexport type PrintBindingsOptions = {\n\tlog: (message: string) => void;\n\ttailConsumers?: CfTailConsumer[];\n\tstreamingTailConsumers?: CfTailConsumer[];\n\tcontainers?: ContainerApp[];\n\tregistry?: Record<string, { debugPortAddress?: string }> | null;\n\tlocal?: boolean;\n\tisMultiWorker?: boolean;\n\tremoteBindingsDisabled?: boolean;\n\tname?: string;\n\tprovisioning?: boolean;\n\twarnIfNoBindings?: boolean;\n\tunsafeMetadata?: Record<string, unknown>;\n};\n\n/**\n * Print all the bindings a worker would have access to.\n * Accepts the flat binding record used by StartDevWorkerInput[\"bindings\"].\n */\nexport function printBindings(\n\tbindings: Record<string, Binding> | undefined,\n\toptions: PrintBindingsOptions\n) {\n\tconst {\n\t\tcontainers = [],\n\t\tlog,\n\t\tstreamingTailConsumers = [],\n\t\ttailConsumers = [],\n\t} = options;\n\tconst context = options;\n\tlet hasConnectionStatus = false;\n\n\tconst isMultiWorker = context.isMultiWorker ?? false;\n\tconst getMode = createGetMode({\n\t\tisProvisioning: context.provisioning,\n\t\tisLocalDev: context.local,\n\t});\n\tconst truncate = (item: string | Record<string, unknown>, maxLength = 40) => {\n\t\tconst s = typeof item === \"string\" ? item : JSON.stringify(item);\n\t\tif (s.length < maxLength) {\n\t\t\treturn s;\n\t\t}\n\n\t\treturn `${s.substring(0, maxLength - 3)}...`;\n\t};\n\n\tconst output: {\n\t\tname: string;\n\t\ttype: string;\n\t\tvalue: string | undefined | symbol;\n\t\tmode: string | undefined;\n\t}[] = [];\n\n\t// Extract bindings by type\n\tconst data_blobs = extractBindingsOfType(\"data_blob\", bindings);\n\tconst durable_objects = extractBindingsOfType(\n\t\t\"durable_object_namespace\",\n\t\tbindings\n\t);\n\tconst workflows = extractBindingsOfType(\"workflow\", bindings);\n\tconst kv_namespaces = extractBindingsOfType(\"kv_namespace\", bindings);\n\tconst send_email = extractBindingsOfType(\"send_email\", bindings);\n\tconst queues = extractBindingsOfType(\"queue\", bindings);\n\tconst d1_databases = extractBindingsOfType(\"d1\", bindings);\n\tconst vectorize = extractBindingsOfType(\"vectorize\", bindings);\n\tconst ai_search_namespaces = extractBindingsOfType(\n\t\t\"ai_search_namespace\",\n\t\tbindings\n\t);\n\tconst ai_search = extractBindingsOfType(\"ai_search\", bindings);\n\tconst websearch = extractBindingsOfType(\"websearch\", bindings);\n\tconst agent_memory = extractBindingsOfType(\"agent_memory\", bindings);\n\tconst hyperdrive = extractBindingsOfType(\"hyperdrive\", bindings);\n\tconst r2_buckets = extractBindingsOfType(\"r2_bucket\", bindings);\n\tconst logfwdr = extractBindingsOfType(\"logfwdr\", bindings);\n\tconst secrets_store_secrets = extractBindingsOfType(\n\t\t\"secrets_store_secret\",\n\t\tbindings\n\t);\n\tconst artifacts = extractBindingsOfType(\"artifacts\", bindings);\n\tconst services = extractBindingsOfType(\"service\", bindings);\n\tconst vpc_services = extractBindingsOfType(\"vpc_service\", bindings);\n\tconst vpc_networks = extractBindingsOfType(\"vpc_network\", bindings);\n\tconst analytics_engine_datasets = extractBindingsOfType(\n\t\t\"analytics_engine\",\n\t\tbindings\n\t);\n\tconst text_blobs = extractBindingsOfType(\"text_blob\", bindings);\n\tconst browser = extractBindingsOfType(\"browser\", bindings);\n\tconst images = extractBindingsOfType(\"images\", bindings);\n\tconst stream = extractBindingsOfType(\"stream\", bindings);\n\tconst ai = extractBindingsOfType(\"ai\", bindings);\n\tconst version_metadata = extractBindingsOfType(\"version_metadata\", bindings);\n\t// Extract all vars (plain_text, json, secret_text) together to preserve insertion order\n\tconst vars = Object.entries(bindings ?? {})\n\t\t.filter(\n\t\t\t([_, binding]) =>\n\t\t\t\tbinding.type === \"plain_text\" ||\n\t\t\t\tbinding.type === \"json\" ||\n\t\t\t\tbinding.type === \"secret_text\"\n\t\t)\n\t\t.map(([name, binding]) => ({\n\t\t\tbinding: name,\n\t\t\t...(binding as\n\t\t\t\t| Extract<Binding, { type: \"plain_text\" }>\n\t\t\t\t| Extract<Binding, { type: \"json\" }>\n\t\t\t\t| Extract<Binding, { type: \"secret_text\" }>),\n\t\t}));\n\tconst wasm_modules = extractBindingsOfType(\"wasm_module\", bindings);\n\tconst dispatch_namespaces = extractBindingsOfType(\n\t\t\"dispatch_namespace\",\n\t\tbindings\n\t);\n\tconst mtls_certificates = extractBindingsOfType(\"mtls_certificate\", bindings);\n\tconst pipelines = extractBindingsOfType(\"pipeline\", bindings);\n\tconst ratelimits = extractBindingsOfType(\"ratelimit\", bindings);\n\tconst assets = extractBindingsOfType(\"assets\", bindings);\n\tconst unsafe_hello_world = extractBindingsOfType(\n\t\t\"unsafe_hello_world\",\n\t\tbindings\n\t);\n\tconst flagship = extractBindingsOfType(\"flagship\", bindings);\n\tconst media = extractBindingsOfType(\"media\", bindings);\n\tconst worker_loaders = extractBindingsOfType(\"worker_loader\", bindings);\n\n\t// Extract generic unsafe bindings (type starts with \"unsafe_\" but isn't \"unsafe_hello_world\")\n\tconst unsafe_bindings = Object.entries(bindings ?? {})\n\t\t.filter(\n\t\t\t([_, binding]) =>\n\t\t\t\tisUnsafeBindingType(binding.type) &&\n\t\t\t\tbinding.type !== \"unsafe_hello_world\"\n\t\t)\n\t\t.map(([name, binding]) => ({ name, ...binding }));\n\n\tif (data_blobs.length > 0) {\n\t\toutput.push(\n\t\t\t...data_blobs.map(({ binding, source }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"data_blob\"),\n\t\t\t\tvalue: \"contents\" in source ? \"<Buffer>\" : truncate(source.path),\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (durable_objects.length > 0) {\n\t\toutput.push(\n\t\t\t...durable_objects.map(({ name, class_name, script_name }) => {\n\t\t\t\tlet value = class_name;\n\t\t\t\tlet mode = undefined;\n\t\t\t\tif (script_name) {\n\t\t\t\t\tif (context.local && context.registry !== null) {\n\t\t\t\t\t\tconst registryDefinition = context.registry?.[script_name];\n\n\t\t\t\t\t\thasConnectionStatus = true;\n\t\t\t\t\t\tif (registryDefinition && registryDefinition.debugPortAddress) {\n\t\t\t\t\t\t\tvalue += `, defined in ${script_name}`;\n\t\t\t\t\t\t\tmode = getMode({ isSimulatedLocally: true, connected: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvalue += `, defined in ${script_name}`;\n\t\t\t\t\t\t\tmode = getMode({ isSimulatedLocally: true, connected: false });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue += `, defined in ${script_name}`;\n\t\t\t\t\t\tmode = getMode({ isSimulatedLocally: true });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmode = getMode({ isSimulatedLocally: true });\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"durable_object_namespace\"),\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tmode,\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (workflows.length > 0) {\n\t\toutput.push(\n\t\t\t...workflows.map(({ class_name, script_name, binding }) => {\n\t\t\t\tlet value = class_name;\n\t\t\t\tif (script_name) {\n\t\t\t\t\tvalue += ` (defined in ${script_name})`;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"workflow\"),\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: true,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (kv_namespaces.length > 0) {\n\t\toutput.push(\n\t\t\t...kv_namespaces.map(({ binding, id, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"kv_namespace\"),\n\t\t\t\t\tvalue: id,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (send_email.length > 0) {\n\t\toutput.push(\n\t\t\t...send_email.map((emailBinding: CfSendEmailBindings) => {\n\t\t\t\tconst destination_address =\n\t\t\t\t\t\"destination_address\" in emailBinding\n\t\t\t\t\t\t? emailBinding.destination_address\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst allowed_destination_addresses =\n\t\t\t\t\t\"allowed_destination_addresses\" in emailBinding\n\t\t\t\t\t\t? emailBinding.allowed_destination_addresses\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst allowed_sender_addresses =\n\t\t\t\t\t\"allowed_sender_addresses\" in emailBinding\n\t\t\t\t\t\t? emailBinding.allowed_sender_addresses\n\t\t\t\t\t\t: undefined;\n\t\t\t\tlet value =\n\t\t\t\t\tdestination_address ||\n\t\t\t\t\tallowed_destination_addresses?.join(\", \") ||\n\t\t\t\t\t\"unrestricted\";\n\n\t\t\t\tif (allowed_sender_addresses) {\n\t\t\t\t\tvalue += ` - senders: ${allowed_sender_addresses.join(\", \")}`;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tname: emailBinding.name,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"send_email\"),\n\t\t\t\t\tvalue,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t\tcontext.remoteBindingsDisabled || !emailBinding.remote,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (queues.length > 0) {\n\t\toutput.push(\n\t\t\t...queues.map(({ binding, queue_name, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"queue\"),\n\t\t\t\t\tvalue: queue_name,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (d1_databases.length > 0) {\n\t\toutput.push(\n\t\t\t...d1_databases.map(\n\t\t\t\t({\n\t\t\t\t\tbinding,\n\t\t\t\t\tdatabase_name,\n\t\t\t\t\tdatabase_id,\n\t\t\t\t\tpreview_database_id,\n\t\t\t\t\tremote,\n\t\t\t\t}) => {\n\t\t\t\t\tconst value =\n\t\t\t\t\t\ttypeof database_id == \"symbol\"\n\t\t\t\t\t\t\t? database_id\n\t\t\t\t\t\t\t: (preview_database_id ?? database_name ?? database_id);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: binding,\n\t\t\t\t\t\ttype: getBindingTypeFriendlyName(\"d1\"),\n\t\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t}\n\n\tif (vectorize.length > 0) {\n\t\toutput.push(\n\t\t\t...vectorize.map(({ binding, index_name, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"vectorize\"),\n\t\t\t\t\tvalue: index_name,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t\tremote && !context.remoteBindingsDisabled ? false : undefined,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (ai_search_namespaces.length > 0) {\n\t\toutput.push(\n\t\t\t...ai_search_namespaces.map(({ binding, namespace }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"ai_search_namespace\"),\n\t\t\t\t// Preserve `namespace` as-is so `typeof === \"symbol\"` handling\n\t\t\t\t// downstream can render INHERIT_SYMBOL as `\"inherited\"`. Using\n\t\t\t\t// `String(namespace)` would stringify it to\n\t\t\t\t// `\"Symbol(inherit_binding)\"` and defeat that check.\n\t\t\t\tvalue: namespace ?? undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: false }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (ai_search.length > 0) {\n\t\toutput.push(\n\t\t\t...ai_search.map(({ binding, instance_name }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"ai_search\"),\n\t\t\t\tvalue: instance_name ? String(instance_name) : undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: false }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (websearch.length > 0) {\n\t\toutput.push(\n\t\t\t...websearch.map(({ binding }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"websearch\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: false }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (agent_memory.length > 0) {\n\t\toutput.push(\n\t\t\t...agent_memory.map(({ binding, namespace }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"agent_memory\"),\n\t\t\t\tvalue: namespace ?? undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: false }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (hyperdrive.length > 0) {\n\t\toutput.push(\n\t\t\t...hyperdrive.map(({ binding, id }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"hyperdrive\"),\n\t\t\t\t\tvalue: id,\n\t\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (vpc_services.length > 0) {\n\t\toutput.push(\n\t\t\t...vpc_services.map(({ binding, service_id, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"vpc_service\"),\n\t\t\t\t\tvalue: service_id,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t\tremote && !context.remoteBindingsDisabled ? false : undefined,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (vpc_networks.length > 0) {\n\t\toutput.push(\n\t\t\t...vpc_networks.map(({ binding, tunnel_id, network_id, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"vpc_network\"),\n\t\t\t\t\tvalue: tunnel_id ?? network_id,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t\tremote && !context.remoteBindingsDisabled ? false : undefined,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (r2_buckets.length > 0) {\n\t\toutput.push(\n\t\t\t...r2_buckets.map(({ binding, bucket_name, jurisdiction, remote }) => {\n\t\t\t\tconst value =\n\t\t\t\t\ttypeof bucket_name === \"symbol\"\n\t\t\t\t\t\t? bucket_name\n\t\t\t\t\t\t: bucket_name\n\t\t\t\t\t\t\t? `${bucket_name}${jurisdiction ? ` (${jurisdiction})` : \"\"}`\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"r2_bucket\"),\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (logfwdr.length > 0) {\n\t\toutput.push(\n\t\t\t...logfwdr.map(({ name, destination }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"logfwdr\"),\n\t\t\t\t\tvalue: destination,\n\t\t\t\t\tmode: getMode(),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (secrets_store_secrets.length > 0) {\n\t\toutput.push(\n\t\t\t...secrets_store_secrets.map(({ binding, store_id, secret_name }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"secrets_store_secret\"),\n\t\t\t\t\tvalue: `${store_id}/${secret_name}`,\n\t\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (artifacts.length > 0) {\n\t\toutput.push(\n\t\t\t...artifacts.map(({ binding, namespace }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"artifacts\"),\n\t\t\t\t\tvalue: namespace,\n\t\t\t\t\tmode: getMode({ isSimulatedLocally: false }),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (unsafe_hello_world.length > 0) {\n\t\toutput.push(\n\t\t\t...unsafe_hello_world.map(({ binding, enable_timer }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"unsafe_hello_world\"),\n\t\t\t\t\tvalue: enable_timer ? `Timer enabled` : `Timer disabled`,\n\t\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (flagship.length > 0) {\n\t\toutput.push(\n\t\t\t...flagship.map(({ binding, app_id }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"flagship\"),\n\t\t\t\t\tvalue: app_id,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: !context.remoteBindingsDisabled\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (services.length > 0) {\n\t\toutput.push(\n\t\t\t...services.map(({ binding, service, entrypoint, remote, dev }) => {\n\t\t\t\tlet value = service;\n\t\t\t\tlet mode = undefined;\n\n\t\t\t\tif (entrypoint) {\n\t\t\t\t\tvalue += `#${entrypoint}`;\n\t\t\t\t}\n\n\t\t\t\tif (dev !== undefined && context.local) {\n\t\t\t\t\tmode = getMode({ isSimulatedLocally: true });\n\t\t\t\t} else if (remote) {\n\t\t\t\t\tmode = getMode({ isSimulatedLocally: false });\n\t\t\t\t} else if (context.local && context.registry !== null) {\n\t\t\t\t\tconst isSelfBinding = service === context.name;\n\n\t\t\t\t\tif (isSelfBinding) {\n\t\t\t\t\t\thasConnectionStatus = true;\n\t\t\t\t\t\tmode = getMode({ isSimulatedLocally: true, connected: true });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst registryDefinition = context.registry?.[service];\n\t\t\t\t\t\thasConnectionStatus = true;\n\n\t\t\t\t\t\tif (registryDefinition && registryDefinition.debugPortAddress) {\n\t\t\t\t\t\t\tmode = getMode({ isSimulatedLocally: true, connected: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmode = getMode({ isSimulatedLocally: true, connected: false });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"service\"),\n\t\t\t\t\tvalue,\n\t\t\t\t\tmode,\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (analytics_engine_datasets.length > 0) {\n\t\toutput.push(\n\t\t\t...analytics_engine_datasets.map(({ binding, dataset }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"analytics_engine\"),\n\t\t\t\t\tvalue: dataset ?? binding,\n\t\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (text_blobs.length > 0) {\n\t\toutput.push(\n\t\t\t...text_blobs.map(({ binding, source }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"text_blob\"),\n\t\t\t\tvalue:\n\t\t\t\t\t\"contents\" in source\n\t\t\t\t\t\t? truncate(source.contents)\n\t\t\t\t\t\t: \"path\" in source\n\t\t\t\t\t\t\t? truncate(source.path)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (browser.length > 0) {\n\t\toutput.push(\n\t\t\t...browser.map(({ binding, remote }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"browser\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({\n\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t}),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (images.length > 0) {\n\t\toutput.push(\n\t\t\t...images.map(({ binding, remote }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"images\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({\n\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t}),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (stream.length > 0) {\n\t\toutput.push(\n\t\t\t...stream.map(({ binding, remote }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"stream\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({\n\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t(remote === true || remote === undefined) &&\n\t\t\t\t\t\t!context.remoteBindingsDisabled\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (media.length > 0) {\n\t\toutput.push(\n\t\t\t...media.map(({ binding, remote }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"media\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({\n\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t(remote === true || remote === undefined) &&\n\t\t\t\t\t\t!context.remoteBindingsDisabled\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (ai.length > 0) {\n\t\toutput.push(\n\t\t\t...ai.map(({ binding, staging, remote }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"ai\"),\n\t\t\t\tvalue: staging ? `staging` : undefined,\n\t\t\t\tmode: getMode({\n\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t(remote === true || remote === undefined) &&\n\t\t\t\t\t\t!context.remoteBindingsDisabled\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (pipelines.length > 0) {\n\t\toutput.push(\n\t\t\t...pipelines.map(\n\t\t\t\t({ binding, stream: pipelineStream, pipeline, remote }) => ({\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"pipeline\"),\n\t\t\t\t\tvalue: pipelineStream || pipeline,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: context.remoteBindingsDisabled || !remote,\n\t\t\t\t\t}),\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tif (ratelimits.length > 0) {\n\t\toutput.push(\n\t\t\t...ratelimits.map(({ name, simple }) => ({\n\t\t\t\tname,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"ratelimit\"),\n\t\t\t\tvalue: `${simple.limit} requests/${simple.period}s`,\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (assets.length > 0) {\n\t\toutput.push(\n\t\t\t...assets.map(({ binding }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"assets\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (version_metadata.length > 0) {\n\t\toutput.push(\n\t\t\t...version_metadata.map(({ binding }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"version_metadata\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\tif (unsafe_bindings.length > 0) {\n\t\toutput.push(\n\t\t\t...unsafe_bindings.map((binding) => {\n\t\t\t\tconst dev = \"dev\" in binding ? binding.dev : undefined;\n\t\t\t\t// Strip the \"unsafe_\" prefix to get the original binding type for display\n\t\t\t\tconst originalType = binding.type.slice(\"unsafe_\".length);\n\t\t\t\treturn {\n\t\t\t\t\tname: binding.name,\n\t\t\t\t\ttype: dev\n\t\t\t\t\t\t? dev.plugin.name\n\t\t\t\t\t\t: getBindingTypeFriendlyName(binding.type),\n\t\t\t\t\tvalue: originalType,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally: !!dev,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (vars.length > 0) {\n\t\toutput.push(\n\t\t\t...vars.map((variable) => {\n\t\t\t\tconst { binding, type: varType, value: varValue } = variable;\n\t\t\t\tlet parsedValue;\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-deprecated --\n\t\t\t\t * hidden is a deprecated property, but still needs to be supported for backwards compatibility\n\t\t\t\t * so we need to handle appropriately here\n\t\t\t\t *\n\t\t\t\t * see packages/workers-utils/src/types.ts for details on the hidden property\n\t\t\t\t */\n\t\t\t\tif (varType === \"plain_text\" && variable.hidden !== true) {\n\t\t\t\t\tparsedValue = `\"${truncate(varValue)}\"`;\n\t\t\t\t} else if (varType === \"json\") {\n\t\t\t\t\tparsedValue = truncate(JSON.stringify(varValue));\n\t\t\t\t} else {\n\t\t\t\t\tparsedValue = `\"(hidden)\"`;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(varType),\n\t\t\t\t\tvalue: parsedValue,\n\t\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (wasm_modules.length > 0) {\n\t\toutput.push(\n\t\t\t...wasm_modules.map(({ binding, source }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"wasm_module\"),\n\t\t\t\tvalue: \"contents\" in source ? \"<Wasm>\" : truncate(source.path),\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (dispatch_namespaces.length > 0) {\n\t\toutput.push(\n\t\t\t...dispatch_namespaces.map(({ binding, namespace, outbound, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"dispatch_namespace\"),\n\t\t\t\t\tvalue:\n\t\t\t\t\t\ttypeof namespace === \"symbol\"\n\t\t\t\t\t\t\t? namespace\n\t\t\t\t\t\t\t: outbound\n\t\t\t\t\t\t\t\t? `${namespace} (outbound -> ${outbound.service})`\n\t\t\t\t\t\t\t\t: namespace,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t\tremote && !context.remoteBindingsDisabled ? false : undefined,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (mtls_certificates.length > 0) {\n\t\toutput.push(\n\t\t\t...mtls_certificates.map(({ binding, certificate_id, remote }) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: binding,\n\t\t\t\t\ttype: getBindingTypeFriendlyName(\"mtls_certificate\"),\n\t\t\t\t\tvalue: certificate_id,\n\t\t\t\t\tmode: getMode({\n\t\t\t\t\t\tisSimulatedLocally:\n\t\t\t\t\t\t\tremote && !context.remoteBindingsDisabled ? false : undefined,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t);\n\t}\n\n\tif (worker_loaders.length > 0) {\n\t\toutput.push(\n\t\t\t...worker_loaders.map(({ binding }) => ({\n\t\t\t\tname: binding,\n\t\t\t\ttype: getBindingTypeFriendlyName(\"worker_loader\"),\n\t\t\t\tvalue: undefined,\n\t\t\t\tmode: getMode({ isSimulatedLocally: true }),\n\t\t\t}))\n\t\t);\n\t}\n\n\tif (output.length === 0) {\n\t\tif (context.warnIfNoBindings) {\n\t\t\tif (context.name && isMultiWorker) {\n\t\t\t\tlog(`No bindings found for ${chalk.blue(context.name)}`);\n\t\t\t} else {\n\t\t\t\tlog(\"No bindings found.\");\n\t\t\t}\n\t\t}\n\t} else {\n\t\tlet title: string;\n\t\tif (context.provisioning) {\n\t\t\ttitle = \"The following bindings need to be provisioned:\";\n\t\t} else if (context.name && isMultiWorker) {\n\t\t\ttitle = `${chalk.blue(context.name)} has access to the following bindings:`;\n\t\t} else {\n\t\t\ttitle = \"Your Worker has access to the following bindings:\";\n\t\t}\n\n\t\tconst headings = {\n\t\t\tbinding: \"Binding\",\n\t\t\tresource: \"Resource\",\n\t\t\tmode: \"Mode\",\n\t\t} as const;\n\n\t\tconst maxValueLength = Math.max(\n\t\t\t...output.map((b) =>\n\t\t\t\ttypeof b.value === \"symbol\"\n\t\t\t\t\t? \"inherited\".length\n\t\t\t\t\t: (b.value?.length ?? 0)\n\t\t\t)\n\t\t);\n\t\tconst maxNameLength = Math.max(...output.map((b) => b.name.length));\n\t\tconst maxTypeLength = Math.max(\n\t\t\t...output.map((b) => b.type.length),\n\t\t\theadings.resource.length\n\t\t);\n\t\tconst maxModeLength = Math.max(\n\t\t\t...output.map((b) =>\n\t\t\t\tb.mode ? stripVTControlCharacters(b.mode).length : headings.mode.length\n\t\t\t)\n\t\t);\n\n\t\tconst hasMode = output.some((b) => b.mode);\n\t\tconst bindingPrefix = `env.`;\n\t\tconst bindingLength =\n\t\t\tbindingPrefix.length +\n\t\t\tmaxNameLength +\n\t\t\t\" (\".length +\n\t\t\tmaxValueLength +\n\t\t\t\")\".length;\n\n\t\tconst columnGapSpaces = 6;\n\t\tconst columnGapSpacesWrapped = 4;\n\n\t\tconst shouldWrap =\n\t\t\tbindingLength +\n\t\t\t\tcolumnGapSpaces +\n\t\t\t\tmaxTypeLength +\n\t\t\t\tcolumnGapSpaces +\n\t\t\t\tmaxModeLength >=\n\t\t\tprocess.stdout.columns;\n\n\t\tlog(title);\n\t\tconst columnGap = shouldWrap\n\t\t\t? \" \".repeat(columnGapSpacesWrapped)\n\t\t\t: \" \".repeat(columnGapSpaces);\n\n\t\tlog(\n\t\t\t`${padEndAnsi(dim(headings.binding), shouldWrap ? bindingPrefix.length + maxNameLength : bindingLength)}${columnGap}${padEndAnsi(dim(headings.resource), maxTypeLength)}${columnGap}${hasMode ? dim(headings.mode) : \"\"}`\n\t\t);\n\n\t\tfor (const binding of output) {\n\t\t\tconst bindingValue = dim(\n\t\t\t\ttypeof binding.value === \"symbol\"\n\t\t\t\t\t? chalk.italic(\"inherited\")\n\t\t\t\t\t: (binding.value ?? \"\")\n\t\t\t);\n\t\t\tconst bindingString = padEndAnsi(\n\t\t\t\t`${white(`env.${binding.name}`)}${binding.value && !shouldWrap ? ` (${bindingValue})` : \"\"}`,\n\t\t\t\tshouldWrap ? bindingPrefix.length + maxNameLength : bindingLength\n\t\t\t);\n\n\t\t\tconst suffix = shouldWrap\n\t\t\t\t? binding.value\n\t\t\t\t\t? `\\n ${bindingValue}`\n\t\t\t\t\t: \"\"\n\t\t\t\t: \"\";\n\n\t\t\tlog(\n\t\t\t\t`${bindingString}${columnGap}${brandColor(binding.type.padEnd(maxTypeLength))}${columnGap}${hasMode ? binding.mode : \"\"}${suffix}`\n\t\t\t);\n\t\t}\n\t\tlog(\"\");\n\t}\n\tlet title: string;\n\tif (context.name && isMultiWorker) {\n\t\ttitle = `${chalk.blue(context.name)} is sending Tail events to the following Workers:`;\n\t} else {\n\t\ttitle = \"Your Worker is sending Tail events to the following Workers:\";\n\t}\n\n\tconst allTailConsumers = [\n\t\t...(tailConsumers ?? []).map((c) => ({\n\t\t\tservice: c.service,\n\t\t\tstreaming: false,\n\t\t})),\n\t\t...(streamingTailConsumers ?? []).map((c) => ({\n\t\t\tservice: c.service,\n\t\t\tstreaming: true,\n\t\t})),\n\t];\n\tif (allTailConsumers.length > 0) {\n\t\tlog(\n\t\t\t`${title}\\n${allTailConsumers\n\t\t\t\t.map(({ service, streaming }) => {\n\t\t\t\t\tconst displayName = `${service}${streaming ? ` (streaming)` : \"\"}`;\n\t\t\t\t\tif (context.local && context.registry !== null) {\n\t\t\t\t\t\tconst registryDefinition = context.registry?.[service];\n\t\t\t\t\t\thasConnectionStatus = true;\n\n\t\t\t\t\t\tif (registryDefinition) {\n\t\t\t\t\t\t\treturn `- ${displayName} ${chalk.green(\"[connected]\")}`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn `- ${displayName} ${chalk.red(\"[not connected]\")}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn `- ${displayName}`;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\")}`\n\t\t);\n\t}\n\n\tif (containers.length > 0 && !context.provisioning) {\n\t\tlet containersTitle = \"The following containers are available:\";\n\t\tif (context.name && isMultiWorker) {\n\t\t\tcontainersTitle = `The following containers are available from ${chalk.blue(context.name)}:`;\n\t\t}\n\n\t\tlog(\n\t\t\t`${containersTitle}\\n${containers\n\t\t\t\t.map((c) => `- ${c.name} (${c.image})`)\n\t\t\t\t.join(\"\\n\")}`\n\t\t);\n\t\tlog(\"\");\n\t}\n\n\tif (context.unsafeMetadata) {\n\t\tlog(\"The following unsafe metadata will be attached to your Worker:\");\n\t\tlog(JSON.stringify(context.unsafeMetadata, null, 2));\n\t}\n\n\tif (hasConnectionStatus && !isConnectedStatusExplained) {\n\t\tlog(\n\t\t\tdim(\n\t\t\t\t`\\nService bindings, Durable Object bindings, and Tail consumers connect to other Wrangler or Vite dev processes running locally, with their connection status indicated by ${chalk.green(\"[connected]\")} or ${chalk.red(\"[not connected]\")}. For more details, refer to https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/#local-development\\n`\n\t\t\t)\n\t\t);\n\t\tisConnectedStatusExplained = true;\n\t}\n}\n\n// Exactly the same as String.padEnd, but doesn't miscount ANSI control characters\nfunction padEndAnsi(str: string, length: number) {\n\treturn (\n\t\tstr + \" \".repeat(Math.max(0, length - stripVTControlCharacters(str).length))\n\t);\n}\n\n/**\n * Creates a function for adding a suffix to the value of a binding in the console.\n *\n * The suffix is only for local dev so it can be used to determine whether a binding is\n * simulated locally or connected to a remote resource.\n */\nfunction createGetMode({\n\tisProvisioning = false,\n\tisLocalDev = false,\n}: {\n\tisProvisioning?: boolean;\n\tisLocalDev?: boolean;\n}) {\n\treturn function bindingMode({\n\t\tisSimulatedLocally,\n\t\tconnected,\n\t}: {\n\t\t// Is this binding running locally?\n\t\tisSimulatedLocally?: boolean;\n\t\t// If this is an external service/tail/etc... binding, is it connected?\n\t\t// true = connected via the dev registry\n\t\t// false = trying to connect via the dev registry, but the target is not found\n\t\t// undefined = dev registry is disabled or the binding is in remote mode (which always implies connection)\n\t\tconnected?: boolean;\n\t} = {}): string | undefined {\n\t\tif (isProvisioning || !isLocalDev) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (isSimulatedLocally === undefined) {\n\t\t\treturn dim(\"not supported\");\n\t\t}\n\n\t\treturn `${isSimulatedLocally ? chalk.blue(\"local\") : chalk.yellow(\"remote\")}${connected === undefined ? \"\" : connected ? chalk.green(\" [connected]\") : chalk.red(\" [not connected]\")}`;\n\t};\n}\n","import ci from \"ci-info\";\n\n/**\n * Whether stdin and stdout are both attached to a TTY.\n *\n * Inlined here (rather than importing `@cloudflare/cli-shared-helpers`) because\n * that package depends on `@cloudflare/workers-utils`, so importing it back\n * would create a dependency cycle. The check is a one-liner, so duplicating it\n * is cheaper than the cycle.\n */\nfunction isTtyInteractive(): boolean {\n\ttry {\n\t\treturn Boolean(process.stdin.isTTY && process.stdout.isTTY);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns whether the process can handle interactive input (e.g. hotkeys).\n *\n * A process is considered interactive when **both** conditions are met:\n * - It is **not** running in a Cloudflare CI environment (Pages or Workers CI).\n * - `stdin` and `stdout` are connected to a TTY (not piped from/to another process).\n *\n * Note: generic CI environments (e.g. GitHub Actions) do **not** disable interactivity,\n * because a real PTY may still be attached and hotkeys should still work.\n *\n * Use this for features that require a TTY but should remain functional in generic CI:\n * - Registering hotkeys (e.g. `x` to exit `wrangler dev`)\n * - Enabling raw mode / keypress handling\n * - Showing animated spinners or progress indicators\n * - Reading secrets from an interactive prompt vs stdin\n *\n * Use {@link isNonInteractiveOrCI} instead when user input should be suppressed\n * in **all** CI environments.\n *\n * @returns `true` if the process is interactive, `false` otherwise.\n */\nexport function isInteractive(): boolean {\n\t// Only Cloudflare-specific CI environments force non-interactive mode.\n\t// Generic CI (e.g. GitHub Actions) is intentionally excluded here because\n\t// tools like `node-pty` can attach a real PTY in CI, and features like\n\t// hotkeys (e.g. 'x' to exit `wrangler dev`) should still work in that case.\n\t// For suppressing user prompts in all CI environments, use isNonInteractiveOrCI().\n\tif (ci.CLOUDFLARE_PAGES || ci.CLOUDFLARE_WORKERS) {\n\t\treturn false;\n\t}\n\n\treturn isTtyInteractive();\n}\n\n/**\n * Returns whether the process should not prompt the user.\n *\n * Returns `true` when the process is non-interactive (no TTY) **or** running\n * in any CI environment (detected via `ci-info`). This is stricter than\n * {@link isInteractive} which only checks for Cloudflare-specific CI,\n * because user prompts should never appear in CI even when a PTY is attached.\n *\n * Use this for anything that should be suppressed or adapted in CI:\n * - User prompts (confirmations, text input, select dialogs)\n * - OAuth login flows\n * - Output format decisions (JSON in CI, pretty when interactive)\n * - Banner / decoration display\n * - Redacting sensitive info (account names, emails) in CI logs\n * - Writing config changes back to disk (e.g. provisioned resource IDs)\n *\n * @returns `true` if the process is non-interactive or running in CI.\n */\nexport function isNonInteractiveOrCI(): boolean {\n\treturn !isInteractive() || ci.isCI;\n}\n\n/**\n * Whether the process is running in any CI environment (per `ci-info`).\n *\n * Distinct from {@link isNonInteractiveOrCI}: this ignores TTY state, so it is\n * `true` only for genuine CI, not for merely non-interactive contexts (agents,\n * piped commands). Used for behaviour that should key off CI specifically — e.g.\n * redacting account names / emails in public CI logs while still showing them to\n * non-interactive local tooling.\n *\n * Exposed from this package (rather than having consumers `import \"ci-info\"`\n * directly) so the value flows through the mockable `ci-info` boundary and\n * consumers don't take a fresh, unmockable dependency on it.\n */\nexport function isCI(): boolean {\n\treturn ci.isCI;\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as find from \"empathic/find\";\nimport { getWranglerCacheDirFromEnv } from \"./environment-variables/misc-variables\";\nimport { removeDirSync } from \"./fs-helpers\";\nimport { isNonInteractiveOrCI } from \"./is-interactive\";\nimport type { Logger } from \"./logger\";\n\n/**\n * A file-backed key/value cache scoped to a consumer's cache directory.\n *\n * The mechanism is generic (JSON blobs keyed by file name); the only\n * consumer-specific input is the logger used for debug output, so the whole\n * bundle is built by {@link createConfigCache}. Wrangler wraps this with its\n * logger singleton in `src/config-cache.ts`; `@cloudflare/workers-auth` builds\n * its own instance with the logger injected into `createWranglerAuth`.\n */\nexport interface ConfigCache {\n\tgetCacheFolder: () => string;\n\tgetConfigCache: <T>(fileName: string) => Partial<T>;\n\tsaveToConfigCache: <T>(fileName: string, newValues: Partial<T>) => void;\n\tpurgeConfigCaches: () => void;\n}\n\nexport interface ConfigCacheOptions {\n\t/**\n\t * Namespace for the cache directory, so different Cloudflare CLIs get\n\t * isolated caches (`<node_modules>/.cache/<namespace>` or\n\t * `.<namespace>/cache`). Defaults to `\"wrangler\"` for backward compatibility.\n\t *\n\t * `purgeConfigCaches()` deletes the whole cache folder, so a non-default\n\t * namespace also ensures e.g. `cf login`/`logout` never wipes wrangler's\n\t * cache.\n\t */\n\tnamespace?: string;\n}\n\nconst arrayFormatter = new Intl.ListFormat(\"en-US\", {\n\tstyle: \"long\",\n\ttype: \"conjunction\",\n});\n\n/**\n * Build a file-backed config cache bound to the given logger.\n */\nexport function createConfigCache(\n\tlogger: Logger,\n\toptions?: ConfigCacheOptions\n): ConfigCache {\n\tlet cacheMessageShown = false;\n\tconst namespace = options?.namespace ?? \"wrangler\";\n\n\t/**\n\t * Determines the cache folder location using the following priority:\n\t * 1. WRANGLER_CACHE_DIR environment variable (wrangler namespace only)\n\t * 2. Existing <node_modules>/.cache/<namespace> directory (backward compatibility)\n\t * 3. Existing .<namespace>/cache directory\n\t * 4. <node_modules>/.cache/<namespace> if node_modules exists\n\t * 5. .<namespace>/cache as final fallback\n\t */\n\tfunction getCacheFolder(): string {\n\t\t// Priority 1: Explicit environment variable. WRANGLER_CACHE_DIR is a\n\t\t// wrangler-specific override, so only the wrangler namespace honours it;\n\t\t// other CLIs get their own isolated cache dir instead of being redirected\n\t\t// into wrangler's.\n\t\tif (namespace === \"wrangler\") {\n\t\t\tconst envCacheDir = getWranglerCacheDirFromEnv();\n\t\t\tif (envCacheDir) {\n\t\t\t\treturn envCacheDir;\n\t\t\t}\n\t\t}\n\n\t\t// Find node_modules using existing find-up logic\n\t\tconst closestNodeModulesDirectory = find.dir(\"node_modules\");\n\n\t\tconst nodeModulesCache = closestNodeModulesDirectory\n\t\t\t? path.join(closestNodeModulesDirectory, \".cache\", namespace)\n\t\t\t: null;\n\n\t\tconst localCache = path.join(process.cwd(), `.${namespace}`, \"cache\");\n\n\t\t// Priority 2: Use existing node_modules cache if present\n\t\tif (nodeModulesCache && existsSync(nodeModulesCache)) {\n\t\t\treturn nodeModulesCache;\n\t\t}\n\n\t\t// Priority 3: Use existing .<namespace>/cache if present\n\t\tif (existsSync(localCache)) {\n\t\t\treturn localCache;\n\t\t}\n\n\t\t// Priority 4: Create in node_modules if it exists\n\t\tif (nodeModulesCache) {\n\t\t\treturn nodeModulesCache;\n\t\t}\n\n\t\t// Priority 5: Fall back to .<namespace>/cache\n\t\treturn localCache;\n\t}\n\n\tfunction showCacheMessage(fields: string[], folder: string) {\n\t\tif (!cacheMessageShown && !isNonInteractiveOrCI()) {\n\t\t\tif (fields.length > 0) {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`Retrieving cached values for ${arrayFormatter.format(\n\t\t\t\t\t\tfields\n\t\t\t\t\t)} from ${path.relative(process.cwd(), folder)}`\n\t\t\t\t);\n\t\t\t\tcacheMessageShown = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getConfigCache<T>(fileName: string): Partial<T> {\n\t\ttry {\n\t\t\tconst cacheFolder = getCacheFolder();\n\t\t\tconst configCacheLocation = path.join(cacheFolder, fileName);\n\t\t\tconst configCache = JSON.parse(\n\t\t\t\treadFileSync(configCacheLocation, \"utf-8\")\n\t\t\t);\n\t\t\tshowCacheMessage(Object.keys(configCache), cacheFolder);\n\t\t\treturn configCache;\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tfunction saveToConfigCache<T>(fileName: string, newValues: Partial<T>): void {\n\t\tconst cacheFolder = getCacheFolder();\n\t\tif (cacheFolder) {\n\t\t\tlogger.debug(`Saving to cache: ${JSON.stringify(newValues)}`);\n\t\t\tconst configCacheLocation = path.join(cacheFolder, fileName);\n\t\t\tconst existingValues = getConfigCache(fileName);\n\n\t\t\tmkdirSync(path.dirname(configCacheLocation), { recursive: true });\n\t\t\twriteFileSync(\n\t\t\t\tconfigCacheLocation,\n\t\t\t\tJSON.stringify({ ...existingValues, ...newValues }, null, 2)\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction purgeConfigCaches() {\n\t\tconst cacheFolder = getCacheFolder();\n\t\tif (cacheFolder) {\n\t\t\tremoveDirSync(cacheFolder);\n\t\t}\n\t}\n\n\treturn {\n\t\tgetCacheFolder,\n\t\tgetConfigCache,\n\t\tsaveToConfigCache,\n\t\tpurgeConfigCaches,\n\t};\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { onExit } from \"signal-exit\";\nimport { removeDirSync } from \"./fs-helpers\";\n\n/**\n * A short-lived directory. Automatically removed when the process exits, but\n * can be removed earlier by calling `remove()`.\n */\nexport interface EphemeralDirectory {\n\tpath: string;\n\tremove(): void;\n}\n\n/**\n * Gets the path to the project's `.wrangler` folder.\n */\nexport function getWranglerHiddenDirPath(\n\tprojectRoot: string | undefined\n): string {\n\tprojectRoot ??= process.cwd();\n\treturn path.join(projectRoot, \".wrangler\");\n}\n\n/**\n * Maximum age of a `.wrangler/tmp/*` entry before we treat it as orphaned and\n * eligible for the startup sweep. Tuned to avoid touching any directory a\n * concurrent wrangler session might still own.\n */\nconst STALE_WRANGLER_TMP_DIR_MS = 24 * 60 * 60 * 1000;\n\n/**\n * Tracks tmp roots already swept by this process so repeated\n * `getWranglerTmpDir` calls within one wrangler invocation only scan once.\n */\nconst sweptTmpRoots = new Set<string>();\n\n/**\n * Removes stale `.wrangler/tmp/*` entries left behind by previous wrangler\n * sessions that exited abnormally (SIGKILL, OOM, host crash) and so missed\n * the `signal-exit` cleanup. Runs at most once per tmp root per process.\n *\n * Exported for tests.\n */\nexport function sweepStaleWranglerTmpDirs(tmpRoot: string): void {\n\tif (sweptTmpRoots.has(tmpRoot)) {\n\t\treturn;\n\t}\n\tsweptTmpRoots.add(tmpRoot);\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(tmpRoot, { withFileTypes: true });\n\t} catch {\n\t\treturn;\n\t}\n\n\tconst cutoff = Date.now() - STALE_WRANGLER_TMP_DIR_MS;\n\tfor (const entry of entries) {\n\t\tif (!entry.isDirectory()) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst entryPath = path.join(tmpRoot, entry.name);\n\t\ttry {\n\t\t\tif (fs.statSync(entryPath).mtimeMs < cutoff) {\n\t\t\t\tremoveDirSync(entryPath);\n\t\t\t}\n\t\t} catch {\n\t\t\t/* best effort - another process may have removed it first */\n\t\t}\n\t}\n}\n\n/**\n * Gets a temporary directory in the project's `.wrangler` folder with the\n * specified prefix. We create temporary directories in `.wrangler` as opposed\n * to the OS's temporary directory to avoid issues with different drive letters\n * on Windows. For example, when `esbuild` outputs a file to a different drive\n * than the input sources, the generated source maps are incorrect.\n */\nexport function getWranglerTmpDir(\n\tprojectRoot: string | undefined,\n\tprefix: string,\n\tcleanup = true\n): EphemeralDirectory {\n\tconst tmpRoot = path.join(getWranglerHiddenDirPath(projectRoot), \"tmp\");\n\tfs.mkdirSync(tmpRoot, { recursive: true });\n\tsweepStaleWranglerTmpDirs(tmpRoot);\n\n\tconst tmpPrefix = path.join(tmpRoot, `${prefix}-`);\n\tconst tmpDir = fs.realpathSync(fs.mkdtempSync(tmpPrefix));\n\n\tconst cleanupDir = () => {\n\t\tif (cleanup) {\n\t\t\ttry {\n\t\t\t\tremoveDirSync(tmpDir);\n\t\t\t} catch {\n\t\t\t\t/* best effort */\n\t\t\t}\n\t\t}\n\t};\n\tconst removeExitListener = onExit(cleanupDir);\n\n\treturn {\n\t\tpath: tmpDir,\n\t\tremove() {\n\t\t\tremoveExitListener();\n\t\t\tcleanupDir();\n\t\t},\n\t};\n}\n","/**\n * cloudflared binary management for Wrangler tunnel commands.\n *\n * This module handles downloading, caching, and running the cloudflared binary.\n * It uses the Cloudflare update worker (update.argotunnel.com) to resolve\n * the latest version and download URL, matching cloudflared's own update mechanism.\n */\n\nimport { execFileSync, spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n\taccessSync,\n\tchmodSync,\n\tconstants,\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\trenameSync,\n\tunlinkSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { arch } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { sync as commandExistsSync } from \"command-exists\";\nimport { fetch } from \"undici\";\nimport { getCloudflaredPathFromEnv } from \"./environment-variables/misc-variables\";\nimport { UserError } from \"./errors\";\nimport { removeDirSync } from \"./fs-helpers\";\nimport { getGlobalConfigPath } from \"./global-wrangler-config-path\";\nimport type { Logger } from \"./logger\";\nimport type { ChildProcess } from \"node:child_process\";\n\n/**\n * Cloudflare update worker URL.\n * This is the same endpoint cloudflared itself uses for self-update.\n * It takes os, arch, and version query parameters and returns JSON with\n * the download URL, version, checksum, and whether compression is used.\n * The worker uses KV for caching.\n */\nconst UPDATE_SERVICE_URL = \"https://update.argotunnel.com\";\n\n/**\n * Response shape from the Cloudflare update worker.\n */\ninterface VersionResponse {\n\turl: string;\n\tversion: string;\n\tchecksum: string;\n\tcompressed: boolean;\n\tshouldUpdate: boolean;\n\tuserMessage: string;\n\terror: string;\n}\n\nconst CLOUDFLARED_VERSION_PATTERN = /^\\d{4}\\.\\d+\\.\\d+$/;\n\nfunction sha256Hex(buffer: Buffer): string {\n\treturn createHash(\"sha256\").update(buffer).digest(\"hex\");\n}\n\n/**\n * Map Node.js arch() values to Go runtime.GOARCH values\n * used by the update worker.\n */\nfunction getGoArch(): string {\n\tconst nodeArch = arch();\n\tswitch (nodeArch) {\n\t\tcase \"x64\":\n\t\t\treturn \"amd64\";\n\t\tcase \"arm64\":\n\t\t\treturn \"arm64\";\n\t\tcase \"arm\":\n\t\t\treturn \"arm\";\n\t\tdefault:\n\t\t\tthrow new UserError(\n\t\t\t\t`Unsupported architecture for cloudflared: ${nodeArch}\\n\\n` +\n\t\t\t\t\t`cloudflared supports: x64 (amd64), arm64, arm\\n\\n` +\n\t\t\t\t\t`You can manually install cloudflared and set the CLOUDFLARED_PATH environment variable.\\n` +\n\t\t\t\t\t`Download instructions: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n\t\t\t\t{ telemetryMessage: \"tunnel cloudflared unsupported architecture\" }\n\t\t\t);\n\t}\n}\n\n/**\n * Map Node.js process.platform to Go runtime.GOOS values\n * used by the update worker.\n */\nfunction getGoOS(): string {\n\tswitch (process.platform) {\n\t\tcase \"darwin\":\n\t\t\treturn \"darwin\";\n\t\tcase \"linux\":\n\t\t\treturn \"linux\";\n\t\tcase \"win32\":\n\t\t\treturn \"windows\";\n\t\tdefault:\n\t\t\tthrow new UserError(\n\t\t\t\t`Unsupported platform for cloudflared: ${process.platform}\\n\\n` +\n\t\t\t\t\t`cloudflared supports: darwin (macOS), linux, win32 (Windows)\\n\\n` +\n\t\t\t\t\t`You can manually install cloudflared and set the CLOUDFLARED_PATH environment variable.\\n` +\n\t\t\t\t\t`Download instructions: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n\t\t\t\t{ telemetryMessage: \"tunnel cloudflared unsupported platform\" }\n\t\t\t);\n\t}\n}\n\n/** GitHub release URL pattern for cloudflared binaries. */\nconst GITHUB_RELEASE_BASE =\n\t\"https://github.com/cloudflare/cloudflared/releases/download\";\n\n/**\n * Build the expected GitHub release asset filename for this platform.\n */\nexport function getAssetFilename(goOS: string, goArch: string): string {\n\tif (goOS === \"windows\") {\n\t\treturn `cloudflared-${goOS}-${goArch}.exe`;\n\t}\n\tif (goOS === \"darwin\") {\n\t\treturn `cloudflared-${goOS}-${goArch}.tgz`;\n\t}\n\treturn `cloudflared-${goOS}-${goArch}`;\n}\n\n/**\n * Query the update worker for a specific os/arch combination.\n * Returns the parsed response, or null if the request failed or the\n * worker returned an error (e.g. \"no release found\").\n */\nasync function queryUpdateService(\n\tgoOS: string,\n\tgoArch: string,\n\toptions?: { logger?: Pick<Logger, \"debug\" | \"log\" | \"warn\"> }\n): Promise<VersionResponse | null> {\n\tconst { logger } = options ?? {};\n\tconst url = new URL(UPDATE_SERVICE_URL);\n\turl.searchParams.set(\"os\", goOS);\n\turl.searchParams.set(\"arch\", goArch);\n\n\tlogger?.debug(`Checking for latest cloudflared: ${url.toString()}`);\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await fetch(url.toString(), {\n\t\t\theaders: { \"User-Agent\": \"wrangler\" },\n\t\t});\n\t} catch (e) {\n\t\tlogger?.debug(\n\t\t\t`Failed to reach update service: ${e instanceof Error ? e.message : String(e)}`\n\t\t);\n\t\treturn null;\n\t}\n\n\tif (!response.ok) {\n\t\tlogger?.debug(\n\t\t\t`Update service returned ${response.status} for ${goOS}/${goArch}`\n\t\t);\n\t\treturn null;\n\t}\n\n\tlet data: VersionResponse;\n\ttry {\n\t\tdata = (await response.json()) as VersionResponse;\n\t} catch (e) {\n\t\tlogger?.debug(\n\t\t\t`Update service returned non-JSON response: ${e instanceof Error ? e.message : String(e)}`\n\t\t);\n\t\treturn null;\n\t}\n\n\tif (\n\t\ttypeof data.version === \"string\" &&\n\t\t!CLOUDFLARED_VERSION_PATTERN.test(data.version)\n\t) {\n\t\tthrow new Error(\n\t\t\t`[cloudflared] Invalid cloudflared version returned by update service: ${data.version}`\n\t\t);\n\t}\n\n\t// The update worker may return a response with only a version but no download URL\n\t// (e.g. when querying a platform it doesn't have a binary for). In that case we\n\t// still return the data so callers can use the version to construct a fallback URL.\n\tif (data.error || !data.url || !data.version) {\n\t\treturn data.version ? data : null;\n\t}\n\n\treturn data;\n}\n\n/**\n * Query the Cloudflare update worker to get the latest cloudflared version info.\n *\n * The update worker doesn't have entries for every os/arch combination\n * (e.g. darwin/arm64 is missing even though the GitHub release exists).\n * When the primary query fails, we fall back to querying a known-working\n * combination (linux/amd64) to discover the latest version, then construct\n * the GitHub release URL directly.\n */\nasync function getLatestVersionInfo(options?: {\n\tlogger?: Pick<Logger, \"debug\" | \"log\" | \"warn\">;\n}): Promise<VersionResponse> {\n\tconst { logger } = options ?? {};\n\tconst goOS = getGoOS();\n\tconst goArch = getGoArch();\n\n\t// Try the update worker for our exact platform first\n\tconst primary = await queryUpdateService(goOS, goArch, { logger });\n\tif (primary && primary.url && primary.version) {\n\t\treturn primary;\n\t}\n\n\t// Fallback: query a known-working combination to get the latest version,\n\t// then construct the GitHub download URL for our actual platform.\n\tlogger?.debug(\n\t\t`Update worker had no result for ${goOS}/${goArch}, falling back to GitHub release URL`\n\t);\n\n\tconst fallback = await queryUpdateService(\"linux\", \"amd64\", { logger });\n\tif (!fallback?.version) {\n\t\tthrow new UserError(\n\t\t\t`[cloudflared] Failed to determine the latest cloudflared version.\\n\\n` +\n\t\t\t\t`The update service did not return results for ${goOS}/${goArch},\\n` +\n\t\t\t\t`and the fallback query also failed.\\n\\n` +\n\t\t\t\t`You can manually install cloudflared from:\\n` +\n\t\t\t\t`https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n\t\t\t{ telemetryMessage: \"tunnel cloudflared version lookup failed\" }\n\t\t);\n\t}\n\n\tconst version = fallback.version;\n\tconst filename = getAssetFilename(goOS, goArch);\n\tconst url = `${GITHUB_RELEASE_BASE}/${version}/${filename}`;\n\tconst compressed = filename.endsWith(\".tgz\");\n\n\treturn {\n\t\turl,\n\t\tversion,\n\t\tchecksum: \"\", // no checksum available for fallback URLs\n\t\tcompressed,\n\t\tshouldUpdate: true,\n\t\tuserMessage: \"\",\n\t\terror: \"\",\n\t};\n}\n\n/**\n * Get the directory where cloudflared binary should be cached.\n * Uses the resolved version so the cache is per-version.\n */\nfunction getCacheDir(version: string): string {\n\treturn join(getGlobalConfigPath(), \"cloudflared\", version);\n}\n\n/**\n * Get the expected path for the cloudflared binary within a version cache dir.\n */\nexport function getCloudflaredBinPath(version: string): string {\n\tconst binName =\n\t\tprocess.platform === \"win32\" ? \"cloudflared.exe\" : \"cloudflared\";\n\treturn join(getCacheDir(version), binName);\n}\n\n/**\n * Check if cloudflared binary exists and is executable at a given path.\n */\nfunction isBinaryExecutable(binPath: string): boolean {\n\ttry {\n\t\taccessSync(binPath, constants.X_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Validate that a binary works correctly by running --version.\n */\nfunction validateBinary(\n\tbinPath: string,\n\toptions?: { logger?: Pick<Logger, \"debug\" | \"log\" | \"warn\"> }\n): void {\n\tconst { logger } = options ?? {};\n\ttry {\n\t\tconst output = execFileSync(binPath, [\"--version\"], {\n\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t\ttimeout: 10000,\n\t\t\tencoding: \"utf8\",\n\t\t}).trim();\n\t\tlogger?.debug(`cloudflared version: ${output}`);\n\t} catch {\n\t\tlet errorMessage = `[cloudflared] Failed to validate cloudflared binary at ${binPath}\\n\\n`;\n\t\terrorMessage += `This usually means:\\n`;\n\t\terrorMessage += ` - The binary is corrupted or incomplete\\n`;\n\t\terrorMessage += ` - You're missing required system libraries\\n`;\n\n\t\tif (process.platform === \"linux\") {\n\t\t\terrorMessage += `\\nOn Linux, make sure you have the required dependencies:\\n`;\n\t\t\terrorMessage += ` - glibc (GNU C Library)\\n`;\n\t\t\terrorMessage += ` - For Debian/Ubuntu: sudo apt-get install libc6\\n`;\n\t\t}\n\n\t\tconst cacheDir = join(getGlobalConfigPath(), \"cloudflared\");\n\t\terrorMessage += `\\nYou can try:\\n`;\n\t\terrorMessage += ` 1. Deleting the cache directory: rm -rf ${cacheDir}\\n`;\n\t\terrorMessage += ` 2. Running the command again to re-download\\n`;\n\t\terrorMessage += ` 3. Manually installing cloudflared: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/\\n`;\n\t\terrorMessage += ` 4. Setting CLOUDFLARED_PATH to point to your cloudflared binary`;\n\n\t\tthrow new UserError(errorMessage, {\n\t\t\ttelemetryMessage: \"tunnel cloudflared validation failed\",\n\t\t});\n\t}\n}\n\nexport function redactCloudflaredArgsForLogging(args: string[]): string[] {\n\tconst redacted = [...args];\n\tfor (let i = 0; i < redacted.length; i++) {\n\t\tconst arg = redacted[i];\n\t\tif (arg === \"--token\" && i + 1 < redacted.length) {\n\t\t\tredacted[i + 1] = \"[REDACTED]\";\n\t\t}\n\t\tif (arg.startsWith(\"--token=\")) {\n\t\t\tredacted[i] = \"--token=[REDACTED]\";\n\t\t}\n\t}\n\treturn redacted;\n}\n\nfunction tryGetCloudflaredFromPath(options?: {\n\tlogger?: Pick<Logger, \"debug\" | \"log\" | \"warn\">;\n}): string | null {\n\tconst { logger } = options ?? {};\n\tif (!commandExistsSync(\"cloudflared\")) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tvalidateBinary(\"cloudflared\", { logger });\n\t\treturn \"cloudflared\";\n\t} catch (e) {\n\t\tlogger?.debug(\"cloudflared found in PATH but failed validation\", e);\n\t\treturn null;\n\t}\n}\n\n/**\n * Extract the version string from `cloudflared --version` output.\n * Output format: \"cloudflared version 2025.7.0 (built 2025-07-03-1703 UTC)\"\n * Returns null if the version cannot be parsed.\n */\nfunction getInstalledVersion(binPath: string): string | null {\n\ttry {\n\t\tconst output = execFileSync(binPath, [\"--version\"], {\n\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t\ttimeout: 10000,\n\t\t\tencoding: \"utf8\",\n\t\t});\n\t\tconst match = output.match(/(\\d+\\.\\d+\\.\\d+)/);\n\t\treturn match ? match[1] : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Compare two cloudflared version strings (e.g. \"2025.7.0\" vs \"2026.2.0\").\n * Returns true if `installed` is older than `latest`.\n */\nexport function isVersionOutdated(installed: string, latest: string): boolean {\n\tconst parse = (v: string) => v.split(\".\").map(Number);\n\tconst [iYear, iMonth, iPatch] = parse(installed);\n\tconst [lYear, lMonth, lPatch] = parse(latest);\n\n\tif (iYear !== lYear) {\n\t\treturn iYear < lYear;\n\t}\n\tif (iMonth !== lMonth) {\n\t\treturn iMonth < lMonth;\n\t}\n\treturn iPatch < lPatch;\n}\n\n/**\n * Check if a PATH-installed cloudflared is outdated compared to the latest\n * version from the update worker. Logs a warning if outdated.\n * This runs asynchronously and never throws — it's purely advisory.\n */\nasync function warnIfOutdated(\n\tbinPath: string,\n\toptions?: { logger?: Pick<Logger, \"debug\" | \"log\" | \"warn\"> }\n): Promise<void> {\n\tconst { logger } = options ?? {};\n\ttry {\n\t\tconst installed = getInstalledVersion(binPath);\n\t\tif (!installed) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Try our platform first, fall back to linux/amd64 (always available)\n\t\tconst latest =\n\t\t\t(await queryUpdateService(getGoOS(), getGoArch(), { logger })) ??\n\t\t\t(await queryUpdateService(\"linux\", \"amd64\", { logger }));\n\t\tconst latestVersion = latest?.version;\n\t\tif (!latestVersion) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isVersionOutdated(installed, latestVersion)) {\n\t\t\tlogger?.warn(\n\t\t\t\t`Your cloudflared (${installed}) is outdated. Latest version is ${latestVersion}.\\n` +\n\t\t\t\t\t`Update: https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`\n\t\t\t);\n\t\t}\n\t} catch (e) {\n\t\tlogger?.debug(\"Failed to check cloudflared version\", e);\n\t}\n}\n\nfunction writeFileAtomic(filePath: string, contents: Buffer): void {\n\tconst dir = dirname(filePath);\n\tconst tmpPath = join(\n\t\tdir,\n\t\t`.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`\n\t);\n\ttry {\n\t\twriteFileSync(tmpPath, contents);\n\t\trenameSync(tmpPath, filePath);\n\t} finally {\n\t\ttry {\n\t\t\tif (existsSync(tmpPath)) {\n\t\t\t\tunlinkSync(tmpPath);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t}\n}\n\n/**\n * Download cloudflared binary using the version info from the update worker.\n */\nasync function downloadCloudflared(\n\tversionInfo: VersionResponse,\n\tbinPath: string,\n\toptions?: { logger?: Pick<Logger, \"debug\" | \"log\" | \"warn\"> }\n): Promise<void> {\n\tconst { logger } = options ?? {};\n\tconst { url, version, checksum, compressed } = versionInfo;\n\n\tlogger?.log(`Downloading cloudflared ${version}...`);\n\tlogger?.debug(`Download URL: ${url}`);\n\n\tconst cacheDir = dirname(binPath);\n\tmkdirSync(cacheDir, { recursive: true });\n\n\tlet response: Response;\n\ttry {\n\t\tresponse = await fetch(url, {\n\t\t\theaders: { \"User-Agent\": \"wrangler\" },\n\t\t});\n\t} catch (e) {\n\t\tthrow new UserError(\n\t\t\t`[cloudflared] Failed to download cloudflared from ${url}\\n\\n` +\n\t\t\t\t`Network error: ${e instanceof Error ? e.message : String(e)}\\n\\n` +\n\t\t\t\t`Please check your internet connection and try again.\\n` +\n\t\t\t\t`If you're behind a proxy, make sure it's configured correctly.`,\n\t\t\t{ telemetryMessage: \"tunnel cloudflared download network failed\" }\n\t\t);\n\t}\n\n\tif (!response.ok) {\n\t\tthrow new UserError(\n\t\t\t`[cloudflared] Failed to download cloudflared from ${url}\\n\\n` +\n\t\t\t\t`HTTP ${response.status}: ${response.statusText}\\n\\n` +\n\t\t\t\t`You can manually download cloudflared from:\\n` +\n\t\t\t\t`https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/`,\n\t\t\t{ telemetryMessage: \"tunnel cloudflared download response failed\" }\n\t\t);\n\t}\n\n\ttry {\n\t\tif (compressed) {\n\t\t\tawait downloadAndExtractTarball(response, checksum, binPath, cacheDir);\n\t\t} else {\n\t\t\tawait downloadBinary(response, checksum, binPath);\n\t\t}\n\t} catch (e) {\n\t\t// Clean up partial downloads\n\t\ttry {\n\t\t\tif (existsSync(binPath)) {\n\t\t\t\tunlinkSync(binPath);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\n\t\tif (e instanceof UserError) {\n\t\t\tthrow e;\n\t\t}\n\n\t\tthrow new UserError(\n\t\t\t`[cloudflared] Failed to save cloudflared binary\\n\\n` +\n\t\t\t\t`Error: ${e instanceof Error ? e.message : String(e)}\\n\\n` +\n\t\t\t\t`Please ensure you have write permissions to: ${cacheDir}`,\n\t\t\t{ telemetryMessage: \"tunnel cloudflared save failed\" }\n\t\t);\n\t}\n\n\t// Make executable on Unix systems\n\tif (process.platform !== \"win32\") {\n\t\tchmodSync(binPath, 0o755);\n\t}\n\n\tlogger?.log(`cloudflared ${version} installed`);\n\tlogger?.debug(`Binary location: ${binPath}`);\n}\n\n/**\n * Download and extract a tarball (for macOS).\n *\n * The update service checksum is for the extracted binary, not the tarball\n * itself. This matches cloudflared's own auto-update behavior — see\n * cloudflared/cmd/cloudflared/updater/workers_update.go: the download()\n * function decompresses .tgz into the raw binary, then Apply() checksums\n * the resulting file. We do the same: extract first, then verify.\n */\nasync function downloadAndExtractTarball(\n\tresponse: Response,\n\texpectedChecksum: string,\n\tbinPath: string,\n\tcacheDir: string\n): Promise<void> {\n\tconst tempTarPath = join(cacheDir, \"cloudflared.tgz\");\n\n\tconst buffer = Buffer.from(await response.arrayBuffer());\n\twriteFileSync(tempTarPath, buffer);\n\n\ttry {\n\t\texecFileSync(\"tar\", [\"-xzf\", tempTarPath, \"-C\", cacheDir], {\n\t\t\tstdio: \"ignore\",\n\t\t});\n\n\t\tconst extractedPath = join(cacheDir, \"cloudflared\");\n\t\tif (extractedPath !== binPath && existsSync(extractedPath)) {\n\t\t\trenameSync(extractedPath, binPath);\n\t\t}\n\n\t\t// Verify checksum against the extracted binary, not the tarball.\n\t\t// The update service provides checksums for the uncompressed binary.\n\t\tif (expectedChecksum) {\n\t\t\tconst extractedBinary = readFileSync(binPath);\n\t\t\tconst actualSha256 = sha256Hex(extractedBinary);\n\t\t\tif (actualSha256 !== expectedChecksum) {\n\t\t\t\tthrow new UserError(\n\t\t\t\t\t`[cloudflared] SHA256 mismatch for downloaded cloudflared binary.\\n\\n` +\n\t\t\t\t\t\t`Expected: ${expectedChecksum}\\n` +\n\t\t\t\t\t\t`Actual: ${actualSha256}`,\n\t\t\t\t\t{\n\t\t\t\t\t\ttelemetryMessage:\n\t\t\t\t\t\t\t\"tunnel cloudflared extracted binary checksum mismatch\",\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} finally {\n\t\ttry {\n\t\t\tif (existsSync(tempTarPath)) {\n\t\t\t\tunlinkSync(tempTarPath);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore cleanup errors\n\t\t}\n\t}\n}\n\n/**\n * Download binary directly (for Linux/Windows)\n */\nasync function downloadBinary(\n\tresponse: Response,\n\texpectedChecksum: string,\n\tbinPath: string\n): Promise<void> {\n\tconst buffer = Buffer.from(await response.arrayBuffer());\n\tif (expectedChecksum) {\n\t\tconst actualSha256 = sha256Hex(buffer);\n\t\tif (actualSha256 !== expectedChecksum) {\n\t\t\tthrow new UserError(\n\t\t\t\t`[cloudflared] SHA256 mismatch for downloaded cloudflared binary.\\n\\n` +\n\t\t\t\t\t`Expected: ${expectedChecksum}\\n` +\n\t\t\t\t\t`Actual: ${actualSha256}`,\n\t\t\t\t{ telemetryMessage: \"tunnel cloudflared binary checksum mismatch\" }\n\t\t\t);\n\t\t}\n\t}\n\twriteFileAtomic(binPath, buffer);\n}\n\n/**\n * Get cloudflared binary path, installing if necessary.\n *\n * Resolution order:\n * 1. CLOUDFLARED_PATH environment variable (user override)\n * 2. cloudflared in system PATH\n * 3. Cached binary in ~/.wrangler/cloudflared/{version}/\n * 4. Download latest from Cloudflare update worker\n */\nexport async function getCloudflaredPath(options?: {\n\tskipVersionCheck?: boolean;\n\tconfirmDownload?: (message: string) => Promise<boolean>;\n\tlogger?: Pick<Logger, \"debug\" | \"log\" | \"warn\">;\n}): Promise<string> {\n\tconst logger = options?.logger;\n\t// Check for environment variable override first\n\tconst envPath = getCloudflaredPathFromEnv();\n\tif (envPath) {\n\t\tif (!existsSync(envPath)) {\n\t\t\tthrow new UserError(\n\t\t\t\t`CLOUDFLARED_PATH is set to \"${envPath}\" but the file does not exist.\\n\\n` +\n\t\t\t\t\t`Please ensure the path points to a valid cloudflared binary.`,\n\t\t\t\t{ telemetryMessage: \"tunnel cloudflared env path missing\" }\n\t\t\t);\n\t\t}\n\t\tlogger?.debug(`Using cloudflared from CLOUDFLARED_PATH: ${envPath}`);\n\t\t// Skip validation — the user explicitly set the path, so trust it.\n\t\t// This also avoids issues on platforms where the binary format\n\t\t// differs (e.g. shell scripts won't pass --version on Windows).\n\t\treturn envPath;\n\t}\n\n\t// Next, prefer a user-installed cloudflared in PATH.\n\tconst pathBin = tryGetCloudflaredFromPath({ logger });\n\tif (pathBin) {\n\t\tlogger?.debug(\"Using cloudflared from PATH\");\n\t\tif (!options?.skipVersionCheck) {\n\t\t\tawait warnIfOutdated(pathBin, { logger });\n\t\t}\n\t\treturn pathBin;\n\t}\n\n\t// Query the update worker for the latest version\n\tconst versionInfo = await getLatestVersionInfo({ logger });\n\tconst binPath = getCloudflaredBinPath(versionInfo.version);\n\n\t// Check if this version is already cached and valid\n\tlet needsDownload = !isBinaryExecutable(binPath);\n\tif (!needsDownload) {\n\t\ttry {\n\t\t\tvalidateBinary(binPath, { logger });\n\t\t\tlogger?.debug(\n\t\t\t\t`Using cached cloudflared ${versionInfo.version}: ${binPath}`\n\t\t\t);\n\t\t\treturn binPath;\n\t\t} catch (e) {\n\t\t\tlogger?.debug(\"Cached cloudflared failed validation; re-downloading\", e);\n\t\t\tneedsDownload = true;\n\t\t}\n\t}\n\n\t// Prompt user before downloading\n\tconst shouldDownload =\n\t\t(await options?.confirmDownload?.(\n\t\t\t`cloudflared (${versionInfo.version}) is needed but not installed. Download to ${binPath}?`\n\t\t)) ?? true;\n\tif (!shouldDownload) {\n\t\tthrow new UserError(\n\t\t\t`cloudflared is required to run this command.\\n\\n` +\n\t\t\t\t`You can install it manually from:\\n` +\n\t\t\t\t`https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/\\n\\n` +\n\t\t\t\t`Then either add it to your PATH or set CLOUDFLARED_PATH.`,\n\t\t\t{ telemetryMessage: \"tunnel cloudflared download declined\" }\n\t\t);\n\t}\n\n\t// Remove corrupted cache only after user has confirmed re-download\n\tif (existsSync(binPath)) {\n\t\tconst cacheDir = removeCloudflaredCache(versionInfo.version);\n\t\tif (cacheDir) {\n\t\t\tlogger?.log(`Removed cloudflared cache: ${cacheDir}`);\n\t\t}\n\t}\n\n\t// Download cloudflared\n\tawait downloadCloudflared(versionInfo, binPath, { logger });\n\n\t// Validate the downloaded binary\n\tvalidateBinary(binPath, { logger });\n\n\treturn binPath;\n}\n\n/**\n * Spawn cloudflared process with automatic binary management\n */\nexport async function spawnCloudflared(\n\targs: string[],\n\toptions?: {\n\t\tstdio?: \"inherit\" | \"pipe\";\n\t\tenv?: Record<string, string>;\n\t\tskipVersionCheck?: boolean;\n\t\tconfirmDownload?: (message: string) => Promise<boolean>;\n\t\tlogger?: Pick<Logger, \"debug\" | \"log\" | \"warn\">;\n\t}\n): Promise<ChildProcess> {\n\tconst logger = options?.logger;\n\tconst binPath = await getCloudflaredPath({\n\t\tskipVersionCheck: options?.skipVersionCheck,\n\t\tconfirmDownload: options?.confirmDownload,\n\t\tlogger,\n\t});\n\n\tlogger?.debug(\n\t\t`Spawning cloudflared: ${binPath} ${redactCloudflaredArgsForLogging(args).join(\" \")}`\n\t);\n\n\tconst cloudflared = spawn(binPath, args, {\n\t\tstdio: options?.stdio ?? \"inherit\",\n\t\tenv: options?.env ? { ...process.env, ...options.env } : undefined,\n\t});\n\n\treturn cloudflared;\n}\n\n/**\n * Remove cached cloudflared binary for a specific version, or all versions.\n */\nexport function removeCloudflaredCache(version?: string): string | null {\n\tconst cacheDir = version\n\t\t? getCacheDir(version)\n\t\t: join(getGlobalConfigPath(), \"cloudflared\");\n\tif (existsSync(cacheDir)) {\n\t\tremoveDirSync(cacheDir);\n\t\treturn cacheDir;\n\t}\n\n\treturn null;\n}\n","import { spawnCloudflared } from \"./cloudflared\";\nimport { UserError } from \"./errors\";\nimport type { Logger } from \"./logger\";\nimport type { ChildProcess } from \"node:child_process\";\n\n/**\n * Quick tunnels typically start in 5-15s, but we allow up to 30s for slow networks.\n */\nconst TUNNEL_STARTUP_TIMEOUT_MS = 30_000;\nconst TUNNEL_FORCE_KILL_TIMEOUT_MS = 5_000;\nconst DEFAULT_TUNNEL_EXPIRY_MS = 60 * 60 * 1_000;\nconst DEFAULT_TUNNEL_EXTENSION_MS = 60 * 60 * 1_000;\nconst DEFAULT_TUNNEL_MAX_REMAINING_MS = 3 * 60 * 60 * 1_000;\nconst DEFAULT_TUNNEL_REMINDER_INTERVAL_MS = 10 * 60 * 1_000;\n\n/**\n * cloudflared logs the quick tunnel URL to stderr.\n */\nconst QUICK_TUNNEL_URL_REGEX = /https:\\/\\/[a-z0-9-]+\\.trycloudflare\\.com/;\n\nexport interface QuickTunnelResult {\n\tmode: \"quick\";\n\tpublicUrl: URL;\n}\n\nexport interface NamedTunnelResult {\n\tmode: \"named\";\n}\n\nexport type TunnelResult = QuickTunnelResult | NamedTunnelResult;\n\nexport interface Tunnel {\n\tready: () => Promise<TunnelResult>;\n\tisOpen: () => boolean;\n\tdispose: () => void;\n\textendExpiry: (ms?: number) => void;\n}\n\nexport interface TunnelOptions {\n\torigin: URL;\n\ttoken?: string;\n\ttimeoutMs?: number;\n\texpiryMs?: number;\n\treminderIntervalMs?: number;\n\textendHint?: string;\n\tlogger?: Pick<Logger, \"debug\" | \"log\" | \"warn\">;\n}\n\n/**\n * Start a Cloudflare Quick Tunnel for a local dev origin.\n *\n * Spawns `cloudflared tunnel --url <origin>` and waits for the public URL\n * to appear in its stderr output. Returns a controller with a `ready()`\n * promise that resolves once the tunnel URL is available, and a `dispose()`\n * function to stop the tunnel.\n */\nexport function startTunnel(options: TunnelOptions): Tunnel {\n\tlet disposed = false;\n\tlet reminderInterval: ReturnType<typeof setInterval> | undefined;\n\tlet expiryTimeout: ReturnType<typeof setTimeout> | undefined;\n\tlet expiresAt = 0;\n\tlet cloudflaredProcess: ChildProcess | undefined;\n\n\tconst logger = options.logger;\n\tconst timeoutMs = options.timeoutMs ?? TUNNEL_STARTUP_TIMEOUT_MS;\n\tconst reminderIntervalMs =\n\t\toptions.reminderIntervalMs ?? DEFAULT_TUNNEL_REMINDER_INTERVAL_MS;\n\tconst defaultExpiryMs = options.expiryMs ?? DEFAULT_TUNNEL_EXPIRY_MS;\n\tconst isNamedTunnel = options.token !== undefined;\n\tconst timeFormatter = new Intl.DateTimeFormat(undefined, {\n\t\ttimeStyle: \"short\",\n\t});\n\tconst cloudflaredArgs = isNamedTunnel\n\t\t? [\"tunnel\", \"--no-autoupdate\", \"run\"]\n\t\t: [\"tunnel\", \"--no-autoupdate\", \"--url\", options.origin.href];\n\n\tconst cloudflaredPromise = spawnCloudflared(cloudflaredArgs, {\n\t\tstdio: \"pipe\",\n\t\tenv: options.token ? { TUNNEL_TOKEN: options.token } : undefined,\n\t\tskipVersionCheck: true,\n\t\tlogger,\n\t}).then((process) => {\n\t\tcloudflaredProcess = process;\n\n\t\tif (disposed) {\n\t\t\tterminateCloudflared(process);\n\t\t}\n\n\t\treturn process;\n\t});\n\n\tconst readyPromise = cloudflaredPromise\n\t\t.then((process) => {\n\t\t\tif (isNamedTunnel) {\n\t\t\t\treturn { mode: \"named\" } as const;\n\t\t\t}\n\n\t\t\treturn waitForQuickTunnelReady(process, timeoutMs, {\n\t\t\t\tlogger,\n\t\t\t\torigin: options.origin,\n\t\t\t});\n\t\t})\n\t\t.then((result) => {\n\t\t\texpiresAt = Date.now() + defaultExpiryMs;\n\n\t\t\tscheduleExpiryTimeout();\n\t\t\tscheduleReminder(\n\t\t\t\tresult.mode === \"quick\" ? result.publicUrl.origin : undefined\n\t\t\t);\n\n\t\t\treturn result;\n\t\t});\n\n\tfunction disposeTunnel() {\n\t\tdisposed = true;\n\t\tclearTunnelTimers();\n\n\t\tif (cloudflaredProcess) {\n\t\t\tterminateCloudflared(cloudflaredProcess);\n\t\t}\n\t}\n\n\tfunction clearTunnelTimers() {\n\t\tif (expiryTimeout) {\n\t\t\tclearTimeout(expiryTimeout);\n\t\t\texpiryTimeout = undefined;\n\t\t}\n\n\t\tif (reminderInterval) {\n\t\t\tclearInterval(reminderInterval);\n\t\t\treminderInterval = undefined;\n\t\t}\n\t}\n\n\tfunction scheduleReminder(publicURL: string | undefined) {\n\t\tif (reminderIntervalMs > 0) {\n\t\t\treminderInterval = setInterval(() => {\n\t\t\t\tif (disposed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst remainingMs = expiresAt - Date.now();\n\t\t\t\tif (remainingMs <= 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlogger?.log(\n\t\t\t\t\t`${\n\t\t\t\t\t\tpublicURL\n\t\t\t\t\t\t\t? `Tunnel still open, expires in ${formatTunnelDuration(remainingMs)}: ${publicURL}`\n\t\t\t\t\t\t\t: `The tunnel is still open. It expires in ${formatTunnelDuration(remainingMs)}.`\n\t\t\t\t\t}${options.extendHint ? ` ${options.extendHint}` : \"\"}`\n\t\t\t\t);\n\t\t\t}, reminderIntervalMs);\n\t\t\treminderInterval.unref?.();\n\t\t}\n\t}\n\n\tfunction scheduleExpiryTimeout() {\n\t\tif (disposed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (expiryTimeout) {\n\t\t\tclearTimeout(expiryTimeout);\n\t\t}\n\n\t\texpiryTimeout = setTimeout(\n\t\t\t() => {\n\t\t\t\tif (disposed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlogger?.log(\"Tunnel expired. Closing tunnel.\");\n\t\t\t\tdisposeTunnel();\n\t\t\t},\n\t\t\tMath.max(0, expiresAt - Date.now())\n\t\t);\n\t\texpiryTimeout.unref();\n\t}\n\n\tfunction extendExpiry(ms = DEFAULT_TUNNEL_EXTENSION_MS) {\n\t\tif (disposed || !expiryTimeout || ms <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst now = Date.now();\n\t\tconst previousExpiresAt = expiresAt;\n\t\texpiresAt = Math.min(\n\t\t\tnow + DEFAULT_TUNNEL_MAX_REMAINING_MS,\n\t\t\tMath.max(expiresAt, now) + ms\n\t\t);\n\t\tconst extendedByMs = expiresAt - previousExpiresAt;\n\n\t\tif (extendedByMs < ms) {\n\t\t\tlogger?.log(\n\t\t\t\t`Tunnel expiry extended to the ${formatTunnelDuration(DEFAULT_TUNNEL_MAX_REMAINING_MS)} limit. It now expires at ${timeFormatter.format(new Date(expiresAt))}.`\n\t\t\t);\n\t\t\tscheduleExpiryTimeout();\n\t\t\treturn;\n\t\t}\n\n\t\tlogger?.log(\n\t\t\t`Tunnel expiry extended by ${formatTunnelDuration(extendedByMs)}. It now expires at ${timeFormatter.format(new Date(expiresAt))}.`\n\t\t);\n\t\tscheduleExpiryTimeout();\n\t}\n\n\treturn {\n\t\tready: () => readyPromise,\n\t\tisOpen: () => !disposed,\n\t\tdispose: disposeTunnel,\n\t\textendExpiry,\n\t};\n}\n\nfunction formatTunnelDuration(durationMs: number) {\n\tconst totalMinutes = Math.max(1, Math.ceil(durationMs / 60_000));\n\tconst hours = Math.floor(totalMinutes / 60);\n\tconst minutes = totalMinutes % 60;\n\n\tif (hours === 0) {\n\t\treturn `${minutes}m`;\n\t}\n\n\tif (minutes === 0) {\n\t\treturn `${hours}h`;\n\t}\n\n\treturn `${hours}h ${minutes}m`;\n}\n\nfunction terminateCloudflared(cloudflared: ChildProcess) {\n\tif (cloudflared.killed) {\n\t\treturn;\n\t}\n\n\tcloudflared.unref();\n\tcloudflared.kill(\"SIGTERM\");\n\n\tconst forceKillTimer = setTimeout(() => {\n\t\tif (!cloudflared.killed) {\n\t\t\tcloudflared.kill(\"SIGKILL\");\n\t\t}\n\t}, TUNNEL_FORCE_KILL_TIMEOUT_MS);\n\tforceKillTimer.unref();\n}\n\nfunction waitForQuickTunnelReady(\n\tcloudflared: ChildProcess,\n\ttimeoutMs: number,\n\toptions: { logger?: Pick<Logger, \"debug\" | \"log\" | \"warn\">; origin: URL }\n): Promise<TunnelResult> {\n\treturn new Promise<TunnelResult>((resolve, reject) => {\n\t\tlet resolved = false;\n\t\tlet stderrOutput = \"\";\n\t\tconst logger = options?.logger;\n\t\tconst origin = options?.origin;\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\tif (!resolved) {\n\t\t\t\tresolved = true;\n\t\t\t\tterminateCloudflared(cloudflared);\n\t\t\t\treject(\n\t\t\t\t\tcreateTunnelStartupError(\n\t\t\t\t\t\t`Timed out waiting for cloudflared to start (${timeoutMs / 1_000}s).`,\n\t\t\t\t\t\tstderrOutput,\n\t\t\t\t\t\torigin\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}, timeoutMs);\n\t\ttimeoutId.unref();\n\n\t\tif (cloudflared.stderr) {\n\t\t\tcloudflared.stderr.on(\"data\", (data: Buffer) => {\n\t\t\t\tconst chunk = data.toString();\n\t\t\t\tstderrOutput += chunk;\n\t\t\t\tlogger?.debug(\"[cloudflared]\", chunk.trimEnd());\n\n\t\t\t\tconst match = QUICK_TUNNEL_URL_REGEX.exec(stderrOutput);\n\t\t\t\tif (match && !resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\tresolve({ mode: \"quick\", publicUrl: new URL(match[0]) });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tcloudflared.on(\"error\", (error) => {\n\t\t\tif (!resolved) {\n\t\t\t\tresolved = true;\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\treject(new Error(`Failed to start cloudflared: ${error.message}`));\n\t\t\t}\n\t\t});\n\n\t\tcloudflared.on(\"exit\", (code, signal) => {\n\t\t\tif (!resolved) {\n\t\t\t\tresolved = true;\n\t\t\t\tclearTimeout(timeoutId);\n\n\t\t\t\tconst reason = signal\n\t\t\t\t\t? `terminated by signal ${signal}`\n\t\t\t\t\t: `exited with code ${code}`;\n\n\t\t\t\treject(\n\t\t\t\t\tcreateTunnelStartupError(\n\t\t\t\t\t\t`cloudflared ${reason} before the tunnel was ready.`,\n\t\t\t\t\t\tstderrOutput,\n\t\t\t\t\t\torigin\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t});\n}\n\nfunction createTunnelStartupError(\n\tmessage: string,\n\tstderrOutput: string,\n\torigin: URL\n): Error {\n\tconst isQuickTunnelRateLimited = stderrOutput.includes(\n\t\t\"429 Too Many Requests\"\n\t);\n\tconst errorMessage =\n\t\t`${message}\\n` +\n\t\t`cloudflared output:\\n${stderrOutput || \"(no output)\"}\\n\\n` +\n\t\t`The local dev server started at ${origin.href}\\n` +\n\t\t(isQuickTunnelRateLimited\n\t\t\t? \"Cloudflare Quick Tunnel creation was rate limited. Try again in a few minutes, or use a named tunnel if you need more reliable access.\"\n\t\t\t: `Check the cloudflared output above for more details, and verify that ${origin.href} is reachable from this machine if this keeps happening.`);\n\n\tif (isQuickTunnelRateLimited) {\n\t\treturn new UserError(errorMessage, { telemetryMessage: false });\n\t}\n\n\treturn new Error(errorMessage);\n}\n","import { ParseError } from \"../parse\";\n\nexport interface FetchError {\n\tcode: number;\n\tdocumentation_url?: string;\n\tmessage: string;\n\terror_chain?: FetchError[];\n\t/**\n\t * Optional structured error metadata returned alongside the message. The\n\t * Cloudflare v4 envelope permits a `meta` object whose shape varies by\n\t * endpoint; consumers are expected to validate the shape at use site\n\t * before relying on any field.\n\t *\n\t * Known usage: declarative DO exports reconciliation returns `meta.details`\n\t * as an array of per-class errors.\n\t */\n\tmeta?: { details?: unknown } & Record<string, unknown>;\n}\n\nfunction buildDetailedError(message: string, ...extra: string[]) {\n\treturn new ParseError({\n\t\ttext: message,\n\t\tnotes: extra.map((text) => ({ text })),\n\t\ttelemetryMessage: false,\n\t});\n}\n\nexport function maybeThrowFriendlyError(error: FetchError) {\n\tif (error.message === \"workers.api.error.email_verification_required\") {\n\t\tthrow buildDetailedError(\n\t\t\t\"Please verify your account's email address and try again.\",\n\t\t\t\"Check your email for a verification link, or login to https://dash.cloudflare.com and request a new one.\"\n\t\t);\n\t}\n}\n","import assert from \"node:assert\";\nimport { URLSearchParams } from \"node:url\";\nimport { fetch, FormData, Headers, Response } from \"undici\";\nimport {\n\tgetCloudflareApiBaseUrl,\n\tgetTraceHeader,\n} from \"../environment-variables/misc-variables\";\nimport { UserError } from \"../errors\";\nimport { APIError, parseJSON } from \"../parse\";\nimport { type FetchError, maybeThrowFriendlyError } from \"./errors\";\nimport type { ComplianceConfig } from \"../environment-variables/misc-variables\";\nimport type { Logger } from \"../logger\";\nimport type { HeadersInit, RequestInit } from \"undici\";\n\nexport type ApiCredentials =\n\t| {\n\t\t\tapiToken: string;\n\t }\n\t| {\n\t\t\tauthKey: string;\n\t\t\tauthEmail: string;\n\t };\n\nexport interface FetchResult<ResponseType = unknown> {\n\tsuccess: boolean;\n\tresult: ResponseType;\n\terrors: FetchError[];\n\tmessages?: (string | { code?: number; message: string })[];\n\tresult_info?: unknown;\n}\n\nexport type FetchResultFetcher = <ResponseType>(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit?: RequestInit,\n\tqueryParams?: URLSearchParams,\n\tabortSignal?: AbortSignal\n) => Promise<ResponseType>;\n\nexport type FetchListResultFetcher = <ResponseType>(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit?: RequestInit,\n\tqueryParams?: URLSearchParams\n) => Promise<ResponseType[]>;\n\nexport type FetchPagedListResultFetcher = <ResponseType>(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit?: RequestInit,\n\tqueryParams?: URLSearchParams\n) => Promise<ResponseType[]>;\n\nfunction logHeaders(headers: Headers, logger: Logger): void {\n\tconst clone = cloneHeaders(headers);\n\tclone.delete(\"Authorization\");\n\tlogger.debugWithSanitization?.(\n\t\t\"HEADERS:\",\n\t\tJSON.stringify(Object.fromEntries(clone), null, 2)\n\t);\n}\n\n/**\n *\n * Note this requires its caller to handle credentials\n * (need to call requireLoggedIn and requireApiToken)\n */\nexport async function performApiFetchBase(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit: RequestInit = {},\n\tuserAgent: string,\n\tlogger: Logger,\n\tqueryParams?: URLSearchParams,\n\tabortSignal?: AbortSignal,\n\tcredentials?: ApiCredentials\n): Promise<Response> {\n\tassert(credentials, \"credentials are required for performApiFetch\");\n\tconst method = init.method ?? \"GET\";\n\tassert(\n\t\tresource.startsWith(\"/\"),\n\t\t`CF API fetch - resource path must start with a \"/\" but got \"${resource}\"`\n\t);\n\tconst headers = cloneHeaders(new Headers(init.headers));\n\taddAuthorizationHeader(headers, credentials);\n\theaders.set(\"User-Agent\", userAgent);\n\tmaybeAddTraceHeader(headers);\n\n\tconst queryString = queryParams ? `?${queryParams.toString()}` : \"\";\n\tlogger.debug(\n\t\t`-- START CF API REQUEST: ${method} ${getCloudflareApiBaseUrl(complianceConfig)}${resource}`\n\t);\n\tlogger.debugWithSanitization?.(\"QUERY STRING:\", queryString);\n\tlogHeaders(headers, logger);\n\n\tlogger.debugWithSanitization?.(\"INIT:\", JSON.stringify({ ...init }, null, 2));\n\tif (init.body instanceof FormData) {\n\t\tlogger.debugWithSanitization?.(\n\t\t\t\"BODY:\",\n\t\t\tawait new Response(init.body).text(),\n\t\t\tnull,\n\t\t\t2\n\t\t);\n\t}\n\tlogger.debug(\"-- END CF API REQUEST\");\n\treturn await fetch(\n\t\t`${getCloudflareApiBaseUrl(complianceConfig)}${resource}${queryString}`,\n\t\t{\n\t\t\tmethod,\n\t\t\t...init,\n\t\t\theaders,\n\t\t\tsignal: abortSignal,\n\t\t}\n\t);\n}\n\nexport async function fetchInternalBase<ResponseType>(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit: RequestInit = {},\n\tuserAgent: string,\n\tlogger: Logger,\n\tqueryParams?: URLSearchParams,\n\tabortSignal?: AbortSignal,\n\tcredentials?: ApiCredentials\n): Promise<{\n\tresponse: ResponseType;\n\tstatus: number;\n\tretryAfterMs?: number;\n}> {\n\tconst method = init.method ?? \"GET\";\n\tconst response = await performApiFetchBase(\n\t\tcomplianceConfig,\n\t\tresource,\n\t\tinit,\n\t\tuserAgent,\n\t\tlogger,\n\t\tqueryParams,\n\t\tabortSignal,\n\t\tcredentials\n\t);\n\tconst jsonText = await response.text();\n\tlogger.debug(\n\t\t\"-- START CF API RESPONSE:\",\n\t\tresponse.statusText,\n\t\tresponse.status\n\t);\n\tlogHeaders(response.headers, logger);\n\tlogger.debugWithSanitization?.(\"RESPONSE:\", jsonText);\n\tlogger.debug(\"-- END CF API RESPONSE\");\n\n\tconst retryAfterMs = parseRetryAfterMs(response.headers);\n\n\tif (!jsonText && (response.status === 204 || response.status === 205)) {\n\t\treturn {\n\t\t\tresponse: {\n\t\t\t\tresult: {},\n\t\t\t\tsuccess: true,\n\t\t\t\terrors: [],\n\t\t\t\tmessages: [],\n\t\t\t} as ResponseType,\n\t\t\tstatus: response.status,\n\t\t\tretryAfterMs,\n\t\t};\n\t}\n\n\tif (isWAFBlockResponse(response.headers)) {\n\t\tthrowWAFBlockError(\n\t\t\tresponse.headers,\n\t\t\tmethod,\n\t\t\tresource,\n\t\t\tresponse.status,\n\t\t\tresponse.statusText,\n\t\t\tretryAfterMs\n\t\t);\n\t}\n\n\ttry {\n\t\tconst json = parseJSON(jsonText) as ResponseType;\n\t\treturn { response: json, status: response.status, retryAfterMs };\n\t} catch {\n\t\tconst rayId = extractWAFBlockRayId(response.headers);\n\n\t\tthrow new APIError({\n\t\t\ttext: \"Received a malformed response from the API\",\n\t\t\tnotes: [\n\t\t\t\t{\n\t\t\t\t\ttext: truncate(jsonText, 100),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: `${method} ${resource} -> ${response.status} ${response.statusText}`,\n\t\t\t\t},\n\t\t\t\t...(rayId ? [{ text: `Cloudflare Ray ID: ${rayId}` }] : []),\n\t\t\t],\n\t\t\tstatus: response.status,\n\t\t\tretryAfterMs,\n\t\t\ttelemetryMessage: false,\n\t\t});\n\t}\n}\n\nexport async function fetchResultBase<ResponseType>(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit: RequestInit = {},\n\tuserAgent: string,\n\tlogger: Logger,\n\tqueryParams?: URLSearchParams,\n\tabortSignal?: AbortSignal,\n\tcredentials?: ApiCredentials\n): Promise<ResponseType> {\n\tconst {\n\t\tresponse: json,\n\t\tstatus,\n\t\tretryAfterMs,\n\t} = await fetchInternalBase<FetchResult<ResponseType>>(\n\t\tcomplianceConfig,\n\t\tresource,\n\t\tinit,\n\t\tuserAgent,\n\t\tlogger,\n\t\tqueryParams,\n\t\tabortSignal,\n\t\tcredentials\n\t);\n\tif (json.success) {\n\t\treturn json.result;\n\t} else {\n\t\tthrowFetchError(resource, json, status, retryAfterMs);\n\t}\n}\n\nexport async function fetchListResultBase<ResponseType>(\n\tcomplianceConfig: ComplianceConfig,\n\tresource: string,\n\tinit: RequestInit = {},\n\tuserAgent: string,\n\tlogger: Logger,\n\tqueryParams?: URLSearchParams,\n\tcredentials?: ApiCredentials\n): Promise<ResponseType[]> {\n\tconst results: ResponseType[] = [];\n\tlet getMoreResults = true;\n\tlet cursor: string | undefined;\n\twhile (getMoreResults) {\n\t\tif (cursor) {\n\t\t\tqueryParams = new URLSearchParams(queryParams);\n\t\t\tqueryParams.set(\"cursor\", cursor);\n\t\t}\n\t\tconst {\n\t\t\tresponse: json,\n\t\t\tstatus,\n\t\t\tretryAfterMs,\n\t\t} = await fetchInternalBase<FetchResult<ResponseType[]>>(\n\t\t\tcomplianceConfig,\n\t\t\tresource,\n\t\t\tinit,\n\t\t\tuserAgent,\n\t\t\tlogger,\n\t\t\tqueryParams,\n\t\t\tundefined,\n\t\t\tcredentials\n\t\t);\n\t\tif (json.success) {\n\t\t\tresults.push(...json.result);\n\t\t\tif (hasCursor(json.result_info)) {\n\t\t\t\tcursor = json.result_info?.cursor;\n\t\t\t} else {\n\t\t\t\tgetMoreResults = false;\n\t\t\t}\n\t\t} else {\n\t\t\tthrowFetchError(resource, json, status, retryAfterMs);\n\t\t}\n\t}\n\treturn results;\n}\n\nexport function truncate(text: string, maxLength: number): string {\n\tconst { length } = text;\n\tif (length <= maxLength) {\n\t\treturn text;\n\t}\n\treturn `${text.substring(0, maxLength)}... (length = ${length})`;\n}\n\nexport function isWAFBlockResponse(headers: Headers): boolean {\n\treturn headers.get(\"cf-mitigated\") === \"challenge\";\n}\n\n/**\n * Parses a `Retry-After` header value (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After)\n * into milliseconds to wait before retrying, or `undefined` if absent/unparsable.\n *\n * Per the HTTP spec, `Retry-After` may either be a number of delay-seconds,\n * or an HTTP-date after which the request may be retried.\n */\nexport function parseRetryAfterValue(\n\tretryAfter: string | null | undefined\n): number | undefined {\n\tif (!retryAfter) {\n\t\treturn undefined;\n\t}\n\n\t// delta-seconds, e.g. \"Retry-After: 120\"\n\tif (/^\\d+$/.test(retryAfter.trim())) {\n\t\treturn Number(retryAfter) * 1000;\n\t}\n\n\t// HTTP-date, e.g. \"Retry-After: Fri, 31 Dec 1999 23:59:59 GMT\"\n\tconst retryAfterDate = new Date(retryAfter);\n\tif (!Number.isNaN(retryAfterDate.getTime())) {\n\t\treturn Math.max(0, retryAfterDate.getTime() - Date.now());\n\t}\n\n\treturn undefined;\n}\n\n/** Same as {@link parseRetryAfterValue}, reading the value from a `Headers` object. */\nexport function parseRetryAfterMs(headers: Headers): number | undefined {\n\treturn parseRetryAfterValue(headers.get(\"Retry-After\"));\n}\n\nexport function extractWAFBlockRayId(headers: Headers): string | undefined {\n\treturn headers.get(\"cf-ray\") ?? undefined;\n}\n\nexport function extractAccountTag(resource: string): string | undefined {\n\tconst re = new RegExp(\"/accounts/([a-zA-Z0-9]+)/?\");\n\tconst matches = re.exec(resource);\n\treturn matches?.[1];\n}\n\ninterface PageResultInfo {\n\tpage: number;\n\tper_page: number;\n\tcount: number;\n\ttotal_count: number;\n}\n\nexport function hasMorePages(\n\tresult_info: unknown\n): result_info is PageResultInfo {\n\tconst page = (result_info as PageResultInfo | undefined)?.page;\n\tconst per_page = (result_info as PageResultInfo | undefined)?.per_page;\n\tconst total = (result_info as PageResultInfo | undefined)?.total_count;\n\n\treturn (\n\t\tpage !== undefined &&\n\t\tper_page !== undefined &&\n\t\ttotal !== undefined &&\n\t\tpage * per_page < total\n\t);\n}\n\nexport function renderError(\n\terr:\n\t\t| FetchError\n\t\t| { code?: number; message?: string; documentation_url?: string },\n\tlevel = 0\n): string {\n\tconst indent = \" \".repeat(level);\n\tconst message = err.message ?? \"\";\n\tconst chainedMessages =\n\t\t\"error_chain\" in err\n\t\t\t? ((err as FetchError).error_chain\n\t\t\t\t\t?.map(\n\t\t\t\t\t\t(chainedError) =>\n\t\t\t\t\t\t\t`\\n\\n${indent}- ${renderError(chainedError, level + 1)}`\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\") ?? \"\")\n\t\t\t: \"\";\n\treturn (\n\t\t(err.code ? `${message} [code: ${err.code}]` : message) +\n\t\t(err.documentation_url\n\t\t\t? `\\n${indent}To learn more about this error, visit: ${err.documentation_url}`\n\t\t\t: \"\") +\n\t\tchainedMessages\n\t);\n}\n\nexport function addAuthorizationHeader(\n\theaders: Headers,\n\tauth: ApiCredentials,\n\toverrideExisting = false\n): void {\n\tif (!headers.has(\"Authorization\") || overrideExisting) {\n\t\tif (\"apiToken\" in auth) {\n\t\t\tconst authorizationHeader = `Bearer ${auth.apiToken}`;\n\t\t\tvalidateAuthorizationHeaderValue(authorizationHeader);\n\t\t\theaders.set(\"Authorization\", authorizationHeader);\n\t\t} else {\n\t\t\theaders.set(\"X-Auth-Key\", auth.authKey);\n\t\t\theaders.set(\"X-Auth-Email\", auth.authEmail);\n\t\t}\n\t}\n}\n\nfunction validateAuthorizationHeaderValue(value: string): void {\n\tfor (const character of value) {\n\t\tconst codePoint = character.codePointAt(0);\n\t\tif (codePoint === undefined || codePoint > 255) {\n\t\t\tthrow new UserError(\n\t\t\t\t`The configured Cloudflare API token contains a character that cannot be used in an HTTP Authorization header: ${formatAuthorizationHeaderCharacter(character, codePoint)}. Recreate or copy the token again, making sure it does not include characters such as ellipses.`,\n\t\t\t\t{\n\t\t\t\t\ttelemetryMessage: \"cfetch auth invalid authorization header\",\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction formatAuthorizationHeaderCharacter(\n\tcharacter: string,\n\tcodePoint: number | undefined\n): string {\n\tif (codePoint === undefined) {\n\t\treturn '\"\\\\u{unknown}\"';\n\t}\n\n\tconst codePointLabel = `U+${codePoint.toString(16).toUpperCase().padStart(4, \"0\")}`;\n\tconst characterLabel = isPrintableCharacter(character)\n\t\t? `\"${character}\"`\n\t\t: `\"${escapeCharacter(character)}\"`;\n\n\treturn `${characterLabel} (${codePointLabel})`;\n}\n\nfunction isPrintableCharacter(character: string): boolean {\n\treturn !/[\\p{Cc}\\p{Cf}\\p{Zl}\\p{Zp}]/u.test(character);\n}\n\nfunction escapeCharacter(character: string): string {\n\treturn Array.from(character)\n\t\t.map((c) => {\n\t\t\tconst codePoint = c.codePointAt(0);\n\t\t\tif (codePoint === undefined) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn codePoint <= 0xffff\n\t\t\t\t? `\\\\u${codePoint.toString(16).toUpperCase().padStart(4, \"0\")}`\n\t\t\t\t: `\\\\u{${codePoint.toString(16).toUpperCase()}}`;\n\t\t})\n\t\t.join(\"\");\n}\n\nexport function throwFetchError(\n\tresource: string,\n\tresponse: FetchResult<unknown>,\n\tstatus: number,\n\tretryAfterMs?: number\n): never {\n\tconst errors = response.errors ?? [];\n\tfor (const error of errors) {\n\t\tmaybeThrowFriendlyError(error);\n\t}\n\n\t// Some API endpoints return non-standard error envelopes (e.g. {code, error}\n\t// instead of {errors: [...]}). Surface those as notes when errors is empty.\n\tconst notes = [\n\t\t...errors.map((err) => ({ text: renderError(err) })),\n\t\t...(response.messages?.map((msg) => ({\n\t\t\ttext: typeof msg === \"string\" ? msg : (msg.message ?? String(msg)),\n\t\t})) ?? []),\n\t];\n\tif (notes.length === 0) {\n\t\tconst raw = response as unknown as Record<string, unknown>;\n\t\tconst fallbackMessage =\n\t\t\ttypeof raw.error === \"string\"\n\t\t\t\t? `${raw.error}${raw.code ? ` [code: ${raw.code}]` : \"\"}`\n\t\t\t\t: undefined;\n\t\tif (fallbackMessage) {\n\t\t\tnotes.push({ text: fallbackMessage });\n\t\t}\n\t}\n\tif (retryAfterMs !== undefined) {\n\t\tnotes.push({\n\t\t\ttext: `The API responded with a \"Retry-After\" header indicating you should wait ${Math.ceil(retryAfterMs / 1000)} second(s) before retrying.`,\n\t\t});\n\t}\n\n\tconst error = new APIError({\n\t\ttext: `A request to the Cloudflare API (${resource}) failed.`,\n\t\tnotes,\n\t\tstatus,\n\t\t// hoist the parsed `Retry-After` header (if any) so consumers such as\n\t\t// `retryOnAPIFailure()` can back off for the amount of time the API\n\t\t// asked us to wait, e.g. when rate limited (HTTP 429).\n\t\tretryAfterMs,\n\t\ttelemetryMessage: false,\n\t});\n\t// add the first error code directly to this error\n\t// so consumers can use it for specific behaviour\n\tconst code = errors[0]?.code;\n\tif (code) {\n\t\terror.code = code;\n\t}\n\t// hoist the first error's `meta` (if any) so consumers can inspect\n\t// endpoint-specific structured error payloads without re-parsing the body\n\tconst meta = errors[0]?.meta;\n\tif (meta) {\n\t\terror.meta = meta;\n\t}\n\t// extract the account tag from the resource (if any)\n\terror.accountTag = extractAccountTag(resource);\n\tthrow error;\n}\n\nfunction throwWAFBlockError(\n\theaders: Headers,\n\tmethod: string,\n\tresource: string,\n\tstatus: number,\n\tstatusText: string,\n\tretryAfterMs?: number\n): never {\n\tconst rayId = extractWAFBlockRayId(headers);\n\tthrow new APIError({\n\t\ttext: \"The Cloudflare API responded with a WAF block page instead of the expected JSON response\",\n\t\tnotes: [\n\t\t\t{\n\t\t\t\ttext: \"Cloudflare's firewall (WAF) blocked this API request. This is usually a false positive.\",\n\t\t\t},\n\t\t\t...(rayId ? [{ text: `Cloudflare Ray ID: ${rayId}` }] : []),\n\t\t\t{\n\t\t\t\ttext: rayId\n\t\t\t\t\t? \"If the issue persists, please open a Cloudflare Support ticket and include the Ray ID above.\"\n\t\t\t\t\t: \"If the issue persists, please open a Cloudflare Support ticket. You can find the Cloudflare Ray ID on the block page in your browser.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: `${method} ${resource} -> ${status} ${statusText}`,\n\t\t\t},\n\t\t],\n\t\tstatus,\n\t\tretryAfterMs,\n\t\ttelemetryMessage: false,\n\t});\n}\n\n/**\n * Fetch a raw KV value from the Cloudflare API.\n *\n * This is special-cased because it's the only API endpoint that returns raw\n * binary data instead of a JSON envelope.\n *\n * Note: callers must call encodeURIComponent on `key` before passing it.\n */\nexport async function fetchKVGetValueBase(\n\tcomplianceConfig: ComplianceConfig,\n\taccountId: string,\n\tnamespaceId: string,\n\tkey: string,\n\tuserAgent: string,\n\tlogger: Logger,\n\tcredentials: ApiCredentials\n): Promise<ArrayBuffer> {\n\tconst headers = new Headers();\n\taddAuthorizationHeader(headers, credentials);\n\theaders.set(\"User-Agent\", userAgent);\n\tmaybeAddTraceHeader(headers);\n\n\tconst resource = `${getCloudflareApiBaseUrl(complianceConfig)}/accounts/${accountId}/storage/kv/namespaces/${namespaceId}/values/${key}`;\n\n\tlogger.debug(`-- START CF API REQUEST: GET ${resource}`);\n\tlogger.debug(\"-- END CF API REQUEST\");\n\n\tconst response = await fetch(resource, {\n\t\tmethod: \"GET\",\n\t\theaders,\n\t});\n\tif (response.ok) {\n\t\treturn await response.arrayBuffer();\n\t} else {\n\t\tthrow new Error(\n\t\t\t`Failed to fetch ${resource} - ${response.status}: ${response.statusText}`\n\t\t);\n\t}\n}\n\nexport type FetchKVGetValueFetcher = (\n\tcomplianceConfig: ComplianceConfig,\n\taccountId: string,\n\tnamespaceId: string,\n\tkey: string\n) => Promise<ArrayBuffer>;\n\nexport function hasCursor(\n\tresult_info: unknown\n): result_info is { cursor: string } {\n\tconst cursor = (result_info as { cursor: string } | undefined)?.cursor;\n\treturn cursor !== undefined && cursor !== null && cursor !== \"\";\n}\n\nexport function maybeAddTraceHeader(headers: Headers): void {\n\tconst traceHeader = getTraceHeader();\n\tif (traceHeader) {\n\t\theaders.set(\"Cf-Trace-Id\", traceHeader);\n\t}\n}\n\nfunction cloneHeaders(headers: HeadersInit | undefined): Headers {\n\treturn new Headers(headers);\n}\n","import * as timersPromises from \"node:timers/promises\";\nimport checkForUpdate from \"update-check\";\nimport type { Result } from \"update-check\";\n\n// Safety-net timeout for the update check network request.\n// The `update-check` library has its own 2s socket timeout, but if the first\n// request gets a 4xx it retries with auth — potentially doubling the wait.\n// This caps the total wall-clock time for the entire operation.\nconst UPDATE_CHECK_TIMEOUT_MS = 3_000;\n\n// Sentinel value used to distinguish a timeout from the library returning null\n// (which means \"already up-to-date\").\nconst TIMED_OUT: unique symbol = Symbol(\"timed_out\");\n\nexport type NpmVersionCheckResult =\n\t| { status: \"up-to-date\" }\n\t| { status: \"update-available\"; latest: string }\n\t| { status: \"failed\" };\n\n/**\n * Checks if a newer version of a package is available on npm.\n *\n * Uses the `update-check` library to query the npm registry for the latest\n * version. The dist tag used for comparison depends on the current version —\n * \"beta\" for pre-release versions (0.0.0-*) and \"latest\" for stable versions.\n *\n * @param name - The npm package name to check\n * @param version - The current version to compare against\n * @returns A discriminated result:\n * - `{ status: \"update-available\", latest: string }` if a newer version exists\n * - `{ status: \"up-to-date\" }` if the installed version is already the latest\n * - `{ status: \"failed\" }` if the check could not be completed (network error, timeout, etc.)\n */\nexport async function fetchLatestNpmVersion(\n\tname: string,\n\tversion: string\n): Promise<NpmVersionCheckResult> {\n\tlet result: Result | null | typeof TIMED_OUT = null;\n\ttry {\n\t\t// Race with a timeout as a safety net — the library's own 2s socket\n\t\t// timeout handles most cases, but the auth-retry path can take up to 4s.\n\t\tresult = await Promise.race([\n\t\t\tcheckForUpdate(\n\t\t\t\t{ name, version },\n\t\t\t\t{\n\t\t\t\t\tdistTag: version.startsWith(\"0.0.0\") ? \"beta\" : \"latest\",\n\t\t\t\t}\n\t\t\t),\n\t\t\ttimersPromises.setTimeout(UPDATE_CHECK_TIMEOUT_MS, TIMED_OUT, {\n\t\t\t\tref: false,\n\t\t\t}),\n\t\t]);\n\t} catch {\n\t\treturn { status: \"failed\" };\n\t}\n\n\tif (result === TIMED_OUT) {\n\t\treturn { status: \"failed\" };\n\t}\n\tif (result === null) {\n\t\treturn { status: \"up-to-date\" };\n\t}\n\treturn { status: \"update-available\", latest: result.latest };\n}\n","export const LOGGER_LEVELS = {\n\tnone: -1,\n\terror: 0,\n\twarn: 1,\n\tinfo: 2,\n\tlog: 3,\n\tdebug: 4,\n} as const;\n\nexport type LoggerLevel = keyof typeof LOGGER_LEVELS;\n\nexport type Logger = {\n\tloggerLevel?: LoggerLevel;\n\tdebug: typeof console.debug;\n\tdebugWithSanitization?: (label: string, ...args: unknown[]) => void;\n\tlog: typeof console.log;\n\tinfo: typeof console.info;\n\twarn: typeof console.warn;\n\terror: typeof console.error;\n\tonce?: {\n\t\tinfo: typeof console.info;\n\t\tlog: typeof console.log;\n\t\twarn: typeof console.warn;\n\t\terror: typeof console.error;\n\t};\n\tconsole?<M extends Exclude<keyof Console, \"Console\">>(\n\t\tmethod: M,\n\t\t...args: Parameters<Console[M]>\n\t): void;\n};\n","import type { Logger } from \"./logger\";\n\n/**\n * Wrapper around the `open` package that gracefully handles environments where\n * a browser opener (e.g. `xdg-open` on Linux) is unavailable. In those cases\n * the URL is printed so the user can copy-paste it manually, rather than\n * crashing with a confusing \"file not found\" error.\n *\n * The consumer's `logger` is passed in rather than imported: this package is\n * shared across CLIs and has no logger singleton of its own.\n *\n * @param url the URL to point the browser at\n * @param logger the consumer's logger, used to surface the manual-open fallback\n */\nexport async function openInBrowser(\n\turl: string,\n\tlogger: Logger\n): Promise<void> {\n\ttry {\n\t\t// Imported lazily so that merely importing this module (e.g. via the\n\t\t// package barrel) does not eagerly pull `open` — and its default\n\t\t// `node:child_process` import — into every consumer's module graph.\n\t\tconst { default: open } = await import(\"open\");\n\t\tconst childProcess = await open(url);\n\t\tchildProcess.on(\"error\", (err) => {\n\t\t\thandleBrowserOpenError(url, err, logger);\n\t\t});\n\t} catch (err) {\n\t\tif ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\thandleBrowserOpenError(url, err, logger);\n\t\t} else {\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction handleBrowserOpenError(\n\turl: string,\n\terr: unknown,\n\tlogger: Logger\n): void {\n\tconst isEnoent = (err as NodeJS.ErrnoException).code === \"ENOENT\";\n\tconst hint =\n\t\tprocess.platform === \"linux\" && isEnoent\n\t\t\t? \" You may need to install `xdg-utils` (e.g. `apt install xdg-utils`) or set a default browser.\"\n\t\t\t: \"\";\n\tlogger.warn(\n\t\t`Failed to open a browser automatically.${hint}\\n` +\n\t\t\t`Please visit the following URL in your browser:\\n${url}`\n\t);\n\tlogger.debug(err instanceof Error ? (err.stack ?? String(err)) : String(err));\n}\n","import { randomBytes } from \"node:crypto\";\nimport { appendFileSync, mkdirSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport {\n\tgetOutputFileDirectoryFromEnv,\n\tgetOutputFilePathFromEnv,\n} from \"./environment-variables/misc-variables\";\n\n/**\n * Write an entry to the output file.\n *\n * Control whether (and where) to write this file by setting either\n * `WRANGLER_OUTPUT_FILE_DIRECTORY` or `WRANGLER_OUTPUT_FILE_PATH`.\n *\n * @param entry The structured output entry to append.\n * @returns Nothing.\n */\nexport function writeOutput(entry: OutputEntry): void {\n\tif (outputFilePath === undefined) {\n\t\toutputFilePath = getOutputFilePath();\n\t}\n\tif (outputFilePath !== null) {\n\t\tmkdirSync(dirname(outputFilePath), { recursive: true });\n\t\tconst entryJSON = JSON.stringify({\n\t\t\t...entry,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t});\n\t\tappendFileSync(outputFilePath, entryJSON + \"\\n\");\n\t}\n}\n\n/**\n * Clear the cached output file path.\n *\n * @returns Nothing.\n */\nexport function clearOutputFilePath(): void {\n\toutputFilePath = undefined;\n}\n\nlet outputFilePath: string | null | undefined = undefined;\n\n/**\n * Get the output file path from the configured output environment variables.\n *\n * @returns The configured output file path, or null when output is disabled.\n */\nfunction getOutputFilePath(): string | null {\n\tconst outputFilePathFromEnv = getOutputFilePathFromEnv();\n\tif (outputFilePathFromEnv) {\n\t\treturn outputFilePathFromEnv;\n\t}\n\n\tconst outputFileDirectoryFromEnv = getOutputFileDirectoryFromEnv();\n\tif (outputFileDirectoryFromEnv) {\n\t\tconst date = new Date()\n\t\t\t.toISOString()\n\t\t\t.replaceAll(\":\", \"-\")\n\t\t\t.replace(\".\", \"_\")\n\t\t\t.replace(\"T\", \"_\")\n\t\t\t.replace(\"Z\", \"\");\n\n\t\treturn resolve(\n\t\t\toutputFileDirectoryFromEnv,\n\t\t\t`wrangler-output-${date}-${randomBytes(3).toString(\"hex\")}.json`\n\t\t);\n\t}\n\n\treturn null;\n}\n\ninterface OutputEntryBase<T extends string> {\n\tversion: number;\n\ttype: T;\n}\n\ninterface OutputEntryBundleSize {\n\t/** The uncompressed size of the Worker bundle. */\n\traw_bytes: number;\n\t/** The gzip-compressed size of the Worker bundle. */\n\tgzip_bytes: number;\n}\n\n/**\n * All the different types of entry that can be written to the output file.\n */\nexport type OutputEntry =\n\t| OutputEntrySession\n\t| OutputEntryDeployment\n\t| OutputEntryPreview\n\t| OutputEntryPagesDeployment\n\t| OutputEntryVersionUpload\n\t| OutputEntryVersionDeployment\n\t| OutputEntryPagesDeploymentDetailed\n\t| OutputEntryCommandFailed\n\t| OutputEntryAutoConfig;\n\ninterface OutputEntrySession extends OutputEntryBase<\"wrangler-session\"> {\n\tversion: 1;\n\t/** The semver version string taken from Wrangler's package.json. */\n\twrangler_version: string;\n\t/** The arguments passed to Wrangler. */\n\tcommand_line_args: string[];\n\t/** The absolute path to a file that contains debug logs for this Wrangler instance. */\n\tlog_file_path: string;\n}\n\ninterface OutputEntryDeployment extends OutputEntryBase<\"deploy\"> {\n\tversion: 1;\n\t/** The name of the Worker. */\n\tworker_name: string | null;\n\t/** The GUID that identifies the Worker. This never changes even if the name is changed. */\n\tworker_tag: string | null;\n\t/** A GUID that identifies this deployed version of the Worker. This version is associated with an automatically created deployment, with this version set at 100%. */\n\tversion_id: string | null;\n\t/** A list of URLs that represent the HTTP triggers associated with this deployment */\n\ttargets: string[] | undefined;\n\t/** set if the worker's name was overridden */\n\tworker_name_overridden: boolean;\n\t/** wrangler environment used */\n\twrangler_environment: string | undefined;\n\t/** Exact Worker bundle sizes in bytes. */\n\tbundle_size?: OutputEntryBundleSize;\n}\n\ninterface OutputEntryPreview extends OutputEntryBase<\"preview\"> {\n\tversion: 1;\n\t/** The name of the Worker. */\n\tworker_name: string | null;\n\t/** The ID of the Preview resource. */\n\tpreview_id: string;\n\t/** The human-readable name of the Preview resource. */\n\tpreview_name: string;\n\t/** The slug of the Preview resource. */\n\tpreview_slug: string;\n\t/** A list of URLs associated with the Preview resource. */\n\tpreview_urls: string[] | undefined;\n\t/** The ID of the Preview deployment resource. */\n\tdeployment_id: string;\n\t/** A list of URLs associated with the Preview deployment. */\n\tdeployment_urls: string[] | undefined;\n}\n\ninterface OutputEntryAutoConfig extends OutputEntryBase<\"autoconfig\"> {\n\tversion: 1;\n\t/** The command that triggered autoconfig */\n\tcommand: \"setup\" | \"deploy\";\n\t/** The summary of the autoconfig process */\n\tsummary: {\n\t\twranglerConfig?: {\n\t\t\tname?: string;\n\t\t\tcompatibility_date?: string;\n\t\t};\n\t\t[key: string]: unknown;\n\t};\n}\n\ninterface OutputEntryPagesDeployment extends OutputEntryBase<\"pages-deploy\"> {\n\tversion: 1;\n\t/** The name of the Pages project. */\n\tpages_project: string | null;\n\t/** A GUID that identifies this Pages deployment. */\n\tdeployment_id: string | null;\n\t/** The URL associated with this deployment */\n\turl: string | undefined;\n}\n\ninterface OutputEntryPagesDeploymentDetailed extends OutputEntryBase<\"pages-deploy-detailed\"> {\n\tversion: 1;\n\t/** The name of the Pages project. */\n\tpages_project: string | null;\n\t/** A GUID that identifies this Pages deployment. */\n\tdeployment_id: string | null;\n\t/** The URL associated with this deployment */\n\turl: string | undefined;\n\t/** The Alias url, if it exists */\n\talias: string | undefined;\n\t/** The environment being deployed to */\n\tenvironment: \"production\" | \"preview\";\n\t/** The production branch of the pages project */\n\tproduction_branch: string;\n\tdeployment_trigger: {\n\t\tmetadata: {\n\t\t\t/** Commit hash of the deployment trigger metadata for the pages project */\n\t\t\tcommit_hash: string;\n\t\t};\n\t};\n}\n\ninterface OutputEntryVersionUpload extends OutputEntryBase<\"version-upload\"> {\n\tversion: 1;\n\t/** The name of the Worker. */\n\tworker_name: string | null;\n\t/** The GUID that identifies the Worker. This never changes even if the name is changed. */\n\tworker_tag: string | null;\n\t/** A GUID that identifies this uploaded, but not yet deployed, version of the Worker. This version will need to be \"deployed\" to receive traffic. */\n\tversion_id: string | null;\n\t/** The preview URL associated with this version upload */\n\tpreview_url: string | undefined;\n\t/** The ephemeral aliased preview URL associated with this version upload */\n\tpreview_alias_url: string | undefined;\n\t/** set if the worker's name was overridden */\n\tworker_name_overridden: boolean;\n\t/** wrangler environment used */\n\twrangler_environment: string | undefined;\n\t/** Exact Worker bundle sizes in bytes. */\n\tbundle_size?: OutputEntryBundleSize;\n}\n\ninterface OutputEntryVersionDeployment extends OutputEntryBase<\"version-deploy\"> {\n\tversion: 1;\n\t/** The name of the Worker. */\n\tworker_name: string | null;\n\t/** The GUID that identifies the Worker. This never changes even if the name is changed. */\n\tworker_tag: string | null;\n\t/** The ID of the gradual rollout deployment. */\n\tdeployment_id: string;\n\t/** The percentage of traffic that goes to each version. */\n\tversion_traffic: Map<string, number>;\n}\n\ninterface OutputEntryCommandFailed extends OutputEntryBase<\"command-failed\"> {\n\tversion: 1;\n\t/** The code in the error. */\n\tcode: number | undefined;\n\t/** The message in the error. */\n\tmessage: string | undefined;\n\t/** How many milliseconds to retry the operation after if available. */\n\tretry_after_ms: number | undefined;\n}\n","import { setTimeout } from \"node:timers/promises\";\nimport { APIError } from \"./parse\";\nimport type { Logger } from \"./logger\";\n\nconst MAX_ATTEMPTS = 3;\n\n// Cap how long we'll block on a `Retry-After` header before failing fast.\nconst MAX_RETRY_AFTER_MS = 60_000;\n\nexport async function retryOnAPIFailure<T>(\n\taction: () => T | Promise<T>,\n\tlogger: Logger,\n\tbackoff = 0,\n\tattempts = MAX_ATTEMPTS,\n\tabortSignal?: AbortSignal\n): Promise<T> {\n\ttry {\n\t\treturn await action();\n\t} catch (err) {\n\t\tif (err instanceof APIError) {\n\t\t\t// 429 is special-cased here rather than folded into isRetryable(),\n\t\t\t// since other callers rely on that meaning \"5xx\".\n\t\t\tif (!err.isRetryable() && err.status !== 429) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t} else if (err instanceof DOMException && err.name === \"TimeoutError\") {\n\t\t\t// Per-request timeouts (from AbortSignal.timeout()) are transient\n\t\t\t// and should be retried, but user-initiated aborts (AbortError)\n\t\t\t// should not.\n\t\t} else if (!(err instanceof TypeError)) {\n\t\t\tthrow err;\n\t\t}\n\n\t\tconst retryAfterMs = err instanceof APIError ? err.retryAfterMs : undefined;\n\n\t\t// Fail fast rather than blocking for an unreasonable amount of time.\n\t\tif (retryAfterMs !== undefined && retryAfterMs > MAX_RETRY_AFTER_MS) {\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (attempts <= 1) {\n\t\t\tthrow err;\n\t\t}\n\n\t\t// Honour `Retry-After` when present, otherwise retry immediately and\n\t\t// 429s after a short wait\n\t\tconst jitter = Math.random() * 1000;\n\n\t\tlet wait = backoff;\n\t\tif (retryAfterMs !== undefined) {\n\t\t\twait = retryAfterMs + jitter;\n\t\t} else if (err instanceof APIError && err.status === 429) {\n\t\t\t// never immediately retry a 429, wait at least 1s\n\t\t\twait = Math.max(backoff, 1000) + jitter;\n\t\t}\n\n\t\tif (retryAfterMs !== undefined) {\n\t\t\tlogger.info(\n\t\t\t\t`Received a \"Retry-After\" header from the Cloudflare API. Waiting ${Math.ceil(retryAfterMs / 1000)} second(s) before retrying...`\n\t\t\t);\n\t\t} else {\n\t\t\tlogger.debug(`Retrying API call after error...`);\n\t\t\tlogger.debug(err);\n\t\t}\n\n\t\tawait setTimeout(wait, undefined, { signal: abortSignal });\n\t\treturn retryOnAPIFailure(\n\t\t\taction,\n\t\t\tlogger,\n\t\t\tbackoff + 1000,\n\t\t\tattempts - 1,\n\t\t\tabortSignal\n\t\t);\n\t}\n}\n","export function formatTime(duration: number): string {\n\treturn `(${(duration / 1000).toFixed(2)} sec)`;\n}\n","import type { Route } from \"./config/environment\";\n\n/**\n * Get the hostname on which to run a Worker.\n *\n * The most accurate place is usually\n * `route.pattern`, as that includes any subdomains. For example:\n * ```js\n * {\n * \tpattern: foo.example.com\n * \tzone_name: example.com\n * }\n * ```\n * However, in the case of patterns that _can't_ be parsed as a hostname\n * (primarily the pattern `*/ /*`), we fall back to the `zone_name`\n * (and in the absence of that return undefined).\n * @param route\n */\nexport function getHostFromRoute(route: Route): string | undefined {\n\tlet host: string | undefined;\n\n\tif (typeof route === \"string\") {\n\t\thost = getHostFromUrl(route);\n\t} else if (typeof route === \"object\") {\n\t\thost = getHostFromUrl(route.pattern);\n\n\t\tif (host === undefined && \"zone_name\" in route) {\n\t\t\thost = getHostFromUrl(route.zone_name);\n\t\t}\n\t}\n\n\treturn host;\n}\n\n/**\n * Best-effort derivation of the Cloudflare zone name that owns a given route,\n * for use as the `CF-Worker` header value on outbound subrequests in local\n * development (see https://developers.cloudflare.com/fundamentals/reference/http-headers/#cf-worker).\n *\n * In production, `CF-Worker` is set to the zone name — for a route\n * `foo.example.com/*` on zone `example.com`, the header is `example.com`.\n * When the user has explicitly told us the zone name in their route config\n * (`zone_name`), use it. Otherwise, fall back to {@link getHostFromRoute},\n * which returns the route pattern's hostname — this is the closest local\n * approximation without performing an API lookup, and matches the behaviour\n * users see when their route's hostname is already the apex (e.g.\n * `example.com/*`).\n */\nexport function getZoneFromRoute(route: Route): string | undefined {\n\tif (typeof route === \"object\" && \"zone_name\" in route && route.zone_name) {\n\t\treturn route.zone_name;\n\t}\n\treturn getHostFromRoute(route);\n}\n\n/**\n * Given something that resembles a URL, try to extract a host from it.\n */\nexport function getHostFromUrl(urlLike: string): string | undefined {\n\t// if the urlLike-pattern uses a splat for the entire host and is only concerned with the pathname, we cannot infer a host\n\tif (\n\t\turlLike.startsWith(\"*/\") ||\n\t\turlLike.startsWith(\"http://*/\") ||\n\t\turlLike.startsWith(\"https://*/\")\n\t) {\n\t\treturn undefined;\n\t}\n\n\t// if the urlLike-pattern uses a splat for the sub-domain (*.example.com) or for the root-domain (*example.com), remove the wildcard parts\n\turlLike = urlLike.replace(/\\*(\\.)?/g, \"\");\n\n\t// prepend a protocol if the pattern did not specify one\n\tif (!(urlLike.startsWith(\"http://\") || urlLike.startsWith(\"https://\"))) {\n\t\turlLike = \"http://\" + urlLike;\n\t}\n\n\t// now we've done our best to make urlLike a valid url string which we can pass to `new URL()` to get the host\n\t// if it still isn't, return undefined to indicate we couldn't infer a host\n\ttry {\n\t\treturn new URL(urlLike).host;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n","/**\n * Describes a supported package manager and its associated CLI commands\n * and lock file conventions.\n */\nexport interface PackageManager {\n\t/** The package manager identifier. */\n\ttype: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" | \"nub\";\n\t/** The command used to execute packages (e.g. `npx`, `pnpm`, `bunx`). */\n\tnpx: string;\n\t/** The command segments used to download and execute packages (e.g. `[\"npx\"]`, `[\"pnpm\", \"dlx\"]`). */\n\tdlx: string[];\n\t/** Lock file names produced by this package manager. */\n\tlockFiles: string[];\n}\n\n/**\n * Manage packages using npm.\n */\nexport const NpmPackageManager = {\n\ttype: \"npm\",\n\tnpx: \"npx\",\n\tdlx: [\"npx\"],\n\tlockFiles: [\"package-lock.json\"],\n} as const satisfies PackageManager;\n\n/**\n * Manage packages using pnpm.\n */\nexport const PnpmPackageManager = {\n\ttype: \"pnpm\",\n\tnpx: \"pnpm\",\n\tlockFiles: [\"pnpm-lock.yaml\"],\n\tdlx: [\"pnpm\", \"dlx\"],\n} as const satisfies PackageManager;\n\n/**\n * Manage packages using yarn.\n */\nexport const YarnPackageManager = {\n\ttype: \"yarn\",\n\tnpx: \"yarn\",\n\tdlx: [\"yarn\", \"dlx\"],\n\tlockFiles: [\"yarn.lock\"],\n} as const satisfies PackageManager;\n\n/**\n * Manage packages using bun.\n */\nexport const BunPackageManager = {\n\ttype: \"bun\",\n\tnpx: \"bunx\",\n\tdlx: [\"bunx\"],\n\tlockFiles: [\"bun.lockb\", \"bun.lock\"],\n} as const satisfies PackageManager;\n\n/**\n * Manage packages using nub.\n */\nexport const NubPackageManager = {\n\ttype: \"nub\",\n\tnpx: \"nubx\",\n\tdlx: [\"nubx\"],\n\tlockFiles: [\"nub.lock\"],\n} as const satisfies PackageManager;\n","import { basename, resolve } from \"node:path\";\nimport { getCIOverrideName } from \"./environment-variables/misc-variables\";\nimport { parsePackageJSON, readFileSync } from \"./parse\";\n\nconst invalidWorkerNameCharsRegex = /[^a-z0-9- ]/g;\nconst invalidWorkerNameStartEndRegex = /^(-+)|(-+)$/g;\nconst workerNameLengthLimit = 63;\n\n/**\n * Checks whether the provided worker name is valid, this means that:\n * - the name is not empty\n * - the name doesn't start nor ends with a dash\n * - the name doesn't contain special characters besides dashes\n * - the name is not longer than 63 characters\n *\n * See: https://developers.cloudflare.com/workers/configuration/routing/workers-dev/#limitations\n *\n * @param input The name to check\n * @returns Object indicating whether the name is valid, and if not a cause indicating why it isn't\n */\nexport function checkWorkerNameValidity(\n\tinput: string\n): { valid: false; cause: string } | { valid: true } {\n\tif (!input) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tcause: \"Worker names cannot be empty.\",\n\t\t};\n\t}\n\n\tif (input.match(invalidWorkerNameStartEndRegex)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tcause: \"Worker names cannot start or end with a dash.\",\n\t\t};\n\t}\n\n\tif (input.match(invalidWorkerNameCharsRegex)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tcause:\n\t\t\t\t\"Project names must only contain lowercase characters, numbers, and dashes.\",\n\t\t};\n\t}\n\n\tif (input.length > workerNameLengthLimit) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\tcause: \"Project names must be less than 63 characters.\",\n\t\t};\n\t}\n\n\treturn { valid: true };\n}\n\n/**\n * Given an input string it converts it to a valid worker name.\n *\n * A worker name is valid if:\n * - the name is not empty\n * - the name doesn't start nor ends with a dash\n * - the name doesn't contain special characters besides dashes\n * - the name is not longer than 63 characters\n *\n * See: https://developers.cloudflare.com/workers/configuration/routing/workers-dev/#limitations\n *\n * @param input The input to convert\n * @returns The input itself if it was already valid, the input converted to a valid worker name otherwise\n */\nexport function toValidWorkerName(input: string): string {\n\tif (checkWorkerNameValidity(input).valid) {\n\t\treturn input;\n\t}\n\n\tinput = input\n\t\t// Replace all underscores with dashes\n\t\t.replaceAll(\"_\", \"-\")\n\t\t// Replace all the special characters (besides dashes) with dashes\n\t\t.replace(invalidWorkerNameCharsRegex, \"-\")\n\t\t// Remove invalid start/end dashes\n\t\t.replace(invalidWorkerNameStartEndRegex, \"\")\n\t\t// If the name is longer than the limit let's truncate it to that\n\t\t.slice(0, workerNameLengthLimit);\n\n\tif (!input.length) {\n\t\t// If we've emptied the whole name let's replace it with a fallback value\n\t\treturn \"my-worker\";\n\t}\n\n\treturn input;\n}\n\n/**\n * Derives a valid worker name from a project name (or worker name) and project path.\n *\n * The name is determined by (in order of precedence):\n * 1. The WRANGLER_CI_OVERRIDE_NAME environment variable (for CI environments)\n * 2. The provided project/worker name (if non-empty)\n * 3. The directory basename of the project path\n *\n * The resulting name is sanitized to be a valid worker name.\n *\n * @param projectOrWorkerName An optional project or worker name to use\n * @param projectPath The path to the project directory (used as fallback)\n * @returns A valid worker name\n */\nexport function getWorkerName(\n\tprojectOrWorkerName = \"\",\n\tprojectPath: string\n): string {\n\tconst rawName =\n\t\tgetCIOverrideName() ?? (projectOrWorkerName || basename(projectPath));\n\n\treturn toValidWorkerName(rawName);\n}\n\n/**\n * Derives a valid worker name from a project directory.\n *\n * The name is determined by (in order of precedence):\n * 1. The WRANGLER_CI_OVERRIDE_NAME environment variable (for CI environments)\n * 2. The `name` field from package.json in the project directory\n * 3. The directory basename\n *\n * The resulting name is sanitized to be a valid worker name.\n *\n * @param projectPath The path to the project directory\n * @returns A valid worker name\n */\nexport function getWorkerNameFromProject(projectPath: string): string {\n\tconst packageJsonPath = resolve(projectPath, \"package.json\");\n\tlet packageJsonName: string | undefined;\n\n\ttry {\n\t\tconst packageJson = parsePackageJSON(\n\t\t\treadFileSync(packageJsonPath),\n\t\t\tpackageJsonPath\n\t\t);\n\t\tpackageJsonName = packageJson.name;\n\t} catch {}\n\n\treturn getWorkerName(packageJsonName, projectPath);\n}\n","import { assert } from \"node:console\";\n\ntype DiscriminatedPath<Discriminator extends string> = string & {\n\t_discriminator: Discriminator;\n};\n\n/**\n * A branded string that expects to be URL compatible.\n *\n * Require this type when you want callers to ensure that they have converted file-path strings into URL-safe paths.\n */\nexport type UrlPath = DiscriminatedPath<\"UrlPath\">;\n\n/**\n * Convert a file-path string to a URL-path string.\n *\n * Use this helper to convert a `string` to a `UrlPath` when it is not clear whether the string needs normalizing.\n * Replaces all back-slashes with forward-slashes, and throws an error if the path contains a drive letter (e.g. `C:`).\n *\n * @param filePath - The file path to convert\n * @returns The URL-safe path\n */\nexport function toUrlPath(filePath: string): UrlPath {\n\tassert(\n\t\t!/^[a-z]:/i.test(filePath),\n\t\t\"Tried to convert a Windows file path with a drive to a URL path.\"\n\t);\n\treturn filePath.replace(/\\\\/g, \"/\") as UrlPath;\n}\n","export type {\n\tRawConfig,\n\tConfig,\n\tRawDevConfig,\n\tConfigFields,\n\tRawEnvironment,\n\tConfigBindingOptions,\n} from \"./config\";\nexport * from \"./config/environment\";\nexport { partitionExports } from \"./config/exports\";\nexport type { ExportType, PartitionedExports } from \"./config/exports\";\nexport {\n\tgetDurableObjectExports,\n\thasDurableObjectExports,\n} from \"./config/durable-object-exports\";\nexport {\n\tgetContainerDurableObjectClassNames,\n\tgetContainerNameToClassNameMap,\n\tresolveContainerClassName,\n} from \"./config/containers\";\nexport {\n\ttype RedirectedRawConfig,\n\tdefaultWranglerConfig,\n} from \"./config/config\";\nexport {\n\tformatConfigSnippet,\n\tconfigFormat,\n\tconfigFileName,\n\texperimental_readRawConfig,\n} from \"./config\";\nexport {\n\texperimental_patchConfig,\n\tPatchConfigError,\n} from \"./config/patch-config\";\nexport * from \"./worker\";\nexport * from \"./types\";\nexport {\n\ttype Message,\n\ttype Location,\n\ttype ParseFile,\n\tParseError,\n\tAPIError,\n\tparseTOML,\n\ttype PackageJSON,\n\tparsePackageJSON,\n\tparseJSON,\n\tparseJSONC,\n\treadFileSyncToBuffer,\n\treadFileSync,\n\tindexLocation,\n\tsearchLocation,\n\tparseHumanDuration,\n\tparseNonHyphenedUuid,\n\tparseByteSize,\n} from \"./parse\";\nexport {\n\tgetBindingTypeFriendlyName,\n\tisPagesConfig,\n\tnormalizeAndValidateConfig,\n\ttype NormalizeAndValidateConfigArgs,\n\ttype ConfigBindingFieldName,\n\tisValidR2BucketName,\n\tbucketFormatMessage,\n} from \"./config/validation\";\n\nimport * as validation from \"./config/validation\";\n\n/**\n * @deprecated new code should use getBindingTypeFriendlyName() instead\n */\nexport const friendlyBindingNames = validation.friendlyBindingNames;\n\nexport {\n\ttype BindingLocalSupport,\n\tgetBindingLocalSupport,\n\tvalidateBindingRemoteSetting,\n} from \"./config/binding-local-support\";\n\nexport { validatePagesConfig } from \"./config/validation-pages\";\n\nexport { Diagnostics } from \"./config/diagnostics\";\n\nexport {\n\thasProperty,\n\tisRequiredProperty,\n\tisOptionalProperty,\n} from \"./config/validation-helpers\";\n\nexport {\n\tresolveWranglerConfigPath,\n\tfindWranglerConfig,\n\tisRedirectedConfig,\n} from \"./config/config-helpers\";\nexport type { ResolveConfigPathOptions } from \"./config/config-helpers\";\nexport * from \"./errors\";\nexport { assertNever } from \"./assert-never\";\n\nexport {\n\tgetPackagePath,\n\tisPackageInstalled,\n\tgetInstalledPackageVersion,\n} from \"./package-resolution\";\n\nexport * from \"./constants\";\n\nexport { mapWorkerMetadataBindings } from \"./map-worker-metadata-bindings\";\nexport { constructWranglerConfig } from \"./construct-wrangler-config\";\nexport {\n\tconvertConfigToBindings,\n\textractBindingsOfType,\n\tgetBindings,\n\tisUnsafeBindingType,\n} from \"./binding-utils\";\nexport type { ConvertBindingsOptions } from \"./binding-utils\";\nexport { printBindings } from \"./print-bindings\";\nexport type { PrintBindingsOptions } from \"./print-bindings\";\n\nexport {\n\tgetBooleanEnvironmentVariableFactory,\n\tgetEnvironmentVariableFactory,\n} from \"./environment-variables/factory\";\n\nexport * from \"./environment-variables/misc-variables\";\n\nexport {\n\tgetGlobalConfigPath,\n\tgetGlobalWranglerCachePath,\n} from \"./global-wrangler-config-path\";\nexport type { GetGlobalConfigPathOptions } from \"./global-wrangler-config-path\";\n\nexport {\n\tisCompatDate,\n\tgetTodaysCompatDate,\n\tisNodejsCompatDefaultOn,\n\tNODEJS_COMPAT_DEFAULT_ON_DATE,\n\tNODEJS_COMPAT_V2_SWITCH_OVER_DATE,\n\tresolveNodejsCompat,\n\tstripRedundantNodejsCompatFlags,\n} from \"./compatibility-date\";\nexport type { CompatDate } from \"./compatibility-date\";\nexport { DEFAULT_COMPAT_DATE } from \"./default-compat-date\";\n\nexport { isDockerfile } from \"./config/validation\";\n\nexport { isDirectory, removeDir, removeDirSync } from \"./fs-helpers\";\n\nexport { createConfigCache } from \"./config-cache\";\nexport type { ConfigCache, ConfigCacheOptions } from \"./config-cache\";\n\nexport {\n\ttype EphemeralDirectory,\n\tgetWranglerHiddenDirPath,\n\tgetWranglerTmpDir,\n\tsweepStaleWranglerTmpDirs,\n} from \"./wrangler-tmp-dir\";\n\nexport { MetricsRegistry } from \"./prometheus-metrics\";\nexport type { Counter } from \"./prometheus-metrics\";\n\nexport type { Tunnel, TunnelOptions } from \"./tunnel\";\nexport { startTunnel } from \"./tunnel\";\nexport { spawnCloudflared } from \"./cloudflared\";\n\nexport * from \"./cfetch\";\n\nexport { fetchLatestNpmVersion } from \"./update-check\";\nexport type { NpmVersionCheckResult } from \"./update-check\";\n\nexport { LOGGER_LEVELS } from \"./logger\";\nexport type { Logger, LoggerLevel } from \"./logger\";\n\nexport { isCI, isInteractive, isNonInteractiveOrCI } from \"./is-interactive\";\nexport { openInBrowser } from \"./open-in-browser\";\nexport { clearOutputFilePath, writeOutput } from \"./output\";\nexport type { OutputEntry } from \"./output\";\n\nexport { retryOnAPIFailure } from \"./retry\";\nexport { formatTime } from \"./format-time\";\nexport {\n\tgetHostFromRoute,\n\tgetHostFromUrl,\n\tgetZoneFromRoute,\n} from \"./route-utils\";\n\nexport type { PackageManager } from \"./package-manager\";\nexport {\n\tNpmPackageManager,\n\tPnpmPackageManager,\n\tYarnPackageManager,\n\tBunPackageManager,\n\tNubPackageManager,\n} from \"./package-manager\";\n\nexport {\n\tcheckWorkerNameValidity,\n\ttoValidWorkerName,\n\tgetWorkerName,\n\tgetWorkerNameFromProject,\n} from \"./worker-name\";\n\nexport { _forceColour, formatZodError } from \"./zod-format\";\n\nexport { toUrlPath } from \"./url-path\";\nexport type { UrlPath } from \"./url-path\";\n"]}
|