function detectWorkerEntrypointClasses(ast) { const bases = collectWorkerEntrypointImports(ast); if (bases.named.size === 0 && bases.namespaces.size === 0) { return /* @__PURE__ */ new Set(); } const classes = /* @__PURE__ */ new Map(); for (const node of ast.body) { const classNode = asClassDeclaration(node); if (classNode?.id?.name) classes.set(classNode.id.name, classNode); } const entrypoints = /* @__PURE__ */ new Set(); let changed = true; while (changed) { changed = false; for (const [name, classNode] of classes) { if (entrypoints.has(name)) continue; if (extendsWorkerEntrypoint(classNode.superClass, bases, entrypoints)) { entrypoints.add(name); changed = true; } } } return entrypoints; } function asClassDeclaration(node) { if (node.type === "ClassDeclaration") return node; if (node.type === "ExportNamedDeclaration") { const decl = node.declaration; if (decl?.type === "ClassDeclaration") return decl; } return void 0; } function collectWorkerEntrypointImports(ast) { const named = /* @__PURE__ */ new Set(); const namespaces = /* @__PURE__ */ new Set(); for (const node of ast.body) { if (node.type !== "ImportDeclaration") continue; const importNode = node; if (importNode.source?.value !== "cloudflare:workers") continue; for (const specifier of importNode.specifiers ?? []) { if (specifier.type === "ImportSpecifier" && specifier.imported?.name === "WorkerEntrypoint" && specifier.local?.name) { named.add(specifier.local.name); } else if (specifier.type === "ImportNamespaceSpecifier" && specifier.local?.name) { namespaces.add(specifier.local.name); } } } return { named, namespaces }; } function extendsWorkerEntrypoint(superClass, bases, detected) { if (!superClass) return false; if (superClass.type === "Identifier") { const name = superClass.name; return bases.named.has(name) || detected.has(name); } if (superClass.type === "MemberExpression") { const member = superClass; return member.object?.type === "Identifier" && !!member.object.name && bases.namespaces.has(member.object.name) && member.property?.name === "WorkerEntrypoint"; } return false; } export { detectWorkerEntrypointClasses }; //# sourceMappingURL=workerEntrypoint.js.map