@papit/server 1.0.4 → 1.0.6
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/lib/bin.js +2 -2
- package/lib/bundle.d.ts +14 -0
- package/lib/bundle.js +2 -2
- package/package.json +100 -100
package/lib/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import re from"node:path";import ne from"node:fs";import{Arguments as J}from"@papit/arguments";import{Terminal as Be}from"@papit/terminal";import{Information as S}from"@papit/information";import Z from"node:path";import X from"node:fs";import He from"node:fs";import M from"node:path";import{deepMergeTwo as Ue}from"@papit/deep-merge";function ie(e,t,o){let i=JSON.parse(He.readFileSync(t,{encoding:"utf-8"})),r=i?.meta?.language??M.basename(t,".json");o.data[r]||(o.data[r]={meta:i.meta}),o.data[r]=Ue(o.data[r],i,["meta"]);let s=M.relative(e,t).split(M.sep);for(;s.length>0;){let a="/"+s.join("/");o.map[a]=r,s.shift()}}function se(e){if(!e.endsWith(".json"))return!1;let t=M.basename(M.dirname(e));return/^(transl|locale|i18)/i.test(t)}import R from"node:path";var A=class extends Error{constructor(t,o){super(t,o),this.name="http-error"}},B=class extends A{constructor(t,o){super(t??"internal server error",o),this.name="Internal Server Error",this.status=500}},x=class extends A{constructor(t,o){super(t??"not found",o),this.name="Not Found",this.status=404}},O=class extends A{constructor(t,o){super(t??"method not allowed",o),this.name="Method not allowed",this.status=405}};import G from"node:fs";import De from"node:path";import{Arguments as $e}from"@papit/arguments";import{Arguments as ae}from"@papit/arguments";var y=class{static{this.MimeTypes={".html":"text/html",".htm":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".ts":"text/typescript",".tsx":"text/typescript",".jsx":"text/javascript",".json":"application/json",".xml":"application/xml",".txt":"text/plain",".md":"text/markdown",".markdown":"text/markdown",".csv":"text/csv",".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".bmp":"image/bmp",".tiff":"image/tiff",".tif":"image/tiff",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".m4a":"audio/mp4",".mp4":"video/mp4",".webm":"video/webm",".ogv":"video/ogg",".avi":"video/x-msvideo",".mov":"video/quicktime",".zip":"application/zip",".tar":"application/x-tar",".gz":"application/gzip",".7z":"application/x-7z-compressed",".rar":"application/vnd.rar"}}static{this._MAX_CACHE_SIZE=50*1024*1024}static{this._MAX_FILE_SIZE_TO_CACHE=1024*1024}static{this.BinaryExtensions=new Set([".png",".jpg",".jpeg",".gif",".ico",".webp",".bmp",".tiff",".tif",".woff",".woff2",".ttf",".otf",".eot",".mp3",".wav",".ogg",".m4a",".mp4",".webm",".ogv",".avi",".mov",".zip",".tar",".gz",".7z",".rar",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx"])}static get MAX_CACHE_SIZE(){return ae.number("MAX_CACHE_SIZE")??this._MAX_CACHE_SIZE}static get MAX_FILE_SIZE_TO_CACHE(){return ae.number("MAX_FILE_SIZE_TO_CACHE")??this._MAX_FILE_SIZE_TO_CACHE}};import Pe from"node:path";import ce from"node:fs";import{Arguments as me}from"@papit/arguments";import{Terminal as Oe}from"@papit/terminal";async function pe(e,t,o){return new Promise((i,r)=>{let s=y.BinaryExtensions.has(Pe.extname(e))?ce.createReadStream(e,{signal:o}):ce.createReadStream(e,{signal:o,encoding:"utf-8"});s.pipe(t),s.on("error",a=>{me.error&&Oe.error("streaming error",e),me.verbose&&console.trace(a),r(new x(a.message))}),s.on("close",i)})}function z(e,t,o,i){if(!G.existsSync(e.absolute))throw new x(`${e.relative} not found`);let r=De.extname(e.absolute),n=G.statSync(e.absolute);if(!t.isCacheable(n.size,r))return pe(e.absolute,o,i),"streamed";let s=y.MimeTypes[r]??"text/plain",a=G.readFileSync(e.absolute),m={mimeType:s,buffer:a,mtime:n.mtimeMs};return $e.has("no-cache")&&t.add(e,a,s,m.mtime),m}function le(e,t,o){let r=R.relative(e,t).split(R.sep);for(;r.length>0;){let n=R.join(R.sep+r.join(R.sep));o[n]||(o[n]=[]),o[n].push(t),r.shift()}}async function fe(e,t,o,i,r,n){let s=R.normalize(e);if(t.map[s]){let m=t.map[s];if(m)return{mimeType:"application/json",buffer:Buffer.from(JSON.stringify(t.data[m]))}}let a=[...o[s]];for(;a.length>0;){let m=a.pop();try{return z({absolute:R.normalize(m),relative:s},i,r,n)}catch{}}throw new x(`asset "${s}" not found`)}import{Arguments as ue}from"@papit/arguments";function de(){let e=["asset","assets","public"];if(ue.has("asset")){let t=ue.get("asset");e.push(...t)}return e}var We=new Set(["node_modules",".git",".temp","lib","dist","src","explorer-icons"]);async function K(e,t,o,i){let r=ge(e,(n,s,a)=>{if(We.has(n))return!1;if(!a){if(Z.dirname(s)===e)return!1;let m=s.split(Z.sep);if(!i.some(p=>m.includes(p)))return!1}return!0});for(let n of r)se(n)?ie(e,n,t):le(e,n,o)}function ge(e,t,o=0){if(!X.existsSync(e)||o>10)return[];let i=[],r=X.readdirSync(e);for(let n of r){let s=Z.join(e,n),m=X.statSync(s).isDirectory();t&&!t(n,s,m)||(m?i.push(...ge(s,t,o+1)):i.push(s))}return i}import gt from"node:http";import oe from"node:fs";import v from"node:path";import ht from"chokidar";import{Information as C}from"@papit/information";import{Arguments as f}from"@papit/arguments";import{Terminal as d}from"@papit/terminal";import Te from"node:path";import Q from"node:fs";import $ from"node:path";import ye from"node:fs";import{Document as Ze}from"@papit/html";import{Arguments as Ke}from"@papit/arguments";import{Terminal as Ve}from"@papit/terminal";import{Document as Je}from"@papit/html";import Ge from"node:path";import V from"node:fs";import{Arguments as he}from"@papit/arguments";import{Terminal as Xe}from"@papit/terminal";function D(e,t){let o=new Je,i=`${e}-template`,r=Ge.join(t,"asset","templates",e,"index.html"),n=he.string(i);if(n&&V.existsSync(n)&&(r=n),!V.existsSync(r))return he.error&&Xe.error(`could not find ${e} template html file`),o.innerHTML='<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>@papit/server</title><meta name="description" content="Development server" /><meta name="color-scheme" content="light dark" /></head><body>Llama Trauma Baby Mama</body></html>',o;let s=V.readFileSync(r,{encoding:"utf-8"});return o.innerHTML=s,o}function be(e,t,o,i){let r=D("explorer",i);r.title=e.packageJSON.name;let n=Ke.string("explorer-spritesheet")??$.join(i,"asset/icons/explorer-spritesheet.svg"),s=ye.readFileSync(n,{encoding:"utf-8"}),a=new Ze;a.innerHTML=s,a.documentElement||(Ve.error("something went wrong loading explorer icon spritesheet"),process.exit(1)),a.documentElement.setAttribute("style","display:none"),r.body?.appendChild(a.documentElement);let m=r.querySelector("[data-location]"),p=$.relative(e.location,o.absolute);p?m.innerHTML=p:m.parentElement?.removeChild(m);let c=r.querySelector("ul[data-folders]"),u=r.querySelector("ul[data-files]");return o.relative!==""&&(c.innerHTML='<li class="hidden"><a href=".."><svg><use href="#folder" /></svg><span class="name">..</span></a></li>'),t.sort((l,b)=>l.localeCompare(b)).forEach(l=>{let b=$.join(o.absolute,l),_=ye.statSync(b),w=r.createElement("li");w.innerHTML=`<a href="${l}"><svg><use href="" /></svg><span class="name">${l}</span></a>`;let g=w.querySelector("a"),T=g.querySelector("use");if(!l.startsWith(".env")&&!l.startsWith(".git")&&l.startsWith(".")&&w.classList.add("hidden"),_.isFile()){T?.setAttribute("href","#"+Qe(b,r)),u.appendChild(w);return}_.isDirectory()&&(T?.setAttribute("href","#"+Ye(b,r)),g.setAttribute("href",l+"/"),c.appendChild(w))}),r}function Qe(e,t){let o=$.basename(e),i=o.split(".");o.startsWith(".")&&i.shift();let r=i.at(0)??o,n;if(o.startsWith(".git")||/\.git/.test(e))n="git";else if(o==="package.json")n="package";else if(o.startsWith("tsconfig"))n="tsconfig";else if(r.startsWith("eslint"))n="eslint";else if(/translation/.test(e)){if(t.querySelector("symbol#"+r))return r;n="language"}else/\.vscode/.test(e)&&(n="vscode");if(t.querySelector("symbol#"+n))return n;let s=i.slice(i.length-2).join("_");if(t.querySelector("symbol#"+s))return s;let a=i.pop()??o;return t.querySelector("symbol#"+a)?a:"file"}function Ye(e,t){return"folder"}import qe from"node:fs";import{Document as et,Element as tt}from"@papit/html";import{Terminal as xe}from"@papit/terminal";function ve(e,t,o,i){let r=D("live",i);r.body||(xe.error("live document template is missing body"),process.exit(1)),r.head||(xe.error("live document template is missing head"),process.exit(1));let n=new et,s=qe.readFileSync(t.absolute,{encoding:"utf-8"});if(n.innerHTML=s,n.head&&[...n.head.childNodes].forEach(c=>ot(c,r.head)),n.body&&[...n.body.childNodes].forEach(c=>r.body?.appendChild(c)),n.body?.classList)for(let c of n.body?.classList)r.body.classList.add(c);if(n.body?.attributes)for(let c in n.body?.attributes){if(c==="class"||n.body.hasAttribute(c))continue;let u=n.body.getAttribute(c);u===!0?n.body.toggleAttribute(c):n.body.setAttribute(c,u)}let a=r.head.querySelector("script"),m=r.head.querySelector('script[type="importmap"]');m||(m=r.createElement("script"),m.setAttribute("type","importmap"));let p=JSON.parse(m.textContent||"{}");return p.imports||(p.imports={}),p.imports={...p.imports,...o.imports},m.textContent=JSON.stringify(p),a?a!==m&&r.head.insertBefore(m,a):r.head.appendChild(m),r}function ot(e,t){if(e instanceof tt){let o=`${e.tagName}${e.className?"."+e.className:""}${e.id?"#"+e.id:""}${Array.from(e.attributes).map(([r,n])=>`[${r}${typeof n=="string"?`="${n}"`:""}]`).join("")}`,i=t.querySelector(o);if(i){t.replaceChild(e,i);return}}t.appendChild(e)}import{fileURLToPath as rt}from"node:url";import h from"node:path";import H from"node:fs";import{Information as L,PackageGraph as nt}from"@papit/information";import{Arguments as it}from"@papit/arguments";function we(e){process.platform==="win32"&&e.url&&/^\/[A-Za-z]:/.test(e.url)&&(e.url=e.url.slice(1).replace(/\//g,"\\"));let o=(()=>{if(e.url&&H.existsSync(e.url)&&H.statSync(e.url).isFile())return{absolute:e.url,relative:h.relative(e.url,L.package.location)};let i=[it.string("folder"),e.url].filter(n=>n!==void 0),r=[L.local,L.package.location,L.root.location];for(let n of r){let s=h.join(n,...i);if(H.existsSync(s))return{absolute:s,relative:h.relative(n,s)||h.relative(L.package.location,L.local)||h.sep}}return{absolute:h.join(L.package.location,e.url??h.sep),relative:e.url??h.sep}})();return o.absolute.endsWith(h.sep)&&(o.absolute=o.absolute.slice(0,o.absolute.length-1)),{absolute:h.normalize(o.absolute),relative:h.normalize(o.relative)}}function Se(e){let o=rt(e);for(let i=0;i<5;i++)if(o=h.dirname(o),!!H.existsSync(h.join(o,"package.json")))return o;return null}function st(e){let t=e;for(;t!=="/"&&!H.existsSync(h.join(t,"package.json"));)t=h.dirname(t);return t}function E(e){let t=st(e.absolute);if(!t)throw new B(`could not find package at 1: ${t}`);let o=nt.search(t);if(!o)throw new B(`could not find package at 2: ${t}`);return o}async function Ee(e,t,o,i,r){let n=E(e),s=e.absolute.endsWith(".html")?e:{absolute:Te.join(e.absolute,"index.html"),relative:Te.join(e.relative,"index.html")},a,m=null;if(Q.existsSync(s.absolute))m=Q.statSync(s.absolute).mtimeMs,a=ve(n,s,o,i);else{let p=Q.readdirSync(e.absolute);a=be(n,p,e,i)}return r.add(e,Buffer.from(a.innerHTML,"utf8"),y.MimeTypes[".html"],m),a}import at from"node:fs";import{jsBundle as ct}from"@papit/bundle-js";import{Arguments as mt}from"@papit/arguments";async function ke(e,t){let o=E(e),i;if(await ct(mt.instance,o.location,{entryPointArray:[{input:e.absolute,output:void 0}],tsconfig:o?.tsconfig,externals:o?.externals,packageJSON:o?.packageJSON,esoptions:{write:!1}},r=>{r.type==="build"&&(i=r.result.outputFiles?.at(0)?.text)}),!i)throw new x("file not found: "+e.relative);return t.add(e,Buffer.from(i,"utf8"),y.MimeTypes[".js"],at.statSync(e.absolute)?.mtimeMs??null),i}import Y from"node:fs";import{Arguments as q}from"@papit/arguments";import{Terminal as I}from"@papit/terminal";var F=class{constructor(t){this.map=new Map;this._size=0;this.name="cache";this._maxSize=y.MAX_FILE_SIZE_TO_CACHE;t&&(this.name=t)}get size(){return this._size}get maxSize(){return this._maxSize}set maxSize(t){this._maxSize=t*1024*1024}get(t){let o=this.map.get(t.absolute);return!o||!Y.existsSync(t.absolute)?null:o.mtime===null||Y.statSync(t.absolute).mtimeMs===o.mtime?o:(this.delete(t),null)}delete(t,o=!1){let i=this.map.get(t.absolute);i&&(q.verbose&&!o&&I.write(I.yellow(t.relative),"removed from cache:"+I.blue(this.name)),this._size-=i.buffer.length,this.map.delete(t.absolute))}clear(){this.map.clear(),this._size=0}add(t,o,i,r){q.has("no-cache")||(this.delete(t,!0),this._size+=o.length,q.verbose&&I.write(I.yellow(t.relative),"added to cache:"+I.blue(this.name)),this.map.set(t.absolute,{mimeType:i??y.MimeTypes[t.absolute]??"text/plain",buffer:o,mtime:r===void 0?Y.statSync(t.absolute).mtimeMs:r}))}isCacheable(t,o){return!(t>this.maxSize||[".mp4",".webm",".ogv",".avi",".mov"].includes(o))}};import{createHash as pt}from"node:crypto";import Ce from"node:path";import{Arguments as ee}from"@papit/arguments";import{Terminal as U}from"@papit/terminal";import{Information as W}from"@papit/information";var j=new Map;function Ae(e,t,o){let i=e.headers["sec-websocket-key"],n=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${pt("sha1").update(i+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest("base64")}`];t.write(n.join(`\r
|
|
2
|
+
import re from"node:path";import ne from"node:fs";import{Arguments as G}from"@papit/arguments";import{Terminal as Be}from"@papit/terminal";import{Information as w}from"@papit/information";import Z from"node:path";import X from"node:fs";import He from"node:fs";import N from"node:path";import{deepMergeTwo as Pe}from"@papit/deep-merge";function ie(e,t,o){let i=JSON.parse(He.readFileSync(t,{encoding:"utf-8"})),r=i?.meta?.language??N.basename(t,".json");o.data[r]||(o.data[r]={meta:i.meta}),o.data[r]=Pe(o.data[r],i,["meta"]);let s=N.relative(e,t).split(N.sep);for(;s.length>0;){let a="/"+s.join("/");o.map[a]=r,s.shift()}}function se(e){if(!e.endsWith(".json"))return!1;let t=N.basename(N.dirname(e));return/^(transl|locale|i18)/i.test(t)}import R from"node:path";var A=class extends Error{constructor(t,o){super(t,o),this.name="http-error"}},B=class extends A{constructor(t,o){super(t??"internal server error",o),this.name="Internal Server Error",this.status=500}},b=class extends A{constructor(t,o){super(t??"not found",o),this.name="Not Found",this.status=404}},D=class extends A{constructor(t,o){super(t??"method not allowed",o),this.name="Method not allowed",this.status=405}};import J from"node:fs";import Oe from"node:path";import{Arguments as $e}from"@papit/arguments";import{Arguments as ae}from"@papit/arguments";var y=class{static{this.MimeTypes={".html":"text/html",".htm":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".ts":"text/typescript",".tsx":"text/typescript",".jsx":"text/javascript",".json":"application/json",".xml":"application/xml",".txt":"text/plain",".md":"text/markdown",".markdown":"text/markdown",".csv":"text/csv",".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".bmp":"image/bmp",".tiff":"image/tiff",".tif":"image/tiff",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".m4a":"audio/mp4",".mp4":"video/mp4",".webm":"video/webm",".ogv":"video/ogg",".avi":"video/x-msvideo",".mov":"video/quicktime",".zip":"application/zip",".tar":"application/x-tar",".gz":"application/gzip",".7z":"application/x-7z-compressed",".rar":"application/vnd.rar"}}static{this._MAX_CACHE_SIZE=50*1024*1024}static{this._MAX_FILE_SIZE_TO_CACHE=1024*1024}static{this.BinaryExtensions=new Set([".png",".jpg",".jpeg",".gif",".ico",".webp",".bmp",".tiff",".tif",".woff",".woff2",".ttf",".otf",".eot",".mp3",".wav",".ogg",".m4a",".mp4",".webm",".ogv",".avi",".mov",".zip",".tar",".gz",".7z",".rar",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx"])}static get MAX_CACHE_SIZE(){return ae.number("MAX_CACHE_SIZE")??this._MAX_CACHE_SIZE}static get MAX_FILE_SIZE_TO_CACHE(){return ae.number("MAX_FILE_SIZE_TO_CACHE")??this._MAX_FILE_SIZE_TO_CACHE}};import Ue from"node:path";import ce from"node:fs";import{Arguments as me}from"@papit/arguments";import{Terminal as De}from"@papit/terminal";async function pe(e,t,o){return new Promise((i,r)=>{let s=y.BinaryExtensions.has(Ue.extname(e))?ce.createReadStream(e,{signal:o}):ce.createReadStream(e,{signal:o,encoding:"utf-8"});s.pipe(t),s.on("error",a=>{me.error&&De.error("streaming error",e),me.verbose&&console.trace(a),r(new b(a.message))}),s.on("close",i)})}function z(e,t,o,i){if(!J.existsSync(e.absolute))throw new b(`${e.relative} not found`);let r=Oe.extname(e.absolute),n=J.statSync(e.absolute);if(!t.isCacheable(n.size,r))return pe(e.absolute,o,i),"streamed";let s=y.MimeTypes[r]??"text/plain",a=J.readFileSync(e.absolute),m={mimeType:s,buffer:a,mtime:n.mtimeMs};return $e.has("no-cache")&&t.add(e,a,s,m.mtime),m}function le(e,t,o){let r=R.relative(e,t).split(R.sep);for(;r.length>0;){let n=R.join(R.sep+r.join(R.sep));o[n]||(o[n]=[]),o[n].push(t),r.shift()}}async function fe(e,t,o,i,r,n){let s=R.normalize(e);if(t.map[s]){let m=t.map[s];if(m)return{mimeType:"application/json",buffer:Buffer.from(JSON.stringify(t.data[m]))}}let a=[...o[s]];for(;a.length>0;){let m=a.pop();try{return z({absolute:R.normalize(m),relative:s},i,r,n)}catch{}}throw new b(`asset "${s}" not found`)}import{Arguments as ue}from"@papit/arguments";function de(){let e=["asset","assets","public"];if(ue.has("asset")){let t=ue.get("asset");e.push(...t)}return e}var We=new Set(["node_modules",".git",".temp","lib","dist","src","explorer-icons"]);async function K(e,t,o,i){let r=ge(e,(n,s,a)=>{if(We.has(n))return!1;if(!a){if(Z.dirname(s)===e)return!1;let m=s.split(Z.sep);if(!i.some(p=>m.includes(p)))return!1}return!0});for(let n of r)se(n)?ie(e,n,t):le(e,n,o)}function ge(e,t,o=0){if(!X.existsSync(e)||o>10)return[];let i=[],r=X.readdirSync(e);for(let n of r){let s=Z.join(e,n),m=X.statSync(s).isDirectory();t&&!t(n,s,m)||(m?i.push(...ge(s,t,o+1)):i.push(s))}return i}import ht from"node:http";import oe from"node:fs";import x from"node:path";import yt from"chokidar";import{Information as C}from"@papit/information";import{Arguments as l}from"@papit/arguments";import{Terminal as d}from"@papit/terminal";import Te from"node:path";import Q from"node:fs";import $ from"node:path";import ye from"node:fs";import{Document as Ze}from"@papit/html";import{Arguments as Ke}from"@papit/arguments";import{Terminal as Ve}from"@papit/terminal";import{Document as Ge}from"@papit/html";import Je from"node:path";import V from"node:fs";import{Arguments as he}from"@papit/arguments";import{Terminal as Xe}from"@papit/terminal";function O(e,t){let o=new Ge,i=`${e}-template`,r=Je.join(t,"asset","templates",e,"index.html"),n=he.string(i);if(n&&V.existsSync(n)&&(r=n),!V.existsSync(r))return he.error&&Xe.error(`could not find ${e} template html file`),o.innerHTML='<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>@papit/server</title><meta name="description" content="Development server" /><meta name="color-scheme" content="light dark" /></head><body>Llama Trauma Baby Mama</body></html>',o;let s=V.readFileSync(r,{encoding:"utf-8"});return o.innerHTML=s,o}function be(e,t,o,i){let r=O("explorer",i);r.title=e.packageJSON.name;let n=Ke.string("explorer-spritesheet")??$.join(i,"asset/icons/explorer-spritesheet.svg"),s=ye.readFileSync(n,{encoding:"utf-8"}),a=new Ze;a.innerHTML=s,a.documentElement||(Ve.error("something went wrong loading explorer icon spritesheet"),process.exit(1)),a.documentElement.setAttribute("style","display:none"),r.body?.appendChild(a.documentElement);let m=r.querySelector("[data-location]"),p=$.relative(e.location,o.absolute);p?m.innerHTML=p:m.parentElement?.removeChild(m);let c=r.querySelector("ul[data-folders]"),u=r.querySelector("ul[data-files]");return o.relative!==""&&(c.innerHTML='<li class="hidden"><a href=".."><svg><use href="#folder" /></svg><span class="name">..</span></a></li>'),t.sort((f,S)=>f.localeCompare(S)).forEach(f=>{let S=$.join(o.absolute,f),I=ye.statSync(S),v=r.createElement("li");v.innerHTML=`<a href="${f}"><svg><use href="" /></svg><span class="name">${f}</span></a>`;let g=v.querySelector("a"),T=g.querySelector("use");if(!f.startsWith(".env")&&!f.startsWith(".git")&&f.startsWith(".")&&v.classList.add("hidden"),I.isFile()){T?.setAttribute("href","#"+Qe(S,r)),u.appendChild(v);return}I.isDirectory()&&(T?.setAttribute("href","#"+Ye(S,r)),g.setAttribute("href",f+"/"),c.appendChild(v))}),r}function Qe(e,t){let o=$.basename(e),i=o.split(".");o.startsWith(".")&&i.shift();let r=i.at(0)??o,n;if(o.startsWith(".git")||/\.git/.test(e))n="git";else if(o==="package.json")n="package";else if(o.startsWith("tsconfig"))n="tsconfig";else if(r.startsWith("eslint"))n="eslint";else if(/translation/.test(e)){if(t.querySelector("symbol#"+r))return r;n="language"}else/\.vscode/.test(e)&&(n="vscode");if(t.querySelector("symbol#"+n))return n;let s=i.slice(i.length-2).join("_");if(t.querySelector("symbol#"+s))return s;let a=i.pop()??o;return t.querySelector("symbol#"+a)?a:"file"}function Ye(e,t){return"folder"}import qe from"node:fs";import{Document as et,Element as tt}from"@papit/html";import{Terminal as xe}from"@papit/terminal";function ve(e,t,o,i){let r=O("live",i);r.body||(xe.error("live document template is missing body"),process.exit(1)),r.head||(xe.error("live document template is missing head"),process.exit(1));let n=new et,s=qe.readFileSync(t.absolute,{encoding:"utf-8"});if(n.innerHTML=s,n.head&&[...n.head.childNodes].forEach(c=>ot(c,r.head)),n.body&&[...n.body.childNodes].forEach(c=>r.body?.appendChild(c)),n.body?.classList)for(let c of n.body?.classList)r.body.classList.add(c);if(n.body?.attributes)for(let c in n.body?.attributes){if(c==="class"||n.body.hasAttribute(c))continue;let u=n.body.getAttribute(c);u===!0?n.body.toggleAttribute(c):n.body.setAttribute(c,u)}let a=r.head.querySelector("script"),m=r.head.querySelector('script[type="importmap"]');m||(m=r.createElement("script"),m.setAttribute("type","importmap"));let p=JSON.parse(m.textContent||"{}");return p.imports||(p.imports={}),p.imports={...p.imports,...o.imports},m.textContent=JSON.stringify(p),a?a!==m&&r.head.insertBefore(m,a):r.head.appendChild(m),r}function ot(e,t){if(e instanceof tt){let o=`${e.tagName}${e.className?"."+e.className:""}${e.id?"#"+e.id:""}${Array.from(e.attributes).map(([r,n])=>`[${r}${typeof n=="string"?`="${n}"`:""}]`).join("")}`,i=t.querySelector(o);if(i){t.replaceChild(e,i);return}}t.appendChild(e)}import{fileURLToPath as rt}from"node:url";import h from"node:path";import H from"node:fs";import{Information as L,PackageGraph as nt}from"@papit/information";import{Arguments as it}from"@papit/arguments";function we(e){process.platform==="win32"&&e.url&&/^\/[A-Za-z]:/.test(e.url)&&(e.url=e.url.slice(1).replace(/\//g,"\\"));let o=(()=>{if(e.url&&H.existsSync(e.url)&&H.statSync(e.url).isFile())return{absolute:e.url,relative:h.relative(e.url,L.package.location)};let i=[it.string("folder"),e.url].filter(n=>n!==void 0),r=[L.local,L.package.location,L.root.location];for(let n of r){let s=h.join(n,...i);if(H.existsSync(s))return{absolute:s,relative:h.relative(n,s)||h.relative(L.package.location,L.local)||h.sep}}return{absolute:h.join(L.package.location,e.url??h.sep),relative:e.url??h.sep}})();return o.absolute.endsWith(h.sep)&&(o.absolute=o.absolute.slice(0,o.absolute.length-1)),{absolute:h.normalize(o.absolute),relative:h.normalize(o.relative)}}function Se(e){let o=rt(e);for(let i=0;i<5;i++)if(o=h.dirname(o),!!H.existsSync(h.join(o,"package.json")))return o;return null}function st(e){let t=e;for(;t!=="/"&&!H.existsSync(h.join(t,"package.json"));)t=h.dirname(t);return t}function E(e){let t=st(e.absolute);if(!t)throw new B(`could not find package at 1: ${t}`);let o=nt.search(t);if(!o)throw new B(`could not find package at 2: ${t}`);return o}async function Ee(e,t,o,i,r){let n=E(e),s=e.absolute.endsWith(".html")?e:{absolute:Te.join(e.absolute,"index.html"),relative:Te.join(e.relative,"index.html")},a,m=null;if(Q.existsSync(s.absolute))m=Q.statSync(s.absolute).mtimeMs,a=ve(n,s,o,i);else{let p=Q.readdirSync(e.absolute);a=be(n,p,e,i)}return r.add(e,Buffer.from(a.innerHTML,"utf8"),y.MimeTypes[".html"],m),a}import at from"node:fs";import{jsBundle as ct}from"@papit/bundle-js";import{Arguments as mt}from"@papit/arguments";async function ke(e,t){let o=E(e),i;if(await ct(mt.instance,o.location,{entryPointArray:[{input:e.absolute,output:void 0}],tsconfig:o?.tsconfig,externals:o?.externals,packageJSON:o?.packageJSON,esoptions:{write:!1}},r=>{r.type==="build"&&(i=r.result.outputFiles?.at(0)?.text)}),!i)throw new b("file not found: "+e.relative);return t.add(e,Buffer.from(i,"utf8"),y.MimeTypes[".js"],at.statSync(e.absolute)?.mtimeMs??null),i}import Y from"node:fs";import{Arguments as q}from"@papit/arguments";import{Terminal as _}from"@papit/terminal";var F=class{constructor(t){this.map=new Map;this._size=0;this.name="cache";this._maxSize=y.MAX_FILE_SIZE_TO_CACHE;t&&(this.name=t)}get size(){return this._size}get maxSize(){return this._maxSize}set maxSize(t){this._maxSize=t*1024*1024}get(t){let o=this.map.get(t.absolute);return!o||!Y.existsSync(t.absolute)?null:o.mtime===null||Y.statSync(t.absolute).mtimeMs===o.mtime?o:(this.delete(t),null)}delete(t,o=!1){let i=this.map.get(t.absolute);i&&(q.verbose&&!o&&_.write(_.yellow(t.relative),"removed from cache:"+_.blue(this.name)),this._size-=i.buffer.length,this.map.delete(t.absolute))}clear(){this.map.clear(),this._size=0}add(t,o,i,r){q.has("no-cache")||(this.delete(t,!0),this._size+=o.length,q.verbose&&_.write(_.yellow(t.relative),"added to cache:"+_.blue(this.name)),this.map.set(t.absolute,{mimeType:i??y.MimeTypes[t.absolute]??"text/plain",buffer:o,mtime:r===void 0?Y.statSync(t.absolute).mtimeMs:r}))}isCacheable(t,o){return!(t>this.maxSize||[".mp4",".webm",".ogv",".avi",".mov"].includes(o))}};import{createHash as pt}from"node:crypto";import Ce from"node:path";import{Arguments as ee}from"@papit/arguments";import{Terminal as P}from"@papit/terminal";import{Information as W,PackageGraph as lt}from"@papit/information";var j=new Map;function Ae(e,t,o){let i=e.headers["sec-websocket-key"],n=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${pt("sha1").update(i+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest("base64")}`];t.write(n.join(`\r
|
|
3
3
|
`)+`\r
|
|
4
4
|
\r
|
|
5
|
-
`),ee.info&&
|
|
5
|
+
`),ee.info&&P.write(P.blue("client connected")),t.on("end",()=>j.delete(t)),t.on("close",()=>j.delete(t)),t.on("error",s=>{s.code==="ECONNRESET"&&j.delete(t)}),t.on("data",s=>{try{let a=ft(s);switch(a.opcode){case 1:let m=a.payload.toString("utf8");try{let c=JSON.parse(m);if(c.type==="register"){let u=E({relative:c.location,absolute:Ce.join(W.root.location,c.location)});u.name===W.root.name&&(u=W.package),j.set(t,u)}}catch{}break;case 8:t.end();break;case 9:let p=Re({type:"pong"});t.write(p);break;default:console.log("Unknown opcode:",a.opcode)}}catch(a){console.error("Error parsing WebSocket frame:",a)}})}function te(e){try{if(j.size===0){ee.verbose&&P.write("No clients connected to send update!");return}let t=Re({action:"update",filename:"/"+Ce.relative(W.root.location,e.location)});j.forEach((o,i)=>{if(!(o.name!==e.name&&!lt.getDescendants(e.name).some(n=>n.name===o.name))){if(!i||!i.writable){ee.verbose&&P.error(P.blue("socket"),"[error] could not find client"),j.delete(i);return}i.write(t)}})}catch(t){console.log("[socket error]",t)}}function Re(e){let t=Buffer.from(JSON.stringify(e),"utf8"),o=t.length,i=2;o>125&&o<=65535?i+=2:o>65535&&(i+=8);let r=Buffer.alloc(i+o);r[0]=129;let n=2;return o<=125?r[1]=o:o<=65535?(r[1]=126,r.writeUInt16BE(o,n),n+=2):(r[1]=127,r.writeBigUInt64BE(BigInt(o),n),n+=8),t.copy(r,n),r}function ft(e){let t=e[0],o=e[1],i=(t&128)!==0,r=t&15,n=(o&128)!==0,s=o&127,a=2;if(s===126?(s=e.readUInt16BE(a),a+=2):s===127&&(s=Number(e.readBigUInt64BE(a)),a+=8),!n)throw new Error("Expected masked frame from client");let m=e.slice(a,a+4);a+=4;let p=e.slice(a,a+s),c=Buffer.alloc(s);for(let u=0;u<s;u++)c[u]=p[u]^m[u%4];return{opcode:r,payload:c}}import ut from"node:net";import{Terminal as dt}from"@papit/terminal";function gt(e,t="0.0.0.0"){return new Promise(o=>{let i=ut.createServer().once("error",()=>o(!1)).once("listening",()=>{i.close(()=>o(!0))}).listen(e,t)})}async function Le(e,t=20){for(let o=0;o<t;o++){let i=e+o;if(await gt(i))return i}dt.error(`No free ports found in range [${e}, ${e+t}]`),process.exit(1)}import{build as bt}from"@papit/build";var k=l.number("port")||3e3,M=null;function je(e,t,o,i,r){return k=l.number("port")||3e3,new Promise(async n=>{k=await Le(k),M=ht.createServer();let s=new F("file");s.maxSize=l.number("cache-file")??50;let a=new F("html");a.maxSize=l.number("cache-html")??50;let m=new F("bundle");m.maxSize=l.number("cache-bundle")??150,l.has("live")&&vt(),C.packageName!=="@papit/server"&&!l.has("serve")&&(l.info&&d.write(d.blue("listening to file changes"),C.package.name),l.set("no-bundle",!0),l.set("live",!0),l.set("location",C.package.location),l.set("mode","dev"),l.set("buildMode","ancestors")),M.listen(k,()=>{if(l.set("port",k),l.silent||d.write("server:",d.blue(k),d.yellow("- running")),l.has("open")){let p=x.join(`http://localhost:${k}`,x.relative(C.root.location,C.package.location)),c=x.join(p,l.string("open")??l.string("folder")??"");switch(process.platform){case"win32":d.execute(`start "${c}"`,p);break;case"darwin":d.execute(`open "${c}"`,p);break;case"linux":d.execute(`xdg-open "${c}"`,p);break}}n()}),M.on("request",async(p,c)=>{try{if(p.method!=="GET")throw c.setHeader("Allow","GET"),new D;if(p.url?.startsWith("/.well-known"))return c.end("ok");p.url?.endsWith("/favicon.ico")&&(p.url="/favicon.svg");try{let g=await fe(p.url,t,o,s,c);if(g==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",g.mimeType),c.end(g.buffer);return}catch{}let u=p.url?.split("@")?.at(1);if(u){let g=r.get("@"+u);if(g){let T=z({absolute:x.normalize(g),relative:x.normalize(x.relative(C.root.location,g))},s,c);if(T==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",T.mimeType),c.end(T.buffer);return}}let f=we(p),S=oe.statSync(f.absolute);if(S.isDirectory()){let g=x.join(f.absolute,"index.html");oe.existsSync(g)&&(f.absolute=g,f.relative=x.join(f.relative,"index.html"))}let I=a.get(f)??m.get(f)??s.get(f);if(I)return l.info&&d.write(d.yellow(f.relative),"found in cache"),c.statusCode=200,c.setHeader("Content-Type",I.mimeType),c.setHeader("X-Cache","HIT"),c.end(I.buffer);if(c.setHeader("X-Cache","MISS"),S.isDirectory()||x.extname(f.absolute)===".html"){if(p.headers["x-router"]){let T=oe.readFileSync(f.absolute,{encoding:"utf-8"});c.statusCode=200,c.setHeader("Content-Type","text/html"),c.end(T);return}let g=await Ee(f,o,i,e,a);c.statusCode=200,l.has("prod")||c.setHeader("Cache-Control","no-store"),c.end(g.outerHTML);return}if(/\.tsx?/.test(f.absolute)&&(p.headers.referer?.endsWith(".js")||p.headers["sec-fetch-dest"]==="script")){let g=await ke(f,m);c.statusCode=200,c.setHeader("Content-Type","text/javascript"),c.end(g);return}let v=z(f,s,c);if(v==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",v.mimeType),c.end(v.buffer)}catch(u){xt(u,c)}}),M.on("error",p=>{l.error&&d.error(p.name,p.message,p.stack??"")}),M.on("upgrade",Ae)})}function Ie(){M?.close(),l.silent||d.write("server:",d.blue(String(k)),d.yellow("- shutdown"))}function xt(e,t){l.error&&console.trace("[SERVER]",e),e instanceof A?t.statusCode=e.status:t.statusCode=500,typeof e=="string"?t.write(e):e&&typeof e=="object"&&"message"in e?t.write(e.message):t.write("something went wrong"),t.end()}function vt(){let e=yt.watch(C.root.location,{ignored:r=>r.includes("/node_modules/")||r.includes("/.temp/")||r.includes("/.vscode/")||r.includes("/.github/")||r.includes("/.git/")||r.includes("/lib/")||/\/tests?\//.test(r),persistent:!0,followSymlinks:!1}),t=!1;e.on("ready",()=>{t=!0});let o=!1,i=async r=>{o=!0;try{await bt(l.instance,r,(n,s)=>{s==="success"?(l.info&&d.write(d.blue("rebuilt"),r.name),te(r)):s==="skipped"?l.info&&d.write(d.blue("skipped"),r.name):l.info&&d.error(r.name)})}catch(n){l.error&&d.error(n)}finally{o=!1}};e.on("all",(r,n,s)=>{if(!t||o)return;let a={absolute:n,relative:x.relative(C.root.location,n)},m=E(a);a.relative.includes(m.sourceFolder+"/")?i(m):te(m),l.debug&&console.log("SERVER LIVE RELOAD",{url:a,package:{name:m.name,location:m.location,src:m.sourceFolder},includes:a.relative.includes(m.sourceFolder+"/")})})}import _e from"node:fs";import U from"node:path";import{Information as Fe}from"@papit/information";import{pathToFileURL as wt}from"node:url";function Ne(e,t,o){Me(e.name,e.location,e.packageJSON,t);for(let i in e.packageJSON.dependencies){if(i.startsWith(Fe.scope)||["chokidar","esbuild","@microsoft/api-extractor","typescript","playwright"].includes(i))continue;let r=U.join(Fe.root.location,"node_modules",i),n=U.join(r,"package.json");if(!_e.existsSync(n))continue;let s=JSON.parse(_e.readFileSync(n,{encoding:"utf-8"}));Me(i,r,s,t,!0)}}function Me(e,t,o,i,r=!1){let n=(s,a)=>{i.imports[s]||(i.imports[s]=wt(a).pathname)};if(o.exports)if(typeof o.exports=="string")n(e,U.resolve(t,o.exports));else for(let s in o.exports){let a=o.name;s!=="."&&s!=="default"&&(a+="/"+s.replace(/^\.?\/?/,""));let m=typeof o.exports[s]=="string"?o.exports[s]:o.exports[s]?.import;m&&n(a,U.resolve(t,m))}o.main&&n(e,U.resolve(t,o.main))}async function St(){let e=Se(import.meta.url);e==null&&(Be.error("script location of @papit/server is missing"),process.exit(1)),w.package.packageJSON||(Be.error("location is not a package, missing package.json"),process.exit(1));let o={data:{},map:{}},i={},r=de();await K(e,o,i,r);let n={imports:{}},s=new Map,a=null;w.root.location===w.package.location?a=re.join(w.root.location,"node_modules"):a=re.join(w.package.location,G.string("import-map")??".temp/dependencies");let m=!1;a&&!ne.existsSync(a)&&(m=!0,ne.mkdirSync(a,{recursive:!0})),w.package.location!==w.root.location&&G.set("ancestors",!0);let p=w.getBatches();for(let c of p)for(let u of c){if(u.packageJSON.papit.type==="theme"){let f=u.entrypoints.entries.theme?.import?.output??u.entrypoints.entries.bundle?.import?.output;f&&s.set(u.name,f);continue}a&&Ne(u,n,a),!(!G.has("include-node")&&u.packageJSON.papit.type==="node")&&await K(u.location,o,i,r)}return{importmap:n,importmapFolder:a,createdImportMapFolder:m,serverPackageLocation:e,translations:o,assets:i,themes:s}}async function ze(){let{importmap:e,importmapFolder:t,createdImportMapFolder:o,serverPackageLocation:i,translations:r,assets:n,themes:s}=await St(),a=()=>{t&&o&&!G.has("import-map")&&ne.rmSync(re.join(w.package.location,".temp"),{force:!0,recursive:!0}),console.log(),Ie(),process.exit(0)};process.on("SIGINT",a),process.on("SIGTERM",a),process.on("SIGHUP",a),await je(i,r,n,e,s)}(async function(){ze()})();
|
package/lib/bundle.d.ts
CHANGED
|
@@ -7,6 +7,20 @@ export { close_2 as close }
|
|
|
7
7
|
|
|
8
8
|
export declare function error(filename: string, errors: any[]): void;
|
|
9
9
|
|
|
10
|
+
declare type Importmap = {
|
|
11
|
+
imports: Record<string, string>;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export declare function meta(): Promise<{
|
|
15
|
+
importmap: Importmap;
|
|
16
|
+
importmapFolder: string;
|
|
17
|
+
createdImportMapFolder: boolean;
|
|
18
|
+
serverPackageLocation: string;
|
|
19
|
+
translations: Translations;
|
|
20
|
+
assets: Record<string, string[]>;
|
|
21
|
+
themes: Map<string, string>;
|
|
22
|
+
}>;
|
|
23
|
+
|
|
10
24
|
export declare let server: null | http.Server;
|
|
11
25
|
|
|
12
26
|
export declare function setup(): Promise<void>;
|
package/lib/bundle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import ne from"node:path";import ie from"node:fs";import{Arguments as G}from"@papit/arguments";import{Terminal as Be}from"@papit/terminal";import{Information as T}from"@papit/information";import K from"node:path";import Z from"node:fs";import ze from"node:fs";import B from"node:path";import{deepMergeTwo as He}from"@papit/deep-merge";function se(e,o,t){let i=JSON.parse(ze.readFileSync(o,{encoding:"utf-8"})),r=i?.meta?.language??B.basename(o,".json");t.data[r]||(t.data[r]={meta:i.meta}),t.data[r]=He(t.data[r],i,["meta"]);let s=B.relative(e,o).split(B.sep);for(;s.length>0;){let a="/"+s.join("/");t.map[a]=r,s.shift()}}function ae(e){if(!e.endsWith(".json"))return!1;let o=B.basename(B.dirname(e));return/^(transl|locale|i18)/i.test(o)}import j from"node:path";var L=class extends Error{constructor(o,t){super(o,t),this.name="http-error"}},z=class extends L{constructor(o,t){super(o??"internal server error",t),this.name="Internal Server Error",this.status=500}},x=class extends L{constructor(o,t){super(o??"not found",t),this.name="Not Found",this.status=404}},D=class extends L{constructor(o,t){super(o??"method not allowed",t),this.name="Method not allowed",this.status=405}};import X from"node:fs";import Oe from"node:path";import{Arguments as De}from"@papit/arguments";import{Arguments as ce}from"@papit/arguments";var y=class{static{this.MimeTypes={".html":"text/html",".htm":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".ts":"text/typescript",".tsx":"text/typescript",".jsx":"text/javascript",".json":"application/json",".xml":"application/xml",".txt":"text/plain",".md":"text/markdown",".markdown":"text/markdown",".csv":"text/csv",".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".bmp":"image/bmp",".tiff":"image/tiff",".tif":"image/tiff",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".m4a":"audio/mp4",".mp4":"video/mp4",".webm":"video/webm",".ogv":"video/ogg",".avi":"video/x-msvideo",".mov":"video/quicktime",".zip":"application/zip",".tar":"application/x-tar",".gz":"application/gzip",".7z":"application/x-7z-compressed",".rar":"application/vnd.rar"}}static{this._MAX_CACHE_SIZE=50*1024*1024}static{this._MAX_FILE_SIZE_TO_CACHE=1024*1024}static{this.BinaryExtensions=new Set([".png",".jpg",".jpeg",".gif",".ico",".webp",".bmp",".tiff",".tif",".woff",".woff2",".ttf",".otf",".eot",".mp3",".wav",".ogg",".m4a",".mp4",".webm",".ogv",".avi",".mov",".zip",".tar",".gz",".7z",".rar",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx"])}static get MAX_CACHE_SIZE(){return ce.number("MAX_CACHE_SIZE")??this._MAX_CACHE_SIZE}static get MAX_FILE_SIZE_TO_CACHE(){return ce.number("MAX_FILE_SIZE_TO_CACHE")??this._MAX_FILE_SIZE_TO_CACHE}};import Ue from"node:path";import me from"node:fs";import{Arguments as pe}from"@papit/arguments";import{Terminal as Pe}from"@papit/terminal";async function le(e,o,t){return new Promise((i,r)=>{let s=y.BinaryExtensions.has(Ue.extname(e))?me.createReadStream(e,{signal:t}):me.createReadStream(e,{signal:t,encoding:"utf-8"});s.pipe(o),s.on("error",a=>{pe.error&&Pe.error("streaming error",e),pe.verbose&&console.trace(a),r(new x(a.message))}),s.on("close",i)})}function H(e,o,t,i){if(!X.existsSync(e.absolute))throw new x(`${e.relative} not found`);let r=Oe.extname(e.absolute),n=X.statSync(e.absolute);if(!o.isCacheable(n.size,r))return le(e.absolute,t,i),"streamed";let s=y.MimeTypes[r]??"text/plain",a=X.readFileSync(e.absolute),m={mimeType:s,buffer:a,mtime:n.mtimeMs};return De.has("no-cache")&&o.add(e,a,s,m.mtime),m}function fe(e,o,t){let r=j.relative(e,o).split(j.sep);for(;r.length>0;){let n=j.join(j.sep+r.join(j.sep));t[n]||(t[n]=[]),t[n].push(o),r.shift()}}async function ue(e,o,t,i,r,n){let s=j.normalize(e);if(o.map[s]){let m=o.map[s];if(m)return{mimeType:"application/json",buffer:Buffer.from(JSON.stringify(o.data[m]))}}let a=[...t[s]];for(;a.length>0;){let m=a.pop();try{return H({absolute:j.normalize(m),relative:s},i,r,n)}catch{}}throw new x(`asset "${s}" not found`)}import{Arguments as de}from"@papit/arguments";function ge(){let e=["asset","assets","public"];if(de.has("asset")){let o=de.get("asset");e.push(...o)}return e}var $e=new Set(["node_modules",".git",".temp","lib","dist","src","explorer-icons"]);async function V(e,o,t,i){let r=he(e,(n,s,a)=>{if($e.has(n))return!1;if(!a){if(K.dirname(s)===e)return!1;let m=s.split(K.sep);if(!i.some(p=>m.includes(p)))return!1}return!0});for(let n of r)ae(n)?se(e,n,o):fe(e,n,t)}function he(e,o,t=0){if(!Z.existsSync(e)||t>10)return[];let i=[],r=Z.readdirSync(e);for(let n of r){let s=K.join(e,n),m=Z.statSync(s).isDirectory();o&&!o(n,s,m)||(m?i.push(...he(s,o,t+1)):i.push(s))}return i}import gt from"node:http";import re from"node:fs";import w from"node:path";import ht from"chokidar";import{Information as R}from"@papit/information";import{Arguments as f}from"@papit/arguments";import{Terminal as d}from"@papit/terminal";import Ee from"node:path";import Y from"node:fs";import W from"node:path";import be from"node:fs";import{Document as Xe}from"@papit/html";import{Arguments as Ze}from"@papit/arguments";import{Terminal as Ke}from"@papit/terminal";import{Document as We}from"@papit/html";import Je from"node:path";import Q from"node:fs";import{Arguments as ye}from"@papit/arguments";import{Terminal as Ge}from"@papit/terminal";function $(e,o){let t=new We,i=`${e}-template`,r=Je.join(o,"asset","templates",e,"index.html"),n=ye.string(i);if(n&&Q.existsSync(n)&&(r=n),!Q.existsSync(r))return ye.error&&Ge.error(`could not find ${e} template html file`),t.innerHTML='<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>@papit/server</title><meta name="description" content="Development server" /><meta name="color-scheme" content="light dark" /></head><body>Llama Trauma Baby Mama</body></html>',t;let s=Q.readFileSync(r,{encoding:"utf-8"});return t.innerHTML=s,t}function xe(e,o,t,i){let r=$("explorer",i);r.title=e.packageJSON.name;let n=Ze.string("explorer-spritesheet")??W.join(i,"asset/icons/explorer-spritesheet.svg"),s=be.readFileSync(n,{encoding:"utf-8"}),a=new Xe;a.innerHTML=s,a.documentElement||(Ke.error("something went wrong loading explorer icon spritesheet"),process.exit(1)),a.documentElement.setAttribute("style","display:none"),r.body?.appendChild(a.documentElement);let m=r.querySelector("[data-location]"),p=W.relative(e.location,t.absolute);p?m.innerHTML=p:m.parentElement?.removeChild(m);let c=r.querySelector("ul[data-folders]"),u=r.querySelector("ul[data-files]");return t.relative!==""&&(c.innerHTML='<li class="hidden"><a href=".."><svg><use href="#folder" /></svg><span class="name">..</span></a></li>'),o.sort((l,b)=>l.localeCompare(b)).forEach(l=>{let b=W.join(t.absolute,l),I=be.statSync(b),S=r.createElement("li");S.innerHTML=`<a href="${l}"><svg><use href="" /></svg><span class="name">${l}</span></a>`;let g=S.querySelector("a"),E=g.querySelector("use");if(!l.startsWith(".env")&&!l.startsWith(".git")&&l.startsWith(".")&&S.classList.add("hidden"),I.isFile()){E?.setAttribute("href","#"+Ve(b,r)),u.appendChild(S);return}I.isDirectory()&&(E?.setAttribute("href","#"+Qe(b,r)),g.setAttribute("href",l+"/"),c.appendChild(S))}),r}function Ve(e,o){let t=W.basename(e),i=t.split(".");t.startsWith(".")&&i.shift();let r=i.at(0)??t,n;if(t.startsWith(".git")||/\.git/.test(e))n="git";else if(t==="package.json")n="package";else if(t.startsWith("tsconfig"))n="tsconfig";else if(r.startsWith("eslint"))n="eslint";else if(/translation/.test(e)){if(o.querySelector("symbol#"+r))return r;n="language"}else/\.vscode/.test(e)&&(n="vscode");if(o.querySelector("symbol#"+n))return n;let s=i.slice(i.length-2).join("_");if(o.querySelector("symbol#"+s))return s;let a=i.pop()??t;return o.querySelector("symbol#"+a)?a:"file"}function Qe(e,o){return"folder"}import Ye from"node:fs";import{Document as qe,Element as et}from"@papit/html";import{Terminal as ve}from"@papit/terminal";function we(e,o,t,i){let r=$("live",i);r.body||(ve.error("live document template is missing body"),process.exit(1)),r.head||(ve.error("live document template is missing head"),process.exit(1));let n=new qe,s=Ye.readFileSync(o.absolute,{encoding:"utf-8"});if(n.innerHTML=s,n.head&&[...n.head.childNodes].forEach(c=>tt(c,r.head)),n.body&&[...n.body.childNodes].forEach(c=>r.body?.appendChild(c)),n.body?.classList)for(let c of n.body?.classList)r.body.classList.add(c);if(n.body?.attributes)for(let c in n.body?.attributes){if(c==="class"||n.body.hasAttribute(c))continue;let u=n.body.getAttribute(c);u===!0?n.body.toggleAttribute(c):n.body.setAttribute(c,u)}let a=r.head.querySelector("script"),m=r.head.querySelector('script[type="importmap"]');m||(m=r.createElement("script"),m.setAttribute("type","importmap"));let p=JSON.parse(m.textContent||"{}");return p.imports||(p.imports={}),p.imports={...p.imports,...t.imports},m.textContent=JSON.stringify(p),a?a!==m&&r.head.insertBefore(m,a):r.head.appendChild(m),r}function tt(e,o){if(e instanceof et){let t=`${e.tagName}${e.className?"."+e.className:""}${e.id?"#"+e.id:""}${Array.from(e.attributes).map(([r,n])=>`[${r}${typeof n=="string"?`="${n}"`:""}]`).join("")}`,i=o.querySelector(t);if(i){o.replaceChild(e,i);return}}o.appendChild(e)}import{fileURLToPath as ot}from"node:url";import h from"node:path";import U from"node:fs";import{Information as _,PackageGraph as rt}from"@papit/information";import{Arguments as nt}from"@papit/arguments";function Se(e){process.platform==="win32"&&e.url&&/^\/[A-Za-z]:/.test(e.url)&&(e.url=e.url.slice(1).replace(/\//g,"\\"));let t=(()=>{if(e.url&&U.existsSync(e.url)&&U.statSync(e.url).isFile())return{absolute:e.url,relative:h.relative(e.url,_.package.location)};let i=[nt.string("folder"),e.url].filter(n=>n!==void 0),r=[_.local,_.package.location,_.root.location];for(let n of r){let s=h.join(n,...i);if(U.existsSync(s))return{absolute:s,relative:h.relative(n,s)||h.relative(_.package.location,_.local)||h.sep}}return{absolute:h.join(_.package.location,e.url??h.sep),relative:e.url??h.sep}})();return t.absolute.endsWith(h.sep)&&(t.absolute=t.absolute.slice(0,t.absolute.length-1)),{absolute:h.normalize(t.absolute),relative:h.normalize(t.relative)}}function Te(e){let t=ot(e);for(let i=0;i<5;i++)if(t=h.dirname(t),!!U.existsSync(h.join(t,"package.json")))return t;return null}function it(e){let o=e;for(;o!=="/"&&!U.existsSync(h.join(o,"package.json"));)o=h.dirname(o);return o}function k(e){let o=it(e.absolute);if(!o)throw new z(`could not find package at 1: ${o}`);let t=rt.search(o);if(!t)throw new z(`could not find package at 2: ${o}`);return t}async function ke(e,o,t,i,r){let n=k(e),s=e.absolute.endsWith(".html")?e:{absolute:Ee.join(e.absolute,"index.html"),relative:Ee.join(e.relative,"index.html")},a,m=null;if(Y.existsSync(s.absolute))m=Y.statSync(s.absolute).mtimeMs,a=we(n,s,t,i);else{let p=Y.readdirSync(e.absolute);a=xe(n,p,e,i)}return r.add(e,Buffer.from(a.innerHTML,"utf8"),y.MimeTypes[".html"],m),a}import st from"node:fs";import{jsBundle as at}from"@papit/bundle-js";import{Arguments as ct}from"@papit/arguments";async function Ce(e,o){let t=k(e),i;if(await at(ct.instance,t.location,{entryPointArray:[{input:e.absolute,output:void 0}],tsconfig:t?.tsconfig,externals:t?.externals,packageJSON:t?.packageJSON,esoptions:{write:!1}},r=>{r.type==="build"&&(i=r.result.outputFiles?.at(0)?.text)}),!i)throw new x("file not found: "+e.relative);return o.add(e,Buffer.from(i,"utf8"),y.MimeTypes[".js"],st.statSync(e.absolute)?.mtimeMs??null),i}import q from"node:fs";import{Arguments as ee}from"@papit/arguments";import{Terminal as F}from"@papit/terminal";var N=class{constructor(o){this.map=new Map;this._size=0;this.name="cache";this._maxSize=y.MAX_FILE_SIZE_TO_CACHE;o&&(this.name=o)}get size(){return this._size}get maxSize(){return this._maxSize}set maxSize(o){this._maxSize=o*1024*1024}get(o){let t=this.map.get(o.absolute);return!t||!q.existsSync(o.absolute)?null:t.mtime===null||q.statSync(o.absolute).mtimeMs===t.mtime?t:(this.delete(o),null)}delete(o,t=!1){let i=this.map.get(o.absolute);i&&(ee.verbose&&!t&&F.write(F.yellow(o.relative),"removed from cache:"+F.blue(this.name)),this._size-=i.buffer.length,this.map.delete(o.absolute))}clear(){this.map.clear(),this._size=0}add(o,t,i,r){ee.has("no-cache")||(this.delete(o,!0),this._size+=t.length,ee.verbose&&F.write(F.yellow(o.relative),"added to cache:"+F.blue(this.name)),this.map.set(o.absolute,{mimeType:i??y.MimeTypes[o.absolute]??"text/plain",buffer:t,mtime:r===void 0?q.statSync(o.absolute).mtimeMs:r}))}isCacheable(o,t){return!(o>this.maxSize||[".mp4",".webm",".ogv",".avi",".mov"].includes(t))}};import{createHash as mt}from"node:crypto";import Ae from"node:path";import{Arguments as P}from"@papit/arguments";import{Terminal as C}from"@papit/terminal";import{Information as J}from"@papit/information";var v=new Map;function Re(e,o,t){let i=e.headers["sec-websocket-key"],n=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${mt("sha1").update(i+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest("base64")}`];o.write(n.join(`\r
|
|
1
|
+
import ne from"node:path";import ie from"node:fs";import{Arguments as J}from"@papit/arguments";import{Terminal as Be}from"@papit/terminal";import{Information as S}from"@papit/information";import K from"node:path";import Z from"node:fs";import ze from"node:fs";import B from"node:path";import{deepMergeTwo as He}from"@papit/deep-merge";function se(e,o,t){let i=JSON.parse(ze.readFileSync(o,{encoding:"utf-8"})),r=i?.meta?.language??B.basename(o,".json");t.data[r]||(t.data[r]={meta:i.meta}),t.data[r]=He(t.data[r],i,["meta"]);let s=B.relative(e,o).split(B.sep);for(;s.length>0;){let a="/"+s.join("/");t.map[a]=r,s.shift()}}function ae(e){if(!e.endsWith(".json"))return!1;let o=B.basename(B.dirname(e));return/^(transl|locale|i18)/i.test(o)}import j from"node:path";var L=class extends Error{constructor(o,t){super(o,t),this.name="http-error"}},z=class extends L{constructor(o,t){super(o??"internal server error",t),this.name="Internal Server Error",this.status=500}},b=class extends L{constructor(o,t){super(o??"not found",t),this.name="Not Found",this.status=404}},O=class extends L{constructor(o,t){super(o??"method not allowed",t),this.name="Method not allowed",this.status=405}};import X from"node:fs";import De from"node:path";import{Arguments as Oe}from"@papit/arguments";import{Arguments as ce}from"@papit/arguments";var y=class{static{this.MimeTypes={".html":"text/html",".htm":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".ts":"text/typescript",".tsx":"text/typescript",".jsx":"text/javascript",".json":"application/json",".xml":"application/xml",".txt":"text/plain",".md":"text/markdown",".markdown":"text/markdown",".csv":"text/csv",".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".bmp":"image/bmp",".tiff":"image/tiff",".tif":"image/tiff",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".m4a":"audio/mp4",".mp4":"video/mp4",".webm":"video/webm",".ogv":"video/ogg",".avi":"video/x-msvideo",".mov":"video/quicktime",".zip":"application/zip",".tar":"application/x-tar",".gz":"application/gzip",".7z":"application/x-7z-compressed",".rar":"application/vnd.rar"}}static{this._MAX_CACHE_SIZE=50*1024*1024}static{this._MAX_FILE_SIZE_TO_CACHE=1024*1024}static{this.BinaryExtensions=new Set([".png",".jpg",".jpeg",".gif",".ico",".webp",".bmp",".tiff",".tif",".woff",".woff2",".ttf",".otf",".eot",".mp3",".wav",".ogg",".m4a",".mp4",".webm",".ogv",".avi",".mov",".zip",".tar",".gz",".7z",".rar",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx"])}static get MAX_CACHE_SIZE(){return ce.number("MAX_CACHE_SIZE")??this._MAX_CACHE_SIZE}static get MAX_FILE_SIZE_TO_CACHE(){return ce.number("MAX_FILE_SIZE_TO_CACHE")??this._MAX_FILE_SIZE_TO_CACHE}};import Pe from"node:path";import me from"node:fs";import{Arguments as pe}from"@papit/arguments";import{Terminal as Ue}from"@papit/terminal";async function le(e,o,t){return new Promise((i,r)=>{let s=y.BinaryExtensions.has(Pe.extname(e))?me.createReadStream(e,{signal:t}):me.createReadStream(e,{signal:t,encoding:"utf-8"});s.pipe(o),s.on("error",a=>{pe.error&&Ue.error("streaming error",e),pe.verbose&&console.trace(a),r(new b(a.message))}),s.on("close",i)})}function H(e,o,t,i){if(!X.existsSync(e.absolute))throw new b(`${e.relative} not found`);let r=De.extname(e.absolute),n=X.statSync(e.absolute);if(!o.isCacheable(n.size,r))return le(e.absolute,t,i),"streamed";let s=y.MimeTypes[r]??"text/plain",a=X.readFileSync(e.absolute),m={mimeType:s,buffer:a,mtime:n.mtimeMs};return Oe.has("no-cache")&&o.add(e,a,s,m.mtime),m}function fe(e,o,t){let r=j.relative(e,o).split(j.sep);for(;r.length>0;){let n=j.join(j.sep+r.join(j.sep));t[n]||(t[n]=[]),t[n].push(o),r.shift()}}async function ue(e,o,t,i,r,n){let s=j.normalize(e);if(o.map[s]){let m=o.map[s];if(m)return{mimeType:"application/json",buffer:Buffer.from(JSON.stringify(o.data[m]))}}let a=[...t[s]];for(;a.length>0;){let m=a.pop();try{return H({absolute:j.normalize(m),relative:s},i,r,n)}catch{}}throw new b(`asset "${s}" not found`)}import{Arguments as de}from"@papit/arguments";function ge(){let e=["asset","assets","public"];if(de.has("asset")){let o=de.get("asset");e.push(...o)}return e}var $e=new Set(["node_modules",".git",".temp","lib","dist","src","explorer-icons"]);async function V(e,o,t,i){let r=he(e,(n,s,a)=>{if($e.has(n))return!1;if(!a){if(K.dirname(s)===e)return!1;let m=s.split(K.sep);if(!i.some(p=>m.includes(p)))return!1}return!0});for(let n of r)ae(n)?se(e,n,o):fe(e,n,t)}function he(e,o,t=0){if(!Z.existsSync(e)||t>10)return[];let i=[],r=Z.readdirSync(e);for(let n of r){let s=K.join(e,n),m=Z.statSync(s).isDirectory();o&&!o(n,s,m)||(m?i.push(...he(s,o,t+1)):i.push(s))}return i}import ht from"node:http";import re from"node:fs";import v from"node:path";import yt from"chokidar";import{Information as R}from"@papit/information";import{Arguments as l}from"@papit/arguments";import{Terminal as d}from"@papit/terminal";import Ee from"node:path";import Y from"node:fs";import W from"node:path";import be from"node:fs";import{Document as Xe}from"@papit/html";import{Arguments as Ze}from"@papit/arguments";import{Terminal as Ke}from"@papit/terminal";import{Document as We}from"@papit/html";import Ge from"node:path";import Q from"node:fs";import{Arguments as ye}from"@papit/arguments";import{Terminal as Je}from"@papit/terminal";function $(e,o){let t=new We,i=`${e}-template`,r=Ge.join(o,"asset","templates",e,"index.html"),n=ye.string(i);if(n&&Q.existsSync(n)&&(r=n),!Q.existsSync(r))return ye.error&&Je.error(`could not find ${e} template html file`),t.innerHTML='<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>@papit/server</title><meta name="description" content="Development server" /><meta name="color-scheme" content="light dark" /></head><body>Llama Trauma Baby Mama</body></html>',t;let s=Q.readFileSync(r,{encoding:"utf-8"});return t.innerHTML=s,t}function xe(e,o,t,i){let r=$("explorer",i);r.title=e.packageJSON.name;let n=Ze.string("explorer-spritesheet")??W.join(i,"asset/icons/explorer-spritesheet.svg"),s=be.readFileSync(n,{encoding:"utf-8"}),a=new Xe;a.innerHTML=s,a.documentElement||(Ke.error("something went wrong loading explorer icon spritesheet"),process.exit(1)),a.documentElement.setAttribute("style","display:none"),r.body?.appendChild(a.documentElement);let m=r.querySelector("[data-location]"),p=W.relative(e.location,t.absolute);p?m.innerHTML=p:m.parentElement?.removeChild(m);let c=r.querySelector("ul[data-folders]"),u=r.querySelector("ul[data-files]");return t.relative!==""&&(c.innerHTML='<li class="hidden"><a href=".."><svg><use href="#folder" /></svg><span class="name">..</span></a></li>'),o.sort((f,T)=>f.localeCompare(T)).forEach(f=>{let T=W.join(t.absolute,f),_=be.statSync(T),w=r.createElement("li");w.innerHTML=`<a href="${f}"><svg><use href="" /></svg><span class="name">${f}</span></a>`;let g=w.querySelector("a"),E=g.querySelector("use");if(!f.startsWith(".env")&&!f.startsWith(".git")&&f.startsWith(".")&&w.classList.add("hidden"),_.isFile()){E?.setAttribute("href","#"+Ve(T,r)),u.appendChild(w);return}_.isDirectory()&&(E?.setAttribute("href","#"+Qe(T,r)),g.setAttribute("href",f+"/"),c.appendChild(w))}),r}function Ve(e,o){let t=W.basename(e),i=t.split(".");t.startsWith(".")&&i.shift();let r=i.at(0)??t,n;if(t.startsWith(".git")||/\.git/.test(e))n="git";else if(t==="package.json")n="package";else if(t.startsWith("tsconfig"))n="tsconfig";else if(r.startsWith("eslint"))n="eslint";else if(/translation/.test(e)){if(o.querySelector("symbol#"+r))return r;n="language"}else/\.vscode/.test(e)&&(n="vscode");if(o.querySelector("symbol#"+n))return n;let s=i.slice(i.length-2).join("_");if(o.querySelector("symbol#"+s))return s;let a=i.pop()??t;return o.querySelector("symbol#"+a)?a:"file"}function Qe(e,o){return"folder"}import Ye from"node:fs";import{Document as qe,Element as et}from"@papit/html";import{Terminal as ve}from"@papit/terminal";function we(e,o,t,i){let r=$("live",i);r.body||(ve.error("live document template is missing body"),process.exit(1)),r.head||(ve.error("live document template is missing head"),process.exit(1));let n=new qe,s=Ye.readFileSync(o.absolute,{encoding:"utf-8"});if(n.innerHTML=s,n.head&&[...n.head.childNodes].forEach(c=>tt(c,r.head)),n.body&&[...n.body.childNodes].forEach(c=>r.body?.appendChild(c)),n.body?.classList)for(let c of n.body?.classList)r.body.classList.add(c);if(n.body?.attributes)for(let c in n.body?.attributes){if(c==="class"||n.body.hasAttribute(c))continue;let u=n.body.getAttribute(c);u===!0?n.body.toggleAttribute(c):n.body.setAttribute(c,u)}let a=r.head.querySelector("script"),m=r.head.querySelector('script[type="importmap"]');m||(m=r.createElement("script"),m.setAttribute("type","importmap"));let p=JSON.parse(m.textContent||"{}");return p.imports||(p.imports={}),p.imports={...p.imports,...t.imports},m.textContent=JSON.stringify(p),a?a!==m&&r.head.insertBefore(m,a):r.head.appendChild(m),r}function tt(e,o){if(e instanceof et){let t=`${e.tagName}${e.className?"."+e.className:""}${e.id?"#"+e.id:""}${Array.from(e.attributes).map(([r,n])=>`[${r}${typeof n=="string"?`="${n}"`:""}]`).join("")}`,i=o.querySelector(t);if(i){o.replaceChild(e,i);return}}o.appendChild(e)}import{fileURLToPath as ot}from"node:url";import h from"node:path";import P from"node:fs";import{Information as I,PackageGraph as rt}from"@papit/information";import{Arguments as nt}from"@papit/arguments";function Se(e){process.platform==="win32"&&e.url&&/^\/[A-Za-z]:/.test(e.url)&&(e.url=e.url.slice(1).replace(/\//g,"\\"));let t=(()=>{if(e.url&&P.existsSync(e.url)&&P.statSync(e.url).isFile())return{absolute:e.url,relative:h.relative(e.url,I.package.location)};let i=[nt.string("folder"),e.url].filter(n=>n!==void 0),r=[I.local,I.package.location,I.root.location];for(let n of r){let s=h.join(n,...i);if(P.existsSync(s))return{absolute:s,relative:h.relative(n,s)||h.relative(I.package.location,I.local)||h.sep}}return{absolute:h.join(I.package.location,e.url??h.sep),relative:e.url??h.sep}})();return t.absolute.endsWith(h.sep)&&(t.absolute=t.absolute.slice(0,t.absolute.length-1)),{absolute:h.normalize(t.absolute),relative:h.normalize(t.relative)}}function Te(e){let t=ot(e);for(let i=0;i<5;i++)if(t=h.dirname(t),!!P.existsSync(h.join(t,"package.json")))return t;return null}function it(e){let o=e;for(;o!=="/"&&!P.existsSync(h.join(o,"package.json"));)o=h.dirname(o);return o}function k(e){let o=it(e.absolute);if(!o)throw new z(`could not find package at 1: ${o}`);let t=rt.search(o);if(!t)throw new z(`could not find package at 2: ${o}`);return t}async function ke(e,o,t,i,r){let n=k(e),s=e.absolute.endsWith(".html")?e:{absolute:Ee.join(e.absolute,"index.html"),relative:Ee.join(e.relative,"index.html")},a,m=null;if(Y.existsSync(s.absolute))m=Y.statSync(s.absolute).mtimeMs,a=we(n,s,t,i);else{let p=Y.readdirSync(e.absolute);a=xe(n,p,e,i)}return r.add(e,Buffer.from(a.innerHTML,"utf8"),y.MimeTypes[".html"],m),a}import st from"node:fs";import{jsBundle as at}from"@papit/bundle-js";import{Arguments as ct}from"@papit/arguments";async function Ce(e,o){let t=k(e),i;if(await at(ct.instance,t.location,{entryPointArray:[{input:e.absolute,output:void 0}],tsconfig:t?.tsconfig,externals:t?.externals,packageJSON:t?.packageJSON,esoptions:{write:!1}},r=>{r.type==="build"&&(i=r.result.outputFiles?.at(0)?.text)}),!i)throw new b("file not found: "+e.relative);return o.add(e,Buffer.from(i,"utf8"),y.MimeTypes[".js"],st.statSync(e.absolute)?.mtimeMs??null),i}import q from"node:fs";import{Arguments as ee}from"@papit/arguments";import{Terminal as F}from"@papit/terminal";var M=class{constructor(o){this.map=new Map;this._size=0;this.name="cache";this._maxSize=y.MAX_FILE_SIZE_TO_CACHE;o&&(this.name=o)}get size(){return this._size}get maxSize(){return this._maxSize}set maxSize(o){this._maxSize=o*1024*1024}get(o){let t=this.map.get(o.absolute);return!t||!q.existsSync(o.absolute)?null:t.mtime===null||q.statSync(o.absolute).mtimeMs===t.mtime?t:(this.delete(o),null)}delete(o,t=!1){let i=this.map.get(o.absolute);i&&(ee.verbose&&!t&&F.write(F.yellow(o.relative),"removed from cache:"+F.blue(this.name)),this._size-=i.buffer.length,this.map.delete(o.absolute))}clear(){this.map.clear(),this._size=0}add(o,t,i,r){ee.has("no-cache")||(this.delete(o,!0),this._size+=t.length,ee.verbose&&F.write(F.yellow(o.relative),"added to cache:"+F.blue(this.name)),this.map.set(o.absolute,{mimeType:i??y.MimeTypes[o.absolute]??"text/plain",buffer:t,mtime:r===void 0?q.statSync(o.absolute).mtimeMs:r}))}isCacheable(o,t){return!(o>this.maxSize||[".mp4",".webm",".ogv",".avi",".mov"].includes(t))}};import{createHash as mt}from"node:crypto";import Ae from"node:path";import{Arguments as U}from"@papit/arguments";import{Terminal as C}from"@papit/terminal";import{Information as G,PackageGraph as pt}from"@papit/information";var x=new Map;function Re(e,o,t){let i=e.headers["sec-websocket-key"],n=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${mt("sha1").update(i+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11").digest("base64")}`];o.write(n.join(`\r
|
|
2
2
|
`)+`\r
|
|
3
3
|
\r
|
|
4
|
-
`),
|
|
4
|
+
`),U.info&&C.write(C.blue("client connected")),o.on("end",()=>x.delete(o)),o.on("close",()=>x.delete(o)),o.on("error",s=>{s.code==="ECONNRESET"&&x.delete(o)}),o.on("data",s=>{try{let a=ft(s);switch(a.opcode){case 1:let m=a.payload.toString("utf8");try{let c=JSON.parse(m);if(c.type==="register"){let u=k({relative:c.location,absolute:Ae.join(G.root.location,c.location)});u.name===G.root.name&&(u=G.package),x.set(o,u)}}catch{}break;case 8:o.end();break;case 9:let p=oe({type:"pong"});o.write(p);break;default:console.log("Unknown opcode:",a.opcode)}}catch(a){console.error("Error parsing WebSocket frame:",a)}})}function te(e){try{if(x.size===0){U.verbose&&C.write("No clients connected to send update!");return}let o=oe({action:"update",filename:"/"+Ae.relative(G.root.location,e.location)});x.forEach((t,i)=>{if(!(t.name!==e.name&&!pt.getDescendants(e.name).some(n=>n.name===t.name))){if(!i||!i.writable){U.verbose&&C.error(C.blue("socket"),"[error] could not find client"),x.delete(i);return}i.write(o)}})}catch(o){console.log("[socket error]",o)}}function ir(e,o){x.size===0&&U.verbose&&C.write("No clients connected to send error!");let t=oe({action:"error",filename:e,error:o});lt(t)}function lt(e){x.forEach((o,t)=>{if(!t||!t.writable){U.verbose&&C.error(C.blue("socket"),"[error] could not find client"),x.delete(t);return}t.write(e)})}function oe(e){let o=Buffer.from(JSON.stringify(e),"utf8"),t=o.length,i=2;t>125&&t<=65535?i+=2:t>65535&&(i+=8);let r=Buffer.alloc(i+t);r[0]=129;let n=2;return t<=125?r[1]=t:t<=65535?(r[1]=126,r.writeUInt16BE(t,n),n+=2):(r[1]=127,r.writeBigUInt64BE(BigInt(t),n),n+=8),o.copy(r,n),r}function ft(e){let o=e[0],t=e[1],i=(o&128)!==0,r=o&15,n=(t&128)!==0,s=t&127,a=2;if(s===126?(s=e.readUInt16BE(a),a+=2):s===127&&(s=Number(e.readBigUInt64BE(a)),a+=8),!n)throw new Error("Expected masked frame from client");let m=e.slice(a,a+4);a+=4;let p=e.slice(a,a+s),c=Buffer.alloc(s);for(let u=0;u<s;u++)c[u]=p[u]^m[u%4];return{opcode:r,payload:c}}import ut from"node:net";import{Terminal as dt}from"@papit/terminal";function gt(e,o="0.0.0.0"){return new Promise(t=>{let i=ut.createServer().once("error",()=>t(!1)).once("listening",()=>{i.close(()=>t(!0))}).listen(e,o)})}async function Le(e,o=20){for(let t=0;t<o;t++){let i=e+t;if(await gt(i))return i}dt.error(`No free ports found in range [${e}, ${e+o}]`),process.exit(1)}import{build as bt}from"@papit/build";var A=l.number("port")||3e3,N=null;function je(e,o,t,i,r){return A=l.number("port")||3e3,new Promise(async n=>{A=await Le(A),N=ht.createServer();let s=new M("file");s.maxSize=l.number("cache-file")??50;let a=new M("html");a.maxSize=l.number("cache-html")??50;let m=new M("bundle");m.maxSize=l.number("cache-bundle")??150,l.has("live")&&vt(),R.packageName!=="@papit/server"&&!l.has("serve")&&(l.info&&d.write(d.blue("listening to file changes"),R.package.name),l.set("no-bundle",!0),l.set("live",!0),l.set("location",R.package.location),l.set("mode","dev"),l.set("buildMode","ancestors")),N.listen(A,()=>{if(l.set("port",A),l.silent||d.write("server:",d.blue(A),d.yellow("- running")),l.has("open")){let p=v.join(`http://localhost:${A}`,v.relative(R.root.location,R.package.location)),c=v.join(p,l.string("open")??l.string("folder")??"");switch(process.platform){case"win32":d.execute(`start "${c}"`,p);break;case"darwin":d.execute(`open "${c}"`,p);break;case"linux":d.execute(`xdg-open "${c}"`,p);break}}n()}),N.on("request",async(p,c)=>{try{if(p.method!=="GET")throw c.setHeader("Allow","GET"),new O;if(p.url?.startsWith("/.well-known"))return c.end("ok");p.url?.endsWith("/favicon.ico")&&(p.url="/favicon.svg");try{let g=await ue(p.url,o,t,s,c);if(g==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",g.mimeType),c.end(g.buffer);return}catch{}let u=p.url?.split("@")?.at(1);if(u){let g=r.get("@"+u);if(g){let E=H({absolute:v.normalize(g),relative:v.normalize(v.relative(R.root.location,g))},s,c);if(E==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",E.mimeType),c.end(E.buffer);return}}let f=Se(p),T=re.statSync(f.absolute);if(T.isDirectory()){let g=v.join(f.absolute,"index.html");re.existsSync(g)&&(f.absolute=g,f.relative=v.join(f.relative,"index.html"))}let _=a.get(f)??m.get(f)??s.get(f);if(_)return l.info&&d.write(d.yellow(f.relative),"found in cache"),c.statusCode=200,c.setHeader("Content-Type",_.mimeType),c.setHeader("X-Cache","HIT"),c.end(_.buffer);if(c.setHeader("X-Cache","MISS"),T.isDirectory()||v.extname(f.absolute)===".html"){if(p.headers["x-router"]){let E=re.readFileSync(f.absolute,{encoding:"utf-8"});c.statusCode=200,c.setHeader("Content-Type","text/html"),c.end(E);return}let g=await ke(f,t,i,e,a);c.statusCode=200,l.has("prod")||c.setHeader("Cache-Control","no-store"),c.end(g.outerHTML);return}if(/\.tsx?/.test(f.absolute)&&(p.headers.referer?.endsWith(".js")||p.headers["sec-fetch-dest"]==="script")){let g=await Ce(f,m);c.statusCode=200,c.setHeader("Content-Type","text/javascript"),c.end(g);return}let w=H(f,s,c);if(w==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",w.mimeType),c.end(w.buffer)}catch(u){xt(u,c)}}),N.on("error",p=>{l.error&&d.error(p.name,p.message,p.stack??"")}),N.on("upgrade",Re)})}function Ie(){N?.close(),l.silent||d.write("server:",d.blue(String(A)),d.yellow("- shutdown"))}function xt(e,o){l.error&&console.trace("[SERVER]",e),e instanceof L?o.statusCode=e.status:o.statusCode=500,typeof e=="string"?o.write(e):e&&typeof e=="object"&&"message"in e?o.write(e.message):o.write("something went wrong"),o.end()}function vt(){let e=yt.watch(R.root.location,{ignored:r=>r.includes("/node_modules/")||r.includes("/.temp/")||r.includes("/.vscode/")||r.includes("/.github/")||r.includes("/.git/")||r.includes("/lib/")||/\/tests?\//.test(r),persistent:!0,followSymlinks:!1}),o=!1;e.on("ready",()=>{o=!0});let t=!1,i=async r=>{t=!0;try{await bt(l.instance,r,(n,s)=>{s==="success"?(l.info&&d.write(d.blue("rebuilt"),r.name),te(r)):s==="skipped"?l.info&&d.write(d.blue("skipped"),r.name):l.info&&d.error(r.name)})}catch(n){l.error&&d.error(n)}finally{t=!1}};e.on("all",(r,n,s)=>{if(!o||t)return;let a={absolute:n,relative:v.relative(R.root.location,n)},m=k(a);a.relative.includes(m.sourceFolder+"/")?i(m):te(m),l.debug&&console.log("SERVER LIVE RELOAD",{url:a,package:{name:m.name,location:m.location,src:m.sourceFolder},includes:a.relative.includes(m.sourceFolder+"/")})})}import _e from"node:fs";import D from"node:path";import{Information as Fe}from"@papit/information";import{pathToFileURL as wt}from"node:url";function Ne(e,o,t){Me(e.name,e.location,e.packageJSON,o);for(let i in e.packageJSON.dependencies){if(i.startsWith(Fe.scope)||["chokidar","esbuild","@microsoft/api-extractor","typescript","playwright"].includes(i))continue;let r=D.join(Fe.root.location,"node_modules",i),n=D.join(r,"package.json");if(!_e.existsSync(n))continue;let s=JSON.parse(_e.readFileSync(n,{encoding:"utf-8"}));Me(i,r,s,o,!0)}}function Me(e,o,t,i,r=!1){let n=(s,a)=>{i.imports[s]||(i.imports[s]=wt(a).pathname)};if(t.exports)if(typeof t.exports=="string")n(e,D.resolve(o,t.exports));else for(let s in t.exports){let a=t.name;s!=="."&&s!=="default"&&(a+="/"+s.replace(/^\.?\/?/,""));let m=typeof t.exports[s]=="string"?t.exports[s]:t.exports[s]?.import;m&&n(a,D.resolve(o,m))}t.main&&n(e,D.resolve(o,t.main))}async function St(){let e=Te(import.meta.url);e==null&&(Be.error("script location of @papit/server is missing"),process.exit(1)),S.package.packageJSON||(Be.error("location is not a package, missing package.json"),process.exit(1));let t={data:{},map:{}},i={},r=ge();await V(e,t,i,r);let n={imports:{}},s=new Map,a=null;S.root.location===S.package.location?a=ne.join(S.root.location,"node_modules"):a=ne.join(S.package.location,J.string("import-map")??".temp/dependencies");let m=!1;a&&!ie.existsSync(a)&&(m=!0,ie.mkdirSync(a,{recursive:!0})),S.package.location!==S.root.location&&J.set("ancestors",!0);let p=S.getBatches();for(let c of p)for(let u of c){if(u.packageJSON.papit.type==="theme"){let f=u.entrypoints.entries.theme?.import?.output??u.entrypoints.entries.bundle?.import?.output;f&&s.set(u.name,f);continue}a&&Ne(u,n,a),!(!J.has("include-node")&&u.packageJSON.papit.type==="node")&&await V(u.location,t,i,r)}return{importmap:n,importmapFolder:a,createdImportMapFolder:m,serverPackageLocation:e,translations:t,assets:i,themes:s}}async function Kr(){let{importmap:e,importmapFolder:o,createdImportMapFolder:t,serverPackageLocation:i,translations:r,assets:n,themes:s}=await St(),a=()=>{o&&t&&!J.has("import-map")&&ie.rmSync(ne.join(S.package.location,".temp"),{force:!0,recursive:!0}),console.log(),Ie(),process.exit(0)};process.on("SIGINT",a),process.on("SIGTERM",a),process.on("SIGHUP",a),await je(i,r,n,e,s)}export{Ie as close,ir as error,St as meta,N as server,Kr as setup,je as start,te as update,Re as upgrade};
|
package/package.json
CHANGED
|
@@ -1,101 +1,101 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
2
|
+
"name": "@papit/server",
|
|
3
|
+
"description": "a simple but powerful dev server that can locate locale assets and package and even dependency assets",
|
|
4
|
+
"keywords": [
|
|
5
|
+
"papit",
|
|
6
|
+
"node",
|
|
7
|
+
"typescript",
|
|
8
|
+
"dev-server"
|
|
9
|
+
],
|
|
10
|
+
"version": "1.0.6",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "npx @papit/build -- --error --ancestors",
|
|
13
|
+
"watch": "tsc -w",
|
|
14
|
+
"start": "npx @papit/build -- --no-install --info --live --execute ./lib/bundle.js",
|
|
15
|
+
"test": "node --test tests/**/*.test.js",
|
|
16
|
+
"preversion": "papit-version",
|
|
17
|
+
"postversion": "papit-version",
|
|
18
|
+
"component": "npm create @papit -- --component",
|
|
19
|
+
"generate-explorer-icons": "npx @papit/svg-spritesheet --input ./explorer-icons --output ./asset/icons/explorer-spritesheet.svg"
|
|
20
|
+
},
|
|
21
|
+
"bin": {
|
|
22
|
+
"papit-server": "lib/bin.js"
|
|
23
|
+
},
|
|
24
|
+
"main": "./lib/bundle.js",
|
|
25
|
+
"types": "./lib/bundle.d.ts",
|
|
26
|
+
"type": "module",
|
|
27
|
+
"files": [
|
|
28
|
+
"asset/",
|
|
29
|
+
"lib/"
|
|
30
|
+
],
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"import": "./lib/bundle.js",
|
|
34
|
+
"types": "./lib/bundle.d.ts"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"author": "henry",
|
|
38
|
+
"private": false,
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public",
|
|
41
|
+
"registry": "https://registry.npmjs.org/"
|
|
42
|
+
},
|
|
43
|
+
"license": "LicenseRef-Papit-1.0",
|
|
44
|
+
"homepage": "https://github.com/onkelhoy/papit/tree/main/packages/network/dev-server",
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/onkelhoy/papit/issues"
|
|
47
|
+
},
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/onkelhoy/papit.git",
|
|
51
|
+
"directory": "packages/network/dev-server"
|
|
52
|
+
},
|
|
53
|
+
"sideEffects": true,
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@papit/arguments": "0.0.1",
|
|
59
|
+
"@papit/build": "0.0.6",
|
|
60
|
+
"@papit/bundle-js": "0.0.2",
|
|
61
|
+
"@papit/deep-merge": "0.0.1",
|
|
62
|
+
"@papit/html": "0.0.1",
|
|
63
|
+
"@papit/information": "0.0.7",
|
|
64
|
+
"@papit/terminal": "0.0.2",
|
|
65
|
+
"chokidar": "^5.0.0",
|
|
66
|
+
"esbuild": "0.27.2"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"@types/node": "22.10.2",
|
|
70
|
+
"typescript": "5.9.3"
|
|
71
|
+
},
|
|
72
|
+
"browserslist": [
|
|
73
|
+
"defaults",
|
|
74
|
+
"not IE 11",
|
|
75
|
+
"not dead"
|
|
76
|
+
],
|
|
77
|
+
"papit": {
|
|
78
|
+
"publish": true,
|
|
79
|
+
"priority": 5,
|
|
80
|
+
"type": "node",
|
|
81
|
+
"main": "server",
|
|
82
|
+
"components": {
|
|
83
|
+
"socket": {
|
|
84
|
+
"className": "Socket"
|
|
85
|
+
},
|
|
86
|
+
"request": {
|
|
87
|
+
"className": "Request"
|
|
88
|
+
},
|
|
89
|
+
"server": {
|
|
90
|
+
"className": "Server"
|
|
91
|
+
},
|
|
92
|
+
"translation": {
|
|
93
|
+
"className": "Translation"
|
|
94
|
+
},
|
|
95
|
+
"util": {
|
|
96
|
+
"className": "Util"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"remoteVersion": "1.0.5"
|
|
101
|
+
}
|