@package-verse/esmpack 1.0.13 → 1.0.15

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.
Files changed (44) hide show
  1. package/dist/ProcessArgs.js +15 -0
  2. package/dist/ProcessArgs.js.map +1 -0
  3. package/dist/core/RegExpExtra.js +11 -0
  4. package/dist/core/RegExpExtra.js.map +1 -0
  5. package/dist/core/tokenizeAll.js +42 -0
  6. package/dist/core/tokenizeAll.js.map +1 -0
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/pack/FilePacker.js +68 -0
  10. package/dist/pack/FilePacker.js.map +1 -0
  11. package/dist/pack/JSModule.js +12 -0
  12. package/dist/pack/JSModule.js.map +1 -0
  13. package/dist/pack/pack.js +2 -0
  14. package/dist/pack/pack.js.map +1 -0
  15. package/dist/pack/packageMap.js +42 -0
  16. package/dist/pack/packageMap.js.map +1 -0
  17. package/dist/parser/babel.js +93 -0
  18. package/dist/parser/babel.js.map +1 -0
  19. package/dist/serve/WebServer.js +60 -0
  20. package/dist/serve/WebServer.js.map +1 -0
  21. package/dist/serve/send/packageInfo.js +26 -0
  22. package/dist/serve/send/packageInfo.js.map +1 -0
  23. package/dist/serve/send/sendJS.js +48 -0
  24. package/dist/serve/send/sendJS.js.map +1 -0
  25. package/dist/serve/send/sendJSHost.js +31 -0
  26. package/dist/serve/send/sendJSHost.js.map +1 -0
  27. package/dist/serve/send/sendList.js +89 -0
  28. package/dist/serve/send/sendList.js.map +1 -0
  29. package/dist/serve/send/sendLocalFile.js +34 -0
  30. package/dist/serve/send/sendLocalFile.js.map +1 -0
  31. package/dist/serve/send/sendNonJSModule.js +30 -0
  32. package/dist/serve/send/sendNonJSModule.js.map +1 -0
  33. package/dist/serve/serve.js +124 -0
  34. package/dist/serve/serve.js.map +1 -0
  35. package/dist/test/LogDecorator.js +3 -0
  36. package/dist/test/LogDecorator.js.map +1 -0
  37. package/dist/test/TestView.js +44 -0
  38. package/dist/test/TestView.js.map +1 -0
  39. package/dist/tsconfig.tsbuildinfo +1 -0
  40. package/package.json +1 -1
  41. package/.github/workflows/node.yml +0 -25
  42. package/.vscode/launch.json +0 -24
  43. package/.vscode/settings.json +0 -199
  44. package/.vscode/tasks.json +0 -44
@@ -0,0 +1,15 @@
1
+ export const ProcessOptions = {
2
+ cwd: ""
3
+ };
4
+ const { argv } = process;
5
+ const { length } = argv;
6
+ for (let i = 0; i < length; i++) {
7
+ const arg = argv[i];
8
+ if (arg.startsWith("--")) {
9
+ ProcessOptions[arg] = argv[i + 1] || void 0;
10
+ }
11
+ }
12
+ const last = argv[argv.length - 1];
13
+ export const fileArgument = last.startsWith("--") ? void 0 : last;
14
+ ProcessOptions.cwd ||= process.cwd();
15
+ //# sourceMappingURL=ProcessArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessArgs.js","sourceRoot":"","sources":["../src/ProcessArgs.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,GAAG,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;AACxB,KAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAE,MAAM,EAAC,CAAC,EAAE,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAIlE,cAAc,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { tokenizeRegexAll } from "./tokenizeAll.js";
2
+ export const RegExpExtra = {
3
+ replaceAll(text, regExp, transformer) {
4
+ let r = "";
5
+ for (const token of tokenizeRegexAll(text, regExp)) {
6
+ r += transformer(token);
7
+ }
8
+ return r;
9
+ },
10
+ };
11
+ //# sourceMappingURL=RegExpExtra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegExpExtra.js","sourceRoot":"","sources":["../../src/core/RegExpExtra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,CAAC,MAAM,WAAW,GAAG;IAEvB,UAAU,CAAC,IAAY,EAAE,MAAc,EAAE,WAA2C;QAChF,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAI,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAChD,CAAC,IAAI,WAAW,CAAC,KAAY,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;CACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ export function* tokenizeRegexAll(text, regex) {
2
+ if (!text) {
3
+ return;
4
+ }
5
+ regex.lastIndex = 0;
6
+ let start = 0;
7
+ for (const m of text.matchAll(regex)) {
8
+ if (start < m.index) {
9
+ yield { text: text.substring(start, m.index) };
10
+ }
11
+ yield { match: m };
12
+ start = m.index + m[0].length;
13
+ }
14
+ if (start < text.length) {
15
+ if (start) {
16
+ yield { text: text.substring(start) };
17
+ }
18
+ else {
19
+ yield { text };
20
+ }
21
+ }
22
+ // let m;
23
+ // let start = 0;
24
+ // while((m = regex.exec(text)) !== null) {
25
+ // const { lastIndex } = regex;
26
+ // if (m.index === lastIndex) {
27
+ // regex.lastIndex++;
28
+ // }
29
+ // if (!m?.length) {
30
+ // break;
31
+ // }
32
+ // if (start < m.index) {
33
+ // yield { text: text.substring(start, m.index)};
34
+ // }
35
+ // yield { match: m as RegExpExecArray };
36
+ // start = m.index + m[0].length;
37
+ // }
38
+ // if (start < text.length) {
39
+ // yield { text: text.substring(start) };
40
+ // }
41
+ }
42
+ //# sourceMappingURL=tokenizeAll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizeAll.js","sourceRoot":"","sources":["../../src/core/tokenizeAll.ts"],"names":[],"mappings":"AAAA,MAAM,SAAU,CAAC,CAAA,gBAAgB,CAAC,IAAY,EAAE,KAAa;IACzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO;IACX,CAAC;IACD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IACpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAI,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC;QAClD,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACnB,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,IAAI,EAAE,CAAC;QACnB,CAAC;IACL,CAAC;IACD,SAAS;IACT,iBAAiB;IACjB,2CAA2C;IAC3C,mCAAmC;IACnC,mCAAmC;IACnC,6BAA6B;IAC7B,QAAQ;IACR,wBAAwB;IACxB,iBAAiB;IACjB,QAAQ;IACR,6BAA6B;IAC7B,yDAAyD;IACzD,QAAQ;IACR,6CAA6C;IAC7C,qCAAqC;IACrC,IAAI;IACJ,6BAA6B;IAC7B,6CAA6C;IAC7C,IAAI;AACR,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ console.log("placeholder");
2
+ export {};
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,68 @@
1
+ import path from "path";
2
+ import { Babel } from "../parser/babel.js";
3
+ import packageMap from "./packageMap.js";
4
+ /**
5
+ * File Packer must do following tasks...
6
+ * 1. Visit every JavaScript file
7
+ * 2. Change all imports, redirect CSS imports as css.js file that will include CSS on the page ...
8
+ * 3. Create .pack.js with all nested imports if file imports `@web-atoms/core/dist/Pack`
9
+ * 4. Packed file must set all css as installed. And other modules will simply return absolute paths.
10
+ *
11
+ * For App.js following packed scripts will be generated.
12
+ * 1. App.pack.js
13
+ * Push Import Maps script tag
14
+ * Add import map for non js modules as well, and for this
15
+ * every nested dependency must be inspected.
16
+ * Json module should load json via hashed-dependency
17
+ * Image module should load path of module via hashed-dependency
18
+ * CSS module should inject full path to the browser
19
+ * Push empty module for CSS
20
+ * Imports all nested dependencies of App.js that should not contain fully qualified path
21
+ * Import dynamically loaded modules as well
22
+ * Imports App.js dynamically so CSS can be ready before hosting the User interface
23
+ */
24
+ export default class FilePacker {
25
+ constructor(root, src, prefix) {
26
+ this.root = root;
27
+ this.src = src;
28
+ this.prefix = prefix;
29
+ this.cssImports = [];
30
+ this.jsonImports = [];
31
+ this.pathImports = [];
32
+ // empty
33
+ // let us make src relative to the root if an absolute path was supplied
34
+ if (path.isAbsolute(this.src)) {
35
+ this.src = path.relative(this.root, this.src);
36
+ }
37
+ this.absoluteSrc = path.resolve(this.root, this.src);
38
+ }
39
+ async pack() {
40
+ // resolve package.json
41
+ this.modules = await packageMap(this.root);
42
+ const resolve = (url, sourceFile) => this.resolve(url, sourceFile);
43
+ // we don't need the code
44
+ await Babel.transformAsync({
45
+ file: path.join(this.root, this.src),
46
+ resolve,
47
+ dynamicResolve: resolve
48
+ });
49
+ }
50
+ resolve(url, sourceFile) {
51
+ const moduleUrl = this.moduleUrl(url, sourceFile);
52
+ if (url.endsWith(".css")) {
53
+ this.cssImports.push(moduleUrl);
54
+ return url;
55
+ }
56
+ if (url.endsWith(".json")) {
57
+ this.jsonImports.push(moduleUrl);
58
+ return url;
59
+ }
60
+ if (!url.endsWith(".js")) {
61
+ }
62
+ return url;
63
+ }
64
+ moduleUrl(url, sourceFile) {
65
+ return url;
66
+ }
67
+ }
68
+ //# sourceMappingURL=FilePacker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilePacker.js","sourceRoot":"","sources":["../../src/pack/FilePacker.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,UAA2B,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAY3B,YACoB,IAAY,EACZ,GAAW,EACX,MAAc;QAFd,SAAI,GAAJ,IAAI,CAAQ;QACZ,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAQ;QATzB,eAAU,GAAG,EAAE,CAAC;QAEhB,gBAAW,GAAG,EAAE,CAAC;QAEjB,gBAAW,GAAG,EAAE,CAAC;QAOtB,QAAQ;QACR,wEAAwE;QACxE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,IAAI;QAEN,uBAAuB;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEnE,yBAAyB;QACzB,MAAM,KAAK,CAAC,cAAc,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;YACpC,OAAO;YACP,cAAc,EAAE,OAAO;SAC1B,CAAC,CAAC;IAGP,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,UAAkB;QAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC;QACf,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,GAAG,CAAC;QACf,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE3B,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,UAAkB;QAIrC,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This class holds a path of single module along
3
+ * with it's own package info
4
+ */
5
+ export default class JSModule {
6
+ constructor(p) {
7
+ // do nothing
8
+ Object.setPrototypeOf(p, JSModule.prototype);
9
+ return p;
10
+ }
11
+ }
12
+ //# sourceMappingURL=JSModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JSModule.js","sourceRoot":"","sources":["../../src/pack/JSModule.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAYzB,YACI,CAAoB;QAEpB,aAAa;QACb,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,CAAQ,CAAC;IACpB,CAAC;CAEJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/pack/pack.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { readFile } from "fs/promises";
2
+ import { join } from "path";
3
+ const resolvedImports = new Map();
4
+ async function populatePackageInfo(root, imports, packageJsonPath) {
5
+ const { name, version, dependencies, type, module: moduleMain, main } = JSON.parse(await readFile(packageJsonPath, "utf-8"));
6
+ if (imports[name]) {
7
+ return;
8
+ }
9
+ /**
10
+ * Dependency must specify module or main, we will not assume it.
11
+ * We want to keep import map small.
12
+ *
13
+ * Otherwise, caller must explicitly specify the fully qualified module path to load
14
+ */
15
+ imports[name] = {
16
+ name,
17
+ version,
18
+ main: moduleMain
19
+ || (type === "module" ? main : void 0)
20
+ || void 0
21
+ };
22
+ for (const key of Object.keys(dependencies)) {
23
+ if (imports[key]) {
24
+ continue;
25
+ }
26
+ await populatePackageInfo(root, imports, join(root, "node_modules", key, "package.json"));
27
+ }
28
+ }
29
+ export default function packageMap(root) {
30
+ let value = resolvedImports.get(root);
31
+ if (value) {
32
+ return value;
33
+ }
34
+ value = (async () => {
35
+ const moduleImports = {};
36
+ await populatePackageInfo(root, moduleImports, join(root, "package.json"));
37
+ return moduleImports;
38
+ })();
39
+ resolvedImports.set(root, value);
40
+ return value;
41
+ }
42
+ //# sourceMappingURL=packageMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageMap.js","sourceRoot":"","sources":["../../src/pack/packageMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgC,CAAC;AAYhE,KAAK,UAAU,mBAAmB,CAAC,IAAI,EAAE,OAAoB,EAAE,eAAe;IAC1E,MAAM,EACF,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,MAAM,EAAE,UAAU,EAClB,IAAI,EACP,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO;IACX,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,IAAI,CAAC,GAAG;QACZ,IAAI;QACJ,OAAO;QACP,IAAI,EAAE,UAAU;eACT,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;eACnC,KAAK,CAAC;KAChB,CAAA;IAED,KAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,SAAS;QACb,CAAC;QACD,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9F,CAAC;AACL,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAG,KAAK,EAAE,CAAC;QACP,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,GAAG,CAAC,KAAK,IAAG,EAAE;QACf,MAAM,aAAa,GAAG,EAAiB,CAAC;QACxC,MAAM,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3E,OAAO,aAAa,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC;IACL,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { transformSync } from "@babel/core";
2
+ import { readFileSync } from "fs";
3
+ import { ProcessOptions } from "../ProcessArgs.js";
4
+ import { parse } from "path";
5
+ import { readFile } from "fs/promises";
6
+ export class Babel {
7
+ static transform({ file, resolve, dynamicResolve }) {
8
+ const presets = Babel.prepareOptions(file, dynamicResolve, resolve);
9
+ const p = { ...presets, filename: file };
10
+ const code = readFileSync(file, "utf8");
11
+ const result = transformSync(code, p);
12
+ return result.code;
13
+ }
14
+ static async transformAsync({ file, resolve, dynamicResolve }) {
15
+ const presets = Babel.prepareOptions(file, dynamicResolve, resolve);
16
+ const p = { ...presets, filename: file };
17
+ const code = await readFile(file, "utf8");
18
+ const result = transformSync(code, p);
19
+ return result.code;
20
+ }
21
+ static prepareOptions(file, dynamicResolve, resolve) {
22
+ const { base: name } = parse(file);
23
+ function CallExpression(node) {
24
+ if (node.node.callee.type !== "Import") {
25
+ return node;
26
+ }
27
+ const sourceFile = node.hub?.file?.inputMap?.sourcemap?.sources?.[0];
28
+ const [arg1] = node.node.arguments;
29
+ if (!arg1) {
30
+ return node;
31
+ }
32
+ if (arg1.type !== "StringLiteral") {
33
+ return node;
34
+ }
35
+ const v = dynamicResolve(arg1.value, sourceFile);
36
+ if (v !== arg1.value) {
37
+ arg1.value = v || arg1.value;
38
+ }
39
+ return node;
40
+ }
41
+ ;
42
+ function ImportExpression(node) {
43
+ const sourceFile = node.hub?.file?.inputMap?.sourcemap?.sources?.[0];
44
+ const { source } = node.node;
45
+ if (source.type !== "StringLiteral") {
46
+ return node;
47
+ }
48
+ const v = dynamicResolve(source.value, sourceFile);
49
+ if (v !== source.value) {
50
+ source.value = v || source.value;
51
+ }
52
+ return node;
53
+ }
54
+ const presets = {
55
+ sourceType: "module",
56
+ sourceMaps: true,
57
+ caller: {
58
+ name,
59
+ supportsDynamicImport: true,
60
+ supportsTopLevelAwait: true,
61
+ },
62
+ compact: false,
63
+ comments: false,
64
+ root: ProcessOptions.cwd,
65
+ getModuleId: () => "v",
66
+ "plugins": [
67
+ [
68
+ function (babel) {
69
+ return {
70
+ name: "Import Transformer",
71
+ visitor: {
72
+ ImportDeclaration(node) {
73
+ const e = node.node;
74
+ let source = e.source?.value;
75
+ if (!source) {
76
+ return node;
77
+ }
78
+ const sourceFile = node.hub?.file?.inputMap?.sourcemap?.sources?.[0];
79
+ source = resolve(source, sourceFile);
80
+ e.source.value = source;
81
+ return node;
82
+ },
83
+ ...(dynamicResolve ? { CallExpression, ImportExpression } : {}),
84
+ }
85
+ };
86
+ }
87
+ ]
88
+ ]
89
+ };
90
+ return presets;
91
+ }
92
+ }
93
+ //# sourceMappingURL=babel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"babel.js","sourceRoot":"","sources":["../../src/parser/babel.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,aAAa,EAAG,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,OAAO,KAAK;IAEd,MAAM,CAAC,SAAS,CAAC,EACb,IAAI,EACJ,OAAO,EACP,cAAc,EAKjB;QAEG,MAAM,OAAO,GAAqB,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAEtF,MAAM,CAAC,GAAG,EAAE,GAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EACxB,IAAI,EACJ,OAAO,EACP,cAAc,EACjB;QACG,MAAM,OAAO,GAAqB,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAEtF,MAAM,CAAC,GAAG,EAAE,GAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC;IAEvB,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,IAAY,EAAE,cAA2D,EAAE,OAAoD;QACzJ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAEnC,SAAS,cAAc,CAAC,IAA8B;YAClD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,UAAU,GAAI,IAAI,CAAC,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;YACjC,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAAA,CAAC;QAEF,SAAS,gBAAgB,CAAC,IAAgC;YACtD,MAAM,UAAU,GAAI,IAAI,CAAC,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAqB;YAC9B,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE;gBACJ,IAAI;gBACJ,qBAAqB,EAAE,IAAI;gBAC3B,qBAAqB,EAAE,IAAI;aAC9B;YACD,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,cAAc,CAAC,GAAG;YACxB,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG;YACtB,SAAS,EAAE;gBACP;oBACI,UAAU,KAAK;wBACX,OAAO;4BACH,IAAI,EAAE,oBAAoB;4BAC1B,OAAO,EAAE;gCACL,iBAAiB,CAAC,IAAiC;oCAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;oCACpB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;oCAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;wCACV,OAAO,IAAI,CAAC;oCAChB,CAAC;oCACD,MAAM,UAAU,GAAI,IAAI,CAAC,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;oCAC9E,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oCACrC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;oCACxB,OAAO,IAAI,CAAC;gCAChB,CAAC;gCACD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAClE;yBACJ,CAAC;oBACN,CAAC;iBACJ;aACJ;SACJ,CAAC;QACF,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
@@ -0,0 +1,60 @@
1
+ import path from "path";
2
+ import { fileArgument, ProcessOptions } from "../ProcessArgs.js";
3
+ import { existsSync } from "fs";
4
+ import sendLocalFile from "./send/sendLocalFile.js";
5
+ import { createProxyMiddleware, fixRequestBody } from "http-proxy-middleware";
6
+ import colors from "colors";
7
+ import sendJSHost from "./send/sendJSHost.js";
8
+ import sendNonJSModule from "./send/sendNonJSModule.js";
9
+ let middleware;
10
+ export default function WebServer(req, res) {
11
+ const pathname = new URL(req.url, "http://a").pathname.substring(1);
12
+ // check if path exists...
13
+ const fullPath = path.resolve(ProcessOptions.cwd, pathname);
14
+ if (existsSync(fullPath)) {
15
+ // server local..
16
+ sendLocalFile(pathname, fullPath, req, res);
17
+ return;
18
+ }
19
+ const css = fullPath.replace(/\.js$/, "");
20
+ if (existsSync(css)) {
21
+ sendNonJSModule(pathname.substring(0, pathname.length - 3), req, res);
22
+ return;
23
+ }
24
+ const js = fullPath.replace(/\.html$/, ".js");
25
+ if (existsSync(js)) {
26
+ sendJSHost(pathname.replace(/\.html$/, ".js"), req, res);
27
+ return;
28
+ }
29
+ // if (!fileArgument) {
30
+ // res.writeHead(404,{});
31
+ // res.end("");
32
+ // return;
33
+ // }
34
+ // proxy...
35
+ middleware ??= createProxyMiddleware({
36
+ target: fileArgument,
37
+ changeOrigin: true,
38
+ ws: true,
39
+ secure: false,
40
+ cookieDomainRewrite: "",
41
+ on: {
42
+ proxyReq: fixRequestBody,
43
+ proxyRes: (proxyReq, req, res) => {
44
+ if (proxyReq.statusCode >= 400) {
45
+ console.error(colors.red(`HTTP STATUS ${proxyReq.statusCode} for ${fileArgument}${req.url}`));
46
+ }
47
+ else if (proxyReq.statusCode >= 300) {
48
+ console.warn(colors.yellow(`HTTP STATUS ${proxyReq.statusCode} for ${fileArgument}${req.url}`));
49
+ }
50
+ let cookie = proxyReq.headers["set-cookie"];
51
+ if (cookie) {
52
+ cookie = cookie.map((s) => s.split(";").filter((c) => c.trim().toLocaleLowerCase() !== "secure").join(";"));
53
+ proxyReq.headers["set-cookie"] = cookie;
54
+ }
55
+ }
56
+ }
57
+ });
58
+ middleware(req, res);
59
+ }
60
+ //# sourceMappingURL=WebServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../../src/serve/WebServer.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,aAAa,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAGxD,IAAI,UAAU,CAAC;AAEf,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,GAAoB,EAAE,GAAmB;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpE,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,iBAAiB;QACjB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO;IACX,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtE,OAAO;IACX,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAC,KAAK,CAAC,CAAC;IAC7C,IAAG,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QAChB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO;IACX,CAAC;IAED,uBAAuB;IACvB,6BAA6B;IAC7B,mBAAmB;IACnB,cAAc;IACd,IAAI;IAEJ,WAAW;IACX,UAAU,KAAK,qBAAqB,CAAC;QACjC,MAAM,EAAE,YAAY;QACpB,YAAY,EAAE,IAAI;QAClB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,KAAK;QACb,mBAAmB,EAAE,EAAE;QACvB,EAAE,EAAE;YACA,QAAQ,EAAE,cAAc;YACxB,QAAQ,EAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC5B,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,UAAU,QAAQ,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClG,CAAC;qBAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CACtB,eAAe,QAAQ,CAAC,UAAU,QAAQ,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC7E,CAAC;gBACD,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBACT,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5G,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;gBAC5C,CAAC;YACT,CAAC;SACJ;KACJ,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { ProcessOptions } from "../../ProcessArgs.js";
3
+ import path, { join } from "path/posix";
4
+ const jsonText = readFileSync(join(ProcessOptions.cwd, "package.json"), "utf-8");
5
+ export const packageInfo = JSON.parse(jsonText);
6
+ const imports = {
7
+ [packageInfo.name + "/"]: "/"
8
+ };
9
+ for (const [key] of Object.entries(packageInfo.dependencies)) {
10
+ const modulePackageJsonFilePath = join(ProcessOptions.cwd, "node_modules", key, "package.json");
11
+ if (!existsSync(modulePackageJsonFilePath)) {
12
+ continue;
13
+ }
14
+ let modulePath = "/node_modules/" + key + "/";
15
+ // read package.json
16
+ const modulePackageJson = JSON.parse(readFileSync(modulePackageJsonFilePath, "utf-8"));
17
+ imports[key] = path.join(modulePath, modulePackageJson.module
18
+ || (modulePackageJson.type === "module"
19
+ ? modulePackageJson.main : "index.js"));
20
+ if (modulePackageJson.esm) {
21
+ modulePath += modulePackageJson.esm + "/";
22
+ }
23
+ imports[key + "/"] = modulePath;
24
+ }
25
+ export const importMap = { imports };
26
+ //# sourceMappingURL=packageInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageInfo.js","sourceRoot":"","sources":["../../../src/serve/send/packageInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEhD,MAAM,OAAO,GAAG;IACZ,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG;CAChC,CAAC;AAEF,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;IAE3D,MAAM,yBAAyB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAG,cAAc,CAAC,CAAC;IACjG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACzC,SAAS;IACb,CAAC;IAED,IAAI,UAAU,GAAG,gBAAgB,GAAG,GAAG,GAAG,GAAG,CAAC;IAE9C,oBAAoB;IACpB,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAG,iBAAiB,CAAC,MAAM;WACvD,CAAC,iBAAiB,CAAC,IAAI,KAAK,QAAQ;YACnC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAEhD,IAAI,iBAAiB,CAAC,GAAG,EAAE,CAAC;QACxB,UAAU,IAAI,iBAAiB,CAAC,GAAG,GAAG,GAAG,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC;AAEpC,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Babel } from "../../parser/babel.js";
2
+ import path, { parse } from "node:path";
3
+ import { existsSync } from "node:fs";
4
+ export default function sendJS(filePath, req, res) {
5
+ const resolve = (url, sourceFile) => {
6
+ if (url.endsWith(".js")) {
7
+ return url;
8
+ }
9
+ if (!sourceFile) {
10
+ sourceFile = filePath;
11
+ }
12
+ if (!url.startsWith(".")) {
13
+ // we need to include .js for every module relative path
14
+ const tokens = url.split("/");
15
+ let packageName = tokens.shift();
16
+ if (packageName.startsWith("@")) {
17
+ packageName += "/" + tokens.shift();
18
+ }
19
+ if (tokens.length) {
20
+ if (!url.endsWith(".js")) {
21
+ return url + ".js";
22
+ }
23
+ }
24
+ return url;
25
+ }
26
+ // is it referenced from source...
27
+ const dir = path.dirname(filePath);
28
+ const absoluteSourcePath = path.resolve(dir, path.dirname(sourceFile));
29
+ const referencedAbsolutePath = path.join(absoluteSourcePath, url);
30
+ if (existsSync(referencedAbsolutePath)) {
31
+ const relative = path.relative(dir, referencedAbsolutePath).replaceAll("\\", "/");
32
+ if (!relative.endsWith(".js")) {
33
+ return relative + ".js";
34
+ }
35
+ return relative;
36
+ }
37
+ return url + ".js";
38
+ };
39
+ let text = Babel.transform({ file: filePath, resolve, dynamicResolve: resolve });
40
+ const { base } = parse(filePath);
41
+ text += `\n//# sourceMappingURL=${base}.map`;
42
+ res.writeHead(200, {
43
+ "content-type": "text/javascript",
44
+ "cache-control": "no-cache"
45
+ });
46
+ res.end(text);
47
+ }
48
+ //# sourceMappingURL=sendJS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendJS.js","sourceRoot":"","sources":["../../../src/serve/send/sendJS.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,QAAgB,EAAE,GAAoB,EAAE,GAAmB;IAEtF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,UAAkB,EAAE,EAAE;QAEhD,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC;QACf,CAAC;QAED,IAAG,CAAC,UAAU,EAAE,CAAC;YACb,UAAU,GAAG,QAAQ,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAEvB,wDAAwD;YACxD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,WAAW,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YACxC,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,GAAG,GAAG,KAAK,CAAC;gBACvB,CAAC;YACL,CAAC;YAED,OAAO,GAAG,CAAC;QACf,CAAC;QAGD,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACxE,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAClF,IAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,QAAQ,GAAG,KAAK,CAAC;YAC5B,CAAC;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC;QAGD,OAAO,GAAG,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC;IAGF,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAC;IAEhF,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjC,IAAI,IAAI,0BAA0B,IAAI,MAAM,CAAC;IAE7C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACf,cAAc,EAAE,iBAAiB;QACjC,eAAe,EAAE,UAAU;KAC9B,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { importMap, packageInfo } from "./packageInfo.js";
2
+ export default function sendJSHost(path, req, res) {
3
+ // generate import maps
4
+ // for dynamic scripts
5
+ // this is to avoid path renaming and support dynamic module loading
6
+ const text = `
7
+ <!DOCTYPE html>
8
+ <html lang="en">
9
+ <head>
10
+ <meta charset="UTF-8" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
12
+ <title>Index of ${path}</title>
13
+ </head>
14
+ <body>
15
+ <script type="importmap">
16
+ ${JSON.stringify(importMap, void 0, 2)}
17
+ </script>
18
+ <script>
19
+ const cs = document.currentScript;
20
+ import("${packageInfo.name}/${path}").then((r) => ESMPack.render(r, cs), (error) => cs.replaceWith(document.createTextNode(error.stack || error)));
21
+ </script>
22
+ </body>
23
+ </html>
24
+ `;
25
+ res.writeHead(200, {
26
+ "content-type": "text/html",
27
+ "cache-control": "no-cache"
28
+ });
29
+ res.end(text);
30
+ }
31
+ //# sourceMappingURL=sendJSHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendJSHost.js","sourceRoot":"","sources":["../../../src/serve/send/sendJSHost.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,IAAY,EAAE,GAAoB,EAAE,GAAmB;IAEtF,uBAAuB;IACvB,sBAAsB;IACtB,oEAAoE;IAEpE,MAAM,IAAI,GAAG;;;;;;sBAMK,IAAI;;;;UAIhB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;;;;kBAI5B,WAAW,CAAC,IAAI,IAAI,IAAI;;;;CAIzC,CAAC;IAEE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACf,cAAc,EAAE,WAAW;QAC3B,eAAe,EAAE,UAAU;KAC9B,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { readdirSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ export default function sendList(reqPath, path, req, res) {
4
+ const entries = readdirSync(path, { withFileTypes: true })
5
+ .filter((d) => !d.name.startsWith(".") && d.name !== "node_modules")
6
+ .map((d) => {
7
+ const fullPath = join(d.parentPath, d.name);
8
+ let size = 0, mtime = new Date();
9
+ try {
10
+ const s = statSync(fullPath);
11
+ size = s.size;
12
+ mtime = s.mtime;
13
+ }
14
+ catch { }
15
+ return { name: d.name, isDir: d.isDirectory(), size, mtime };
16
+ })
17
+ .sort((a, b) => {
18
+ if (a.isDir !== b.isDir)
19
+ return a.isDir ? -1 : 1;
20
+ return a.name.localeCompare(b.name);
21
+ });
22
+ const text = renderDirectoryListing(reqPath, entries);
23
+ res.writeHead(200, {
24
+ "Content-Type": "text/html",
25
+ "cache-control": "no-cache"
26
+ });
27
+ res.end(text);
28
+ }
29
+ function formatSize(bytes) {
30
+ if (bytes === 0)
31
+ return "0 B";
32
+ const units = ["B", "KB", "MB", "GB"];
33
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
34
+ return `${(bytes / Math.pow(1024, i)).toFixed(i === 0 ? 0 : 1)} ${units[i]}`;
35
+ }
36
+ function renderDirectoryListing(reqPath, entries) {
37
+ const isRoot = reqPath === "/";
38
+ const rows = entries
39
+ .map((e) => {
40
+ let href = reqPath.replace(/\/$/, "") + "/" + encodeURIComponent(e.name) + (e.isDir ? "/" : "");
41
+ const icon = e.isDir ? "📁" : (/\.(js|html)$/i.test(e.name) ? "🌐" : "📄");
42
+ const size = e.isDir ? "—" : formatSize(e.size);
43
+ const modified = e.mtime.toISOString().replace("T", " ").slice(0, 19);
44
+ if (e.name.endsWith(".js")) {
45
+ href = href.replace(/\.js$/, ".html");
46
+ }
47
+ return `<tr>
48
+ <td>${icon} <a href="${href.startsWith("/") ? href : "/" + href}">${e.name}${e.isDir ? "/" : ""}</a></td>
49
+ <td>${size}</td>
50
+ <td>${modified}</td>
51
+ </tr>`;
52
+ })
53
+ .join("\n");
54
+ const parentRow = isRoot
55
+ ? ""
56
+ : `<tr><td>⬆️ <a href="../">../</a></td><td>—</td><td>—</td></tr>`;
57
+ return `<!DOCTYPE html>
58
+ <html lang="en">
59
+ <head>
60
+ <meta charset="UTF-8" />
61
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
62
+ <title>Index of ${reqPath}</title>
63
+ <style>
64
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
65
+ body { font-family: ui-monospace, 'Cascadia Code', monospace; background: #0f1117; color: #e2e8f0; min-height: 100vh; padding: 2rem; }
66
+ h1 { font-size: 1.25rem; color: #7dd3fc; margin-bottom: 1.5rem; border-bottom: 1px solid #1e293b; padding-bottom: .75rem; }
67
+ table { width: 100%; border-collapse: collapse; }
68
+ th { text-align: left; padding: .5rem .75rem; color: #94a3b8; font-weight: 600; font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; border-bottom: 1px solid #1e293b; }
69
+ td { padding: .45rem .75rem; font-size: .9rem; border-bottom: 1px solid #0d1520; }
70
+ td:nth-child(2), td:nth-child(3) { color: #64748b; font-size: .8rem; white-space: nowrap; }
71
+ tr:hover td { background: #1e293b; }
72
+ a { color: #7dd3fc; text-decoration: none; }
73
+ a:hover { color: #bae6fd; text-decoration: underline; }
74
+ footer { margin-top: 2rem; color: #334155; font-size: .75rem; }
75
+ </style>
76
+ </head>
77
+ <body>
78
+ <h1>📂 Index of ${reqPath}</h1>
79
+ <table>
80
+ <thead><tr><th>Name</th><th>Size</th><th>Modified</th></tr></thead>
81
+ <tbody>
82
+ ${parentRow}
83
+ ${rows}
84
+ </tbody>
85
+ </table>
86
+ </body>
87
+ </html>`;
88
+ }
89
+ //# sourceMappingURL=sendList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendList.js","sourceRoot":"","sources":["../../../src/serve/send/sendList.ts"],"names":[],"mappings":"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"}