@node-cli/static-server 1.1.1 → 2.0.0
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/README.md +2 -2
- package/dist/defaults.js +1 -1
- package/dist/defaults.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/parse.js +1 -1
- package/dist/parse.js.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/dist/templates/directories.js.map +1 -0
- package/dist/templates/not-found.d.ts +1 -0
- package/dist/templates/not-found.js +66 -0
- package/dist/templates/not-found.js.map +1 -0
- package/package.json +3 -5
- package/dist/directories.js.map +0 -1
- /package/dist/{directories.d.ts → templates/directories.d.ts} +0 -0
- /package/dist/{directories.js → templates/directories.js} +0 -0
package/README.md
CHANGED
|
@@ -28,9 +28,9 @@ At that point, you should be able to visit `http://localhost:8080` and see the f
|
|
|
28
28
|
| -------------------------- | ------- | ----------------------------------------------------------- |
|
|
29
29
|
| `-c` or `--cache <number>` | 0 | Time in seconds for caching files |
|
|
30
30
|
| `-C` or `--cors` | false | Set CORS headers to \* to allow requests from any origin |
|
|
31
|
-
| `-d` or `--dirs` |
|
|
31
|
+
| `-d` or `--dirs` | true | List the directory's contents |
|
|
32
32
|
| `-h` or `--help` | | Display help instructions |
|
|
33
|
-
| `-H` or `--http2` | false | Enable HTTP
|
|
33
|
+
| `-H` or `--http2` | false | Enable HTTP/2 and SSL (https) |
|
|
34
34
|
| `-l` or `--logs` | false | Log HTTP requests at the prompt |
|
|
35
35
|
| `-o` or `--open` | false | Open in your default browser |
|
|
36
36
|
| `-p` or `--port <n>` | 8080 | Port to listen on - Will try next available if already used |
|
package/dist/defaults.js
CHANGED
package/dist/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.ts"],"sourcesContent":["export const defaultFlags = {\n\tcache: 0,\n\tcors: false,\n\tdirs:
|
|
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};\n\nexport const defaultParameters = {\n\t\"0\": `${process.cwd()}/`,\n};\n"],"names":["defaultFlags","cache","cors","dirs","gzip","http2","logs","open","port","defaultParameters","process","cwd"],"mappings":"AAAA,OAAO,MAAMA,eAAe;IAC3BC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,MAAM;IACNC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,MAAM;AACP,EAAE;AAEF,OAAO,MAAMC,oBAAoB;IAChC,KAAK,CAAC,EAAEC,QAAQC,MAAM,CAAC,CAAC;AACzB,EAAE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
export * from "./certs";
|
|
6
6
|
export * from "./defaults";
|
|
7
|
-
export * from "./directories";
|
|
8
7
|
export * from "./logs";
|
|
9
8
|
export * from "./parse";
|
|
10
9
|
export * from "./server";
|
|
11
10
|
export * from "./utilities";
|
|
11
|
+
export * from "./templates/directories";
|
|
12
|
+
export * from "./templates/not-found";
|
package/dist/parse.js
CHANGED
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse.ts"],"sourcesContent":["import { defaultFlags, defaultParameters } from \"./defaults.js\";\n\nimport { parser } from \"@node-cli/parser\";\n\nexport type Flags = {\n\tcache?: number;\n\tcors?: boolean;\n\tdirs?: boolean;\n\tgzip?: boolean;\n\thttp2?: boolean;\n\tlogs?: boolean;\n\topen?: boolean;\n\tport?: number;\n};\n\nexport type Parameters = {\n\tpath?: string;\n};\n\nexport type Configuration = {\n\tflags?: Flags;\n\tparameters?: Parameters;\n\tusage?: boolean;\n\texamples?: string;\n};\n\nexport const config: Configuration = parser({\n\tflags: {\n\t\tcache: {\n\t\t\tshortFlag: \"c\",\n\t\t\tdefault: defaultFlags.cache,\n\t\t\tdescription: \"Time in seconds for caching files\",\n\t\t\ttype: \"number\",\n\t\t},\n\t\tcors: {\n\t\t\tshortFlag: \"C\",\n\t\t\tdefault: defaultFlags.cors,\n\t\t\tdescription: \"Set CORS headers to * to allow requests from any origin\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\tdirs: {\n\t\t\tshortFlag: \"d\",\n\t\t\tdefault: defaultFlags.dirs,\n\t\t\tdescription: \"List the directory's contents\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\tgzip: {\n\t\t\tshortFlag: \"g\",\n\t\t\tdefault: defaultFlags.gzip,\n\t\t\tdescription: \"Enable GZIP compression\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\thelp: {\n\t\t\tshortFlag: \"h\",\n\t\t\tdescription: \"Display help instructions\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\thttp2: {\n\t\t\tshortFlag: \"H\",\n\t\t\tdefault: defaultFlags.http2,\n\t\t\tdescription: \"
|
|
1
|
+
{"version":3,"sources":["../src/parse.ts"],"sourcesContent":["import { defaultFlags, defaultParameters } from \"./defaults.js\";\n\nimport { parser } from \"@node-cli/parser\";\n\nexport type Flags = {\n\tcache?: number;\n\tcors?: boolean;\n\tdirs?: boolean;\n\tgzip?: boolean;\n\thttp2?: boolean;\n\tlogs?: boolean;\n\topen?: boolean;\n\tport?: number;\n};\n\nexport type Parameters = {\n\tpath?: string;\n};\n\nexport type Configuration = {\n\tflags?: Flags;\n\tparameters?: Parameters;\n\tusage?: boolean;\n\texamples?: string;\n};\n\nexport const config: Configuration = parser({\n\tflags: {\n\t\tcache: {\n\t\t\tshortFlag: \"c\",\n\t\t\tdefault: defaultFlags.cache,\n\t\t\tdescription: \"Time in seconds for caching files\",\n\t\t\ttype: \"number\",\n\t\t},\n\t\tcors: {\n\t\t\tshortFlag: \"C\",\n\t\t\tdefault: defaultFlags.cors,\n\t\t\tdescription: \"Set CORS headers to * to allow requests from any origin\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\tdirs: {\n\t\t\tshortFlag: \"d\",\n\t\t\tdefault: defaultFlags.dirs,\n\t\t\tdescription: \"List the directory's contents\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\tgzip: {\n\t\t\tshortFlag: \"g\",\n\t\t\tdefault: defaultFlags.gzip,\n\t\t\tdescription: \"Enable GZIP compression\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\thelp: {\n\t\t\tshortFlag: \"h\",\n\t\t\tdescription: \"Display help instructions\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\thttp2: {\n\t\t\tshortFlag: \"H\",\n\t\t\tdefault: defaultFlags.http2,\n\t\t\tdescription: \"Use HTTP/2 and SSL (local certificate provided)\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\tlogs: {\n\t\t\tshortFlag: \"l\",\n\t\t\tdefault: defaultFlags.logs,\n\t\t\tdescription: \"Log HTTP requests at the prompt\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\topen: {\n\t\t\tshortFlag: \"o\",\n\t\t\tdefault: defaultFlags.open,\n\t\t\tdescription: \"Open in your default browser\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t\tport: {\n\t\t\tshortFlag: \"p\",\n\t\t\tdefault: defaultFlags.port,\n\t\t\tdescription: \"Port to listen on\",\n\t\t\ttype: \"number\",\n\t\t},\n\t\tversion: {\n\t\t\tshortFlag: \"v\",\n\t\t\tdescription: \"Output the current version\",\n\t\t\ttype: \"boolean\",\n\t\t},\n\t},\n\tparameters: {\n\t\tpath: {\n\t\t\tdefault: \"current folder\",\n\t\t\tdescription: \"the path to serve files from\",\n\t\t},\n\t},\n\tusage: true,\n\tdefaultFlags,\n\tdefaultParameters,\n});\n"],"names":["defaultFlags","defaultParameters","parser","config","flags","cache","shortFlag","default","description","type","cors","dirs","gzip","help","http2","logs","open","port","version","parameters","path","usage"],"mappings":"AAAA,SAASA,YAAY,EAAEC,iBAAiB,QAAQ,gBAAgB;AAEhE,SAASC,MAAM,QAAQ,mBAAmB;AAwB1C,OAAO,MAAMC,SAAwBD,OAAO;IAC3CE,OAAO;QACNC,OAAO;YACNC,WAAW;YACXC,SAASP,aAAaK;YACtBG,aAAa;YACbC,MAAM;QACP;QACAC,MAAM;YACLJ,WAAW;YACXC,SAASP,aAAaU;YACtBF,aAAa;YACbC,MAAM;QACP;QACAE,MAAM;YACLL,WAAW;YACXC,SAASP,aAAaW;YACtBH,aAAa;YACbC,MAAM;QACP;QACAG,MAAM;YACLN,WAAW;YACXC,SAASP,aAAaY;YACtBJ,aAAa;YACbC,MAAM;QACP;QACAI,MAAM;YACLP,WAAW;YACXE,aAAa;YACbC,MAAM;QACP;QACAK,OAAO;YACNR,WAAW;YACXC,SAASP,aAAac;YACtBN,aAAa;YACbC,MAAM;QACP;QACAM,MAAM;YACLT,WAAW;YACXC,SAASP,aAAae;YACtBP,aAAa;YACbC,MAAM;QACP;QACAO,MAAM;YACLV,WAAW;YACXC,SAASP,aAAagB;YACtBR,aAAa;YACbC,MAAM;QACP;QACAQ,MAAM;YACLX,WAAW;YACXC,SAASP,aAAaiB;YACtBT,aAAa;YACbC,MAAM;QACP;QACAS,SAAS;YACRZ,WAAW;YACXE,aAAa;YACbC,MAAM;QACP;IACD;IACAU,YAAY;QACXC,MAAM;YACLb,SAAS;YACTC,aAAa;QACd;IACD;IACAa,OAAO;IACPrB;IACAC;AACD,GAAG"}
|
package/dist/server.js
CHANGED
|
@@ -13,7 +13,8 @@ import kleur from "kleur";
|
|
|
13
13
|
import open from "open";
|
|
14
14
|
import path from "node:path";
|
|
15
15
|
import portfinder from "portfinder";
|
|
16
|
-
import { renderDirectories } from "./directories.js";
|
|
16
|
+
import { renderDirectories } from "./templates/directories.js";
|
|
17
|
+
import { renderNotFound } from "./templates/not-found.js";
|
|
17
18
|
export const logger = new Logger({
|
|
18
19
|
boring: process.env.NODE_ENV === "test"
|
|
19
20
|
});
|
|
@@ -79,13 +80,15 @@ const staticOptions = {
|
|
|
79
80
|
root: customPath
|
|
80
81
|
};
|
|
81
82
|
if (config.flags.dirs) {
|
|
82
|
-
staticOptions.index = false;
|
|
83
83
|
staticOptions.list = {
|
|
84
84
|
format: "html",
|
|
85
85
|
render: renderDirectories
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
88
|
fastify.register(fastifyStatic, staticOptions);
|
|
89
|
+
fastify.setNotFoundHandler((request, reply)=>{
|
|
90
|
+
reply.code(404).type("text/html").send(renderNotFound(config.flags.dirs));
|
|
91
|
+
});
|
|
89
92
|
/**
|
|
90
93
|
* Run the server!
|
|
91
94
|
*/ let port, portMessage = "";
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { cert, key } from \"./certs.js\";\nimport fastifyStatic, { FastifyStaticOptions } from \"@fastify/static\";\n\nimport Fastify from \"fastify\";\nimport { Logger } from \"@node-cli/logger\";\nimport { config } from \"./parse.js\";\nimport fastifyCache from \"@fastify/caching\";\nimport fastifyCompress from \"@fastify/compress\";\nimport fastifyCors from \"@fastify/cors\";\nimport fastifyLogs from \"./logs.js\";\nimport fs from \"fs-extra\";\nimport kleur from \"kleur\";\nimport open from \"open\";\nimport path from \"node:path\";\nimport portfinder from \"portfinder\";\nimport { renderDirectories } from \"./directories.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.
|
|
1
|
+
{"version":3,"sources":["../src/server.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { cert, key } from \"./certs.js\";\nimport fastifyStatic, { FastifyStaticOptions } from \"@fastify/static\";\n\nimport Fastify from \"fastify\";\nimport { Logger } from \"@node-cli/logger\";\nimport { config } from \"./parse.js\";\nimport fastifyCache from \"@fastify/caching\";\nimport fastifyCompress from \"@fastify/compress\";\nimport fastifyCors from \"@fastify/cors\";\nimport fastifyLogs from \"./logs.js\";\nimport fs from \"fs-extra\";\nimport kleur from \"kleur\";\nimport open from \"open\";\nimport path from \"node:path\";\nimport portfinder from \"portfinder\";\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\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\tawait fastify.listen({ port: config.flags.port });\n\n\t\tconst url = `${config.flags.http2 ? \"https\" : \"http\"}://localhost:${\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":["cert","key","fastifyStatic","Fastify","Logger","config","fastifyCache","fastifyCompress","fastifyCors","fastifyLogs","fs","kleur","open","path","portfinder","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","portMessage","start","getPortPromise","Number","yellow","listen","url","messages","cyan","printBox","newLineAfter","wait","error","log","exit"],"mappings":"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"}
|
|
@@ -0,0 +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,IACA,CAACC,YACA,CAAC,4BAA4B,EAAEA,UAAUC,KAAK,EAAE,EAAED,UAAUE,KAAK,UAAU,CAAC,EAE7EC,KAAK,QAAQ,CAAC;IAEhB,MAAMC,YAAY,CAAC,EAAEP,MACnBE,IACA,CAACM,OAAS,CAAC,0BAA0B,EAAEA,KAAKJ,KAAK,EAAE,EAAEI,KAAKH,KAAK,SAAS,CAAC,EAEzEC,KAAK,QAAQ,CAAC;IAEhB,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuGD,EAAEL,gBAAgB;QAClB,EAAEM,UAAU;;;;;;AAMpB,CAAC;AACD,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const renderNotFound: (listDirectories: boolean) => string;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export const renderNotFound = (listDirectories)=>{
|
|
2
|
+
const messageHeading = listDirectories ? "Static Server Directory Listing" : "Static Server";
|
|
3
|
+
const messageNotFound = listDirectories ? '<div class="not-found center"> Page Not Found </div>' : '<div class="not-found center"> No "index" file found and directory listing is disabled... </div>';
|
|
4
|
+
const messageHint = listDirectories ? "" : '<p class="center">Hint: use the option <code>--dirs</code> to enable directory listing.</p>';
|
|
5
|
+
return `
|
|
6
|
+
<!DOCTYPE html>
|
|
7
|
+
<html lang="en">
|
|
8
|
+
<head>
|
|
9
|
+
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
|
|
10
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
12
|
+
|
|
13
|
+
<title>Static Server Directory Listing</title>
|
|
14
|
+
|
|
15
|
+
<style>
|
|
16
|
+
body {
|
|
17
|
+
-webkit-font-smoothing: antialiased;
|
|
18
|
+
font-family: -apple-system, Calibri, "Helvetica Neue", sans-serif;
|
|
19
|
+
margin: 0;
|
|
20
|
+
padding: 20px;
|
|
21
|
+
}
|
|
22
|
+
main {
|
|
23
|
+
max-width: 900px;
|
|
24
|
+
}
|
|
25
|
+
h1 {
|
|
26
|
+
color: #000;
|
|
27
|
+
font-size: 18px;
|
|
28
|
+
font-weight: bold;
|
|
29
|
+
margin-top: 0;
|
|
30
|
+
display: flex;
|
|
31
|
+
justify-content: center;
|
|
32
|
+
}
|
|
33
|
+
code {
|
|
34
|
+
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
|
35
|
+
font-size: 13px;
|
|
36
|
+
background-color: #f7f7f7;
|
|
37
|
+
padding: 2px 4px;
|
|
38
|
+
border-radius: 3px;
|
|
39
|
+
}
|
|
40
|
+
.center {
|
|
41
|
+
display: flex;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
}
|
|
44
|
+
.not-found::before,
|
|
45
|
+
.not-found::after {
|
|
46
|
+
content: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-emoji-dizzy' viewBox='0 0 16 16'> <path d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/> <path d='M9.146 5.146a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708.708l-.647.646.647.646a.5.5 0 0 1-.708.708l-.646-.647-.646.647a.5.5 0 1 1-.708-.708l.647-.646-.647-.646a.5.5 0 0 1 0-.708zm-5 0a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 1 1 .708.708l-.647.646.647.646a.5.5 0 1 1-.708.708L5.5 7.207l-.646.647a.5.5 0 1 1-.708-.708l.647-.646-.647-.646a.5.5 0 0 1 0-.708zM10 11a2 2 0 1 1-4 0 2 2 0 0 1 4 0z'/> </svg>");
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
49
|
+
</head>
|
|
50
|
+
|
|
51
|
+
<body>
|
|
52
|
+
<header>
|
|
53
|
+
<h1>
|
|
54
|
+
${messageHeading}
|
|
55
|
+
</h1>
|
|
56
|
+
</header>
|
|
57
|
+
<main>
|
|
58
|
+
${messageNotFound}
|
|
59
|
+
${messageHint}
|
|
60
|
+
</main>
|
|
61
|
+
</body>
|
|
62
|
+
</html>
|
|
63
|
+
`;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=not-found.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/templates/not-found.ts"],"sourcesContent":["export const renderNotFound = (listDirectories: boolean) => {\n\tconst messageHeading = listDirectories\n\t\t? \"Static Server Directory Listing\"\n\t\t: \"Static Server\";\n\tconst messageNotFound = listDirectories\n\t\t? '<div class=\"not-found center\"> Page Not Found </div>'\n\t\t: '<div class=\"not-found center\"> No \"index\" file found and directory listing is disabled... </div>';\n\n\tconst messageHint = listDirectories\n\t\t? \"\"\n\t\t: '<p class=\"center\">Hint: use the option <code>--dirs</code> to enable directory listing.</p>';\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 body {\n -webkit-font-smoothing: antialiased;\n font-family: -apple-system, Calibri, \"Helvetica Neue\", sans-serif;\n margin: 0;\n padding: 20px;\n }\n main {\n max-width: 900px;\n }\n h1 {\n color: #000;\n font-size: 18px;\n font-weight: bold;\n margin-top: 0;\n display: flex;\n justify-content: center;\n }\n code {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n font-size: 13px;\n background-color: #f7f7f7;\n padding: 2px 4px;\n border-radius: 3px;\n }\n .center {\n display: flex;\n justify-content: center;\n }\n .not-found::before,\n .not-found::after {\n content: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-emoji-dizzy' viewBox='0 0 16 16'> <path d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z'/> <path d='M9.146 5.146a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708.708l-.647.646.647.646a.5.5 0 0 1-.708.708l-.646-.647-.646.647a.5.5 0 1 1-.708-.708l.647-.646-.647-.646a.5.5 0 0 1 0-.708zm-5 0a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 1 1 .708.708l-.647.646.647.646a.5.5 0 1 1-.708.708L5.5 7.207l-.646.647a.5.5 0 1 1-.708-.708l.647-.646-.647-.646a.5.5 0 0 1 0-.708zM10 11a2 2 0 1 1-4 0 2 2 0 0 1 4 0z'/> </svg>\");\n }\n </style>\n </head>\n\n <body>\n <header>\n <h1>\n ${messageHeading}\n </h1>\n </header>\n <main>\n ${messageNotFound}\n ${messageHint}\n\t </main>\n </body>\n</html>\n`;\n};\n"],"names":["renderNotFound","listDirectories","messageHeading","messageNotFound","messageHint"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,CAACC;IAC9B,MAAMC,iBAAiBD,kBACpB,oCACA;IACH,MAAME,kBAAkBF,kBACrB,mEACA;IAEH,MAAMG,cAAcH,kBACjB,KACA;IACH,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiDD,EAAEC,eAAe;;;;MAInB,EAAEC,gBAAgB;MAClB,EAAEC,YAAY;;;;AAIpB,CAAC;AACD,EAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-cli/static-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
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",
|
|
@@ -20,9 +20,7 @@
|
|
|
20
20
|
"build:js": "swc --source-maps --out-dir dist src --copy-files",
|
|
21
21
|
"build:types": "tsc",
|
|
22
22
|
"clean": "rimraf dist types coverage",
|
|
23
|
-
"lint": "eslint \"src/*.ts\"",
|
|
24
|
-
"test": "jest",
|
|
25
|
-
"test:coverage": "echo 'No coverage available yet'",
|
|
23
|
+
"lint": "prettier --write \"src/*.ts\" && eslint --fix \"src/*.ts\"",
|
|
26
24
|
"watch": "swc --watch --out-dir dist src"
|
|
27
25
|
},
|
|
28
26
|
"dependencies": {
|
|
@@ -44,5 +42,5 @@
|
|
|
44
42
|
"publishConfig": {
|
|
45
43
|
"access": "public"
|
|
46
44
|
},
|
|
47
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "6ffdb340e295a1e426be1f86dee1cfdfce633610"
|
|
48
46
|
}
|
package/dist/directories.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/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,IACA,CAACC,YACA,CAAC,4BAA4B,EAAEA,UAAUC,KAAK,EAAE,EAAED,UAAUE,KAAK,UAAU,CAAC,EAE7EC,KAAK,QAAQ,CAAC;IAEhB,MAAMC,YAAY,CAAC,EAAEP,MACnBE,IACA,CAACM,OAAS,CAAC,0BAA0B,EAAEA,KAAKJ,KAAK,EAAE,EAAEI,KAAKH,KAAK,SAAS,CAAC,EAEzEC,KAAK,QAAQ,CAAC;IAEhB,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuGD,EAAEL,gBAAgB;QAClB,EAAEM,UAAU;;;;;;AAMpB,CAAC;AACD,EAAE"}
|
|
File without changes
|
|
File without changes
|