@buzola/router 0.0.4 → 0.0.5
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-tree.d.ts","sourceRoot":"","sources":["../../src/engine/route-tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAqBxF,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"route-tree.d.ts","sourceRoot":"","sources":["../../src/engine/route-tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAqBxF,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CA+C1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,UAAU,SAAK,GAAG,SAAS,EAAE,CAEnF"}
|
|
@@ -27,7 +27,8 @@ export function createRouteNode(options) {
|
|
|
27
27
|
let pattern;
|
|
28
28
|
let prefixPattern;
|
|
29
29
|
if (!isLayout || isIndex) {
|
|
30
|
-
|
|
30
|
+
const p = fullPath === '' ? '/' : fullPath;
|
|
31
|
+
pattern = new URLPattern({ pathname: p === '/' ? p : `${p}{/}?` });
|
|
31
32
|
}
|
|
32
33
|
if (isLayout && !isIndex) {
|
|
33
34
|
// Layouts get a prefix pattern that matches any path starting with their fullPath.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-tree.js","sourceRoot":"","sources":["../../src/engine/route-tree.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IAClC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,GAAG,CAAA;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IAClD,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,MAAc,EAAE,KAAa;IAC/C,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACvD,MAAM,IAAI,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAA;IAC3D,OAAO,IAAI,GAAG,OAAO,CAAA;AACtB,CAAC;AAaD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC9D,MAAM,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,EAAE,EACb,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,GACf,GAAG,OAAO,CAAA;IAEX,yEAAyE;IACzE,2DAA2D;IAC3D,IAAI,OAA+B,CAAA;IACnC,IAAI,aAAqC,CAAA;IACzC,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"route-tree.js","sourceRoot":"","sources":["../../src/engine/route-tree.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IAClC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,GAAG,CAAA;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IAClD,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,MAAc,EAAE,KAAa;IAC/C,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACvD,MAAM,IAAI,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAA;IAC3D,OAAO,IAAI,GAAG,OAAO,CAAA;AACtB,CAAC;AAaD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC9D,MAAM,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,GAAG,EAAE,EACb,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,GACf,GAAG,OAAO,CAAA;IAEX,yEAAyE;IACzE,2DAA2D;IAC3D,IAAI,OAA+B,CAAA;IACnC,IAAI,aAAqC,CAAA;IACzC,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC1C,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,mFAAmF;QACnF,4EAA4E;QAC5E,MAAM,MAAM,GAAG,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;QACnE,aAAa,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,EAAE,CAAC,CAAA;IAC5F,CAAC;IAED,MAAM,IAAI,GAAc;QACvB,EAAE,EAAE,SAAS,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1D,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;QACzB,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;QACjC,OAAO;QACP,aAAa;QACb,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,OAAO;KACP,CAAA;IAED,mCAAmC;IACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAsB,EAAE,UAAU,GAAG,EAAE;IACrE,OAAO,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB,EAAE,UAAkB;IAClE,MAAM,KAAK,GAAgB,EAAE,CAAA;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QACzD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAA;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAA;QAE5F,IAAI,QAAgB,CAAA;QACpB,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAA;QAC5B,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACpB,QAAQ,GAAG,UAAU,IAAI,GAAG,CAAA;QAC7B,CAAC;aAAM,CAAC;YACP,QAAQ,GAAG,SAAS,CAAC,UAAU,IAAI,GAAG,EAAE,OAAO,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;YAC/B,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;YAClF,CAAC,CAAC,EAAE,CAAA;QAEL,MAAM,IAAI,GAAG,eAAe,CAAC;YAC5B,IAAI,EAAE,OAAO;YACb,QAAQ;YACR,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ;YACR,QAAQ;YACR,OAAO;SACP,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -116,6 +116,35 @@ describe('matchRoutes', () => {
|
|
|
116
116
|
expect(matches).toBeNull()
|
|
117
117
|
})
|
|
118
118
|
|
|
119
|
+
it('matches routes with trailing slash', () => {
|
|
120
|
+
const tree = createTestTree([
|
|
121
|
+
{ path: '/about', component: dummyComponent },
|
|
122
|
+
])
|
|
123
|
+
|
|
124
|
+
const matches = matchRoutes(tree, new URL('http://localhost/about/'))
|
|
125
|
+
expect(matches).not.toBeNull()
|
|
126
|
+
expect(matches).toHaveLength(1)
|
|
127
|
+
expect(matches![0].node.fullPath).toBe('/about')
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
it('matches nested routes with trailing slash', () => {
|
|
131
|
+
const tree = createTestTree([
|
|
132
|
+
{
|
|
133
|
+
path: '/users',
|
|
134
|
+
component: dummyComponent,
|
|
135
|
+
isLayout: true,
|
|
136
|
+
children: [
|
|
137
|
+
{ path: '/:userId', component: dummyComponent },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
])
|
|
141
|
+
|
|
142
|
+
const matches = matchRoutes(tree, new URL('http://localhost/users/42/'))
|
|
143
|
+
expect(matches).not.toBeNull()
|
|
144
|
+
expect(matches).toHaveLength(2)
|
|
145
|
+
expect(matches![1].params).toEqual({ userId: '42' })
|
|
146
|
+
})
|
|
147
|
+
|
|
119
148
|
it('does not match partial paths', () => {
|
|
120
149
|
const tree = createTestTree([
|
|
121
150
|
{ path: '/about', component: dummyComponent },
|
package/src/engine/route-tree.ts
CHANGED
|
@@ -50,7 +50,8 @@ export function createRouteNode(options: CreateRouteNodeOptions): RouteNode {
|
|
|
50
50
|
let pattern: URLPattern | undefined
|
|
51
51
|
let prefixPattern: URLPattern | undefined
|
|
52
52
|
if (!isLayout || isIndex) {
|
|
53
|
-
|
|
53
|
+
const p = fullPath === '' ? '/' : fullPath
|
|
54
|
+
pattern = new URLPattern({ pathname: p === '/' ? p : `${p}{/}?` })
|
|
54
55
|
}
|
|
55
56
|
if (isLayout && !isIndex) {
|
|
56
57
|
// Layouts get a prefix pattern that matches any path starting with their fullPath.
|