@jxsuite/compiler 0.26.0 → 0.26.2
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/cli.js +1 -1
- package/package.json +5 -5
- package/src/site/image-transform.ts +1 -0
package/dist/cli.js
CHANGED
|
@@ -443,7 +443,7 @@ globstar while`,Z,B,U,F,V),this.matchOne(Z.slice(B),U.slice(F),X))return this.de
|
|
|
443
443
|
*/var Ki=E1("node:events"),MU=qU(),G4=f4(),{runtimePlatformArch:zi}=YW(),k0=e8(),CD=zi(),NW=k0.libvipsVersion(),U6=k0.format();U6.heif.output.alias=["avif","heic"];U6.jpeg.output.alias=["jpe","jpg"];U6.tiff.output.alias=["tif"];U6.jp2k.output.alias=["j2c","j2k","jp2","jpx"];var Bi={nearest:"nearest",bilinear:"bilinear",bicubic:"bicubic",locallyBoundedBicubic:"lbb",nohalo:"nohalo",vertexSplitQuadraticBasisSpline:"vsqbs"},N3={vips:NW.semver};if(!NW.isGlobal)if(!NW.isWasm)try{N3=E1(`@img/sharp-${CD}/versions`)}catch(Z){try{N3=E1(`@img/sharp-libvips-${CD}/versions`)}catch(U){}}else try{N3=(()=>{throw new Error("Cannot require module "+"@img/sharp-wasm32/versions");})()}catch(Z){}N3.sharp=qW().version;if(N3.heif&&U6.heif)U6.heif.input.fileSuffix=[".avif"],U6.heif.output.alias=["avif"];function ID(Z){if(G4.bool(Z))if(Z)return k0.cache(50,20,100);else return k0.cache(0,0,0);else if(G4.object(Z))return k0.cache(Z.memory,Z.files,Z.items);else return k0.cache()}ID(!0);function Fi(Z){return k0.concurrency(G4.integer(Z)?Z:null)}if(MU.familySync()===MU.GLIBC&&!k0._isUsingJemalloc())k0.concurrency(1);else if(MU.familySync()===MU.MUSL&&k0.concurrency()===1024)k0.concurrency(E1("node:os").availableParallelism());var Vi=new Ki.EventEmitter;function Li(){return k0.counters()}function Ri(Z){return k0.simd(G4.bool(Z)?Z:null)}function wi(Z){if(G4.object(Z))if(Array.isArray(Z.operation)&&Z.operation.every(G4.string))k0.block(Z.operation,!0);else throw G4.invalidParameterError("operation","Array<string>",Z.operation);else throw G4.invalidParameterError("options","object",Z)}function Gi(Z){if(G4.object(Z))if(Array.isArray(Z.operation)&&Z.operation.every(G4.string))k0.block(Z.operation,!1);else throw G4.invalidParameterError("operation","Array<string>",Z.operation);else throw G4.invalidParameterError("options","object",Z)}ED.exports=(Z)=>{Z.cache=ID,Z.concurrency=Fi,Z.counters=Li,Z.simd=Ri,Z.format=U6,Z.interpolators=Bi,Z.versions=N3,Z.queue=Vi,Z.block=wi,Z.unblock=Gi}});var $W=Y1((BJ1,AD)=>{/*!
|
|
444
444
|
Copyright 2013 Lovell Fuller and others.
|
|
445
445
|
SPDX-License-Identifier: Apache-2.0
|
|
446
|
-
*/var P5=pj();ij()(P5);tj()(P5);ZD()(P5);QD()(P5);GD()(P5);ND()(P5);PD()(P5);_D()(P5);AD.exports=P5});import{createHash as TD}from"node:crypto";import{readFileSync as Mi,mkdirSync as Ni,existsSync as $i}from"node:fs";import{resolve as jW,basename as ji,extname as Di}from"node:path";import{createRequire as Oi}from"node:module";async function xD(){if($3)return $3;try{return $3=(await Promise.resolve().then(() => Q6($W(),1))).default,$3}catch{}try{return $3=Oi(jW(process.cwd(),"package.json"))("sharp"),$3}catch(Z){throw Error(`Sharp is required for image optimization but failed to load: ${Z.message}`)}}async function Ci(Z){let X=await(await xD())(Z).metadata();return{width:X.width??0,height:X.height??0,format:X.format??"unknown"}}function NU(Z){let U=Mi(Z);return TD("md5").update(U).digest("hex").slice(0,8)}function DW(Z){let U=JSON.stringify({widths:Z.widths,formats:Z.formats,quality:Z.quality});return TD("md5").update(U).digest("hex").slice(0,8)}function Ii(Z,U,X,J){return`${Z}-${U}-${X}.${J}`}async function SD(Z,U,X){let J=await xD(),q=await Ci(Z),Q=NU(Z),Y=ji(Z,Di(Z)),W=jW(U,"_optimized");Ni(W,{recursive:!0});let H=[],K=X.widths.filter((F)=>F<=q.width);if(K.length===0||!K.includes(q.width))K.push(q.width);K.sort((F,V)=>F-V);let z=[];for(let F of K)for(let V of X.formats){let w=Ii(Y,F,Q,V),M=`/${Pi}/${w}`,N=jW(W,w);if(H.push({width:F,format:V,outputPath:M,absolutePath:N}),$i(N))continue;let $=X.quality[V]??80,O=J(Z).resize(F).toFormat(V,{quality:$}).toFile(N).then(()=>{});z.push(O)}let B=4;for(let F=0;F<z.length;F+=B)await Promise.all(z.slice(F,F+B));return{original:{width:q.width,height:q.height,format:q.format},variants:H,contentHash:Q}}function OW(Z,U){return Z.filter((X)=>X.format===U).map((X)=>`${X.outputPath} ${X.width}w`).join(", ")}var $3=null,Pi="images/_optimized";var PW=()=>{};import{readFileSync as Ei,writeFileSync as _i,mkdirSync as Ai,existsSync as Ti}from"node:fs";import{resolve as $U,basename as xi}from"node:path";import{execSync as Si}from"node:child_process";import{tmpdir as bi}from"node:os";function j3(Z){if(Z7===void 0)try{let U=Si("npm config get cache",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],cwd:bi()}).trim();Z7=U&&U!=="undefined"?U:null}catch{Z7=null}if(Z7)return $U(Z7,"jxsuite-images",xi(Z));return $U(Z,".cache/images")}function bD(Z){let U=$U(j3(Z),"manifest.json");if(!Ti(U))return{version:1,entries:{}};try{return JSON.parse(Ei(U,"utf8"))}catch{return{version:1,entries:{}}}}function gD(Z,U){let X=j3(Z);Ai(X,{recursive:!0}),_i($U(X,"manifest.json"),JSON.stringify(U,null,2),"utf8")}function yD(Z,U){let X=Z.entries[U];if(!X)return null;return X.manifest}function vD(Z,U,X,J){Z.entries[U]={source:X,manifest:J,timestamp:Date.now()}}var Z7=void 0;var CW=P(()=>{PW()});import{existsSync as IW}from"node:fs";import{resolve as kD,extname as gi,basename as yi}from"node:path";async function hD(Z,U,X,J,q){let Q=`${NU(Z)}:${DW(X)}`,Y=yD(q,Q);if(Y){if(Y.variants.every((K)=>IW(K.absolutePath)))return Y}if(!Y)console.log(` Optimizing ${yi(Z)}...`);let W=await SD(Z,j3(J),X);return vD(q,Q,U,W),W}function mD(Z){if(typeof Z!=="string")return!0;if(Z.includes("${"))return!0;if(ki.some((U)=>Z.startsWith(U)))return!0;if(vi.has(gi(Z).toLowerCase()))return!0;return!1}function uD(Z,U){if(Z.startsWith("/"))return kD(U,"public",Z.slice(1));return kD(U,Z)}async function fD(Z,U,X,J){let q=new Map;if(!U.optimize)return{imageRefs:q};return await lD(Z,U,X,J,q),{imageRefs:q}}async function lD(Z,U,X,J,q){if(!Z||typeof Z!=="object")return;if(Z.tagName==="img")await hi(Z,U,X,J,q);if(typeof Z.innerHTML==="string"&&Z.innerHTML.includes("<img"))Z.innerHTML=await pi(Z.innerHTML,U,X,J,q);if(Array.isArray(Z.children))for(let Q of Z.children){if(typeof Q==="string")continue;await lD(Q,U,X,J,q)}}async function hi(Z,U,X,J,q){if(!Z.attributes)Z.attributes={};let Q=Z.attributes.src??Z.src;if(mD(Q))return;if(Z.attributes["data-no-optimize"]!==void 0)return;let Y=uD(Q,X);if(!IW(Y))return;let W=q.get(Y);if(!W)W=await hD(Y,Q,U,X,J),q.set(Y,W);let H=U.formats.includes("avif")?"avif":U.formats[0],K=OW(W.variants,H);if(K)Z.attributes.srcset=K,Z.attributes.sizes=Z.attributes.sizes??U.sizes;if(!Z.attributes.width&&W.original?.width)Z.attributes.width=String(W.original.width);if(!Z.attributes.height&&W.original?.height)Z.attributes.height=String(W.original.height);if(U.lazyLoad&&Z.attributes.loading!=="eager")Z.attributes.loading="lazy",Z.attributes.decoding="async"}async function pi(Z,U,X,J,q){let Q=[];for(let W of Z.matchAll(mi)){let H=W[0],K=W[1];if(fi.test(K))continue;if(li.test(K))continue;let z=K.match(ui);if(!z)continue;let B=z[1];if(mD(B))continue;let F=uD(B,X);if(!IW(F))continue;let V=q.get(F);if(!V)V=await hD(F,B,U,X,J),q.set(F,V);let w=U.formats.includes("avif")?"avif":U.formats[0],M=OW(V.variants,w);if(!M)continue;let N=` srcset="${M}" sizes="${U.sizes}"`;if(!/\bwidth=/.test(K)&&V.original?.width)N+=` width="${V.original.width}"`;if(!/\bheight=/.test(K)&&V.original?.height)N+=` height="${V.original.height}"`;if(U.lazyLoad&&!/\bloading="eager"/.test(K)){if(!/\bloading=/.test(K))N+=' loading="lazy"';if(!/\bdecoding=/.test(K))N+=' decoding="async"'}Q.push({match:H,replacement:`<img${K}${N}>`})}let Y=Z;for(let{match:W,replacement:H}of Q)Y=Y.replace(W,H);return Y}var vi,ki,mi,ui,fi,li;var pD=P(()=>{PW();CW();vi=new Set([".svg",".gif"]),ki=["http://","https://","data:","//"];mi=/<img\b([^>]*)>/gi,ui=/\bsrc="([^"]*)"/,fi=/\bsrcset="/,li=/\bdata-no-optimize\b/});var aD={};Y6(aD,{buildSite:()=>ii});import{readFileSync as OU,writeFileSync as a4,copyFileSync as dD,mkdirSync as C5,existsSync as Z9,rmSync as di,cpSync as EW,readdirSync as ci}from"node:fs";import{resolve as m1,dirname as D3,join as DU}from"node:path";async function ii(Z,U={}){let{clean:X=!0,verbose:J=!1}=U,q=[],Q=J?console.log.bind(console):()=>{};Q("Loading project.json...");let{config:Y}=PM(Z),W=m1(Z,Y.build.outDir),H=m1(Z,"pages"),K=m1(Z,"public"),z=Y.build.trailingSlash??"always";if(X&&Z9(W))di(W,{recursive:!0,force:!0});if(C5(W,{recursive:!0}),!Z9(H))throw Error(`pages/ directory not found in ${Z}`);Q("Discovering pages...");let B=IM(H);Q(` Found ${B.length} page(s)`),Q("Loading content types...");let F=await eN(Z,Y);if(F.size>0){Q(` Loaded ${F.size} content type(s): ${[...F.keys()].join(", ")}`);let u=dY(Z,Y);if(u)Z$(F,u.config)}let V=await _M(B,Z,F);Q(` ${V.length} route(s) after expansion`);let w=0,M=m1(Z,"components"),N=[],$=new Map,O=new Map;if(Z9(M)){Q("Compiling components...");let u=ci(M).filter((f)=>f.endsWith(".json")||f.endsWith(".md")),T=m1(W,"components");C5(T,{recursive:!0});for(let f of u)try{let p=m1(M,f),y=await SZ(p,{$media:Y.$media});for(let U1 of y.files){let B1=U1.path.includes("/")?U1.path.split("/").pop():U1.path;if(a4(m1(T,B1),U1.content,"utf8"),U1.tagName)N.push(U1.tagName);w++}let A=p.endsWith(".md")?(await Promise.resolve().then(() => (p6(),y8))).transpileJxMarkdown(OU(p,"utf8")):JSON.parse(OU(p,"utf8"));if(A.tagName){O.set(A.tagName,A);let U1=cW(A.tagName,A.style,A,Y.$media??{});if(U1)$.set(A.tagName,U1),a4(m1(T,`${A.tagName}.css`),U1,"utf8"),w++}}catch(p){let y=p;q.push(`Error compiling component ${f}: ${y.message}`),console.error(`Error compiling component ${f}: ${y.message}`)}Q(` Compiled ${N.length} component(s): ${N.join(", ")}`)}let C=[];if(Y.build.adapter)for(let[,u]of O){let T=W7(u);for(let f of T){let p="./components/"+f.src.replace(/^\.\//,"");C.push({exportName:f.exportName,src:p})}}let b=Y.images.optimize?bD(Z):null;for(let u of V)try{Q(` Compiling ${u.urlPattern} ...`);let T=await ri(u,Y,Z,F,b,O),f=new Set;for(let[y,A]of O)if(yU(A))f.add(y);if(N.length>0)T.html=si(T.html,N,$,f);let p=rD(u.urlPattern,W,z);C5(D3(p),{recursive:!0}),a4(p,T.html,"utf8"),w++;try{let y=z$(T.doc,O);if(y.content){let A=p.replace(/\.html$/,".md");a4(A,y.content,"utf8"),w++}}catch(y){let A=y;q.push(`Error exporting markdown for ${u.urlPattern}: ${A.message}`)}for(let y of T.files){let A=m1(D3(p),y.path);C5(D3(A),{recursive:!0}),a4(A,y.content,"utf8"),w++}if(T.serverHandler){let y=m1(D3(p),"_server.js");a4(y,T.serverHandler,"utf8"),w++}}catch(T){let f=T,p=`Error compiling ${u.urlPattern}: ${f.message}`;q.push(p),console.error(p)}if(b&&Y.images.optimize){gD(Z,b);let u=m1(j3(Z),"_optimized");if(Z9(u)){let f=m1(W,"images/_optimized");C5(f,{recursive:!0}),EW(u,f,{recursive:!0})}let T=Object.keys(b.entries).length;if(T>0)Q(` Optimized ${T} image(s)`)}if(Y.build.adapter){let u=Y.build.adapter;Q("Generating site-wide server worker...");let T=new Map;for(let f of C)if(!T.has(f.exportName))T.set(f.exportName,f);if(u==="cloudflare-pages"){let f=NX([...T.values()]);for(let[y,A]of f){let U1=m1(W,y);C5(m1(U1,".."),{recursive:!0}),a4(U1,A,"utf8"),w++}let p=m1(W,"components");C5(p,{recursive:!0});for(let{src:y}of T.values()){let A=m1(Z,y.replace(/^\.\//,"")),U1=m1(p,y.replace(/^\.\/components\//,""));if(Z9(A))dD(A,U1)}if(f.size>0)Q(` Generated ${f.size} Pages function(s) in dist/functions/`)}else{let f=MX([...T.values()],{adapter:u});if(f){let p=m1(W,"worker.js");a4(p,f,"utf8"),w++,Q(` Generated dist/worker.js (${T.size} server function(s))`);let y=m1(W,"components");for(let{src:A}of T.values()){let U1=m1(Z,A.replace(/^\.\//,"")),B1=m1(y,A.replace(/^\.\/components\//,""));if(Z9(U1))dD(U1,B1)}}}}if(Y.redirects&&Object.keys(Y.redirects).length>0){Q("Generating redirects...");let u=ei(Y.redirects,W);w+=u}if(Z9(K))Q("Copying public/ assets..."),EW(K,W,{recursive:!0});if(Y.copy){Q("Copying mapped files...");for(let[u,T]of Object.entries(Y.copy)){let f=m1(Z,u),p=m1(W,T);C5(D3(p),{recursive:!0}),EW(f,p)}}if(Q(`
|
|
446
|
+
*/var P5=pj();ij()(P5);tj()(P5);ZD()(P5);QD()(P5);GD()(P5);ND()(P5);PD()(P5);_D()(P5);AD.exports=P5});import{createHash as TD}from"node:crypto";import{readFileSync as Mi,mkdirSync as Ni,existsSync as $i}from"node:fs";import{resolve as jW,basename as ji,extname as Di}from"node:path";import{createRequire as Oi}from"node:module";async function xD(){if($3)return $3;try{return $3=(await Promise.resolve().then(() => Q6($W(),1))).default,$3}catch{}try{return $3=Oi(jW(process.cwd(),"package.json"))("sharp"),$3}catch(Z){throw Error(`Sharp is required for image optimization but failed to load: ${Z.message}`)}}async function Ci(Z){let X=await(await xD())(Z).metadata();return{width:X.width??0,height:X.height??0,format:X.format??"unknown"}}function NU(Z){let U=Mi(Z);return TD("md5").update(U).digest("hex").slice(0,8)}function DW(Z){let U=JSON.stringify({widths:Z.widths,formats:Z.formats,quality:Z.quality});return TD("md5").update(U).digest("hex").slice(0,8)}function Ii(Z,U,X,J){return`${Z}-${U}-${X}.${J}`}async function SD(Z,U,X){let J=await xD(),q=await Ci(Z),Q=NU(Z),Y=ji(Z,Di(Z)),W=jW(U,"_optimized");Ni(W,{recursive:!0});let H=[],K=X.widths.filter((F)=>F<=q.width);if(K.length===0||!K.includes(q.width))K.push(q.width);K.sort((F,V)=>F-V);let z=[];for(let F of K)for(let V of X.formats){let w=Ii(Y,F,Q,V),M=`/${Pi}/${w}`,N=jW(W,w);if(H.push({width:F,format:V,outputPath:M,absolutePath:N}),$i(N))continue;let $=X.quality[V]??80,O=J(Z).resize(F).toFormat(V,{quality:$}).toFile(N).then(()=>{});z.push(O)}let B=4;for(let F=0;F<z.length;F+=B)await Promise.all(z.slice(F,F+B));return{original:{width:q.width,height:q.height,format:q.format},variants:H,contentHash:Q}}function OW(Z,U){return Z.filter((X)=>X.format===U).map((X)=>`${X.outputPath} ${X.width}w`).join(", ")}var $3=null,Pi="images/_optimized";var PW=()=>{};import{readFileSync as Ei,writeFileSync as _i,mkdirSync as Ai,existsSync as Ti}from"node:fs";import{resolve as $U,basename as xi}from"node:path";import{execSync as Si}from"node:child_process";import{tmpdir as bi}from"node:os";function j3(Z){if(Z7===void 0)try{let U=Si("npm config get cache",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],cwd:bi()}).trim();Z7=U&&U!=="undefined"?U:null}catch{Z7=null}if(Z7)return $U(Z7,"jxsuite-images",xi(Z));return $U(Z,".cache/images")}function bD(Z){let U=$U(j3(Z),"manifest.json");if(!Ti(U))return{version:1,entries:{}};try{return JSON.parse(Ei(U,"utf8"))}catch{return{version:1,entries:{}}}}function gD(Z,U){let X=j3(Z);Ai(X,{recursive:!0}),_i($U(X,"manifest.json"),JSON.stringify(U,null,2),"utf8")}function yD(Z,U){let X=Z.entries[U];if(!X)return null;return X.manifest}function vD(Z,U,X,J){Z.entries[U]={source:X,manifest:J,timestamp:Date.now()}}var Z7=void 0;var CW=P(()=>{PW()});import{existsSync as IW}from"node:fs";import{resolve as kD,extname as gi,basename as yi}from"node:path";async function hD(Z,U,X,J,q){let Q=`${NU(Z)}:${DW(X)}`,Y=yD(q,Q);if(Y){if(Y.variants.every((K)=>IW(K.absolutePath)))return Y}if(!Y)console.log(` Optimizing ${yi(Z)}...`);let W=await SD(Z,j3(J),X);return vD(q,Q,U,W),W}function mD(Z){if(typeof Z!=="string")return!0;if(!Z)return!0;if(Z.includes("${"))return!0;if(ki.some((U)=>Z.startsWith(U)))return!0;if(vi.has(gi(Z).toLowerCase()))return!0;return!1}function uD(Z,U){if(Z.startsWith("/"))return kD(U,"public",Z.slice(1));return kD(U,Z)}async function fD(Z,U,X,J){let q=new Map;if(!U.optimize)return{imageRefs:q};return await lD(Z,U,X,J,q),{imageRefs:q}}async function lD(Z,U,X,J,q){if(!Z||typeof Z!=="object")return;if(Z.tagName==="img")await hi(Z,U,X,J,q);if(typeof Z.innerHTML==="string"&&Z.innerHTML.includes("<img"))Z.innerHTML=await pi(Z.innerHTML,U,X,J,q);if(Array.isArray(Z.children))for(let Q of Z.children){if(typeof Q==="string")continue;await lD(Q,U,X,J,q)}}async function hi(Z,U,X,J,q){if(!Z.attributes)Z.attributes={};let Q=Z.attributes.src??Z.src;if(mD(Q))return;if(Z.attributes["data-no-optimize"]!==void 0)return;let Y=uD(Q,X);if(!IW(Y))return;let W=q.get(Y);if(!W)W=await hD(Y,Q,U,X,J),q.set(Y,W);let H=U.formats.includes("avif")?"avif":U.formats[0],K=OW(W.variants,H);if(K)Z.attributes.srcset=K,Z.attributes.sizes=Z.attributes.sizes??U.sizes;if(!Z.attributes.width&&W.original?.width)Z.attributes.width=String(W.original.width);if(!Z.attributes.height&&W.original?.height)Z.attributes.height=String(W.original.height);if(U.lazyLoad&&Z.attributes.loading!=="eager")Z.attributes.loading="lazy",Z.attributes.decoding="async"}async function pi(Z,U,X,J,q){let Q=[];for(let W of Z.matchAll(mi)){let H=W[0],K=W[1];if(fi.test(K))continue;if(li.test(K))continue;let z=K.match(ui);if(!z)continue;let B=z[1];if(mD(B))continue;let F=uD(B,X);if(!IW(F))continue;let V=q.get(F);if(!V)V=await hD(F,B,U,X,J),q.set(F,V);let w=U.formats.includes("avif")?"avif":U.formats[0],M=OW(V.variants,w);if(!M)continue;let N=` srcset="${M}" sizes="${U.sizes}"`;if(!/\bwidth=/.test(K)&&V.original?.width)N+=` width="${V.original.width}"`;if(!/\bheight=/.test(K)&&V.original?.height)N+=` height="${V.original.height}"`;if(U.lazyLoad&&!/\bloading="eager"/.test(K)){if(!/\bloading=/.test(K))N+=' loading="lazy"';if(!/\bdecoding=/.test(K))N+=' decoding="async"'}Q.push({match:H,replacement:`<img${K}${N}>`})}let Y=Z;for(let{match:W,replacement:H}of Q)Y=Y.replace(W,H);return Y}var vi,ki,mi,ui,fi,li;var pD=P(()=>{PW();CW();vi=new Set([".svg",".gif"]),ki=["http://","https://","data:","//"];mi=/<img\b([^>]*)>/gi,ui=/\bsrc="([^"]*)"/,fi=/\bsrcset="/,li=/\bdata-no-optimize\b/});var aD={};Y6(aD,{buildSite:()=>ii});import{readFileSync as OU,writeFileSync as a4,copyFileSync as dD,mkdirSync as C5,existsSync as Z9,rmSync as di,cpSync as EW,readdirSync as ci}from"node:fs";import{resolve as m1,dirname as D3,join as DU}from"node:path";async function ii(Z,U={}){let{clean:X=!0,verbose:J=!1}=U,q=[],Q=J?console.log.bind(console):()=>{};Q("Loading project.json...");let{config:Y}=PM(Z),W=m1(Z,Y.build.outDir),H=m1(Z,"pages"),K=m1(Z,"public"),z=Y.build.trailingSlash??"always";if(X&&Z9(W))di(W,{recursive:!0,force:!0});if(C5(W,{recursive:!0}),!Z9(H))throw Error(`pages/ directory not found in ${Z}`);Q("Discovering pages...");let B=IM(H);Q(` Found ${B.length} page(s)`),Q("Loading content types...");let F=await eN(Z,Y);if(F.size>0){Q(` Loaded ${F.size} content type(s): ${[...F.keys()].join(", ")}`);let u=dY(Z,Y);if(u)Z$(F,u.config)}let V=await _M(B,Z,F);Q(` ${V.length} route(s) after expansion`);let w=0,M=m1(Z,"components"),N=[],$=new Map,O=new Map;if(Z9(M)){Q("Compiling components...");let u=ci(M).filter((f)=>f.endsWith(".json")||f.endsWith(".md")),T=m1(W,"components");C5(T,{recursive:!0});for(let f of u)try{let p=m1(M,f),y=await SZ(p,{$media:Y.$media});for(let U1 of y.files){let B1=U1.path.includes("/")?U1.path.split("/").pop():U1.path;if(a4(m1(T,B1),U1.content,"utf8"),U1.tagName)N.push(U1.tagName);w++}let A=p.endsWith(".md")?(await Promise.resolve().then(() => (p6(),y8))).transpileJxMarkdown(OU(p,"utf8")):JSON.parse(OU(p,"utf8"));if(A.tagName){O.set(A.tagName,A);let U1=cW(A.tagName,A.style,A,Y.$media??{});if(U1)$.set(A.tagName,U1),a4(m1(T,`${A.tagName}.css`),U1,"utf8"),w++}}catch(p){let y=p;q.push(`Error compiling component ${f}: ${y.message}`),console.error(`Error compiling component ${f}: ${y.message}`)}Q(` Compiled ${N.length} component(s): ${N.join(", ")}`)}let C=[];if(Y.build.adapter)for(let[,u]of O){let T=W7(u);for(let f of T){let p="./components/"+f.src.replace(/^\.\//,"");C.push({exportName:f.exportName,src:p})}}let b=Y.images.optimize?bD(Z):null;for(let u of V)try{Q(` Compiling ${u.urlPattern} ...`);let T=await ri(u,Y,Z,F,b,O),f=new Set;for(let[y,A]of O)if(yU(A))f.add(y);if(N.length>0)T.html=si(T.html,N,$,f);let p=rD(u.urlPattern,W,z);C5(D3(p),{recursive:!0}),a4(p,T.html,"utf8"),w++;try{let y=z$(T.doc,O);if(y.content){let A=p.replace(/\.html$/,".md");a4(A,y.content,"utf8"),w++}}catch(y){let A=y;q.push(`Error exporting markdown for ${u.urlPattern}: ${A.message}`)}for(let y of T.files){let A=m1(D3(p),y.path);C5(D3(A),{recursive:!0}),a4(A,y.content,"utf8"),w++}if(T.serverHandler){let y=m1(D3(p),"_server.js");a4(y,T.serverHandler,"utf8"),w++}}catch(T){let f=T,p=`Error compiling ${u.urlPattern}: ${f.message}`;q.push(p),console.error(p)}if(b&&Y.images.optimize){gD(Z,b);let u=m1(j3(Z),"_optimized");if(Z9(u)){let f=m1(W,"images/_optimized");C5(f,{recursive:!0}),EW(u,f,{recursive:!0})}let T=Object.keys(b.entries).length;if(T>0)Q(` Optimized ${T} image(s)`)}if(Y.build.adapter){let u=Y.build.adapter;Q("Generating site-wide server worker...");let T=new Map;for(let f of C)if(!T.has(f.exportName))T.set(f.exportName,f);if(u==="cloudflare-pages"){let f=NX([...T.values()]);for(let[y,A]of f){let U1=m1(W,y);C5(m1(U1,".."),{recursive:!0}),a4(U1,A,"utf8"),w++}let p=m1(W,"components");C5(p,{recursive:!0});for(let{src:y}of T.values()){let A=m1(Z,y.replace(/^\.\//,"")),U1=m1(p,y.replace(/^\.\/components\//,""));if(Z9(A))dD(A,U1)}if(f.size>0)Q(` Generated ${f.size} Pages function(s) in dist/functions/`)}else{let f=MX([...T.values()],{adapter:u});if(f){let p=m1(W,"worker.js");a4(p,f,"utf8"),w++,Q(` Generated dist/worker.js (${T.size} server function(s))`);let y=m1(W,"components");for(let{src:A}of T.values()){let U1=m1(Z,A.replace(/^\.\//,"")),B1=m1(y,A.replace(/^\.\/components\//,""));if(Z9(U1))dD(U1,B1)}}}}if(Y.redirects&&Object.keys(Y.redirects).length>0){Q("Generating redirects...");let u=ei(Y.redirects,W);w+=u}if(Z9(K))Q("Copying public/ assets..."),EW(K,W,{recursive:!0});if(Y.copy){Q("Copying mapped files...");for(let[u,T]of Object.entries(Y.copy)){let f=m1(Z,u),p=m1(W,T);C5(D3(p),{recursive:!0}),EW(f,p)}}if(Q(`
|
|
447
447
|
Build complete: ${V.length} routes, ${w} files`),q.length>0)Q(` ${q.length} error(s)`);return{routes:V.length,files:w,errors:q}}async function ri(Z,U,X,J=new Map,q=null,Q=new Map){let Y;if(Z.sourcePath.endsWith(".md")){let{transpileJxMarkdown:b}=await Promise.resolve().then(() => (p6(),y8));Y=b(OU(Z.sourcePath,"utf8"))}else Y=JSON.parse(OU(Z.sourcePath,"utf8"));let W=PY(Y,U,X),H=Y.$head??W._pageHead??[],K=W.$head??[],z=Y.title??W._pageTitle??null;delete W._pageHead,delete W._pageTitle,gM(W,U,Z,J,X),await J$(W,Z,X,{config:U,contentTypes:J});let B=E5(W.state??{}),F=z??U.name??"Jx Site";if(typeof F==="string"&&N1(F))F=a1(F,B)??F;let V=cD(H,B),w=cD(K,B);if(U7(W,B),AW(W,Q),W.state)for(let[b,u]of Object.entries(W.state)){if(b==="$site"||b==="$page")continue;if(u&&typeof u==="object"&&!Array.isArray(u)&&u.timing==="compiler")delete W.state[b];else if(Array.isArray(u))delete W.state[b]}let M=ai(U.$head??[]),N=SM(M,w,V,{title:F,charset:U.defaults?.charset??"utf-8",...U.name!=null&&{siteName:U.name},...U.url!=null&&{siteUrl:U.url},pageUrl:Z.urlPattern});if(U.$media)W.$media={...U.$media,...W.$media};if(q&&U.images?.optimize)await fD(W,U.images,X,q);let $=await DY(W,{title:F,lang:U.defaults?.lang??"en",projectStyle:U.style??null});$.html=ti($.html,N,U.defaults?.lang??"en");let O=(W.$elements??[]).filter((b)=>typeof b==="string"&&!b.startsWith("./")&&!b.startsWith("../"));if(O.length>0)$.html=oi($.html,O);let C=null;if(!U.build?.adapter)try{let b=await C7(Z.sourcePath);if(b)C=b}catch{}return{html:$.html,files:$.files,serverHandler:C,doc:W}}function cD(Z,U){return Z.map((X)=>{if(!X||typeof X!=="object")return X;let J={...X};if(J.attributes){J.attributes={...J.attributes};for(let[q,Q]of Object.entries(J.attributes))if(typeof Q==="string"&&N1(Q))J.attributes[q]=a1(Q,U)??Q}if(typeof J.textContent==="string"&&N1(J.textContent))J.textContent=a1(J.textContent,U)??J.textContent;return J})}function ai(Z){return Z.map((U)=>{if(!U||typeof U!=="object"||!U.attributes)return U;let X={...U,attributes:{...U.attributes}};for(let J of["href","src"]){let q=X.attributes[J];if(typeof q==="string"&&ni(q))X.attributes[J]=`/node_modules/${q}`}return X})}function ni(Z){return!Z.startsWith("/")&&!Z.startsWith("./")&&!Z.startsWith("../")&&!Z.startsWith("http")&&!Z.startsWith("data:")}function iD(Z,U){if(!Z||typeof Z!=="object")return Z;let X={};for(let[J,q]of Object.entries(Z))if(J==="children"&&Array.isArray(q))X.children=q.map((Q)=>{if(typeof Q==="string")return Q;return iD(Q,U)});else if(J==="style"&&q&&typeof q==="object"){let Q={...q};for(let[Y,W]of Object.entries(Q))if(typeof W==="string"&&N1(W))Q[Y]=jU(W,U)??W;X.style=Q}else if(J==="attributes"&&q&&typeof q==="object"){let Q={...q};for(let[Y,W]of Object.entries(Q))if(typeof W==="string"&&N1(W))Q[Y]=jU(W,U)??W;X.attributes=Q}else if(J==="$props"&&q&&typeof q==="object"){let Q={...q};for(let[Y,W]of Object.entries(Q))if(typeof W==="string"&&N1(W)){let H=jU(W,U);Q[Y]=H!==null?H??null:W}X.$props=Q}else if(typeof q==="string"&&N1(q))X[J]=jU(q,U)??q;else X[J]=q;return X}function jU(Z,U){try{let X=U.$map?.item,J=U.$map?.index,q=Z.match(/^\$\{(.+)\}$/s);if(q)return Function("state","$map","item","index",`return (${q[1]})`)(U,U.$map,X,J);return Function("state","$map","item","index",`return \`${Z}\``)(U,U.$map,X,J)}catch{return null}}function U7(Z,U){if(!Z||typeof Z!=="object")return;if(typeof Z.innerHTML==="string"&&N1(Z.innerHTML)){let J=a1(Z.innerHTML,U);if(J!=null)Z.innerHTML=String(J).replaceAll("${","${")}if(typeof Z.textContent==="string"&&N1(Z.textContent))Z.textContent=a1(Z.textContent,U)??Z.textContent;if(Z.style&&typeof Z.style==="object"){for(let[J,q]of Object.entries(Z.style))if(typeof q==="string"&&N1(q))Z.style[J]=a1(q,U)??q}if(Z.attributes&&typeof Z.attributes==="object"){for(let[J,q]of Object.entries(Z.attributes))if(typeof q==="string"&&N1(q))Z.attributes[J]=a1(q,U)??q}if(Z.$props&&typeof Z.$props==="object"){for(let[J,q]of Object.entries(Z.$props))if(typeof q==="string"&&N1(q))Z.$props[J]=a1(q,U)??q}let X=Z.children;if(X&&typeof X==="object"&&!Array.isArray(X)&&X.$prototype==="Array"){let J=X,q=J.items,Q=null;if(q&&typeof q==="object"&&q.$ref){let Y=q.$ref;Q=gU(Y,U)}else if(Array.isArray(q))Q=q;if(Array.isArray(Q)&&J.map){Z.children=Q.map((Y,W)=>{let H=Object.create(U);H.$map={item:Y,index:W},H["$map/item"]=Y,H["$map/index"]=W;let K=iD(J.map,H);return U7(K,H),K});return}}if(typeof X==="string"&&N1(X)){let J=a1(X,U);if(Array.isArray(J)){let q=J;Z.children=q;for(let Q of q)U7(Q,U)}}else if(Array.isArray(Z.children)){let J=0;while(J<Z.children.length){let q=Z.children[J];if(typeof q==="string"&&N1(q)){let Q=a1(q,U);if(Array.isArray(Q)){let Y=Q;Z.children.splice(J,1,...Y);for(let W of Y)U7(W,U);J+=Y.length;continue}}U7(q,U),J++}}}function AW(Z,U){if(!Z||typeof Z!=="object")return;if(Array.isArray(Z)){Z.forEach((J)=>AW(J,U));return}if(Array.isArray(Z.children))for(let J of Z.children)AW(J,U);let X=U.get(Z.tagName);if(X){let J=Array.isArray(Z.children)&&Z.children.length>0?Z.children.map((Y)=>I3(Y,{},null)).join(`
|
|
448
448
|
`):null,q=dW(X,Z.$props||null,J),Q=yU(X);if(Z.innerHTML=q,delete Z.children,X.style&&Z.$props){let Y={...X.state};for(let[K,z]of Object.entries(Z.$props))if(K in Y)Y[K]=z;else Y[K]=z;let W=E5(Y,null),H={};for(let[K,z]of Object.entries(X.style))if(typeof z==="string"&&N1(z)){let B=r1(z,W);if(B!=null)H[K]=B}if(Object.keys(H).length>0)Z.style={...Z.style,...H}}if(delete Z.$props,Q)Z.$static=!0;else Z.$prerendered=!0}}function si(Z,U,X=new Map,J=new Set){let q=U.filter((B)=>Z.includes(`<${B}`));if(q.length===0)return Z;let Q=q.filter((B)=>X.has(B)).map((B)=>`<link rel="stylesheet" href="/components/${B}.css">`).join(`
|
|
449
449
|
`);if(Q)Z=Z.replace("</head>",` ${Q}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jxsuite/compiler",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.2",
|
|
4
4
|
"description": "Jx static HTML compiler, island detector, and site builder",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -41,16 +41,16 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@apidevtools/json-schema-ref-parser": "^15.3.5",
|
|
44
|
-
"@jxsuite/parser": "^0.26.
|
|
45
|
-
"@jxsuite/runtime": "^0.26.
|
|
46
|
-
"@jxsuite/schema": "^0.26.
|
|
44
|
+
"@jxsuite/parser": "^0.26.2",
|
|
45
|
+
"@jxsuite/runtime": "^0.26.2",
|
|
46
|
+
"@jxsuite/schema": "^0.26.2",
|
|
47
47
|
"remark-gfm": "^4.0.1",
|
|
48
48
|
"remark-stringify": "^11.0.0",
|
|
49
49
|
"sharp": "^0.34.5",
|
|
50
50
|
"unified": "^11.0.5"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@happy-dom/global-registrator": "^20.
|
|
53
|
+
"@happy-dom/global-registrator": "^20.10.2",
|
|
54
54
|
"@types/mdast": "^4.0.4"
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -57,6 +57,7 @@ async function resolveManifest(
|
|
|
57
57
|
*/
|
|
58
58
|
function shouldSkip(src: string) {
|
|
59
59
|
if (typeof src !== "string") return true;
|
|
60
|
+
if (!src) return true;
|
|
60
61
|
if (src.includes("${")) return true;
|
|
61
62
|
if (EXTERNAL_PREFIXES.some((p) => src.startsWith(p))) return true;
|
|
62
63
|
if (SKIP_EXTENSIONS.has(extname(src).toLowerCase())) return true;
|