@eggjs/router 3.0.5 → 4.0.0-beta.16

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