@lunora/vite 1.0.0-alpha.144 → 1.0.0-alpha.145
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/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createRequire as u}from"node:module";import{cloudflare as c}from"@cloudflare/vite-plugin";import{detectAgentRules as m,claimAgentRulesHint as f,AGENT_RULES_HINT as d,detectFramework as p,resolveTargetOrThrow as g}from"@lunora/config";import{detectFramework as sr}from"@lunora/config";import R from"@visulima/vite-overlay";import{l}from"./packem_shared/log-DE48L4Oz.mjs";import S from"./packem_shared/codegenPlugin-
|
|
1
|
+
import{createRequire as u}from"node:module";import{cloudflare as c}from"@cloudflare/vite-plugin";import{detectAgentRules as m,claimAgentRulesHint as f,AGENT_RULES_HINT as d,detectFramework as p,resolveTargetOrThrow as g}from"@lunora/config";import{detectFramework as sr}from"@lunora/config";import R from"@visulima/vite-overlay";import{l}from"./packem_shared/log-DE48L4Oz.mjs";import S from"./packem_shared/codegenPlugin-CBgNvhG9.mjs";import v from"./packem_shared/containerLogsPlugin-CWkqSCL3.mjs";import k from"./packem_shared/devStatePlugin-BH928A-A.mjs";import h from"./packem_shared/devVariablesPlugin-DDvQh3l6.mjs";import{createCommandProbe as w,withDevWorkerEnv as P}from"./packem_shared/DEV_WORKER_ENV_VALUE-CaO3rUSk.mjs";import{DEV_WORKER_ENV_VALUE as cr,DEV_WORKER_ENV_VAR as mr}from"./packem_shared/DEV_WORKER_ENV_VALUE-CaO3rUSk.mjs";import{frameworkComposePlugin as E}from"./packem_shared/CLASS_A_WIRING-CBEvhsXt.mjs";import{CLASS_A_WIRING as dr,LUNORA_WORKER_VIRTUAL_ID as pr,buildWorkerEntrySource as gr,isAutoComposable as Rr}from"./packem_shared/CLASS_A_WIRING-CBEvhsXt.mjs";import A from"./packem_shared/logStreamPlugin-DFdSz0AO.mjs";import{proxyCheckPlugin as _}from"./packem_shared/checkLunoraProxy-C9M8c5eS.mjs";import{checkLunoraProxy as vr}from"./packem_shared/checkLunoraProxy-C9M8c5eS.mjs";import{planViteRemoteBindings as x,remoteBindingsCleanupPlugin as O,remoteBindingsConfigPlugin as W}from"./packem_shared/planViteRemoteBindings-BKGgYFk4.mjs";import{withRemoteBindings as hr}from"./packem_shared/planViteRemoteBindings-BKGgYFk4.mjs";import{lunoraSolutionFinders as D}from"./packem_shared/lunoraSolutionFinder--J0x2mAM.mjs";import{lunoraSolutionFinder as Pr}from"./packem_shared/lunoraSolutionFinder--J0x2mAM.mjs";import{studioPlugin as T}from"./packem_shared/STUDIO_PATH-DWBxpyjt.mjs";import{STUDIO_PATH as Ar,buildStudioUrl as _r}from"./packem_shared/STUDIO_PATH-DWBxpyjt.mjs";import{withWorkerStartupHint as V}from"./packem_shared/WORKER_STARTUP_HINT-COlRTY32.mjs";import{WORKER_STARTUP_HINT as Or,augmentWorkerStartupError as Wr,isWorkerEntryEvalError as Dr}from"./packem_shared/WORKER_STARTUP_HINT-COlRTY32.mjs";import{wranglerValidatorPlugin as C}from"./packem_shared/wranglerValidatorPlugin-Dma0xUy2.mjs";import{default as Vr}from"./packem_shared/LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{reconcileWranglerCrons as Lr}from"@lunora/config/cloudflare";const L=e=>({apply:"serve",configureServer(r){return()=>{m(e.projectRoot).installed||!f()||r.config.logger.warn(`
|
|
2
2
|
${l(d)}
|
|
3
3
|
`)}},name:"lunora:agent-rules-hint"}),N=()=>({}),y={astro:"Astro",none:"standalone (SPA / SSR-less)",nuxt:"Nuxt","react-router":"React Router","solid-start":"SolidStart",sveltekit:"SvelteKit","tanstack-start":"TanStack Start","tanstack-start-solid":"TanStack Start (Solid)",vinext:"Next.js on Vite (vinext)"},U=e=>{const r=y[e.framework];return e.framework==="none"?l("no meta-framework detected — running standalone."):e.class==="B"?l(`detected ${r} — composition is handled by the framework adapter.`):l(`detected ${r} — composing the Lunora worker into one Cloudflare Worker.`)},b=(e,r)=>{let t=!1;const o=()=>{r.framework??=p(e.projectRoot)};return{config(){o()},configResolved(){o()},configureServer(){o(),!t&&r.framework!==void 0&&(t=!0,console.info(U(r.framework)))},name:"lunora:framework-detect"}},I=e=>{if(e===!1)return!1;const r=e===!0||e===void 0?{}:e;return{...r,forwardedConsoleMethods:r.forwardedConsoleMethods??["error","warn"],solutionFinders:[...D,...r.solutionFinders??[]]}},j=e=>{const r=e??{},t=r.schemaDir??"lunora";let o;r.cloudflare===!1?o=!1:r.cloudflare===!0||r.cloudflare===void 0?o={}:o=r.cloudflare;const a=r.projectRoot??process.cwd();return{allowUnauthenticatedShardAccess:r.allowUnauthenticatedShardAccess??!1,apiSpec:r.apiSpec??"openapi",cloudflare:o,studio:r.studio??!0,generatedDir:r.generatedDir??`${t}/_generated`,overlay:I(r.overlay),projectRoot:a,schemaDir:t,target:g(a,r.target),validateWrangler:r.validateWrangler??!0}},nr=e=>{const r=j(e),t=N(),{isServe:o,plugin:a}=w(),n=[a,b(r,t),E(r,t),h(r),S(r),A(),k(r),L(r),_()];if(r.studio&&n.push(T()),r.validateWrangler&&n.push(C(r)),r.overlay!==!1&&n.push(R(r.overlay)),r.cloudflare!==!1){n.push(v(r));const i=x({projectRoot:r.projectRoot}),s=P(r.cloudflare,o);i.enabled&&(i.configPath!==void 0&&n.push(O(i.cleanup)),n.push(W(s,i))),n.push(...V(c(s)))}return n},ar=u(import.meta.url)("../package.json").version;export{dr as CLASS_A_WIRING,cr as DEV_WORKER_ENV_VALUE,mr as DEV_WORKER_ENV_VAR,Vr as LUNORA_API_UPDATED_EVENT,pr as LUNORA_WORKER_VIRTUAL_ID,Ar as STUDIO_PATH,ar as VERSION,Or as WORKER_STARTUP_HINT,Wr as augmentWorkerStartupError,_r as buildStudioUrl,gr as buildWorkerEntrySource,vr as checkLunoraProxy,S as codegenPlugin,v as containerLogsPlugin,w as createCommandProbe,sr as detectFramework,k as devStatePlugin,h as devVariablesPlugin,E as frameworkComposePlugin,Rr as isAutoComposable,Dr as isWorkerEntryEvalError,A as logStreamPlugin,nr as lunora,Pr as lunoraSolutionFinder,D as lunoraSolutionFinders,x as planViteRemoteBindings,_ as proxyCheckPlugin,Lr as reconcileWranglerCrons,O as remoteBindingsCleanupPlugin,W as remoteBindingsConfigPlugin,I as resolveOverlayOption,T as studioPlugin,P as withDevWorkerEnv,hr as withRemoteBindings,V as withWorkerStartupHint,C as wranglerValidatorPlugin};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{existsSync as P}from"node:fs";import{join as x,resolve as h,sep as b,basename as L}from"node:path";import{findTsconfig as M,createCodegenProject as G,refreshCodegenProject as I,runCodegen as B,describeErrorLevelFindings as U,CodegenDiagnosticError as V}from"@lunora/codegen";import{LUNORA_CONFIG_FILE as F,inferLunoraBindings as J}from"@lunora/config";import{findWranglerFile as z,readWranglerJsonc as q,WRANGLER_FILES as H,collectWranglerSecretVariables as K,reconcileWranglerBindings as Q,reconcileWranglerCrons as X,reconcileWranglerCompatibilityDate as Y}from"@lunora/config/cloudflare";import{isRunnableDevEnvironment as Z}from"vite";import ee from"./LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{L as f,a as W}from"./log-DE48L4Oz.mjs";import{r as ne,a as re}from"./server-close-Qoh4i6Ay.mjs";const _=(n,r)=>{try{const{parsed:t,text:e}=q(n);return t===void 0?`raw:${e}`:JSON.stringify(r?r(t):t)}catch{return"unreadable"}},te=n=>{const r={...n},{triggers:t}=r;if(t!==null&&typeof t=="object"){const e={...t};delete e.crons,Object.keys(e).length>0?r.triggers=e:delete r.triggers}return r},S=n=>{const r=z(n),t=r===void 0?"absent":_(r,te),e=x(n,F),s=P(e)?_(e):"absent";return`${t}\0${s}`},oe=100,N=/[/\\]tsconfig\..+\.json$/u,ie=n=>{const r=n.map(e=>` • ${e.kind} "${e.exportName}" — class ${e.className} is not exported by your worker entry.`),t=[...new Set(n.map(e=>e.module))].map(e=>` export * from "./lunora/_generated/${e}";`);return[`[lunora] ${String(n.length)} declared ${n.length===1?"binding is":"bindings are"} not exported by your worker entry — \`wrangler deploy\` will fail.`,...r,"","Add to your worker entry:",...t].join(`
|
|
2
|
+
`)},ae=async(n,r,t)=>{try{const e=await J({projectRoot:n.projectRoot,schemaDir:n.schemaDir}),s=Q(n.projectRoot,e);s.changed&&r.info?.(`${f} inferred bindings → ${s.added.join(", ")} (written to ${s.wranglerPath??"wrangler.jsonc"})`);for(const c of s.warnings)r.warn(`${f} ${c}`);s.exportGaps.length>0&&t?.(s.exportGaps)}catch(e){const s=e instanceof Error?e.message:String(e);r.warn(`${f} binding inference skipped: ${s}`)}},ce=(n,r,t)=>{try{const e=X(n,r);e.changed&&t.info?.(`${f} synced ${r.length.toFixed(0)} cron trigger(s) into ${e.wranglerPath??"wrangler.jsonc"}`)}catch(e){const s=e instanceof Error?e.message:String(e);t.warn(`${f} cron trigger sync skipped: ${s}`)}try{const e=Y(n);e.changed&&t.info?.(`${f} bumped compatibility_date to ${e.date??"unknown"} (Workers Cache enabled) → ${e.wranglerPath??"wrangler.jsonc"}`)}catch(e){const s=e instanceof Error?e.message:String(e);t.warn(`${f} compatibility date sync skipped: ${s}`)}},se=n=>{const{advisoryNames:r,platformDiagnosticNames:t}=U(n),e=[...new Set([...r,...t])].toSorted((c,l)=>c.localeCompare(l));if(e.length===0)return;const s=e.length===1?"advisory/platform diagnostic":"advisories/platform diagnostics";return`${f} ${String(e.length)} ERROR-level ${s} (${e.join(", ")}) — see the log above for detail.`},le=(n,r,t)=>{if(r.warn(`${f} schema.ts not found at ${n} — codegen skipped`),t!==void 0){const e=`schema.ts not found at ${n} — generated output is now stale`;t.onError(new Error(e),e)}},O=(n,r,t,e)=>{const s=x(n.projectRoot,n.schemaDir,"schema.ts");if(!P(s))return le(s,r,t),{};try{const c=B({apiSpec:n.apiSpec,lunoraDirectory:n.schemaDir,project:e,projectRoot:n.projectRoot,target:n.target,wranglerVariables:K(n.projectRoot)});ce(n.projectRoot,c.cronTriggers,r);for(const l of c.advisories){const g=W(l.level,l.name,l.detail,l.remediation);l.level==="ERROR"?r.error(g):r.warn(g)}for(const l of c.platformDiagnostics){const g=W(l.level==="error"?"ERROR":"WARN",l.name,l.message,l.remediation);l.level==="error"?r.error(g):r.warn(g)}return{blockingMessage:se(c),outputDirectory:h(c.outputDirectory)}}catch(c){const l=c instanceof Error?c.message:String(c);return r.error(`${f} codegen failed: ${l}`),t?.onError(c,l),{}}},de=(n,r,t)=>{let e;for(const[s,c]of Object.entries(n.environments)){if(s==="client"){e=c;continue}Z(c)||c.hot.send({path:"*",triggeredBy:r,type:"full-reload"})}if(e===void 0){n.hot.send({type:"full-reload"});return}if(t){e.hot.send({type:"full-reload"});return}e.hot.send({event:ee,type:"custom"})},ve=n=>{const r=h(n.projectRoot,n.schemaDir);let t=h(n.projectRoot,n.generatedDir),e;const s=new Map;let c,l=!1,g=!1,k;return{config(o,w){k=w.command},async buildStart(){const o={error:u=>{console.error(u)},info:u=>{console.info(u)},warn:u=>{console.warn(u)}},{blockingMessage:w,outputDirectory:y}=O(n,o);y!==void 0&&(t=y),k==="build"&&w!==void 0&&this.error(w),await ae(n,o,u=>{e?.hot.send({err:{loc:void 0,message:ie(u),stack:""},type:"error"})}),e!==void 0&&(c=S(n.projectRoot),l=!0)},configureServer(o){e=o,o.watcher.add(r),c=S(n.projectRoot),l=!1;const w={error:i=>{o.config.logger.error(i)},info:i=>{o.config.logger.info(i)},warn:i=>{o.config.logger.warn(i)}};let y=!1;const u={onError(i,a){y=!0;const d=i instanceof V?{column:i.column,file:i.file,line:i.line}:void 0,E=d===void 0?`[lunora] codegen failed: ${a}
|
|
3
|
+
(see terminal for full stack trace and file location)`:`[lunora] codegen failed: ${a}`;e?.hot.send({err:{loc:d,message:E,stack:i instanceof Error?i.stack??"":""},type:"error"})}},R=(i,a)=>i===a||i.startsWith(a+b);let j=!1,p,m;const T=()=>{for(const i of Object.values(o.environments)){const a=i.moduleGraph;for(const d of a.idToModuleMap.values())d.id&&R(d.id,t)&&a.invalidateModule(d)}},$=i=>{const a=h(i);if(N.test(a)){m=void 0;return}if(a.endsWith(`${b}tsconfig.json`)&&a===M(r)){m=void 0;return}R(a,r)&&(R(a,t)||a.endsWith(".ts")&&(a.includes(`${b}__tests__${b}`)||a.endsWith(".test.ts")||a.endsWith(".spec.ts")||(p&&clearTimeout(p),p=setTimeout(()=>{if(p=void 0,j)return;m===void 0?m=G(r):I(m,r);const{outputDirectory:d}=O(n,w,u,m);if(d===void 0){m=void 0;return}t=d,T(),de(o,a,y),y=!1},oe))))},C=i=>{const a=h(i);(a.endsWith(`${b}tsconfig.json`)||N.test(a))&&(m=void 0)};o.watcher.on("add",$),o.watcher.on("change",$),o.watcher.on("unlink",$),o.watcher.on("unlink",C);const D=new Set([...H.map(i=>h(n.projectRoot,i)),h(n.projectRoot,F)]);for(const i of D)o.watcher.add(i);const v=i=>{if(!D.has(h(i))||g)return;const a=S(n.projectRoot);if(!l){c=a;return}if(c===void 0){c=a;return}a!==c&&(c=a,g=!0,o.config.logger.info(`${f} ${L(h(i))} changed — restarting dev server`),Promise.resolve(o.restart()).finally(()=>{g=!1}).catch(d=>{const E=d instanceof Error?d.message:String(d);o.config.logger.error(`${f} dev server restart failed: ${E} — keeping the running server; re-save your config to retry.`),o.hot.send({err:{loc:void 0,message:`[lunora] dev server restart failed: ${E}`,stack:""},type:"error"})}))};o.watcher.on("add",v),o.watcher.on("change",v),o.watcher.on("unlink",v);const A=()=>{j||(j=!0,m=void 0,p&&(clearTimeout(p),p=void 0),o.watcher.off("add",$),o.watcher.off("change",$),o.watcher.off("unlink",$),o.watcher.off("unlink",C),o.watcher.off("add",v),o.watcher.off("change",v),o.watcher.off("unlink",v))};return()=>{re(o,s,A)}},buildEnd(){ne(s,this.environment)},name:"lunora:codegen"}};export{ve as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lunora/vite",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.145",
|
|
4
4
|
"description": "The Lunora Vite plugin: codegen, type sync, wrangler validation, and an error overlay over @cloudflare/vite-plugin",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cloudflare",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@cloudflare/vite-plugin": "1.51.2",
|
|
49
|
-
"@lunora/codegen": "1.0.0-alpha.
|
|
50
|
-
"@lunora/config": "1.0.0-alpha.
|
|
49
|
+
"@lunora/codegen": "1.0.0-alpha.115",
|
|
50
|
+
"@lunora/config": "1.0.0-alpha.145",
|
|
51
51
|
"@lunora/errors": "1.0.0-alpha.22",
|
|
52
52
|
"@visulima/vite-overlay": "2.0.12",
|
|
53
53
|
"ts-morph": "^28.0.0"
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{existsSync as O}from"node:fs";import{join as x,resolve as h,sep as b,basename as L}from"node:path";import{findTsconfig as G,createCodegenProject as M,refreshCodegenProject as I,runCodegen as B,describeErrorLevelFindings as U,CodegenDiagnosticError as V}from"@lunora/codegen";import{LUNORA_CONFIG_FILE as F,inferLunoraBindings as J}from"@lunora/config";import{findWranglerFile as z,readWranglerJsonc as q,WRANGLER_FILES as H,collectWranglerSecretVariables as K,reconcileWranglerBindings as Q,reconcileWranglerCrons as X,reconcileWranglerCompatibilityDate as Y}from"@lunora/config/cloudflare";import{isRunnableDevEnvironment as Z}from"vite";import ee from"./LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{L as f,a as P}from"./log-DE48L4Oz.mjs";import{r as ne,a as re}from"./server-close-Qoh4i6Ay.mjs";const W=(n,r)=>{try{const{parsed:o,text:e}=q(n);return o===void 0?`raw:${e}`:JSON.stringify(r?r(o):o)}catch{return"unreadable"}},te=n=>{const r={...n},{triggers:o}=r;if(o!==null&&typeof o=="object"){const e={...o};delete e.crons,Object.keys(e).length>0?r.triggers=e:delete r.triggers}return r},k=n=>{const r=z(n),o=r===void 0?"absent":W(r,te),e=x(n,F),s=O(e)?W(e):"absent";return`${o}\0${s}`},oe=100,_=/[/\\]tsconfig\..+\.json$/u,ie=n=>{const r=n.map(e=>` • ${e.kind} "${e.exportName}" — class ${e.className} is not exported by your worker entry.`),o=[...new Set(n.map(e=>e.module))].map(e=>` export * from "./lunora/_generated/${e}";`);return[`[lunora] ${String(n.length)} declared ${n.length===1?"binding is":"bindings are"} not exported by your worker entry — \`wrangler deploy\` will fail.`,...r,"","Add to your worker entry:",...o].join(`
|
|
2
|
-
`)},ae=async(n,r,o)=>{try{const e=await J({projectRoot:n.projectRoot,schemaDir:n.schemaDir}),s=Q(n.projectRoot,e);s.changed&&r.info?.(`${f} inferred bindings → ${s.added.join(", ")} (written to ${s.wranglerPath??"wrangler.jsonc"})`);for(const c of s.warnings)r.warn(`${f} ${c}`);s.exportGaps.length>0&&o?.(s.exportGaps)}catch(e){const s=e instanceof Error?e.message:String(e);r.warn(`${f} binding inference skipped: ${s}`)}},ce=(n,r,o)=>{try{const e=X(n,r);e.changed&&o.info?.(`${f} synced ${r.length.toFixed(0)} cron trigger(s) into ${e.wranglerPath??"wrangler.jsonc"}`)}catch(e){const s=e instanceof Error?e.message:String(e);o.warn(`${f} cron trigger sync skipped: ${s}`)}try{const e=Y(n);e.changed&&o.info?.(`${f} bumped compatibility_date to ${e.date??"unknown"} (Workers Cache enabled) → ${e.wranglerPath??"wrangler.jsonc"}`)}catch(e){const s=e instanceof Error?e.message:String(e);o.warn(`${f} compatibility date sync skipped: ${s}`)}},se=n=>{const{advisoryNames:r,platformDiagnosticNames:o}=U(n),e=[...new Set([...r,...o])].toSorted((c,l)=>c.localeCompare(l));if(e.length===0)return;const s=e.length===1?"advisory/platform diagnostic":"advisories/platform diagnostics";return`${f} ${String(e.length)} ERROR-level ${s} (${e.join(", ")}) — see the log above for detail.`},N=(n,r,o,e)=>{const s=x(n.projectRoot,n.schemaDir,"schema.ts");if(!O(s))return r.warn(`${f} schema.ts not found at ${s} — codegen skipped`),{};try{const c=B({apiSpec:n.apiSpec,lunoraDirectory:n.schemaDir,project:e,projectRoot:n.projectRoot,target:n.target,wranglerVariables:K(n.projectRoot)});ce(n.projectRoot,c.cronTriggers,r);for(const l of c.advisories){const g=P(l.level,l.name,l.detail,l.remediation);l.level==="ERROR"?r.error(g):r.warn(g)}for(const l of c.platformDiagnostics){const g=P(l.level==="error"?"ERROR":"WARN",l.name,l.message,l.remediation);l.level==="error"?r.error(g):r.warn(g)}return{blockingMessage:se(c),outputDirectory:h(c.outputDirectory)}}catch(c){const l=c instanceof Error?c.message:String(c);return r.error(`${f} codegen failed: ${l}`),o?.onError(c,l),{}}},le=(n,r,o)=>{let e;for(const[s,c]of Object.entries(n.environments)){if(s==="client"){e=c;continue}Z(c)||c.hot.send({path:"*",triggeredBy:r,type:"full-reload"})}if(e===void 0){n.hot.send({type:"full-reload"});return}if(o){e.hot.send({type:"full-reload"});return}e.hot.send({event:ee,type:"custom"})},$e=n=>{const r=h(n.projectRoot,n.schemaDir);let o=h(n.projectRoot,n.generatedDir),e;const s=new Map;let c,l=!1,g=!1,S;return{config(t,w){S=w.command},async buildStart(){const t={error:u=>{console.error(u)},info:u=>{console.info(u)},warn:u=>{console.warn(u)}},{blockingMessage:w,outputDirectory:y}=N(n,t);y!==void 0&&(o=y),S==="build"&&w!==void 0&&this.error(w),await ae(n,t,u=>{e?.hot.send({err:{loc:void 0,message:ie(u),stack:""},type:"error"})}),e!==void 0&&(c=k(n.projectRoot),l=!0)},configureServer(t){e=t,t.watcher.add(r),c=k(n.projectRoot),l=!1;const w={error:i=>{t.config.logger.error(i)},info:i=>{t.config.logger.info(i)},warn:i=>{t.config.logger.warn(i)}};let y=!1;const u={onError(i,a){y=!0;const d=i instanceof V?{column:i.column,file:i.file,line:i.line}:void 0,E=d===void 0?`[lunora] codegen failed: ${a}
|
|
3
|
-
(see terminal for full stack trace and file location)`:`[lunora] codegen failed: ${a}`;e?.hot.send({err:{loc:d,message:E,stack:i instanceof Error?i.stack??"":""},type:"error"})}},R=(i,a)=>i===a||i.startsWith(a+b);let j=!1,p,m;const T=()=>{for(const i of Object.values(t.environments)){const a=i.moduleGraph;for(const d of a.idToModuleMap.values())d.id&&R(d.id,o)&&a.invalidateModule(d)}},$=i=>{const a=h(i);if(_.test(a)){m=void 0;return}if(a.endsWith(`${b}tsconfig.json`)&&a===G(r)){m=void 0;return}R(a,r)&&(R(a,o)||a.endsWith(".ts")&&(a.includes(`${b}__tests__${b}`)||a.endsWith(".test.ts")||a.endsWith(".spec.ts")||(p&&clearTimeout(p),p=setTimeout(()=>{if(p=void 0,j)return;m===void 0?m=M(r):I(m,r);const{outputDirectory:d}=N(n,w,u,m);if(d===void 0){m=void 0;return}o=d,T(),le(t,a,y),y=!1},oe))))},C=i=>{const a=h(i);(a.endsWith(`${b}tsconfig.json`)||_.test(a))&&(m=void 0)};t.watcher.on("add",$),t.watcher.on("change",$),t.watcher.on("unlink",$),t.watcher.on("unlink",C);const D=new Set([...H.map(i=>h(n.projectRoot,i)),h(n.projectRoot,F)]);for(const i of D)t.watcher.add(i);const v=i=>{if(!D.has(h(i))||g)return;const a=k(n.projectRoot);if(!l){c=a;return}if(c===void 0){c=a;return}a!==c&&(c=a,g=!0,t.config.logger.info(`${f} ${L(h(i))} changed — restarting dev server`),Promise.resolve(t.restart()).finally(()=>{g=!1}).catch(d=>{const E=d instanceof Error?d.message:String(d);t.config.logger.error(`${f} dev server restart failed: ${E} — keeping the running server; re-save your config to retry.`),t.hot.send({err:{loc:void 0,message:`[lunora] dev server restart failed: ${E}`,stack:""},type:"error"})}))};t.watcher.on("add",v),t.watcher.on("change",v),t.watcher.on("unlink",v);const A=()=>{j||(j=!0,m=void 0,p&&(clearTimeout(p),p=void 0),t.watcher.off("add",$),t.watcher.off("change",$),t.watcher.off("unlink",$),t.watcher.off("unlink",C),t.watcher.off("add",v),t.watcher.off("change",v),t.watcher.off("unlink",v))};return()=>{re(t,s,A)}},buildEnd(){ne(s,this.environment)},name:"lunora:codegen"}};export{$e as default};
|