@papit/server 1.0.2 → 1.0.4
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.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 oe from"node:path";import re 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 ne(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 ie(e){if(!e.endsWith(".json"))return!1;let t=M.basename(M.dirname(e));return/^(transl|locale|i18)/i.test(t)}import A from"node:path";var C=class extends Error{constructor(t,o){super(t,o),this.name="http-error"}},B=class extends C{constructor(t,o){super(t??"internal server error",o),this.name="Internal Server Error",this.status=500}},x=class extends C{constructor(t,o){super(t??"not found",o),this.name="Not Found",this.status=404}},O=class extends C{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 se}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 se.number("MAX_CACHE_SIZE")??this._MAX_CACHE_SIZE}static get MAX_FILE_SIZE_TO_CACHE(){return se.number("MAX_FILE_SIZE_TO_CACHE")??this._MAX_FILE_SIZE_TO_CACHE}};import Pe from"node:path";import ae from"node:fs";import{Arguments as ce}from"@papit/arguments";import{Terminal as Oe}from"@papit/terminal";async function me(e,t,o){return new Promise((i,r)=>{let s=y.BinaryExtensions.has(Pe.extname(e))?ae.createReadStream(e,{signal:o}):ae.createReadStream(e,{signal:o,encoding:"utf-8"});s.pipe(t),s.on("error",a=>{ce.error&&Oe.error("streaming error",e),ce.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 me(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 pe(e,t,o){let r=A.relative(e,t).split(A.sep);for(;r.length>0;){let n=A.join(A.sep+r.join(A.sep));o[n]||(o[n]=[]),o[n].push(t),r.shift()}}async function le(e,t,o,i,r,n){let s=A.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:A.normalize(m),relative:s},i,r,n)}catch{}}throw new x(`asset "${s}" not found`)}import{Arguments as fe}from"@papit/arguments";function ue(){let e=["asset","assets","public"];if(fe.has("asset")){let t=fe.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=de(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)ie(n)?ne(e,n,t):pe(e,n,o)}function de(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(...de(s,t,o+1)):i.push(s))}return i}import gt from"node:http";import Le from"node:fs";import v from"node:path";import ht from"chokidar";import{Information as k}from"@papit/information";import{Arguments as f}from"@papit/arguments";import{Terminal as d}from"@papit/terminal";import Se from"node:path";import Q from"node:fs";import $ from"node:path";import he 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 ge}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=ge.string(i);if(n&&V.existsSync(n)&&(r=n),!V.existsSync(r))return ge.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 ye(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=he.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),j=he.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"),_=g.querySelector("use");if(!l.startsWith(".env")&&!l.startsWith(".git")&&l.startsWith(".")&&w.classList.add("hidden"),j.isFile()){_?.setAttribute("href","#"+Qe(b,r)),u.appendChild(w);return}j.isDirectory()&&(_?.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 be}from"@papit/terminal";function xe(e,t,o,i){let r=D("live",i);r.body||(be.error("live document template is missing body"),process.exit(1)),r.head||(be.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 R,PackageGraph as nt}from"@papit/information";import{Arguments as it}from"@papit/arguments";function ve(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,R.package.location)};let i=[it.string("folder"),e.url].filter(n=>n!==void 0),r=[R.local,R.package.location,R.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(R.package.location,R.local)||h.sep}}return{absolute:h.join(R.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 we(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 T(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 Te(e,t,o,i,r){let n=T(e),s=e.absolute.endsWith(".html")?e:{absolute:Se.join(e.absolute,"index.html"),relative:Se.join(e.relative,"index.html")},a,m=null;if(Q.existsSync(s.absolute))m=Q.statSync(s.absolute).mtimeMs,a=xe(n,s,o,i);else{let p=Q.readdirSync(e.absolute);a=ye(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 Ee(e,t){let o=T(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 N=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 ke 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 L=new Map;function Ce(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 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
|
|
3
3
|
`)+`\r
|
|
4
4
|
\r
|
|
5
|
-
`),ee.info&&U.write(U.blue("client connected")),t.on("end",()=>
|
|
5
|
+
`),ee.info&&U.write(U.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=lt(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&&U.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&&!e?.descendants.some(r=>r.name===o.name))){if(!i||!i.writable){ee.verbose&&U.error(U.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 lt(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 ft from"node:net";import{Terminal as ut}from"@papit/terminal";function dt(e,t="0.0.0.0"){return new Promise(o=>{let i=ft.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 dt(i))return i}ut.error(`No free ports found in range [${e}, ${e+t}]`),process.exit(1)}import{build as yt}from"@papit/build";var k=f.number("port")||3e3,N=null;function je(e,t,o,i,r){return k=f.number("port")||3e3,new Promise(async n=>{k=await Le(k),N=gt.createServer();let s=new F("file");s.maxSize=f.number("cache-file")??50;let a=new F("html");a.maxSize=f.number("cache-html")??50;let m=new F("bundle");m.maxSize=f.number("cache-bundle")??150,f.has("live")&&xt(),C.packageName!=="@papit/server"&&!f.has("serve")&&(f.info&&d.write(d.blue("listening to file changes"),C.package.name),f.set("no-bundle",!0),f.set("live",!0),f.set("location",C.package.location),f.set("mode","dev"),f.set("buildMode","ancestors")),N.listen(k,()=>{if(f.set("port",k),f.silent||d.write("server:",d.blue(k),d.yellow("- running")),f.has("open")){let p=v.join(`http://localhost:${k}`,v.relative(C.root.location,C.package.location)),c=v.join(p,f.string("open")??f.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 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:v.normalize(g),relative:v.normalize(v.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 l=we(p),b=oe.statSync(l.absolute);if(b.isDirectory()){let g=v.join(l.absolute,"index.html");oe.existsSync(g)&&(l.absolute=g,l.relative=v.join(l.relative,"index.html"))}let _=a.get(l)??m.get(l)??s.get(l);if(_)return f.info&&d.write(d.yellow(l.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"),b.isDirectory()||v.extname(l.absolute)===".html"){if(p.headers["x-router"]){let T=oe.readFileSync(l.absolute,{encoding:"utf-8"});c.statusCode=200,c.setHeader("Content-Type","text/html"),c.end(T);return}let g=await Ee(l,o,i,e,a);c.statusCode=200,f.has("prod")||c.setHeader("Cache-Control","no-store"),c.end(g.outerHTML);return}if(/\.tsx?/.test(l.absolute)&&(p.headers.referer?.endsWith(".js")||p.headers["sec-fetch-dest"]==="script")){let g=await ke(l,m);c.statusCode=200,c.setHeader("Content-Type","text/javascript"),c.end(g);return}let w=z(l,s,c);if(w==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",w.mimeType),c.end(w.buffer)}catch(u){bt(u,c)}}),N.on("error",p=>{f.error&&d.error(p.name,p.message,p.stack??"")}),N.on("upgrade",Ae)})}function _e(){N?.close(),f.silent||d.write("server:",d.blue(String(k)),d.yellow("- shutdown"))}function bt(e,t){f.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 xt(){let e=ht.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 yt(f.instance,r,(n,s)=>{s==="success"?(f.info&&d.write(d.blue("rebuilt"),r.name),te(r)):s==="skipped"?f.info&&d.write(d.blue("skipped"),r.name):f.info&&d.error(r.name)})}catch(n){f.error&&d.error(n)}finally{o=!1}};e.on("all",(r,n,s)=>{if(!t||o)return;let a={absolute:n,relative:v.relative(C.root.location,n)},m=E(a);a.relative.includes(m.sourceFolder+"/")?i(m):te(m),f.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 Ie from"node:fs";import P from"node:path";import{Information as Fe}from"@papit/information";import{pathToFileURL as vt}from"node:url";function Me(e,t,o){Ne(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=P.join(Fe.root.location,"node_modules",i),n=P.join(r,"package.json");if(!Ie.existsSync(n))continue;let s=JSON.parse(Ie.readFileSync(n,{encoding:"utf-8"}));Ne(i,r,s,t,!0)}}function Ne(e,t,o,i,r=!1){let n=(s,a)=>{i.imports[s]||(i.imports[s]=vt(a).pathname)};if(o.exports)if(typeof o.exports=="string")n(e,P.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,P.resolve(t,m))}o.main&&n(e,P.resolve(t,o.main))}async function ze(){let e=Se(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 o={data:{},map:{}},i={},r=de();await K(e,o,i,r);let n={imports:{}},s=new Map,a=null;S.root.location===S.package.location?a=re.join(S.root.location,"node_modules"):a=re.join(S.package.location,J.string("import-map")??".temp/dependencies");let m=!1;a&&!ne.existsSync(a)&&(m=!0,ne.mkdirSync(a,{recursive:!0})),S.package.location!==S.root.location&&J.set("ancestors",!0);let p=S.getBatches();for(let u of p)for(let l of u){if(l.packageJSON.papit.type==="theme"){let b=l.entrypoints.entries.theme?.import?.output??l.entrypoints.entries.bundle?.import?.output;b&&s.set(l.name,b);continue}a&&Me(l,n,a),!(!J.has("include-node")&&l.packageJSON.papit.type==="node")&&await K(l.location,o,i,r)}let c=()=>{a&&m&&!J.has("import-map")&&ne.rmSync(re.join(S.package.location,".temp"),{force:!0,recursive:!0}),console.log(),_e(),process.exit(0)};process.on("SIGINT",c),process.on("SIGTERM",c),process.on("SIGHUP",c),await je(e,o,i,n,s)}(async function(){ze()})();
|
package/lib/bundle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
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 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 ie(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 se(e){if(!e.endsWith(".json"))return!1;let o=B.basename(B.dirname(e));return/^(transl|locale|i18)/i.test(o)}import L from"node:path";var R=class extends Error{constructor(o,t){super(o,t),this.name="http-error"}},z=class extends R{constructor(o,t){super(o??"internal server error",t),this.name="Internal Server Error",this.status=500}},x=class extends R{constructor(o,t){super(o??"not found",t),this.name="Not Found",this.status=404}},D=class extends R{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 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 Pe}from"@papit/terminal";async function pe(e,o,t){return new Promise((i,r)=>{let s=y.BinaryExtensions.has(Ue.extname(e))?ce.createReadStream(e,{signal:t}):ce.createReadStream(e,{signal:t,encoding:"utf-8"});s.pipe(o),s.on("error",a=>{me.error&&Pe.error("streaming error",e),me.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 pe(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 le(e,o,t){let r=L.relative(e,o).split(L.sep);for(;r.length>0;){let n=L.join(L.sep+r.join(L.sep));t[n]||(t[n]=[]),t[n].push(o),r.shift()}}async function fe(e,o,t,i,r,n){let s=L.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:L.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 o=ue.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=ge(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)se(n)?ie(e,n,o):le(e,n,t)}function ge(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(...ge(s,o,t+1)):i.push(s))}return i}import gt from"node:http";import Le from"node:fs";import w from"node:path";import ht from"chokidar";import{Information as A}from"@papit/information";import{Arguments as f}from"@papit/arguments";import{Terminal as d}from"@papit/terminal";import Te from"node:path";import Y from"node:fs";import W from"node:path";import ye 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 he}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=he.string(i);if(n&&Q.existsSync(n)&&(r=n),!Q.existsSync(r))return he.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 be(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=ye.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),_=ye.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"),I=g.querySelector("use");if(!l.startsWith(".env")&&!l.startsWith(".git")&&l.startsWith(".")&&S.classList.add("hidden"),_.isFile()){I?.setAttribute("href","#"+Ve(b,r)),u.appendChild(S);return}_.isDirectory()&&(I?.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 xe}from"@papit/terminal";function ve(e,o,t,i){let r=$("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 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 j,PackageGraph as rt}from"@papit/information";import{Arguments as nt}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 t=(()=>{if(e.url&&U.existsSync(e.url)&&U.statSync(e.url).isFile())return{absolute:e.url,relative:h.relative(e.url,j.package.location)};let i=[nt.string("folder"),e.url].filter(n=>n!==void 0),r=[j.local,j.package.location,j.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(j.package.location,j.local)||h.sep}}return{absolute:h.join(j.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 Se(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 E(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 Ee(e,o,t,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(Y.existsSync(s.absolute))m=Y.statSync(s.absolute).mtimeMs,a=ve(n,s,t,i);else{let p=Y.readdirSync(e.absolute);a=be(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 ke(e,o){let t=E(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 N}from"@papit/terminal";var F=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&&N.write(N.yellow(o.relative),"removed from cache:"+N.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&&N.write(N.yellow(o.relative),"added to cache:"+N.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 Ce from"node:path";import{Arguments as P}from"@papit/arguments";import{Terminal as k}from"@papit/terminal";import{Information as J}from"@papit/information";var v=new Map;function Ae(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 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
|
|
2
2
|
`)+`\r
|
|
3
3
|
\r
|
|
4
|
-
`),P.info&&
|
|
4
|
+
`),P.info&&C.write(C.blue("client connected")),o.on("end",()=>v.delete(o)),o.on("close",()=>v.delete(o)),o.on("error",s=>{s.code==="ECONNRESET"&&v.delete(o)}),o.on("data",s=>{try{let a=lt(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(J.root.location,c.location)});u.name===J.root.name&&(u=J.package),v.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(v.size===0){P.verbose&&C.write("No clients connected to send update!");return}let o=oe({action:"update",filename:"/"+Ae.relative(J.root.location,e.location)});v.forEach((t,i)=>{if(!(t.name!==e.name&&!e?.descendants.some(r=>r.name===t.name))){if(!i||!i.writable){P.verbose&&C.error(C.blue("socket"),"[error] could not find client"),v.delete(i);return}i.write(o)}})}catch(o){console.log("[socket error]",o)}}function rr(e,o){v.size===0&&P.verbose&&C.write("No clients connected to send error!");let t=oe({action:"error",filename:e,error:o});pt(t)}function pt(e){v.forEach((o,t)=>{if(!t||!t.writable){P.verbose&&C.error(C.blue("socket"),"[error] could not find client"),v.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 lt(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 ft from"node:net";import{Terminal as ut}from"@papit/terminal";function dt(e,o="0.0.0.0"){return new Promise(t=>{let i=ft.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 dt(i))return i}ut.error(`No free ports found in range [${e}, ${e+o}]`),process.exit(1)}import{build as yt}from"@papit/build";var A=f.number("port")||3e3,M=null;function je(e,o,t,i,r){return A=f.number("port")||3e3,new Promise(async n=>{A=await Le(A),M=gt.createServer();let s=new N("file");s.maxSize=f.number("cache-file")??50;let a=new N("html");a.maxSize=f.number("cache-html")??50;let m=new N("bundle");m.maxSize=f.number("cache-bundle")??150,f.has("live")&&xt(),R.packageName!=="@papit/server"&&!f.has("serve")&&(f.info&&d.write(d.blue("listening to file changes"),R.package.name),f.set("no-bundle",!0),f.set("live",!0),f.set("location",R.package.location),f.set("mode","dev"),f.set("buildMode","ancestors")),M.listen(A,()=>{if(f.set("port",A),f.silent||d.write("server:",d.blue(A),d.yellow("- running")),f.has("open")){let p=w.join(`http://localhost:${A}`,w.relative(R.root.location,R.package.location)),c=w.join(p,f.string("open")??f.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 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:w.normalize(g),relative:w.normalize(w.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 l=Se(p),b=re.statSync(l.absolute);if(b.isDirectory()){let g=w.join(l.absolute,"index.html");re.existsSync(g)&&(l.absolute=g,l.relative=w.join(l.relative,"index.html"))}let I=a.get(l)??m.get(l)??s.get(l);if(I)return f.info&&d.write(d.yellow(l.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"),b.isDirectory()||w.extname(l.absolute)===".html"){if(p.headers["x-router"]){let E=re.readFileSync(l.absolute,{encoding:"utf-8"});c.statusCode=200,c.setHeader("Content-Type","text/html"),c.end(E);return}let g=await ke(l,t,i,e,a);c.statusCode=200,f.has("prod")||c.setHeader("Cache-Control","no-store"),c.end(g.outerHTML);return}if(/\.tsx?/.test(l.absolute)&&(p.headers.referer?.endsWith(".js")||p.headers["sec-fetch-dest"]==="script")){let g=await Ce(l,m);c.statusCode=200,c.setHeader("Content-Type","text/javascript"),c.end(g);return}let S=H(l,s,c);if(S==="streamed")return;c.statusCode=200,c.setHeader("Content-Type",S.mimeType),c.end(S.buffer)}catch(u){bt(u,c)}}),M.on("error",p=>{f.error&&d.error(p.name,p.message,p.stack??"")}),M.on("upgrade",Re)})}function _e(){M?.close(),f.silent||d.write("server:",d.blue(String(A)),d.yellow("- shutdown"))}function bt(e,o){f.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 xt(){let e=ht.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 yt(f.instance,r,(n,s)=>{s==="success"?(f.info&&d.write(d.blue("rebuilt"),r.name),te(r)):s==="skipped"?f.info&&d.write(d.blue("skipped"),r.name):f.info&&d.error(r.name)})}catch(n){f.error&&d.error(n)}finally{t=!1}};e.on("all",(r,n,s)=>{if(!o||t)return;let a={absolute:n,relative:w.relative(R.root.location,n)},m=k(a);a.relative.includes(m.sourceFolder+"/")?i(m):te(m),f.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 Ie from"node:fs";import O from"node:path";import{Information as Fe}from"@papit/information";import{pathToFileURL as vt}from"node:url";function Me(e,o,t){Ne(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=O.join(Fe.root.location,"node_modules",i),n=O.join(r,"package.json");if(!Ie.existsSync(n))continue;let s=JSON.parse(Ie.readFileSync(n,{encoding:"utf-8"}));Ne(i,r,s,o,!0)}}function Ne(e,o,t,i,r=!1){let n=(s,a)=>{i.imports[s]||(i.imports[s]=vt(a).pathname)};if(t.exports)if(typeof t.exports=="string")n(e,O.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,O.resolve(o,m))}t.main&&n(e,O.resolve(o,t.main))}async function Xr(){let e=Te(import.meta.url);e==null&&(Be.error("script location of @papit/server is missing"),process.exit(1)),T.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;T.root.location===T.package.location?a=ne.join(T.root.location,"node_modules"):a=ne.join(T.package.location,G.string("import-map")??".temp/dependencies");let m=!1;a&&!ie.existsSync(a)&&(m=!0,ie.mkdirSync(a,{recursive:!0})),T.package.location!==T.root.location&&G.set("ancestors",!0);let p=T.getBatches();for(let u of p)for(let l of u){if(l.packageJSON.papit.type==="theme"){let b=l.entrypoints.entries.theme?.import?.output??l.entrypoints.entries.bundle?.import?.output;b&&s.set(l.name,b);continue}a&&Me(l,n,a),!(!G.has("include-node")&&l.packageJSON.papit.type==="node")&&await V(l.location,t,i,r)}let c=()=>{a&&m&&!G.has("import-map")&&ie.rmSync(ne.join(T.package.location,".temp"),{force:!0,recursive:!0}),console.log(),_e(),process.exit(0)};process.on("SIGINT",c),process.on("SIGTERM",c),process.on("SIGHUP",c),await je(e,t,i,n,s)}export{_e as close,rr as error,M as server,Xr 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.4",
|
|
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.4",
|
|
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.5",
|
|
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.3"
|
|
101
|
+
}
|