@zipadee/javascript 0.0.17 → 0.0.18

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 CHANGED
@@ -29,7 +29,17 @@ app.listen();
29
29
 
30
30
  ## Options
31
31
 
32
- - `base`: The directory that paths are resolved against to find on disk. This directory is typically where first-party JavaScript files are located. Must be a subpath of `root`. Defaults to the value of `root`.
33
- - `root`: The root directory that files are restricted to. Import specifiers can resolve to a path outside of `base` (this is common with npm dependencies, and monorepos), but they are disallowed to be served from outside of `root`. Defaults to the current working directory.
34
- - `rootPathPrefix`: Imports that resolve to outside of the base directory are prefixed with the `rootPathPrefix` in order to resolve them against the `root` directory instead of the `base` directory. Defaults to `'/__root__'`.
35
- - `extensions`: Array of file extensions to serve. Defaults to `['.js', '.mjs']`. Files not matching these extensions will not be handled by this middleware. They can be served by other downstream middleware.
32
+ - `base`: The directory that paths are resolved against to find on disk. This
33
+ directory is typically where first-party JavaScript files are located. Must be
34
+ a subpath of `root`. Defaults to the value of `root`.
35
+ - `root`: The root directory that files are restricted to. Import specifiers can
36
+ resolve to a path outside of `base` (this is common with npm dependencies, and
37
+ monorepos), but they are disallowed to be served from outside of `root`.
38
+ Defaults to the current working directory.
39
+ - `rootPathPrefix`: Imports that resolve to outside of the base directory are
40
+ prefixed with the `rootPathPrefix` in order to resolve them against the `root`
41
+ directory instead of the `base` directory. Defaults to `'/__root__'`.
42
+ - `extensions`: Array of file extensions to serve. Defaults to `['.js',
43
+ '.mjs']`. Files not matching these extensions will not be handled by this
44
+ middleware. They can be served by other downstream middleware.
45
+ - `conditions`: Array of import conditions to support. Defaults to `['browser', 'import']`.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/lib/attributes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Parses import attributes from a source string.
3
+ *
4
+ * Import attributes are similar to JSON or an object literal. They're a
5
+ * key-value object, where the keys do not need to be quoted, and the values
6
+ * must be quoted strings. Key-value pairs are separated by commas, and
7
+ * whitespace is ignored.
8
+ *
9
+ * @param source - The source string containing just the import attributes.
10
+ *
11
+ * @internal
12
+ */
13
+ export const parseImportAttributes = (expr) => new Parser(expr).parse();
14
+ const isWhitespace = (ch) =>
15
+ ch === 9 /* \t */ ||
16
+ ch === 10 /* \n */ ||
17
+ ch === 13 /* \r */ ||
18
+ ch === 32; /* space */
19
+ // TODO(justinfagnani): allow code points > 127
20
+ const isIdentStart = (ch) =>
21
+ ch === 95 /* _ */ ||
22
+ ch === 36 /* $ */ ||
23
+ // ch &= ~32 puts ch into the range [65,90] [A-Z] only if ch was already in
24
+ // the that range or in the range [97,122] [a-z]. We must mutate ch only after
25
+ // checking other characters, thus the comma operator.
26
+ ((ch &= ~32), 65 /* A */ <= ch && ch <= 90); /* Z */
27
+ // TODO(justinfagnani): allow code points > 127
28
+ const isIdentifier = (ch) => isIdentStart(ch);
29
+ const isQuote = (ch) => ch === 34 /* " */ || ch === 39; /* ' */
30
+ const escapeString = (str) =>
31
+ str.replace(/\\(.)/g, (_match, group) => {
32
+ switch (group) {
33
+ case 'n':
34
+ return '\n';
35
+ case 'r':
36
+ return '\r';
37
+ case 't':
38
+ return '\t';
39
+ case 'b':
40
+ return '\b';
41
+ case 'f':
42
+ return '\f';
43
+ default:
44
+ return group;
45
+ }
46
+ });
47
+ class Parser {
48
+ #input;
49
+ #index = -1;
50
+ #tokenStart = 0;
51
+ #next;
52
+ constructor(input) {
53
+ this.#input = input;
54
+ this.#advance();
55
+ }
56
+ parse() {
57
+ this.#parseMapStart();
58
+ const entries = new Map();
59
+ do {
60
+ this.#advanceWhitespace();
61
+ if (this.#next === 125 /* } */) {
62
+ break; // end of map
63
+ }
64
+ const key = this.#parseKey();
65
+ this.#parseColon();
66
+ const value = this.#parseString();
67
+ entries.set(key, value);
68
+ } while (this.#parseCommaOrMapEnd());
69
+ return entries;
70
+ }
71
+ #advance(resetTokenStart) {
72
+ this.#index++;
73
+ if (this.#index < this.#input.length) {
74
+ this.#next = this.#input.charCodeAt(this.#index);
75
+ if (resetTokenStart === true) {
76
+ this.#tokenStart = this.#index;
77
+ }
78
+ } else {
79
+ this.#next = undefined;
80
+ }
81
+ }
82
+ #advanceWhitespace() {
83
+ const l = this.#input.length;
84
+ let index = this.#index;
85
+ let char = this.#next;
86
+ while (index < l && isWhitespace(char)) {
87
+ char = this.#input.charCodeAt(++index);
88
+ }
89
+ this.#tokenStart = this.#index = index;
90
+ this.#next = char;
91
+ }
92
+ #getValue() {
93
+ const v = this.#input.substring(this.#tokenStart, this.#index);
94
+ this.#tokenStart = this.#index;
95
+ return v;
96
+ }
97
+ #parseColon() {
98
+ this.#advanceWhitespace();
99
+ if (this.#next === 58 /* : */) {
100
+ this.#advance();
101
+ } else {
102
+ throw new Error(`Expected :, got ${this.#next}`);
103
+ }
104
+ }
105
+ #parseString() {
106
+ this.#advanceWhitespace();
107
+ const quoteChar = this.#next;
108
+ this.#advance(true);
109
+ while (this.#next !== quoteChar) {
110
+ if (this.#next === undefined) {
111
+ throw new Error('unterminated string');
112
+ }
113
+ // @ts-ignore
114
+ if (this.#next === 92 /* \ */) {
115
+ this.#advance();
116
+ if (this.#next === undefined) {
117
+ throw new Error('unterminated string');
118
+ }
119
+ }
120
+ this.#advance();
121
+ }
122
+ const value = escapeString(this.#getValue());
123
+ this.#advance();
124
+ return value;
125
+ }
126
+ #parseKey() {
127
+ this.#advanceWhitespace();
128
+ if (isQuote(this.#next)) {
129
+ return this.#parseString();
130
+ } else if (isIdentStart(this.#next)) {
131
+ do {
132
+ this.#advance();
133
+ } while (isIdentifier(this.#next));
134
+ return this.#getValue();
135
+ } else {
136
+ throw new Error(`expected string or identifier, got ${this.#next}`);
137
+ }
138
+ }
139
+ #parseMapStart() {
140
+ this.#advanceWhitespace();
141
+ if (this.#next === 123 /* { */) {
142
+ this.#advance(true);
143
+ } else {
144
+ throw new Error(`expected {, got ${this.#next}`);
145
+ }
146
+ }
147
+ #parseCommaOrMapEnd() {
148
+ this.#advanceWhitespace();
149
+ if (this.#next === 125 /* } */) {
150
+ this.#advance();
151
+ return false;
152
+ }
153
+ if (this.#next === 44 /* , */) {
154
+ this.#advance();
155
+ return true;
156
+ }
157
+ throw new Error(`expected }, got ${this.#next}`);
158
+ }
159
+ }
160
+ //# sourceMappingURL=attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../src/lib/attributes.ts"],"names":[],"mappings":"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"}
package/lib/serve.d.ts CHANGED
@@ -25,6 +25,11 @@ export interface Options {
25
25
  * Array of import conditions to support. Defaults to `['browser', 'import']`.
26
26
  */
27
27
  conditions?: Array<string>;
28
+ /**
29
+ * If true, will transform CSS modules and imports with the `type: 'css'`
30
+ * attribute.
31
+ */
32
+ cssModules?: boolean;
28
33
  }
29
34
  /**
30
35
  * Serve static JavaScript files from a `root` directory.
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/lib/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AAmBzD,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAYD;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,OAAO,KAAG,UA0JrC,CAAC"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/lib/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AAmBzD,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAYD;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,OAAO,KAAG,UAkOrC,CAAC"}
package/lib/serve.js CHANGED
@@ -1,13 +1,18 @@
1
- import { HttpError } from '@zipadee/core';
2
- import { decodePath, pathIsHidden, resolvePath, stat, } from '@zipadee/static/lib/utils.js';
3
- import { send } from '@zipadee/static';
4
- import fs from 'node:fs/promises';
5
- import path from 'node:path';
6
- import { parse, init } from 'es-module-lexer';
7
- // import {moduleResolve, type ErrnoException} from 'import-meta-resolve';
1
+ import {HttpError} from '@zipadee/core';
2
+ import {send} from '@zipadee/static';
3
+ import {
4
+ decodePath,
5
+ pathIsHidden,
6
+ resolvePath,
7
+ stat,
8
+ } from '@zipadee/static/lib/utils.js';
8
9
  import resolve from 'enhanced-resolve';
10
+ import {init, parse} from 'es-module-lexer';
9
11
  import baseFS from 'fs';
10
- const { CachedInputFileSystem, ResolverFactory } = resolve;
12
+ import fs from 'node:fs/promises';
13
+ import path from 'node:path';
14
+ import {parseImportAttributes} from './attributes.js';
15
+ const {CachedInputFileSystem, ResolverFactory} = resolve;
11
16
  await init;
12
17
  // TODO:
13
18
  // - Add caching for both specifier resolution and files
@@ -22,119 +27,202 @@ await init;
22
27
  * Serve static JavaScript files from a `root` directory.
23
28
  */
24
29
  export const serve = (opts) => {
25
- const root = opts.root === undefined ? process.cwd() : path.resolve(opts.root);
26
- const base = opts.base === undefined ? root : resolvePath(root, opts.base);
27
- const rootPathPrefix = opts.rootPathPrefix ?? '/__root__';
28
- const extensions = opts.extensions ?? ['.js', '.mjs'];
29
- const conditionsArray = opts.conditions ?? ['browser', 'import'];
30
- // const conditions = new Set(conditionsArray);
31
- const resolver = ResolverFactory.createResolver({
32
- fileSystem: new CachedInputFileSystem(baseFS, 4000),
33
- roots: [root, base],
34
- extensions: ['.js', '.json'],
35
- conditionNames: conditionsArray,
36
- mainFields: ['module', 'browser', 'main'],
37
- });
38
- return async (req, res, next) => {
39
- if (!(req.method === 'HEAD' || req.method === 'GET')) {
40
- // TODO: implement HEAD?
41
- return await next();
30
+ const root =
31
+ opts.root === undefined ? process.cwd() : path.resolve(opts.root);
32
+ const base = opts.base === undefined ? root : resolvePath(root, opts.base);
33
+ const {
34
+ rootPathPrefix = '/__root__',
35
+ extensions = ['.js', '.mjs'],
36
+ conditions = ['browser', 'import'],
37
+ cssModules = false,
38
+ } = opts;
39
+ const resolver = ResolverFactory.createResolver({
40
+ fileSystem: new CachedInputFileSystem(baseFS, 4000),
41
+ roots: [root, base],
42
+ extensions: ['.js', '.json'],
43
+ conditionNames: conditions,
44
+ mainFields: ['module', 'browser', 'main'],
45
+ });
46
+ return async (req, res, next) => {
47
+ if (!(req.method === 'HEAD' || req.method === 'GET')) {
48
+ // TODO: implement HEAD?
49
+ return await next();
50
+ }
51
+ let filePath = decodePath(req.path);
52
+ const parsedPath = path.parse(filePath);
53
+ const isCssModule = req.url.searchParams.get('type') === 'css-module';
54
+ const transform = isCssModule || extensions.includes(parsedPath.ext);
55
+ if (filePath.startsWith(rootPathPrefix)) {
56
+ filePath = filePath.substring(rootPathPrefix.length);
57
+ filePath = filePath.slice(parsedPath.root.length);
58
+ filePath = resolvePath(root, filePath);
59
+ } else {
60
+ filePath = filePath.slice(parsedPath.root.length);
61
+ filePath = resolvePath(base, filePath);
62
+ }
63
+ if (pathIsHidden(root, filePath)) {
64
+ return await next();
65
+ }
66
+ const stats = await stat(filePath);
67
+ if (stats.isDirectory()) {
68
+ return await next();
69
+ }
70
+ if (!transform) {
71
+ const relativePath = path.relative(root, filePath);
72
+ await send(req, res, relativePath, {root});
73
+ return;
74
+ }
75
+ if (isCssModule) {
76
+ const source = await fs.readFile(filePath, 'utf8');
77
+ res.type = 'text/javascript';
78
+ res.body = `const styleSheet = new CSSStyleSheet();
79
+ styleSheet.replaceSync(\`${source.replace(/`/g, '\\`')}\`);
80
+ export default styleSheet;
81
+ `;
82
+ return;
83
+ }
84
+ // Derive the mount prefix by removing the request path which mount() sets
85
+ // from the URL path.
86
+ const mountPrefix = req.url.pathname.substring(
87
+ 0,
88
+ req.url.pathname.length - req.path.length,
89
+ );
90
+ const source = await fs.readFile(filePath, 'utf8');
91
+ const [imports, _exports, _facade, _hasModuleSyntax] = parse(
92
+ source,
93
+ filePath,
94
+ );
95
+ let output = '';
96
+ let lastIndex = 0;
97
+ for (const impt of imports) {
98
+ const {
99
+ t: type,
100
+ s: start,
101
+ e: specifierEnd,
102
+ n: unescaped,
103
+ a: assert,
104
+ se: importEnd,
105
+ } = impt;
106
+ if (type === 1) {
107
+ // Static import
108
+ let importSpecifier =
109
+ unescaped ?? source.substring(start, specifierEnd);
110
+ let resolve = false;
111
+ let cssImportTransform = false;
112
+ let relativeImport = false;
113
+ let absoluteImport = false;
114
+ // If the specifier is relative or absolute, and has an extension,
115
+ // we don't need to resolve it
116
+ if (
117
+ importSpecifier.startsWith('.') ||
118
+ importSpecifier.startsWith('/')
119
+ ) {
120
+ if (path.extname(importSpecifier) === '') {
121
+ // If we don't have an extension, we need to resolve it, but fix the
122
+ // resolved path to be relative to the current file
123
+ relativeImport = importSpecifier.startsWith('.');
124
+ absoluteImport = importSpecifier.startsWith('/');
125
+ resolve = true;
126
+ }
127
+ } else {
128
+ // If the import is not relative or absolute, we need to resolve it
129
+ // using the resolver
130
+ resolve = true;
42
131
  }
43
- let filePath = decodePath(req.path);
44
- const mountedPath = req.url.pathname.substring(0, req.url.pathname.length - filePath.length);
45
- const parsedPath = path.parse(filePath);
46
- const transform = extensions.includes(parsedPath.ext);
47
- if (filePath.startsWith(rootPathPrefix)) {
48
- filePath = filePath.substring(rootPathPrefix.length);
49
- filePath = filePath.slice(parsedPath.root.length);
50
- filePath = resolvePath(root, filePath);
132
+ const hasAttributes = assert !== -1;
133
+ let attributes;
134
+ if (cssModules && hasAttributes) {
135
+ const attributesSource = source.slice(assert, importEnd);
136
+ attributes = parseImportAttributes(attributesSource);
137
+ if (attributes.get('type') === 'css') {
138
+ cssImportTransform = true;
139
+ }
51
140
  }
52
- else {
53
- filePath = filePath.slice(parsedPath.root.length);
54
- filePath = resolvePath(base, filePath);
141
+ if (!resolve && !cssImportTransform) {
142
+ output += `${source.substring(lastIndex, start)}${importSpecifier}`;
143
+ lastIndex = specifierEnd;
144
+ continue;
55
145
  }
56
- if (pathIsHidden(root, filePath)) {
57
- return await next();
146
+ const fileURL = new URL(filePath, 'file://');
147
+ if (absoluteImport) {
148
+ // If the import is absolute, we need to resolve it relative to the
149
+ // base path
150
+ importSpecifier = path.join(base, importSpecifier);
58
151
  }
59
- const stats = await stat(filePath);
60
- if (stats.isDirectory()) {
61
- return await next();
152
+ const resolveFromPath = path.dirname(filePath);
153
+ const resolvedImportURL = await new Promise((res, rej) => {
154
+ resolver.resolve(
155
+ {},
156
+ resolveFromPath,
157
+ importSpecifier,
158
+ {},
159
+ (err, result) => {
160
+ if (err) {
161
+ rej(err);
162
+ } else if (result === undefined || result === false) {
163
+ rej(new Error('Could not resolve import'));
164
+ } else {
165
+ res(new URL(result, fileURL));
166
+ }
167
+ },
168
+ );
169
+ });
170
+ const resolvedImportPath = resolvedImportURL.pathname;
171
+ if (!resolvedImportPath.startsWith(root)) {
172
+ throw new HttpError(
173
+ 500,
174
+ undefined,
175
+ `Attempted to resolve import outside of root:\n root: ${root}\n resolved: ${resolvedImportPath}`,
176
+ );
62
177
  }
63
- if (!transform) {
64
- const relativePath = path.relative(root, filePath);
65
- await send(req, res, relativePath, { root });
66
- return;
178
+ let resolvedImport;
179
+ if (relativeImport) {
180
+ // For relative imports, we resolve the path relative to the current
181
+ // file. This keeps the rewritten import as similar as possible to the
182
+ // original import. Most likely in this case we're just adding a file
183
+ // extension.
184
+ resolvedImport = path.relative(
185
+ path.dirname(filePath),
186
+ resolvedImportPath,
187
+ );
188
+ if (!resolvedImport.startsWith('.')) {
189
+ resolvedImport = './' + resolvedImport;
190
+ }
191
+ } else if (resolvedImportPath.startsWith(base)) {
192
+ // Imports within the base path are rewritten to be relative to the
193
+ // mounted path.
194
+ resolvedImport = resolvedImportPath.substring(base.length);
195
+ } else {
196
+ resolvedImport = path.join(
197
+ mountPrefix,
198
+ rootPathPrefix,
199
+ resolvedImportPath.substring(root.length),
200
+ );
67
201
  }
68
- const source = await fs.readFile(filePath, 'utf8');
69
- const [imports, _exports, _facade, _hasModuleSyntax] = parse(source, filePath);
70
- let output = '';
71
- let lastIndex = 0;
72
- for (const impt of imports) {
73
- const { t: type, s: start, e: end, n: unescaped } = impt;
74
- if (type === 1) {
75
- // Static import
76
- let importSpecifier = unescaped || source.substring(start, end);
77
- let relativeImport = false;
78
- let absoluteImport = false;
79
- // If the specifier is relative or absolute, and has an extension,
80
- // we don't need to resolve it
81
- if (importSpecifier.startsWith('.') ||
82
- importSpecifier.startsWith('/')) {
83
- if (path.extname(importSpecifier) === '') {
84
- // If we don't have an extension, we need to resolve it, but fix the
85
- // resolved path to be relative to the current file
86
- relativeImport = importSpecifier.startsWith('.');
87
- absoluteImport = importSpecifier.startsWith('/');
88
- }
89
- else {
90
- output += `${source.substring(lastIndex, start)}${importSpecifier}`;
91
- lastIndex = end;
92
- continue;
93
- }
94
- }
95
- const fileURL = new URL(filePath, 'file://');
96
- if (absoluteImport) {
97
- // If the import is absolute, we need to resolve it relative to the
98
- // base path
99
- importSpecifier = path.join(base, importSpecifier);
100
- }
101
- const resolveFromPath = path.dirname(filePath);
102
- const resolvedImportURL = await new Promise((res, rej) => {
103
- resolver.resolve({}, resolveFromPath, importSpecifier, {}, (err, result) => {
104
- if (err) {
105
- rej(err);
106
- }
107
- else if (result === undefined || result === false) {
108
- rej(new Error('Could not resolve import'));
109
- }
110
- else {
111
- res(new URL(result, fileURL));
112
- }
113
- });
114
- });
115
- const resolvedImportPath = resolvedImportURL.pathname;
116
- if (!resolvedImportPath.startsWith(root)) {
117
- throw new HttpError(500, undefined, `Attempted to resolve import outside of root:\n root: ${root}\n resolved: ${resolvedImportPath}`);
118
- }
119
- let resolvedimport;
120
- if (relativeImport) {
121
- resolvedimport = path.relative(path.dirname(filePath), resolvedImportPath);
122
- if (!resolvedimport.startsWith('.')) {
123
- resolvedimport = './' + resolvedimport;
124
- }
125
- }
126
- else if (resolvedImportPath.startsWith(base)) {
127
- resolvedimport = resolvedImportPath.substring(base.length);
128
- }
129
- else {
130
- resolvedimport = path.join(mountedPath, rootPathPrefix, resolvedImportPath.substring(root.length));
131
- }
132
- output += `${source.substring(lastIndex, start)}${resolvedimport}`;
133
- lastIndex = end;
134
- }
202
+ if (cssImportTransform) {
203
+ attributes?.delete('type');
204
+ let attributesSource = '';
205
+ if (attributes?.size) {
206
+ const attrs = Array.from(attributes.entries())
207
+ .map(([key, value]) => `${key}: '${value}'`)
208
+ .join(', ');
209
+ attributesSource = ` with {${attrs}}`;
210
+ }
211
+ output +=
212
+ source.substring(lastIndex, start) +
213
+ resolvedImport +
214
+ '?type=css-module' +
215
+ source.substring(specifierEnd, specifierEnd + 1) +
216
+ attributesSource;
217
+ lastIndex = importEnd;
218
+ } else {
219
+ output += source.substring(lastIndex, start) + resolvedImport;
220
+ lastIndex = specifierEnd;
135
221
  }
136
- res.type = 'text/javascript';
137
- res.body = output + source.substring(lastIndex);
138
- };
222
+ }
223
+ }
224
+ res.type = 'text/javascript';
225
+ res.body = output + source.substring(lastIndex);
226
+ };
139
227
  };
140
- //# sourceMappingURL=serve.js.map
228
+ //# sourceMappingURL=serve.js.map
package/lib/serve.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/lib/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/lib/serve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zipadee/javascript",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -23,7 +23,7 @@
23
23
  ],
24
24
  "devDependencies": {
25
25
  "@types/es-module-lexer": "^0.4.3",
26
- "@types/node": "^20.14.10",
26
+ "@types/node": "^22.15.17",
27
27
  "@types/supertest": "^6.0.2",
28
28
  "supertest": "^7.0.0"
29
29
  },
@@ -59,6 +59,7 @@
59
59
  "dependencies": {
60
60
  "@zipadee/core": "^0.0.17",
61
61
  "@zipadee/static": "^0.0.17",
62
+ "dedent": "^1.6.0",
62
63
  "enhanced-resolve": "^5.17.1",
63
64
  "es-module-lexer": "^1.5.4"
64
65
  }