sigment 1.2.10 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ssr.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import A from"fs";import f from"fs/promises";import i from"path";import{pathToFileURL as R,fileURLToPath as F}from"url";import{execSync as v}from"child_process";import{createRequire as q}from"module";var M=q(import.meta.url),j=F(import.meta.url),rt=i.dirname(j),k={COMPONENTS_PATH:"src/components",HTML_FOLDER_PATH:"src/html",OUT_DIR:"dist"},E=i.resolve(process.cwd(),"ssr.config.js"),C={};try{await A.promises.access(E);let t=await import(R(E).href);C=t.default||t}catch{console.warn("\u26A0\uFE0F No ssr.config.js found, using defaults")}var m={...k,...C};function $(){return parseInt(process.versions.node.split(".")[0],10)<20?"4":"latest"}function P(t,e="latest"){try{M.resolve(t),console.log(`\u2705 ${t} is already installed.`)}catch{console.log(`\u{1F4E6} ${t} not found, installing ${e}...`),v(`npm install ${t}@${e}`,{stdio:"inherit"}),console.log(`\u2705 ${t} installed successfully.`),console.log("\u{1F501} Restarting script to load newly installed modules..."),v(`node "${j}"`,{stdio:"inherit"}),process.exit()}}P("vite",$());P("jsdom");var I=M.resolve("vite"),S=await import(R(I).href),{build:U}=S.build?S:S.default,G=m.COMPONENTS_PATH.split("/")[0]||m.COMPONENTS_PATH,V=m.OUT_DIR.split("/")[0]||m.OUT_DIR,Y=i.resolve("./"+G),T=i.resolve("./"+V);A.mkdirSync(T,{recursive:!0});function x(t){let e="";for(;t>=0;)e=String.fromCharCode(t%26+65)+e,t=Math.floor(t/26)-1;return e}async function B(){await U({build:{minify:!0,rollupOptions:{input:i.join(Y,"Main.js"),output:{dir:T,entryFileNames:"bundle.js",chunkFileNames:"chunks/chunk-[name]-[hash].js",assetFileNames:"assets/[name]-[hash][extname]"}}},plugins:[{name:"component-map-generator",generateBundle(t,e){let s={},n={},o=0;for(let a of Object.values(e))if(a.type==="chunk"){let r=x(o++);s[a.name]=r,n[r]=a.name}let c={...s,...n},l=`
2
+ import g from"fs";import h from"fs/promises";import a from"path";import{pathToFileURL as R,fileURLToPath as q}from"url";import{execSync as v}from"child_process";import{createRequire as $}from"module";var C=$(import.meta.url),M=q(import.meta.url),ie=a.dirname(M),I={COMPONENTS_PATH:"src/components",HTML_FOLDER_PATH:"src/html",OUT_DIR:"dist"},E=a.resolve(process.cwd(),"ssr.config.js"),j={};try{await g.promises.access(E);let e=await import(R(E).href);j=e.default||e}catch{console.warn("\u26A0\uFE0F No ssr.config.js found, using defaults")}var f={...I,...j};function U(){return parseInt(process.versions.node.split(".")[0],10)<20?"4":"latest"}function P(e,t="latest"){try{C.resolve(e),console.log(`\u2705 ${e} is already installed.`)}catch{console.log(`\u{1F4E6} ${e} not found, installing ${t}...`),v(`npm install ${e}@${t}`,{stdio:"inherit"}),console.log(`\u2705 ${e} installed successfully.`),console.log("\u{1F501} Restarting script to load newly installed modules..."),v(`node "${M}"`,{stdio:"inherit"}),process.exit()}}P("vite",U());P("jsdom");var G=C.resolve("vite"),T=await import(R(G).href),{build:V}=T.build?T:T.default,Y=f.COMPONENTS_PATH.split("/")[0]||f.COMPONENTS_PATH,x=f.OUT_DIR.split("/")[0]||f.OUT_DIR,B=a.resolve("./"+Y),b=a.resolve("./"+x);g.mkdirSync(b,{recursive:!0});function J(e){let t="";for(;e>=0;)t=String.fromCharCode(e%26+65)+t,e=Math.floor(e/26)-1;return t}async function W(){await V({build:{minify:!0,rollupOptions:{input:a.join(B,"Main.js"),output:{dir:b,entryFileNames:"bundle.js",chunkFileNames:"chunks/chunk-[name]-[hash].js",assetFileNames:"assets/[name]-[hash][extname]"}}},plugins:[{name:"component-map-generator",generateBundle(e,t){let r={},o={},n=0;for(let i of Object.values(t))if(i.type==="chunk"){let s=J(n++);r[i.name]=s,o[s]=i.name}let c={...r,...o},m=`
3
3
 
4
4
  // --- bidirectional component map ---
5
5
  const rvs_map_sigment = ${JSON.stringify(c,null,2)};
6
6
  export { rvs_map_sigment };
7
- `;A.writeFileSync(i.join(T,"component-map.json"),JSON.stringify(c,null,2));let d=Object.values(e).find(a=>a.type==="chunk"&&a.isEntry);d&&(d.code+=l),console.log("\u2705 forward map saved to component-map.json"),console.log("\u2705 bidirectional rvs_map_sigment embedded into bundle.js")}}]}),console.log("\u2705 Build completed! bundle.js + chunks are ready in dist/")}var{createServer:J}=await import("vite"),{JSDOM:O}=await import("jsdom"),b=m.HTML_FOLDER_PATH,W=m.COMPONENTS_PATH,D=m.OUT_DIR;async function H(t){let e=[];for(let s of await f.readdir(t,{withFileTypes:!0})){let n=i.join(t,s.name);s.isDirectory()?s.name!=="layouts"&&e.push(...await H(n)):s.isFile()&&s.name.endsWith(".html")&&e.push(n)}return e}async function z(t,e,s,n={}){globalThis.__CURRENT_COMPONENT__=e,globalThis.__SSR_SIGNAL_REGISTRY__||={},globalThis.__HANDLER_REGISTRY__||={};let o=await t.ssrLoadModule(`/${W}/${e}.js`),c=typeof o.default=="function"?await o.default.call(s.defaultView,n):`Missing render fn in ${e}`,l=s.createElement("div");l.innerHTML=c.trim();let d=null;for(let r of l.childNodes)if(r.nodeType===1){d=r;break}d&&d.setAttribute("data-component",e);let a=s.createDocumentFragment();for(;l.firstChild;)a.appendChild(l.firstChild);return a}async function K(t,e){globalThis.__SSR_SIGNAL_REGISTRY__={},globalThis.__HANDLER_REGISTRY__={},globalThis.__SSR_EVENT_MAP__={};let n=new O(await f.readFile(e,"utf-8")).window.document,o,c=n.querySelector("layout");if(c){let r=c.getAttribute("data-layout");if(!r)throw new Error(`No data-layout in ${e}`);let h=i.resolve(b,r),u=await f.readFile(h,"utf-8");o=new O(u).window.document,c.remove();let p=n.querySelector("description")?.getAttribute("data-description");p&&o.querySelector('meta[name="description"]')?.setAttribute("content",p);let N=n.querySelector("keywords")?.getAttribute("data-keywords");N&&o.querySelector('meta[name="keywords"]')?.setAttribute("content",N),n.querySelectorAll("[data-part]").forEach(y=>{let g=y.getAttribute("data-part"),w=o.querySelector(`[data-part="${g}"]`);if(w){w.innerHTML="";for(let L of y.childNodes)w.appendChild(o.importNode(L,!0))}}),n.querySelectorAll("script[type='module']").forEach(y=>{let g=y.getAttribute("src");g&&!o.querySelector(`script[src="${g}"]`)&&o.body.appendChild(y.cloneNode(!0))})}else o=n;let l=o.querySelectorAll("[data-component][runAtServer]");for(let r of l){let h=r.getAttribute("data-component"),u={};for(let p of r.attributes)p.name.startsWith("data-prop-")&&(u[p.name.slice(10)]=p.value);let _=await z(t,h,o,u);r.replaceWith(_)}let d=i.join(D,"component-map.json"),a=JSON.parse(await f.readFile(d,"utf-8"));return o.querySelectorAll("[data-component]").forEach(r=>{let h=r.getAttribute("data-component"),u=Object.keys(a).find(_=>_.toLowerCase()===h.toLowerCase());u&&(console.log("componentMap",a[u]),r.setAttribute("data-component",a[u]))}),o.querySelectorAll("layout, description, keywords").forEach(r=>r.remove()),`<!DOCTYPE html>
8
- `+o.documentElement.outerHTML}async function Q(){let t=await J({server:{middlewareMode:!0},root:process.cwd(),ssr:{noExternal:!0}}),e=await H(b);for(let s of e){let n=i.join(D,i.relative(b,s));await f.mkdir(i.dirname(n),{recursive:!0}),await f.writeFile(n,await K(t,s),"utf-8")}await t.close()}(async()=>{try{await B(),await Q().catch(t=>{console.error(t),process.exit(1)}),console.log("\u{1F389} All components built and HTML rendered successfully!")}catch(t){console.error("\u274C Build failed:",t),process.exit(1)}})();
7
+ `;g.writeFileSync(a.join(b,"component-map.json"),JSON.stringify(c,null,2));let l=Object.values(t).find(i=>i.type==="chunk"&&i.isEntry);l&&(l.code+=m),console.log("\u2705 forward map saved to component-map.json"),console.log("\u2705 bidirectional rvs_map_sigment embedded into bundle.js")}}]}),console.log("\u2705 Build completed! bundle.js + chunks are ready in dist/")}var{createServer:z}=await import("vite"),{JSDOM:O}=await import("jsdom"),A=f.HTML_FOLDER_PATH,D=f.COMPONENTS_PATH,L=f.OUT_DIR;async function F(e){let t=[];for(let r of await h.readdir(e,{withFileTypes:!0})){let o=a.join(e,r.name);r.isDirectory()?r.name!=="layouts"&&t.push(...await F(o)):r.isFile()&&r.name.endsWith(".html")&&t.push(o)}return t}function H(e,t={}){let r=g.readdirSync(e,{withFileTypes:!0});for(let o of r){let n=a.join(e,o.name);if(o.isDirectory())H(n,t);else if(o.isFile()&&o.name.endsWith(".js")){let m=a.basename(o.name,".js").toLowerCase();t[m]="/"+n.replace(/\\/g,"/")}}return t}var K=H(D);async function Q(e,t,r,o={}){globalThis.__CURRENT_COMPONENT__=t,globalThis.__SSR_SIGNAL_REGISTRY__||={},globalThis.__HANDLER_REGISTRY__||={};let n=K[t.toLowerCase()];if(!n)throw new Error(`Component "${t}" not found in ${D}`);let c=await e.ssrLoadModule(n),m=typeof c.default=="function"?await c.default.call(r.defaultView,o):`Missing render fn in ${t}`,l=r.createElement("div");l.innerHTML=m.trim();let i=null;for(let d of l.childNodes)if(d.nodeType===1){i=d;break}i&&i.setAttribute("data-component",t);let s=r.createDocumentFragment();for(;l.firstChild;)s.appendChild(l.firstChild);return s}async function X(e,t){globalThis.__SSR_SIGNAL_REGISTRY__={},globalThis.__HANDLER_REGISTRY__={},globalThis.__SSR_EVENT_MAP__={};let o=new O(await h.readFile(t,"utf-8")).window.document,n,c=o.querySelector("layout");if(c){let s=c.getAttribute("data-layout");if(!s)throw new Error(`No data-layout in ${t}`);let d=a.resolve(A,s),u=await h.readFile(d,"utf-8");n=new O(u).window.document,c.remove();let p=o.querySelector("description")?.getAttribute("data-description");p&&n.querySelector('meta[name="description"]')?.setAttribute("content",p);let N=o.querySelector("keywords")?.getAttribute("data-keywords");N&&n.querySelector('meta[name="keywords"]')?.setAttribute("content",N),o.querySelectorAll("[data-part]").forEach(y=>{let w=y.getAttribute("data-part"),S=n.querySelector(`[data-part="${w}"]`);if(S){S.innerHTML="";for(let k of y.childNodes)S.appendChild(n.importNode(k,!0))}}),o.querySelectorAll("script[type='module']").forEach(y=>{let w=y.getAttribute("src");w&&!n.querySelector(`script[src="${w}"]`)&&n.body.appendChild(y.cloneNode(!0))})}else n=o;let m=n.querySelectorAll("[data-component][runAtServer]");for(let s of m){let d=s.getAttribute("data-component"),u={};for(let p of s.attributes)p.name.startsWith("data-prop-")&&(u[p.name.slice(10)]=p.value);let _=await Q(e,d,n,u);s.replaceWith(_)}let l=a.join(L,"component-map.json"),i=JSON.parse(await h.readFile(l,"utf-8"));return n.querySelectorAll("[data-component]").forEach(s=>{let d=s.getAttribute("data-component"),u=Object.keys(i).find(_=>_.toLowerCase()===d.toLowerCase());u&&(console.log("componentMap",i[u]),s.setAttribute("data-component",i[u]))}),n.querySelectorAll("layout, description, keywords").forEach(s=>s.remove()),`<!DOCTYPE html>
8
+ `+n.documentElement.outerHTML}async function Z(){let e=await z({server:{middlewareMode:!0},root:process.cwd(),ssr:{noExternal:!0}}),t=await F(A);for(let r of t){let o=a.join(L,a.relative(A,r));await h.mkdir(a.dirname(o),{recursive:!0}),await h.writeFile(o,await X(e,r),"utf-8")}await e.close()}(async()=>{try{await W(),await Z().catch(e=>{console.error(e),process.exit(1)}),console.log("\u{1F389} All components built and HTML rendered successfully!")}catch(e){console.error("\u274C Build failed:",e),process.exit(1)}})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigment",
3
- "version": "1.2.10",
3
+ "version": "1.3.1",
4
4
  "description": "A lightweight reactive JavaScript framework built with signals and vanilla JS — no virtual DOM, no JSX, no transpilation.",
5
5
  "main": "./dist/index.js",
6
6
  "repository": {
package/types/index.d.ts CHANGED
@@ -14,8 +14,10 @@ export type Route = {
14
14
 
15
15
 
16
16
  export type RoutesMap = {
17
- fallback?: string;
18
- } & Record<Exclude<string, 'fallback'>, Route>;
17
+ fallback?: string | Route;
18
+ } & {
19
+ [K in string as K extends 'fallback' ? never : K]: Route;
20
+ };
19
21
 
20
22
 
21
23
  export function NavigateTo(path: string): Promise<void>;