@prairielearn/express-list-endpoints 1.0.8 → 1.0.10
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/CHANGELOG.md +12 -0
- package/dist/index.test.js +24 -24
- package/dist/index.test.js.map +1 -1
- package/package.json +7 -19
- package/src/index.test.ts +24 -24
- package/tsconfig.json +1 -1
- package/vitest.config.ts +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @prairielearn/express-list-endpoints
|
|
2
2
|
|
|
3
|
+
## 1.0.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- be4444e: Upgrade all JavaScript dependencies
|
|
8
|
+
|
|
9
|
+
## 1.0.9
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- cec09b5: Upgrade all JavaScript dependencies
|
|
14
|
+
|
|
3
15
|
## 1.0.8
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/index.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { assert } from 'chai';
|
|
2
1
|
import express from 'express';
|
|
2
|
+
import { assert, beforeAll, describe, it } from 'vitest';
|
|
3
3
|
import listEndpoints, {} from '../src/index.js';
|
|
4
4
|
function assertResult(endpoints) {
|
|
5
5
|
assert.isArray(endpoints);
|
|
@@ -23,7 +23,7 @@ function assertResult(endpoints) {
|
|
|
23
23
|
describe('listEndpoints', () => {
|
|
24
24
|
describe('when called with non configured app', () => {
|
|
25
25
|
let endpoints;
|
|
26
|
-
|
|
26
|
+
beforeAll(() => {
|
|
27
27
|
const app = express();
|
|
28
28
|
endpoints = listEndpoints(app);
|
|
29
29
|
});
|
|
@@ -34,7 +34,7 @@ describe('listEndpoints', () => {
|
|
|
34
34
|
});
|
|
35
35
|
describe('when called over an app', () => {
|
|
36
36
|
let endpoints;
|
|
37
|
-
|
|
37
|
+
beforeAll(() => {
|
|
38
38
|
const app = express();
|
|
39
39
|
app
|
|
40
40
|
.route('/')
|
|
@@ -63,7 +63,7 @@ describe('listEndpoints', () => {
|
|
|
63
63
|
});
|
|
64
64
|
describe('when called over a router', () => {
|
|
65
65
|
let endpoints;
|
|
66
|
-
|
|
66
|
+
beforeAll(() => {
|
|
67
67
|
const router = express.Router();
|
|
68
68
|
router
|
|
69
69
|
.route('/')
|
|
@@ -92,7 +92,7 @@ describe('listEndpoints', () => {
|
|
|
92
92
|
});
|
|
93
93
|
describe('when called over an app with mounted routers', () => {
|
|
94
94
|
let endpoints;
|
|
95
|
-
|
|
95
|
+
beforeAll(() => {
|
|
96
96
|
const app = express();
|
|
97
97
|
const router = express.Router();
|
|
98
98
|
app
|
|
@@ -122,7 +122,7 @@ describe('listEndpoints', () => {
|
|
|
122
122
|
});
|
|
123
123
|
describe('and some of the routers has the option `mergeParams`', () => {
|
|
124
124
|
let endpoints;
|
|
125
|
-
|
|
125
|
+
beforeAll(() => {
|
|
126
126
|
const app = express();
|
|
127
127
|
const router = express.Router({ mergeParams: true });
|
|
128
128
|
router.get('/:id/friends', (_req, res) => {
|
|
@@ -137,7 +137,7 @@ describe('listEndpoints', () => {
|
|
|
137
137
|
});
|
|
138
138
|
describe('and also has a sub-router on the router', () => {
|
|
139
139
|
let endpoints;
|
|
140
|
-
|
|
140
|
+
beforeAll(() => {
|
|
141
141
|
const app = express();
|
|
142
142
|
const router = express.Router({ mergeParams: true });
|
|
143
143
|
const subRouter = express.Router();
|
|
@@ -158,7 +158,7 @@ describe('listEndpoints', () => {
|
|
|
158
158
|
describe('when the defined routes', () => {
|
|
159
159
|
describe('contains underscores', () => {
|
|
160
160
|
let endpoints;
|
|
161
|
-
|
|
161
|
+
beforeAll(() => {
|
|
162
162
|
const router = express.Router();
|
|
163
163
|
router.get('/some_route', (_req, res) => {
|
|
164
164
|
res.end();
|
|
@@ -180,7 +180,7 @@ describe('listEndpoints', () => {
|
|
|
180
180
|
});
|
|
181
181
|
describe('contains hyphens', () => {
|
|
182
182
|
let endpoints;
|
|
183
|
-
|
|
183
|
+
beforeAll(() => {
|
|
184
184
|
const router = express.Router();
|
|
185
185
|
router.get('/some-route', (_req, res) => {
|
|
186
186
|
res.end();
|
|
@@ -202,7 +202,7 @@ describe('listEndpoints', () => {
|
|
|
202
202
|
});
|
|
203
203
|
describe('contains dots', () => {
|
|
204
204
|
let endpoints;
|
|
205
|
-
|
|
205
|
+
beforeAll(() => {
|
|
206
206
|
const router = express.Router();
|
|
207
207
|
router.get('/some.route', (_req, res) => {
|
|
208
208
|
res.end();
|
|
@@ -224,7 +224,7 @@ describe('listEndpoints', () => {
|
|
|
224
224
|
});
|
|
225
225
|
describe('contains multiple different chars', () => {
|
|
226
226
|
let endpoints;
|
|
227
|
-
|
|
227
|
+
beforeAll(() => {
|
|
228
228
|
const router = express.Router();
|
|
229
229
|
router.get('/s0m3_r.oute', (_req, res) => {
|
|
230
230
|
res.end();
|
|
@@ -247,7 +247,7 @@ describe('listEndpoints', () => {
|
|
|
247
247
|
});
|
|
248
248
|
describe('when called over a mounted router with only root path', () => {
|
|
249
249
|
let endpoints;
|
|
250
|
-
|
|
250
|
+
beforeAll(() => {
|
|
251
251
|
const app = express();
|
|
252
252
|
const router = express.Router();
|
|
253
253
|
router.get('/', (_req, res) => {
|
|
@@ -265,7 +265,7 @@ describe('listEndpoints', () => {
|
|
|
265
265
|
});
|
|
266
266
|
describe('when called over a multi-level base route', () => {
|
|
267
267
|
let endpoints;
|
|
268
|
-
|
|
268
|
+
beforeAll(() => {
|
|
269
269
|
const app = express();
|
|
270
270
|
const router = express.Router();
|
|
271
271
|
router.get('/my/path', (_req, res) => {
|
|
@@ -282,7 +282,7 @@ describe('listEndpoints', () => {
|
|
|
282
282
|
});
|
|
283
283
|
describe('with params', () => {
|
|
284
284
|
let endpoints;
|
|
285
|
-
|
|
285
|
+
beforeAll(() => {
|
|
286
286
|
const app = express();
|
|
287
287
|
const router = express.Router();
|
|
288
288
|
router.get('/users/:id', (_req, res) => {
|
|
@@ -302,7 +302,7 @@ describe('listEndpoints', () => {
|
|
|
302
302
|
});
|
|
303
303
|
describe('with params in middle of the pattern', () => {
|
|
304
304
|
let endpoints;
|
|
305
|
-
|
|
305
|
+
beforeAll(() => {
|
|
306
306
|
const app = express();
|
|
307
307
|
const router = express.Router();
|
|
308
308
|
router.get('/super/users/:id/friends', (_req, res) => {
|
|
@@ -319,7 +319,7 @@ describe('listEndpoints', () => {
|
|
|
319
319
|
});
|
|
320
320
|
describe('when called over a route with params', () => {
|
|
321
321
|
let endpoints;
|
|
322
|
-
|
|
322
|
+
beforeAll(() => {
|
|
323
323
|
const app = express();
|
|
324
324
|
app.get('/users/:id', (_req, res) => {
|
|
325
325
|
res.end();
|
|
@@ -333,7 +333,7 @@ describe('listEndpoints', () => {
|
|
|
333
333
|
});
|
|
334
334
|
describe('when called over a route with params in middle of the pattern', () => {
|
|
335
335
|
let endpoints;
|
|
336
|
-
|
|
336
|
+
beforeAll(() => {
|
|
337
337
|
const app = express();
|
|
338
338
|
app.get('/users/:id/friends', (_req, res) => {
|
|
339
339
|
res.end();
|
|
@@ -347,7 +347,7 @@ describe('listEndpoints', () => {
|
|
|
347
347
|
});
|
|
348
348
|
describe('when called over a route with multiple methods with "/" path defined', () => {
|
|
349
349
|
let endpoints;
|
|
350
|
-
|
|
350
|
+
beforeAll(() => {
|
|
351
351
|
const router = express.Router();
|
|
352
352
|
router
|
|
353
353
|
.post('/test', (_req, res) => {
|
|
@@ -370,7 +370,7 @@ describe('listEndpoints', () => {
|
|
|
370
370
|
});
|
|
371
371
|
describe('when called with middlewares', () => {
|
|
372
372
|
let endpoints;
|
|
373
|
-
|
|
373
|
+
beforeAll(() => {
|
|
374
374
|
const router = express.Router();
|
|
375
375
|
const exampleMiddleware = () => { };
|
|
376
376
|
router.post('/test', [
|
|
@@ -393,7 +393,7 @@ describe('listEndpoints', () => {
|
|
|
393
393
|
});
|
|
394
394
|
describe('when called with an array of paths', () => {
|
|
395
395
|
let endpoints;
|
|
396
|
-
|
|
396
|
+
beforeAll(() => {
|
|
397
397
|
const app = express();
|
|
398
398
|
const router = express.Router();
|
|
399
399
|
app.get(['/one', '/two'], (_req, res) => {
|
|
@@ -415,7 +415,7 @@ describe('listEndpoints', () => {
|
|
|
415
415
|
});
|
|
416
416
|
describe('when called with an app with a mounted sub-app', () => {
|
|
417
417
|
let endpoints;
|
|
418
|
-
|
|
418
|
+
beforeAll(() => {
|
|
419
419
|
const app = express();
|
|
420
420
|
const subApp = express();
|
|
421
421
|
app.get('/', (_req, res) => {
|
|
@@ -439,7 +439,7 @@ describe('listEndpoints', () => {
|
|
|
439
439
|
});
|
|
440
440
|
describe('when called with route params with regexp', () => {
|
|
441
441
|
let endpoints;
|
|
442
|
-
|
|
442
|
+
beforeAll(() => {
|
|
443
443
|
const app = express();
|
|
444
444
|
app.get('/foo/:item_id(\\d+)/bar', (_req, res) => {
|
|
445
445
|
res.end();
|
|
@@ -455,7 +455,7 @@ describe('listEndpoints', () => {
|
|
|
455
455
|
});
|
|
456
456
|
describe('when called with a route with multiple params with regexp', () => {
|
|
457
457
|
let endpoints;
|
|
458
|
-
|
|
458
|
+
beforeAll(() => {
|
|
459
459
|
const app = express();
|
|
460
460
|
app.get('/foo/bar/:baz_id(\\d+)/:biz_id(\\d+)', (_req, res) => {
|
|
461
461
|
res.end();
|
|
@@ -471,7 +471,7 @@ describe('listEndpoints', () => {
|
|
|
471
471
|
});
|
|
472
472
|
describe('supports regexp validators for params in subapp', () => {
|
|
473
473
|
let endpoints;
|
|
474
|
-
|
|
474
|
+
beforeAll(() => {
|
|
475
475
|
const app = express();
|
|
476
476
|
const subApp = express.Router();
|
|
477
477
|
subApp.get('/baz/:biz_id(\\d+)', (_req, res) => {
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from 'chai';\nimport express from 'express';\n\nimport listEndpoints, { type Endpoint } from '../src/index.js';\n\nfunction assertResult(endpoints: Endpoint[]) {\n assert.isArray(endpoints);\n assert.lengthOf(endpoints, 2);\n\n endpoints.forEach((endpoint) => {\n assert.typeOf(endpoint, 'object');\n\n assert.typeOf(endpoint.path, 'string');\n assert.include(endpoint.path, '/');\n\n assert.isArray(endpoint.methods);\n endpoint.methods.forEach((method) => {\n assert.typeOf(method, 'string');\n assert.equal(method, method.toUpperCase());\n assert.notEqual(method, '_ALL');\n });\n\n assert.isArray(endpoint.middlewares);\n endpoint.middlewares.forEach((middleware) => {\n assert.typeOf(middleware, 'string');\n });\n });\n}\n\ndescribe('listEndpoints', () => {\n describe('when called with non configured app', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n\n endpoints = listEndpoints(app);\n });\n\n it('should return an empty array', () => {\n assert.isArray(endpoints);\n assert.lengthOf(endpoints, 0);\n });\n });\n\n describe('when called over an app', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n\n app\n .route('/')\n .get((_req, res) => {\n res.end();\n })\n .all((_req, res) => {\n res.end();\n })\n .post((_req, res) => {\n res.end();\n });\n\n app\n .route('/testing')\n .all((_req, res) => {\n res.end();\n })\n .delete((_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should return an array of well formed objects', () => {\n assertResult(endpoints);\n });\n });\n\n describe('when called over a router', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n router\n .route('/')\n .get((_req, res) => {\n res.end();\n })\n .all((_req, res) => {\n res.end();\n })\n .post((_req, res) => {\n res.end();\n });\n\n router\n .route('/testing')\n .all((_req, res) => {\n res.end();\n })\n .delete((_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should return an array of well formed objects', () => {\n assertResult(endpoints);\n });\n });\n\n describe('when called over an app with mounted routers', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router();\n\n app\n .route('/testing')\n .all((_req, res) => {\n res.end();\n })\n .delete((_req, res) => {\n res.end();\n });\n\n router\n .route('/')\n .get((_req, res) => {\n res.end();\n })\n .all((_req, res) => {\n res.end();\n })\n .post((_req, res) => {\n res.end();\n });\n\n app.use('/router', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should return an array of well formed objects', () => {\n assertResult(endpoints);\n });\n\n describe('and some of the routers has the option `mergeParams`', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router({ mergeParams: true });\n\n router.get('/:id/friends', (_req, res) => {\n res.end();\n });\n\n app.use('/router', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should parse the endpoints correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/router/:id/friends');\n });\n\n describe('and also has a sub-router on the router', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router({ mergeParams: true });\n const subRouter = express.Router();\n\n subRouter.get('/', (_req, res) => {\n res.end();\n });\n\n app.use('/router', router);\n\n router.use('/:postId/sub-router', subRouter);\n\n endpoints = listEndpoints(app);\n });\n\n it('should parse the endpoints correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/router/:postId/sub-router');\n });\n });\n });\n });\n\n describe('when the defined routes', () => {\n describe('contains underscores', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n router.get('/some_route', (_req, res) => {\n res.end();\n });\n\n router.get('/some_other_router', (_req, res) => {\n res.end();\n });\n\n router.get('/__last_route__', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/some_route');\n assert.equal(endpoints[1].path, '/some_other_router');\n assert.equal(endpoints[2].path, '/__last_route__');\n });\n });\n\n describe('contains hyphens', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n router.get('/some-route', (_req, res) => {\n res.end();\n });\n\n router.get('/some-other-router', (_req, res) => {\n res.end();\n });\n\n router.get('/--last-route--', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/some-route');\n assert.equal(endpoints[1].path, '/some-other-router');\n assert.equal(endpoints[2].path, '/--last-route--');\n });\n });\n\n describe('contains dots', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n router.get('/some.route', (_req, res) => {\n res.end();\n });\n\n router.get('/some.other.router', (_req, res) => {\n res.end();\n });\n\n router.get('/..last.route..', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/some.route');\n assert.equal(endpoints[1].path, '/some.other.router');\n assert.equal(endpoints[2].path, '/..last.route..');\n });\n });\n\n describe('contains multiple different chars', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n router.get('/s0m3_r.oute', (_req, res) => {\n res.end();\n });\n\n router.get('/v1.0.0', (_req, res) => {\n res.end();\n });\n\n router.get('/not_sure.what-1m.d01ng', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/s0m3_r.oute');\n assert.equal(endpoints[1].path, '/v1.0.0');\n assert.equal(endpoints[2].path, '/not_sure.what-1m.d01ng');\n });\n });\n });\n\n describe('when called over a mounted router with only root path', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/', (_req, res) => {\n res.end();\n });\n\n app.use('/', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the list of endpoints and its methods', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/');\n assert.lengthOf(endpoints[0].methods, 1);\n assert.equal(endpoints[0].methods[0], 'GET');\n });\n });\n\n describe('when called over a multi-level base route', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/my/path', (_req, res) => {\n res.end();\n });\n\n app.use('/multi/level', router);\n app.use('/super/duper/multi/level', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 2);\n assert.equal(endpoints[0].path, '/multi/level/my/path');\n assert.equal(endpoints[1].path, '/super/duper/multi/level/my/path');\n });\n\n describe('with params', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/users/:id', (_req, res) => {\n res.end();\n });\n\n router.get('/super/users/:id', (_req, res) => {\n res.end();\n });\n\n app.use('/multi/:multiId/level/:levelId', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 2);\n assert.equal(endpoints[0].path, '/multi/:multiId/level/:levelId/users/:id');\n assert.equal(endpoints[1].path, '/multi/:multiId/level/:levelId/super/users/:id');\n });\n });\n\n describe('with params in middle of the pattern', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/super/users/:id/friends', (_req, res) => {\n res.end();\n });\n\n app.use('/multi/level', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/multi/level/super/users/:id/friends');\n });\n });\n });\n\n describe('when called over a route with params', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n\n app.get('/users/:id', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/users/:id');\n });\n });\n\n describe('when called over a route with params in middle of the pattern', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n\n app.get('/users/:id/friends', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/users/:id/friends');\n });\n });\n\n describe('when called over a route with multiple methods with \"/\" path defined', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n router\n .post('/test', (_req, res) => {\n res.end();\n })\n .delete('/test', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/test');\n });\n\n it('should retrieve the correct built methods', () => {\n assert.lengthOf(endpoints[0].methods, 2);\n assert.equal(endpoints[0].methods[0], 'POST');\n assert.equal(endpoints[0].methods[1], 'DELETE');\n });\n });\n\n describe('when called with middlewares', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const router = express.Router();\n\n const exampleMiddleware = () => {};\n\n router.post('/test', [\n exampleMiddleware,\n () => {}, // Anonymous middleware\n ]);\n\n endpoints = listEndpoints(router);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/test');\n assert.lengthOf(endpoints[0].methods, 1);\n assert.equal(endpoints[0].methods[0], 'POST');\n });\n\n it('should retrieve the correct middlewares', () => {\n assert.lengthOf(endpoints[0].middlewares, 2);\n assert.equal(endpoints[0].middlewares[0], 'exampleMiddleware');\n assert.equal(endpoints[0].middlewares[1], 'anonymous');\n });\n });\n\n describe('when called with an array of paths', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const router = express.Router();\n\n app.get(['/one', '/two'], (_req, res) => {\n res.end();\n });\n\n router.get(['/one', '/two'], (_req, res) => {\n res.end();\n });\n\n app.use(['/router', '/sub-path'], router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 4);\n assert.equal(endpoints[0].path, '/one');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[1].path, '/two');\n assert.equal(endpoints[1].methods[0], 'GET');\n });\n });\n\n describe('when called with an app with a mounted sub-app', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const subApp = express();\n\n app.get('/', (_req, res) => {\n res.end();\n });\n\n subApp.get('/', (_req, res) => {\n res.end();\n });\n\n app.use('/sub-app', subApp);\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 2);\n assert.equal(endpoints[0].path, '/');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n assert.equal(endpoints[1].path, '/sub-app');\n assert.lengthOf(endpoints[1].methods, 0);\n assert.lengthOf(endpoints[1].middlewares, 0);\n });\n });\n\n describe('when called with route params with regexp', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n\n app.get('/foo/:item_id(\\\\d+)/bar', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/foo/:item_id/bar');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n });\n });\n\n describe('when called with a route with multiple params with regexp', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n\n app.get('/foo/bar/:baz_id(\\\\d+)/:biz_id(\\\\d+)', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/foo/bar/:baz_id/:biz_id');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n });\n });\n\n describe('supports regexp validators for params in subapp', () => {\n let endpoints: Endpoint[];\n\n before(() => {\n const app = express();\n const subApp = express.Router();\n\n subApp.get('/baz/:biz_id(\\\\d+)', (_req, res) => {\n res.end();\n });\n\n app.use('/foo/bar', subApp);\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/foo/bar/baz/:biz_id');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import express from 'express';\nimport { assert, beforeAll, describe, it } from 'vitest';\n\nimport listEndpoints, { type Endpoint } from '../src/index.js';\n\nfunction assertResult(endpoints: Endpoint[]) {\n assert.isArray(endpoints);\n assert.lengthOf(endpoints, 2);\n\n endpoints.forEach((endpoint) => {\n assert.typeOf(endpoint, 'object');\n\n assert.typeOf(endpoint.path, 'string');\n assert.include(endpoint.path, '/');\n\n assert.isArray(endpoint.methods);\n endpoint.methods.forEach((method) => {\n assert.typeOf(method, 'string');\n assert.equal(method, method.toUpperCase());\n assert.notEqual(method, '_ALL');\n });\n\n assert.isArray(endpoint.middlewares);\n endpoint.middlewares.forEach((middleware) => {\n assert.typeOf(middleware, 'string');\n });\n });\n}\n\ndescribe('listEndpoints', () => {\n describe('when called with non configured app', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n\n endpoints = listEndpoints(app);\n });\n\n it('should return an empty array', () => {\n assert.isArray(endpoints);\n assert.lengthOf(endpoints, 0);\n });\n });\n\n describe('when called over an app', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n\n app\n .route('/')\n .get((_req, res) => {\n res.end();\n })\n .all((_req, res) => {\n res.end();\n })\n .post((_req, res) => {\n res.end();\n });\n\n app\n .route('/testing')\n .all((_req, res) => {\n res.end();\n })\n .delete((_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should return an array of well formed objects', () => {\n assertResult(endpoints);\n });\n });\n\n describe('when called over a router', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n router\n .route('/')\n .get((_req, res) => {\n res.end();\n })\n .all((_req, res) => {\n res.end();\n })\n .post((_req, res) => {\n res.end();\n });\n\n router\n .route('/testing')\n .all((_req, res) => {\n res.end();\n })\n .delete((_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should return an array of well formed objects', () => {\n assertResult(endpoints);\n });\n });\n\n describe('when called over an app with mounted routers', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router();\n\n app\n .route('/testing')\n .all((_req, res) => {\n res.end();\n })\n .delete((_req, res) => {\n res.end();\n });\n\n router\n .route('/')\n .get((_req, res) => {\n res.end();\n })\n .all((_req, res) => {\n res.end();\n })\n .post((_req, res) => {\n res.end();\n });\n\n app.use('/router', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should return an array of well formed objects', () => {\n assertResult(endpoints);\n });\n\n describe('and some of the routers has the option `mergeParams`', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router({ mergeParams: true });\n\n router.get('/:id/friends', (_req, res) => {\n res.end();\n });\n\n app.use('/router', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should parse the endpoints correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/router/:id/friends');\n });\n\n describe('and also has a sub-router on the router', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router({ mergeParams: true });\n const subRouter = express.Router();\n\n subRouter.get('/', (_req, res) => {\n res.end();\n });\n\n app.use('/router', router);\n\n router.use('/:postId/sub-router', subRouter);\n\n endpoints = listEndpoints(app);\n });\n\n it('should parse the endpoints correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/router/:postId/sub-router');\n });\n });\n });\n });\n\n describe('when the defined routes', () => {\n describe('contains underscores', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n router.get('/some_route', (_req, res) => {\n res.end();\n });\n\n router.get('/some_other_router', (_req, res) => {\n res.end();\n });\n\n router.get('/__last_route__', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/some_route');\n assert.equal(endpoints[1].path, '/some_other_router');\n assert.equal(endpoints[2].path, '/__last_route__');\n });\n });\n\n describe('contains hyphens', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n router.get('/some-route', (_req, res) => {\n res.end();\n });\n\n router.get('/some-other-router', (_req, res) => {\n res.end();\n });\n\n router.get('/--last-route--', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/some-route');\n assert.equal(endpoints[1].path, '/some-other-router');\n assert.equal(endpoints[2].path, '/--last-route--');\n });\n });\n\n describe('contains dots', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n router.get('/some.route', (_req, res) => {\n res.end();\n });\n\n router.get('/some.other.router', (_req, res) => {\n res.end();\n });\n\n router.get('/..last.route..', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/some.route');\n assert.equal(endpoints[1].path, '/some.other.router');\n assert.equal(endpoints[2].path, '/..last.route..');\n });\n });\n\n describe('contains multiple different chars', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n router.get('/s0m3_r.oute', (_req, res) => {\n res.end();\n });\n\n router.get('/v1.0.0', (_req, res) => {\n res.end();\n });\n\n router.get('/not_sure.what-1m.d01ng', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should parse the endpoint correctly', () => {\n assert.lengthOf(endpoints, 3);\n assert.equal(endpoints[0].path, '/s0m3_r.oute');\n assert.equal(endpoints[1].path, '/v1.0.0');\n assert.equal(endpoints[2].path, '/not_sure.what-1m.d01ng');\n });\n });\n });\n\n describe('when called over a mounted router with only root path', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/', (_req, res) => {\n res.end();\n });\n\n app.use('/', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the list of endpoints and its methods', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/');\n assert.lengthOf(endpoints[0].methods, 1);\n assert.equal(endpoints[0].methods[0], 'GET');\n });\n });\n\n describe('when called over a multi-level base route', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/my/path', (_req, res) => {\n res.end();\n });\n\n app.use('/multi/level', router);\n app.use('/super/duper/multi/level', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 2);\n assert.equal(endpoints[0].path, '/multi/level/my/path');\n assert.equal(endpoints[1].path, '/super/duper/multi/level/my/path');\n });\n\n describe('with params', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/users/:id', (_req, res) => {\n res.end();\n });\n\n router.get('/super/users/:id', (_req, res) => {\n res.end();\n });\n\n app.use('/multi/:multiId/level/:levelId', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 2);\n assert.equal(endpoints[0].path, '/multi/:multiId/level/:levelId/users/:id');\n assert.equal(endpoints[1].path, '/multi/:multiId/level/:levelId/super/users/:id');\n });\n });\n\n describe('with params in middle of the pattern', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router();\n\n router.get('/super/users/:id/friends', (_req, res) => {\n res.end();\n });\n\n app.use('/multi/level', router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/multi/level/super/users/:id/friends');\n });\n });\n });\n\n describe('when called over a route with params', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n\n app.get('/users/:id', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/users/:id');\n });\n });\n\n describe('when called over a route with params in middle of the pattern', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n\n app.get('/users/:id/friends', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/users/:id/friends');\n });\n });\n\n describe('when called over a route with multiple methods with \"/\" path defined', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n router\n .post('/test', (_req, res) => {\n res.end();\n })\n .delete('/test', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(router);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/test');\n });\n\n it('should retrieve the correct built methods', () => {\n assert.lengthOf(endpoints[0].methods, 2);\n assert.equal(endpoints[0].methods[0], 'POST');\n assert.equal(endpoints[0].methods[1], 'DELETE');\n });\n });\n\n describe('when called with middlewares', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const router = express.Router();\n\n const exampleMiddleware = () => {};\n\n router.post('/test', [\n exampleMiddleware,\n () => {}, // Anonymous middleware\n ]);\n\n endpoints = listEndpoints(router);\n });\n\n it('should retrieve the correct built path', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/test');\n assert.lengthOf(endpoints[0].methods, 1);\n assert.equal(endpoints[0].methods[0], 'POST');\n });\n\n it('should retrieve the correct middlewares', () => {\n assert.lengthOf(endpoints[0].middlewares, 2);\n assert.equal(endpoints[0].middlewares[0], 'exampleMiddleware');\n assert.equal(endpoints[0].middlewares[1], 'anonymous');\n });\n });\n\n describe('when called with an array of paths', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const router = express.Router();\n\n app.get(['/one', '/two'], (_req, res) => {\n res.end();\n });\n\n router.get(['/one', '/two'], (_req, res) => {\n res.end();\n });\n\n app.use(['/router', '/sub-path'], router);\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 4);\n assert.equal(endpoints[0].path, '/one');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[1].path, '/two');\n assert.equal(endpoints[1].methods[0], 'GET');\n });\n });\n\n describe('when called with an app with a mounted sub-app', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const subApp = express();\n\n app.get('/', (_req, res) => {\n res.end();\n });\n\n subApp.get('/', (_req, res) => {\n res.end();\n });\n\n app.use('/sub-app', subApp);\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 2);\n assert.equal(endpoints[0].path, '/');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n assert.equal(endpoints[1].path, '/sub-app');\n assert.lengthOf(endpoints[1].methods, 0);\n assert.lengthOf(endpoints[1].middlewares, 0);\n });\n });\n\n describe('when called with route params with regexp', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n\n app.get('/foo/:item_id(\\\\d+)/bar', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/foo/:item_id/bar');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n });\n });\n\n describe('when called with a route with multiple params with regexp', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n\n app.get('/foo/bar/:baz_id(\\\\d+)/:biz_id(\\\\d+)', (_req, res) => {\n res.end();\n });\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/foo/bar/:baz_id/:biz_id');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n });\n });\n\n describe('supports regexp validators for params in subapp', () => {\n let endpoints: Endpoint[];\n\n beforeAll(() => {\n const app = express();\n const subApp = express.Router();\n\n subApp.get('/baz/:biz_id(\\\\d+)', (_req, res) => {\n res.end();\n });\n\n app.use('/foo/bar', subApp);\n\n endpoints = listEndpoints(app);\n });\n\n it('should list routes correctly', () => {\n assert.lengthOf(endpoints, 1);\n assert.equal(endpoints[0].path, '/foo/bar/baz/:biz_id');\n assert.equal(endpoints[0].methods[0], 'GET');\n assert.equal(endpoints[0].middlewares[0], 'anonymous');\n });\n });\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/express-list-endpoints",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,27 +12,15 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"dev": "tsc --watch --preserveWatchOutput",
|
|
15
|
-
"test": "
|
|
15
|
+
"test": "vitest run --coverage"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@prairielearn/tsconfig": "^0.0.0",
|
|
19
|
-
"@types/node": "^20.17.
|
|
20
|
-
"
|
|
21
|
-
"chai": "^5.2.0",
|
|
19
|
+
"@types/node": "^20.17.57",
|
|
20
|
+
"@vitest/coverage-v8": "^3.1.4",
|
|
22
21
|
"express": "^4.21.2",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
},
|
|
27
|
-
"c8": {
|
|
28
|
-
"reporter": [
|
|
29
|
-
"html",
|
|
30
|
-
"text-summary",
|
|
31
|
-
"cobertura"
|
|
32
|
-
],
|
|
33
|
-
"all": true,
|
|
34
|
-
"include": [
|
|
35
|
-
"src/**"
|
|
36
|
-
]
|
|
22
|
+
"tsx": "^4.19.4",
|
|
23
|
+
"typescript": "^5.8.3",
|
|
24
|
+
"vitest": "^3.1.4"
|
|
37
25
|
}
|
|
38
26
|
}
|
package/src/index.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { assert } from 'chai';
|
|
2
1
|
import express from 'express';
|
|
2
|
+
import { assert, beforeAll, describe, it } from 'vitest';
|
|
3
3
|
|
|
4
4
|
import listEndpoints, { type Endpoint } from '../src/index.js';
|
|
5
5
|
|
|
@@ -31,7 +31,7 @@ describe('listEndpoints', () => {
|
|
|
31
31
|
describe('when called with non configured app', () => {
|
|
32
32
|
let endpoints: Endpoint[];
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
beforeAll(() => {
|
|
35
35
|
const app = express();
|
|
36
36
|
|
|
37
37
|
endpoints = listEndpoints(app);
|
|
@@ -46,7 +46,7 @@ describe('listEndpoints', () => {
|
|
|
46
46
|
describe('when called over an app', () => {
|
|
47
47
|
let endpoints: Endpoint[];
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
beforeAll(() => {
|
|
50
50
|
const app = express();
|
|
51
51
|
|
|
52
52
|
app
|
|
@@ -81,7 +81,7 @@ describe('listEndpoints', () => {
|
|
|
81
81
|
describe('when called over a router', () => {
|
|
82
82
|
let endpoints: Endpoint[];
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
beforeAll(() => {
|
|
85
85
|
const router = express.Router();
|
|
86
86
|
|
|
87
87
|
router
|
|
@@ -116,7 +116,7 @@ describe('listEndpoints', () => {
|
|
|
116
116
|
describe('when called over an app with mounted routers', () => {
|
|
117
117
|
let endpoints: Endpoint[];
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
beforeAll(() => {
|
|
120
120
|
const app = express();
|
|
121
121
|
const router = express.Router();
|
|
122
122
|
|
|
@@ -153,7 +153,7 @@ describe('listEndpoints', () => {
|
|
|
153
153
|
describe('and some of the routers has the option `mergeParams`', () => {
|
|
154
154
|
let endpoints: Endpoint[];
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
beforeAll(() => {
|
|
157
157
|
const app = express();
|
|
158
158
|
const router = express.Router({ mergeParams: true });
|
|
159
159
|
|
|
@@ -174,7 +174,7 @@ describe('listEndpoints', () => {
|
|
|
174
174
|
describe('and also has a sub-router on the router', () => {
|
|
175
175
|
let endpoints: Endpoint[];
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
beforeAll(() => {
|
|
178
178
|
const app = express();
|
|
179
179
|
const router = express.Router({ mergeParams: true });
|
|
180
180
|
const subRouter = express.Router();
|
|
@@ -202,7 +202,7 @@ describe('listEndpoints', () => {
|
|
|
202
202
|
describe('contains underscores', () => {
|
|
203
203
|
let endpoints: Endpoint[];
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
beforeAll(() => {
|
|
206
206
|
const router = express.Router();
|
|
207
207
|
|
|
208
208
|
router.get('/some_route', (_req, res) => {
|
|
@@ -231,7 +231,7 @@ describe('listEndpoints', () => {
|
|
|
231
231
|
describe('contains hyphens', () => {
|
|
232
232
|
let endpoints: Endpoint[];
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
beforeAll(() => {
|
|
235
235
|
const router = express.Router();
|
|
236
236
|
|
|
237
237
|
router.get('/some-route', (_req, res) => {
|
|
@@ -260,7 +260,7 @@ describe('listEndpoints', () => {
|
|
|
260
260
|
describe('contains dots', () => {
|
|
261
261
|
let endpoints: Endpoint[];
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
beforeAll(() => {
|
|
264
264
|
const router = express.Router();
|
|
265
265
|
|
|
266
266
|
router.get('/some.route', (_req, res) => {
|
|
@@ -289,7 +289,7 @@ describe('listEndpoints', () => {
|
|
|
289
289
|
describe('contains multiple different chars', () => {
|
|
290
290
|
let endpoints: Endpoint[];
|
|
291
291
|
|
|
292
|
-
|
|
292
|
+
beforeAll(() => {
|
|
293
293
|
const router = express.Router();
|
|
294
294
|
|
|
295
295
|
router.get('/s0m3_r.oute', (_req, res) => {
|
|
@@ -319,7 +319,7 @@ describe('listEndpoints', () => {
|
|
|
319
319
|
describe('when called over a mounted router with only root path', () => {
|
|
320
320
|
let endpoints: Endpoint[];
|
|
321
321
|
|
|
322
|
-
|
|
322
|
+
beforeAll(() => {
|
|
323
323
|
const app = express();
|
|
324
324
|
const router = express.Router();
|
|
325
325
|
|
|
@@ -343,7 +343,7 @@ describe('listEndpoints', () => {
|
|
|
343
343
|
describe('when called over a multi-level base route', () => {
|
|
344
344
|
let endpoints: Endpoint[];
|
|
345
345
|
|
|
346
|
-
|
|
346
|
+
beforeAll(() => {
|
|
347
347
|
const app = express();
|
|
348
348
|
const router = express.Router();
|
|
349
349
|
|
|
@@ -366,7 +366,7 @@ describe('listEndpoints', () => {
|
|
|
366
366
|
describe('with params', () => {
|
|
367
367
|
let endpoints: Endpoint[];
|
|
368
368
|
|
|
369
|
-
|
|
369
|
+
beforeAll(() => {
|
|
370
370
|
const app = express();
|
|
371
371
|
const router = express.Router();
|
|
372
372
|
|
|
@@ -393,7 +393,7 @@ describe('listEndpoints', () => {
|
|
|
393
393
|
describe('with params in middle of the pattern', () => {
|
|
394
394
|
let endpoints: Endpoint[];
|
|
395
395
|
|
|
396
|
-
|
|
396
|
+
beforeAll(() => {
|
|
397
397
|
const app = express();
|
|
398
398
|
const router = express.Router();
|
|
399
399
|
|
|
@@ -416,7 +416,7 @@ describe('listEndpoints', () => {
|
|
|
416
416
|
describe('when called over a route with params', () => {
|
|
417
417
|
let endpoints: Endpoint[];
|
|
418
418
|
|
|
419
|
-
|
|
419
|
+
beforeAll(() => {
|
|
420
420
|
const app = express();
|
|
421
421
|
|
|
422
422
|
app.get('/users/:id', (_req, res) => {
|
|
@@ -435,7 +435,7 @@ describe('listEndpoints', () => {
|
|
|
435
435
|
describe('when called over a route with params in middle of the pattern', () => {
|
|
436
436
|
let endpoints: Endpoint[];
|
|
437
437
|
|
|
438
|
-
|
|
438
|
+
beforeAll(() => {
|
|
439
439
|
const app = express();
|
|
440
440
|
|
|
441
441
|
app.get('/users/:id/friends', (_req, res) => {
|
|
@@ -454,7 +454,7 @@ describe('listEndpoints', () => {
|
|
|
454
454
|
describe('when called over a route with multiple methods with "/" path defined', () => {
|
|
455
455
|
let endpoints: Endpoint[];
|
|
456
456
|
|
|
457
|
-
|
|
457
|
+
beforeAll(() => {
|
|
458
458
|
const router = express.Router();
|
|
459
459
|
|
|
460
460
|
router
|
|
@@ -483,7 +483,7 @@ describe('listEndpoints', () => {
|
|
|
483
483
|
describe('when called with middlewares', () => {
|
|
484
484
|
let endpoints: Endpoint[];
|
|
485
485
|
|
|
486
|
-
|
|
486
|
+
beforeAll(() => {
|
|
487
487
|
const router = express.Router();
|
|
488
488
|
|
|
489
489
|
const exampleMiddleware = () => {};
|
|
@@ -513,7 +513,7 @@ describe('listEndpoints', () => {
|
|
|
513
513
|
describe('when called with an array of paths', () => {
|
|
514
514
|
let endpoints: Endpoint[];
|
|
515
515
|
|
|
516
|
-
|
|
516
|
+
beforeAll(() => {
|
|
517
517
|
const app = express();
|
|
518
518
|
const router = express.Router();
|
|
519
519
|
|
|
@@ -542,7 +542,7 @@ describe('listEndpoints', () => {
|
|
|
542
542
|
describe('when called with an app with a mounted sub-app', () => {
|
|
543
543
|
let endpoints: Endpoint[];
|
|
544
544
|
|
|
545
|
-
|
|
545
|
+
beforeAll(() => {
|
|
546
546
|
const app = express();
|
|
547
547
|
const subApp = express();
|
|
548
548
|
|
|
@@ -573,7 +573,7 @@ describe('listEndpoints', () => {
|
|
|
573
573
|
describe('when called with route params with regexp', () => {
|
|
574
574
|
let endpoints: Endpoint[];
|
|
575
575
|
|
|
576
|
-
|
|
576
|
+
beforeAll(() => {
|
|
577
577
|
const app = express();
|
|
578
578
|
|
|
579
579
|
app.get('/foo/:item_id(\\d+)/bar', (_req, res) => {
|
|
@@ -594,7 +594,7 @@ describe('listEndpoints', () => {
|
|
|
594
594
|
describe('when called with a route with multiple params with regexp', () => {
|
|
595
595
|
let endpoints: Endpoint[];
|
|
596
596
|
|
|
597
|
-
|
|
597
|
+
beforeAll(() => {
|
|
598
598
|
const app = express();
|
|
599
599
|
|
|
600
600
|
app.get('/foo/bar/:baz_id(\\d+)/:biz_id(\\d+)', (_req, res) => {
|
|
@@ -615,7 +615,7 @@ describe('listEndpoints', () => {
|
|
|
615
615
|
describe('supports regexp validators for params in subapp', () => {
|
|
616
616
|
let endpoints: Endpoint[];
|
|
617
617
|
|
|
618
|
-
|
|
618
|
+
beforeAll(() => {
|
|
619
619
|
const app = express();
|
|
620
620
|
const subApp = express.Router();
|
|
621
621
|
|
package/tsconfig.json
CHANGED