@lunora/vite 1.0.0-alpha.286 → 1.0.0-alpha.288

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 l}from"node:module";import{cloudflare as s}from"@cloudflare/vite-plugin";import{detectAgentRules as u,claimAgentRulesHint as c,lunoraLine as a,AGENT_RULES_HINT as f,detectFramework as d,targetRunsOwnDevServer as m,resolveTargetOrThrow as g,isRunnableTarget as p,runnableTargetIds as v}from"@lunora/config";import{GENERATED_CLASS_MODULES as lr,detectFramework as sr}from"@lunora/config";import S from"@visulima/vite-overlay";import{reconcileBindingsSafely as w}from"@lunora/config/cloudflare";import{reconcileWranglerCrons as cr}from"@lunora/config/cloudflare";import h from"./packem_shared/codegenPlugin-CV_h92v2.mjs";import R from"./packem_shared/containerLogsPlugin-67PZ8zmb.mjs";import k from"./packem_shared/devStatePlugin-CCWf9AFZ.mjs";import P from"./packem_shared/devVariablesPlugin-DbD6cSF0.mjs";import{frameworkComposePlugin as A}from"./packem_shared/CLASS_A_WIRING-BAnDZbel.mjs";import{CLASS_A_WIRING as dr,LUNORA_WORKER_VIRTUAL_ID as mr,buildWorkerEntrySource as gr,isAutoComposable as pr}from"./packem_shared/CLASS_A_WIRING-BAnDZbel.mjs";import E from"./packem_shared/logStreamPlugin-DtOu5VX8.mjs";import{proxyCheckPlugin as T}from"./packem_shared/checkLunoraProxy-BNPgNWtV.mjs";import{checkLunoraProxy as Sr}from"./packem_shared/checkLunoraProxy-BNPgNWtV.mjs";import{remoteBindingsPlugin as x}from"./packem_shared/planViteRemoteBindings-ByOliZuE.mjs";import{planViteRemoteBindings as hr,withRemoteBindings as Rr}from"./packem_shared/planViteRemoteBindings-ByOliZuE.mjs";import{lunoraSolutionFinders as O}from"./packem_shared/lunoraSolutionFinder--J0x2mAM.mjs";import{lunoraSolutionFinder as Pr}from"./packem_shared/lunoraSolutionFinder--J0x2mAM.mjs";import{studioPlugin as _}from"./packem_shared/buildStudioUrl-DMMWpguZ.mjs";import{buildStudioUrl as Er}from"./packem_shared/buildStudioUrl-DMMWpguZ.mjs";import{withWorkerStartupHint as b}from"./packem_shared/WORKER_STARTUP_HINT-COlRTY32.mjs";import{WORKER_STARTUP_HINT as xr,augmentWorkerStartupError as Or,isWorkerEntryEvalError as _r}from"./packem_shared/WORKER_STARTUP_HINT-COlRTY32.mjs";import{wranglerValidatorPlugin as y}from"./packem_shared/wranglerValidatorPlugin-BlGHjTXZ.mjs";import{default as yr}from"./packem_shared/LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{STUDIO_PATH as Dr}from"@lunora/config/studio-host";const L=o=>({apply:"serve",configureServer(r){return()=>{u(o.projectRoot).installed||!c()||r.config.logger.warn(`
2
- ${a(f)}
3
- `)}},name:"lunora:agent-rules-hint"}),D=o=>({async config(r,t){t.isPreview!==!0&&await w(o,{info:e=>{console.info(e)},warn:e=>{console.warn(e)}})},enforce:"pre",name:"lunora:bindings-provision"}),W=()=>({}),C={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)"},N=o=>{const r=C[o.framework];return o.framework==="none"?a("no meta-framework detected — running standalone."):o.class==="B"?a(`detected ${r} — composition is handled by the framework adapter.`):a(`detected ${r} — composing the Lunora worker into one Cloudflare Worker.`)},U=(o,r)=>{let t=!1;const e=()=>{r.framework??=d(o.projectRoot)};return{config(){e()},configResolved(){e()},configureServer(){e(),!t&&r.framework!==void 0&&(t=!0,console.info(N(r.framework)))},name:"lunora:framework-detect"}},I=o=>{if(o===!1)return!1;const r=o===!0||o===void 0?{}:o;return{...r,forwardedConsoleMethods:r.forwardedConsoleMethods??["error","warn"],solutionFinders:[...O,...r.solutionFinders??[]]}},$=(o,r)=>{const t=g(o,r);if(!p(t)){const e=v();throw new Error(`target "${t}" has no command-line toolchain, so the Lunora Vite plugin cannot build or serve it — it can only generate for it (\`lunora codegen --target ${t}\`). Buildable targets: ${e.join(", ")}`)}return t},j=o=>{const r=o??{},t=r.schemaDir??"lunora";let e;r.cloudflare===!1?e=!1:r.cloudflare===!0||r.cloudflare===void 0?e={}:e=r.cloudflare;const n=r.projectRoot??process.cwd(),i=$(n,r.target);return{allowUnauthenticatedShardAccess:r.allowUnauthenticatedShardAccess??!1,apiSpec:r.apiSpec??"openapi",cloudflare:e,studio:r.studio??!0,generatedDir:`${t}/_generated`,overlay:I(r.overlay),projectRoot:n,schemaDir:t,shard:r.shard??{},target:i,validateWrangler:r.validateWrangler??!0}},tr=o=>{const r=j(o),t=W(),e=[U(r,t),A(r,t),P(r),D(r),h(r),E(),k(r),L(r),T()];r.studio&&e.push(_(r)),r.validateWrangler&&e.push(y(r)),r.overlay!==!1&&e.push(S(r.overlay)),e.push(R(r));const n=r.cloudflare===!1?void 0:{...r.cloudflare};return e.push(x(n,{projectRoot:r.projectRoot})),n!==void 0&&(e.push(...b(s(n))),m(r.target)&&e.push({configureServer(i){i.config.logger.warn(`[lunora] target "${r.target}": vite dev serves the worker in workerd, not on ${r.target}. \`vite build\` then \`lunora deploy\` ships it to ${r.target}.`)},name:"lunora:target-runtime-notice"})),e},nr=l(import.meta.url)("../package.json").version;export{dr as CLASS_A_WIRING,lr as GENERATED_CLASS_MODULES,yr as LUNORA_API_UPDATED_EVENT,mr as LUNORA_WORKER_VIRTUAL_ID,Dr as STUDIO_PATH,nr as VERSION,xr as WORKER_STARTUP_HINT,Or as augmentWorkerStartupError,Er as buildStudioUrl,gr as buildWorkerEntrySource,Sr as checkLunoraProxy,h as codegenPlugin,R as containerLogsPlugin,sr as detectFramework,k as devStatePlugin,P as devVariablesPlugin,A as frameworkComposePlugin,pr as isAutoComposable,_r as isWorkerEntryEvalError,E as logStreamPlugin,tr as lunora,Pr as lunoraSolutionFinder,O as lunoraSolutionFinders,hr as planViteRemoteBindings,T as proxyCheckPlugin,cr as reconcileWranglerCrons,x as remoteBindingsPlugin,I as resolveOverlayOption,_ as studioPlugin,Rr as withRemoteBindings,b as withWorkerStartupHint,y as wranglerValidatorPlugin};
1
+ import{createRequire as p}from"node:module";import{cloudflare as m}from"@cloudflare/vite-plugin";import{detectAgentRules as v,claimAgentRulesHint as h,lunoraLine as d,AGENT_RULES_HINT as S,resolveDeployDriver as w,startCelldDevSession as k,formatLunoraEvent as P,detectFramework as R,targetRunsOwnDevServer as y,resolveTargetOrThrow as x,isRunnableTarget as E,runnableTargetIds as A}from"@lunora/config";import{GENERATED_CLASS_MODULES as br,detectFramework as Cr}from"@lunora/config";import _ from"@visulima/vite-overlay";import{reconcileBindingsSafely as D,findWranglerFile as O,readWranglerJsonc as T}from"@lunora/config/cloudflare";import{reconcileWranglerCrons as Ur}from"@lunora/config/cloudflare";import{r as W,a as $}from"./packem_shared/server-close-DWiO4Vxb.mjs";import b from"./packem_shared/codegenPlugin-eWUCZzQt.mjs";import C from"./packem_shared/containerLogsPlugin-67PZ8zmb.mjs";import L from"./packem_shared/devStatePlugin--5NrWCga.mjs";import U from"./packem_shared/devVariablesPlugin-DbD6cSF0.mjs";import{frameworkComposePlugin as N}from"./packem_shared/CLASS_A_WIRING-BAnDZbel.mjs";import{CLASS_A_WIRING as Fr,LUNORA_WORKER_VIRTUAL_ID as Ir,buildWorkerEntrySource as Br,isAutoComposable as Vr}from"./packem_shared/CLASS_A_WIRING-BAnDZbel.mjs";import F from"./packem_shared/logStreamPlugin-EMXiy6pI.mjs";import{proxyCheckPlugin as I}from"./packem_shared/checkLunoraProxy-BNPgNWtV.mjs";import{checkLunoraProxy as Hr}from"./packem_shared/checkLunoraProxy-BNPgNWtV.mjs";import{remoteBindingsPlugin as B}from"./packem_shared/planViteRemoteBindings-ByOliZuE.mjs";import{planViteRemoteBindings as Kr,withRemoteBindings as Gr}from"./packem_shared/planViteRemoteBindings-ByOliZuE.mjs";import{resolve as V}from"node:path";import{readServiceBindings as j}from"@lunora/codegen";import{lunoraSolutionFinders as H}from"./packem_shared/lunoraSolutionFinder--J0x2mAM.mjs";import{lunoraSolutionFinder as Jr}from"./packem_shared/lunoraSolutionFinder--J0x2mAM.mjs";import{studioPlugin as M}from"./packem_shared/buildStudioUrl-DMMWpguZ.mjs";import{buildStudioUrl as Qr}from"./packem_shared/buildStudioUrl-DMMWpguZ.mjs";import{withWorkerStartupHint as K}from"./packem_shared/WORKER_STARTUP_HINT-COlRTY32.mjs";import{WORKER_STARTUP_HINT as Yr,augmentWorkerStartupError as Zr,isWorkerEntryEvalError as re}from"./packem_shared/WORKER_STARTUP_HINT-COlRTY32.mjs";import{wranglerValidatorPlugin as G}from"./packem_shared/wranglerValidatorPlugin-BlGHjTXZ.mjs";import{default as oe}from"./packem_shared/LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{STUDIO_PATH as ne}from"@lunora/config/studio-host";const q=e=>({apply:"serve",configureServer(r){return()=>{v(e.projectRoot).installed||!h()||r.config.logger.warn(`
2
+ ${d(S)}
3
+ `)}},name:"lunora:agent-rules-hint"}),J=e=>({async config(r,t){t.isPreview!==!0&&await D(e,{info:o=>{console.info(o)},warn:o=>{console.warn(o)}})},enforce:"pre",name:"lunora:bindings-provision"}),f="/_lunora",z=8787,c=new Map,g=e=>e.command==="serve"&&e.isPreview!==!0,Q=(e,r)=>{let t;return()=>{if(t===void 0)try{w(r).projectConfig?.(e,"dev"),t={runs:!0}}catch(o){t={reason:o instanceof Error?o.message:String(o),runs:!1}}return t}},X=e=>{const r=O(e),t=r===void 0?void 0:T(r).parsed?.dev?.port;return typeof t=="number"?t:z},Y=(e,r)=>e.map(t=>{const o=t.apply;return{...t,apply:(n,a)=>g(a)&&r()?!1:typeof o=="function"?o(n,a):o===void 0||o===a.command}}),Z=(e,r,{stream:t,tag:o})=>{const n=P(r);n!==void 0?e[n.level](`[lunora] ${n.text}`):t==="stderr"?e.warn(`[${o}] ${r}`):e.info(`[${o}] ${r}`)},rr=(e,r)=>{const t=X(e),o=new Map;return{apply:(n,a)=>g(a)&&r(),buildEnd(){$(o,this.environment)},config:n=>{if(n.server?.proxy?.[f]===void 0)return{server:{proxy:{[f]:{changeOrigin:!0,target:`http://127.0.0.1:${String(t)}`,ws:!0}}}}},async configureServer(n){const{logger:a}=n.config;await c.get(e)?.stop(),c.delete(e),a.info(`[lunora] starting the worker on celld at http://127.0.0.1:${String(t)} …`);const s=await k({log:(i,u)=>{Z(a,i,u)},port:t,projectRoot:e});c.set(e,s);const l=i=>{a.error(`[lunora] the worker on celld exited (code ${String(i)}) — restart vite dev to bring it back`)};s.exited.then(l).catch(()=>{}),W(n,o,()=>{c.get(e)===s&&c.delete(e),s.stop().catch(i=>{a.error(`[lunora] stopping celld failed: ${i instanceof Error?i.message:String(i)}`)})})},name:"lunora:celld-dev"}},er=()=>({}),or={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)"},tr=e=>{const r=or[e.framework];return e.framework==="none"?d("no meta-framework detected — running standalone."):e.class==="B"?d(`detected ${r} — composition is handled by the framework adapter.`):d(`detected ${r} — composing the Lunora worker into one Cloudflare Worker.`)},nr=(e,r)=>{let t=!1;const o=()=>{r.framework??=R(e.projectRoot)};return{config(){o()},configResolved(){o()},configureServer(){o(),!t&&r.framework!==void 0&&(t=!0,console.info(tr(r.framework)))},name:"lunora:framework-detect"}},ir=(e,r)=>({config(t,o){if(o.command!=="serve")return;const{services:n}=j(r),a=Array.isArray(e.auxiliaryWorkers)?e.auxiliaryWorkers:[],s=new Set(a.map(i=>i.configPath===void 0?"":V(r,i.configPath))),l=[...new Set(n.map(i=>i.wranglerPath))].filter(i=>!s.has(i)).map(i=>({configPath:i}));l.length>0&&(e.auxiliaryWorkers=[...a,...l])},enforce:"pre",name:"lunora:service-workers"}),ar=e=>{if(e===!1)return!1;const r=e===!0||e===void 0?{}:e;return{...r,forwardedConsoleMethods:r.forwardedConsoleMethods??["error","warn"],solutionFinders:[...H,...r.solutionFinders??[]]}},sr=(e,r)=>{const t=x(e,r);if(!E(t)){const o=A();throw new Error(`target "${t}" has no command-line toolchain, so the Lunora Vite plugin cannot build or serve it — it can only generate for it (\`lunora codegen --target ${t}\`). Buildable targets: ${o.join(", ")}`)}return t},lr=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 n=r.projectRoot??process.cwd(),a=sr(n,r.target);return{allowUnauthenticatedShardAccess:r.allowUnauthenticatedShardAccess??!1,apiSpec:r.apiSpec??"openapi",cloudflare:o,studio:r.studio??!0,generatedDir:`${t}/_generated`,overlay:ar(r.overlay),projectRoot:n,schemaDir:t,shard:r.shard??{},target:a,validateWrangler:r.validateWrangler??!0}},Or=e=>{const r=lr(e),t=er(),o=[nr(r,t),N(r,t),U(r),J(r),b(r),F(),L(r),q(r),I()];r.studio&&o.push(M(r)),r.validateWrangler&&o.push(G(r)),r.overlay!==!1&&o.push(_(r.overlay)),o.push(C(r));const n=r.cloudflare===!1?void 0:{...r.cloudflare};if(o.push(B(n,{projectRoot:r.projectRoot})),n!==void 0){o.push(ir(n,r.projectRoot));const a=y(r.target),s=Q(r.projectRoot,r.target),l=()=>a&&s().runs;o.push(...Y(K(m(n)),l)),a&&o.push(rr(r.projectRoot,l),{apply:(i,u)=>u.command==="serve"&&u.isPreview!==!0&&!l(),configureServer(i){i.config.logger.warn(`[lunora] target "${r.target}": vite dev serves the worker in workerd, not on ${r.target} — ${s().reason??"it cannot run this project"}. \`vite build\` then \`lunora deploy\` ships it to ${r.target}.`)},name:"lunora:target-runtime-notice"})}return o},Tr=p(import.meta.url)("../package.json").version;export{Fr as CLASS_A_WIRING,br as GENERATED_CLASS_MODULES,oe as LUNORA_API_UPDATED_EVENT,Ir as LUNORA_WORKER_VIRTUAL_ID,ne as STUDIO_PATH,Tr as VERSION,Yr as WORKER_STARTUP_HINT,Zr as augmentWorkerStartupError,Qr as buildStudioUrl,Br as buildWorkerEntrySource,Hr as checkLunoraProxy,b as codegenPlugin,C as containerLogsPlugin,Cr as detectFramework,L as devStatePlugin,U as devVariablesPlugin,N as frameworkComposePlugin,Vr as isAutoComposable,re as isWorkerEntryEvalError,F as logStreamPlugin,Or as lunora,Jr as lunoraSolutionFinder,H as lunoraSolutionFinders,Kr as planViteRemoteBindings,I as proxyCheckPlugin,Ur as reconcileWranglerCrons,B as remoteBindingsPlugin,ar as resolveOverlayOption,M as studioPlugin,Gr as withRemoteBindings,K as withWorkerStartupHint,G as wranglerValidatorPlugin};
@@ -1,3 +1,3 @@
1
- import{readFileSync as J,existsSync as H}from"node:fs";import{resolve as p,sep as b,basename as z,join as K}from"node:path";import{findProjectConfigFile as X,PROJECT_CONFIG_FILENAMES as q,findTsconfig as Q,runCodegen as Y,fingerprintSchemaSources as A,createCodegenProject as Z,refreshCodegenProject as ee,CodegenDiagnosticError as ne}from"@lunora/codegen";import{LUNORA_TAG as w,isCodegenDisabled as te,CODEGEN_ENV as x,runPostCodegenHook as W,reportCodegenFindings as re,blockingFindingsMessage as oe}from"@lunora/config";import{findWranglerFile as ie,readWranglerJsonc as ce,WRANGLER_FILES as ae,reconcileBindingsSafely as se,collectWranglerSecretVariables as le,reconcileWranglerExtras as de}from"@lunora/config/cloudflare";import{isRunnableDevEnvironment as fe}from"vite";import{createHash as ge}from"node:crypto";import ue from"./LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{r as he,a as me}from"./server-close-Qoh4i6Ay.mjs";const pe=(e,n)=>{try{const{parsed:o,text:t}=ce(e);return o===void 0?`raw:${t}`:JSON.stringify(n?n(o):o)}catch{return"unreadable"}},we=e=>{const n={...e},{triggers:o}=n;if(o!==null&&typeof o=="object"){const t={...o};delete t.crons,Object.keys(t).length>0?n.triggers=t:delete n.triggers}return n},O=e=>{const n=ie(e),o=n===void 0?"absent":pe(n,we),t=X(e);let l="absent";try{t!==void 0&&(l=ge("sha256").update(J(t)).digest("hex"))}catch{}return`${o}\0${l}`},ye=100,I=300,G=2,ve=e=>{let n,o,t=0;const l=()=>{n&&(clearTimeout(n),n=void 0)},a=(u,f)=>{o&&clearTimeout(o),o=setTimeout(()=>{if(o=void 0,e.fingerprint()!==u){if(t+=1,t>G){e.logger.warn(`${w} \`postcodegen\` keeps rewriting the schema sources — stopping after ${String(G)} reruns. Make the hook idempotent or move it off the schema directory.`);return}e.logger.info(`${w} schema changed while \`postcodegen\` was running — regenerating`),f()}},I)},d=u=>{e.regenerate(u,f=>{a(f,()=>{d(u)})})};return{cancelPending:l,dispose:()=>{l(),o&&(clearTimeout(o),o=void 0)},onSave:u=>{l(),t=0,n=setTimeout(()=>{n=void 0,d(u)},ye)}}},L=/[/\\]tsconfig\..+\.json$/u,Se=e=>{const n=e.map(t=>` • ${t.kind} "${t.exportName}" — class ${t.className} is not exported by your worker entry.`),o=[...new Set(e.map(t=>t.module))].map(t=>` export * from "./lunora/_generated/${t}";`);return[`[lunora] ${String(e.length)} declared ${e.length===1?"binding is":"bindings are"} not exported by your worker entry — \`wrangler deploy\` will fail.`,...n,"","Add to your worker entry:",...o].join(`
1
+ import{readFileSync as J,existsSync as H}from"node:fs";import{resolve as p,sep as b,basename as z,join as K}from"node:path";import{findProjectConfigFile as X,PROJECT_CONFIG_FILENAMES as q,findTsconfig as Q,runCodegen as Y,fingerprintSchemaSources as A,createCodegenProject as Z,refreshCodegenProject as ee,CodegenDiagnosticError as ne}from"@lunora/codegen";import{LUNORA_TAG as w,isCodegenDisabled as te,CODEGEN_ENV as x,runPostCodegenHook as W,reportCodegenFindings as re,blockingFindingsMessage as oe}from"@lunora/config";import{findWranglerFile as ie,readWranglerJsonc as ce,WRANGLER_FILES as ae,reconcileBindingsSafely as se,collectWranglerSecretVariables as le,reconcileWranglerExtras as de}from"@lunora/config/cloudflare";import{isRunnableDevEnvironment as fe}from"vite";import{createHash as ge}from"node:crypto";import ue from"./LUNORA_API_UPDATED_EVENT-CO2Rv2re.mjs";import{a as he,r as me}from"./server-close-DWiO4Vxb.mjs";const pe=(e,n)=>{try{const{parsed:o,text:t}=ce(e);return o===void 0?`raw:${t}`:JSON.stringify(n?n(o):o)}catch{return"unreadable"}},we=e=>{const n={...e},{triggers:o}=n;if(o!==null&&typeof o=="object"){const t={...o};delete t.crons,Object.keys(t).length>0?n.triggers=t:delete n.triggers}return n},O=e=>{const n=ie(e),o=n===void 0?"absent":pe(n,we),t=X(e);let l="absent";try{t!==void 0&&(l=ge("sha256").update(J(t)).digest("hex"))}catch{}return`${o}\0${l}`},ye=100,I=300,G=2,ve=e=>{let n,o,t=0;const l=()=>{n&&(clearTimeout(n),n=void 0)},a=(u,f)=>{o&&clearTimeout(o),o=setTimeout(()=>{if(o=void 0,e.fingerprint()!==u){if(t+=1,t>G){e.logger.warn(`${w} \`postcodegen\` keeps rewriting the schema sources — stopping after ${String(G)} reruns. Make the hook idempotent or move it off the schema directory.`);return}e.logger.info(`${w} schema changed while \`postcodegen\` was running — regenerating`),f()}},I)},d=u=>{e.regenerate(u,f=>{a(f,()=>{d(u)})})};return{cancelPending:l,dispose:()=>{l(),o&&(clearTimeout(o),o=void 0)},onSave:u=>{l(),t=0,n=setTimeout(()=>{n=void 0,d(u)},ye)}}},L=/[/\\]tsconfig\..+\.json$/u,Se=e=>{const n=e.map(t=>` • ${t.kind} "${t.exportName}" — class ${t.className} is not exported by your worker entry.`),o=[...new Set(e.map(t=>t.module))].map(t=>` export * from "./lunora/_generated/${t}";`);return[`[lunora] ${String(e.length)} declared ${e.length===1?"binding is":"bindings are"} not exported by your worker entry — \`wrangler deploy\` will fail.`,...n,"","Add to your worker entry:",...o].join(`
2
2
  `)},Ee=(e,n,o)=>{if(n.warn(`${w} schema.ts not found at ${e} — codegen skipped`),o!==void 0){const t=`schema.ts not found at ${e} — generated output is now stale`;o.onError(new Error(t),t)}},M=(e,n,o,t)=>{const l=K(e.projectRoot,e.schemaDir,"schema.ts");if(!H(l))return Ee(l,n,o),{};try{const a=Y({apiSpec:e.apiSpec,lunoraDirectory:e.schemaDir,project:t,projectRoot:e.projectRoot,target:e.target,wranglerVariables:le(e.projectRoot)});return de(e.projectRoot,a.cronTriggers,n),re(a,n),{blockingMessage:oe(a),outputDirectory:p(a.outputDirectory)}}catch(a){const d=a instanceof Error?a.message:String(a);return n.error(`${w} codegen failed: ${d}`),o?.onError(a,d),{failure:`${w} codegen failed: ${d}`}}},$e=(e,n,o)=>{let t;for(const[l,a]of Object.entries(e.environments)){if(l==="client"){t=a;continue}fe(a)||a.hot.send({path:"*",triggeredBy:n,type:"full-reload"})}if(t===void 0){e.hot.send({type:"full-reload"});return}if(o){t.hot.send({type:"full-reload"});return}t.hot.send({event:ue,type:"custom"})},R={error:e=>{console.error(e)},info:e=>{console.info(e)},warn:e=>{console.warn(e)}},Oe=e=>{const n=p(e.projectRoot,e.schemaDir),o=te(process.env[x]);let t=p(e.projectRoot,e.generatedDir),l=0,a=!1,d;const u=new Map;let f,C=!1,j=!1,y,D;return{config(i,h){y=h.command},configResolved(){y!=="build"&&o||(D=M(e,R))},async buildStart(){const i=y!=="build"&&o,{blockingMessage:h,failure:v,outputDirectory:k}=D??(i?{}:M(e,R));if(D=void 0,y==="build"&&v!==void 0&&this.error(v),k!==void 0){t=k,a=!0;let g;try{g=await W({cwd:e.projectRoot,logger:R})}finally{a=!1}g.ran&&(l=Date.now()),y==="build"&&g.error!==void 0&&this.error(g.error)}y==="build"&&h!==void 0&&this.error(h),await se(e,R,g=>{d?.hot.send({err:{loc:void 0,message:Se(g),stack:""},type:"error"})}),d!==void 0&&(f=O(e.projectRoot),C=!0)},configureServer(i){d=i,i.watcher.add(n),f=O(e.projectRoot),C=!1;const h={error:r=>{i.config.logger.error(r)},info:r=>{i.config.logger.info(r)},warn:r=>{i.config.logger.warn(r)}};let v=!1;const k={onError(r,c){v=!0;const s=r instanceof ne?{column:r.column,file:r.file,line:r.line}:void 0,$=s===void 0?`[lunora] codegen failed: ${c}
3
3
  (see terminal for full stack trace and file location)`:`[lunora] codegen failed: ${c}`;d?.hot.send({err:{loc:s,message:$,stack:r instanceof Error?r.stack??"":""},type:"error"})}},g=(r,c)=>r===c||r.startsWith(c+b);let T=!1,m;const U=()=>{for(const r of Object.values(i.environments)){const c=r.moduleGraph;for(const s of c.idToModuleMap.values())s.id&&g(s.id,t)&&c.invalidateModule(s)}},V=async(r,c)=>{try{if(T)return;m===void 0?m=Z(n):ee(m,n);const{outputDirectory:s}=M(e,h,k,m);if(s===void 0){m=void 0;return}t=s;const $=A(n);a=!0;let P;try{P=await W({cwd:e.projectRoot,logger:h})}finally{a=!1}if(P.ran&&(l=Date.now(),c($)),P.error!==void 0)return;U(),$e(i,r,v),v=!1}catch(s){h.error(`${w} codegen watch: ${s instanceof Error?s.message:String(s)}`)}},_=ve({fingerprint:()=>A(n),logger:h,regenerate:(r,c)=>{V(r,c)}}),S=r=>{const c=p(r);if(L.test(c)){m=void 0;return}if(c.endsWith(`${b}tsconfig.json`)&&c===Q(n)){m=void 0;return}if(g(c,n)&&!g(c,t)&&c.endsWith(".ts")&&!(c.includes(`${b}__tests__${b}`)||c.endsWith(".test.ts")||c.endsWith(".spec.ts"))){if(a||Date.now()-l<I){_.cancelPending();return}_.onSave(c)}},N=r=>{const c=p(r);(c.endsWith(`${b}tsconfig.json`)||L.test(c))&&(m=void 0)};o?i.config.logger.info(`${w} codegen watch disabled (${x}) — _generated/ is written only by an explicit \`lunora codegen\``):(i.watcher.on("add",S),i.watcher.on("change",S),i.watcher.on("unlink",S),i.watcher.on("unlink",N));const F=new Set([...ae.map(r=>p(e.projectRoot,r)),...q.map(r=>p(e.projectRoot,r))]);for(const r of F)i.watcher.add(r);const E=r=>{if(!F.has(p(r))||j)return;const c=O(e.projectRoot);if(!C){f=c;return}if(f===void 0){f=c;return}c!==f&&(f=c,j=!0,i.config.logger.info(`${w} ${z(p(r))} changed — restarting dev server`),Promise.resolve(i.restart()).finally(()=>{j=!1}).catch(s=>{const $=s instanceof Error?s.message:String(s);i.config.logger.error(`${w} dev server restart failed: ${$} — keeping the running server; re-save your config to retry.`),i.hot.send({err:{loc:void 0,message:`[lunora] dev server restart failed: ${$}`,stack:""},type:"error"})}))};i.watcher.on("add",E),i.watcher.on("change",E),i.watcher.on("unlink",E);const B=()=>{T||(T=!0,m=void 0,_.dispose(),i.watcher.off("add",S),i.watcher.off("change",S),i.watcher.off("unlink",S),i.watcher.off("unlink",N),i.watcher.off("add",E),i.watcher.off("change",E),i.watcher.off("unlink",E))};return()=>{me(i,u,B)}},buildEnd(){he(u,this.environment)},name:"lunora:codegen"}};export{Oe as default};
@@ -1 +1 @@
1
- import{DEV_HANDOFF_ENV as a,claimDevServerState as c,DEV_LOG_FILE_ENV as p,DEV_DAEMON_ENV as u,lunoraLine as v,clearDevServerState as f}from"@lunora/config";import{r as g,a as S}from"./server-close-Qoh4i6Ay.mjs";const m=/\/$/,D=n=>{const r=n.resolvedUrls?.local[0];if(r!==void 0)return r.replace(m,"");const t=n.httpServer?.address();if(t!==null&&typeof t=="object")return`http://localhost:${String(t.port)}`},_=n=>{let r=!1;const t=new Map;return{apply:"serve",configureServer(e){const l=n.projectRoot,d=()=>{if(r)return;const o=D(e);if(o===void 0)return;const s=Number(process.env[a]),i=c(l,{background:process.env[u]==="1",logFile:process.env[p],mode:"vite",pid:process.pid,readyAt:new Date().toISOString(),startedAt:new Date().toISOString(),url:o},Number.isInteger(s)&&s>0?{supersedePid:s}:void 0);if(!i.ok){i.existing!==void 0&&e.config.logger.warn(v(`another dev server is already recorded at ${i.existing.url} (pid ${String(i.existing.pid)}) — leaving .lunora/dev.json untouched`));return}r=!0};return S(e,t,()=>{r&&(f(l,process.pid),r=!1)}),()=>{if(typeof e.printUrls=="function"){const o=e.printUrls.bind(e);e.printUrls=()=>{o(),d()}}e.httpServer?.once("listening",()=>{setTimeout(d,0)})}},buildEnd(){g(t,this.environment)},name:"lunora:dev-state"}};export{_ as default};
1
+ import{DEV_HANDOFF_ENV as a,claimDevServerState as c,DEV_LOG_FILE_ENV as p,DEV_DAEMON_ENV as u,lunoraLine as v,clearDevServerState as f}from"@lunora/config";import{a as g,r as S}from"./server-close-DWiO4Vxb.mjs";const m=/\/$/,D=n=>{const r=n.resolvedUrls?.local[0];if(r!==void 0)return r.replace(m,"");const t=n.httpServer?.address();if(t!==null&&typeof t=="object")return`http://localhost:${String(t.port)}`},_=n=>{let r=!1;const t=new Map;return{apply:"serve",configureServer(e){const l=n.projectRoot,d=()=>{if(r)return;const o=D(e);if(o===void 0)return;const s=Number(process.env[a]),i=c(l,{background:process.env[u]==="1",logFile:process.env[p],mode:"vite",pid:process.pid,readyAt:new Date().toISOString(),startedAt:new Date().toISOString(),url:o},Number.isInteger(s)&&s>0?{supersedePid:s}:void 0);if(!i.ok){i.existing!==void 0&&e.config.logger.warn(v(`another dev server is already recorded at ${i.existing.url} (pid ${String(i.existing.pid)}) — leaving .lunora/dev.json untouched`));return}r=!0};return S(e,t,()=>{r&&(f(l,process.pid),r=!1)}),()=>{if(typeof e.printUrls=="function"){const o=e.printUrls.bind(e);e.printUrls=()=>{o(),d()}}e.httpServer?.once("listening",()=>{setTimeout(d,0)})}},buildEnd(){g(t,this.environment)},name:"lunora:dev-state"}};export{_ as default};
@@ -1,3 +1,3 @@
1
- import{detectAiAgent as u,LUNORA_EVENT_SOURCE as a,formatLunoraEvent as f}from"@lunora/config";import{a as l,r as d}from"./server-close-Qoh4i6Ay.mjs";const p=`"source":"${a}"`,i={error:"\x1B[31m",info:"\x1B[36m",reset:"\x1B[0m",warn:"\x1B[33m"},w=(r,t,e)=>e?`${i[t]}[lunora]${i.reset} ${r}`:`[lunora] ${r}`,v=r=>typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):void 0,m=(r,t)=>r.split(`
1
+ import{detectAiAgent as u,LUNORA_EVENT_SOURCE as a,formatLunoraEvent as f}from"@lunora/config";import{r as l,a as d}from"./server-close-DWiO4Vxb.mjs";const p=`"source":"${a}"`,i={error:"\x1B[31m",info:"\x1B[36m",reset:"\x1B[0m",warn:"\x1B[33m"},w=(r,t,e)=>e?`${i[t]}[lunora]${i.reset} ${r}`:`[lunora] ${r}`,v=r=>typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):void 0,m=(r,t)=>r.split(`
2
2
  `).map(e=>{const n=f(e);return n?w(n.text,n.level,t):e}).join(`
3
3
  `),S=(r,t)=>(...e)=>{try{const n=v(e[0]);if(n?.includes(p))return r(m(n,t),...e.slice(1))}catch{}return r(...e)},c=r=>{const t=r.write.bind(r),e=S(t,r.isTTY===!0);return r.write=e,()=>{r.write===e&&(r.write=t)}},g=()=>{const r=process.env.LUNORA_LOG_JSON;return r==="1"||r==="true"?!0:r==="0"||r==="false"?!1:u()!==void 0};let o;const A=()=>{const r=new Map;return{apply:"serve",buildEnd(){d(r,this.environment)},configureServer(t){if(g())return;o?.();const e=c(process.stdout),n=c(process.stderr),s=()=>{e(),n(),o===s&&(o=void 0)};o=s,l(t,r,s)},name:"lunora:log-stream"}};export{A as default};
@@ -1 +1 @@
1
- const o=(e,s,t)=>{e.httpServer?e.httpServer.once("close",t):s.set(e.environments.client,t)},r=(e,s)=>{const t=e.get(s);t!==void 0&&(e.delete(s),t())};export{o as a,r};
1
+ const o=(e,s,t)=>{e.httpServer?e.httpServer.once("close",t):s.set(e.environments.client,t)},r=(e,s)=>{const t=e.get(s);t!==void 0&&(e.delete(s),t())};export{r as a,o as r};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/vite",
3
- "version": "1.0.0-alpha.286",
3
+ "version": "1.0.0-alpha.288",
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.62.1",
49
- "@lunora/codegen": "1.0.0-alpha.243",
50
- "@lunora/config": "1.0.0-alpha.288",
49
+ "@lunora/codegen": "1.0.0-alpha.245",
50
+ "@lunora/config": "1.0.0-alpha.290",
51
51
  "@lunora/errors": "1.0.0-alpha.48",
52
52
  "@visulima/vite-overlay": "2.0.20"
53
53
  },