@dreamkit/app 0.0.5 → 0.0.6
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/lib/RequestUrl.d.ts.map +1 -1
- package/lib/RequestUrl.js +2 -2
- package/lib/builders/RouteBuilder.d.ts.map +1 -1
- package/lib/builders/RouteBuilder.js +6 -1
- package/lib/utils/routing.d.ts +2 -0
- package/lib/utils/routing.d.ts.map +1 -1
- package/lib/utils/routing.js +31 -2
- package/package.json +1 -1
package/lib/RequestUrl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestUrl.d.ts","sourceRoot":"","sources":["../src/RequestUrl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RequestUrl.d.ts","sourceRoot":"","sources":["../src/RequestUrl.ts"],"names":[],"mappings":"AAGA,qBAAa,UAAU,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,GAAG;IAI7C,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,OAAO;CAKnC"}
|
package/lib/RequestUrl.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { kindApp } from "./utils/kind.js";
|
|
2
|
+
import { createRoutePathRegex } from "./utils/routing.js";
|
|
2
3
|
export class RequestUrl extends URL {
|
|
3
4
|
static {
|
|
4
5
|
kindApp(this, "RequestUrl");
|
|
5
6
|
}
|
|
6
7
|
is(...paths) {
|
|
7
|
-
|
|
8
|
-
return paths.includes(this.pathname);
|
|
8
|
+
return paths.some((path) => createRoutePathRegex(path).test(this.pathname));
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/RouteBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"RouteBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/RouteBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,12 @@ export class RouteBuilder {
|
|
|
41
41
|
path(value) {
|
|
42
42
|
if (typeof value === "string")
|
|
43
43
|
return this.clone({ path: value });
|
|
44
|
-
const params = new Proxy({}, {
|
|
44
|
+
const params = new Proxy({}, {
|
|
45
|
+
get: (_, prop) => {
|
|
46
|
+
const optional = (this.options.params?.props?.[prop]).options.optional;
|
|
47
|
+
return `:${prop}${optional ? "?" : ""}`;
|
|
48
|
+
},
|
|
49
|
+
});
|
|
45
50
|
return this.clone({ path: value(params) });
|
|
46
51
|
}
|
|
47
52
|
createRouteDefinition() {
|
package/lib/utils/routing.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ export declare function extractPathParams(path: string): {
|
|
|
2
2
|
spread: boolean;
|
|
3
3
|
name: string;
|
|
4
4
|
key: string;
|
|
5
|
+
optional?: boolean;
|
|
5
6
|
}[];
|
|
7
|
+
export declare function createRoutePathRegex(path: string): RegExp;
|
|
6
8
|
export declare function createRouteUrl(path: string, params?: Record<string, any>, base?: string): URL;
|
|
7
9
|
export declare function createRouteHref(path: string, params?: Record<string, any>): string;
|
|
8
10
|
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/utils/routing.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/utils/routing.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GACX;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,CAOtE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,UAsBhD;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,IAAI,SAAoD,OAezD;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,UAIjC"}
|
package/lib/utils/routing.js
CHANGED
|
@@ -1,14 +1,43 @@
|
|
|
1
1
|
export function extractPathParams(path) {
|
|
2
|
-
return [...path.matchAll(/([:\*])(\w+)
|
|
2
|
+
return [...path.matchAll(/([:\*])(\w+)(\?)?/g)].map((match) => ({
|
|
3
3
|
key: match[0],
|
|
4
4
|
spread: match[1] === "*",
|
|
5
5
|
name: match[2],
|
|
6
|
+
optional: match[3] === "?",
|
|
6
7
|
}));
|
|
7
8
|
}
|
|
9
|
+
export function createRoutePathRegex(path) {
|
|
10
|
+
const paramNames = extractPathParams(path);
|
|
11
|
+
let pattern = path.replace(/\//g, "\\/");
|
|
12
|
+
const optionalPattern = "([^\\/]+)?";
|
|
13
|
+
const endOptionalPattern = `\\/${optionalPattern}`;
|
|
14
|
+
const spreadPattern = "(.*)";
|
|
15
|
+
const endOptionalSpreadPattern = `\\/${spreadPattern}`;
|
|
16
|
+
for (const param of paramNames) {
|
|
17
|
+
if (param.spread) {
|
|
18
|
+
pattern = pattern.replace(param.key, spreadPattern);
|
|
19
|
+
}
|
|
20
|
+
else if (param.optional) {
|
|
21
|
+
pattern = pattern.replace(param.key, optionalPattern);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
pattern = pattern.replace(param.key, "([^\\/]+)");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (pattern.endsWith(endOptionalSpreadPattern)) {
|
|
28
|
+
pattern = pattern.slice(0, -endOptionalSpreadPattern.length) + `(\\/.*)?`;
|
|
29
|
+
}
|
|
30
|
+
else if (pattern.endsWith(endOptionalPattern)) {
|
|
31
|
+
pattern = pattern.slice(0, -endOptionalPattern.length) + `(\\/[^\\/]+)?`;
|
|
32
|
+
}
|
|
33
|
+
return new RegExp(`^${pattern}\/?$`);
|
|
34
|
+
}
|
|
8
35
|
export function createRouteUrl(path, params = {}, base = globalThis.location?.origin ?? "http://localhost") {
|
|
9
36
|
const paramNames = extractPathParams(path);
|
|
10
37
|
for (const param of paramNames)
|
|
11
|
-
path = path.replaceAll(param.key, params[param.name]);
|
|
38
|
+
path = path.replaceAll(param.key, params[param.name] ?? "");
|
|
39
|
+
if (path.length > 1 && path.endsWith("/"))
|
|
40
|
+
path = path.slice(0, -1);
|
|
12
41
|
const url = new URL(path, base);
|
|
13
42
|
for (const name in params)
|
|
14
43
|
if (!paramNames.find((param) => param.name === name))
|