@node-cli/static-server 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const defaultFlags = {\n\tcache: 0,\n\tcors: false,\n\tdirs: true,\n\tgzip: true,\n\thttp2: false,\n\tlogs: false,\n\topen: false,\n\tport: 8080,\n\thost: \"localhost\",\n};\n\nexport const defaultParameters = {\n\t\"0\": `${process.cwd()}/`,\n};\n"],"names":["defaultFlags","cache","cors","dirs","gzip","http2","logs","open","port","host","defaultParameters","process","cwd"],"mappings":"AAAA,OAAO,MAAMA,eAAe;IAC3BC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,MAAM;IACNC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,MAAM;IACNC,MAAM;AACP,EAAE;AAEF,OAAO,MAAMC,oBAAoB;IAChC,KAAK,CAAC,EAAEC,QAAQC,GAAG,GAAG,CAAC,CAAC;AACzB,EAAE"}
1
+ {"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const defaultFlags = {\n\tcache: 0,\n\tcors: false,\n\tdirs: true,\n\tgzip: true,\n\thttp2: false,\n\tlogs: false,\n\topen: false,\n\tport: 8080,\n\thost: \"localhost\",\n};\n\nexport const defaultParameters = {\n\t\"0\": `${process.cwd()}/`,\n};\n"],"names":["defaultFlags","cache","cors","dirs","gzip","http2","logs","open","port","host","defaultParameters","process","cwd"],"mappings":"AAAA,OAAO,MAAMA,eAAe;IAC3BC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,MAAM;IACNC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,MAAM;IACNC,MAAM;AACP,EAAE;AAEF,OAAO,MAAMC,oBAAoB;IAChC,KAAK,GAAGC,QAAQC,GAAG,GAAG,CAAC,CAAC;AACzB,EAAE"}
package/dist/logs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logs.ts"],"sourcesContent":["import type { FastifyPluginAsync } from \"fastify\";\nimport fastifyPlugin from \"fastify-plugin\";\nimport kleur from \"kleur\";\n\nconst plugin: FastifyPluginAsync = async (fastify): Promise<void> => {\n\tfastify.addHook(\"onResponse\", async (request, reply) => {\n\t\trequest.log.info(\n\t\t\tkleur.cyan(`${request.method} ${request.url} ${reply.statusCode}`),\n\t\t);\n\t});\n};\n\nexport default fastifyPlugin(plugin, {\n\tfastify: \"4.x\",\n\tname: \"fastify-simple-logger\",\n});\n"],"names":["fastifyPlugin","kleur","plugin","fastify","addHook","request","reply","log","info","cyan","method","url","statusCode","name"],"mappings":"AACA,OAAOA,mBAAmB,iBAAiB;AAC3C,OAAOC,WAAW,QAAQ;AAE1B,MAAMC,SAA6B,OAAOC;IACzCA,QAAQC,OAAO,CAAC,cAAc,OAAOC,SAASC;QAC7CD,QAAQE,GAAG,CAACC,IAAI,CACfP,MAAMQ,IAAI,CAAC,CAAC,EAAEJ,QAAQK,MAAM,CAAC,CAAC,EAAEL,QAAQM,GAAG,CAAC,CAAC,EAAEL,MAAMM,UAAU,CAAC,CAAC;IAEnE;AACD;AAEA,eAAeZ,cAAcE,QAAQ;IACpCC,SAAS;IACTU,MAAM;AACP,GAAG"}
1
+ {"version":3,"sources":["../src/logs.ts"],"sourcesContent":["import type { FastifyPluginAsync } from \"fastify\";\nimport fastifyPlugin from \"fastify-plugin\";\nimport kleur from \"kleur\";\n\nconst plugin: FastifyPluginAsync = async (fastify): Promise<void> => {\n\tfastify.addHook(\"onResponse\", async (request, reply) => {\n\t\trequest.log.info(\n\t\t\tkleur.cyan(`${request.method} ${request.url} ${reply.statusCode}`),\n\t\t);\n\t});\n};\n\nexport default fastifyPlugin(plugin, {\n\tfastify: \"4.x\",\n\tname: \"fastify-simple-logger\",\n});\n"],"names":["fastifyPlugin","kleur","plugin","fastify","addHook","request","reply","log","info","cyan","method","url","statusCode","name"],"mappings":"AACA,OAAOA,mBAAmB,iBAAiB;AAC3C,OAAOC,WAAW,QAAQ;AAE1B,MAAMC,SAA6B,OAAOC;IACzCA,QAAQC,OAAO,CAAC,cAAc,OAAOC,SAASC;QAC7CD,QAAQE,GAAG,CAACC,IAAI,CACfP,MAAMQ,IAAI,CAAC,GAAGJ,QAAQK,MAAM,CAAC,CAAC,EAAEL,QAAQM,GAAG,CAAC,CAAC,EAAEL,MAAMM,UAAU,EAAE;IAEnE;AACD;AAEA,eAAeZ,cAAcE,QAAQ;IACpCC,SAAS;IACTU,MAAM;AACP,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fastifyStatic, { FastifyStaticOptions } from \"@fastify/static\";\nimport { cert, key } from \"./certs.js\";\n\nimport path from \"node:path\";\nimport fastifyCache from \"@fastify/caching\";\nimport fastifyCompress from \"@fastify/compress\";\nimport fastifyCors from \"@fastify/cors\";\nimport { Logger } from \"@node-cli/logger\";\nimport Fastify from \"fastify\";\nimport fs from \"fs-extra\";\nimport kleur from \"kleur\";\nimport open from \"open\";\nimport portfinder from \"portfinder\";\nimport fastifyLogs from \"./logs.js\";\nimport { config } from \"./parse.js\";\nimport { renderDirectories } from \"./templates/directories.js\";\nimport { renderNotFound } from \"./templates/not-found.js\";\n\nexport const logger = new Logger({\n\tboring: process.env.NODE_ENV === \"test\",\n});\n\nlet customPath = config.parameters[0];\nif (fs.pathExistsSync(customPath)) {\n\tcustomPath = path.resolve(customPath);\n} else {\n\tlogger.printErrorsAndExit([`Folder ${customPath} does not exist!`], 0);\n}\n\nconst fastifyOptions: {\n\tdisableRequestLogging?: boolean;\n\thttp2?: boolean;\n\thttps?: any;\n\tlogger?: any;\n} = {\n\tdisableRequestLogging: true,\n};\n\nif (config.flags.logs) {\n\tfastifyOptions.logger = {\n\t\tlevel: \"info\",\n\t\ttransport: {\n\t\t\ttarget: \"pino-pretty\",\n\t\t\toptions: {\n\t\t\t\thideObject: true,\n\t\t\t\ttranslateTime: \"SYS:standard\",\n\t\t\t\tignore: \"pid,hostname,reqId,resTime,resTimeMs,level\",\n\t\t\t},\n\t\t},\n\t};\n}\n\nif (config.flags.http2) {\n\tfastifyOptions.http2 = true;\n\tfastifyOptions.https = { key, cert };\n}\n\nconst fastify = Fastify(fastifyOptions);\n\nif (config.flags.logs) {\n\tfastify.register(fastifyLogs);\n}\n\nif (config.flags.gzip) {\n\tfastify.register(fastifyCompress, {\n\t\tglobal: true,\n\t\tencodings: [\"gzip\", \"deflate\", \"br\", \"identity\"],\n\t});\n}\n\nif (config.flags.cors) {\n\tfastify.register(fastifyCors);\n}\n\nconst fastifyCacheOptions: {\n\texpiresIn?: number;\n\tserverExpiresIn?: number;\n\tprivacy?: any;\n} = {};\n\nif (config.flags.cache > 0) {\n\tfastifyCacheOptions.expiresIn = config.flags.cache;\n\tfastifyCacheOptions.serverExpiresIn = config.flags.cache;\n\tfastifyCacheOptions.privacy = \"public\";\n} else {\n\tfastifyCacheOptions.privacy = \"no-cache\";\n}\n\nfastify.register(fastifyCache, fastifyCacheOptions);\n\nconst staticOptions: FastifyStaticOptions = {\n\troot: customPath,\n};\nif (config.flags.dirs) {\n\tstaticOptions.list = {\n\t\tformat: \"html\",\n\t\trender: renderDirectories,\n\t};\n}\nfastify.register(fastifyStatic, staticOptions);\n\nfastify.setNotFoundHandler((_request, reply) => {\n\treply.code(404).type(\"text/html\").send(renderNotFound(config.flags.dirs));\n});\n\n/**\n * Run the server!\n */\nlet port: number,\n\taddress: string,\n\tportMessage = \"\";\nconst start = async () => {\n\ttry {\n\t\tport = await portfinder.getPortPromise({ port: Number(config.flags.port) });\n\t\tif (port !== config.flags.port) {\n\t\t\tportMessage = `\\n\\n${kleur.yellow(\n\t\t\t\t`Warning: port ${config.flags.port} was not available!`,\n\t\t\t)}`;\n\t\t\tconfig.flags.port = port;\n\t\t}\n\t\tconst listenOptions: { port?: number; host?: string } = {\n\t\t\tport: config.flags.port,\n\t\t};\n\t\tif (config.flags.host) {\n\t\t\tlistenOptions.host = config.flags.host;\n\t\t\taddress = config.flags.host;\n\t\t} else {\n\t\t\taddress = \"localhost\";\n\t\t}\n\t\tawait fastify.listen(listenOptions);\n\n\t\tconst url = `${config.flags.http2 ? \"https\" : \"http\"}://${address}:${\n\t\t\tconfig.flags.port\n\t\t}`;\n\t\tconst messages = [\n\t\t\t`${kleur.cyan(\"Static Server\")} is up and running!`,\n\t\t\t\"\",\n\t\t\t`${kleur.cyan(url)}`,\n\t\t\t\"\",\n\t\t\t`Hit CTRL+C to shut it down.${portMessage}`,\n\t\t];\n\n\t\tlogger.printBox(messages, { newLineAfter: false });\n\n\t\tif (config.flags.open) {\n\t\t\tawait open(url, {\n\t\t\t\twait: false,\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\tfastify.log.error(error);\n\t\t// eslint-disable-next-line unicorn/no-process-exit\n\t\tprocess.exit(1);\n\t}\n};\nstart();\n"],"names":["fastifyStatic","cert","key","path","fastifyCache","fastifyCompress","fastifyCors","Logger","Fastify","fs","kleur","open","portfinder","fastifyLogs","config","renderDirectories","renderNotFound","logger","boring","process","env","NODE_ENV","customPath","parameters","pathExistsSync","resolve","printErrorsAndExit","fastifyOptions","disableRequestLogging","flags","logs","level","transport","target","options","hideObject","translateTime","ignore","http2","https","fastify","register","gzip","global","encodings","cors","fastifyCacheOptions","cache","expiresIn","serverExpiresIn","privacy","staticOptions","root","dirs","list","format","render","setNotFoundHandler","_request","reply","code","type","send","port","address","portMessage","start","getPortPromise","Number","yellow","listenOptions","host","listen","url","messages","cyan","printBox","newLineAfter","wait","error","log","exit"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/server.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fastifyStatic, { FastifyStaticOptions } from \"@fastify/static\";\nimport { cert, key } from \"./certs.js\";\n\nimport path from \"node:path\";\nimport fastifyCache from \"@fastify/caching\";\nimport fastifyCompress from \"@fastify/compress\";\nimport fastifyCors from \"@fastify/cors\";\nimport { Logger } from \"@node-cli/logger\";\nimport Fastify from \"fastify\";\nimport fs from \"fs-extra\";\nimport kleur from \"kleur\";\nimport open from \"open\";\nimport portfinder from \"portfinder\";\nimport fastifyLogs from \"./logs.js\";\nimport { config } from \"./parse.js\";\nimport { renderDirectories } from \"./templates/directories.js\";\nimport { renderNotFound } from \"./templates/not-found.js\";\n\nexport const logger = new Logger({\n\tboring: process.env.NODE_ENV === \"test\",\n});\n\nlet customPath = config.parameters[0];\nif (fs.pathExistsSync(customPath)) {\n\tcustomPath = path.resolve(customPath);\n} else {\n\tlogger.printErrorsAndExit([`Folder ${customPath} does not exist!`], 0);\n}\n\nconst fastifyOptions: {\n\tdisableRequestLogging?: boolean;\n\thttp2?: boolean;\n\thttps?: any;\n\tlogger?: any;\n} = {\n\tdisableRequestLogging: true,\n};\n\nif (config.flags.logs) {\n\tfastifyOptions.logger = {\n\t\tlevel: \"info\",\n\t\ttransport: {\n\t\t\ttarget: \"pino-pretty\",\n\t\t\toptions: {\n\t\t\t\thideObject: true,\n\t\t\t\ttranslateTime: \"SYS:standard\",\n\t\t\t\tignore: \"pid,hostname,reqId,resTime,resTimeMs,level\",\n\t\t\t},\n\t\t},\n\t};\n}\n\nif (config.flags.http2) {\n\tfastifyOptions.http2 = true;\n\tfastifyOptions.https = { key, cert };\n}\n\nconst fastify = Fastify(fastifyOptions);\n\nif (config.flags.logs) {\n\tfastify.register(fastifyLogs);\n}\n\nif (config.flags.gzip) {\n\tfastify.register(fastifyCompress, {\n\t\tglobal: true,\n\t\tencodings: [\"gzip\", \"deflate\", \"br\", \"identity\"],\n\t});\n}\n\nif (config.flags.cors) {\n\tfastify.register(fastifyCors);\n}\n\nconst fastifyCacheOptions: {\n\texpiresIn?: number;\n\tserverExpiresIn?: number;\n\tprivacy?: any;\n} = {};\n\nif (config.flags.cache > 0) {\n\tfastifyCacheOptions.expiresIn = config.flags.cache;\n\tfastifyCacheOptions.serverExpiresIn = config.flags.cache;\n\tfastifyCacheOptions.privacy = \"public\";\n} else {\n\tfastifyCacheOptions.privacy = \"no-cache\";\n}\n\nfastify.register(fastifyCache, fastifyCacheOptions);\n\nconst staticOptions: FastifyStaticOptions = {\n\troot: customPath,\n};\nif (config.flags.dirs) {\n\tstaticOptions.list = {\n\t\tformat: \"html\",\n\t\trender: renderDirectories,\n\t};\n}\nfastify.register(fastifyStatic, staticOptions);\n\nfastify.setNotFoundHandler((_request, reply) => {\n\treply.code(404).type(\"text/html\").send(renderNotFound(config.flags.dirs));\n});\n\n/**\n * Run the server!\n */\nlet port: number,\n\taddress: string,\n\tportMessage = \"\";\nconst start = async () => {\n\ttry {\n\t\tport = await portfinder.getPortPromise({ port: Number(config.flags.port) });\n\t\tif (port !== config.flags.port) {\n\t\t\tportMessage = `\\n\\n${kleur.yellow(\n\t\t\t\t`Warning: port ${config.flags.port} was not available!`,\n\t\t\t)}`;\n\t\t\tconfig.flags.port = port;\n\t\t}\n\t\tconst listenOptions: { port?: number; host?: string } = {\n\t\t\tport: config.flags.port,\n\t\t};\n\t\tif (config.flags.host) {\n\t\t\tlistenOptions.host = config.flags.host;\n\t\t\taddress = config.flags.host;\n\t\t} else {\n\t\t\taddress = \"localhost\";\n\t\t}\n\t\tawait fastify.listen(listenOptions);\n\n\t\tconst url = `${config.flags.http2 ? \"https\" : \"http\"}://${address}:${\n\t\t\tconfig.flags.port\n\t\t}`;\n\t\tconst messages = [\n\t\t\t`${kleur.cyan(\"Static Server\")} is up and running!`,\n\t\t\t\"\",\n\t\t\t`${kleur.cyan(url)}`,\n\t\t\t\"\",\n\t\t\t`Hit CTRL+C to shut it down.${portMessage}`,\n\t\t];\n\n\t\tlogger.printBox(messages, { newLineAfter: false });\n\n\t\tif (config.flags.open) {\n\t\t\tawait open(url, {\n\t\t\t\twait: false,\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\tfastify.log.error(error);\n\t\t// eslint-disable-next-line unicorn/no-process-exit\n\t\tprocess.exit(1);\n\t}\n};\nstart();\n"],"names":["fastifyStatic","cert","key","path","fastifyCache","fastifyCompress","fastifyCors","Logger","Fastify","fs","kleur","open","portfinder","fastifyLogs","config","renderDirectories","renderNotFound","logger","boring","process","env","NODE_ENV","customPath","parameters","pathExistsSync","resolve","printErrorsAndExit","fastifyOptions","disableRequestLogging","flags","logs","level","transport","target","options","hideObject","translateTime","ignore","http2","https","fastify","register","gzip","global","encodings","cors","fastifyCacheOptions","cache","expiresIn","serverExpiresIn","privacy","staticOptions","root","dirs","list","format","render","setNotFoundHandler","_request","reply","code","type","send","port","address","portMessage","start","getPortPromise","Number","yellow","listenOptions","host","listen","url","messages","cyan","printBox","newLineAfter","wait","error","log","exit"],"mappings":";AAEA,OAAOA,mBAA6C,kBAAkB;AACtE,SAASC,IAAI,EAAEC,GAAG,QAAQ,aAAa;AAEvC,OAAOC,UAAU,YAAY;AAC7B,OAAOC,kBAAkB,mBAAmB;AAC5C,OAAOC,qBAAqB,oBAAoB;AAChD,OAAOC,iBAAiB,gBAAgB;AACxC,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,aAAa,UAAU;AAC9B,OAAOC,QAAQ,WAAW;AAC1B,OAAOC,WAAW,QAAQ;AAC1B,OAAOC,UAAU,OAAO;AACxB,OAAOC,gBAAgB,aAAa;AACpC,OAAOC,iBAAiB,YAAY;AACpC,SAASC,MAAM,QAAQ,aAAa;AACpC,SAASC,iBAAiB,QAAQ,6BAA6B;AAC/D,SAASC,cAAc,QAAQ,2BAA2B;AAE1D,OAAO,MAAMC,SAAS,IAAIV,OAAO;IAChCW,QAAQC,QAAQC,GAAG,CAACC,QAAQ,KAAK;AAClC,GAAG;AAEH,IAAIC,aAAaR,OAAOS,UAAU,CAAC,EAAE;AACrC,IAAId,GAAGe,cAAc,CAACF,aAAa;IAClCA,aAAanB,KAAKsB,OAAO,CAACH;AAC3B,OAAO;IACNL,OAAOS,kBAAkB,CAAC;QAAC,CAAC,OAAO,EAAEJ,WAAW,gBAAgB,CAAC;KAAC,EAAE;AACrE;AAEA,MAAMK,iBAKF;IACHC,uBAAuB;AACxB;AAEA,IAAId,OAAOe,KAAK,CAACC,IAAI,EAAE;IACtBH,eAAeV,MAAM,GAAG;QACvBc,OAAO;QACPC,WAAW;YACVC,QAAQ;YACRC,SAAS;gBACRC,YAAY;gBACZC,eAAe;gBACfC,QAAQ;YACT;QACD;IACD;AACD;AAEA,IAAIvB,OAAOe,KAAK,CAACS,KAAK,EAAE;IACvBX,eAAeW,KAAK,GAAG;IACvBX,eAAeY,KAAK,GAAG;QAAErC;QAAKD;IAAK;AACpC;AAEA,MAAMuC,UAAUhC,QAAQmB;AAExB,IAAIb,OAAOe,KAAK,CAACC,IAAI,EAAE;IACtBU,QAAQC,QAAQ,CAAC5B;AAClB;AAEA,IAAIC,OAAOe,KAAK,CAACa,IAAI,EAAE;IACtBF,QAAQC,QAAQ,CAACpC,iBAAiB;QACjCsC,QAAQ;QACRC,WAAW;YAAC;YAAQ;YAAW;YAAM;SAAW;IACjD;AACD;AAEA,IAAI9B,OAAOe,KAAK,CAACgB,IAAI,EAAE;IACtBL,QAAQC,QAAQ,CAACnC;AAClB;AAEA,MAAMwC,sBAIF,CAAC;AAEL,IAAIhC,OAAOe,KAAK,CAACkB,KAAK,GAAG,GAAG;IAC3BD,oBAAoBE,SAAS,GAAGlC,OAAOe,KAAK,CAACkB,KAAK;IAClDD,oBAAoBG,eAAe,GAAGnC,OAAOe,KAAK,CAACkB,KAAK;IACxDD,oBAAoBI,OAAO,GAAG;AAC/B,OAAO;IACNJ,oBAAoBI,OAAO,GAAG;AAC/B;AAEAV,QAAQC,QAAQ,CAACrC,cAAc0C;AAE/B,MAAMK,gBAAsC;IAC3CC,MAAM9B;AACP;AACA,IAAIR,OAAOe,KAAK,CAACwB,IAAI,EAAE;IACtBF,cAAcG,IAAI,GAAG;QACpBC,QAAQ;QACRC,QAAQzC;IACT;AACD;AACAyB,QAAQC,QAAQ,CAACzC,eAAemD;AAEhCX,QAAQiB,kBAAkB,CAAC,CAACC,UAAUC;IACrCA,MAAMC,IAAI,CAAC,KAAKC,IAAI,CAAC,aAAaC,IAAI,CAAC9C,eAAeF,OAAOe,KAAK,CAACwB,IAAI;AACxE;AAEA;;CAEC,GACD,IAAIU,MACHC,SACAC,cAAc;AACf,MAAMC,QAAQ;IACb,IAAI;QACHH,OAAO,MAAMnD,WAAWuD,cAAc,CAAC;YAAEJ,MAAMK,OAAOtD,OAAOe,KAAK,CAACkC,IAAI;QAAE;QACzE,IAAIA,SAASjD,OAAOe,KAAK,CAACkC,IAAI,EAAE;YAC/BE,cAAc,CAAC,IAAI,EAAEvD,MAAM2D,MAAM,CAChC,CAAC,cAAc,EAAEvD,OAAOe,KAAK,CAACkC,IAAI,CAAC,mBAAmB,CAAC,GACrD;YACHjD,OAAOe,KAAK,CAACkC,IAAI,GAAGA;QACrB;QACA,MAAMO,gBAAkD;YACvDP,MAAMjD,OAAOe,KAAK,CAACkC,IAAI;QACxB;QACA,IAAIjD,OAAOe,KAAK,CAAC0C,IAAI,EAAE;YACtBD,cAAcC,IAAI,GAAGzD,OAAOe,KAAK,CAAC0C,IAAI;YACtCP,UAAUlD,OAAOe,KAAK,CAAC0C,IAAI;QAC5B,OAAO;YACNP,UAAU;QACX;QACA,MAAMxB,QAAQgC,MAAM,CAACF;QAErB,MAAMG,MAAM,GAAG3D,OAAOe,KAAK,CAACS,KAAK,GAAG,UAAU,OAAO,GAAG,EAAE0B,QAAQ,CAAC,EAClElD,OAAOe,KAAK,CAACkC,IAAI,EAChB;QACF,MAAMW,WAAW;YAChB,GAAGhE,MAAMiE,IAAI,CAAC,iBAAiB,mBAAmB,CAAC;YACnD;YACA,GAAGjE,MAAMiE,IAAI,CAACF,MAAM;YACpB;YACA,CAAC,2BAA2B,EAAER,aAAa;SAC3C;QAEDhD,OAAO2D,QAAQ,CAACF,UAAU;YAAEG,cAAc;QAAM;QAEhD,IAAI/D,OAAOe,KAAK,CAAClB,IAAI,EAAE;YACtB,MAAMA,KAAK8D,KAAK;gBACfK,MAAM;YACP;QACD;IACD,EAAE,OAAOC,OAAO;QACfvC,QAAQwC,GAAG,CAACD,KAAK,CAACA;QAClB,mDAAmD;QACnD5D,QAAQ8D,IAAI,CAAC;IACd;AACD;AACAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/templates/directories.ts"],"sourcesContent":["type DirectoriesAndFiles = { href: string; name: string }[];\n\nexport const renderDirectories = (\n\tdirectories: DirectoriesAndFiles,\n\tfiles: DirectoriesAndFiles,\n) => {\n\tconst directoriesList = `${directories\n\t\t.map(\n\t\t\t(directory) =>\n\t\t\t\t`<li><a class=\"folder\" href=\"${directory.href}\">${directory.name}/</a></li>`,\n\t\t)\n\t\t.join(\"\\n \")}`;\n\n\tconst filesList = `${files\n\t\t.map(\n\t\t\t(file) => `<li><a class=\"file\" href=\"${file.href}\">${file.name}</a></li>`,\n\t\t)\n\t\t.join(\"\\n \")}`;\n\n\treturn `\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta content=\"text/html;charset=utf-8\" http-equiv=\"Content-Type\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n\n <title>Static Server Directory Listing</title>\n\n <style>\n\t\tbody {\n\t\t -webkit-font-smoothing: antialiased;\n\t\t font-family: -apple-system, Calibri, \"Helvetica Neue\", sans-serif;\n\t\t margin: 0;\n\t\t padding: 20px;\n\t\t}\n\t\tmain {\n\t\t max-width: 900px;\n\t\t}\n\t\theader {\n\t\t display: flex;\n\t\t flex-wrap: wrap;\n\t\t justify-content: space-between;\n\t\t}\n\t\th1 {\n\t\t color: #000;\n\t\t font-size: 18px;\n\t\t font-weight: bold;\n\t\t margin-top: 0;\n\t\t}\n\t\tul {\n\t\t margin: 0 0 0 -2px;\n\t\t padding: 20px 0 0 0;\n\t\t}\n\t\tul li {\n\t\t display: flex;\n\t\t font-size: 14px;\n\t\t justify-content: space-between;\n\t\t list-style: none;\n\t\t}\n\t\ta {\n\t\t text-decoration: none;\n\t\t}\n\t\tul a {\n\t\t color: #000;\n\t\t display: block;\n\t\t margin: 0 -5px;\n\t\t overflow: hidden;\n\t\t padding: 10px 5px;\n\t\t text-overflow: ellipsis;\n\t\t white-space: nowrap;\n\t\t width: 100%;\n\t\t}\n\t\tsvg {\n\t\t height: 13px;\n\t\t vertical-align: text-bottom;\n\t\t}\n\t\tul a::before {\n\t\t display: inline-block;\n\t\t vertical-align: middle;\n\t\t margin-right: 10px;\n\t\t width: 24px;\n\t\t text-align: center;\n\t\t line-height: 12px;\n\t\t}\n\t\tul a.file::before {\n\t\t content: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='currentColor' viewBox='0 0 16 16'> <path d='M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z'/> </svg>\");\n\t\t}\n\t\tul a:hover {\n\t\t text-decoration: underline;\n\t\t}\n\t\t/* folder-icon */\n\t\tul a.folder::before {\n\t\t content: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='currentColor' viewBox='0 0 16 16'> <path d='M9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.825a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .342-1.31L.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3zm-8.322.12C1.72 3.042 1.95 3 2.19 3h5.396l-.707-.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139z'/> </svg>\");\n\t\t}\n\t\t::selection {\n\t\t background-color: #fff;\n\t\t color: #000;\n\t\t}\n\t\t@media (min-width: 768px) {\n\t\t ul {\n\t\t\t display: flex;\n\t\t\t flex-wrap: wrap;\n\t\t }\n\t\t ul li {\n\t\t\t width: 230px;\n\t\t\t padding-right: 20px;\n\t\t }\n\t\t}\n\t</style>\n </head>\n\n <body>\n <main>\n <header>\n <h1>\n Static Server Directory Listing\n </h1>\n </header>\n\n\n <ul id=\"files\">\n ${directoriesList}\n ${filesList}\n </ul>\n\n\t</main>\n </body>\n</html>\n`;\n};\n"],"names":["renderDirectories","directories","files","directoriesList","map","directory","href","name","join","filesList","file"],"mappings":"AAEA,OAAO,MAAMA,oBAAoB,CAChCC,aACAC;IAEA,MAAMC,kBAAkB,CAAC,EAAEF,YACzBG,GAAG,CACH,CAACC,YACA,CAAC,4BAA4B,EAAEA,UAAUC,IAAI,CAAC,EAAE,EAAED,UAAUE,IAAI,CAAC,UAAU,CAAC,EAE7EC,IAAI,CAAC,QAAQ,CAAC;IAEhB,MAAMC,YAAY,CAAC,EAAEP,MACnBE,GAAG,CACH,CAACM,OAAS,CAAC,0BAA0B,EAAEA,KAAKJ,IAAI,CAAC,EAAE,EAAEI,KAAKH,IAAI,CAAC,SAAS,CAAC,EAEzEC,IAAI,CAAC,QAAQ,CAAC;IAEhB,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuGD,EAAEL,gBAAgB;QAClB,EAAEM,UAAU;;;;;;AAMpB,CAAC;AACD,EAAE"}
1
+ {"version":3,"sources":["../../src/templates/directories.ts"],"sourcesContent":["type DirectoriesAndFiles = { href: string; name: string }[];\n\nexport const renderDirectories = (\n\tdirectories: DirectoriesAndFiles,\n\tfiles: DirectoriesAndFiles,\n) => {\n\tconst directoriesList = `${directories\n\t\t.map(\n\t\t\t(directory) =>\n\t\t\t\t`<li><a class=\"folder\" href=\"${directory.href}\">${directory.name}/</a></li>`,\n\t\t)\n\t\t.join(\"\\n \")}`;\n\n\tconst filesList = `${files\n\t\t.map(\n\t\t\t(file) => `<li><a class=\"file\" href=\"${file.href}\">${file.name}</a></li>`,\n\t\t)\n\t\t.join(\"\\n \")}`;\n\n\treturn `\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta content=\"text/html;charset=utf-8\" http-equiv=\"Content-Type\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n\n <title>Static Server Directory Listing</title>\n\n <style>\n\t\tbody {\n\t\t -webkit-font-smoothing: antialiased;\n\t\t font-family: -apple-system, Calibri, \"Helvetica Neue\", sans-serif;\n\t\t margin: 0;\n\t\t padding: 20px;\n\t\t}\n\t\tmain {\n\t\t max-width: 900px;\n\t\t}\n\t\theader {\n\t\t display: flex;\n\t\t flex-wrap: wrap;\n\t\t justify-content: space-between;\n\t\t}\n\t\th1 {\n\t\t color: #000;\n\t\t font-size: 18px;\n\t\t font-weight: bold;\n\t\t margin-top: 0;\n\t\t}\n\t\tul {\n\t\t margin: 0 0 0 -2px;\n\t\t padding: 20px 0 0 0;\n\t\t}\n\t\tul li {\n\t\t display: flex;\n\t\t font-size: 14px;\n\t\t justify-content: space-between;\n\t\t list-style: none;\n\t\t}\n\t\ta {\n\t\t text-decoration: none;\n\t\t}\n\t\tul a {\n\t\t color: #000;\n\t\t display: block;\n\t\t margin: 0 -5px;\n\t\t overflow: hidden;\n\t\t padding: 10px 5px;\n\t\t text-overflow: ellipsis;\n\t\t white-space: nowrap;\n\t\t width: 100%;\n\t\t}\n\t\tsvg {\n\t\t height: 13px;\n\t\t vertical-align: text-bottom;\n\t\t}\n\t\tul a::before {\n\t\t display: inline-block;\n\t\t vertical-align: middle;\n\t\t margin-right: 10px;\n\t\t width: 24px;\n\t\t text-align: center;\n\t\t line-height: 12px;\n\t\t}\n\t\tul a.file::before {\n\t\t content: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='currentColor' viewBox='0 0 16 16'> <path d='M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z'/> </svg>\");\n\t\t}\n\t\tul a:hover {\n\t\t text-decoration: underline;\n\t\t}\n\t\t/* folder-icon */\n\t\tul a.folder::before {\n\t\t content: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='22' fill='currentColor' viewBox='0 0 16 16'> <path d='M9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.825a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .342-1.31L.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3zm-8.322.12C1.72 3.042 1.95 3 2.19 3h5.396l-.707-.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139z'/> </svg>\");\n\t\t}\n\t\t::selection {\n\t\t background-color: #fff;\n\t\t color: #000;\n\t\t}\n\t\t@media (min-width: 768px) {\n\t\t ul {\n\t\t\t display: flex;\n\t\t\t flex-wrap: wrap;\n\t\t }\n\t\t ul li {\n\t\t\t width: 230px;\n\t\t\t padding-right: 20px;\n\t\t }\n\t\t}\n\t</style>\n </head>\n\n <body>\n <main>\n <header>\n <h1>\n Static Server Directory Listing\n </h1>\n </header>\n\n\n <ul id=\"files\">\n ${directoriesList}\n ${filesList}\n </ul>\n\n\t</main>\n </body>\n</html>\n`;\n};\n"],"names":["renderDirectories","directories","files","directoriesList","map","directory","href","name","join","filesList","file"],"mappings":"AAEA,OAAO,MAAMA,oBAAoB,CAChCC,aACAC;IAEA,MAAMC,kBAAkB,GAAGF,YACzBG,GAAG,CACH,CAACC,YACA,CAAC,4BAA4B,EAAEA,UAAUC,IAAI,CAAC,EAAE,EAAED,UAAUE,IAAI,CAAC,UAAU,CAAC,EAE7EC,IAAI,CAAC,SAAS;IAEhB,MAAMC,YAAY,GAAGP,MACnBE,GAAG,CACH,CAACM,OAAS,CAAC,0BAA0B,EAAEA,KAAKJ,IAAI,CAAC,EAAE,EAAEI,KAAKH,IAAI,CAAC,SAAS,CAAC,EAEzEC,IAAI,CAAC,SAAS;IAEhB,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuGD,EAAEL,gBAAgB;QAClB,EAAEM,UAAU;;;;;;AAMpB,CAAC;AACD,EAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-cli/static-server",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "description": "A simple, zero-configuration, command line HTTP server to serve static files locally",
@@ -26,18 +26,22 @@
26
26
  "@fastify/compress": "7.0.3",
27
27
  "@fastify/cors": "9.0.1",
28
28
  "@fastify/static": "7.0.4",
29
- "@node-cli/logger": "1.2.5",
30
- "@node-cli/parser": "2.3.4",
31
- "fastify": "4.28.1",
29
+ "@node-cli/logger": "1.3.1",
30
+ "@node-cli/parser": "2.4.1",
31
+ "fastify": "4.29.1",
32
32
  "fastify-plugin": "4.5.1",
33
- "fs-extra": "11.2.0",
33
+ "fs-extra": "11.3.0",
34
34
  "kleur": "4.1.5",
35
- "open": "10.1.0",
36
- "pino-pretty": "11.2.2",
37
- "portfinder": "1.0.32"
35
+ "open": "10.1.2",
36
+ "pino-pretty": "11.3.0",
37
+ "portfinder": "1.0.37"
38
38
  },
39
39
  "publishConfig": {
40
40
  "access": "public"
41
41
  },
42
- "gitHead": "57cef4183affa9dce5e251eeae71e5c2dc8ffbf2"
42
+ "devDependencies": {
43
+ "@vitest/coverage-v8": "3.2.4",
44
+ "vitest": "3.2.4"
45
+ },
46
+ "gitHead": "2cef8f88aa5316a1789caad2bd7327ca908ccb9f"
43
47
  }