dx-server 0.7.1 → 0.8.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 CHANGED
@@ -48,7 +48,7 @@ import {fileURLToPath} from 'node:url'
48
48
 
49
49
  new Server().on('request', (req, res) => chain(
50
50
  dxServer(req, res),
51
- chainStatic('/', {root: resolve(dirname(fileURLToPath(import.meta.url)), 'public')}),
51
+ chainStatic('/*', {root: resolve(dirname(fileURLToPath(import.meta.url)), 'public')}),
52
52
  () => setHtml('not found', {status: 404}),
53
53
  )()
54
54
  ).listen(3000, () => console.log('server is listening at 3000'))
@@ -281,7 +281,12 @@ import {resolve, dirname} from 'node:path'
281
281
  import {fileURLToPath} from 'node:url'
282
282
 
283
283
  chain(
284
- chainStatic('/assets', {root: resolve(dirname(fileURLToPath(import.meta.url)), 'public')})
284
+ chainStatic('/assets/*', {
285
+ root: resolve(dirname(fileURLToPath(import.meta.url)), 'public'),
286
+ getPathname(matched) {
287
+ return new URL(getReq().url, 'http://localhost').pathname.slice('/assets'.length)
288
+ },
289
+ }),
285
290
  )
286
291
  ```
287
292
 
package/cjs/dx.js CHANGED
@@ -7,14 +7,7 @@ function makeDxContext(maker) {
7
7
  const promiseSymbol = Symbol('promise');
8
8
  const valueSymbol = Symbol('value');
9
9
  // wrap in an async function to ensure the maker is called only once
10
- const context = (...params) => getReq()[promiseSymbol] ??= (async () => {
11
- try {
12
- return getReq()[valueSymbol] = await maker(...params);
13
- }
14
- catch (e) {
15
- throw e;
16
- }
17
- })();
10
+ const context = (...params) => getReq()[promiseSymbol] ??= (async () => getReq()[valueSymbol] = await maker(...params))();
18
11
  Object.defineProperty(context, 'value', {
19
12
  get() { return getReq()[valueSymbol]; },
20
13
  set(value) {
@@ -130,4 +123,4 @@ exports.setRedirect = setRedirect;
130
123
  // https://github.com/jshttp/content-disposition/blob/1037e24e4790273da96645ad250061f39e77968c/index.js#L186
131
124
  // because in most applications, users can specify a simple filename which usually doesn't need to be validated.
132
125
  // we leave setDownload() implementation for users, for now.
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdURBQWtEO0FBQ2xELGlEQUF1RDtBQXVCdkQsU0FBZ0IsYUFBYSxDQUszQixLQUErQjtJQUNoQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25DLG9FQUFvRTtJQUNwRSxNQUFNLE9BQU8sR0FBZ0MsQ0FBQyxHQUFHLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtRQUMzRyxJQUFJLENBQUM7WUFDSixPQUFPLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUE7UUFDdEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsQ0FBQTtRQUNSLENBQUM7SUFDRixDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ0osTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO1FBQ3ZDLEdBQUcsS0FBSSxPQUFPLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFBLENBQUEsQ0FBQztRQUNwQyxHQUFHLENBQUMsS0FBSztZQUNSLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDaEQsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQzlCLENBQUM7S0FDRCxDQUFDLENBQUE7SUFDRixPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUMzQyxNQUFN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
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdURBQWtEO0FBQ2xELGlEQUF1RDtBQXVCdkQsU0FBZ0IsYUFBYSxDQUszQixLQUErQjtJQUNoQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25DLG9FQUFvRTtJQUNwRSxNQUFNLE9BQU8sR0FBZ0MsQ0FBQyxHQUFHLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzlKLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtRQUN2QyxHQUFHLEtBQUksT0FBTyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFBLENBQUM7UUFDcEMsR0FBRyxDQUFDLEtBQUs7WUFDUixNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2hELE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUM5QixDQUFDO0tBQ0QsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDM0MsTUFBTSxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQTtRQUN4QixPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0lBQ0QsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFD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
@@ -0,0 +1,43 @@
1
+ import { Chainable } from './dx.js';
2
+ import 'urlpattern-polyfill';
3
+ interface URLPatternOptions {
4
+ }
5
+ interface RouteContext {
6
+ matched: URLPatternResult;
7
+ next(): any;
8
+ }
9
+ interface Route {
10
+ (context: RouteContext): any;
11
+ }
12
+ interface Routes {
13
+ [k: string]: Route;
14
+ }
15
+ interface RouterOptions extends URLPatternOptions {
16
+ prefix?: string;
17
+ }
18
+ type Router = {
19
+ patch(routes: Routes, options?: RouterOptions): Chainable;
20
+ patch(pattern: string, route: Route, options?: RouterOptions): Chainable;
21
+ trace(routes: Routes, options?: RouterOptions): Chainable;
22
+ trace(pattern: string, route: Route, options?: RouterOptions): Chainable;
23
+ options(routes: Routes, options?: RouterOptions): Chainable;
24
+ options(pattern: string, route: Route, options?: RouterOptions): Chainable;
25
+ connect(routes: Routes, options?: RouterOptions): Chainable;
26
+ connect(pattern: string, route: Route, options?: RouterOptions): Chainable;
27
+ delete(routes: Routes, options?: RouterOptions): Chainable;
28
+ delete(pattern: string, route: Route, options?: RouterOptions): Chainable;
29
+ put(routes: Routes, options?: RouterOptions): Chainable;
30
+ put(pattern: string, route: Route, options?: RouterOptions): Chainable;
31
+ post(routes: Routes, options?: RouterOptions): Chainable;
32
+ post(pattern: string, route: Route, options?: RouterOptions): Chainable;
33
+ head(routes: Routes, options?: RouterOptions): Chainable;
34
+ head(pattern: string, route: Route, options?: RouterOptions): Chainable;
35
+ get(routes: Routes, options?: RouterOptions): Chainable;
36
+ get(pattern: string, route: Route, options?: RouterOptions): Chainable;
37
+ all(routes: Routes, options?: RouterOptions): Chainable;
38
+ all(pattern: string, route: Route, options?: RouterOptions): Chainable;
39
+ method(method: string, routes: Routes, options?: RouterOptions): Chainable;
40
+ method(method: string, pattern: string, route: Route, options?: RouterOptions): Chainable;
41
+ };
42
+ export declare const router: Router;
43
+ export {};
package/cjs/router.js CHANGED
@@ -1,23 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.router = exports.matchPattern = void 0;
3
+ exports.router = void 0;
4
4
  const dx_js_1 = require("./dx.js");
5
5
  require("urlpattern-polyfill");
6
6
  const bodyHelpers_js_1 = require("./bodyHelpers.js");
7
- // '' matches nothing
8
- // '/' matches both https://example.com and https://example.com/
9
- // '/foo' matches https://example.com/foo but not https://example.com/foo/
10
- // '/foo/' matches https://example.com/foo/ but not https://example.com/foo
11
- function matchPattern(pathname, pattern) {
12
- const matched = new URLPattern({ pathname: pattern }).exec({ pathname });
13
- if (!matched)
14
- return;
15
- return {
16
- matched,
17
- params: matched.pathname.groups
18
- };
19
- }
20
- exports.matchPattern = matchPattern;
21
7
  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
22
8
  const allMethods = [
23
9
  'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
@@ -29,12 +15,13 @@ routes, { prefix = '', ...options } = {}) {
29
15
  if (method !== undefined && req.method !== method.toUpperCase())
30
16
  return next();
31
17
  for (const [pattern, handler] of routes) {
32
- const match = matchPattern((0, bodyHelpers_js_1.urlFromReq)(req).pathname, `${prefix}${pattern}`, options);
33
- if (match)
34
- return handler({
35
- ...match,
36
- next,
37
- });
18
+ // '' matches nothing
19
+ // '/' matches both https://example.com and https://example.com/
20
+ // '/foo' matches https://example.com/foo but not https://example.com/foo/
21
+ // '/foo/' matches https://example.com/foo/ but not https://example.com/foo
22
+ const matched = new URLPattern({ pathname: `${prefix}${pattern}` }).exec({ pathname: (0, bodyHelpers_js_1.urlFromReq)(req).pathname });
23
+ if (matched)
24
+ return handler({ matched, next });
38
25
  }
39
26
  return next();
40
27
  };
@@ -53,4 +40,4 @@ exports.router = {
53
40
  };
54
41
  for (const method of allMethods)
55
42
  exports.router[method] = exports.router.method.bind(exports.router, method);
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBeUM7QUFFekMsK0JBQTRCO0FBQzVCLHFEQUEyQztBQU8zQyxxQkFBcUI7QUFDckIsZ0VBQWdFO0FBQ2hFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsU0FBZ0IsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlO0lBR2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBWkQsb0NBWUM7QUFjRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLEdBQUc7SUFDbEIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPO0NBQ3JFLENBQUE7QUErQlYsU0FBUyxVQUFVLENBQ2xCLE1BQTBCLEVBQUUsNkJBQTZCO0FBQ3pELE1BQXlDLEVBQ3pDLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtJQUU3QyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDcEYsSUFBSSxLQUFLO2dCQUFFLE9BQU8sT0FBTyxDQUFDO29CQUN6QixHQUFHLEtBQUs7b0JBQ1IsSUFBSTtpQkFDSixDQUFDLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFDWSxRQUFBLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLGNBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBeUM7QUFFekMsK0JBQTRCO0FBQzVCLHFEQUEyQztBQWtCM0MsNERBQTREO0FBQzVELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztDQUNyRSxDQUFBO0FBK0JWLFNBQVMsVUFBVSxDQUNsQixNQUEwQixFQUFFLDZCQUE2QjtBQUN6RCxNQUF5QyxFQUN6QyxFQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQW1CLEVBQUU7SUFFN0MsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNiLE1BQU0sR0FBRyxHQUFHLElBQUEsY0FBTSxHQUFFLENBQUE7UUFDcEIsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDOUUsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzVDLHFCQUFxQjtZQUNyQixnRUFBZ0U7WUFDaEUsMEVBQTBFO1lBQzFFLDJFQUEyRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO1lBQzVHLElBQUksT0FBTztnQkFBRSxPQUFPLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNZLFFBQUEsTUFBTSxHQUFXO0lBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNO1FBQ3ZCLE9BQU8sT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtZQUNuQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDWixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9ELENBQUM7Q0FDRCxDQUFBO0FBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVO0lBQUUsY0FBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGNBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQU0sRUFBRSxNQUFNLENBQUMsQ0FBQSJ9
package/cjs/static.d.ts CHANGED
@@ -1,7 +1,5 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Chainable } from './dx.js';
3
2
  import { SendOptions } from 'send';
4
- import { IncomingMessage } from 'node:http';
5
3
  export declare function chainStatic(pattern: string, { getPathname, ...options }: SendOptions & {
6
- getPathname?: (req: IncomingMessage) => string;
4
+ getPathname?(matched: URLPatternResult): string;
7
5
  }): Chainable;
package/cjs/static.js CHANGED
@@ -4,17 +4,17 @@ exports.chainStatic = void 0;
4
4
  const dx_js_1 = require("./dx.js");
5
5
  const bodyHelpers_js_1 = require("./bodyHelpers.js");
6
6
  const staticHelpers_js_1 = require("./staticHelpers.js");
7
- const router_js_1 = require("./router.js");
8
7
  function chainStatic(pattern, { getPathname, ...options }) {
9
8
  return async (next) => {
10
9
  const req = (0, dx_js_1.getReq)();
11
10
  if (req.method !== 'GET' && req.method !== 'HEAD')
12
11
  return next();
13
- const match = (0, router_js_1.matchPattern)((0, bodyHelpers_js_1.urlFromReq)(req).pathname, pattern);
14
- if (!match)
12
+ const { pathname } = (0, bodyHelpers_js_1.urlFromReq)(req);
13
+ const matched = new URLPattern({ pathname: pattern }).exec({ pathname });
14
+ if (!matched)
15
15
  return next();
16
16
  try {
17
- await (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), getPathname?.(req) ?? (0, bodyHelpers_js_1.urlFromReq)(req).pathname, options, next);
17
+ await (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), getPathname?.(matched) ?? pathname, options, next);
18
18
  }
19
19
  catch (err) {
20
20
  return next(err);
@@ -24,4 +24,4 @@ function chainStatic(pattern, { getPathname, ...options }) {
24
24
  };
25
25
  }
26
26
  exports.chainStatic = chainStatic;
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFFakQscURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQywyQ0FBd0M7QUFHeEMsU0FBZ0IsV0FBVyxDQUMxQixPQUFlLEVBQ2YsRUFBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLEVBR3ZCO0lBRUQsT0FBTyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFaEUsTUFBTSxLQUFLLEdBQUcsSUFBQSx3QkFBWSxFQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQztZQUNKLE1BQU0sSUFBQSwyQkFBUSxFQUNkLEdBQUcsRUFDSCxJQUFBLGNBQU0sR0FBRSxFQUNSLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQzlDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQTVCRCxrQ0E0QkMifQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFFakQscURBQTJDO0FBQzNDLHlEQUEyQztBQUUzQyxTQUFnQixXQUFXLENBQzFCLE9BQWUsRUFDZixFQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sRUFHdkI7SUFFRCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU0sR0FBRSxDQUFBO1FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsSUFBQSwyQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUNwRSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFM0IsSUFBSSxDQUFDO1lBQ0osTUFBTSxJQUFBLDJCQUFRLEVBQ2QsR0FBRyxFQUNILElBQUEsY0FBTSxHQUFFLEVBQ1IsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxFQUNsQyxPQUFPLEVBQ1AsSUFBSSxDQUNKLENBQUE7UUFDRCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLDJDQUEyQztZQUMzQyxZQUFZO1FBQ2IsQ0FBQztJQUNGLENBQUMsQ0FBQTtBQUNGLENBQUM7QUE3QkQsa0NBNkJDIn0=
package/esm/dx.js CHANGED
@@ -4,14 +4,7 @@ export function makeDxContext(maker) {
4
4
  const promiseSymbol = Symbol('promise');
5
5
  const valueSymbol = Symbol('value');
6
6
  // wrap in an async function to ensure the maker is called only once
7
- const context = (...params) => getReq()[promiseSymbol] ??= (async () => {
8
- try {
9
- return getReq()[valueSymbol] = await maker(...params);
10
- }
11
- catch (e) {
12
- throw e;
13
- }
14
- })();
7
+ const context = (...params) => getReq()[promiseSymbol] ??= (async () => getReq()[valueSymbol] = await maker(...params))();
15
8
  Object.defineProperty(context, 'value', {
16
9
  get() { return getReq()[valueSymbol]; },
17
10
  set(value) {
@@ -115,4 +108,4 @@ export function setRedirect(url, status) {
115
108
  // https://github.com/jshttp/content-disposition/blob/1037e24e4790273da96645ad250061f39e77968c/index.js#L186
116
109
  // because in most applications, users can specify a simple filename which usually doesn't need to be validated.
117
110
  // we leave setDownload() implementation for users, for now.
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFpQixRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQXVCdkQsTUFBTSxVQUFVLGFBQWEsQ0FLM0IsS0FBK0I7SUFDaEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuQyxvRUFBb0U7SUFDcEUsTUFBTSxPQUFPLEdBQWdDLENBQUMsR0FBRyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDM0csSUFBSSxDQUFDO1lBQ0osT0FBTyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLENBQUE7UUFDUixDQUFDO0lBQ0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNKLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtRQUN2QyxHQUFHLEtBQUksT0FBTyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFBLENBQUM7UUFDcEMsR0FBRyxDQUFDLEtBQUs7WUFDUixNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2hELE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUM5QixDQUFDO0tBQ0QsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLEtBQUssR0FBRyxD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
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFpQixRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQXVCdkQsTUFBTSxVQUFVLGFBQWEsQ0FLM0IsS0FBK0I7SUFDaEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuQyxvRUFBb0U7SUFDcEUsTUFBTSxPQUFPLEdBQWdDLENBQUMsR0FBRyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM5SixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7UUFDdkMsR0FBRyxLQUFJLE9BQU8sTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUEsQ0FBQSxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxLQUFLO1lBQ1IsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoRCxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDOUIsQ0FBQztLQUNELENBQUMsQ0FBQTtJQUNGLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQzNDLE1BQU0sT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUE7UUFDeEIsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNkLENBQUMsQ0FBQTtJQUNELE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0MsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUN6QixDQUFDLENBQUE7SUFDRCxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3JDLE9BQU8sT0FBTyxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0sY0FBYyxHQUFHLElBQUksaUJBQWlCLEVBR3hDLENBQUE7QUFDSixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQVksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUE7QUFDckUsTUFBTSxVQUFVLFFBQVEsQ0FDdkIsR0FBb0IsRUFDcEIsR0FBbUIsRUFDbkIsVUFHSSxFQUFFO0lBRU4sT0FBTyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbkIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3pELE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzVDLE9BQU8sTUFBTSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUVELGVBQWU7QUFDZixnREFBZ0Q7QUFDaEQsMkZBQTJGO0FBQzNGLGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsTUFBTSxLQUFxQixPQUFPLGNBQWMsQ0FBQyxRQUFRLEVBQUcsQ0FBQyxHQUFHLENBQUEsQ0FBQSxDQUFDO0FBQ2pGLE1BQU0sVUFBVSxNQUFNLEtBQW9CLE9BQU8sY0FBYyxDQUFDLFFBQVEsRUFBRyxDQUFDLEdBQUcsQ0FBQSxDQUFBLENBQUM7QUFFaEYsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFZLEVBQUUsRUFBQyxNQUFNLEtBQXlCLEVBQUU7SUFDdkUsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7SUFDcEIsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQTtJQUMxQixJQUFJLE1BQU07UUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUNuQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNkLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVksRUFBRSxPQUE0QixFQUFFO0lBQ25FLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDbkIsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQTtJQUMxQixFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFnQixFQUFFLE9BQXFCO0lBQzlELE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUE7SUFDMUIsRUFBRSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7SUFDbEIsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDaEIsRUFBRSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7QUFDckIsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBYyxFQUFFLEVBQUMsTUFBTSxLQUF5QixFQUFFO0lBQzNFLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO0lBQ3BCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUE7SUFDMUIsSUFBSSxNQUFNO1FBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFDbkMsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDaEIsRUFBRSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBZ0IsRUFBRSxFQUFDLE1BQU0sS0FBeUIsRUFBRTtJQUNqRixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNwQixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO0lBQzFCLElBQUksTUFBTTtRQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ25DLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0lBQ2hCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQXNCLEVBQUUsRUFBQyxNQUFNLEtBQXlCLEVBQUU7SUFDdEYsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7SUFDcEIsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQTtJQUMxQixJQUFJLE1BQU07UUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUNuQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtJQUNoQixFQUFFLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQTtBQUN0QixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFTLEVBQUUsRUFBQyxNQUFNLEtBQXlCLEVBQUU7SUFDcEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7SUFDcEIsSUFBSSxNQUFNO1FBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFFbkMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQTtJQUMxQixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNkLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFpQjtJQUN6RCxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNwQixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO0lBQzFCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ3ZCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO0lBQ2IsRUFBRSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7QUFDckIsQ0FBQztBQUVELCtDQUErQztBQUMvQyw0RUFBNEU7QUFFNUUsbURBQW1EO0FBQ25ELHVCQUF1QjtBQUN2QixLQUFLO0FBQ0wscUpBQXFKO0FBRXJKLHdGQUF3RjtBQUN4RixzQ0FBc0M7QUFDdEMsNEdBQTRHO0FBQzVHLGdIQUFnSDtBQUNoSCw0REFBNEQifQ==
@@ -0,0 +1,43 @@
1
+ import { Chainable } from './dx.js';
2
+ import 'urlpattern-polyfill';
3
+ interface URLPatternOptions {
4
+ }
5
+ interface RouteContext {
6
+ matched: URLPatternResult;
7
+ next(): any;
8
+ }
9
+ interface Route {
10
+ (context: RouteContext): any;
11
+ }
12
+ interface Routes {
13
+ [k: string]: Route;
14
+ }
15
+ interface RouterOptions extends URLPatternOptions {
16
+ prefix?: string;
17
+ }
18
+ type Router = {
19
+ patch(routes: Routes, options?: RouterOptions): Chainable;
20
+ patch(pattern: string, route: Route, options?: RouterOptions): Chainable;
21
+ trace(routes: Routes, options?: RouterOptions): Chainable;
22
+ trace(pattern: string, route: Route, options?: RouterOptions): Chainable;
23
+ options(routes: Routes, options?: RouterOptions): Chainable;
24
+ options(pattern: string, route: Route, options?: RouterOptions): Chainable;
25
+ connect(routes: Routes, options?: RouterOptions): Chainable;
26
+ connect(pattern: string, route: Route, options?: RouterOptions): Chainable;
27
+ delete(routes: Routes, options?: RouterOptions): Chainable;
28
+ delete(pattern: string, route: Route, options?: RouterOptions): Chainable;
29
+ put(routes: Routes, options?: RouterOptions): Chainable;
30
+ put(pattern: string, route: Route, options?: RouterOptions): Chainable;
31
+ post(routes: Routes, options?: RouterOptions): Chainable;
32
+ post(pattern: string, route: Route, options?: RouterOptions): Chainable;
33
+ head(routes: Routes, options?: RouterOptions): Chainable;
34
+ head(pattern: string, route: Route, options?: RouterOptions): Chainable;
35
+ get(routes: Routes, options?: RouterOptions): Chainable;
36
+ get(pattern: string, route: Route, options?: RouterOptions): Chainable;
37
+ all(routes: Routes, options?: RouterOptions): Chainable;
38
+ all(pattern: string, route: Route, options?: RouterOptions): Chainable;
39
+ method(method: string, routes: Routes, options?: RouterOptions): Chainable;
40
+ method(method: string, pattern: string, route: Route, options?: RouterOptions): Chainable;
41
+ };
42
+ export declare const router: Router;
43
+ export {};
package/esm/router.js CHANGED
@@ -1,19 +1,6 @@
1
1
  import { getReq } from './dx.js';
2
2
  import 'urlpattern-polyfill';
3
3
  import { urlFromReq } from './bodyHelpers.js';
4
- // '' matches nothing
5
- // '/' matches both https://example.com and https://example.com/
6
- // '/foo' matches https://example.com/foo but not https://example.com/foo/
7
- // '/foo/' matches https://example.com/foo/ but not https://example.com/foo
8
- export function matchPattern(pathname, pattern) {
9
- const matched = new URLPattern({ pathname: pattern }).exec({ pathname });
10
- if (!matched)
11
- return;
12
- return {
13
- matched,
14
- params: matched.pathname.groups
15
- };
16
- }
17
4
  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
18
5
  const allMethods = [
19
6
  'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
@@ -25,12 +12,13 @@ routes, { prefix = '', ...options } = {}) {
25
12
  if (method !== undefined && req.method !== method.toUpperCase())
26
13
  return next();
27
14
  for (const [pattern, handler] of routes) {
28
- const match = matchPattern(urlFromReq(req).pathname, `${prefix}${pattern}`, options);
29
- if (match)
30
- return handler({
31
- ...match,
32
- next,
33
- });
15
+ // '' matches nothing
16
+ // '/' matches both https://example.com and https://example.com/
17
+ // '/foo' matches https://example.com/foo but not https://example.com/foo/
18
+ // '/foo/' matches https://example.com/foo/ but not https://example.com/foo
19
+ const matched = new URLPattern({ pathname: `${prefix}${pattern}` }).exec({ pathname: urlFromReq(req).pathname });
20
+ if (matched)
21
+ return handler({ matched, next });
34
22
  }
35
23
  return next();
36
24
  };
@@ -49,4 +37,4 @@ export const router = {
49
37
  };
50
38
  for (const method of allMethods)
51
39
  router[method] = router.method.bind(router, method);
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXpDLE9BQU8scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBTzNDLHFCQUFxQjtBQUNyQixnRUFBZ0U7QUFDaEUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlO0lBR2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBY0QsNERBQTREO0FBQzVELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztDQUNyRSxDQUFBO0FBK0JWLFNBQVMsVUFBVSxDQUNsQixNQUEwQixFQUFFLDZCQUE2QjtBQUN6RCxNQUF5QyxFQUN6QyxFQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQW1CLEVBQUU7SUFFN0MsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNiLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBQzlFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNwRixJQUFJLEtBQUs7Z0JBQUUsT0FBTyxPQUFPLENBQUM7b0JBQ3pCLEdBQUcsS0FBSztvQkFDUixJQUFJO2lCQUNKLENBQUMsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXpDLE9BQU8scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBa0IzQyw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLEdBQUc7SUFDbEIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPO0NBQ3JFLENBQUE7QUErQlYsU0FBUyxVQUFVLENBQ2xCLE1BQTBCLEVBQUUsNkJBQTZCO0FBQ3pELE1BQXlDLEVBQ3pDLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtJQUU3QyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFDcEIsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDOUUsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzVDLHFCQUFxQjtZQUNyQixnRUFBZ0U7WUFDaEUsMEVBQTBFO1lBQzFFLDJFQUEyRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO1lBQzVHLElBQUksT0FBTztnQkFBRSxPQUFPLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
package/esm/static.d.ts CHANGED
@@ -1,7 +1,5 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Chainable } from './dx.js';
3
2
  import { SendOptions } from 'send';
4
- import { IncomingMessage } from 'node:http';
5
3
  export declare function chainStatic(pattern: string, { getPathname, ...options }: SendOptions & {
6
- getPathname?: (req: IncomingMessage) => string;
4
+ getPathname?(matched: URLPatternResult): string;
7
5
  }): Chainable;
package/esm/static.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { getReq, getRes } from './dx.js';
2
2
  import { urlFromReq } from './bodyHelpers.js';
3
3
  import { sendFile } from './staticHelpers.js';
4
- import { matchPattern } from './router.js';
5
4
  export function chainStatic(pattern, { getPathname, ...options }) {
6
5
  return async (next) => {
7
6
  const req = getReq();
8
7
  if (req.method !== 'GET' && req.method !== 'HEAD')
9
8
  return next();
10
- const match = matchPattern(urlFromReq(req).pathname, pattern);
11
- if (!match)
9
+ const { pathname } = urlFromReq(req);
10
+ const matched = new URLPattern({ pathname: pattern }).exec({ pathname });
11
+ if (!matched)
12
12
  return next();
13
13
  try {
14
- await sendFile(req, getRes(), getPathname?.(req) ?? urlFromReq(req).pathname, options, next);
14
+ await sendFile(req, getRes(), getPathname?.(matched) ?? pathname, options, next);
15
15
  }
16
16
  catch (err) {
17
17
  return next(err);
@@ -20,4 +20,4 @@ export function chainStatic(pattern, { getPathname, ...options }) {
20
20
  }
21
21
  };
22
22
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUVqRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFHeEMsTUFBTSxVQUFVLFdBQVcsQ0FDMUIsT0FBZSxFQUNmLEVBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxFQUd2QjtJQUVELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3RCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFekIsSUFBSSxDQUFDO1lBQ0osTUFBTSxRQUFRLENBQ2QsR0FBRyxFQUNILE1BQU0sRUFBRSxFQUNSLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQzlDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyJ9
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUVqRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBRTNDLE1BQU0sVUFBVSxXQUFXLENBQzFCLE9BQWUsRUFDZixFQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sRUFHdkI7SUFFRCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFaEUsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRTNCLElBQUksQ0FBQztZQUNKLE1BQU0sUUFBUSxDQUNkLEdBQUcsRUFDSCxNQUFNLEVBQUUsRUFDUixXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQ2xDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dx-server",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "main": "./cjs/index.js",
5
5
  "homepage": "https://github.com/tranvansang/dx-server",
6
6
  "repository": "https://github.com/tranvansang/dx-server",