@akashjs/runtime 0.1.1 → 0.1.3

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.
Files changed (80) hide show
  1. package/README.md +21 -0
  2. package/dist/animate.cjs +2 -0
  3. package/dist/animate.cjs.map +1 -0
  4. package/dist/animate.js +2 -0
  5. package/dist/animate.js.map +1 -0
  6. package/dist/chunk-24I477TY.js +32 -0
  7. package/dist/chunk-24I477TY.js.map +1 -0
  8. package/dist/chunk-2PUQBTK5.cjs +5 -0
  9. package/dist/chunk-2PUQBTK5.cjs.map +1 -0
  10. package/dist/chunk-2X7GUBTG.cjs +2 -0
  11. package/dist/chunk-2X7GUBTG.cjs.map +1 -0
  12. package/dist/chunk-3HWR5MIF.js +2 -0
  13. package/dist/chunk-3HWR5MIF.js.map +1 -0
  14. package/dist/chunk-4K6DIB7A.js +2 -0
  15. package/dist/chunk-4K6DIB7A.js.map +1 -0
  16. package/dist/chunk-BJKK7MKL.js +5 -0
  17. package/dist/chunk-BJKK7MKL.js.map +1 -0
  18. package/dist/chunk-FWWD2YSS.cjs +2 -0
  19. package/dist/chunk-FWWD2YSS.cjs.map +1 -0
  20. package/dist/chunk-GWEBEL7E.js +2 -0
  21. package/dist/chunk-GWEBEL7E.js.map +1 -0
  22. package/dist/chunk-J4TFVNKP.cjs +32 -0
  23. package/dist/chunk-J4TFVNKP.cjs.map +1 -0
  24. package/dist/chunk-KI5MVV64.cjs +2 -0
  25. package/dist/chunk-KI5MVV64.cjs.map +1 -0
  26. package/dist/chunk-N4IP63GR.js +2 -0
  27. package/dist/chunk-N4IP63GR.js.map +1 -0
  28. package/dist/chunk-PEDMDFZM.js +2 -0
  29. package/dist/chunk-PEDMDFZM.js.map +1 -0
  30. package/dist/chunk-Q3E2UVUK.js +2 -0
  31. package/dist/chunk-Q3E2UVUK.js.map +1 -0
  32. package/dist/chunk-RRB7VGW7.js +2 -0
  33. package/dist/chunk-RRB7VGW7.js.map +1 -0
  34. package/dist/chunk-UVM6CYWX.cjs +2 -0
  35. package/dist/chunk-UVM6CYWX.cjs.map +1 -0
  36. package/dist/chunk-Y5HEEST4.cjs +2 -0
  37. package/dist/chunk-Y5HEEST4.cjs.map +1 -0
  38. package/dist/chunk-YFCIWM3C.cjs +2 -0
  39. package/dist/chunk-YFCIWM3C.cjs.map +1 -0
  40. package/dist/chunk-ZE7R72IH.cjs +2 -0
  41. package/dist/chunk-ZE7R72IH.cjs.map +1 -0
  42. package/dist/core.cjs +2 -0
  43. package/dist/core.cjs.map +1 -0
  44. package/dist/core.js +2 -0
  45. package/dist/core.js.map +1 -0
  46. package/dist/index.cjs +51 -5458
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.js +51 -4579
  49. package/dist/index.js.map +1 -1
  50. package/dist/machine.cjs +2 -0
  51. package/dist/machine.cjs.map +1 -0
  52. package/dist/machine.js +2 -0
  53. package/dist/machine.js.map +1 -0
  54. package/dist/offline.cjs +2 -0
  55. package/dist/offline.cjs.map +1 -0
  56. package/dist/offline.js +2 -0
  57. package/dist/offline.js.map +1 -0
  58. package/dist/pwa.cjs +2 -0
  59. package/dist/pwa.cjs.map +1 -0
  60. package/dist/pwa.js +2 -0
  61. package/dist/pwa.js.map +1 -0
  62. package/dist/ssr.cjs +2 -0
  63. package/dist/ssr.cjs.map +1 -0
  64. package/dist/ssr.js +2 -0
  65. package/dist/ssr.js.map +1 -0
  66. package/dist/store.cjs +2 -0
  67. package/dist/store.cjs.map +1 -0
  68. package/dist/store.js +2 -0
  69. package/dist/store.js.map +1 -0
  70. package/dist/sync.cjs +2 -0
  71. package/dist/sync.cjs.map +1 -0
  72. package/dist/sync.js +2 -0
  73. package/dist/sync.js.map +1 -0
  74. package/dist/test.cjs +4 -369
  75. package/dist/test.cjs.map +1 -1
  76. package/dist/test.js +4 -165
  77. package/dist/test.js.map +1 -1
  78. package/package.json +30 -5
  79. package/dist/chunk-D3IR22HI.js +0 -662
  80. package/dist/chunk-D3IR22HI.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # @akashjs/runtime
2
+
3
+ AkashJS core runtime — signals, components, DOM rendering
4
+
5
+ Part of the [AkashJS](https://github.com/phpirate/akashjs) framework.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @akashjs/runtime
11
+ ```
12
+
13
+ ## Documentation
14
+
15
+ - [Guide](https://akash.js.org/guide/introduction)
16
+ - [API Reference](https://akash.js.org/api/runtime)
17
+ - [GitHub](https://github.com/phpirate/akashjs)
18
+
19
+ ## License
20
+
21
+ MIT
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkY5HEEST4_cjs=require('./chunk-Y5HEEST4.cjs');Object.defineProperty(exports,"animate",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.a}});Object.defineProperty(exports,"animateGroup",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.d}});Object.defineProperty(exports,"animateSequence",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.c}});Object.defineProperty(exports,"animateSpring",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.e}});Object.defineProperty(exports,"animateStagger",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.b}});Object.defineProperty(exports,"defineStates",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.g}});Object.defineProperty(exports,"keyframes",{enumerable:true,get:function(){return chunkY5HEEST4_cjs.f}});//# sourceMappingURL=animate.cjs.map
2
+ //# sourceMappingURL=animate.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"animate.cjs"}
@@ -0,0 +1,2 @@
1
+ export{a as animate,d as animateGroup,c as animateSequence,e as animateSpring,b as animateStagger,g as defineStates,f as keyframes}from'./chunk-Q3E2UVUK.js';//# sourceMappingURL=animate.js.map
2
+ //# sourceMappingURL=animate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"animate.js"}
@@ -0,0 +1,32 @@
1
+ import {c}from'./chunk-4K6DIB7A.js';function f(r,e={}){let t=c(false),a=c(false),s=c(!navigator.onLine),i=null;window.addEventListener("online",()=>s.set(false)),window.addEventListener("offline",()=>s.set(true));let u=new Promise((h,l)=>{if(!("serviceWorker"in navigator)){l(new Error("Service workers not supported"));return}navigator.serviceWorker.register(r,{scope:e.scope}).then(n=>{i=n,t.set(true),e.onReady?.(n),h(n),n.addEventListener("updatefound",()=>{let o=n.installing;o&&o.addEventListener("statechange",()=>{o.state==="installed"&&navigator.serviceWorker.controller&&(a.set(true),e.onUpdate?.(n),e.autoReload&&(o.postMessage({type:"SKIP_WAITING"}),window.location.reload()));});});}).catch(n=>{e.onError?.(n),l(n);});});return {registered:()=>t(),updateAvailable:()=>a(),offline:()=>s(),ready:u,async update(){i&&await i.update();},skipWaiting(){i?.waiting&&(i.waiting.postMessage({type:"SKIP_WAITING"}),window.location.reload());},async unregister(){return i?i.unregister():false}}}function v(r){let e=`// Auto-generated service worker by AkashJS
2
+ const CACHE_VERSION = 'v1';
3
+
4
+ self.addEventListener('install', (event) => {
5
+ self.skipWaiting();
6
+ });
7
+
8
+ self.addEventListener('activate', (event) => {
9
+ event.waitUntil(clients.claim());
10
+ });
11
+
12
+ self.addEventListener('message', (event) => {
13
+ if (event.data?.type === 'SKIP_WAITING') {
14
+ self.skipWaiting();
15
+ }
16
+ });
17
+
18
+ self.addEventListener('fetch', (event) => {
19
+ const url = new URL(event.request.url);
20
+ `;for(let t of r){let a=t.match instanceof RegExp?t.match.toString():`new RegExp(${JSON.stringify(t.match.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))})`,s=t.cacheName??"akash-cache";e+=`
21
+ if (${a}.test(url.pathname)) {
22
+ event.respondWith(${p(t.strategy,s)});
23
+ return;
24
+ }
25
+ `;}return e+=`
26
+ // Default: network-first
27
+ event.respondWith(
28
+ fetch(event.request).catch(() => caches.match(event.request))
29
+ );
30
+ });
31
+ `,e}function p(r,e){switch(r){case "cache-first":return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${e}').then(cache => cache.put(event.request, clone)); return response; }))`;case "network-first":return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${e}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;case "stale-while-revalidate":return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${e}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;case "network-only":return "fetch(event.request)";case "cache-only":return "caches.match(event.request)"}}async function y(r,e){return await Notification.requestPermission()!=="granted"?null:await r.pushManager.subscribe({userVisibleOnly:true,applicationServerKey:d(e)})}function d(r){let e="=".repeat((4-r.length%4)%4),t=(r+e).replace(/-/g,"+").replace(/_/g,"/"),a=atob(t);return Uint8Array.from(a,s=>s.charCodeAt(0))}export{f as a,v as b,y as c};//# sourceMappingURL=chunk-24I477TY.js.map
32
+ //# sourceMappingURL=chunk-24I477TY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pwa.ts"],"names":["registerServiceWorker","swUrl","options","registered","signal","updateAvailable","offline","registration","ready","resolve","reject","reg","newWorker","err","generateSWScript","routes","script","route","pattern","cacheName","generateStrategyCode","strategy","subscribePush","vapidPublicKey","urlBase64ToUint8Array","base64String","padding","base64","rawData","char"],"mappings":"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","file":"chunk-24I477TY.js","sourcesContent":["/**\n * PWA / Service Worker support.\n *\n * Register service workers, configure caching strategies,\n * handle updates, and manage push notifications.\n *\n * ```ts\n * const sw = registerServiceWorker('/sw.js', {\n * onUpdate: () => toast.info('New version available!'),\n * });\n * sw.ready; // Promise<ServiceWorkerRegistration>\n * sw.update(); // check for updates\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface SWOptions {\n /** Callback when a new version is available */\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n /** Callback when the SW is ready */\n onReady?: (registration: ServiceWorkerRegistration) => void;\n /** Callback on registration error */\n onError?: (error: Error) => void;\n /** Auto-reload on update (default: false) */\n autoReload?: boolean;\n /** Scope of the service worker */\n scope?: string;\n}\n\nexport interface SWRegistration {\n /** Whether the SW is registered */\n registered: ReadonlySignal<boolean>;\n /** Whether an update is available */\n updateAvailable: ReadonlySignal<boolean>;\n /** Whether the app is running offline */\n offline: ReadonlySignal<boolean>;\n /** The raw SW registration (available after ready) */\n ready: Promise<ServiceWorkerRegistration>;\n /** Check for updates */\n update(): Promise<void>;\n /** Skip waiting and activate new SW */\n skipWaiting(): void;\n /** Unregister the service worker */\n unregister(): Promise<boolean>;\n}\n\n// =========================================================================\n// Service Worker registration\n// =========================================================================\n\n/**\n * Register a service worker with update detection.\n */\nexport function registerServiceWorker(\n swUrl: string,\n options: SWOptions = {},\n): SWRegistration {\n const registered = signal(false);\n const updateAvailable = signal(false);\n const offline = signal(!navigator.onLine);\n\n let registration: ServiceWorkerRegistration | null = null;\n\n // Track online/offline\n window.addEventListener('online', () => offline.set(false));\n window.addEventListener('offline', () => offline.set(true));\n\n const ready = new Promise<ServiceWorkerRegistration>((resolve, reject) => {\n if (!('serviceWorker' in navigator)) {\n reject(new Error('Service workers not supported'));\n return;\n }\n\n navigator.serviceWorker\n .register(swUrl, { scope: options.scope })\n .then((reg) => {\n registration = reg;\n registered.set(true);\n options.onReady?.(reg);\n resolve(reg);\n\n // Listen for updates\n reg.addEventListener('updatefound', () => {\n const newWorker = reg.installing;\n if (!newWorker) return;\n\n newWorker.addEventListener('statechange', () => {\n if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {\n updateAvailable.set(true);\n options.onUpdate?.(reg);\n\n if (options.autoReload) {\n newWorker.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n }\n });\n });\n })\n .catch((err) => {\n options.onError?.(err);\n reject(err);\n });\n });\n\n return {\n registered: () => registered(),\n updateAvailable: () => updateAvailable(),\n offline: () => offline(),\n ready,\n async update() {\n if (registration) {\n await registration.update();\n }\n },\n skipWaiting() {\n if (registration?.waiting) {\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n },\n async unregister() {\n if (registration) {\n return registration.unregister();\n }\n return false;\n },\n };\n}\n\n// =========================================================================\n// Caching strategies (for SW scripts)\n// =========================================================================\n\nexport type CacheStrategy = 'cache-first' | 'network-first' | 'stale-while-revalidate' | 'network-only' | 'cache-only';\n\nexport interface CacheRoute {\n /** URL pattern to match (string or regex) */\n match: string | RegExp;\n /** Caching strategy */\n strategy: CacheStrategy;\n /** Cache name */\n cacheName?: string;\n /** Max entries in cache */\n maxEntries?: number;\n /** Max age in seconds */\n maxAgeSeconds?: number;\n}\n\n/**\n * Generate a service worker script from cache route configs.\n *\n * ```ts\n * const swScript = generateSWScript([\n * { match: /\\.(?:js|css)$/, strategy: 'cache-first', cacheName: 'assets' },\n * { match: '/api/', strategy: 'network-first', maxAgeSeconds: 300 },\n * { match: /\\.(?:png|jpg|svg)$/, strategy: 'cache-first', cacheName: 'images' },\n * ]);\n * ```\n */\nexport function generateSWScript(routes: CacheRoute[]): string {\n let script = `// Auto-generated service worker by AkashJS\nconst CACHE_VERSION = 'v1';\n\nself.addEventListener('install', (event) => {\n self.skipWaiting();\n});\n\nself.addEventListener('activate', (event) => {\n event.waitUntil(clients.claim());\n});\n\nself.addEventListener('message', (event) => {\n if (event.data?.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\nself.addEventListener('fetch', (event) => {\n const url = new URL(event.request.url);\n`;\n\n for (const route of routes) {\n const pattern = route.match instanceof RegExp\n ? route.match.toString()\n : `new RegExp(${JSON.stringify(route.match.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))})`;\n\n const cacheName = route.cacheName ?? 'akash-cache';\n\n script += `\n if (${pattern}.test(url.pathname)) {\n event.respondWith(${generateStrategyCode(route.strategy, cacheName)});\n return;\n }\n`;\n }\n\n script += `\n // Default: network-first\n event.respondWith(\n fetch(event.request).catch(() => caches.match(event.request))\n );\n});\n`;\n\n return script;\n}\n\nfunction generateStrategyCode(strategy: CacheStrategy, cacheName: string): string {\n switch (strategy) {\n case 'cache-first':\n return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }))`;\n case 'network-first':\n return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;\n case 'stale-while-revalidate':\n return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${cacheName}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;\n case 'network-only':\n return `fetch(event.request)`;\n case 'cache-only':\n return `caches.match(event.request)`;\n }\n}\n\n// =========================================================================\n// Push notifications\n// =========================================================================\n\n/**\n * Request push notification permission and subscribe.\n */\nexport async function subscribePush(\n registration: ServiceWorkerRegistration,\n vapidPublicKey: string,\n): Promise<PushSubscription | null> {\n const permission = await Notification.requestPermission();\n if (permission !== 'granted') return null;\n\n const subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(vapidPublicKey),\n });\n\n return subscription;\n}\n\nfunction urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const rawData = atob(base64);\n return Uint8Array.from(rawData, (char) => char.charCodeAt(0));\n}\n"]}
@@ -0,0 +1,5 @@
1
+ 'use strict';var chunkZE7R72IH_cjs=require('./chunk-ZE7R72IH.cjs');var N={AK0010:{code:"AK0010",message:"provide() called outside of component setup.",hint:"provide() must be called inside defineComponent()."},AK0012:{code:"AK0012",message:"inject() called outside of component setup.",hint:"inject() must be called inside defineComponent()."},AK0013:{code:"AK0013",message:"No provider found for injected context.",hint:"Make sure an ancestor component calls provide() with this key."},AK0020:{code:"AK0020",message:"onMount() called outside of component setup.",hint:"onMount() must be called inside defineComponent()."},AK0021:{code:"AK0021",message:"onUnmount() called outside of component setup.",hint:"onUnmount() must be called inside defineComponent()."},AK0022:{code:"AK0022",message:"onError() called outside of component setup.",hint:"onError() must be called inside defineComponent()."},AK0030:{code:"AK0030",message:"Circular dependency detected in computed signal.",hint:"A computed signal is reading itself, directly or via other computeds."},AK0031:{code:"AK0031",message:"Signal set() called during computation.",hint:"Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers."},AK0040:{code:"AK0040",message:"Component setup must return a render function.",hint:"The function passed to defineComponent() must return () => AkashNode."},AK0041:{code:"AK0041",message:"Required prop is missing.",hint:"Check that the parent component is passing all required props."},AK0050:{code:"AK0050",message:"useRoute() called outside of router context.",hint:"Make sure your component is rendered inside a router provider."},AK0051:{code:"AK0051",message:"No route matched the current URL.",hint:"Add a catch-all route ([...rest]) to handle unmatched paths."},AK0052:{code:"AK0052",message:"Route guard threw an error.",hint:"Check the guard function for unhandled exceptions."},AK0060:{code:"AK0060",message:"Form submitted while invalid.",hint:"The submit handler was not called because validation failed. Check form.errors()."},AK0061:{code:"AK0061",message:"Async validator timed out.",hint:"The async validator did not resolve within the expected time. Check your async validation logic."},AK0070:{code:"AK0070",message:"HTTP request failed.",hint:"Check the server response status and network connectivity."},AK0071:{code:"AK0071",message:"createResource() fetcher threw an error.",hint:"Check the fetcher function passed to createResource()."}},E="https://akashjs.dev/errors";function S(e,n){let o=N[e];if(!o)return `[AkashJS ${e}] Unknown error code.`;let t=`[AkashJS ${e}] ${o.message}`;return n&&(t+=`
2
+ ${n}`),t+=`
3
+ ${o.hint}`,t+=`
4
+ See: ${E}/${e}`,t}function m(e,n){return new Error(S(e,n))}function R(e){return N[e]}function j(){return Object.keys(N)}var L=Symbol("akash.context"),h=null;function y(e=h){let n={values:new Map,parent:e};return h=n,n}function C(e){h=e.parent;}function v(){return h}function H(e){return {[L]:true,_type:void 0,defaultValue:e,id:Symbol("context")}}function I(e,n){if(!h)throw m("AK0010");h.values.set(e.id,n);}function B(e,n){if(!h)throw m("AK0012");let o=h;for(;o;){if(o.values.has(e.id))return o.values.get(e.id);o=o.parent;}if(n!==void 0)return n;if(e.defaultValue!==void 0)return e.defaultValue;throw m("AK0013")}function $(e,n){let o=document.createElement(e);if(n)for(let[t,p]of Object.entries(n))w(o,t,p);return o}function U(e){return document.createTextNode(e)}function q(e){let n=document.createElement("template");return n.innerHTML=e,n.content.cloneNode(true)}function w(e,n,o){if(n==="class"||n==="className")e.className=o;else if(n==="style"&&typeof o=="object"&&o!==null)Object.assign(e.style,o);else if(n==="innerHTML")e.innerHTML=o;else if(n!=="ref")if(n.startsWith("on")){let t=n.slice(2).toLowerCase();e.addEventListener(t,o);}else n in e?e[n]=o:o===false||o==null?e.removeAttribute(n):e.setAttribute(n,o===true?"":String(o));}function V(e,n){return chunkZE7R72IH_cjs.e(()=>{e.textContent=String(n());},{render:true})}function J(e,n,o){return chunkZE7R72IH_cjs.e(()=>{w(e,n,o());},{render:true})}function X(e,n){return chunkZE7R72IH_cjs.e(()=>{e.style.display=n()?"":"none";},{render:true})}function K(e=""){return document.createComment(e)}function M(e,n,o,t,p){let c=null,k=chunkZE7R72IH_cjs.e(()=>{let d=o();if(c){for(let u of c.nodes)e.removeChild(u);c.dispose?.(),c=null;}let r=d?t:p;if(r){let u=r(),s=u instanceof DocumentFragment?Array.from(u.childNodes):[u];for(let i of s)e.insertBefore(i,n);c={nodes:s,dispose:null};}},{render:true});return ()=>{if(k(),c){for(let d of c.nodes)d.parentNode&&d.parentNode.removeChild(d);c.dispose?.();}}}function P(e,n,o,t,p){let c=[],k=chunkZE7R72IH_cjs.e(()=>{let d=o(),r=[],u=new Map;for(let s of c)u.set(s.key,s);for(let s=0;s<d.length;s++){let i=d[s],A=t(i,s),T=u.get(A);if(T)u.delete(A),T.value=i,r.push(T);else {let a=p(i,s),l=a instanceof DocumentFragment?Array.from(a.childNodes):[a];r.push({key:A,value:i,nodes:l,dispose:null});}}for(let s of u.values()){for(let i of s.nodes)i.parentNode&&i.parentNode.removeChild(i);s.dispose?.();}for(let s of r)for(let i of s.nodes)e.insertBefore(i,n);c=r;},{render:true});return ()=>{k();for(let d of c){for(let r of d.nodes)r.parentNode&&r.parentNode.removeChild(r);d.dispose?.();}c=[];}}function W(e){let n=K("show"),o=document.createDocumentFragment();return o.appendChild(n),M(o,n,()=>!!e.when,()=>g(e.children(e.when)),e.fallback?()=>g(e.fallback()):void 0),o}function z(e){let n=K("for"),o=document.createDocumentFragment();return o.appendChild(n),P(o,n,()=>e.each,e.key,(t,p)=>g(e.children(t,p))),o}function g(e){if(e==null||typeof e=="boolean")return document.createTextNode("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(e instanceof Node)return e;if(Array.isArray(e)){let n=document.createDocumentFragment();for(let o of e)n.appendChild(g(o));return n}return document.createTextNode(String(e))}function G(e,n,o){let t=g(n);o?e.insertBefore(t,o):e.appendChild(t);}var f=null;function ne(e){if(!f)throw m("AK0020");f.mount.push(e);}function oe(e){if(!f)throw m("AK0021");f.unmount.push(e);}function te(e){if(!f)throw m("AK0022");f.error.push(e);}function re(){return {current:void 0}}function se(e){let n=o=>{let{children:t,...p}=o??{},d={props:p,children:typeof t=="function"?t:()=>t??null},r={mount:[],unmount:[],error:[]},u=f;f=r;let s=v(),i=y(s),A,T;try{A=e(d);let a=A();T=g(a);}catch(a){if(C(i),f=u,r.error.length>0){for(let l of r.error)l(a instanceof Error?a:new Error(String(a)));return document.createComment("error")}throw a}return C(i),f=u,r.mount.length>0&&queueMicrotask(()=>{for(let a of r.mount)try{let l=a();typeof l=="function"&&r.unmount.push(l);}catch(l){for(let b of r.error)b(l instanceof Error?l:new Error(String(l)));}}),T};return n._akash=true,n}exports.a=S;exports.b=m;exports.c=R;exports.d=j;exports.e=H;exports.f=I;exports.g=B;exports.h=$;exports.i=U;exports.j=q;exports.k=w;exports.l=V;exports.m=J;exports.n=X;exports.o=M;exports.p=P;exports.q=W;exports.r=z;exports.s=g;exports.t=G;exports.u=ne;exports.v=oe;exports.w=te;exports.x=re;exports.y=se;//# sourceMappingURL=chunk-2PUQBTK5.cjs.map
5
+ //# sourceMappingURL=chunk-2PUQBTK5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/context.ts","../src/dom.ts","../src/component.ts"],"names":["errors","DOC_BASE","formatError","code","context","def","msg","akashError","getErrorDef","getAllErrorCodes","CONTEXT_BRAND","currentScope","pushScope","parent","scope","popScope","getCurrentScope","createContext","defaultValue","provide","key","value","inject","fallback","createElement","tag","attrs","el","setProperty","createText","cloneTemplate","html","template","event","bindText","node","fn","effect","bindProperty","bindVisible","createAnchor","label","renderConditional","anchor","condition","trueBranch","falseBranch","current","dispose","branch","fragment","nodes","renderList","items","keyFn","renderItem","currentItems","newData","newItems","oldMap","item","i","data","existing","Show","props","container","nodeToDOM","For","index","child","insert","domNode","currentHooks","onMount","onUnmount","onError","ref","defineComponent","setup","component","rawProps","childrenProp","restProps","ctx","hooks","prevHooks","parentScope","renderFn","rendered","err","handler","mountFn","cleanup"],"mappings":"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","file":"chunk-2PUQBTK5.cjs","sourcesContent":["/**\n * Error message catalog.\n *\n * Every AkashJS runtime error has a unique code (AK0001, AK0002, etc.),\n * a one-line description, and a link to detailed documentation.\n *\n * Usage:\n * throw akashError('AK0010', 'provide()');\n */\n\n// --- Error registry ---\n\nexport interface ErrorDef {\n /** Error code */\n code: string;\n /** Short description */\n message: string;\n /** Extended explanation and fix suggestion */\n hint: string;\n}\n\nconst errors: Record<string, ErrorDef> = {\n // --- Context errors (AK001x) ---\n AK0010: {\n code: 'AK0010',\n message: 'provide() called outside of component setup.',\n hint: 'provide() must be called inside defineComponent().',\n },\n AK0012: {\n code: 'AK0012',\n message: 'inject() called outside of component setup.',\n hint: 'inject() must be called inside defineComponent().',\n },\n AK0013: {\n code: 'AK0013',\n message: 'No provider found for injected context.',\n hint: 'Make sure an ancestor component calls provide() with this key.',\n },\n\n // --- Lifecycle errors (AK002x) ---\n AK0020: {\n code: 'AK0020',\n message: 'onMount() called outside of component setup.',\n hint: 'onMount() must be called inside defineComponent().',\n },\n AK0021: {\n code: 'AK0021',\n message: 'onUnmount() called outside of component setup.',\n hint: 'onUnmount() must be called inside defineComponent().',\n },\n AK0022: {\n code: 'AK0022',\n message: 'onError() called outside of component setup.',\n hint: 'onError() must be called inside defineComponent().',\n },\n\n // --- Signal errors (AK003x) ---\n AK0030: {\n code: 'AK0030',\n message: 'Circular dependency detected in computed signal.',\n hint: 'A computed signal is reading itself, directly or via other computeds.',\n },\n AK0031: {\n code: 'AK0031',\n message: 'Signal set() called during computation.',\n hint: 'Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers.',\n },\n\n // --- Component errors (AK004x) ---\n AK0040: {\n code: 'AK0040',\n message: 'Component setup must return a render function.',\n hint: 'The function passed to defineComponent() must return () => AkashNode.',\n },\n AK0041: {\n code: 'AK0041',\n message: 'Required prop is missing.',\n hint: 'Check that the parent component is passing all required props.',\n },\n\n // --- Router errors (AK005x) ---\n AK0050: {\n code: 'AK0050',\n message: 'useRoute() called outside of router context.',\n hint: 'Make sure your component is rendered inside a router provider.',\n },\n AK0051: {\n code: 'AK0051',\n message: 'No route matched the current URL.',\n hint: 'Add a catch-all route ([...rest]) to handle unmatched paths.',\n },\n AK0052: {\n code: 'AK0052',\n message: 'Route guard threw an error.',\n hint: 'Check the guard function for unhandled exceptions.',\n },\n\n // --- Form errors (AK006x) ---\n AK0060: {\n code: 'AK0060',\n message: 'Form submitted while invalid.',\n hint: 'The submit handler was not called because validation failed. Check form.errors().',\n },\n AK0061: {\n code: 'AK0061',\n message: 'Async validator timed out.',\n hint: 'The async validator did not resolve within the expected time. Check your async validation logic.',\n },\n\n // --- HTTP errors (AK007x) ---\n AK0070: {\n code: 'AK0070',\n message: 'HTTP request failed.',\n hint: 'Check the server response status and network connectivity.',\n },\n AK0071: {\n code: 'AK0071',\n message: 'createResource() fetcher threw an error.',\n hint: 'Check the fetcher function passed to createResource().',\n },\n};\n\n// --- Public API ---\n\nconst DOC_BASE = 'https://akashjs.dev/errors';\n\n/**\n * Format an AkashJS error with code, message, hint, and doc link.\n */\nexport function formatError(code: string, context?: string): string {\n const def = errors[code];\n if (!def) {\n return `[AkashJS ${code}] Unknown error code.`;\n }\n\n let msg = `[AkashJS ${code}] ${def.message}`;\n if (context) {\n msg += `\\n ${context}`;\n }\n msg += `\\n ${def.hint}`;\n msg += `\\n See: ${DOC_BASE}/${code}`;\n return msg;\n}\n\n/**\n * Create and throw an AkashJS error.\n */\nexport function akashError(code: string, context?: string): Error {\n return new Error(formatError(code, context));\n}\n\n/**\n * Get the error definition for a code.\n */\nexport function getErrorDef(code: string): ErrorDef | undefined {\n return errors[code];\n}\n\n/**\n * Get all registered error codes.\n */\nexport function getAllErrorCodes(): string[] {\n return Object.keys(errors);\n}\n","/**\n * Lightweight dependency injection via provide/inject.\n *\n * Context is scoped to the component tree — no injector hierarchy,\n * no decorators, no classes. Just createContext(), provide(), inject().\n */\n\n// --- Types ---\n\nimport { akashError } from './errors.js';\n\nconst CONTEXT_BRAND = Symbol('akash.context');\n\nexport interface InjectionKey<T> {\n readonly [CONTEXT_BRAND]: true;\n readonly _type: T; // phantom type — never used at runtime\n readonly defaultValue: T | undefined;\n readonly id: symbol;\n}\n\n// --- Context stack (managed by component system) ---\n\ninterface ContextScope {\n values: Map<symbol, unknown>;\n parent: ContextScope | null;\n}\n\nlet currentScope: ContextScope | null = null;\n\n/** @internal — called by defineComponent to push/pop context scopes */\nexport function pushScope(parent: ContextScope | null = currentScope): ContextScope {\n const scope: ContextScope = { values: new Map(), parent };\n currentScope = scope;\n return scope;\n}\n\n/** @internal */\nexport function popScope(scope: ContextScope): void {\n currentScope = scope.parent;\n}\n\n/** @internal */\nexport function getCurrentScope(): ContextScope | null {\n return currentScope;\n}\n\n// --- Public API ---\n\n/**\n * Create a typed context key with an optional default value.\n *\n * ```ts\n * const ThemeContext = createContext<'light' | 'dark'>('light');\n * ```\n */\nexport function createContext<T>(defaultValue?: T): InjectionKey<T> {\n return {\n [CONTEXT_BRAND]: true,\n _type: undefined as T,\n defaultValue,\n id: Symbol('context'),\n };\n}\n\n/**\n * Provide a value for a context key in the current component scope.\n * All descendant components can inject() this value.\n *\n * Must be called inside defineComponent() setup.\n */\nexport function provide<T>(key: InjectionKey<T>, value: T): void {\n if (!currentScope) {\n throw akashError('AK0010');\n }\n currentScope.values.set(key.id, value);\n}\n\n/**\n * Inject a value from the nearest ancestor that provided it.\n *\n * Must be called inside defineComponent() setup.\n */\nexport function inject<T>(key: InjectionKey<T>): T;\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T;\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T {\n if (!currentScope) {\n throw akashError('AK0012');\n }\n\n // Walk up the scope chain\n let scope: ContextScope | null = currentScope;\n while (scope) {\n if (scope.values.has(key.id)) {\n return scope.values.get(key.id) as T;\n }\n scope = scope.parent;\n }\n\n // Check fallback, then default\n if (fallback !== undefined) return fallback;\n if (key.defaultValue !== undefined) return key.defaultValue;\n\n throw akashError('AK0013');\n}\n","/**\n * Direct DOM rendering runtime.\n *\n * No virtual DOM. The compiler generates calls to these helpers.\n * Signal reads inside templates become fine-grained effects that\n * update only the specific DOM node that changed.\n */\n\nimport { effect } from './signals.js';\nimport type { AkashNode } from './types.js';\n\n// --- DOM creation helpers (used by compiler output) ---\n\n/** Create an element and optionally set static attributes */\nexport function createElement(\n tag: string,\n attrs?: Record<string, unknown>,\n): HTMLElement {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n setProperty(el, key, value);\n }\n }\n return el;\n}\n\n/** Create a text node */\nexport function createText(value: string): Text {\n return document.createTextNode(value);\n}\n\n/** Clone a template element for static structure */\nexport function cloneTemplate(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content.cloneNode(true) as DocumentFragment;\n}\n\n// --- Property/attribute setting ---\n\nexport function setProperty(el: HTMLElement, key: string, value: unknown): void {\n if (key === 'class' || key === 'className') {\n el.className = value as string;\n } else if (key === 'style' && typeof value === 'object' && value !== null) {\n Object.assign(el.style, value);\n } else if (key === 'innerHTML') {\n el.innerHTML = value as string;\n } else if (key === 'ref') {\n // Handled separately by component system\n } else if (key.startsWith('on')) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value as EventListener);\n } else if (key in el) {\n (el as Record<string, unknown>)[key] = value;\n } else if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n}\n\n// --- Reactive binding (used by compiler for dynamic expressions) ---\n\n/** Bind a reactive expression to a text node's content */\nexport function bindText(node: Text, fn: () => unknown): () => void {\n return effect(\n () => {\n node.textContent = String(fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's attribute/property */\nexport function bindProperty(\n el: HTMLElement,\n key: string,\n fn: () => unknown,\n): () => void {\n return effect(\n () => {\n setProperty(el, key, fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's visibility (display) */\nexport function bindVisible(el: HTMLElement, fn: () => boolean): () => void {\n return effect(\n () => {\n el.style.display = fn() ? '' : 'none';\n },\n { render: true },\n );\n}\n\n// --- Conditional rendering ---\n\n/** Anchor node type for marking insertion points */\ntype Anchor = Comment;\n\nfunction createAnchor(label = ''): Anchor {\n return document.createComment(label);\n}\n\ninterface ConditionalBlock {\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a conditional block. Swaps DOM fragments based on a reactive\n * condition. Used by the compiler for :if directives and <Show>.\n */\nexport function renderConditional(\n parent: Node,\n anchor: Node,\n condition: () => boolean,\n trueBranch: () => Node,\n falseBranch?: () => Node,\n): () => void {\n let current: ConditionalBlock | null = null;\n\n const dispose = effect(\n () => {\n const value = condition();\n\n // Remove old nodes\n if (current) {\n for (const node of current.nodes) {\n parent.removeChild(node);\n }\n current.dispose?.();\n current = null;\n }\n\n // Insert new nodes\n const branch = value ? trueBranch : falseBranch;\n if (branch) {\n const fragment = branch();\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n for (const node of nodes) {\n parent.insertBefore(node, anchor);\n }\n current = { nodes, dispose: null };\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n if (current) {\n for (const node of current.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n current.dispose?.();\n }\n };\n}\n\n// --- List rendering ---\n\ninterface ListItem<T> {\n key: unknown;\n value: T;\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a reactive list with keyed reconciliation.\n * Used by the compiler for :for directives and <For>.\n */\nexport function renderList<T>(\n parent: Node,\n anchor: Node,\n items: () => T[],\n keyFn: (item: T, index: number) => unknown,\n renderItem: (item: T, index: number) => Node,\n): () => void {\n let currentItems: ListItem<T>[] = [];\n\n const dispose = effect(\n () => {\n const newData = items();\n const newItems: ListItem<T>[] = [];\n const oldMap = new Map<unknown, ListItem<T>>();\n\n for (const item of currentItems) {\n oldMap.set(item.key, item);\n }\n\n // Build new list, reuse existing DOM nodes when keys match\n for (let i = 0; i < newData.length; i++) {\n const data = newData[i];\n const key = keyFn(data, i);\n const existing = oldMap.get(key);\n\n if (existing) {\n oldMap.delete(key);\n existing.value = data;\n newItems.push(existing);\n } else {\n const fragment = renderItem(data, i);\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n newItems.push({ key, value: data, nodes, dispose: null });\n }\n }\n\n // Remove items that are no longer in the list\n for (const item of oldMap.values()) {\n for (const node of item.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n item.dispose?.();\n }\n\n // Reconcile DOM order — simple approach: re-insert all in order\n for (const item of newItems) {\n for (const node of item.nodes) {\n parent.insertBefore(node, anchor);\n }\n }\n\n currentItems = newItems;\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const item of currentItems) {\n for (const node of item.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n item.dispose?.();\n }\n currentItems = [];\n };\n}\n\n// --- Built-in control flow components ---\n\n/** Props for the <Show> component */\nexport interface ShowProps<T> {\n when: T | null | undefined | false;\n fallback?: () => AkashNode;\n children: (value: T) => AkashNode;\n}\n\n/**\n * <Show> component — conditionally renders children with type narrowing.\n * The children callback receives the non-null/undefined value.\n */\nexport function Show<T>(props: ShowProps<T>): Node {\n const anchor = createAnchor('show');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n renderConditional(\n container,\n anchor,\n () => !!props.when,\n () => nodeToDOM(props.children(props.when as T)),\n props.fallback ? () => nodeToDOM(props.fallback!()) : undefined,\n );\n\n return container;\n}\n\n/** Props for the <For> component */\nexport interface ForProps<T> {\n each: T[];\n key: (item: T) => unknown;\n children: (item: T, index: number) => AkashNode;\n}\n\n/**\n * <For> component — renders a list with keyed reconciliation.\n */\nexport function For<T>(props: ForProps<T>): Node {\n const anchor = createAnchor('for');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n renderList(\n container,\n anchor,\n () => props.each,\n props.key,\n (item, index) => nodeToDOM(props.children(item, index)),\n );\n\n return container;\n}\n\n// --- Helpers ---\n\n/** Convert an AkashNode to a DOM Node */\nexport function nodeToDOM(node: AkashNode): Node {\n if (node == null || typeof node === 'boolean') {\n return document.createTextNode('');\n }\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node));\n }\n if (node instanceof Node) {\n return node;\n }\n if (Array.isArray(node)) {\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n fragment.appendChild(nodeToDOM(child));\n }\n return fragment;\n }\n return document.createTextNode(String(node));\n}\n\n/** Insert a node into a parent before an anchor */\nexport function insert(parent: Node, node: AkashNode, anchor?: Node): void {\n const domNode = nodeToDOM(node);\n if (anchor) {\n parent.insertBefore(domNode, anchor);\n } else {\n parent.appendChild(domNode);\n }\n}\n","/**\n * Component system.\n *\n * Components are functions. defineComponent() wraps a setup function\n * that runs once, establishes signals and effects, and returns a\n * render function that produces DOM nodes.\n */\n\nimport { effect } from './signals.js';\nimport { pushScope, popScope, getCurrentScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport { akashError } from './errors.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport interface Ref<T = HTMLElement> {\n current: T | undefined;\n}\n\nexport interface ComponentContext<P extends Record<string, unknown> = Record<string, unknown>> {\n props: Readonly<P>;\n children: () => AkashNode;\n}\n\nexport type Component<P extends Record<string, unknown> = Record<string, unknown>> = {\n (props: P & { children?: AkashNode | (() => AkashNode) }): Node;\n _akash: true;\n};\n\n// --- Lifecycle hook storage ---\n\ninterface LifecycleHooks {\n mount: Array<() => void | (() => void)>;\n unmount: Array<() => void>;\n error: Array<(error: Error) => void>;\n}\n\nlet currentHooks: LifecycleHooks | null = null;\n\n// --- Public lifecycle hooks ---\n\n/**\n * Register a callback to run after the component is mounted to the DOM.\n * If the callback returns a function, it will be called on unmount (cleanup).\n */\nexport function onMount(fn: () => void | (() => void)): void {\n if (!currentHooks) {\n throw akashError('AK0020');\n }\n currentHooks.mount.push(fn);\n}\n\n/**\n * Register a callback to run before the component is unmounted.\n */\nexport function onUnmount(fn: () => void): void {\n if (!currentHooks) {\n throw akashError('AK0021');\n }\n currentHooks.unmount.push(fn);\n}\n\n/**\n * Register an error handler for this component and its descendants.\n */\nexport function onError(fn: (error: Error) => void): void {\n if (!currentHooks) {\n throw akashError('AK0022');\n }\n currentHooks.error.push(fn);\n}\n\n/**\n * Create a ref for accessing a DOM element.\n */\nexport function ref<T = HTMLElement>(): Ref<T> {\n return { current: undefined };\n}\n\n// --- defineComponent ---\n\n/**\n * Define a component. The setup function runs once per instance.\n * It receives a context with typed props and must return a render function.\n *\n * ```ts\n * const Counter = defineComponent<{ initial: number }>((ctx) => {\n * const count = signal(ctx.props.initial);\n * return () => <div>{count()}</div>;\n * });\n * ```\n */\nexport function defineComponent<P extends Record<string, unknown> = Record<string, unknown>>(\n setup: (ctx: ComponentContext<P>) => () => AkashNode,\n): Component<P> {\n const component = (rawProps: P & { children?: AkashNode | (() => AkashNode) }): Node => {\n // Separate children from props\n const { children: childrenProp, ...restProps } = rawProps ?? {};\n const props = restProps as unknown as P;\n\n const childrenFn: () => AkashNode =\n typeof childrenProp === 'function'\n ? childrenProp\n : () => childrenProp ?? null;\n\n const ctx: ComponentContext<P> = {\n props,\n children: childrenFn,\n };\n\n // Set up lifecycle hooks collector\n const hooks: LifecycleHooks = { mount: [], unmount: [], error: [] };\n const prevHooks = currentHooks;\n currentHooks = hooks;\n\n // Push context scope for provide/inject\n const parentScope = getCurrentScope();\n const scope = pushScope(parentScope);\n\n let renderFn: () => AkashNode;\n let domNode: Node;\n\n try {\n renderFn = setup(ctx);\n const rendered = renderFn();\n domNode = nodeToDOM(rendered);\n } catch (err) {\n popScope(scope);\n currentHooks = prevHooks;\n if (hooks.error.length > 0) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n return document.createComment('error');\n }\n throw err;\n }\n\n // Restore parent state\n popScope(scope);\n currentHooks = prevHooks;\n\n // Run mount callbacks (microtask to ensure DOM is attached)\n if (hooks.mount.length > 0) {\n queueMicrotask(() => {\n for (const mountFn of hooks.mount) {\n try {\n const cleanup = mountFn();\n if (typeof cleanup === 'function') {\n hooks.unmount.push(cleanup);\n }\n } catch (err) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }\n });\n }\n\n return domNode;\n };\n\n component._akash = true as const;\n return component as Component<P>;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var S={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function p(e){return e.replace(/[&<>"']/g,t=>S[t])}var i=false;function m(){return i}async function f(e,t){i=true;try{let r=c(e,t??{});return a(r)}finally{i=false;}}function d(e,t){i=true;try{let r=c(e,t??{});return a(r)}finally{i=false;}}function g(e,t){return new ReadableStream({start(r){i=true;try{let o=c(e,t??{}),n=a(o);r.enqueue(n),r.close();}catch(o){r.error(o);}finally{i=false;}}})}function c(e,t){return {type:"raw",html:`<!-- SSR placeholder for ${e.name||"component"} -->`}}function R(e,t,r){let o={};if(t)for(let[n,s]of Object.entries(t))s===true?o[n]="":s!==false&&s!=null&&(o[n]=String(s));return {type:"element",tag:e,attrs:o,children:r??[]}}function x(e){return {type:"text",content:e}}function y(e){return {type:"raw",html:e}}var u=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function a(e){switch(e.type){case "text":return p(e.content);case "raw":return e.html;case "element":{let{tag:t,attrs:r,children:o}=e,n=`<${t}`;for(let[s,l]of Object.entries(r))l===""?n+=` ${s}`:n+=` ${s}="${p(l)}"`;if(u.has(t))return n+=" />",n;n+=">";for(let s of o)n+=a(s);return n+=`</${t}>`,n}}}function P(e){return e.map(a).join("")}exports.a=p;exports.b=m;exports.c=f;exports.d=d;exports.e=g;exports.f=R;exports.g=x;exports.h=y;exports.i=a;exports.j=P;//# sourceMappingURL=chunk-2X7GUBTG.cjs.map
2
+ //# sourceMappingURL=chunk-2X7GUBTG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ssr.ts"],"names":["ESCAPE_MAP","escapeHtml","str","ch","isSSR","isServerRendering","renderToString","component","props","node","renderComponent","nodeToHtml","renderToStringSync","renderToStream","controller","html","err","ssrElement","tag","attrs","children","processedAttrs","key","value","ssrText","content","ssrRaw","VOID_ELEMENTS","child","renderNodes","nodes"],"mappings":"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","file":"chunk-2X7GUBTG.cjs","sourcesContent":["/**\n * Server-Side Rendering.\n *\n * Renders components to HTML strings (or streams) on the server.\n * No DOM APIs are used — everything is string concatenation.\n *\n * - Effects do NOT run on the server (they are DOM-side only)\n * - Signals and computeds work synchronously\n * - Components run their setup + initial render, producing HTML\n */\n\nimport { signal, computed, untrack } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Escape helpers ---\n\nconst ESCAPE_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n};\n\nexport function escapeHtml(str: string): string {\n return str.replace(/[&<>\"']/g, (ch) => ESCAPE_MAP[ch]);\n}\n\n// --- SSR context ---\n\nlet isSSR = false;\n\n/** Check if we're currently in an SSR render */\nexport function isServerRendering(): boolean {\n return isSSR;\n}\n\n// --- renderToString ---\n\n/**\n * Render a component to an HTML string on the server.\n *\n * ```ts\n * import { renderToString } from '@akashjs/runtime/ssr';\n * const html = await renderToString(App, { title: 'Home' });\n * ```\n */\nexport async function renderToString<P extends Record<string, unknown>>(\n component: Component<P>,\n props?: P,\n): Promise<string> {\n isSSR = true;\n try {\n const node = renderComponent(component, props ?? ({} as P));\n return nodeToHtml(node);\n } finally {\n isSSR = false;\n }\n}\n\n/**\n * Synchronous version of renderToString.\n */\nexport function renderToStringSync<P extends Record<string, unknown>>(\n component: Component<P>,\n props?: P,\n): string {\n isSSR = true;\n try {\n const node = renderComponent(component, props ?? ({} as P));\n return nodeToHtml(node);\n } finally {\n isSSR = false;\n }\n}\n\n// --- renderToStream ---\n\n/**\n * Render a component to a ReadableStream of HTML chunks.\n *\n * Useful for streaming SSR — flush HTML as data becomes available.\n *\n * ```ts\n * const stream = renderToStream(App, { title: 'Home' });\n * // Pipe to HTTP response\n * ```\n */\nexport function renderToStream<P extends Record<string, unknown>>(\n component: Component<P>,\n props?: P,\n): ReadableStream<string> {\n return new ReadableStream<string>({\n start(controller) {\n isSSR = true;\n try {\n const node = renderComponent(component, props ?? ({} as P));\n const html = nodeToHtml(node);\n\n // For now, emit as a single chunk.\n // With Suspense boundaries, each resolved boundary\n // would flush a separate chunk.\n controller.enqueue(html);\n controller.close();\n } catch (err) {\n controller.error(err);\n } finally {\n isSSR = false;\n }\n },\n });\n}\n\n// --- SSR rendering internals ---\n\n/** Render a component, getting back the AkashNode tree */\nfunction renderComponent<P extends Record<string, unknown>>(\n component: Component<P>,\n props: P,\n): SSRNode {\n // In SSR mode, component() would try to use DOM APIs.\n // Instead, we intercept and build a virtual tree.\n // For now, we rely on the server-mode compiler output\n // which generates string concatenation instead of DOM calls.\n //\n // This runtime renderToString works with components that\n // return SSRNode trees (from server-compiled code).\n\n // Create a lightweight SSR node\n return { type: 'raw', html: `<!-- SSR placeholder for ${component.name || 'component'} -->` };\n}\n\n// --- SSR Node types ---\n\nexport interface SSRElement {\n type: 'element';\n tag: string;\n attrs: Record<string, string>;\n children: SSRNode[];\n selfClosing?: boolean;\n}\n\nexport interface SSRText {\n type: 'text';\n content: string;\n}\n\nexport interface SSRRaw {\n type: 'raw';\n html: string;\n}\n\nexport type SSRNode = SSRElement | SSRText | SSRRaw;\n\n// --- SSR DOM-less helpers ---\n\n/**\n * Create an SSR element (replaces document.createElement on the server).\n */\nexport function ssrElement(\n tag: string,\n attrs?: Record<string, string | boolean>,\n children?: SSRNode[],\n): SSRElement {\n const processedAttrs: Record<string, string> = {};\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === true) {\n processedAttrs[key] = '';\n } else if (value !== false && value != null) {\n processedAttrs[key] = String(value);\n }\n }\n }\n\n return {\n type: 'element',\n tag,\n attrs: processedAttrs,\n children: children ?? [],\n };\n}\n\n/**\n * Create an SSR text node.\n */\nexport function ssrText(content: string): SSRText {\n return { type: 'text', content };\n}\n\n/**\n * Create a raw HTML SSR node (no escaping).\n */\nexport function ssrRaw(html: string): SSRRaw {\n return { type: 'raw', html };\n}\n\n// --- Serialization ---\n\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr',\n]);\n\n/**\n * Serialize an SSR node tree to an HTML string.\n */\nexport function nodeToHtml(node: SSRNode): string {\n switch (node.type) {\n case 'text':\n return escapeHtml(node.content);\n\n case 'raw':\n return node.html;\n\n case 'element': {\n const { tag, attrs, children } = node;\n let html = `<${tag}`;\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value === '') {\n html += ` ${key}`;\n } else {\n html += ` ${key}=\"${escapeHtml(value)}\"`;\n }\n }\n\n if (VOID_ELEMENTS.has(tag)) {\n html += ' />';\n return html;\n }\n\n html += '>';\n\n for (const child of children) {\n html += nodeToHtml(child);\n }\n\n html += `</${tag}>`;\n return html;\n }\n }\n}\n\n/**\n * Render a tree of SSR nodes (convenience for arrays).\n */\nexport function renderNodes(nodes: SSRNode[]): string {\n return nodes.map(nodeToHtml).join('');\n}\n"]}
@@ -0,0 +1,2 @@
1
+ var S={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function p(e){return e.replace(/[&<>"']/g,t=>S[t])}var i=false;function m(){return i}async function f(e,t){i=true;try{let r=c(e,t??{});return a(r)}finally{i=false;}}function d(e,t){i=true;try{let r=c(e,t??{});return a(r)}finally{i=false;}}function g(e,t){return new ReadableStream({start(r){i=true;try{let o=c(e,t??{}),n=a(o);r.enqueue(n),r.close();}catch(o){r.error(o);}finally{i=false;}}})}function c(e,t){return {type:"raw",html:`<!-- SSR placeholder for ${e.name||"component"} -->`}}function R(e,t,r){let o={};if(t)for(let[n,s]of Object.entries(t))s===true?o[n]="":s!==false&&s!=null&&(o[n]=String(s));return {type:"element",tag:e,attrs:o,children:r??[]}}function x(e){return {type:"text",content:e}}function y(e){return {type:"raw",html:e}}var u=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function a(e){switch(e.type){case "text":return p(e.content);case "raw":return e.html;case "element":{let{tag:t,attrs:r,children:o}=e,n=`<${t}`;for(let[s,l]of Object.entries(r))l===""?n+=` ${s}`:n+=` ${s}="${p(l)}"`;if(u.has(t))return n+=" />",n;n+=">";for(let s of o)n+=a(s);return n+=`</${t}>`,n}}}function P(e){return e.map(a).join("")}export{p as a,m as b,f as c,d,g as e,R as f,x as g,y as h,a as i,P as j};//# sourceMappingURL=chunk-3HWR5MIF.js.map
2
+ //# sourceMappingURL=chunk-3HWR5MIF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ssr.ts"],"names":["ESCAPE_MAP","escapeHtml","str","ch","isSSR","isServerRendering","renderToString","component","props","node","renderComponent","nodeToHtml","renderToStringSync","renderToStream","controller","html","err","ssrElement","tag","attrs","children","processedAttrs","key","value","ssrText","content","ssrRaw","VOID_ELEMENTS","child","renderNodes","nodes"],"mappings":"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","file":"chunk-3HWR5MIF.js","sourcesContent":["/**\n * Server-Side Rendering.\n *\n * Renders components to HTML strings (or streams) on the server.\n * No DOM APIs are used — everything is string concatenation.\n *\n * - Effects do NOT run on the server (they are DOM-side only)\n * - Signals and computeds work synchronously\n * - Components run their setup + initial render, producing HTML\n */\n\nimport { signal, computed, untrack } from './signals.js';\nimport type { Component } from './component.js';\nimport type { AkashNode } from './types.js';\n\n// --- Escape helpers ---\n\nconst ESCAPE_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n};\n\nexport function escapeHtml(str: string): string {\n return str.replace(/[&<>\"']/g, (ch) => ESCAPE_MAP[ch]);\n}\n\n// --- SSR context ---\n\nlet isSSR = false;\n\n/** Check if we're currently in an SSR render */\nexport function isServerRendering(): boolean {\n return isSSR;\n}\n\n// --- renderToString ---\n\n/**\n * Render a component to an HTML string on the server.\n *\n * ```ts\n * import { renderToString } from '@akashjs/runtime/ssr';\n * const html = await renderToString(App, { title: 'Home' });\n * ```\n */\nexport async function renderToString<P extends Record<string, unknown>>(\n component: Component<P>,\n props?: P,\n): Promise<string> {\n isSSR = true;\n try {\n const node = renderComponent(component, props ?? ({} as P));\n return nodeToHtml(node);\n } finally {\n isSSR = false;\n }\n}\n\n/**\n * Synchronous version of renderToString.\n */\nexport function renderToStringSync<P extends Record<string, unknown>>(\n component: Component<P>,\n props?: P,\n): string {\n isSSR = true;\n try {\n const node = renderComponent(component, props ?? ({} as P));\n return nodeToHtml(node);\n } finally {\n isSSR = false;\n }\n}\n\n// --- renderToStream ---\n\n/**\n * Render a component to a ReadableStream of HTML chunks.\n *\n * Useful for streaming SSR — flush HTML as data becomes available.\n *\n * ```ts\n * const stream = renderToStream(App, { title: 'Home' });\n * // Pipe to HTTP response\n * ```\n */\nexport function renderToStream<P extends Record<string, unknown>>(\n component: Component<P>,\n props?: P,\n): ReadableStream<string> {\n return new ReadableStream<string>({\n start(controller) {\n isSSR = true;\n try {\n const node = renderComponent(component, props ?? ({} as P));\n const html = nodeToHtml(node);\n\n // For now, emit as a single chunk.\n // With Suspense boundaries, each resolved boundary\n // would flush a separate chunk.\n controller.enqueue(html);\n controller.close();\n } catch (err) {\n controller.error(err);\n } finally {\n isSSR = false;\n }\n },\n });\n}\n\n// --- SSR rendering internals ---\n\n/** Render a component, getting back the AkashNode tree */\nfunction renderComponent<P extends Record<string, unknown>>(\n component: Component<P>,\n props: P,\n): SSRNode {\n // In SSR mode, component() would try to use DOM APIs.\n // Instead, we intercept and build a virtual tree.\n // For now, we rely on the server-mode compiler output\n // which generates string concatenation instead of DOM calls.\n //\n // This runtime renderToString works with components that\n // return SSRNode trees (from server-compiled code).\n\n // Create a lightweight SSR node\n return { type: 'raw', html: `<!-- SSR placeholder for ${component.name || 'component'} -->` };\n}\n\n// --- SSR Node types ---\n\nexport interface SSRElement {\n type: 'element';\n tag: string;\n attrs: Record<string, string>;\n children: SSRNode[];\n selfClosing?: boolean;\n}\n\nexport interface SSRText {\n type: 'text';\n content: string;\n}\n\nexport interface SSRRaw {\n type: 'raw';\n html: string;\n}\n\nexport type SSRNode = SSRElement | SSRText | SSRRaw;\n\n// --- SSR DOM-less helpers ---\n\n/**\n * Create an SSR element (replaces document.createElement on the server).\n */\nexport function ssrElement(\n tag: string,\n attrs?: Record<string, string | boolean>,\n children?: SSRNode[],\n): SSRElement {\n const processedAttrs: Record<string, string> = {};\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value === true) {\n processedAttrs[key] = '';\n } else if (value !== false && value != null) {\n processedAttrs[key] = String(value);\n }\n }\n }\n\n return {\n type: 'element',\n tag,\n attrs: processedAttrs,\n children: children ?? [],\n };\n}\n\n/**\n * Create an SSR text node.\n */\nexport function ssrText(content: string): SSRText {\n return { type: 'text', content };\n}\n\n/**\n * Create a raw HTML SSR node (no escaping).\n */\nexport function ssrRaw(html: string): SSRRaw {\n return { type: 'raw', html };\n}\n\n// --- Serialization ---\n\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr',\n]);\n\n/**\n * Serialize an SSR node tree to an HTML string.\n */\nexport function nodeToHtml(node: SSRNode): string {\n switch (node.type) {\n case 'text':\n return escapeHtml(node.content);\n\n case 'raw':\n return node.html;\n\n case 'element': {\n const { tag, attrs, children } = node;\n let html = `<${tag}`;\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value === '') {\n html += ` ${key}`;\n } else {\n html += ` ${key}=\"${escapeHtml(value)}\"`;\n }\n }\n\n if (VOID_ELEMENTS.has(tag)) {\n html += ' />';\n return html;\n }\n\n html += '>';\n\n for (const child of children) {\n html += nodeToHtml(child);\n }\n\n html += `</${tag}>`;\n return html;\n }\n }\n}\n\n/**\n * Render a tree of SSR nodes (convenience for arrays).\n */\nexport function renderNodes(nodes: SSRNode[]): string {\n return nodes.map(nodeToHtml).join('');\n}\n"]}
@@ -0,0 +1,2 @@
1
+ var r=new Set,c=new Set,i=false,f=0,a=false;function l(){if(!i){for(i=true,a=false;r.size>0||c.size>0;){if(r.size>0){let e=[...r].sort(b);r.clear();for(let u of e)u.run();}if(c.size>0){let e=[...c].sort(b);c.clear();for(let u of e)u.run();}}i=false;}}function p(e){e.isRender?r.add(e):c.add(e),f===0&&!i&&!a&&(a=true,queueMicrotask(l));}function g(e){f++;try{e();}finally{f--,f===0&&l();}}function b(e,u){return (e.depth??0)-(u.depth??0)}function y(){l();}var s=null;function w(e,u){let t={value:e,subscribers:new Set,equals:u?.equals??Object.is},n=()=>(h(t),t.value);return n.set=o=>{t.equals(t.value,o)||(t.value=o,d(t));},n.update=o=>{n.set(o(t.value));},n.peek=()=>t.value,n}function E(e,u){let t={_tag:"computed",fn:e,value:void 0,state:1,subscribers:new Set,sources:new Set,equals:u?.equals??Object.is};return ()=>(s&&(t.subscribers.add(s),"sources"in s&&s.sources.add(t)),t.state!==0&&S(t),t.value)}function S(e){for(let t of e.sources)t.subscribers.delete(e);e.sources.clear();let u=s;s=e;try{let t=e.fn(),n=e.value===void 0||!e.equals(e.value,t);e.value=t,e.state=0,n&&d(e);}finally{s=u;}}function k(e,u){let t={_tag:"effect",fn:e,cleanup:null,sources:new Set,disposed:false,isRender:u?.render??false,run(){v(t);}};return v(t),()=>{t.disposed=true,T(t);for(let n of t.sources)n.subscribers.delete(t);t.sources.clear();}}function v(e){if(e.disposed)return;if(e.sources.size>0){let t=false;for(let n of e.sources)if("_tag"in n&&n._tag==="computed"){if(n.state===1){let o=n.value;S(n),n.equals(o,n.value)||(t=true);}}else t=true;if(!t)return}T(e);for(let t of e.sources)t.subscribers.delete(e);e.sources.clear();let u=s;s=e;try{let t=e.fn();typeof t=="function"&&(e.cleanup=t);}finally{s=u;}}function T(e){e.cleanup&&(e.cleanup(),e.cleanup=null);}function q(e){let u=s;s=null;try{return e()}finally{s=u;}}function h(e){s&&(e.subscribers.add(s),"sources"in s&&s.sources.add(e));}function d(e){for(let u of e.subscribers)u._tag==="computed"?(u.state=1,d(u)):u._tag==="effect"&&p(u);}export{g as a,y as b,w as c,E as d,k as e,q as f};//# sourceMappingURL=chunk-4K6DIB7A.js.map
2
+ //# sourceMappingURL=chunk-4K6DIB7A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/scheduler.ts","../src/signals.ts"],"names":["pendingRender","pendingUser","flushing","batchDepth","flushScheduled","flush","queue","byDepth","fx","scheduleEffect","batch","fn","a","b","flushSync","currentSubscriber","signal","initialValue","options","node","read","trackSubscriber","value","notifySubscribers","computed","recompute","source","prevSubscriber","newValue","changed","effect","runEffect","cleanupEffect","anyChanged","oldValue","result","untrack","prev","sub"],"mappings":"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","file":"chunk-4K6DIB7A.js","sourcesContent":["/**\n * Microtask-based effect scheduler with priority levels and deduplication.\n *\n * Render effects (DOM bindings) run before user effects to ensure\n * DOM is consistent before user-side effects execute.\n */\n\nexport interface ScheduledEffect {\n run(): void;\n isRender: boolean;\n /** Depth in the dependency graph (0 = root). Lower depth runs first. */\n depth?: number;\n}\n\nconst pendingRender = new Set<ScheduledEffect>();\nconst pendingUser = new Set<ScheduledEffect>();\nlet flushing = false;\nlet batchDepth = 0;\nlet flushScheduled = false;\n\nfunction flush(): void {\n if (flushing) return;\n flushing = true;\n flushScheduled = false;\n\n // Process render effects first, then user effects.\n // Effects may enqueue more effects during flush, so loop until empty.\n while (pendingRender.size > 0 || pendingUser.size > 0) {\n // Drain render effects (sorted by depth — parents before children)\n if (pendingRender.size > 0) {\n const queue = [...pendingRender].sort(byDepth);\n pendingRender.clear();\n for (const fx of queue) {\n fx.run();\n }\n }\n\n // Drain user effects (sorted by depth)\n if (pendingUser.size > 0) {\n const queue = [...pendingUser].sort(byDepth);\n pendingUser.clear();\n for (const fx of queue) {\n fx.run();\n }\n }\n }\n\n flushing = false;\n}\n\nexport function scheduleEffect(fx: ScheduledEffect): void {\n if (fx.isRender) {\n pendingRender.add(fx);\n } else {\n pendingUser.add(fx);\n }\n\n if (batchDepth === 0 && !flushing && !flushScheduled) {\n flushScheduled = true;\n queueMicrotask(flush);\n }\n}\n\n/**\n * Batch multiple signal writes — subscribers are notified only once\n * at the end of the batch.\n */\nexport function batch(fn: () => void): void {\n batchDepth++;\n try {\n fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n flush();\n }\n }\n}\n\n/** Sort effects by depth (lower depth first = parents before children) */\nfunction byDepth(a: ScheduledEffect, b: ScheduledEffect): number {\n return (a.depth ?? 0) - (b.depth ?? 0);\n}\n\n/** Synchronously flush all pending effects. Useful for testing. */\nexport function flushSync(): void {\n flush();\n}\n","/**\n * Fine-grained reactivity system.\n *\n * Inspired by SolidJS/Preact Signals. Provides signal(), computed(),\n * effect(), and untrack() primitives with automatic dependency tracking\n * and glitch-free diamond dependency resolution.\n */\n\nimport { scheduleEffect, type ScheduledEffect } from './scheduler.js';\n\n// --- Tracking scope ---\n\ntype Subscriber = EffectNode | ComputedNode<unknown>;\n\nlet currentSubscriber: Subscriber | null = null;\n\n// --- Signal ---\n\nexport interface Signal<T> {\n /** Read the current value (tracks dependency if inside a reactive scope) */\n (): T;\n /** Set a new value */\n set(value: T): void;\n /** Update the value using the previous value */\n update(fn: (prev: T) => T): void;\n /** Read without tracking (no dependency registered) */\n peek(): T;\n}\n\nexport type ReadonlySignal<T> = () => T;\n\ninterface SignalNode<T> {\n value: T;\n subscribers: Set<Subscriber>;\n equals: (a: T, b: T) => boolean;\n}\n\nexport function signal<T>(\n initialValue: T,\n options?: { equals?: (a: T, b: T) => boolean },\n): Signal<T> {\n const node: SignalNode<T> = {\n value: initialValue,\n subscribers: new Set(),\n equals: options?.equals ?? Object.is,\n };\n\n const read = (): T => {\n trackSubscriber(node);\n return node.value;\n };\n\n read.set = (value: T): void => {\n if (node.equals(node.value, value)) return;\n node.value = value;\n notifySubscribers(node);\n };\n\n read.update = (fn: (prev: T) => T): void => {\n read.set(fn(node.value));\n };\n\n read.peek = (): T => node.value;\n\n return read;\n}\n\n// --- Computed ---\n\nconst enum ComputedState {\n Clean = 0,\n Dirty = 1,\n}\n\ninterface ComputedNode<T> {\n _tag: 'computed';\n fn: () => T;\n value: T | undefined;\n state: ComputedState;\n subscribers: Set<Subscriber>;\n sources: Set<SignalNode<unknown> | ComputedNode<unknown>>;\n equals: (a: T, b: T) => boolean;\n}\n\nexport function computed<T>(\n fn: () => T,\n options?: { equals?: (a: T, b: T) => boolean },\n): ReadonlySignal<T> {\n const node: ComputedNode<T> = {\n _tag: 'computed',\n fn,\n value: undefined,\n state: ComputedState.Dirty,\n subscribers: new Set(),\n sources: new Set(),\n equals: options?.equals ?? Object.is,\n };\n\n const read = (): T => {\n // Track this computed as a dependency of the current subscriber\n if (currentSubscriber) {\n node.subscribers.add(currentSubscriber);\n if ('sources' in currentSubscriber) {\n currentSubscriber.sources.add(node);\n }\n }\n\n if (node.state !== ComputedState.Clean) {\n recompute(node);\n }\n\n return node.value as T;\n };\n\n return read;\n}\n\nfunction recompute<T>(node: ComputedNode<T>): void {\n // Clean up old source subscriptions\n for (const source of node.sources) {\n source.subscribers.delete(node);\n }\n node.sources.clear();\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n\n try {\n const newValue = node.fn();\n const changed =\n node.value === undefined || !node.equals(node.value, newValue);\n node.value = newValue;\n node.state = ComputedState.Clean;\n\n // Only propagate if value actually changed\n if (changed) {\n notifySubscribers(node);\n }\n } finally {\n currentSubscriber = prevSubscriber;\n }\n}\n\n// --- Effect ---\n\ninterface EffectNode extends ScheduledEffect {\n _tag: 'effect';\n fn: () => void | (() => void);\n cleanup: (() => void) | null;\n sources: Set<SignalNode<unknown> | ComputedNode<unknown>>;\n disposed: boolean;\n isRender: boolean;\n}\n\nexport function effect(\n fn: () => void | (() => void),\n options?: { render?: boolean },\n): () => void {\n const node: EffectNode = {\n _tag: 'effect',\n fn,\n cleanup: null,\n sources: new Set(),\n disposed: false,\n isRender: options?.render ?? false,\n run() {\n runEffect(node);\n },\n };\n\n // Run immediately to establish dependencies\n runEffect(node);\n\n // Return dispose function\n return () => {\n node.disposed = true;\n cleanupEffect(node);\n for (const source of node.sources) {\n source.subscribers.delete(node);\n }\n node.sources.clear();\n };\n}\n\nfunction runEffect(node: EffectNode): void {\n if (node.disposed) return;\n\n // Before re-running, check if any dirty computed source actually changed.\n // If all computed sources resolved to the same value, skip the re-run.\n if (node.sources.size > 0) {\n let anyChanged = false;\n for (const source of node.sources) {\n if ('_tag' in source && source._tag === 'computed') {\n if (source.state === ComputedState.Dirty) {\n const oldValue = source.value;\n recompute(source);\n if (!source.equals(oldValue as never, source.value as never)) {\n anyChanged = true;\n }\n }\n } else {\n // Plain signal source — if we got scheduled, something changed\n anyChanged = true;\n }\n }\n if (!anyChanged) return;\n }\n\n // Clean up previous run\n cleanupEffect(node);\n\n // Clean up old source subscriptions\n for (const source of node.sources) {\n source.subscribers.delete(node);\n }\n node.sources.clear();\n\n const prevSubscriber = currentSubscriber;\n currentSubscriber = node;\n\n try {\n const result = node.fn();\n if (typeof result === 'function') {\n node.cleanup = result;\n }\n } finally {\n currentSubscriber = prevSubscriber;\n }\n}\n\nfunction cleanupEffect(node: EffectNode): void {\n if (node.cleanup) {\n node.cleanup();\n node.cleanup = null;\n }\n}\n\n// --- Untrack ---\n\n/** Execute a function without tracking any signal reads */\nexport function untrack<T>(fn: () => T): T {\n const prev = currentSubscriber;\n currentSubscriber = null;\n try {\n return fn();\n } finally {\n currentSubscriber = prev;\n }\n}\n\n// --- Internal helpers ---\n\nfunction trackSubscriber(\n node: SignalNode<unknown> | ComputedNode<unknown>,\n): void {\n if (currentSubscriber) {\n node.subscribers.add(currentSubscriber);\n\n if ('sources' in currentSubscriber) {\n currentSubscriber.sources.add(node);\n }\n }\n}\n\nfunction notifySubscribers(\n node: SignalNode<unknown> | ComputedNode<unknown>,\n): void {\n for (const sub of node.subscribers) {\n if (sub._tag === 'computed') {\n // Mark dirty. The computed will re-evaluate lazily when read.\n sub.state = ComputedState.Dirty;\n // Propagate through the computed chain to reach effects.\n // The effects will re-read the computed, triggering recompute,\n // and only update DOM if the value actually changed.\n notifySubscribers(sub);\n } else if (sub._tag === 'effect') {\n scheduleEffect(sub);\n }\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import {e}from'./chunk-4K6DIB7A.js';var N={AK0010:{code:"AK0010",message:"provide() called outside of component setup.",hint:"provide() must be called inside defineComponent()."},AK0012:{code:"AK0012",message:"inject() called outside of component setup.",hint:"inject() must be called inside defineComponent()."},AK0013:{code:"AK0013",message:"No provider found for injected context.",hint:"Make sure an ancestor component calls provide() with this key."},AK0020:{code:"AK0020",message:"onMount() called outside of component setup.",hint:"onMount() must be called inside defineComponent()."},AK0021:{code:"AK0021",message:"onUnmount() called outside of component setup.",hint:"onUnmount() must be called inside defineComponent()."},AK0022:{code:"AK0022",message:"onError() called outside of component setup.",hint:"onError() must be called inside defineComponent()."},AK0030:{code:"AK0030",message:"Circular dependency detected in computed signal.",hint:"A computed signal is reading itself, directly or via other computeds."},AK0031:{code:"AK0031",message:"Signal set() called during computation.",hint:"Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers."},AK0040:{code:"AK0040",message:"Component setup must return a render function.",hint:"The function passed to defineComponent() must return () => AkashNode."},AK0041:{code:"AK0041",message:"Required prop is missing.",hint:"Check that the parent component is passing all required props."},AK0050:{code:"AK0050",message:"useRoute() called outside of router context.",hint:"Make sure your component is rendered inside a router provider."},AK0051:{code:"AK0051",message:"No route matched the current URL.",hint:"Add a catch-all route ([...rest]) to handle unmatched paths."},AK0052:{code:"AK0052",message:"Route guard threw an error.",hint:"Check the guard function for unhandled exceptions."},AK0060:{code:"AK0060",message:"Form submitted while invalid.",hint:"The submit handler was not called because validation failed. Check form.errors()."},AK0061:{code:"AK0061",message:"Async validator timed out.",hint:"The async validator did not resolve within the expected time. Check your async validation logic."},AK0070:{code:"AK0070",message:"HTTP request failed.",hint:"Check the server response status and network connectivity."},AK0071:{code:"AK0071",message:"createResource() fetcher threw an error.",hint:"Check the fetcher function passed to createResource()."}},E="https://akashjs.dev/errors";function S(e,n){let o=N[e];if(!o)return `[AkashJS ${e}] Unknown error code.`;let t=`[AkashJS ${e}] ${o.message}`;return n&&(t+=`
2
+ ${n}`),t+=`
3
+ ${o.hint}`,t+=`
4
+ See: ${E}/${e}`,t}function m(e,n){return new Error(S(e,n))}function R(e){return N[e]}function j(){return Object.keys(N)}var L=Symbol("akash.context"),h=null;function y(e=h){let n={values:new Map,parent:e};return h=n,n}function C(e){h=e.parent;}function v(){return h}function H(e){return {[L]:true,_type:void 0,defaultValue:e,id:Symbol("context")}}function I(e,n){if(!h)throw m("AK0010");h.values.set(e.id,n);}function B(e,n){if(!h)throw m("AK0012");let o=h;for(;o;){if(o.values.has(e.id))return o.values.get(e.id);o=o.parent;}if(n!==void 0)return n;if(e.defaultValue!==void 0)return e.defaultValue;throw m("AK0013")}function $(e,n){let o=document.createElement(e);if(n)for(let[t,p]of Object.entries(n))w(o,t,p);return o}function U(e){return document.createTextNode(e)}function q(e){let n=document.createElement("template");return n.innerHTML=e,n.content.cloneNode(true)}function w(e,n,o){if(n==="class"||n==="className")e.className=o;else if(n==="style"&&typeof o=="object"&&o!==null)Object.assign(e.style,o);else if(n==="innerHTML")e.innerHTML=o;else if(n!=="ref")if(n.startsWith("on")){let t=n.slice(2).toLowerCase();e.addEventListener(t,o);}else n in e?e[n]=o:o===false||o==null?e.removeAttribute(n):e.setAttribute(n,o===true?"":String(o));}function V(e$1,n){return e(()=>{e$1.textContent=String(n());},{render:true})}function J(e$1,n,o){return e(()=>{w(e$1,n,o());},{render:true})}function X(e$1,n){return e(()=>{e$1.style.display=n()?"":"none";},{render:true})}function K(e=""){return document.createComment(e)}function M(e$1,n,o,t,p){let c=null,k=e(()=>{let d=o();if(c){for(let u of c.nodes)e$1.removeChild(u);c.dispose?.(),c=null;}let r=d?t:p;if(r){let u=r(),s=u instanceof DocumentFragment?Array.from(u.childNodes):[u];for(let i of s)e$1.insertBefore(i,n);c={nodes:s,dispose:null};}},{render:true});return ()=>{if(k(),c){for(let d of c.nodes)d.parentNode&&d.parentNode.removeChild(d);c.dispose?.();}}}function P(e$1,n,o,t,p){let c=[],k=e(()=>{let d=o(),r=[],u=new Map;for(let s of c)u.set(s.key,s);for(let s=0;s<d.length;s++){let i=d[s],A=t(i,s),T=u.get(A);if(T)u.delete(A),T.value=i,r.push(T);else {let a=p(i,s),l=a instanceof DocumentFragment?Array.from(a.childNodes):[a];r.push({key:A,value:i,nodes:l,dispose:null});}}for(let s of u.values()){for(let i of s.nodes)i.parentNode&&i.parentNode.removeChild(i);s.dispose?.();}for(let s of r)for(let i of s.nodes)e$1.insertBefore(i,n);c=r;},{render:true});return ()=>{k();for(let d of c){for(let r of d.nodes)r.parentNode&&r.parentNode.removeChild(r);d.dispose?.();}c=[];}}function W(e){let n=K("show"),o=document.createDocumentFragment();return o.appendChild(n),M(o,n,()=>!!e.when,()=>g(e.children(e.when)),e.fallback?()=>g(e.fallback()):void 0),o}function z(e){let n=K("for"),o=document.createDocumentFragment();return o.appendChild(n),P(o,n,()=>e.each,e.key,(t,p)=>g(e.children(t,p))),o}function g(e){if(e==null||typeof e=="boolean")return document.createTextNode("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(e instanceof Node)return e;if(Array.isArray(e)){let n=document.createDocumentFragment();for(let o of e)n.appendChild(g(o));return n}return document.createTextNode(String(e))}function G(e,n,o){let t=g(n);o?e.insertBefore(t,o):e.appendChild(t);}var f=null;function ne(e){if(!f)throw m("AK0020");f.mount.push(e);}function oe(e){if(!f)throw m("AK0021");f.unmount.push(e);}function te(e){if(!f)throw m("AK0022");f.error.push(e);}function re(){return {current:void 0}}function se(e){let n=o=>{let{children:t,...p}=o??{},d={props:p,children:typeof t=="function"?t:()=>t??null},r={mount:[],unmount:[],error:[]},u=f;f=r;let s=v(),i=y(s),A,T;try{A=e(d);let a=A();T=g(a);}catch(a){if(C(i),f=u,r.error.length>0){for(let l of r.error)l(a instanceof Error?a:new Error(String(a)));return document.createComment("error")}throw a}return C(i),f=u,r.mount.length>0&&queueMicrotask(()=>{for(let a of r.mount)try{let l=a();typeof l=="function"&&r.unmount.push(l);}catch(l){for(let b of r.error)b(l instanceof Error?l:new Error(String(l)));}}),T};return n._akash=true,n}export{S as a,m as b,R as c,j as d,H as e,I as f,B as g,$ as h,U as i,q as j,w as k,V as l,J as m,X as n,M as o,P as p,W as q,z as r,g as s,G as t,ne as u,oe as v,te as w,re as x,se as y};//# sourceMappingURL=chunk-BJKK7MKL.js.map
5
+ //# sourceMappingURL=chunk-BJKK7MKL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/context.ts","../src/dom.ts","../src/component.ts"],"names":["errors","DOC_BASE","formatError","code","context","def","msg","akashError","getErrorDef","getAllErrorCodes","CONTEXT_BRAND","currentScope","pushScope","parent","scope","popScope","getCurrentScope","createContext","defaultValue","provide","key","value","inject","fallback","createElement","tag","attrs","el","setProperty","createText","cloneTemplate","html","template","event","bindText","node","fn","effect","bindProperty","bindVisible","createAnchor","label","renderConditional","anchor","condition","trueBranch","falseBranch","current","dispose","branch","fragment","nodes","renderList","items","keyFn","renderItem","currentItems","newData","newItems","oldMap","item","i","data","existing","Show","props","container","nodeToDOM","For","index","child","insert","domNode","currentHooks","onMount","onUnmount","onError","ref","defineComponent","setup","component","rawProps","childrenProp","restProps","ctx","hooks","prevHooks","parentScope","renderFn","rendered","err","handler","mountFn","cleanup"],"mappings":"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","file":"chunk-BJKK7MKL.js","sourcesContent":["/**\n * Error message catalog.\n *\n * Every AkashJS runtime error has a unique code (AK0001, AK0002, etc.),\n * a one-line description, and a link to detailed documentation.\n *\n * Usage:\n * throw akashError('AK0010', 'provide()');\n */\n\n// --- Error registry ---\n\nexport interface ErrorDef {\n /** Error code */\n code: string;\n /** Short description */\n message: string;\n /** Extended explanation and fix suggestion */\n hint: string;\n}\n\nconst errors: Record<string, ErrorDef> = {\n // --- Context errors (AK001x) ---\n AK0010: {\n code: 'AK0010',\n message: 'provide() called outside of component setup.',\n hint: 'provide() must be called inside defineComponent().',\n },\n AK0012: {\n code: 'AK0012',\n message: 'inject() called outside of component setup.',\n hint: 'inject() must be called inside defineComponent().',\n },\n AK0013: {\n code: 'AK0013',\n message: 'No provider found for injected context.',\n hint: 'Make sure an ancestor component calls provide() with this key.',\n },\n\n // --- Lifecycle errors (AK002x) ---\n AK0020: {\n code: 'AK0020',\n message: 'onMount() called outside of component setup.',\n hint: 'onMount() must be called inside defineComponent().',\n },\n AK0021: {\n code: 'AK0021',\n message: 'onUnmount() called outside of component setup.',\n hint: 'onUnmount() must be called inside defineComponent().',\n },\n AK0022: {\n code: 'AK0022',\n message: 'onError() called outside of component setup.',\n hint: 'onError() must be called inside defineComponent().',\n },\n\n // --- Signal errors (AK003x) ---\n AK0030: {\n code: 'AK0030',\n message: 'Circular dependency detected in computed signal.',\n hint: 'A computed signal is reading itself, directly or via other computeds.',\n },\n AK0031: {\n code: 'AK0031',\n message: 'Signal set() called during computation.',\n hint: 'Do not set signals inside computed() or during effect execution. Use batch() or set signals in event handlers.',\n },\n\n // --- Component errors (AK004x) ---\n AK0040: {\n code: 'AK0040',\n message: 'Component setup must return a render function.',\n hint: 'The function passed to defineComponent() must return () => AkashNode.',\n },\n AK0041: {\n code: 'AK0041',\n message: 'Required prop is missing.',\n hint: 'Check that the parent component is passing all required props.',\n },\n\n // --- Router errors (AK005x) ---\n AK0050: {\n code: 'AK0050',\n message: 'useRoute() called outside of router context.',\n hint: 'Make sure your component is rendered inside a router provider.',\n },\n AK0051: {\n code: 'AK0051',\n message: 'No route matched the current URL.',\n hint: 'Add a catch-all route ([...rest]) to handle unmatched paths.',\n },\n AK0052: {\n code: 'AK0052',\n message: 'Route guard threw an error.',\n hint: 'Check the guard function for unhandled exceptions.',\n },\n\n // --- Form errors (AK006x) ---\n AK0060: {\n code: 'AK0060',\n message: 'Form submitted while invalid.',\n hint: 'The submit handler was not called because validation failed. Check form.errors().',\n },\n AK0061: {\n code: 'AK0061',\n message: 'Async validator timed out.',\n hint: 'The async validator did not resolve within the expected time. Check your async validation logic.',\n },\n\n // --- HTTP errors (AK007x) ---\n AK0070: {\n code: 'AK0070',\n message: 'HTTP request failed.',\n hint: 'Check the server response status and network connectivity.',\n },\n AK0071: {\n code: 'AK0071',\n message: 'createResource() fetcher threw an error.',\n hint: 'Check the fetcher function passed to createResource().',\n },\n};\n\n// --- Public API ---\n\nconst DOC_BASE = 'https://akashjs.dev/errors';\n\n/**\n * Format an AkashJS error with code, message, hint, and doc link.\n */\nexport function formatError(code: string, context?: string): string {\n const def = errors[code];\n if (!def) {\n return `[AkashJS ${code}] Unknown error code.`;\n }\n\n let msg = `[AkashJS ${code}] ${def.message}`;\n if (context) {\n msg += `\\n ${context}`;\n }\n msg += `\\n ${def.hint}`;\n msg += `\\n See: ${DOC_BASE}/${code}`;\n return msg;\n}\n\n/**\n * Create and throw an AkashJS error.\n */\nexport function akashError(code: string, context?: string): Error {\n return new Error(formatError(code, context));\n}\n\n/**\n * Get the error definition for a code.\n */\nexport function getErrorDef(code: string): ErrorDef | undefined {\n return errors[code];\n}\n\n/**\n * Get all registered error codes.\n */\nexport function getAllErrorCodes(): string[] {\n return Object.keys(errors);\n}\n","/**\n * Lightweight dependency injection via provide/inject.\n *\n * Context is scoped to the component tree — no injector hierarchy,\n * no decorators, no classes. Just createContext(), provide(), inject().\n */\n\n// --- Types ---\n\nimport { akashError } from './errors.js';\n\nconst CONTEXT_BRAND = Symbol('akash.context');\n\nexport interface InjectionKey<T> {\n readonly [CONTEXT_BRAND]: true;\n readonly _type: T; // phantom type — never used at runtime\n readonly defaultValue: T | undefined;\n readonly id: symbol;\n}\n\n// --- Context stack (managed by component system) ---\n\ninterface ContextScope {\n values: Map<symbol, unknown>;\n parent: ContextScope | null;\n}\n\nlet currentScope: ContextScope | null = null;\n\n/** @internal — called by defineComponent to push/pop context scopes */\nexport function pushScope(parent: ContextScope | null = currentScope): ContextScope {\n const scope: ContextScope = { values: new Map(), parent };\n currentScope = scope;\n return scope;\n}\n\n/** @internal */\nexport function popScope(scope: ContextScope): void {\n currentScope = scope.parent;\n}\n\n/** @internal */\nexport function getCurrentScope(): ContextScope | null {\n return currentScope;\n}\n\n// --- Public API ---\n\n/**\n * Create a typed context key with an optional default value.\n *\n * ```ts\n * const ThemeContext = createContext<'light' | 'dark'>('light');\n * ```\n */\nexport function createContext<T>(defaultValue?: T): InjectionKey<T> {\n return {\n [CONTEXT_BRAND]: true,\n _type: undefined as T,\n defaultValue,\n id: Symbol('context'),\n };\n}\n\n/**\n * Provide a value for a context key in the current component scope.\n * All descendant components can inject() this value.\n *\n * Must be called inside defineComponent() setup.\n */\nexport function provide<T>(key: InjectionKey<T>, value: T): void {\n if (!currentScope) {\n throw akashError('AK0010');\n }\n currentScope.values.set(key.id, value);\n}\n\n/**\n * Inject a value from the nearest ancestor that provided it.\n *\n * Must be called inside defineComponent() setup.\n */\nexport function inject<T>(key: InjectionKey<T>): T;\nexport function inject<T>(key: InjectionKey<T>, fallback: T): T;\nexport function inject<T>(key: InjectionKey<T>, fallback?: T): T {\n if (!currentScope) {\n throw akashError('AK0012');\n }\n\n // Walk up the scope chain\n let scope: ContextScope | null = currentScope;\n while (scope) {\n if (scope.values.has(key.id)) {\n return scope.values.get(key.id) as T;\n }\n scope = scope.parent;\n }\n\n // Check fallback, then default\n if (fallback !== undefined) return fallback;\n if (key.defaultValue !== undefined) return key.defaultValue;\n\n throw akashError('AK0013');\n}\n","/**\n * Direct DOM rendering runtime.\n *\n * No virtual DOM. The compiler generates calls to these helpers.\n * Signal reads inside templates become fine-grained effects that\n * update only the specific DOM node that changed.\n */\n\nimport { effect } from './signals.js';\nimport type { AkashNode } from './types.js';\n\n// --- DOM creation helpers (used by compiler output) ---\n\n/** Create an element and optionally set static attributes */\nexport function createElement(\n tag: string,\n attrs?: Record<string, unknown>,\n): HTMLElement {\n const el = document.createElement(tag);\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n setProperty(el, key, value);\n }\n }\n return el;\n}\n\n/** Create a text node */\nexport function createText(value: string): Text {\n return document.createTextNode(value);\n}\n\n/** Clone a template element for static structure */\nexport function cloneTemplate(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content.cloneNode(true) as DocumentFragment;\n}\n\n// --- Property/attribute setting ---\n\nexport function setProperty(el: HTMLElement, key: string, value: unknown): void {\n if (key === 'class' || key === 'className') {\n el.className = value as string;\n } else if (key === 'style' && typeof value === 'object' && value !== null) {\n Object.assign(el.style, value);\n } else if (key === 'innerHTML') {\n el.innerHTML = value as string;\n } else if (key === 'ref') {\n // Handled separately by component system\n } else if (key.startsWith('on')) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value as EventListener);\n } else if (key in el) {\n (el as Record<string, unknown>)[key] = value;\n } else if (value === false || value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n}\n\n// --- Reactive binding (used by compiler for dynamic expressions) ---\n\n/** Bind a reactive expression to a text node's content */\nexport function bindText(node: Text, fn: () => unknown): () => void {\n return effect(\n () => {\n node.textContent = String(fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's attribute/property */\nexport function bindProperty(\n el: HTMLElement,\n key: string,\n fn: () => unknown,\n): () => void {\n return effect(\n () => {\n setProperty(el, key, fn());\n },\n { render: true },\n );\n}\n\n/** Bind a reactive expression to an element's visibility (display) */\nexport function bindVisible(el: HTMLElement, fn: () => boolean): () => void {\n return effect(\n () => {\n el.style.display = fn() ? '' : 'none';\n },\n { render: true },\n );\n}\n\n// --- Conditional rendering ---\n\n/** Anchor node type for marking insertion points */\ntype Anchor = Comment;\n\nfunction createAnchor(label = ''): Anchor {\n return document.createComment(label);\n}\n\ninterface ConditionalBlock {\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a conditional block. Swaps DOM fragments based on a reactive\n * condition. Used by the compiler for :if directives and <Show>.\n */\nexport function renderConditional(\n parent: Node,\n anchor: Node,\n condition: () => boolean,\n trueBranch: () => Node,\n falseBranch?: () => Node,\n): () => void {\n let current: ConditionalBlock | null = null;\n\n const dispose = effect(\n () => {\n const value = condition();\n\n // Remove old nodes\n if (current) {\n for (const node of current.nodes) {\n parent.removeChild(node);\n }\n current.dispose?.();\n current = null;\n }\n\n // Insert new nodes\n const branch = value ? trueBranch : falseBranch;\n if (branch) {\n const fragment = branch();\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n for (const node of nodes) {\n parent.insertBefore(node, anchor);\n }\n current = { nodes, dispose: null };\n }\n },\n { render: true },\n );\n\n return () => {\n dispose();\n if (current) {\n for (const node of current.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n current.dispose?.();\n }\n };\n}\n\n// --- List rendering ---\n\ninterface ListItem<T> {\n key: unknown;\n value: T;\n nodes: Node[];\n dispose: (() => void) | null;\n}\n\n/**\n * Render a reactive list with keyed reconciliation.\n * Used by the compiler for :for directives and <For>.\n */\nexport function renderList<T>(\n parent: Node,\n anchor: Node,\n items: () => T[],\n keyFn: (item: T, index: number) => unknown,\n renderItem: (item: T, index: number) => Node,\n): () => void {\n let currentItems: ListItem<T>[] = [];\n\n const dispose = effect(\n () => {\n const newData = items();\n const newItems: ListItem<T>[] = [];\n const oldMap = new Map<unknown, ListItem<T>>();\n\n for (const item of currentItems) {\n oldMap.set(item.key, item);\n }\n\n // Build new list, reuse existing DOM nodes when keys match\n for (let i = 0; i < newData.length; i++) {\n const data = newData[i];\n const key = keyFn(data, i);\n const existing = oldMap.get(key);\n\n if (existing) {\n oldMap.delete(key);\n existing.value = data;\n newItems.push(existing);\n } else {\n const fragment = renderItem(data, i);\n const nodes = fragment instanceof DocumentFragment\n ? Array.from(fragment.childNodes)\n : [fragment];\n newItems.push({ key, value: data, nodes, dispose: null });\n }\n }\n\n // Remove items that are no longer in the list\n for (const item of oldMap.values()) {\n for (const node of item.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n item.dispose?.();\n }\n\n // Reconcile DOM order — simple approach: re-insert all in order\n for (const item of newItems) {\n for (const node of item.nodes) {\n parent.insertBefore(node, anchor);\n }\n }\n\n currentItems = newItems;\n },\n { render: true },\n );\n\n return () => {\n dispose();\n for (const item of currentItems) {\n for (const node of item.nodes) {\n if (node.parentNode) node.parentNode.removeChild(node);\n }\n item.dispose?.();\n }\n currentItems = [];\n };\n}\n\n// --- Built-in control flow components ---\n\n/** Props for the <Show> component */\nexport interface ShowProps<T> {\n when: T | null | undefined | false;\n fallback?: () => AkashNode;\n children: (value: T) => AkashNode;\n}\n\n/**\n * <Show> component — conditionally renders children with type narrowing.\n * The children callback receives the non-null/undefined value.\n */\nexport function Show<T>(props: ShowProps<T>): Node {\n const anchor = createAnchor('show');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n renderConditional(\n container,\n anchor,\n () => !!props.when,\n () => nodeToDOM(props.children(props.when as T)),\n props.fallback ? () => nodeToDOM(props.fallback!()) : undefined,\n );\n\n return container;\n}\n\n/** Props for the <For> component */\nexport interface ForProps<T> {\n each: T[];\n key: (item: T) => unknown;\n children: (item: T, index: number) => AkashNode;\n}\n\n/**\n * <For> component — renders a list with keyed reconciliation.\n */\nexport function For<T>(props: ForProps<T>): Node {\n const anchor = createAnchor('for');\n const container = document.createDocumentFragment();\n container.appendChild(anchor);\n\n renderList(\n container,\n anchor,\n () => props.each,\n props.key,\n (item, index) => nodeToDOM(props.children(item, index)),\n );\n\n return container;\n}\n\n// --- Helpers ---\n\n/** Convert an AkashNode to a DOM Node */\nexport function nodeToDOM(node: AkashNode): Node {\n if (node == null || typeof node === 'boolean') {\n return document.createTextNode('');\n }\n if (typeof node === 'string' || typeof node === 'number') {\n return document.createTextNode(String(node));\n }\n if (node instanceof Node) {\n return node;\n }\n if (Array.isArray(node)) {\n const fragment = document.createDocumentFragment();\n for (const child of node) {\n fragment.appendChild(nodeToDOM(child));\n }\n return fragment;\n }\n return document.createTextNode(String(node));\n}\n\n/** Insert a node into a parent before an anchor */\nexport function insert(parent: Node, node: AkashNode, anchor?: Node): void {\n const domNode = nodeToDOM(node);\n if (anchor) {\n parent.insertBefore(domNode, anchor);\n } else {\n parent.appendChild(domNode);\n }\n}\n","/**\n * Component system.\n *\n * Components are functions. defineComponent() wraps a setup function\n * that runs once, establishes signals and effects, and returns a\n * render function that produces DOM nodes.\n */\n\nimport { effect } from './signals.js';\nimport { pushScope, popScope, getCurrentScope } from './context.js';\nimport { nodeToDOM } from './dom.js';\nimport { akashError } from './errors.js';\nimport type { AkashNode } from './types.js';\n\n// --- Types ---\n\nexport interface Ref<T = HTMLElement> {\n current: T | undefined;\n}\n\nexport interface ComponentContext<P extends Record<string, unknown> = Record<string, unknown>> {\n props: Readonly<P>;\n children: () => AkashNode;\n}\n\nexport type Component<P extends Record<string, unknown> = Record<string, unknown>> = {\n (props: P & { children?: AkashNode | (() => AkashNode) }): Node;\n _akash: true;\n};\n\n// --- Lifecycle hook storage ---\n\ninterface LifecycleHooks {\n mount: Array<() => void | (() => void)>;\n unmount: Array<() => void>;\n error: Array<(error: Error) => void>;\n}\n\nlet currentHooks: LifecycleHooks | null = null;\n\n// --- Public lifecycle hooks ---\n\n/**\n * Register a callback to run after the component is mounted to the DOM.\n * If the callback returns a function, it will be called on unmount (cleanup).\n */\nexport function onMount(fn: () => void | (() => void)): void {\n if (!currentHooks) {\n throw akashError('AK0020');\n }\n currentHooks.mount.push(fn);\n}\n\n/**\n * Register a callback to run before the component is unmounted.\n */\nexport function onUnmount(fn: () => void): void {\n if (!currentHooks) {\n throw akashError('AK0021');\n }\n currentHooks.unmount.push(fn);\n}\n\n/**\n * Register an error handler for this component and its descendants.\n */\nexport function onError(fn: (error: Error) => void): void {\n if (!currentHooks) {\n throw akashError('AK0022');\n }\n currentHooks.error.push(fn);\n}\n\n/**\n * Create a ref for accessing a DOM element.\n */\nexport function ref<T = HTMLElement>(): Ref<T> {\n return { current: undefined };\n}\n\n// --- defineComponent ---\n\n/**\n * Define a component. The setup function runs once per instance.\n * It receives a context with typed props and must return a render function.\n *\n * ```ts\n * const Counter = defineComponent<{ initial: number }>((ctx) => {\n * const count = signal(ctx.props.initial);\n * return () => <div>{count()}</div>;\n * });\n * ```\n */\nexport function defineComponent<P extends Record<string, unknown> = Record<string, unknown>>(\n setup: (ctx: ComponentContext<P>) => () => AkashNode,\n): Component<P> {\n const component = (rawProps: P & { children?: AkashNode | (() => AkashNode) }): Node => {\n // Separate children from props\n const { children: childrenProp, ...restProps } = rawProps ?? {};\n const props = restProps as unknown as P;\n\n const childrenFn: () => AkashNode =\n typeof childrenProp === 'function'\n ? childrenProp\n : () => childrenProp ?? null;\n\n const ctx: ComponentContext<P> = {\n props,\n children: childrenFn,\n };\n\n // Set up lifecycle hooks collector\n const hooks: LifecycleHooks = { mount: [], unmount: [], error: [] };\n const prevHooks = currentHooks;\n currentHooks = hooks;\n\n // Push context scope for provide/inject\n const parentScope = getCurrentScope();\n const scope = pushScope(parentScope);\n\n let renderFn: () => AkashNode;\n let domNode: Node;\n\n try {\n renderFn = setup(ctx);\n const rendered = renderFn();\n domNode = nodeToDOM(rendered);\n } catch (err) {\n popScope(scope);\n currentHooks = prevHooks;\n if (hooks.error.length > 0) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n return document.createComment('error');\n }\n throw err;\n }\n\n // Restore parent state\n popScope(scope);\n currentHooks = prevHooks;\n\n // Run mount callbacks (microtask to ensure DOM is attached)\n if (hooks.mount.length > 0) {\n queueMicrotask(() => {\n for (const mountFn of hooks.mount) {\n try {\n const cleanup = mountFn();\n if (typeof cleanup === 'function') {\n hooks.unmount.push(cleanup);\n }\n } catch (err) {\n for (const handler of hooks.error) {\n handler(err instanceof Error ? err : new Error(String(err)));\n }\n }\n }\n });\n }\n\n return domNode;\n };\n\n component._akash = true as const;\n return component as Component<P>;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkZE7R72IH_cjs=require('./chunk-ZE7R72IH.cjs');var S=new Map;function p(r,a){return ()=>{if(S.has(r))return S.get(r);let s=a.state(),n=u(r,s,a);return S.set(r,n),n}}function u(r,a,s){let n={},i=Object.keys(a);for(let e of i)n[e]=chunkZE7R72IH_cjs.c(a[e]);let c={};if(s.getters)for(let[e,t]of Object.entries(s.getters))c[e]=chunkZE7R72IH_cjs.d(()=>t(n));let o={$id:r};for(let e of i)o[e]=n[e];for(let[e,t]of Object.entries(c))o[e]=t;if(s.actions)for(let[e,t]of Object.entries(s.actions))o[e]=(...d)=>t.apply(n,d);o.$reset=()=>{let e=s.state();for(let t of i)n[t].set(e[t]);},o.$snapshot=()=>{let e={};for(let t of i)e[t]=n[t]();return e};let g=new Set;return o.$subscribe=e=>(g.add(e),()=>g.delete(e)),o}function l(){S.clear();}exports.a=p;exports.b=l;//# sourceMappingURL=chunk-FWWD2YSS.cjs.map
2
+ //# sourceMappingURL=chunk-FWWD2YSS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/store.ts"],"names":["storeInstances","defineStore","id","definition","initialState","store","createStoreInstance","stateSignals","stateKeys","key","signal","getterComputeds","getterFn","computed","comp","actionFn","args","fresh","snapshot","subscribers","callback","clearStores"],"mappings":"mEA4EA,IAAMA,CAAAA,CAAiB,IAAI,GAAA,CAQpB,SAASC,EAKdC,CAAAA,CACAC,CAAAA,CACsB,CACtB,OAAO,IAAM,CAEX,GAAIH,CAAAA,CAAe,GAAA,CAAIE,CAAE,CAAA,CACvB,OAAOF,EAAe,GAAA,CAAIE,CAAE,CAAA,CAG9B,IAAME,CAAAA,CAAeD,CAAAA,CAAW,OAAM,CAChCE,CAAAA,CAAQC,EAAoBJ,CAAAA,CAAIE,CAAAA,CAAcD,CAAU,CAAA,CAC9D,OAAAH,CAAAA,CAAe,GAAA,CAAIE,CAAAA,CAAIG,CAAK,EACrBA,CACT,CACF,CAEA,SAASC,CAAAA,CAKPJ,CAAAA,CACAE,EACAD,CAAAA,CACgB,CAEhB,IAAMI,CAAAA,CAAgD,EAAC,CACjDC,EAAY,MAAA,CAAO,IAAA,CAAKJ,CAAY,CAAA,CAE1C,IAAA,IAAWK,KAAOD,CAAAA,CAChBD,CAAAA,CAAaE,CAAG,CAAA,CAAIC,mBAAAA,CAAON,CAAAA,CAAaK,CAAG,CAAC,CAAA,CAI9C,IAAME,CAAAA,CAA2D,EAAC,CAClE,GAAIR,CAAAA,CAAW,OAAA,CACb,IAAA,GAAW,CAACM,CAAAA,CAAKG,CAAQ,IAAK,MAAA,CAAO,OAAA,CAAQT,EAAW,OAAO,CAAA,CAC7DQ,EAAgBF,CAAG,CAAA,CAAII,mBAAAA,CAAS,IAC7BD,CAAAA,CAAsBL,CAAY,CACrC,CAAA,CAKJ,IAAMF,CAAAA,CAAa,CAAE,GAAA,CAAKH,CAAG,EAG7B,IAAA,IAAWO,CAAAA,IAAOD,CAAAA,CAChBH,CAAAA,CAAMI,CAAG,CAAA,CAAIF,EAAaE,CAAG,CAAA,CAI/B,OAAW,CAACA,CAAAA,CAAKK,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAe,CAAA,CACtDN,CAAAA,CAAMI,CAAG,CAAA,CAAIK,CAAAA,CAIf,GAAIX,CAAAA,CAAW,OAAA,CACb,OAAW,CAACM,CAAAA,CAAKM,CAAQ,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQZ,EAAW,OAAO,CAAA,CAC7DE,EAAMI,CAAG,CAAA,CAAI,IAAIO,CAAAA,GACdD,CAAAA,CAAsB,KAAA,CAAMR,CAAAA,CAAcS,CAAI,CAAA,CAKrDX,EAAM,MAAA,CAAS,IAAM,CACnB,IAAMY,CAAAA,CAAQd,CAAAA,CAAW,OAAM,CAC/B,IAAA,IAAWM,CAAAA,IAAOD,CAAAA,CAChBD,CAAAA,CAAaE,CAAG,EAAE,GAAA,CAAIQ,CAAAA,CAAMR,CAAc,CAAC,EAE/C,EAGAJ,CAAAA,CAAM,SAAA,CAAY,IAAS,CACzB,IAAMa,CAAAA,CAAoC,EAAC,CAC3C,IAAA,IAAWT,CAAAA,IAAOD,CAAAA,CAChBU,CAAAA,CAAST,CAAG,EAAIF,CAAAA,CAAaE,CAAG,CAAA,EAAE,CAEpC,OAAOS,CACT,EAGA,IAAMC,CAAAA,CAAc,IAAI,GAAA,CACxB,OAAAd,EAAM,UAAA,CAAce,CAAAA,GAClBD,CAAAA,CAAY,GAAA,CAAIC,CAAQ,CAAA,CACjB,IAAMD,CAAAA,CAAY,MAAA,CAAOC,CAAQ,CAAA,CAAA,CAGnCf,CACT,CAKO,SAASgB,CAAAA,EAAoB,CAClCrB,CAAAA,CAAe,KAAA,GACjB","file":"chunk-FWWD2YSS.cjs","sourcesContent":["/**\n * Global state management via defineStore().\n *\n * Stores are singleton signal containers that persist across\n * components. They provide shared state, computed getters,\n * and actions — no external library needed.\n *\n * ```ts\n * const useCounterStore = defineStore('counter', {\n * state: () => ({ count: 0, name: 'Counter' }),\n * getters: {\n * doubled: (state) => state.count() * 2,\n * },\n * actions: {\n * increment() { this.count.update(c => c + 1); },\n * reset() { this.count.set(0); },\n * },\n * });\n *\n * // In any component:\n * const store = useCounterStore();\n * store.count(); // 0\n * store.doubled(); // 0\n * store.increment();\n * store.count(); // 1\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\ntype StateFactory<S> = () => S;\n\ntype Getters<S, G> = {\n [K in keyof G]: (state: SignalifiedState<S>) => G[K];\n};\n\ntype Actions<A> = {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n};\n\n/** Maps plain state values to signals */\ntype SignalifiedState<S> = {\n [K in keyof S]: Signal<S[K]>;\n};\n\n/** The store instance returned to consumers */\nexport type Store<S, G, A> = SignalifiedState<S> & {\n [K in keyof G]: ReadonlySignal<G[K]>;\n} & {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n} & {\n /** Reset all state to initial values */\n $reset(): void;\n /** Subscribe to all state changes */\n $subscribe(callback: (state: S) => void): () => void;\n /** Get a plain snapshot of current state */\n $snapshot(): S;\n /** Store ID */\n $id: string;\n};\n\nexport interface StoreDefinition<S, G, A> {\n state: StateFactory<S>;\n getters?: Getters<S, G>;\n actions?: A;\n}\n\n// --- Store registry (singleton) ---\n\nconst storeInstances = new Map<string, Store<any, any, any>>();\n\n// --- defineStore ---\n\n/**\n * Define a global store. Returns a composable function that\n * always returns the same store instance (singleton).\n */\nexport function defineStore<\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = {},\n A extends Record<string, (...args: any[]) => any> = {},\n>(\n id: string,\n definition: StoreDefinition<S, G, A>,\n): () => Store<S, G, A> {\n return () => {\n // Return existing instance if already created\n if (storeInstances.has(id)) {\n return storeInstances.get(id) as Store<S, G, A>;\n }\n\n const initialState = definition.state();\n const store = createStoreInstance(id, initialState, definition);\n storeInstances.set(id, store);\n return store;\n };\n}\n\nfunction createStoreInstance<\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: any[]) => any>,\n>(\n id: string,\n initialState: S,\n definition: StoreDefinition<S, G, A>,\n): Store<S, G, A> {\n // Create signals for each state property\n const stateSignals: Record<string, Signal<unknown>> = {};\n const stateKeys = Object.keys(initialState);\n\n for (const key of stateKeys) {\n stateSignals[key] = signal(initialState[key]);\n }\n\n // Create computed getters\n const getterComputeds: Record<string, ReadonlySignal<unknown>> = {};\n if (definition.getters) {\n for (const [key, getterFn] of Object.entries(definition.getters)) {\n getterComputeds[key] = computed(() =>\n (getterFn as Function)(stateSignals),\n );\n }\n }\n\n // Build the store object\n const store: any = { $id: id };\n\n // Add state signals\n for (const key of stateKeys) {\n store[key] = stateSignals[key];\n }\n\n // Add getters\n for (const [key, comp] of Object.entries(getterComputeds)) {\n store[key] = comp;\n }\n\n // Bind actions with `this` pointing to the store's state signals\n if (definition.actions) {\n for (const [key, actionFn] of Object.entries(definition.actions)) {\n store[key] = (...args: unknown[]) =>\n (actionFn as Function).apply(stateSignals, args);\n }\n }\n\n // $reset\n store.$reset = () => {\n const fresh = definition.state();\n for (const key of stateKeys) {\n stateSignals[key].set(fresh[key as keyof S]);\n }\n };\n\n // $snapshot\n store.$snapshot = (): S => {\n const snapshot: Record<string, unknown> = {};\n for (const key of stateKeys) {\n snapshot[key] = stateSignals[key]();\n }\n return snapshot as S;\n };\n\n // $subscribe\n const subscribers = new Set<(state: S) => void>();\n store.$subscribe = (callback: (state: S) => void): (() => void) => {\n subscribers.add(callback);\n return () => subscribers.delete(callback);\n };\n\n return store as Store<S, G, A>;\n}\n\n/**\n * Clear all store instances (useful for testing).\n */\nexport function clearStores(): void {\n storeInstances.clear();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {c,d}from'./chunk-4K6DIB7A.js';var S=new Map;function p(r,a){return ()=>{if(S.has(r))return S.get(r);let s=a.state(),n=u(r,s,a);return S.set(r,n),n}}function u(r,a,s){let n={},i=Object.keys(a);for(let e of i)n[e]=c(a[e]);let c$1={};if(s.getters)for(let[e,t]of Object.entries(s.getters))c$1[e]=d(()=>t(n));let o={$id:r};for(let e of i)o[e]=n[e];for(let[e,t]of Object.entries(c$1))o[e]=t;if(s.actions)for(let[e,t]of Object.entries(s.actions))o[e]=(...d)=>t.apply(n,d);o.$reset=()=>{let e=s.state();for(let t of i)n[t].set(e[t]);},o.$snapshot=()=>{let e={};for(let t of i)e[t]=n[t]();return e};let g=new Set;return o.$subscribe=e=>(g.add(e),()=>g.delete(e)),o}function l(){S.clear();}export{p as a,l as b};//# sourceMappingURL=chunk-GWEBEL7E.js.map
2
+ //# sourceMappingURL=chunk-GWEBEL7E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/store.ts"],"names":["storeInstances","defineStore","id","definition","initialState","store","createStoreInstance","stateSignals","stateKeys","key","signal","getterComputeds","getterFn","computed","comp","actionFn","args","fresh","snapshot","subscribers","callback","clearStores"],"mappings":"sCA4EA,IAAMA,CAAAA,CAAiB,IAAI,GAAA,CAQpB,SAASC,EAKdC,CAAAA,CACAC,CAAAA,CACsB,CACtB,OAAO,IAAM,CAEX,GAAIH,CAAAA,CAAe,GAAA,CAAIE,CAAE,CAAA,CACvB,OAAOF,EAAe,GAAA,CAAIE,CAAE,CAAA,CAG9B,IAAME,CAAAA,CAAeD,CAAAA,CAAW,OAAM,CAChCE,CAAAA,CAAQC,EAAoBJ,CAAAA,CAAIE,CAAAA,CAAcD,CAAU,CAAA,CAC9D,OAAAH,CAAAA,CAAe,GAAA,CAAIE,CAAAA,CAAIG,CAAK,EACrBA,CACT,CACF,CAEA,SAASC,CAAAA,CAKPJ,CAAAA,CACAE,EACAD,CAAAA,CACgB,CAEhB,IAAMI,CAAAA,CAAgD,EAAC,CACjDC,EAAY,MAAA,CAAO,IAAA,CAAKJ,CAAY,CAAA,CAE1C,IAAA,IAAWK,KAAOD,CAAAA,CAChBD,CAAAA,CAAaE,CAAG,CAAA,CAAIC,CAAAA,CAAON,CAAAA,CAAaK,CAAG,CAAC,CAAA,CAI9C,IAAME,GAAAA,CAA2D,EAAC,CAClE,GAAIR,CAAAA,CAAW,OAAA,CACb,IAAA,GAAW,CAACM,CAAAA,CAAKG,CAAQ,IAAK,MAAA,CAAO,OAAA,CAAQT,EAAW,OAAO,CAAA,CAC7DQ,IAAgBF,CAAG,CAAA,CAAII,CAAAA,CAAS,IAC7BD,CAAAA,CAAsBL,CAAY,CACrC,CAAA,CAKJ,IAAMF,CAAAA,CAAa,CAAE,GAAA,CAAKH,CAAG,EAG7B,IAAA,IAAWO,CAAAA,IAAOD,CAAAA,CAChBH,CAAAA,CAAMI,CAAG,CAAA,CAAIF,EAAaE,CAAG,CAAA,CAI/B,OAAW,CAACA,CAAAA,CAAKK,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,GAAe,CAAA,CACtDN,CAAAA,CAAMI,CAAG,CAAA,CAAIK,CAAAA,CAIf,GAAIX,CAAAA,CAAW,OAAA,CACb,OAAW,CAACM,CAAAA,CAAKM,CAAQ,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQZ,EAAW,OAAO,CAAA,CAC7DE,EAAMI,CAAG,CAAA,CAAI,IAAIO,CAAAA,GACdD,CAAAA,CAAsB,KAAA,CAAMR,CAAAA,CAAcS,CAAI,CAAA,CAKrDX,EAAM,MAAA,CAAS,IAAM,CACnB,IAAMY,CAAAA,CAAQd,CAAAA,CAAW,OAAM,CAC/B,IAAA,IAAWM,CAAAA,IAAOD,CAAAA,CAChBD,CAAAA,CAAaE,CAAG,EAAE,GAAA,CAAIQ,CAAAA,CAAMR,CAAc,CAAC,EAE/C,EAGAJ,CAAAA,CAAM,SAAA,CAAY,IAAS,CACzB,IAAMa,CAAAA,CAAoC,EAAC,CAC3C,IAAA,IAAWT,CAAAA,IAAOD,CAAAA,CAChBU,CAAAA,CAAST,CAAG,EAAIF,CAAAA,CAAaE,CAAG,CAAA,EAAE,CAEpC,OAAOS,CACT,EAGA,IAAMC,CAAAA,CAAc,IAAI,GAAA,CACxB,OAAAd,EAAM,UAAA,CAAce,CAAAA,GAClBD,CAAAA,CAAY,GAAA,CAAIC,CAAQ,CAAA,CACjB,IAAMD,CAAAA,CAAY,MAAA,CAAOC,CAAQ,CAAA,CAAA,CAGnCf,CACT,CAKO,SAASgB,CAAAA,EAAoB,CAClCrB,CAAAA,CAAe,KAAA,GACjB","file":"chunk-GWEBEL7E.js","sourcesContent":["/**\n * Global state management via defineStore().\n *\n * Stores are singleton signal containers that persist across\n * components. They provide shared state, computed getters,\n * and actions — no external library needed.\n *\n * ```ts\n * const useCounterStore = defineStore('counter', {\n * state: () => ({ count: 0, name: 'Counter' }),\n * getters: {\n * doubled: (state) => state.count() * 2,\n * },\n * actions: {\n * increment() { this.count.update(c => c + 1); },\n * reset() { this.count.set(0); },\n * },\n * });\n *\n * // In any component:\n * const store = useCounterStore();\n * store.count(); // 0\n * store.doubled(); // 0\n * store.increment();\n * store.count(); // 1\n * ```\n */\n\nimport { signal, computed } from './signals.js';\nimport type { Signal, ReadonlySignal } from './signals.js';\n\n// --- Types ---\n\ntype StateFactory<S> = () => S;\n\ntype Getters<S, G> = {\n [K in keyof G]: (state: SignalifiedState<S>) => G[K];\n};\n\ntype Actions<A> = {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n};\n\n/** Maps plain state values to signals */\ntype SignalifiedState<S> = {\n [K in keyof S]: Signal<S[K]>;\n};\n\n/** The store instance returned to consumers */\nexport type Store<S, G, A> = SignalifiedState<S> & {\n [K in keyof G]: ReadonlySignal<G[K]>;\n} & {\n [K in keyof A]: A[K] extends (...args: infer P) => infer R\n ? (...args: P) => R\n : never;\n} & {\n /** Reset all state to initial values */\n $reset(): void;\n /** Subscribe to all state changes */\n $subscribe(callback: (state: S) => void): () => void;\n /** Get a plain snapshot of current state */\n $snapshot(): S;\n /** Store ID */\n $id: string;\n};\n\nexport interface StoreDefinition<S, G, A> {\n state: StateFactory<S>;\n getters?: Getters<S, G>;\n actions?: A;\n}\n\n// --- Store registry (singleton) ---\n\nconst storeInstances = new Map<string, Store<any, any, any>>();\n\n// --- defineStore ---\n\n/**\n * Define a global store. Returns a composable function that\n * always returns the same store instance (singleton).\n */\nexport function defineStore<\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = {},\n A extends Record<string, (...args: any[]) => any> = {},\n>(\n id: string,\n definition: StoreDefinition<S, G, A>,\n): () => Store<S, G, A> {\n return () => {\n // Return existing instance if already created\n if (storeInstances.has(id)) {\n return storeInstances.get(id) as Store<S, G, A>;\n }\n\n const initialState = definition.state();\n const store = createStoreInstance(id, initialState, definition);\n storeInstances.set(id, store);\n return store;\n };\n}\n\nfunction createStoreInstance<\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: any[]) => any>,\n>(\n id: string,\n initialState: S,\n definition: StoreDefinition<S, G, A>,\n): Store<S, G, A> {\n // Create signals for each state property\n const stateSignals: Record<string, Signal<unknown>> = {};\n const stateKeys = Object.keys(initialState);\n\n for (const key of stateKeys) {\n stateSignals[key] = signal(initialState[key]);\n }\n\n // Create computed getters\n const getterComputeds: Record<string, ReadonlySignal<unknown>> = {};\n if (definition.getters) {\n for (const [key, getterFn] of Object.entries(definition.getters)) {\n getterComputeds[key] = computed(() =>\n (getterFn as Function)(stateSignals),\n );\n }\n }\n\n // Build the store object\n const store: any = { $id: id };\n\n // Add state signals\n for (const key of stateKeys) {\n store[key] = stateSignals[key];\n }\n\n // Add getters\n for (const [key, comp] of Object.entries(getterComputeds)) {\n store[key] = comp;\n }\n\n // Bind actions with `this` pointing to the store's state signals\n if (definition.actions) {\n for (const [key, actionFn] of Object.entries(definition.actions)) {\n store[key] = (...args: unknown[]) =>\n (actionFn as Function).apply(stateSignals, args);\n }\n }\n\n // $reset\n store.$reset = () => {\n const fresh = definition.state();\n for (const key of stateKeys) {\n stateSignals[key].set(fresh[key as keyof S]);\n }\n };\n\n // $snapshot\n store.$snapshot = (): S => {\n const snapshot: Record<string, unknown> = {};\n for (const key of stateKeys) {\n snapshot[key] = stateSignals[key]();\n }\n return snapshot as S;\n };\n\n // $subscribe\n const subscribers = new Set<(state: S) => void>();\n store.$subscribe = (callback: (state: S) => void): (() => void) => {\n subscribers.add(callback);\n return () => subscribers.delete(callback);\n };\n\n return store as Store<S, G, A>;\n}\n\n/**\n * Clear all store instances (useful for testing).\n */\nexport function clearStores(): void {\n storeInstances.clear();\n}\n"]}
@@ -0,0 +1,32 @@
1
+ 'use strict';var chunkZE7R72IH_cjs=require('./chunk-ZE7R72IH.cjs');function f(r,e={}){let t=chunkZE7R72IH_cjs.c(false),a=chunkZE7R72IH_cjs.c(false),s=chunkZE7R72IH_cjs.c(!navigator.onLine),i=null;window.addEventListener("online",()=>s.set(false)),window.addEventListener("offline",()=>s.set(true));let u=new Promise((h,l)=>{if(!("serviceWorker"in navigator)){l(new Error("Service workers not supported"));return}navigator.serviceWorker.register(r,{scope:e.scope}).then(n=>{i=n,t.set(true),e.onReady?.(n),h(n),n.addEventListener("updatefound",()=>{let o=n.installing;o&&o.addEventListener("statechange",()=>{o.state==="installed"&&navigator.serviceWorker.controller&&(a.set(true),e.onUpdate?.(n),e.autoReload&&(o.postMessage({type:"SKIP_WAITING"}),window.location.reload()));});});}).catch(n=>{e.onError?.(n),l(n);});});return {registered:()=>t(),updateAvailable:()=>a(),offline:()=>s(),ready:u,async update(){i&&await i.update();},skipWaiting(){i?.waiting&&(i.waiting.postMessage({type:"SKIP_WAITING"}),window.location.reload());},async unregister(){return i?i.unregister():false}}}function v(r){let e=`// Auto-generated service worker by AkashJS
2
+ const CACHE_VERSION = 'v1';
3
+
4
+ self.addEventListener('install', (event) => {
5
+ self.skipWaiting();
6
+ });
7
+
8
+ self.addEventListener('activate', (event) => {
9
+ event.waitUntil(clients.claim());
10
+ });
11
+
12
+ self.addEventListener('message', (event) => {
13
+ if (event.data?.type === 'SKIP_WAITING') {
14
+ self.skipWaiting();
15
+ }
16
+ });
17
+
18
+ self.addEventListener('fetch', (event) => {
19
+ const url = new URL(event.request.url);
20
+ `;for(let t of r){let a=t.match instanceof RegExp?t.match.toString():`new RegExp(${JSON.stringify(t.match.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))})`,s=t.cacheName??"akash-cache";e+=`
21
+ if (${a}.test(url.pathname)) {
22
+ event.respondWith(${p(t.strategy,s)});
23
+ return;
24
+ }
25
+ `;}return e+=`
26
+ // Default: network-first
27
+ event.respondWith(
28
+ fetch(event.request).catch(() => caches.match(event.request))
29
+ );
30
+ });
31
+ `,e}function p(r,e){switch(r){case "cache-first":return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${e}').then(cache => cache.put(event.request, clone)); return response; }))`;case "network-first":return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${e}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;case "stale-while-revalidate":return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${e}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;case "network-only":return "fetch(event.request)";case "cache-only":return "caches.match(event.request)"}}async function y(r,e){return await Notification.requestPermission()!=="granted"?null:await r.pushManager.subscribe({userVisibleOnly:true,applicationServerKey:d(e)})}function d(r){let e="=".repeat((4-r.length%4)%4),t=(r+e).replace(/-/g,"+").replace(/_/g,"/"),a=atob(t);return Uint8Array.from(a,s=>s.charCodeAt(0))}exports.a=f;exports.b=v;exports.c=y;//# sourceMappingURL=chunk-J4TFVNKP.cjs.map
32
+ //# sourceMappingURL=chunk-J4TFVNKP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pwa.ts"],"names":["registerServiceWorker","swUrl","options","registered","signal","updateAvailable","offline","registration","ready","resolve","reject","reg","newWorker","err","generateSWScript","routes","script","route","pattern","cacheName","generateStrategyCode","strategy","subscribePush","vapidPublicKey","urlBase64ToUint8Array","base64String","padding","base64","rawData","char"],"mappings":"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","file":"chunk-J4TFVNKP.cjs","sourcesContent":["/**\n * PWA / Service Worker support.\n *\n * Register service workers, configure caching strategies,\n * handle updates, and manage push notifications.\n *\n * ```ts\n * const sw = registerServiceWorker('/sw.js', {\n * onUpdate: () => toast.info('New version available!'),\n * });\n * sw.ready; // Promise<ServiceWorkerRegistration>\n * sw.update(); // check for updates\n * ```\n */\n\nimport { signal } from './signals.js';\nimport type { ReadonlySignal } from './signals.js';\n\n// =========================================================================\n// Types\n// =========================================================================\n\nexport interface SWOptions {\n /** Callback when a new version is available */\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n /** Callback when the SW is ready */\n onReady?: (registration: ServiceWorkerRegistration) => void;\n /** Callback on registration error */\n onError?: (error: Error) => void;\n /** Auto-reload on update (default: false) */\n autoReload?: boolean;\n /** Scope of the service worker */\n scope?: string;\n}\n\nexport interface SWRegistration {\n /** Whether the SW is registered */\n registered: ReadonlySignal<boolean>;\n /** Whether an update is available */\n updateAvailable: ReadonlySignal<boolean>;\n /** Whether the app is running offline */\n offline: ReadonlySignal<boolean>;\n /** The raw SW registration (available after ready) */\n ready: Promise<ServiceWorkerRegistration>;\n /** Check for updates */\n update(): Promise<void>;\n /** Skip waiting and activate new SW */\n skipWaiting(): void;\n /** Unregister the service worker */\n unregister(): Promise<boolean>;\n}\n\n// =========================================================================\n// Service Worker registration\n// =========================================================================\n\n/**\n * Register a service worker with update detection.\n */\nexport function registerServiceWorker(\n swUrl: string,\n options: SWOptions = {},\n): SWRegistration {\n const registered = signal(false);\n const updateAvailable = signal(false);\n const offline = signal(!navigator.onLine);\n\n let registration: ServiceWorkerRegistration | null = null;\n\n // Track online/offline\n window.addEventListener('online', () => offline.set(false));\n window.addEventListener('offline', () => offline.set(true));\n\n const ready = new Promise<ServiceWorkerRegistration>((resolve, reject) => {\n if (!('serviceWorker' in navigator)) {\n reject(new Error('Service workers not supported'));\n return;\n }\n\n navigator.serviceWorker\n .register(swUrl, { scope: options.scope })\n .then((reg) => {\n registration = reg;\n registered.set(true);\n options.onReady?.(reg);\n resolve(reg);\n\n // Listen for updates\n reg.addEventListener('updatefound', () => {\n const newWorker = reg.installing;\n if (!newWorker) return;\n\n newWorker.addEventListener('statechange', () => {\n if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {\n updateAvailable.set(true);\n options.onUpdate?.(reg);\n\n if (options.autoReload) {\n newWorker.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n }\n });\n });\n })\n .catch((err) => {\n options.onError?.(err);\n reject(err);\n });\n });\n\n return {\n registered: () => registered(),\n updateAvailable: () => updateAvailable(),\n offline: () => offline(),\n ready,\n async update() {\n if (registration) {\n await registration.update();\n }\n },\n skipWaiting() {\n if (registration?.waiting) {\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n window.location.reload();\n }\n },\n async unregister() {\n if (registration) {\n return registration.unregister();\n }\n return false;\n },\n };\n}\n\n// =========================================================================\n// Caching strategies (for SW scripts)\n// =========================================================================\n\nexport type CacheStrategy = 'cache-first' | 'network-first' | 'stale-while-revalidate' | 'network-only' | 'cache-only';\n\nexport interface CacheRoute {\n /** URL pattern to match (string or regex) */\n match: string | RegExp;\n /** Caching strategy */\n strategy: CacheStrategy;\n /** Cache name */\n cacheName?: string;\n /** Max entries in cache */\n maxEntries?: number;\n /** Max age in seconds */\n maxAgeSeconds?: number;\n}\n\n/**\n * Generate a service worker script from cache route configs.\n *\n * ```ts\n * const swScript = generateSWScript([\n * { match: /\\.(?:js|css)$/, strategy: 'cache-first', cacheName: 'assets' },\n * { match: '/api/', strategy: 'network-first', maxAgeSeconds: 300 },\n * { match: /\\.(?:png|jpg|svg)$/, strategy: 'cache-first', cacheName: 'images' },\n * ]);\n * ```\n */\nexport function generateSWScript(routes: CacheRoute[]): string {\n let script = `// Auto-generated service worker by AkashJS\nconst CACHE_VERSION = 'v1';\n\nself.addEventListener('install', (event) => {\n self.skipWaiting();\n});\n\nself.addEventListener('activate', (event) => {\n event.waitUntil(clients.claim());\n});\n\nself.addEventListener('message', (event) => {\n if (event.data?.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\nself.addEventListener('fetch', (event) => {\n const url = new URL(event.request.url);\n`;\n\n for (const route of routes) {\n const pattern = route.match instanceof RegExp\n ? route.match.toString()\n : `new RegExp(${JSON.stringify(route.match.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))})`;\n\n const cacheName = route.cacheName ?? 'akash-cache';\n\n script += `\n if (${pattern}.test(url.pathname)) {\n event.respondWith(${generateStrategyCode(route.strategy, cacheName)});\n return;\n }\n`;\n }\n\n script += `\n // Default: network-first\n event.respondWith(\n fetch(event.request).catch(() => caches.match(event.request))\n );\n});\n`;\n\n return script;\n}\n\nfunction generateStrategyCode(strategy: CacheStrategy, cacheName: string): string {\n switch (strategy) {\n case 'cache-first':\n return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }))`;\n case 'network-first':\n return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;\n case 'stale-while-revalidate':\n return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${cacheName}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;\n case 'network-only':\n return `fetch(event.request)`;\n case 'cache-only':\n return `caches.match(event.request)`;\n }\n}\n\n// =========================================================================\n// Push notifications\n// =========================================================================\n\n/**\n * Request push notification permission and subscribe.\n */\nexport async function subscribePush(\n registration: ServiceWorkerRegistration,\n vapidPublicKey: string,\n): Promise<PushSubscription | null> {\n const permission = await Notification.requestPermission();\n if (permission !== 'granted') return null;\n\n const subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(vapidPublicKey),\n });\n\n return subscription;\n}\n\nfunction urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const rawData = atob(base64);\n return Uint8Array.from(rawData, (char) => char.charCodeAt(0));\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkZE7R72IH_cjs=require('./chunk-ZE7R72IH.cjs');var g=class{entry;constructor(e,n){this.entry={value:e,timestamp:Date.now(),peerId:n};}get value(){return this.entry.value}get timestamp(){return this.entry.timestamp}set(e,n){let o=Date.now();return n===this.entry.peerId||o>this.entry.timestamp||o===this.entry.timestamp&&n>this.entry.peerId?(this.entry={value:e,timestamp:Math.max(o,this.entry.timestamp+1),peerId:n},true):false}merge(e){return e.timestamp>this.entry.timestamp||e.timestamp===this.entry.timestamp&&e.peerId>this.entry.peerId?(this.entry=e,true):false}toEntry(){return {...this.entry}}};function I(i){let e=null,n=[],o=[];return {send(t){e?.send(JSON.stringify({type:"op",room:i.room,...t}));},onReceive(t){return n.push(t),()=>{let s=n.indexOf(t);s!==-1&&n.splice(s,1);}},onPresence(t){return o.push(t),()=>{let s=o.indexOf(t);s!==-1&&o.splice(s,1);}},sendPresence(t){e?.send(JSON.stringify({type:"presence",room:i.room,data:t}));},connect(){e=new WebSocket(i.url,i.protocols),e.onmessage=t=>{try{let s=JSON.parse(t.data);if(s.type==="op")for(let p of n)p(s);else if(s.type==="presence")for(let p of o)p(s.peerId,s.data);}catch{}},e.onopen=()=>{e?.send(JSON.stringify({type:"join",room:i.room}));};},disconnect(){e?.close(),e=null;}}}function h(){let i=[];return {send(e){for(let n of i)n(e);},onReceive(e){return i.push(e),()=>{let n=i.indexOf(e);n!==-1&&i.splice(n,1);}},connect(){},disconnect(){}}}var w=0;function O(i,e,n={}){let o=n.peerId??`peer-${++w}-${Date.now()}`,t=n.transport??h(),s=new Map,p={};for(let[r,c]of Object.entries(e))s.set(r,new g(c,o)),p[r]=chunkZE7R72IH_cjs.c(c);let l={};for(let r of Object.keys(e)){let c=p[r],y=s.get(r),a=(()=>c());a.set=u=>{y.set(u,o),c.set(u),t.send({type:"set",key:r,value:u,timestamp:y.timestamp,peerId:o});},a.update=u=>{a.set(u(c()));},a.peek=()=>c.peek(),l[r]=a;}let S=chunkZE7R72IH_cjs.c([]),m=chunkZE7R72IH_cjs.c(false),k=chunkZE7R72IH_cjs.c({}),f=chunkZE7R72IH_cjs.c(new Map),v=t.onReceive(r=>{r.type==="set"&&s.has(r.key)&&s.get(r.key).merge({value:r.value,timestamp:r.timestamp,peerId:r.peerId})&&p[r.key].set(r.value);}),T=t.onPresence?.((r,c)=>{f.update(y=>{let a=new Map(y);return a.set(r,c),a});});return {state:l,peers:()=>S(),presence:k,peerPresence:()=>f(),peerId:o,connected:()=>m(),connect(){t.connect(),m.set(true);},disconnect(){t.disconnect(),m.set(false);},dispose(){v(),T?.(),t.disconnect();}}}exports.a=g;exports.b=I;exports.c=h;exports.d=O;//# sourceMappingURL=chunk-KI5MVV64.cjs.map
2
+ //# sourceMappingURL=chunk-KI5MVV64.cjs.map