/** * Cloudflare requires a named export on the deployed Worker for every * entrypoint, Durable Object, and Workflow class an application defines. Which * classes those are cannot be determined statically — the entry module has to * be evaluated and its exports classified by prototype chain. * * The classification runs inside the Worker (see {@link exportTypesModuleSource}) * and the result is reported to the dev server over the HMR channel, so a dev * server can regenerate its Worker wrappers whenever the exports change. */ export type ExportType = "DurableObject" | "WorkerEntrypoint" | "WorkflowEntrypoint"; /** Maps each named export of a Worker entry to the kind of export it is. */ export type ExportTypes = Record; /** * HMR event the Worker entry uses to report its export types to the dev server. */ export declare const WORKER_EXPORT_TYPES_EVENT = "distilled-cloudflare:worker-export-types"; /** Specifier of the virtual module that classifies a Worker entry's exports. */ export declare const EXPORT_TYPES_MODULE_ID = "distilled:export-types"; /** Resolved id of {@link EXPORT_TYPES_MODULE_ID}. */ export declare const RESOLVED_EXPORT_TYPES_MODULE_ID = "\0distilled:export-types"; /** * Source of {@link EXPORT_TYPES_MODULE_ID}. It runs inside the Worker, where * `cloudflare:workers` is available, so it is emitted as source rather than * imported from here. */ export declare const exportTypesModuleSource = "import {\n DurableObject,\n WorkerEntrypoint,\n WorkflowEntrypoint,\n} from \"cloudflare:workers\";\n\nconst baseClasses = [\n [\"WorkerEntrypoint\", WorkerEntrypoint],\n [\"DurableObject\", DurableObject],\n [\"WorkflowEntrypoint\", WorkflowEntrypoint],\n];\n\nexport function getExportTypes(module) {\n const exportTypes = {};\n\n for (const [key, value] of Object.entries(module ?? {})) {\n if (key === \"default\") {\n continue;\n }\n\n let exportType;\n\n if (typeof value === \"function\") {\n for (const [type, baseClass] of baseClasses) {\n if (baseClass.prototype.isPrototypeOf(value.prototype)) {\n exportType = type;\n break;\n }\n }\n\n // A class that extends none of the base classes is most likely a Durable\n // Object written against the original, non-subclassing API.\n exportType ??= \"DurableObject\";\n } else if (typeof value === \"object\" && value !== null) {\n // A plain object export is an `ExportedHandler`, i.e. a named entrypoint.\n exportType = \"WorkerEntrypoint\";\n }\n\n if (exportType !== undefined) {\n exportTypes[key] = exportType;\n }\n }\n\n return exportTypes;\n}\n"; /** * Narrows a value received over the HMR channel to {@link ExportTypes}. */ export declare function isExportTypes(value: unknown): value is ExportTypes; /** * Returns `true` if any export was added, removed, or changed type. */ export declare function haveExportTypesChanged(previous: ExportTypes, next: ExportTypes): boolean; //# sourceMappingURL=export-types.d.ts.map