Skip to content

Commit d287e70

Browse files
authored
route-pattern: bench types against routes from kentcdodds/mediarss (#11052)
1 parent d7bbd9a commit d287e70

File tree

5 files changed

+248
-16
lines changed

5 files changed

+248
-16
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/** From https://github.com/kentcdodds/mediarss/blob/main/app/config/routes.ts */
2+
export const routes = {
3+
feed: '/feed/:token',
4+
media: '/media/:token/*path',
5+
art: '/art/:token/*path',
6+
// OAuth routes (public)
7+
oauthToken: '/oauth/token',
8+
oauthJwks: '/oauth/jwks',
9+
oauthRegister: '/oauth/register',
10+
oauthServerMetadata: '/.well-known/oauth-authorization-server',
11+
// MCP routes
12+
mcp: '/mcp',
13+
mcpProtectedResource: '/.well-known/oauth-protected-resource/mcp',
14+
mcpWidget: '/mcp/widget/:token/*path',
15+
// Admin routes
16+
adminHealth: '/admin/health',
17+
adminApiVersion: '/admin/api/version',
18+
adminAuthorize: '/admin/authorize',
19+
admin: '/admin',
20+
adminCatchAll: '/admin/*path',
21+
adminApiFeeds: '/admin/api/feeds',
22+
adminApiDirectories: '/admin/api/directories',
23+
adminApiBrowse: '/admin/api/browse',
24+
adminApiCreateDirectoryFeed: '/admin/api/feeds/directory',
25+
adminApiCreateCuratedFeed: '/admin/api/feeds/curated',
26+
adminApiFeed: '/admin/api/feeds/:id',
27+
adminApiFeedTokens: '/admin/api/feeds/:id/tokens',
28+
adminApiFeedItems: '/admin/api/feeds/:id/items',
29+
adminApiFeedArtwork: '/admin/api/feeds/:id/artwork',
30+
adminApiToken: '/admin/api/tokens/:token',
31+
adminApiMedia: '/admin/api/media',
32+
adminApiMediaAssignments: '/admin/api/media/assignments',
33+
adminApiMediaDetail: '/admin/api/media/*path',
34+
adminApiMediaMetadata: '/admin/api/media/*path/metadata',
35+
adminApiMediaStream: '/admin/api/media-stream/*path',
36+
adminApiMediaUpload: '/admin/api/media/upload',
37+
adminApiArtwork: '/admin/api/artwork/*path',
38+
} as const
Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,58 @@
11
import { bench } from '@ark/attest'
2-
import { RoutePattern, type HrefArgs } from '@remix-run/route-pattern'
2+
import { RoutePattern } from '@remix-run/route-pattern'
33

4-
bench('href', () => {
4+
bench.baseline(() => {
5+
let pattern = new RoutePattern('/')
6+
pattern.href()
7+
})
8+
9+
bench('href > simple route', () => {
510
let pattern = new RoutePattern('/posts/:id')
611
pattern.href({ id: '123' })
7-
}).types([1344, 'instantiations'])
12+
}).types([1171, 'instantiations'])
13+
14+
bench('href > complex route', () => {
15+
let pattern = new RoutePattern('/api(/v:major(.:minor))/*path/help')
16+
pattern.href({ major: '1', minor: '2', path: 'users', help: 'help' })
17+
}).types([4575, 'instantiations'])
18+
19+
bench('href > mediarss', () => {
20+
type Route = keyof typeof import('../routes/mediarss.ts').routes
21+
let routes: { [route in Route]: RoutePattern<route> } = {} as any
822

9-
bench('HrefArgs', () => {
10-
type _ = HrefArgs<'/posts/:id'>
11-
}).types([1059, 'instantiations'])
23+
routes.feed.href({ token: '123' })
24+
routes.media.href({ token: '123', path: 'users' })
25+
routes.art.href({ token: '123', path: 'users' })
26+
// OAuth routes (public)
27+
routes.oauthToken.href()
28+
routes.oauthJwks.href()
29+
routes.oauthRegister.href()
30+
routes.oauthServerMetadata.href()
31+
// MCP routes
32+
routes.mcp.href()
33+
routes.mcpProtectedResource.href()
34+
routes.mcpWidget.href({ token: '123', path: 'users' })
35+
// Admin routes
36+
routes.adminHealth.href()
37+
routes.adminApiVersion.href()
38+
routes.adminAuthorize.href()
39+
routes.admin.href()
40+
routes.adminCatchAll.href({ path: 'users' })
41+
routes.adminApiFeeds.href()
42+
routes.adminApiDirectories.href()
43+
routes.adminApiBrowse.href()
44+
routes.adminApiCreateDirectoryFeed.href()
45+
routes.adminApiCreateCuratedFeed.href()
46+
routes.adminApiFeed.href({ id: '123' })
47+
routes.adminApiFeedTokens.href({ id: '123' })
48+
routes.adminApiFeedItems.href({ id: '123' })
49+
routes.adminApiFeedArtwork.href({ id: '123' })
50+
routes.adminApiToken.href({ token: '123' })
51+
routes.adminApiMedia.href()
52+
routes.adminApiMediaAssignments.href()
53+
routes.adminApiMediaDetail.href({ path: 'users' })
54+
routes.adminApiMediaMetadata.href({ path: 'users' })
55+
routes.adminApiMediaStream.href({ path: 'users' })
56+
routes.adminApiMediaUpload.href()
57+
routes.adminApiArtwork.href({ path: 'users' })
58+
}).types([39583, 'instantiations'])
Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,58 @@
11
import { bench } from '@ark/attest'
22
import { RoutePattern, type Join } from '@remix-run/route-pattern'
33

4+
bench.baseline(() => {
5+
let pattern = new RoutePattern('/')
6+
pattern.join('/other')
7+
})
8+
49
bench('join', () => {
510
let pattern = new RoutePattern('/posts/:id')
611
pattern.join('/comments/:commentId')
7-
}).types([2704, 'instantiations'])
12+
}).types([2445, 'instantiations'])
813

914
bench('Join', () => {
1015
type _ = Join<'/posts/:id', '/comments/:commentId'>
11-
}).types([2628, 'instantiations'])
16+
}).types([2399, 'instantiations'])
17+
18+
bench('join > mediarss', () => {
19+
const other = '/comments/:commentId'
20+
type Route = keyof typeof import('../routes/mediarss.ts').routes
21+
let routes: { [route in Route]: RoutePattern<route> } = {} as any
22+
23+
routes.feed.join(other)
24+
routes.media.join(other)
25+
routes.art.join(other)
26+
// OAuth routes (public)
27+
routes.oauthToken.join(other)
28+
routes.oauthJwks.join(other)
29+
routes.oauthRegister.join(other)
30+
routes.oauthServerMetadata.join(other)
31+
// MCP routes
32+
routes.mcp.join(other)
33+
routes.mcpProtectedResource.join(other)
34+
routes.mcpWidget.join(other)
35+
// Admin routes
36+
routes.adminHealth.join(other)
37+
routes.adminApiVersion.join(other)
38+
routes.adminAuthorize.join(other)
39+
routes.admin.join(other)
40+
routes.adminCatchAll.join(other)
41+
routes.adminApiFeeds.join(other)
42+
routes.adminApiDirectories.join(other)
43+
routes.adminApiBrowse.join(other)
44+
routes.adminApiCreateDirectoryFeed.join(other)
45+
routes.adminApiCreateCuratedFeed.join(other)
46+
routes.adminApiFeed.join(other)
47+
routes.adminApiFeedTokens.join(other)
48+
routes.adminApiFeedItems.join(other)
49+
routes.adminApiFeedArtwork.join(other)
50+
routes.adminApiToken.join(other)
51+
routes.adminApiMedia.join(other)
52+
routes.adminApiMediaAssignments.join(other)
53+
routes.adminApiMediaDetail.join(other)
54+
routes.adminApiMediaMetadata.join(other)
55+
routes.adminApiMediaStream.join(other)
56+
routes.adminApiMediaUpload.join(other)
57+
routes.adminApiArtwork.join(other)
58+
}).types([44665, 'instantiations'])
Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,57 @@
11
import { bench } from '@ark/attest'
22
import { RoutePattern } from '@remix-run/route-pattern'
33

4-
bench('new RoutePattern', () => {
5-
new RoutePattern('/posts/:id')
4+
bench.baseline(() => {
5+
new RoutePattern('/')
6+
})
7+
8+
bench('new > simple route', () => {
9+
let pattern = new RoutePattern('/posts/:id')
10+
pattern.source
11+
}).types([3, 'instantiations'])
12+
13+
bench('new > complex route', () => {
14+
let pattern = new RoutePattern('/api(/v:major(.:minor))/*path/help')
15+
pattern.source
616
}).types([3, 'instantiations'])
17+
18+
bench('new > mediarss', () => {
19+
type Route = keyof typeof import('../routes/mediarss.ts').routes
20+
let routes: { [route in Route]: RoutePattern<route> } = {} as any
21+
22+
routes.feed
23+
routes.media
24+
routes.art
25+
// OAuth routes (public)
26+
routes.oauthToken
27+
routes.oauthJwks
28+
routes.oauthRegister
29+
routes.oauthServerMetadata
30+
// MCP routes
31+
routes.mcp
32+
routes.mcpProtectedResource
33+
routes.mcpWidget
34+
// Admin routes
35+
routes.adminHealth
36+
routes.adminApiVersion
37+
routes.adminAuthorize
38+
routes.admin
39+
routes.adminCatchAll
40+
routes.adminApiFeeds
41+
routes.adminApiDirectories
42+
routes.adminApiBrowse
43+
routes.adminApiCreateDirectoryFeed
44+
routes.adminApiCreateCuratedFeed
45+
routes.adminApiFeed
46+
routes.adminApiFeedTokens
47+
routes.adminApiFeedItems
48+
routes.adminApiFeedArtwork
49+
routes.adminApiToken
50+
routes.adminApiMedia
51+
routes.adminApiMediaAssignments
52+
routes.adminApiMediaDetail
53+
routes.adminApiMediaMetadata
54+
routes.adminApiMediaStream
55+
routes.adminApiMediaUpload
56+
routes.adminApiArtwork
57+
}).types([64, 'instantiations'])
Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,61 @@
11
import { bench } from '@ark/attest'
22
import { RoutePattern, type Params } from '@remix-run/route-pattern'
33

4-
bench('params', () => {
4+
bench.baseline(() => {
5+
let pattern = new RoutePattern('/:var/*wild')
6+
let match = pattern.match('')!
7+
match.params
8+
})
9+
10+
bench('params > simple route', () => {
511
let pattern = new RoutePattern('/posts/:id')
612
let match = pattern.match('https://example.com/posts/123')
7-
match?.params
8-
}).types([1197, 'instantiations'])
13+
match?.params.id
14+
}).types([762, 'instantiations'])
15+
16+
bench('params > complex route', () => {
17+
let pattern = new RoutePattern('/api(/v:major(.:minor))/*path/help')
18+
pattern.match('https://example.com/api/v1/users/123')?.params
19+
}).types([3804, 'instantiations'])
20+
21+
bench('params > mediarss', () => {
22+
type Route = keyof typeof import('../routes/mediarss.ts').routes
23+
let routes: { [route in Route]: RoutePattern<route> } = {} as any
24+
let url: URL = {} as any
925

10-
bench('Params', () => {
11-
type _ = Params<'/posts/:id'>
12-
}).types([1184, 'instantiations'])
26+
routes.feed.match(url)?.params
27+
routes.media.match(url)?.params
28+
routes.art.match(url)?.params
29+
// OAuth routes (public)
30+
routes.oauthToken.match(url)?.params
31+
routes.oauthJwks.match(url)?.params
32+
routes.oauthRegister.match(url)?.params
33+
routes.oauthServerMetadata.match(url)?.params
34+
// MCP routes
35+
routes.mcp.match(url)?.params
36+
routes.mcpProtectedResource.match(url)?.params
37+
routes.mcpWidget.match(url)?.params
38+
// Admin routes
39+
routes.adminHealth.match(url)?.params
40+
routes.adminApiVersion.match(url)?.params
41+
routes.adminAuthorize.match(url)?.params
42+
routes.admin.match(url)?.params
43+
routes.adminCatchAll.match(url)?.params
44+
routes.adminApiFeeds.match(url)?.params
45+
routes.adminApiDirectories.match(url)?.params
46+
routes.adminApiBrowse.match(url)?.params
47+
routes.adminApiCreateDirectoryFeed.match(url)?.params
48+
routes.adminApiCreateCuratedFeed.match(url)?.params
49+
routes.adminApiFeed.match(url)?.params
50+
routes.adminApiFeedTokens.match(url)?.params
51+
routes.adminApiFeedItems.match(url)?.params
52+
routes.adminApiFeedArtwork.match(url)?.params
53+
routes.adminApiToken.match(url)?.params
54+
routes.adminApiMedia.match(url)?.params
55+
routes.adminApiMediaAssignments.match(url)?.params
56+
routes.adminApiMediaDetail.match(url)?.params
57+
routes.adminApiMediaMetadata.match(url)?.params
58+
routes.adminApiMediaStream.match(url)?.params
59+
routes.adminApiMediaUpload.match(url)?.params
60+
routes.adminApiArtwork.match(url)?.params
61+
}).types([39534, 'instantiations'])

0 commit comments

Comments
 (0)