@typed/navigation 0.13.5 → 0.15.0
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/dist/cjs/Blocking.js +8 -8
- package/dist/cjs/Blocking.js.map +1 -1
- package/dist/cjs/Layer.js +1 -1
- package/dist/cjs/Layer.js.map +1 -1
- package/dist/cjs/Navigation.js +66 -57
- package/dist/cjs/Navigation.js.map +1 -1
- package/dist/cjs/internal/fromWindow.js +32 -32
- package/dist/cjs/internal/fromWindow.js.map +1 -1
- package/dist/cjs/internal/memory.js +18 -20
- package/dist/cjs/internal/memory.js.map +1 -1
- package/dist/cjs/internal/shared.js +88 -88
- package/dist/cjs/internal/shared.js.map +1 -1
- package/dist/dts/Blocking.d.ts +1 -1
- package/dist/dts/Blocking.d.ts.map +1 -1
- package/dist/dts/Layer.d.ts +2 -1
- package/dist/dts/Layer.d.ts.map +1 -1
- package/dist/dts/Navigation.d.ts +123 -200
- package/dist/dts/Navigation.d.ts.map +1 -1
- package/dist/dts/internal/fromWindow.d.ts +1 -1
- package/dist/dts/internal/fromWindow.d.ts.map +1 -1
- package/dist/dts/internal/memory.d.ts +1 -1
- package/dist/dts/internal/memory.d.ts.map +1 -1
- package/dist/dts/internal/shared.d.ts +34 -68
- package/dist/dts/internal/shared.d.ts.map +1 -1
- package/dist/esm/Blocking.js +7 -7
- package/dist/esm/Blocking.js.map +1 -1
- package/dist/esm/Layer.js.map +1 -1
- package/dist/esm/Navigation.js +55 -46
- package/dist/esm/Navigation.js.map +1 -1
- package/dist/esm/internal/fromWindow.js +25 -25
- package/dist/esm/internal/fromWindow.js.map +1 -1
- package/dist/esm/internal/memory.js +15 -17
- package/dist/esm/internal/memory.js.map +1 -1
- package/dist/esm/internal/shared.js +76 -76
- package/dist/esm/internal/shared.js.map +1 -1
- package/package.json +8 -8
- package/src/Blocking.ts +21 -23
- package/src/Layer.ts +2 -1
- package/src/Navigation.ts +81 -75
- package/src/internal/fromWindow.ts +44 -47
- package/src/internal/memory.ts +17 -23
- package/src/internal/shared.ts +82 -91
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fromWindow.d.ts","sourceRoot":"","sources":["../../../src/internal/fromWindow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"fromWindow.d.ts","sourceRoot":"","sources":["../../../src/internal/fromWindow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAY1C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAG1C,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAa9D,KAAK,gBAAgB,GAAG,OAAO,0BAA0B,EAAE,UAAU,CAAA;AAKrE,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,WAAW,MAAM;QACrB,UAAU,CAAC,EAAE,gBAAgB,CAAA;KAC9B;CACF;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAkD7D,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as Layer from "effect/Layer";
|
|
2
2
|
import type { InitialMemoryOptions, MemoryOptions } from "../Layer.js";
|
|
3
3
|
import { Navigation } from "../Navigation.js";
|
|
4
4
|
export declare const memory: (options: MemoryOptions) => Layer.Layer<Navigation>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/internal/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/internal/memory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAG1C,OAAO,KAAK,EAAU,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAW7C,eAAO,MAAM,MAAM,YAAa,aAAa,KAAG,MAAM,KAAK,CAAC,UAAU,CAWnE,CAAA;AAEH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAmBzB"}
|
|
@@ -15,67 +15,41 @@ export type NavigationState = {
|
|
|
15
15
|
readonly index: number;
|
|
16
16
|
readonly transition: Option.Option<Transition>;
|
|
17
17
|
};
|
|
18
|
-
export declare const NavigationState: Schema.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
readonly key: Uuid;
|
|
38
|
-
readonly id: Uuid;
|
|
18
|
+
export declare const NavigationState: Schema.Struct<{
|
|
19
|
+
entries: Schema.Array$<Schema.Struct<{
|
|
20
|
+
id: Schema.Schema<Uuid, string, never>;
|
|
21
|
+
key: Schema.Schema<Uuid, string, never>;
|
|
22
|
+
url: Schema.transformOrFail<typeof Schema.String, Schema.instanceOf<URL>, never>;
|
|
23
|
+
state: typeof Schema.Unknown;
|
|
24
|
+
sameDocument: typeof Schema.Boolean;
|
|
25
|
+
}>>;
|
|
26
|
+
index: typeof Schema.Number;
|
|
27
|
+
transition: Schema.OptionFromNullishOr<Schema.Struct<{
|
|
28
|
+
type: Schema.Literal<["push", "replace", "reload", "traverse"]>;
|
|
29
|
+
from: Schema.Struct<{
|
|
30
|
+
id: Schema.Schema<Uuid, string, never>;
|
|
31
|
+
key: Schema.Schema<Uuid, string, never>;
|
|
32
|
+
url: Schema.transformOrFail<typeof Schema.String, Schema.instanceOf<URL>, never>;
|
|
33
|
+
state: typeof Schema.Unknown;
|
|
34
|
+
sameDocument: typeof Schema.Boolean;
|
|
35
|
+
}>;
|
|
36
|
+
to: Schema.Union<[Schema.SchemaClass<{
|
|
39
37
|
readonly url: URL;
|
|
40
38
|
readonly state: unknown;
|
|
41
39
|
readonly sameDocument: boolean;
|
|
42
|
-
}
|
|
43
|
-
readonly url: URL;
|
|
44
|
-
readonly state: unknown;
|
|
45
|
-
readonly sameDocument: boolean;
|
|
46
|
-
};
|
|
47
|
-
}>;
|
|
48
|
-
}, {
|
|
49
|
-
readonly entries: readonly {
|
|
50
|
-
readonly key: string;
|
|
51
|
-
readonly id: string;
|
|
52
|
-
readonly url: string;
|
|
53
|
-
readonly state: unknown;
|
|
54
|
-
readonly sameDocument: boolean;
|
|
55
|
-
}[];
|
|
56
|
-
readonly index: number;
|
|
57
|
-
readonly transition: {
|
|
58
|
-
readonly type: "push" | "replace" | "reload" | "traverse";
|
|
59
|
-
readonly from: {
|
|
60
|
-
readonly key: string;
|
|
61
|
-
readonly id: string;
|
|
40
|
+
}, {
|
|
62
41
|
readonly url: string;
|
|
63
42
|
readonly state: unknown;
|
|
64
43
|
readonly sameDocument: boolean;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
readonly state: unknown;
|
|
75
|
-
readonly sameDocument: boolean;
|
|
76
|
-
};
|
|
77
|
-
} | null;
|
|
78
|
-
}, never>;
|
|
44
|
+
}, never>, Schema.Struct<{
|
|
45
|
+
id: Schema.Schema<Uuid, string, never>;
|
|
46
|
+
key: Schema.Schema<Uuid, string, never>;
|
|
47
|
+
url: Schema.transformOrFail<typeof Schema.String, Schema.instanceOf<URL>, never>;
|
|
48
|
+
state: typeof Schema.Unknown;
|
|
49
|
+
sameDocument: typeof Schema.Boolean;
|
|
50
|
+
}>]>;
|
|
51
|
+
}>>;
|
|
52
|
+
}>;
|
|
79
53
|
export declare const getUrl: (origin: string, urlOrPath: string | URL) => URL;
|
|
80
54
|
export type ModelAndIntent = {
|
|
81
55
|
readonly state: RefSubject.RefSubject<NavigationState>;
|
|
@@ -91,7 +65,7 @@ export declare function setupFromModelAndIntent(modelAndIntent: ModelAndIntent,
|
|
|
91
65
|
readonly info?: unknown;
|
|
92
66
|
}, skipCommit?: boolean) => Effect.Effect<Destination, NavigationError, never>;
|
|
93
67
|
base: string;
|
|
94
|
-
beforeNavigation: <R = never, R2 = never>(handler: BeforeNavigationHandler<R, R2>) => Effect.Effect<void, never,
|
|
68
|
+
beforeNavigation: <R = never, R2 = never>(handler: BeforeNavigationHandler<R, R2>) => Effect.Effect<void, never, R | R2 | Scope.Scope>;
|
|
95
69
|
canGoBack: RefSubject.Computed<boolean, never, never>;
|
|
96
70
|
canGoForward: RefSubject.Computed<boolean, never, never>;
|
|
97
71
|
currentEntry: RefSubject.Computed<Destination, never, never>;
|
|
@@ -115,18 +89,10 @@ export declare function setupFromModelAndIntent(modelAndIntent: ModelAndIntent,
|
|
|
115
89
|
submit: (data: FormData, input?: Omit<FormInputFrom, "data">) => Effect.Effect<Option.Option<HttpClient.response.ClientResponse>, NavigationError | HttpClient.error.HttpClientError, Scope.Scope | HttpClient.client.Client.Default>;
|
|
116
90
|
onFormData: <R_2 = never, R2_2 = never>(handler: FormDataHandler<R_2, R2_2>) => Effect.Effect<void, never, Scope.Scope | R_2 | R2_2>;
|
|
117
91
|
};
|
|
118
|
-
export declare function makeRedirectEvent(origin: string, redirect: RedirectError, from: Destination): Effect.Effect<BeforeNavigationEvent, never,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
export declare function
|
|
122
|
-
readonly __identifier__: "@typed/id/GetRandomValues";
|
|
123
|
-
}>;
|
|
124
|
-
export declare function makeDestination(url: URL, state: unknown, origin: string): Effect.Effect<Destination, never, {
|
|
125
|
-
readonly __identifier__: "@typed/id/GetRandomValues";
|
|
126
|
-
}>;
|
|
127
|
-
export declare function upgradeProposedDestination(proposed: ProposedDestination): Effect.Effect<Destination, never, {
|
|
128
|
-
readonly __identifier__: "@typed/id/GetRandomValues";
|
|
129
|
-
}>;
|
|
92
|
+
export declare function makeRedirectEvent(origin: string, redirect: RedirectError, from: Destination): Effect.Effect<BeforeNavigationEvent, never, GetRandomValues>;
|
|
93
|
+
export declare function makeOrUpdateDestination(navigationState: NavigationState, url: URL, state: unknown, origin: string): Effect.Effect<Destination, never, GetRandomValues>;
|
|
94
|
+
export declare function makeDestination(url: URL, state: unknown, origin: string): Effect.Effect<Destination, never, GetRandomValues>;
|
|
95
|
+
export declare function upgradeProposedDestination(proposed: ProposedDestination): Effect.Effect<Destination, never, GetRandomValues>;
|
|
130
96
|
export type PatchedState = {
|
|
131
97
|
readonly id: Uuid;
|
|
132
98
|
readonly key: Uuid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/internal/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAA;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,UAAU,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,eAAe,EAAY,MAAM,WAAW,CAAA;AACrD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EAGvB,eAAe,EACf,aAAa,EACb,eAAe,EAEf,eAAe,EAEf,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;CAC/C,CAAA;AAED,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/internal/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/Blocking.js
CHANGED
|
@@ -12,22 +12,22 @@ const Blocked = (event) => Effect.map(Deferred.make(), (deferred) => Data.struct
|
|
|
12
12
|
/**
|
|
13
13
|
* @since 1.0.0
|
|
14
14
|
*/
|
|
15
|
-
export const useBlockNavigation = (params = {}) => Effect.gen(function* (
|
|
16
|
-
const navigation = yield*
|
|
17
|
-
const blockState = yield*
|
|
18
|
-
yield*
|
|
15
|
+
export const useBlockNavigation = (params = {}) => Effect.gen(function* () {
|
|
16
|
+
const navigation = yield* Navigation;
|
|
17
|
+
const blockState = yield* RefSubject.of(Unblocked);
|
|
18
|
+
yield* navigation.beforeNavigation((event) => RefSubject.modifyEffect(blockState, (state) => Effect.gen(function* () {
|
|
19
19
|
// Can't block twice
|
|
20
20
|
if (state._tag === "Blocked")
|
|
21
21
|
return [Option.none(), state];
|
|
22
|
-
if (params.shouldBlock && !(yield*
|
|
22
|
+
if (params.shouldBlock && !(yield* params.shouldBlock(event))) {
|
|
23
23
|
return [Option.none(), state];
|
|
24
24
|
}
|
|
25
|
-
const updated = yield*
|
|
25
|
+
const updated = yield* Blocked(event);
|
|
26
26
|
return [
|
|
27
27
|
Option.some(Deferred.await(updated.deferred)),
|
|
28
28
|
updated
|
|
29
29
|
];
|
|
30
|
-
})))
|
|
30
|
+
})));
|
|
31
31
|
const blockNavigation = Object.assign(RefSubject.map(blockState, (s) => {
|
|
32
32
|
return s._tag === "Blocked" ? Option.some(blockedToBlocking(navigation, s)) : Option.none();
|
|
33
33
|
}), {
|
package/dist/esm/Blocking.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Blocking.js","sourceRoot":"","sources":["../../src/Blocking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,UAAU,MAAM,sBAAsB,CAAA;AAElD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAUvC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAuB9E,MAAM,SAAS,GAAc,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;AAQ/D,MAAM,OAAO,GAAG,CAAC,KAA4B,EAAE,EAAE,CAC/C,MAAM,CAAC,GAAG,CACR,QAAQ,CAAC,IAAI,EAA0C,EACvD,CAAC,QAAQ,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CACzE,CAAA;AASH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAsC,EAAE,EAC6B,EAAE,CACvE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC
|
|
1
|
+
{"version":3,"file":"Blocking.js","sourceRoot":"","sources":["../../src/Blocking.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/Layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layer.js","sourceRoot":"","sources":["../../src/Layer.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"Layer.js","sourceRoot":"","sources":["../../src/Layer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,kBAAkB,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAGtD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAA2C,kBAAkB,CAAC,UAAU,CAAA;AAc/F;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAwD,cAAc,CAAC,MAAM,CAAA;AAchG;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAA+D,cAAc,CAAC,aAAa,CAAA"}
|
package/dist/esm/Navigation.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { ParseResult } from "@effect/schema";
|
|
5
5
|
import * as Schema from "@effect/schema/Schema";
|
|
6
6
|
import { Tagged } from "@typed/context";
|
|
7
7
|
import * as RefSubject from "@typed/fx/RefSubject";
|
|
@@ -13,23 +13,26 @@ import * as Effect from "effect/Effect";
|
|
|
13
13
|
*/
|
|
14
14
|
export const Navigation = Tagged("@typed/navigation/Navigation");
|
|
15
15
|
const urlSchema_ = Schema.instanceOf(URL).pipe(Schema.equivalence((a, b) => a.href === b.href));
|
|
16
|
-
const urlSchema = Schema.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
16
|
+
const urlSchema = Schema.String.pipe(Schema.transformOrFail(urlSchema_, {
|
|
17
|
+
decode: (s) => Effect.suspend(() => {
|
|
18
|
+
try {
|
|
19
|
+
return Effect.succeed(new URL(s));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return Effect.fail(new ParseResult.Type(urlSchema_.ast, s, `Expected a URL`));
|
|
23
|
+
}
|
|
24
|
+
}),
|
|
25
|
+
encode: (url) => Effect.succeed(url.toString())
|
|
26
|
+
}));
|
|
24
27
|
/**
|
|
25
28
|
* @since 1.0.0
|
|
26
29
|
*/
|
|
27
|
-
export const Destination = Schema.
|
|
30
|
+
export const Destination = Schema.Struct({
|
|
28
31
|
id: IdSchema.uuid,
|
|
29
32
|
key: IdSchema.uuid,
|
|
30
33
|
url: urlSchema,
|
|
31
|
-
state: Schema.
|
|
32
|
-
sameDocument: Schema.
|
|
34
|
+
state: Schema.Unknown,
|
|
35
|
+
sameDocument: Schema.Boolean
|
|
33
36
|
});
|
|
34
37
|
/**
|
|
35
38
|
* @since 1.0.0
|
|
@@ -38,32 +41,32 @@ export const ProposedDestination = Destination.pipe(Schema.omit("id", "key"));
|
|
|
38
41
|
/**
|
|
39
42
|
* @since 1.0.0
|
|
40
43
|
*/
|
|
41
|
-
export const NavigationType = Schema.
|
|
44
|
+
export const NavigationType = Schema.Literal("push", "replace", "reload", "traverse");
|
|
42
45
|
/**
|
|
43
46
|
* @since 1.0.0
|
|
44
47
|
*/
|
|
45
|
-
export const Transition = Schema.
|
|
48
|
+
export const Transition = Schema.Struct({
|
|
46
49
|
type: NavigationType,
|
|
47
50
|
from: Destination,
|
|
48
|
-
to: Schema.
|
|
51
|
+
to: Schema.Union(ProposedDestination, Destination)
|
|
49
52
|
});
|
|
50
53
|
/**
|
|
51
54
|
* @since 1.0.0
|
|
52
55
|
*/
|
|
53
|
-
export const BeforeNavigationEvent = Schema.
|
|
56
|
+
export const BeforeNavigationEvent = Schema.Struct({
|
|
54
57
|
type: NavigationType,
|
|
55
58
|
from: Destination,
|
|
56
|
-
delta: Schema.
|
|
57
|
-
to: Schema.
|
|
58
|
-
info: Schema.
|
|
59
|
+
delta: Schema.Number,
|
|
60
|
+
to: Schema.Union(ProposedDestination, Destination),
|
|
61
|
+
info: Schema.Unknown
|
|
59
62
|
});
|
|
60
63
|
/**
|
|
61
64
|
* @since 1.0.0
|
|
62
65
|
*/
|
|
63
|
-
export const NavigationEvent = Schema.
|
|
66
|
+
export const NavigationEvent = Schema.Struct({
|
|
64
67
|
type: NavigationType,
|
|
65
68
|
destination: Destination,
|
|
66
|
-
info: Schema.
|
|
69
|
+
info: Schema.Unknown
|
|
67
70
|
});
|
|
68
71
|
/**
|
|
69
72
|
* @since 1.0.0
|
|
@@ -83,47 +86,53 @@ export class CancelNavigation extends Data.TaggedError("CancelNavigation") {
|
|
|
83
86
|
/**
|
|
84
87
|
* @since 1.0.0
|
|
85
88
|
*/
|
|
86
|
-
export const FileSchemaFrom = Schema.
|
|
87
|
-
_id: Schema.
|
|
88
|
-
name: Schema.
|
|
89
|
-
data: Schema.
|
|
89
|
+
export const FileSchemaFrom = Schema.Struct({
|
|
90
|
+
_id: Schema.Literal("File"),
|
|
91
|
+
name: Schema.String,
|
|
92
|
+
data: Schema.String // Base64 encoded
|
|
90
93
|
});
|
|
91
|
-
const decodeBase64 =
|
|
92
|
-
const encodeBase64 =
|
|
94
|
+
const decodeBase64 = ParseResult.decode(Schema.Base64);
|
|
95
|
+
const encodeBase64 = ParseResult.encode(Schema.Base64);
|
|
93
96
|
/**
|
|
94
97
|
* @since 1.0.0
|
|
95
98
|
*/
|
|
96
|
-
export const FileSchema = FileSchemaFrom.pipe(Schema.transformOrFail(Schema.instanceOf(File),
|
|
99
|
+
export const FileSchema = FileSchemaFrom.pipe(Schema.transformOrFail(Schema.instanceOf(File), {
|
|
100
|
+
decode: ({ data, name }) => Effect.map(decodeBase64(data), (buffer) => new File([buffer], name)),
|
|
101
|
+
encode: (file) => Effect.promise(() => file.arrayBuffer()).pipe(Effect.flatMap((buffer) => encodeBase64(new Uint8Array(buffer))), Effect.map((data) => ({ _id: "File", name: file.name, data })))
|
|
102
|
+
}));
|
|
97
103
|
/**
|
|
98
104
|
* @since 1.0.0
|
|
99
105
|
*/
|
|
100
|
-
export const FormDataSchema = Schema.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
export const FormDataSchema = Schema.Record(Schema.String, Schema.Union(Schema.String, FileSchema)).pipe(Schema.transform(Schema.instanceOf(FormData), {
|
|
107
|
+
decode: (formData) => {
|
|
108
|
+
const data = new FormData();
|
|
109
|
+
for (const [key, value] of Object.entries(formData)) {
|
|
110
|
+
if (value instanceof File) {
|
|
111
|
+
data.append(key, value, value.name);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
data.append(key, value);
|
|
115
|
+
}
|
|
108
116
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
return data;
|
|
118
|
+
},
|
|
119
|
+
encode: (formData) => Object.fromEntries(formData.entries())
|
|
120
|
+
}));
|
|
112
121
|
const optionNullable = { as: "Option", nullable: true };
|
|
113
122
|
/**
|
|
114
123
|
* @since 1.0.0
|
|
115
124
|
*/
|
|
116
|
-
export const FormInputSchema = Schema.
|
|
117
|
-
name: Schema.optional(Schema.
|
|
118
|
-
action: Schema.optional(Schema.
|
|
119
|
-
method: Schema.optional(Schema.
|
|
120
|
-
encoding: Schema.optional(Schema.
|
|
125
|
+
export const FormInputSchema = Schema.Struct({
|
|
126
|
+
name: Schema.optional(Schema.String, optionNullable),
|
|
127
|
+
action: Schema.optional(Schema.String, optionNullable),
|
|
128
|
+
method: Schema.optional(Schema.String, optionNullable),
|
|
129
|
+
encoding: Schema.optional(Schema.String, optionNullable),
|
|
121
130
|
data: FormDataSchema
|
|
122
131
|
});
|
|
123
132
|
/**
|
|
124
133
|
* @since 1.0.0
|
|
125
134
|
*/
|
|
126
|
-
export const FormDataEvent = Schema.extend(Schema.
|
|
135
|
+
export const FormDataEvent = Schema.extend(Schema.Struct({ from: Destination }), FormInputSchema);
|
|
127
136
|
/**
|
|
128
137
|
* @since 1.0.0
|
|
129
138
|
*/
|
|
@@ -189,7 +198,7 @@ export function getCurrentPathFromUrl(location) {
|
|
|
189
198
|
/**
|
|
190
199
|
* @since 1.0.0
|
|
191
200
|
*/
|
|
192
|
-
export const CurrentPath = RefSubject.map(
|
|
201
|
+
export const CurrentPath = RefSubject.computedFromTag(Navigation, (nav) => RefSubject.map(nav.currentEntry, (e) => getCurrentPathFromUrl(e.url)));
|
|
193
202
|
/**
|
|
194
203
|
* @since 1.0.0
|
|
195
204
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation.js","sourceRoot":"","sources":["../../src/Navigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Navigation.js","sourceRoot":"","sources":["../../src/Navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,42 +7,42 @@ import * as Effect from "effect/Effect";
|
|
|
7
7
|
import * as Option from "effect/Option";
|
|
8
8
|
import * as Runtime from "effect/Runtime";
|
|
9
9
|
import * as Scope from "effect/Scope";
|
|
10
|
-
import
|
|
11
|
-
import
|
|
10
|
+
import * as Schema from "@effect/schema/Schema";
|
|
11
|
+
import * as Exit from "effect/Exit";
|
|
12
12
|
import { Navigation, NavigationError } from "../Navigation.js";
|
|
13
13
|
import { getOriginalState, getUrl, isPatchedState, makeDestination, makeHandlersState, NavigationState, setupFromModelAndIntent } from "./shared.js";
|
|
14
14
|
export const fromWindow = Navigation.scoped(Window.withEffect((window) => {
|
|
15
15
|
const getRandomValues = (length) => Effect.sync(() => window.crypto.getRandomValues(new Uint8Array(length)));
|
|
16
|
-
return Effect.gen(function* (
|
|
17
|
-
const { run, runPromise } = yield*
|
|
16
|
+
return Effect.gen(function* () {
|
|
17
|
+
const { run, runPromise } = yield* scopedRuntime();
|
|
18
18
|
const hasNativeNavigation = !!window.navigation;
|
|
19
|
-
const modelAndIntent = yield*
|
|
19
|
+
const modelAndIntent = yield* hasNativeNavigation
|
|
20
20
|
? setupWithNavigation(window.navigation, runPromise)
|
|
21
|
-
: setupWithHistory(window, (event) => run(handleHistoryEvent(event)))
|
|
21
|
+
: setupWithHistory(window, (event) => run(handleHistoryEvent(event)));
|
|
22
22
|
const navigation = setupFromModelAndIntent(modelAndIntent, window.location.origin, getBaseHref(window), getRandomValues, hasNativeNavigation ? () => getNavigationState(window.navigation) : undefined);
|
|
23
23
|
return navigation;
|
|
24
24
|
function handleHistoryEvent(event) {
|
|
25
|
-
return Effect.gen(function* (
|
|
25
|
+
return Effect.gen(function* () {
|
|
26
26
|
if (event._tag === "PushState") {
|
|
27
|
-
return yield*
|
|
27
|
+
return yield* navigation.navigate(event.url, {}, event.skipCommit);
|
|
28
28
|
}
|
|
29
29
|
else if (event._tag === "ReplaceState") {
|
|
30
30
|
if (Option.isSome(event.url)) {
|
|
31
|
-
return yield*
|
|
31
|
+
return yield* navigation.navigate(event.url.value, { history: "replace", state: event.state }, event.skipCommit);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
|
-
return yield*
|
|
34
|
+
return yield* navigation.updateCurrentEntry(event);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
else if (event._tag === "Traverse") {
|
|
38
|
-
const { entries, index } = yield*
|
|
38
|
+
const { entries, index } = yield* modelAndIntent.state;
|
|
39
39
|
const toIndex = Math.min(Math.max(0, index + event.delta), entries.length - 1);
|
|
40
40
|
const to = entries[toIndex];
|
|
41
|
-
return yield*
|
|
41
|
+
return yield* navigation.traverseTo(to.key, {}, event.skipCommit);
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
|
-
yield*
|
|
45
|
-
return yield*
|
|
44
|
+
yield* navigation.traverseTo(event.key, {}, event.skipCommit);
|
|
45
|
+
return yield* navigation.updateCurrentEntry({ state: event.state });
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
}
|
|
@@ -62,11 +62,11 @@ const getNavigationState = (navigation) => {
|
|
|
62
62
|
};
|
|
63
63
|
};
|
|
64
64
|
function setupWithNavigation(navigation, runPromise) {
|
|
65
|
-
return Effect.gen(function* (
|
|
66
|
-
const state = yield*
|
|
65
|
+
return Effect.gen(function* () {
|
|
66
|
+
const state = yield* RefSubject.fromEffect(Effect.sync(() => getNavigationState(navigation)), { eq: Equivalence.make(Schema.typeSchema(Schema.typeSchema(NavigationState))) });
|
|
67
67
|
const canGoBack = RefSubject.map(state, (s) => s.index > 0);
|
|
68
68
|
const canGoForward = RefSubject.map(state, (s) => s.index < s.entries.length - 1);
|
|
69
|
-
const { beforeHandlers, formDataHandlers, handlers } = yield*
|
|
69
|
+
const { beforeHandlers, formDataHandlers, handlers } = yield* makeHandlersState();
|
|
70
70
|
const commit = (to, event) => Effect.gen(function* (_) {
|
|
71
71
|
const { key, state, url } = to;
|
|
72
72
|
const { info, type } = event;
|
|
@@ -80,8 +80,8 @@ function setupWithNavigation(navigation, runPromise) {
|
|
|
80
80
|
yield* _(Effect.promise(() => navigation.traverseTo(key, { info }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
|
|
81
81
|
}
|
|
82
82
|
});
|
|
83
|
-
const runHandlers = (native) => Effect.gen(function* (
|
|
84
|
-
const eventHandlers = yield*
|
|
83
|
+
const runHandlers = (native) => Effect.gen(function* () {
|
|
84
|
+
const eventHandlers = yield* handlers;
|
|
85
85
|
const matches = [];
|
|
86
86
|
const event = {
|
|
87
87
|
type: native.navigationType,
|
|
@@ -89,13 +89,13 @@ function setupWithNavigation(navigation, runPromise) {
|
|
|
89
89
|
info: native.info
|
|
90
90
|
};
|
|
91
91
|
for (const [handler, ctx] of eventHandlers) {
|
|
92
|
-
const match = yield*
|
|
92
|
+
const match = yield* Effect.provide(handler(event), ctx);
|
|
93
93
|
if (Option.isSome(match)) {
|
|
94
94
|
matches.push(Effect.provide(match.value, ctx));
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
if (matches.length > 0) {
|
|
98
|
-
yield*
|
|
98
|
+
yield* Effect.all(matches);
|
|
99
99
|
}
|
|
100
100
|
});
|
|
101
101
|
navigation.addEventListener("navigate", (ev) => {
|
|
@@ -138,14 +138,14 @@ function shouldNotIntercept(navigationEvent) {
|
|
|
138
138
|
!!navigationEvent.formData);
|
|
139
139
|
}
|
|
140
140
|
function setupWithHistory(window, onEvent) {
|
|
141
|
-
return Effect.gen(function* (
|
|
141
|
+
return Effect.gen(function* () {
|
|
142
142
|
const { location } = window;
|
|
143
143
|
const { original: history, unpatch } = patchHistory(window, onEvent);
|
|
144
|
-
yield*
|
|
145
|
-
const state = yield*
|
|
144
|
+
yield* Effect.addFinalizer(() => unpatch);
|
|
145
|
+
const state = yield* RefSubject.fromEffect(Effect.suspend(() => Effect.map(makeDestination(new URL(location.href), history.state, location.origin), (destination) => ({ entries: [destination], index: 0, transition: Option.none() }))), { eq: Equivalence.make(Schema.typeSchema(NavigationState)) });
|
|
146
146
|
const canGoBack = RefSubject.map(state, (s) => s.index > 0);
|
|
147
147
|
const canGoForward = RefSubject.map(state, (s) => s.index < s.entries.length - 1);
|
|
148
|
-
const { beforeHandlers, formDataHandlers, handlers } = yield*
|
|
148
|
+
const { beforeHandlers, formDataHandlers, handlers } = yield* makeHandlersState();
|
|
149
149
|
const commit = ({ id, key, state, url }, event) => Effect.sync(() => {
|
|
150
150
|
const { type } = event;
|
|
151
151
|
if (type === "push") {
|