@e280/sly 0.2.0-19 → 0.2.0-20
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/package.json +1 -1
- package/s/spa/index.barrel.ts +1 -1
- package/s/spa/plumbing/primitives.ts +10 -10
- package/s/spa/plumbing/router-core.ts +1 -1
- package/s/spa/plumbing/types.ts +15 -9
- package/x/index.html +1 -1
- package/x/spa/index.barrel.d.ts +1 -1
- package/x/spa/plumbing/primitives.d.ts +9 -9
- package/x/spa/plumbing/primitives.js.map +1 -1
- package/x/spa/plumbing/router-core.d.ts +3 -3
- package/x/spa/plumbing/router-core.js.map +1 -1
- package/x/spa/plumbing/types.d.ts +10 -9
package/package.json
CHANGED
package/s/spa/index.barrel.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
export {route} from "./plumbing/braces.js"
|
|
3
3
|
export type {Navigable} from "./plumbing/primitives.js"
|
|
4
|
-
export {RouterOptions, Hasher, Route, Routes, Navigables} from "./plumbing/types.js"
|
|
4
|
+
export {RouterOptions, Hasher, Route, Routes, Navigables, Params} from "./plumbing/types.js"
|
|
5
5
|
export {Router} from "./router.js"
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import {ev, ob} from "@e280/stz"
|
|
3
3
|
import {Op} from "../../ops/op.js"
|
|
4
|
-
import {ResolvedRoute, Route, Routes} from "./types.js"
|
|
4
|
+
import {ResolvedRoute, Route, Params, Routes} from "./types.js"
|
|
5
5
|
|
|
6
6
|
export function eraseWindowHash() {
|
|
7
7
|
const {pathname, search} = window.location
|
|
@@ -29,31 +29,31 @@ export class HashNormalizer {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export class Navigable<
|
|
32
|
+
export class Navigable<P extends any[] = any[]> {
|
|
33
33
|
static all<R extends Routes>(
|
|
34
34
|
routes: R,
|
|
35
|
-
getRoute: () => Route
|
|
36
|
-
navigate: (hash: string) => Promise<ResolvedRoute
|
|
37
|
-
): {[K in keyof R]: Navigable<R
|
|
35
|
+
getRoute: () => Route | null,
|
|
36
|
+
navigate: (hash: string) => Promise<ResolvedRoute>,
|
|
37
|
+
): {[K in keyof R]: Navigable<Params<R[K]>>} {
|
|
38
38
|
|
|
39
39
|
return ob(routes).map(route => new this(
|
|
40
40
|
route,
|
|
41
41
|
() => (getRoute() === route),
|
|
42
42
|
async(...params: any[]) => navigate(route.hasher.make(...params)),
|
|
43
|
-
))
|
|
43
|
+
)) as any
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
constructor(
|
|
47
|
-
public route: Route<
|
|
47
|
+
public route: Route<P>,
|
|
48
48
|
private isActive: () => boolean,
|
|
49
|
-
public go: (...params:
|
|
49
|
+
public go: (...params: P) => Promise<ResolvedRoute<P>>,
|
|
50
50
|
) {}
|
|
51
51
|
|
|
52
52
|
get active() {
|
|
53
53
|
return this.isActive()
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
hash(...params:
|
|
56
|
+
hash(...params: P) {
|
|
57
57
|
return this.route.hasher.make(...params)
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -61,7 +61,7 @@ export class Navigable<R extends Routes = any, K extends keyof R = any> {
|
|
|
61
61
|
export function resolveRoute<R extends Routes>(
|
|
62
62
|
hash: string,
|
|
63
63
|
routes: R,
|
|
64
|
-
): ResolvedRoute
|
|
64
|
+
): ResolvedRoute | null {
|
|
65
65
|
|
|
66
66
|
for (const key in routes) {
|
|
67
67
|
const route = routes[key]
|
|
@@ -6,7 +6,7 @@ import {Hashbearer, Navigables, ResolvedRoute, Routes} from "./types.js"
|
|
|
6
6
|
|
|
7
7
|
export class RouterCore<R extends Routes> {
|
|
8
8
|
readonly nav: Navigables<R>
|
|
9
|
-
readonly $resolved = signal<ResolvedRoute
|
|
9
|
+
readonly $resolved = signal<ResolvedRoute | null>(null)
|
|
10
10
|
|
|
11
11
|
constructor(
|
|
12
12
|
public readonly routes: R,
|
package/s/spa/plumbing/types.ts
CHANGED
|
@@ -19,21 +19,27 @@ export type Hasher<Params extends any[]> = {
|
|
|
19
19
|
make: (...params: Params) => string
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export type Route<
|
|
23
|
-
hasher: Hasher<
|
|
24
|
-
fn: (...params:
|
|
22
|
+
export type Route<P extends any[] = any[]> = {
|
|
23
|
+
hasher: Hasher<P>
|
|
24
|
+
fn: (...params: P) => Promise<Content>
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export type Routes = {[key: string]: Route
|
|
27
|
+
export type Routes = {[key: string]: Route}
|
|
28
28
|
|
|
29
|
-
export type
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
export type Params<X extends (Route | Navigable)> = (
|
|
30
|
+
X extends Route<infer P> ? P :
|
|
31
|
+
X extends Navigable<infer P> ? P :
|
|
32
|
+
never
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
export type ResolvedRoute<P extends any[] = any[]> = {
|
|
36
|
+
key: string
|
|
37
|
+
route: Route<P>
|
|
38
|
+
params: P
|
|
33
39
|
op: Op<Content>
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
export type Navigables<R extends Routes> = {
|
|
37
|
-
[K in keyof R]: Navigable<R
|
|
43
|
+
[K in keyof R]: Navigable<Params<R[K]>>
|
|
38
44
|
}
|
|
39
45
|
|
package/x/index.html
CHANGED
|
@@ -131,7 +131,7 @@ body {
|
|
|
131
131
|
<img class=icon alt="" src="/assets/favicon.png"/>
|
|
132
132
|
<h1>sly testing page</h1>
|
|
133
133
|
<p><a href="https://github.com/e280/sly">github.com/e280/sly</a></p>
|
|
134
|
-
<p class=lil>v0.2.0-
|
|
134
|
+
<p class=lil>v0.2.0-20</p>
|
|
135
135
|
|
|
136
136
|
<fastcount-element></fastcount-element>
|
|
137
137
|
<counter-component start=280 step=2>component</counter-component>
|
package/x/spa/index.barrel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { route } from "./plumbing/braces.js";
|
|
2
2
|
export type { Navigable } from "./plumbing/primitives.js";
|
|
3
|
-
export { RouterOptions, Hasher, Route, Routes, Navigables } from "./plumbing/types.js";
|
|
3
|
+
export { RouterOptions, Hasher, Route, Routes, Navigables, Params } from "./plumbing/types.js";
|
|
4
4
|
export { Router } from "./router.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ResolvedRoute, Route, Routes } from "./types.js";
|
|
1
|
+
import { ResolvedRoute, Route, Params, Routes } from "./types.js";
|
|
2
2
|
export declare function eraseWindowHash(): void;
|
|
3
3
|
export declare function normalizeHash(hash: string): string;
|
|
4
4
|
export declare class HashNormalizer {
|
|
@@ -7,16 +7,16 @@ export declare class HashNormalizer {
|
|
|
7
7
|
get hash(): string;
|
|
8
8
|
set hash(hash: string);
|
|
9
9
|
}
|
|
10
|
-
export declare class Navigable<
|
|
11
|
-
route: Route<
|
|
10
|
+
export declare class Navigable<P extends any[] = any[]> {
|
|
11
|
+
route: Route<P>;
|
|
12
12
|
private isActive;
|
|
13
|
-
go: (...params:
|
|
14
|
-
static all<R extends Routes>(routes: R, getRoute: () => Route
|
|
15
|
-
[K in keyof R]: Navigable<R
|
|
13
|
+
go: (...params: P) => Promise<ResolvedRoute<P>>;
|
|
14
|
+
static all<R extends Routes>(routes: R, getRoute: () => Route | null, navigate: (hash: string) => Promise<ResolvedRoute>): {
|
|
15
|
+
[K in keyof R]: Navigable<Params<R[K]>>;
|
|
16
16
|
};
|
|
17
|
-
constructor(route: Route<
|
|
17
|
+
constructor(route: Route<P>, isActive: () => boolean, go: (...params: P) => Promise<ResolvedRoute<P>>);
|
|
18
18
|
get active(): boolean;
|
|
19
|
-
hash(...params:
|
|
19
|
+
hash(...params: P): string;
|
|
20
20
|
}
|
|
21
|
-
export declare function resolveRoute<R extends Routes>(hash: string, routes: R): ResolvedRoute
|
|
21
|
+
export declare function resolveRoute<R extends Routes>(hash: string, routes: R): ResolvedRoute | null;
|
|
22
22
|
export declare function onHashChange(fn: (event: HashChangeEvent) => void): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../s/spa/plumbing/primitives.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAE,EAAE,EAAC,MAAM,WAAW,CAAA;AAChC,OAAO,EAAC,EAAE,EAAC,MAAM,iBAAiB,CAAA;AAGlC,MAAM,UAAU,eAAe;IAC9B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9C,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAA;AACR,CAAC;AAED,MAAM,OAAO,cAAc;IACP;IAAnB,YAAmB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEzC,IAAI,IAAI;QACP,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,IAAI,KAAK,IAAI;YAAE,eAAe,EAAE,CAAA;QACpC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,IAAY;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;IAC1B,CAAC;CACD;AAED,MAAM,OAAO,SAAS;IAeb;IACC;IACD;IAhBR,MAAM,CAAC,GAAG,CACR,MAAS,EACT,
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../s/spa/plumbing/primitives.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAE,EAAE,EAAC,MAAM,WAAW,CAAA;AAChC,OAAO,EAAC,EAAE,EAAC,MAAM,iBAAiB,CAAA;AAGlC,MAAM,UAAU,eAAe;IAC9B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9C,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAA;AACR,CAAC;AAED,MAAM,OAAO,cAAc;IACP;IAAnB,YAAmB,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEzC,IAAI,IAAI;QACP,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,IAAI,KAAK,IAAI;YAAE,eAAe,EAAE,CAAA;QACpC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,IAAY;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;IAC1B,CAAC;CACD;AAED,MAAM,OAAO,SAAS;IAeb;IACC;IACD;IAhBR,MAAM,CAAC,GAAG,CACR,MAAS,EACT,QAA4B,EAC5B,QAAkD;QAGnD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CACtC,KAAK,EACL,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,EAC5B,KAAK,EAAC,GAAG,MAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CACjE,CAAQ,CAAA;IACV,CAAC;IAED,YACQ,KAAe,EACd,QAAuB,EACxB,EAA+C;QAF/C,UAAK,GAAL,KAAK,CAAU;QACd,aAAQ,GAAR,QAAQ,CAAe;QACxB,OAAE,GAAF,EAAE,CAA6C;IACpD,CAAC;IAEJ,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACvB,CAAC;IAED,IAAI,CAAC,GAAG,MAAS;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA;IACzC,CAAC;CACD;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,MAAS;IAGV,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,MAAM;gBACN,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;aACnC,CAAA;QACF,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAoC;IAChE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAC,UAAU,EAAE,EAAE,EAAC,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -4,10 +4,10 @@ export declare class RouterCore<R extends Routes> {
|
|
|
4
4
|
readonly routes: R;
|
|
5
5
|
readonly location: Hashbearer;
|
|
6
6
|
readonly nav: Navigables<R>;
|
|
7
|
-
readonly $resolved: import("@e280/strata").SignalFn<ResolvedRoute
|
|
7
|
+
readonly $resolved: import("@e280/strata").SignalFn<ResolvedRoute | null>;
|
|
8
8
|
constructor(routes: R, location: Hashbearer);
|
|
9
9
|
get hash(): string;
|
|
10
10
|
get content(): Content | null;
|
|
11
|
-
get route():
|
|
12
|
-
refresh(hash?: string): Promise<ResolvedRoute
|
|
11
|
+
get route(): import("./types.js").Route<any[]> | null;
|
|
12
|
+
refresh(hash?: string): Promise<ResolvedRoute | null>;
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-core.js","sourceRoot":"","sources":["../../../s/spa/plumbing/router-core.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAA;AAGtE,MAAM,OAAO,UAAU;IAKJ;IACA;IALT,GAAG,CAAe;IAClB,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"router-core.js","sourceRoot":"","sources":["../../../s/spa/plumbing/router-core.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAA;AAGtE,MAAM,OAAO,UAAU;IAKJ;IACA;IALT,GAAG,CAAe;IAClB,SAAS,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IAEvD,YACkB,MAAS,EACT,QAAoB;QADpB,WAAM,GAAN,MAAM,CAAG;QACT,aAAQ,GAAR,QAAQ,CAAY;QAGrC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CACvB,MAAM,EACN,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAChB,KAAK,EAAC,IAAI,EAAC,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;YACrC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAAA;YACxD,OAAO,QAAQ,CAAA;QAChB,CAAC,CACD,CAAA;IACF,CAAC;IAED,IAAI,IAAI;QACP,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAA;IAC9C,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,IAAI,IAAI,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAa;QAC1B,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;QACjD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAChB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,QAAQ,EAAE,EAAE,CAAA;QAClB,OAAO,QAAQ,CAAA;IAChB,CAAC;CACD"}
|
|
@@ -16,19 +16,20 @@ export type Hasher<Params extends any[]> = {
|
|
|
16
16
|
parse: (hash: string) => (Params | null);
|
|
17
17
|
make: (...params: Params) => string;
|
|
18
18
|
};
|
|
19
|
-
export type Route<
|
|
20
|
-
hasher: Hasher<
|
|
21
|
-
fn: (...params:
|
|
19
|
+
export type Route<P extends any[] = any[]> = {
|
|
20
|
+
hasher: Hasher<P>;
|
|
21
|
+
fn: (...params: P) => Promise<Content>;
|
|
22
22
|
};
|
|
23
23
|
export type Routes = {
|
|
24
|
-
[key: string]: Route
|
|
24
|
+
[key: string]: Route;
|
|
25
25
|
};
|
|
26
|
-
export type
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
export type Params<X extends (Route | Navigable)> = (X extends Route<infer P> ? P : X extends Navigable<infer P> ? P : never);
|
|
27
|
+
export type ResolvedRoute<P extends any[] = any[]> = {
|
|
28
|
+
key: string;
|
|
29
|
+
route: Route<P>;
|
|
30
|
+
params: P;
|
|
30
31
|
op: Op<Content>;
|
|
31
32
|
};
|
|
32
33
|
export type Navigables<R extends Routes> = {
|
|
33
|
-
[K in keyof R]: Navigable<R
|
|
34
|
+
[K in keyof R]: Navigable<Params<R[K]>>;
|
|
34
35
|
};
|