dx-server 0.6.5 → 0.7.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/cjs/router.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.router = void 0;
3
+ exports.router = exports.matchPattern = 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");
@@ -17,6 +17,7 @@ function matchPattern(pathname, pattern) {
17
17
  params: matched.pathname.groups
18
18
  };
19
19
  }
20
+ exports.matchPattern = matchPattern;
20
21
  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
21
22
  const allMethods = [
22
23
  'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
@@ -52,4 +53,4 @@ exports.router = {
52
53
  };
53
54
  for (const method of allMethods)
54
55
  exports.router[method] = exports.router.method.bind(exports.router, method);
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBeUM7QUFFekMsK0JBQTRCO0FBQzVCLHFEQUEyQztBQU8zQyxxQkFBcUI7QUFDckIsZ0VBQWdFO0FBQ2hFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsU0FBUyxZQUFZLENBQ3BCLFFBQWdCLEVBQ2hCLE9BQWU7SUFHZixNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDcEUsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFNO0lBRXBCLE9BQU87UUFDTixPQUFPO1FBQ1AsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBZ0I7S0FDekMsQ0FBQTtBQUNGLENBQUM7QUFjRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLEdBQUc7SUFDbEIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPO0NBQ3JFLENBQUE7QUErQlYsU0FBUyxVQUFVLENBQ2xCLE1BQTBCLEVBQUUsNkJBQTZCO0FBQ3pELE1BQXlDLEVBQ3pDLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtJQUU3QyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDcEYsSUFBSSxLQUFLO2dCQUFFLE9BQU8sT0FBTyxDQUFDO29CQUN6QixHQUFHLEtBQUs7b0JBQ1IsSUFBSTtpQkFDSixDQUFDLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFDWSxRQUFBLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLGNBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBeUM7QUFFekMsK0JBQTRCO0FBQzVCLHFEQUEyQztBQU8zQyxxQkFBcUI7QUFDckIsZ0VBQWdFO0FBQ2hFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsU0FBZ0IsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlO0lBR2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBWkQsb0NBWUM7QUFjRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLEdBQUc7SUFDbEIsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPO0NBQ3JFLENBQUE7QUErQlYsU0FBUyxVQUFVLENBQ2xCLE1BQTBCLEVBQUUsNkJBQTZCO0FBQ3pELE1BQXlDLEVBQ3pDLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtJQUU3QyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDcEYsSUFBSSxLQUFLO2dCQUFFLE9BQU8sT0FBTyxDQUFDO29CQUN6QixHQUFHLEtBQUs7b0JBQ1IsSUFBSTtpQkFDSixDQUFDLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFDWSxRQUFBLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLGNBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
package/cjs/static.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ /// <reference types="node" resolution-mode="require"/>
1
2
  import { Chainable } from './dx.js';
2
3
  import { SendOptions } from 'send';
3
- export declare function chainStatic(prefix: string, options: SendOptions): Chainable;
4
+ import { IncomingMessage } from 'node:http';
5
+ export declare function chainStatic(pattern: string, { getPathname, ...options }: SendOptions & {
6
+ getPathname?: (req: IncomingMessage) => string;
7
+ }): Chainable;
package/cjs/static.js CHANGED
@@ -4,23 +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
- function chainStatic(prefix, options) {
7
+ const router_js_1 = require("./router.js");
8
+ function chainStatic(pattern, { getPathname, ...options }) {
8
9
  return async (next) => {
9
10
  const req = (0, dx_js_1.getReq)();
10
11
  if (req.method !== 'GET' && req.method !== 'HEAD')
11
12
  return next();
12
- if (!prefix.endsWith('/'))
13
- prefix += '/';
14
- if (!prefix.startsWith('/'))
15
- prefix = '/' + prefix;
16
- const { pathname } = (0, bodyHelpers_js_1.urlFromReq)(req);
17
- if (!pathname.startsWith(prefix)
18
- && !pathname.endsWith('/')
19
- && pathname + '/' !== prefix)
13
+ const match = (0, router_js_1.matchPattern)((0, bodyHelpers_js_1.urlFromReq)(req).pathname, pattern);
14
+ if (!match)
20
15
  return next();
21
16
  try {
22
- await (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), pathname.slice(prefix.length - 1), // keep the trailing slash
23
- options, next);
17
+ await (0, staticHelpers_js_1.sendFile)(req, (0, dx_js_1.getRes)(), getPathname?.(req) ?? (0, bodyHelpers_js_1.urlFromReq)(req).pathname, options, next);
24
18
  }
25
19
  catch (err) {
26
20
  return next(err);
@@ -30,4 +24,4 @@ function chainStatic(prefix, options) {
30
24
  };
31
25
  }
32
26
  exports.chainStatic = chainStatic;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFFakQscURBQTJDO0FBQzNDLHlEQUEyQztBQUUzQyxTQUFnQixXQUFXLENBQzFCLE1BQWMsRUFDZCxPQUFvQjtJQUVwQixPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU0sR0FBRSxDQUFBO1FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksR0FBRyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFBO1FBRWxELE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxJQUFBLDJCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEMsSUFDQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2VBQ3pCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7ZUFDdkIsUUFBUSxHQUFHLEdBQUcsS0FBSyxNQUFNO1lBQzNCLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFZixJQUFJLENBQUM7WUFDSixNQUFNLElBQUEsMkJBQVEsRUFDZCxHQUFHLEVBQ0gsSUFBQSxjQUFNLEdBQUUsRUFDUixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsMEJBQTBCO1lBQzdELE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQWhDRCxrQ0FnQ0MifQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBaUQ7QUFFakQscURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQywyQ0FBd0M7QUFHeEMsU0FBZ0IsV0FBVyxDQUMxQixPQUFlLEVBQ2YsRUFBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLEVBR3ZCO0lBRUQsT0FBTyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFNLEdBQUUsQ0FBQTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFaEUsTUFBTSxLQUFLLEdBQUcsSUFBQSx3QkFBWSxFQUFDLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQztZQUNKLE1BQU0sSUFBQSwyQkFBUSxFQUNkLEdBQUcsRUFDSCxJQUFBLGNBQU0sR0FBRSxFQUNSLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUEsMkJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQzlDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQTVCRCxrQ0E0QkMifQ==
package/esm/router.js CHANGED
@@ -5,7 +5,7 @@ import { urlFromReq } from './bodyHelpers.js';
5
5
  // '/' matches both https://example.com and https://example.com/
6
6
  // '/foo' matches https://example.com/foo but not https://example.com/foo/
7
7
  // '/foo/' matches https://example.com/foo/ but not https://example.com/foo
8
- function matchPattern(pathname, pattern) {
8
+ export function matchPattern(pathname, pattern) {
9
9
  const matched = new URLPattern({ pathname: pattern }).exec({ pathname });
10
10
  if (!matched)
11
11
  return;
@@ -49,4 +49,4 @@ export const router = {
49
49
  };
50
50
  for (const method of allMethods)
51
51
  router[method] = router.method.bind(router, method);
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXpDLE9BQU8scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBTzNDLHFCQUFxQjtBQUNyQixnRUFBZ0U7QUFDaEUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSxTQUFTLFlBQVksQ0FDcEIsUUFBZ0IsRUFDaEIsT0FBZTtJQUdmLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQTtJQUNwRSxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU07SUFFcEIsT0FBTztRQUNOLE9BQU87UUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFnQjtLQUN6QyxDQUFBO0FBQ0YsQ0FBQztBQWNELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsR0FBRztJQUNsQixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU87Q0FDckUsQ0FBQTtBQStCVixTQUFTLFVBQVUsQ0FDbEIsTUFBMEIsRUFBRSw2QkFBNkI7QUFDekQsTUFBeUMsRUFDekMsRUFBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxLQUFtQixFQUFFO0lBRTdDLE9BQU8sSUFBSSxDQUFDLEVBQUU7UUFDYixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtRQUNwQixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUM5RSxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDcEYsSUFBSSxLQUFLO2dCQUFFLE9BQU8sT0FBTyxDQUFDO29CQUN6QixHQUFHLEtBQUs7b0JBQ1IsSUFBSTtpQkFDSixDQUFDLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNkLENBQUMsQ0FBQTtBQUNGLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQVc7SUFDN0IsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU07UUFDdkIsT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBQ0QsR0FBRyxDQUFDLEdBQUcsTUFBTTtRQUNaLE9BQU8sT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtZQUNuQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNELENBQUE7QUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVU7SUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBIn0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXpDLE9BQU8scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBTzNDLHFCQUFxQjtBQUNyQixnRUFBZ0U7QUFDaEUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsWUFBWSxDQUMzQixRQUFnQixFQUNoQixPQUFlO0lBR2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixPQUFPO1FBQ04sT0FBTztRQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQWdCO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBY0QsNERBQTREO0FBQzVELE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztDQUNyRSxDQUFBO0FBK0JWLFNBQVMsVUFBVSxDQUNsQixNQUEwQixFQUFFLDZCQUE2QjtBQUN6RCxNQUF5QyxFQUN6QyxFQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQW1CLEVBQUU7SUFFN0MsT0FBTyxJQUFJLENBQUMsRUFBRTtRQUNiLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1FBQzlFLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNwRixJQUFJLEtBQUs7Z0JBQUUsT0FBTyxPQUFPLENBQUM7b0JBQ3pCLEdBQUcsS0FBSztvQkFDUixJQUFJO2lCQUNKLENBQUMsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBVztJQUM3QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTTtRQUN2QixPQUFPLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQ1osT0FBTyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQ25DLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
package/esm/static.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ /// <reference types="node" resolution-mode="require"/>
1
2
  import { Chainable } from './dx.js';
2
3
  import { SendOptions } from 'send';
3
- export declare function chainStatic(prefix: string, options: SendOptions): Chainable;
4
+ import { IncomingMessage } from 'node:http';
5
+ export declare function chainStatic(pattern: string, { getPathname, ...options }: SendOptions & {
6
+ getPathname?: (req: IncomingMessage) => string;
7
+ }): Chainable;
package/esm/static.js CHANGED
@@ -1,23 +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
- export function chainStatic(prefix, options) {
4
+ import { matchPattern } from './router.js';
5
+ export function chainStatic(pattern, { getPathname, ...options }) {
5
6
  return async (next) => {
6
7
  const req = getReq();
7
8
  if (req.method !== 'GET' && req.method !== 'HEAD')
8
9
  return next();
9
- if (!prefix.endsWith('/'))
10
- prefix += '/';
11
- if (!prefix.startsWith('/'))
12
- prefix = '/' + prefix;
13
- const { pathname } = urlFromReq(req);
14
- if (!pathname.startsWith(prefix)
15
- && !pathname.endsWith('/')
16
- && pathname + '/' !== prefix)
10
+ const match = matchPattern(urlFromReq(req).pathname, pattern);
11
+ if (!match)
17
12
  return next();
18
13
  try {
19
- await sendFile(req, getRes(), pathname.slice(prefix.length - 1), // keep the trailing slash
20
- options, next);
14
+ await sendFile(req, getRes(), getPathname?.(req) ?? urlFromReq(req).pathname, options, next);
21
15
  }
22
16
  catch (err) {
23
17
  return next(err);
@@ -26,4 +20,4 @@ export function chainStatic(prefix, options) {
26
20
  }
27
21
  };
28
22
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUVqRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBRTNDLE1BQU0sVUFBVSxXQUFXLENBQzFCLE1BQWMsRUFDZCxPQUFvQjtJQUVwQixPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQTtRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQTtRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQTtRQUVsRCxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xDLElBQ0MsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztlQUN6QixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2VBQ3ZCLFFBQVEsR0FBRyxHQUFHLEtBQUssTUFBTTtZQUMzQixPQUFPLElBQUksRUFBRSxDQUFBO1FBRWYsSUFBSSxDQUFDO1lBQ0osTUFBTSxRQUFRLENBQ2QsR0FBRyxFQUNILE1BQU0sRUFBRSxFQUNSLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSwwQkFBMEI7WUFDN0QsT0FBTyxFQUNQLElBQUksQ0FDSixDQUFBO1FBQ0QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNoQiwyQ0FBMkM7WUFDM0MsWUFBWTtRQUNiLENBQUM7SUFDRixDQUFDLENBQUE7QUFDRixDQUFDIn0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQTtBQUVqRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFHeEMsTUFBTSxVQUFVLFdBQVcsQ0FDMUIsT0FBZSxFQUNmLEVBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxFQUd2QjtJQUVELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFBO1FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUM3RCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFekIsSUFBSSxDQUFDO1lBQ0osTUFBTSxRQUFRLENBQ2QsR0FBRyxFQUNILE1BQU0sRUFBRSxFQUNSLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQzlDLE9BQU8sRUFDUCxJQUFJLENBQ0osQ0FBQTtRQUNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsMkNBQTJDO1lBQzNDLFlBQVk7UUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dx-server",
3
- "version": "0.6.5",
3
+ "version": "0.7.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",
@@ -36,6 +36,5 @@
36
36
  "dependencies": {
37
37
  "send": "^0.18.0",
38
38
  "urlpattern-polyfill": "^10.0.0"
39
- },
40
- "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
39
+ }
41
40
  }
package/cjs/router.d.ts DELETED
@@ -1,44 +0,0 @@
1
- import { Chainable } from './dx.js';
2
- import 'urlpattern-polyfill';
3
- interface URLPatternOptions {
4
- }
5
- interface RouteContext {
6
- matched: URLPatternResult;
7
- params: Record<string, string>;
8
- next(): any;
9
- }
10
- interface Route {
11
- (context: RouteContext): any;
12
- }
13
- interface Routes {
14
- [k: string]: Route;
15
- }
16
- interface RouterOptions extends URLPatternOptions {
17
- prefix?: string;
18
- }
19
- type Router = {
20
- patch(routes: Routes, options?: RouterOptions): Chainable;
21
- patch(pattern: string, route: Route, options?: RouterOptions): Chainable;
22
- trace(routes: Routes, options?: RouterOptions): Chainable;
23
- trace(pattern: string, route: Route, options?: RouterOptions): Chainable;
24
- options(routes: Routes, options?: RouterOptions): Chainable;
25
- options(pattern: string, route: Route, options?: RouterOptions): Chainable;
26
- connect(routes: Routes, options?: RouterOptions): Chainable;
27
- connect(pattern: string, route: Route, options?: RouterOptions): Chainable;
28
- delete(routes: Routes, options?: RouterOptions): Chainable;
29
- delete(pattern: string, route: Route, options?: RouterOptions): Chainable;
30
- put(routes: Routes, options?: RouterOptions): Chainable;
31
- put(pattern: string, route: Route, options?: RouterOptions): Chainable;
32
- post(routes: Routes, options?: RouterOptions): Chainable;
33
- post(pattern: string, route: Route, options?: RouterOptions): Chainable;
34
- head(routes: Routes, options?: RouterOptions): Chainable;
35
- head(pattern: string, route: Route, options?: RouterOptions): Chainable;
36
- get(routes: Routes, options?: RouterOptions): Chainable;
37
- get(pattern: string, route: Route, options?: RouterOptions): Chainable;
38
- all(routes: Routes, options?: RouterOptions): Chainable;
39
- all(pattern: string, route: Route, options?: RouterOptions): Chainable;
40
- method(method: string, routes: Routes, options?: RouterOptions): Chainable;
41
- method(method: string, pattern: string, route: Route, options?: RouterOptions): Chainable;
42
- };
43
- export declare const router: Router;
44
- export {};
package/esm/router.d.ts DELETED
@@ -1,44 +0,0 @@
1
- import { Chainable } from './dx.js';
2
- import 'urlpattern-polyfill';
3
- interface URLPatternOptions {
4
- }
5
- interface RouteContext {
6
- matched: URLPatternResult;
7
- params: Record<string, string>;
8
- next(): any;
9
- }
10
- interface Route {
11
- (context: RouteContext): any;
12
- }
13
- interface Routes {
14
- [k: string]: Route;
15
- }
16
- interface RouterOptions extends URLPatternOptions {
17
- prefix?: string;
18
- }
19
- type Router = {
20
- patch(routes: Routes, options?: RouterOptions): Chainable;
21
- patch(pattern: string, route: Route, options?: RouterOptions): Chainable;
22
- trace(routes: Routes, options?: RouterOptions): Chainable;
23
- trace(pattern: string, route: Route, options?: RouterOptions): Chainable;
24
- options(routes: Routes, options?: RouterOptions): Chainable;
25
- options(pattern: string, route: Route, options?: RouterOptions): Chainable;
26
- connect(routes: Routes, options?: RouterOptions): Chainable;
27
- connect(pattern: string, route: Route, options?: RouterOptions): Chainable;
28
- delete(routes: Routes, options?: RouterOptions): Chainable;
29
- delete(pattern: string, route: Route, options?: RouterOptions): Chainable;
30
- put(routes: Routes, options?: RouterOptions): Chainable;
31
- put(pattern: string, route: Route, options?: RouterOptions): Chainable;
32
- post(routes: Routes, options?: RouterOptions): Chainable;
33
- post(pattern: string, route: Route, options?: RouterOptions): Chainable;
34
- head(routes: Routes, options?: RouterOptions): Chainable;
35
- head(pattern: string, route: Route, options?: RouterOptions): Chainable;
36
- get(routes: Routes, options?: RouterOptions): Chainable;
37
- get(pattern: string, route: Route, options?: RouterOptions): Chainable;
38
- all(routes: Routes, options?: RouterOptions): Chainable;
39
- all(pattern: string, route: Route, options?: RouterOptions): Chainable;
40
- method(method: string, routes: Routes, options?: RouterOptions): Chainable;
41
- method(method: string, pattern: string, route: Route, options?: RouterOptions): Chainable;
42
- };
43
- export declare const router: Router;
44
- export {};