@eggjs/router 4.0.0-beta.20 → 4.0.0-beta.21

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/dist/Router.js CHANGED
@@ -1,5 +1,776 @@
1
- import "./Layer-CPiRgFSm.js";
2
- import "./types-CxAOQAAb.js";
3
- import { Router } from "./Router-CWrZ5wcC.js";
4
-
5
- export { Router };
1
+ /**
2
+ * RESTful resource routing middleware for eggjs.
3
+ */
4
+ import { debuglog } from 'node:util';
5
+ import assert from 'node:assert';
6
+ import compose from 'koa-compose';
7
+ import HttpError from 'http-errors';
8
+ import methods from 'methods';
9
+ import { Layer } from "./Layer.js";
10
+ import {} from "./types.js";
11
+ const debug = debuglog('egg/router:Router');
12
+ export class Router {
13
+ opts;
14
+ methods;
15
+ /** Layer stack */
16
+ stack = [];
17
+ params = {};
18
+ /**
19
+ * Create a new router.
20
+ *
21
+ * @example
22
+ *
23
+ * Basic usage:
24
+ *
25
+ * ```javascript
26
+ * var Koa = require('koa');
27
+ * var Router = require('koa-router');
28
+ *
29
+ * var app = new Koa();
30
+ * var router = new Router();
31
+ *
32
+ * router.get('/', (ctx, next) => {
33
+ * // ctx.router available
34
+ * });
35
+ *
36
+ * app
37
+ * .use(router.routes())
38
+ * .use(router.allowedMethods());
39
+ * ```
40
+ *
41
+ * @alias module:koa-router
42
+ * @param {Object=} opts optional
43
+ * @param {String=} opts.prefix prefix router paths
44
+ * @class
45
+ */
46
+ constructor(opts) {
47
+ this.opts = opts ?? {};
48
+ this.methods = this.opts.methods ?? ['HEAD', 'OPTIONS', 'GET', 'PUT', 'PATCH', 'POST', 'DELETE'];
49
+ }
50
+ use(pathOrMiddleware, ...middlewares) {
51
+ // support array of paths
52
+ // use(paths, ...middlewares)
53
+ if (Array.isArray(pathOrMiddleware) && typeof pathOrMiddleware[0] === 'string') {
54
+ for (const path of pathOrMiddleware) {
55
+ this.use(path, ...middlewares);
56
+ }
57
+ return this;
58
+ }
59
+ let path = '';
60
+ let hasPath = false;
61
+ if (typeof pathOrMiddleware === 'string') {
62
+ // use(path, ...middlewares)
63
+ path = pathOrMiddleware;
64
+ hasPath = true;
65
+ }
66
+ else if (typeof pathOrMiddleware === 'function') {
67
+ // use(...middlewares)
68
+ middlewares = [pathOrMiddleware, ...middlewares];
69
+ }
70
+ for (const m of middlewares) {
71
+ if (m.router) {
72
+ for (const nestedLayer of m.router.stack) {
73
+ if (path) {
74
+ nestedLayer.setPrefix(path);
75
+ }
76
+ if (this.opts.prefix) {
77
+ nestedLayer.setPrefix(this.opts.prefix);
78
+ }
79
+ this.stack.push(nestedLayer);
80
+ }
81
+ if (this.params) {
82
+ for (const key in this.params) {
83
+ m.router.param(key, this.params[key]);
84
+ }
85
+ }
86
+ }
87
+ else {
88
+ this.register(path || '(.*)', [], m, { end: false, ignoreCaptures: !hasPath });
89
+ }
90
+ }
91
+ return this;
92
+ }
93
+ /**
94
+ * Set the path prefix for a Router instance that was already initialized.
95
+ *
96
+ * @example
97
+ *
98
+ * ```javascript
99
+ * router.prefix('/things/:thing_id')
100
+ * ```
101
+ *
102
+ * @param {String} prefix prefix string
103
+ * @return {Router} router instance
104
+ */
105
+ prefix(prefix) {
106
+ prefix = prefix.replace(/\/$/, '');
107
+ this.opts.prefix = prefix;
108
+ for (const layer of this.stack) {
109
+ layer.setPrefix(prefix);
110
+ }
111
+ return this;
112
+ }
113
+ /**
114
+ * Returns router middleware which dispatches a route matching the request.
115
+ *
116
+ * @return {Function} middleware function
117
+ */
118
+ routes() {
119
+ const dispatch = (ctx, next) => {
120
+ const routerPath = this.opts.routerPath || ctx.routerPath || ctx.path;
121
+ const matched = this.match(routerPath, ctx.method);
122
+ debug('dispatch: %s %s, routerPath: %s, matched: %s', ctx.method, ctx.path, routerPath, matched.route);
123
+ if (ctx.matched) {
124
+ ctx.matched.push(...matched.path);
125
+ }
126
+ else {
127
+ ctx.matched = matched.path;
128
+ }
129
+ ctx.router = this;
130
+ if (!matched.route) {
131
+ return next();
132
+ }
133
+ const matchedLayers = matched.pathAndMethod;
134
+ const layerChain = matchedLayers.reduce((memo, layer) => {
135
+ memo.push((ctx, next) => {
136
+ // ctx.captures = layer.captures(routerPath, ctx.captures);
137
+ ctx.captures = layer.captures(routerPath);
138
+ ctx.params = layer.params(routerPath, ctx.captures, ctx.params);
139
+ // ctx._matchedRouteName & ctx._matchedRoute for compatibility
140
+ ctx._matchedRouteName = ctx.routerName = layer.name;
141
+ if (!layer.name) {
142
+ ctx._matchedRouteName = undefined;
143
+ }
144
+ ctx._matchedRoute = ctx.routerPath = layer.path;
145
+ return next();
146
+ });
147
+ return memo.concat(layer.stack);
148
+ }, []);
149
+ return compose(layerChain)(ctx, next);
150
+ };
151
+ dispatch.router = this;
152
+ return dispatch;
153
+ }
154
+ /**
155
+ * @alias to routes()
156
+ */
157
+ middleware() {
158
+ return this.routes();
159
+ }
160
+ /**
161
+ * Returns separate middleware for responding to `OPTIONS` requests with
162
+ * an `Allow` header containing the allowed methods, as well as responding
163
+ * with `405 Method Not Allowed` and `501 Not Implemented` as appropriate.
164
+ *
165
+ * @example
166
+ *
167
+ * ```javascript
168
+ * var Koa = require('koa');
169
+ * var Router = require('koa-router');
170
+ *
171
+ * var app = new Koa();
172
+ * var router = new Router();
173
+ *
174
+ * app.use(router.routes());
175
+ * app.use(router.allowedMethods());
176
+ * ```
177
+ *
178
+ * **Example with [Boom](https://github.com/hapijs/boom)**
179
+ *
180
+ * ```javascript
181
+ * var Koa = require('koa');
182
+ * var Router = require('koa-router');
183
+ * var Boom = require('boom');
184
+ *
185
+ * var app = new Koa();
186
+ * var router = new Router();
187
+ *
188
+ * app.use(router.routes());
189
+ * app.use(router.allowedMethods({
190
+ * throw: true,
191
+ * notImplemented: () => new Boom.notImplemented(),
192
+ * methodNotAllowed: () => new Boom.methodNotAllowed()
193
+ * }));
194
+ * ```
195
+ *
196
+ * @param {Object=} options optional params
197
+ * @param {Boolean=} options.throw throw error instead of setting status and header
198
+ * @param {Function=} options.notImplemented throw the returned value in place of the default NotImplemented error
199
+ * @param {Function=} options.methodNotAllowed throw the returned value in place of the default MethodNotAllowed error
200
+ * @return {Function} middleware function
201
+ */
202
+ allowedMethods(options) {
203
+ const implemented = this.methods;
204
+ return async function allowedMethods(ctx, next) {
205
+ await next();
206
+ if (ctx.status && ctx.status !== 404)
207
+ return;
208
+ const allowed = {};
209
+ ctx.matched.forEach((route) => {
210
+ route.methods.forEach(method => {
211
+ allowed[method] = method;
212
+ });
213
+ });
214
+ const allowedMethods = Object.keys(allowed);
215
+ if (!implemented.includes(ctx.method)) {
216
+ if (options?.throw) {
217
+ let notImplementedThrowable;
218
+ if (typeof options?.notImplemented === 'function') {
219
+ notImplementedThrowable = options.notImplemented(); // set whatever the user returns from their function
220
+ }
221
+ else {
222
+ notImplementedThrowable = new HttpError.NotImplemented();
223
+ }
224
+ throw notImplementedThrowable;
225
+ }
226
+ else {
227
+ ctx.status = 501;
228
+ ctx.set('Allow', allowedMethods.join(', '));
229
+ }
230
+ }
231
+ else if (allowedMethods.length > 0) {
232
+ if (ctx.method === 'OPTIONS') {
233
+ ctx.status = 200;
234
+ ctx.body = '';
235
+ ctx.set('Allow', allowedMethods.join(', '));
236
+ }
237
+ else if (!allowed[ctx.method]) {
238
+ if (options?.throw) {
239
+ let notAllowedThrowable;
240
+ if (typeof options?.methodNotAllowed === 'function') {
241
+ notAllowedThrowable = options.methodNotAllowed(); // set whatever the user returns from their function
242
+ }
243
+ else {
244
+ notAllowedThrowable = new HttpError.MethodNotAllowed();
245
+ }
246
+ throw notAllowedThrowable;
247
+ }
248
+ else {
249
+ ctx.status = 405;
250
+ ctx.set('Allow', allowedMethods.join(', '));
251
+ }
252
+ }
253
+ }
254
+ };
255
+ }
256
+ /**
257
+ * Redirect `source` to `destination` URL with optional 30x status `code`.
258
+ *
259
+ * Both `source` and `destination` can be route names.
260
+ *
261
+ * ```javascript
262
+ * router.redirect('/login', 'sign-in');
263
+ * ```
264
+ *
265
+ * This is equivalent to:
266
+ *
267
+ * ```javascript
268
+ * router.all('/login', ctx => {
269
+ * ctx.redirect('/sign-in');
270
+ * ctx.status = 301;
271
+ * });
272
+ * ```
273
+ *
274
+ * @param {String} source URL or route name.
275
+ * @param {String} destination URL or route name.
276
+ * @param {Number=} status HTTP status code (default: 301).
277
+ * @return {Router} router instance
278
+ */
279
+ redirect(source, destination, status = 301) {
280
+ // lookup source route by name
281
+ if (source[0] !== '/') {
282
+ const routeUrl = this.url(source);
283
+ if (routeUrl instanceof Error) {
284
+ throw routeUrl;
285
+ }
286
+ source = routeUrl;
287
+ }
288
+ // lookup destination route by name
289
+ if (destination[0] !== '/') {
290
+ const routeUrl = this.url(destination);
291
+ if (routeUrl instanceof Error) {
292
+ throw routeUrl;
293
+ }
294
+ destination = routeUrl;
295
+ }
296
+ return this.all(source, ctx => {
297
+ ctx.redirect(destination);
298
+ ctx.status = status;
299
+ });
300
+ }
301
+ /**
302
+ * Create and register a route.
303
+ *
304
+ * @param {String|RegExp|(String|RegExp)[]} path Path string.
305
+ * @param {String[]} methods Array of HTTP verbs.
306
+ * @param {Function|Function[]} middleware Multiple middleware also accepted.
307
+ * @param {Object} [opts] optional params
308
+ * @private
309
+ */
310
+ register(path, methods, middleware, opts) {
311
+ // support array of paths
312
+ if (Array.isArray(path)) {
313
+ const routes = [];
314
+ for (const p of path) {
315
+ const route = this.#register(p, methods, middleware, opts);
316
+ routes.push(route);
317
+ }
318
+ return routes;
319
+ }
320
+ // create route
321
+ const route = this.#register(path, methods, middleware, opts);
322
+ return route;
323
+ }
324
+ #register(path, methods, middleware, opts) {
325
+ opts = opts ?? {};
326
+ // create route
327
+ const route = new Layer(path, methods, middleware, {
328
+ end: opts.end === false ? opts.end : true,
329
+ name: opts.name,
330
+ sensitive: opts.sensitive ?? this.opts.sensitive ?? false,
331
+ strict: opts.strict ?? this.opts.strict ?? false,
332
+ prefix: opts.prefix ?? this.opts.prefix ?? '',
333
+ ignoreCaptures: opts.ignoreCaptures,
334
+ });
335
+ // FIXME: why???
336
+ if (this.opts.prefix) {
337
+ route.setPrefix(this.opts.prefix);
338
+ }
339
+ // add parameter middleware to the new route layer
340
+ for (const param in this.params) {
341
+ route.param(param, this.params[param]);
342
+ }
343
+ this.stack.push(route);
344
+ return route;
345
+ }
346
+ /**
347
+ * Lookup route with given `name`.
348
+ *
349
+ * @param {String} name route name
350
+ * @return {Layer|false} layer instance of false
351
+ */
352
+ route(name) {
353
+ for (const route of this.stack) {
354
+ if (route.name === name) {
355
+ return route;
356
+ }
357
+ }
358
+ return false;
359
+ }
360
+ /**
361
+ * Generate URL for route. Takes a route name and map of named `params`.
362
+ *
363
+ * @example
364
+ *
365
+ * ```javascript
366
+ * router.get('user', '/users/:id', (ctx, next) => {
367
+ * // ...
368
+ * });
369
+ *
370
+ * router.url('user', 3);
371
+ * // => "/users/3"
372
+ *
373
+ * router.url('user', { id: 3 });
374
+ * // => "/users/3"
375
+ *
376
+ * router.use((ctx, next) => {
377
+ * // redirect to named route
378
+ * ctx.redirect(ctx.router.url('sign-in'));
379
+ * })
380
+ *
381
+ * router.url('user', { id: 3 }, { query: { limit: 1 } });
382
+ * // => "/users/3?limit=1"
383
+ *
384
+ * router.url('user', { id: 3 }, { query: "limit=1" });
385
+ * // => "/users/3?limit=1"
386
+ * ```
387
+ */
388
+ url(name, params, ...paramsOrOptions) {
389
+ const route = this.route(name);
390
+ if (route) {
391
+ return route.url(params, ...paramsOrOptions);
392
+ }
393
+ return new Error(`No route found for name: ${name}`);
394
+ }
395
+ /**
396
+ * Generate URL from url pattern and given `params`.
397
+ *
398
+ * @example
399
+ *
400
+ * ```javascript
401
+ * var url = Router.url('/users/:id', { id: 1 });
402
+ * // => "/users/1"
403
+ * ```
404
+ *
405
+ * @param {String} path url pattern
406
+ * @param {Object} params url parameters
407
+ * @return {String} url string
408
+ */
409
+ static url(path, params, ...paramsOrOptions) {
410
+ return Layer.prototype.url.call({ path }, params, ...paramsOrOptions);
411
+ }
412
+ /**
413
+ * Match given `path` and return corresponding routes.
414
+ *
415
+ * @param {String} path path string
416
+ * @param {String} method method name
417
+ * @return {Object.<path, pathAndMethod>} returns layers that matched path and
418
+ * path and method.
419
+ * @private
420
+ */
421
+ match(path, method) {
422
+ const matched = {
423
+ // matched path
424
+ path: [],
425
+ // matched path and method(including none method)
426
+ pathAndMethod: [],
427
+ // method matched or not
428
+ route: false,
429
+ };
430
+ for (const layer of this.stack) {
431
+ debug('test %s %s', layer.path, layer.regexp);
432
+ if (layer.match(path)) {
433
+ matched.path.push(layer);
434
+ if (layer.methods.length === 0 || layer.methods.includes(method)) {
435
+ matched.pathAndMethod.push(layer);
436
+ if (layer.methods.length > 0) {
437
+ matched.route = true;
438
+ }
439
+ }
440
+ // if (layer.methods.length === 0) {
441
+ // matched.pathAndMethod.push(layer);
442
+ // } else if (layer.methods.includes(method)) {
443
+ // matched.pathAndMethod.push(layer);
444
+ // matched.route = true;
445
+ // }
446
+ }
447
+ }
448
+ return matched;
449
+ }
450
+ /**
451
+ * Run middleware for named route parameters. Useful for auto-loading or
452
+ * validation.
453
+ *
454
+ * @example
455
+ *
456
+ * ```javascript
457
+ * router
458
+ * .param('user', (id, ctx, next) => {
459
+ * ctx.user = users[id];
460
+ * if (!ctx.user) return ctx.status = 404;
461
+ * return next();
462
+ * })
463
+ * .get('/users/:user', ctx => {
464
+ * ctx.body = ctx.user;
465
+ * })
466
+ * .get('/users/:user/friends', ctx => {
467
+ * return ctx.user.getFriends().then(function(friends) {
468
+ * ctx.body = friends;
469
+ * });
470
+ * })
471
+ * // /users/3 => {"id": 3, "name": "Alex"}
472
+ * // /users/3/friends => [{"id": 4, "name": "TJ"}]
473
+ * ```
474
+ *
475
+ * @param {String} param param
476
+ * @param {Function} middleware route middleware
477
+ * @return {Router} instance
478
+ */
479
+ param(param, middleware) {
480
+ this.params[param] = middleware;
481
+ for (const route of this.stack) {
482
+ route.param(param, middleware);
483
+ }
484
+ return this;
485
+ }
486
+ _formatRouteParams(nameOrPath, pathOrMiddleware, middlewares) {
487
+ const options = {};
488
+ let path;
489
+ if (typeof nameOrPath === 'string' && nameOrPath.startsWith('/')) {
490
+ // verb(method, path, ...middlewares)
491
+ path = nameOrPath;
492
+ middlewares = [pathOrMiddleware, ...middlewares];
493
+ if (typeof pathOrMiddleware === 'string') {
494
+ // verb(method, path, controllerString)
495
+ // set controller name to router name
496
+ options.name = pathOrMiddleware;
497
+ }
498
+ }
499
+ else if (nameOrPath instanceof RegExp) {
500
+ // verb(method, pathRegex, ...middlewares)
501
+ path = nameOrPath;
502
+ middlewares = [pathOrMiddleware, ...middlewares];
503
+ if (typeof pathOrMiddleware === 'string') {
504
+ // verb(method, pathRegex, controllerString)
505
+ // set controller name to router name
506
+ options.name = pathOrMiddleware;
507
+ }
508
+ }
509
+ else if (Array.isArray(nameOrPath)) {
510
+ // verb(method, paths, ...middlewares)
511
+ path = nameOrPath;
512
+ middlewares = [pathOrMiddleware, ...middlewares];
513
+ if (typeof pathOrMiddleware === 'string') {
514
+ // verb(method, pathRegex, controllerString)
515
+ // set controller name to router name
516
+ options.name = pathOrMiddleware;
517
+ }
518
+ }
519
+ else if (typeof pathOrMiddleware === 'string' || pathOrMiddleware instanceof RegExp) {
520
+ // verb(method, name, path, ...middlewares)
521
+ path = pathOrMiddleware;
522
+ assert(typeof nameOrPath === 'string', 'route name should be string');
523
+ options.name = nameOrPath;
524
+ }
525
+ else if (Array.isArray(pathOrMiddleware)) {
526
+ // verb(method, name, paths, ...middlewares)
527
+ path = pathOrMiddleware;
528
+ assert(typeof nameOrPath === 'string', 'route name should be string');
529
+ options.name = nameOrPath;
530
+ }
531
+ else {
532
+ // verb(method, path, ...middlewares)
533
+ path = nameOrPath;
534
+ middlewares = [pathOrMiddleware, ...middlewares];
535
+ }
536
+ return {
537
+ path,
538
+ middlewares,
539
+ options,
540
+ };
541
+ }
542
+ /**
543
+ * Create `router.verb()` methods, where *verb* is one of the HTTP verbs such
544
+ * as `router.get()` or `router.post()`.
545
+ *
546
+ * Match URL patterns to callback functions or controller actions using `router.verb()`,
547
+ * where **verb** is one of the HTTP verbs such as `router.get()` or `router.post()`.
548
+ *
549
+ * Additionally, `router.all()` can be used to match against all methods.
550
+ *
551
+ * ```javascript
552
+ * router
553
+ * .get('/', (ctx, next) => {
554
+ * ctx.body = 'Hello World!';
555
+ * })
556
+ * .post('/users', (ctx, next) => {
557
+ * // ...
558
+ * })
559
+ * .put('/users/:id', (ctx, next) => {
560
+ * // ...
561
+ * })
562
+ * .del('/users/:id', (ctx, next) => {
563
+ * // ...
564
+ * })
565
+ * .all('/users/:id', (ctx, next) => {
566
+ * // ...
567
+ * });
568
+ * ```
569
+ *
570
+ * When a route is matched, its path is available at `ctx._matchedRoute` and if named,
571
+ * the name is available at `ctx._matchedRouteName`
572
+ *
573
+ * Route paths will be translated to regular expressions using
574
+ * [path-to-regexp](https://github.com/pillarjs/path-to-regexp).
575
+ *
576
+ * Query strings will not be considered when matching requests.
577
+ *
578
+ * #### Named routes
579
+ *
580
+ * Routes can optionally have names. This allows generation of URLs and easy
581
+ * renaming of URLs during development.
582
+ *
583
+ * ```javascript
584
+ * router.get('user', '/users/:id', (ctx, next) => {
585
+ * // ...
586
+ * });
587
+ *
588
+ * router.url('user', 3);
589
+ * // => "/users/3"
590
+ * ```
591
+ *
592
+ * #### Multiple middleware
593
+ *
594
+ * Multiple middleware may be given:
595
+ *
596
+ * ```javascript
597
+ * router.get(
598
+ * '/users/:id',
599
+ * (ctx, next) => {
600
+ * return User.findOne(ctx.params.id).then(function(user) {
601
+ * ctx.user = user;
602
+ * next();
603
+ * });
604
+ * },
605
+ * ctx => {
606
+ * console.log(ctx.user);
607
+ * // => { id: 17, name: "Alex" }
608
+ * }
609
+ * );
610
+ * ```
611
+ *
612
+ * ### Nested routers
613
+ *
614
+ * Nesting routers is supported:
615
+ *
616
+ * ```javascript
617
+ * var forums = new Router();
618
+ * var posts = new Router();
619
+ *
620
+ * posts.get('/', (ctx, next) => {...});
621
+ * posts.get('/:pid', (ctx, next) => {...});
622
+ * forums.use('/forums/:fid/posts', posts.routes(), posts.allowedMethods());
623
+ *
624
+ * // responds to "/forums/123/posts" and "/forums/123/posts/123"
625
+ * app.use(forums.routes());
626
+ * ```
627
+ *
628
+ * #### Router prefixes
629
+ *
630
+ * Route paths can be prefixed at the router level:
631
+ *
632
+ * ```javascript
633
+ * var router = new Router({
634
+ * prefix: '/users'
635
+ * });
636
+ *
637
+ * router.get('/', ...); // responds to "/users"
638
+ * router.get('/:id', ...); // responds to "/users/:id"
639
+ * ```
640
+ *
641
+ * #### URL parameters
642
+ *
643
+ * Named route parameters are captured and added to `ctx.params`.
644
+ *
645
+ * ```javascript
646
+ * router.get('/:category/:title', (ctx, next) => {
647
+ * console.log(ctx.params);
648
+ * // => { category: 'programming', title: 'how-to-node' }
649
+ * });
650
+ * ```
651
+ *
652
+ * The [path-to-regexp](https://github.com/pillarjs/path-to-regexp) module is
653
+ * used to convert paths to regular expressions.
654
+ *
655
+ */
656
+ verb(method, nameOrPath, pathOrMiddleware, ...middleware) {
657
+ const { options, path, middlewares } = this._formatRouteParams(nameOrPath, pathOrMiddleware, middleware);
658
+ if (typeof method === 'string') {
659
+ method = [method];
660
+ }
661
+ this.register(path, method, middlewares, options);
662
+ return this;
663
+ }
664
+ all(nameOrPath, pathOrMiddleware, ...middlewares) {
665
+ return this.verb(methods, nameOrPath, pathOrMiddleware, ...middlewares);
666
+ }
667
+ acl(nameOrPath, pathOrMiddleware, ...middlewares) {
668
+ return this.verb('acl', nameOrPath, pathOrMiddleware, ...middlewares);
669
+ }
670
+ bind(nameOrPath, pathOrMiddleware, ...middlewares) {
671
+ return this.verb('bind', nameOrPath, pathOrMiddleware, ...middlewares);
672
+ }
673
+ checkout(nameOrPath, pathOrMiddleware, ...middlewares) {
674
+ return this.verb('checkout', nameOrPath, pathOrMiddleware, ...middlewares);
675
+ }
676
+ connect(nameOrPath, pathOrMiddleware, ...middlewares) {
677
+ return this.verb('connect', nameOrPath, pathOrMiddleware, ...middlewares);
678
+ }
679
+ copy(nameOrPath, pathOrMiddleware, ...middlewares) {
680
+ return this.verb('copy', nameOrPath, pathOrMiddleware, ...middlewares);
681
+ }
682
+ delete(nameOrPath, pathOrMiddleware, ...middlewares) {
683
+ return this.verb('delete', nameOrPath, pathOrMiddleware, ...middlewares);
684
+ }
685
+ del(nameOrPath, pathOrMiddleware, ...middlewares) {
686
+ return this.verb('delete', nameOrPath, pathOrMiddleware, ...middlewares);
687
+ }
688
+ get(nameOrPath, pathOrMiddleware, ...middlewares) {
689
+ return this.verb('get', nameOrPath, pathOrMiddleware, ...middlewares);
690
+ }
691
+ query(nameOrPath, pathOrMiddleware, ...middlewares) {
692
+ return this.verb('query', nameOrPath, pathOrMiddleware, ...middlewares);
693
+ }
694
+ head(nameOrPath, pathOrMiddleware, ...middlewares) {
695
+ return this.verb('head', nameOrPath, pathOrMiddleware, ...middlewares);
696
+ }
697
+ link(nameOrPath, pathOrMiddleware, ...middlewares) {
698
+ return this.verb('link', nameOrPath, pathOrMiddleware, ...middlewares);
699
+ }
700
+ lock(nameOrPath, pathOrMiddleware, ...middlewares) {
701
+ return this.verb('lock', nameOrPath, pathOrMiddleware, ...middlewares);
702
+ }
703
+ ['m-search'](nameOrPath, pathOrMiddleware, ...middlewares) {
704
+ return this.verb('m-search', nameOrPath, pathOrMiddleware, ...middlewares);
705
+ }
706
+ merge(nameOrPath, pathOrMiddleware, ...middlewares) {
707
+ return this.verb('merge', nameOrPath, pathOrMiddleware, ...middlewares);
708
+ }
709
+ mkactivity(nameOrPath, pathOrMiddleware, ...middlewares) {
710
+ return this.verb('mkactivity', nameOrPath, pathOrMiddleware, ...middlewares);
711
+ }
712
+ mkcalendar(nameOrPath, pathOrMiddleware, ...middlewares) {
713
+ return this.verb('mkcalendar', nameOrPath, pathOrMiddleware, ...middlewares);
714
+ }
715
+ mkcol(nameOrPath, pathOrMiddleware, ...middlewares) {
716
+ return this.verb('mkcol', nameOrPath, pathOrMiddleware, ...middlewares);
717
+ }
718
+ move(nameOrPath, pathOrMiddleware, ...middlewares) {
719
+ return this.verb('move', nameOrPath, pathOrMiddleware, ...middlewares);
720
+ }
721
+ notify(nameOrPath, pathOrMiddleware, ...middlewares) {
722
+ return this.verb('notify', nameOrPath, pathOrMiddleware, ...middlewares);
723
+ }
724
+ options(nameOrPath, pathOrMiddleware, ...middlewares) {
725
+ return this.verb('options', nameOrPath, pathOrMiddleware, ...middlewares);
726
+ }
727
+ patch(nameOrPath, pathOrMiddleware, ...middlewares) {
728
+ return this.verb('patch', nameOrPath, pathOrMiddleware, ...middlewares);
729
+ }
730
+ post(nameOrPath, pathOrMiddleware, ...middlewares) {
731
+ return this.verb('post', nameOrPath, pathOrMiddleware, ...middlewares);
732
+ }
733
+ propfind(nameOrPath, pathOrMiddleware, ...middlewares) {
734
+ return this.verb('propfind', nameOrPath, pathOrMiddleware, ...middlewares);
735
+ }
736
+ proppatch(nameOrPath, pathOrMiddleware, ...middlewares) {
737
+ return this.verb('proppatch', nameOrPath, pathOrMiddleware, ...middlewares);
738
+ }
739
+ purge(nameOrPath, pathOrMiddleware, ...middlewares) {
740
+ return this.verb('purge', nameOrPath, pathOrMiddleware, ...middlewares);
741
+ }
742
+ put(nameOrPath, pathOrMiddleware, ...middlewares) {
743
+ return this.verb('put', nameOrPath, pathOrMiddleware, ...middlewares);
744
+ }
745
+ rebind(nameOrPath, pathOrMiddleware, ...middlewares) {
746
+ return this.verb('rebind', nameOrPath, pathOrMiddleware, ...middlewares);
747
+ }
748
+ report(nameOrPath, pathOrMiddleware, ...middlewares) {
749
+ return this.verb('report', nameOrPath, pathOrMiddleware, ...middlewares);
750
+ }
751
+ search(nameOrPath, pathOrMiddleware, ...middlewares) {
752
+ return this.verb('search', nameOrPath, pathOrMiddleware, ...middlewares);
753
+ }
754
+ source(nameOrPath, pathOrMiddleware, ...middlewares) {
755
+ return this.verb('source', nameOrPath, pathOrMiddleware, ...middlewares);
756
+ }
757
+ subscribe(nameOrPath, pathOrMiddleware, ...middlewares) {
758
+ return this.verb('subscribe', nameOrPath, pathOrMiddleware, ...middlewares);
759
+ }
760
+ trace(nameOrPath, pathOrMiddleware, ...middlewares) {
761
+ return this.verb('trace', nameOrPath, pathOrMiddleware, ...middlewares);
762
+ }
763
+ unbind(nameOrPath, pathOrMiddleware, ...middlewares) {
764
+ return this.verb('unbind', nameOrPath, pathOrMiddleware, ...middlewares);
765
+ }
766
+ unlink(nameOrPath, pathOrMiddleware, ...middlewares) {
767
+ return this.verb('unlink', nameOrPath, pathOrMiddleware, ...middlewares);
768
+ }
769
+ unlock(nameOrPath, pathOrMiddleware, ...middlewares) {
770
+ return this.verb('unlock', nameOrPath, pathOrMiddleware, ...middlewares);
771
+ }
772
+ unsubscribe(nameOrPath, pathOrMiddleware, ...middlewares) {
773
+ return this.verb('unsubscribe', nameOrPath, pathOrMiddleware, ...middlewares);
774
+ }
775
+ }
776
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sT0FBTyxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQXdCLE1BQU0sWUFBWSxDQUFDO0FBQ3pELE9BQU8sRUFNTixNQUFNLFlBQVksQ0FBQztBQUVwQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQW9DNUMsTUFBTSxPQUFPLE1BQU07SUFDUixJQUFJLENBQWdCO0lBQ3BCLE9BQU8sQ0FBVztJQUMzQixrQkFBa0I7SUFDVCxLQUFLLEdBQVksRUFBRSxDQUFDO0lBQ3BCLE1BQU0sR0FBd0MsRUFBRSxDQUFDO0lBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0EyQkc7SUFDSCxZQUFZLElBQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQWdDRCxHQUFHLENBQUMsZ0JBQW9ELEVBQUUsR0FBRyxXQUE2QjtRQUN4Rix5QkFBeUI7UUFDekIsNkJBQTZCO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxD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