@typed/navigation 1.0.0-beta.2 → 1.0.0-beta.4
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/Navigation.d.ts +2 -2
- package/dist/Navigation.d.ts.map +1 -1
- package/dist/Navigation.js +2 -2
- package/dist/_core.d.ts.map +1 -1
- package/dist/_core.js +5 -5
- package/dist/model.d.ts +3 -7
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +3 -7
- package/package.json +15 -15
- package/src/Navigation.ts +2 -2
- package/src/_core.ts +8 -11
- package/src/model.ts +22 -17
package/dist/Navigation.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type * as Effect from "effect/Effect";
|
|
2
2
|
import type * as Option from "effect/Option";
|
|
3
3
|
import type * as Scope from "effect/Scope";
|
|
4
|
-
import * as
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
5
|
import { RefSubject } from "@typed/fx";
|
|
6
6
|
import type { BeforeNavigationEvent, CancelNavigation, Destination, NavigationError, NavigationEvent, RedirectError, Transition } from "./model.js";
|
|
7
|
-
declare const Navigation_base:
|
|
7
|
+
declare const Navigation_base: Context.ServiceClass<Navigation, "@typed/navigation/Navigation", {
|
|
8
8
|
readonly origin: string;
|
|
9
9
|
readonly base: string;
|
|
10
10
|
readonly currentEntry: RefSubject.Computed<Destination>;
|
package/dist/Navigation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../src/Navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../src/Navigation.ts"],"names":[],"mappings":"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"}
|
package/dist/Navigation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
2
|
import { RefSubject } from "@typed/fx";
|
|
3
|
-
export class Navigation extends
|
|
3
|
+
export class Navigation extends Context.Service()("@typed/navigation/Navigation") {
|
|
4
4
|
static origin = Navigation.useSync((n) => n.origin);
|
|
5
5
|
static base = Navigation.useSync((n) => n.base);
|
|
6
6
|
static currentEntry = RefSubject.computedFromService(Navigation.useSync((n) => n.currentEntry));
|
package/dist/_core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_core.d.ts","sourceRoot":"","sources":["../src/_core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EACX,eAAe,EAIf,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAc,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE9F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;CAChD,CAAC;AAIF,eAAO,MAAM,kBAAkB,+GAKnB,qBAAqB,eAChB,CAAC,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAC3D,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"_core.d.ts","sourceRoot":"","sources":["../src/_core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EACV,qBAAqB,EAErB,WAAW,EACX,eAAe,EAIf,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAc,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE9F,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;CAChD,CAAC;AAIF,eAAO,MAAM,kBAAkB,+GAKnB,qBAAqB,eAChB,CAAC,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAC3D,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA+InB,MAAM,GAAG,GAAG,YAAY,yBAAyB;;;;;;;;wBAsDhB,OAAO;;;;;;;;;wBAOJ,OAAO;;;;;;;;sBA/B/C,WAAW,CAAC,KAAK,CAAC,YAAY;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;uBAsCxD;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;yBAkBzB,CAAC,UAAU,EAAE,mBAC9B,uBAAuB,CAAC,CAAC,EAAE,EAAE,CAAC,KACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;mBAiB7B,CAAC,UAAU,EAAE,mBACxB,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,KAChC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;kCAiBd;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE;;;;;;;sBAoChE,CAAC;AAoBH,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,GAAG,GAAG,KAAG,GACO,CAAC"}
|
package/dist/_core.js
CHANGED
|
@@ -15,11 +15,11 @@ export const makeNavigationCore = Effect.fn(function* (origin, base, state, comm
|
|
|
15
15
|
const handlers = yield* beforeHandlers;
|
|
16
16
|
const matches = [];
|
|
17
17
|
for (const [handler, ctx] of handlers) {
|
|
18
|
-
const exit = yield* handler(event).pipe(Effect.
|
|
18
|
+
const exit = yield* handler(event).pipe(Effect.provideContext(ctx), Effect.result);
|
|
19
19
|
if (Result.isSuccess(exit)) {
|
|
20
20
|
const match = exit.success;
|
|
21
21
|
if (Option.isSome(match)) {
|
|
22
|
-
matches.push(Effect.
|
|
22
|
+
matches.push(Effect.provideContext(match.value, ctx));
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
@@ -99,7 +99,7 @@ export const makeNavigationCore = Effect.fn(function* (origin, base, state, comm
|
|
|
99
99
|
}
|
|
100
100
|
const { entries, index } = yield* ref.get;
|
|
101
101
|
const from = entries[index];
|
|
102
|
-
if (error._tag === "CancelNavigation") {
|
|
102
|
+
if (error._tag === "@typed/navigation/CancelNavigation") {
|
|
103
103
|
yield* ref.set({ entries, index, transition: Option.none() });
|
|
104
104
|
return from;
|
|
105
105
|
}
|
|
@@ -175,7 +175,7 @@ export const makeNavigationCore = Effect.fn(function* (origin, base, state, comm
|
|
|
175
175
|
};
|
|
176
176
|
return yield* runNavigationEvent(event, ref, 0);
|
|
177
177
|
}));
|
|
178
|
-
const onBeforeNavigation = (handler) => Effect.
|
|
178
|
+
const onBeforeNavigation = (handler) => Effect.contextWith((ctx) => {
|
|
179
179
|
const entry = [handler, ctx];
|
|
180
180
|
return Effect.flatMap(RefSubject.update(beforeHandlers, (handlers) => new Set([...handlers, entry])), () => Effect.addFinalizer(() => RefSubject.update(beforeHandlers, (handlers) => {
|
|
181
181
|
const updated = new Set(handlers);
|
|
@@ -183,7 +183,7 @@ export const makeNavigationCore = Effect.fn(function* (origin, base, state, comm
|
|
|
183
183
|
return updated;
|
|
184
184
|
})));
|
|
185
185
|
});
|
|
186
|
-
const onNavigation = (handler) => Effect.
|
|
186
|
+
const onNavigation = (handler) => Effect.contextWith((ctx) => {
|
|
187
187
|
const entry = [handler, ctx];
|
|
188
188
|
return Effect.flatMap(RefSubject.update(handlers, (handlers) => new Set([...handlers, entry])), () => Effect.addFinalizer(() => RefSubject.update(handlers, (handlers) => {
|
|
189
189
|
const updated = new Set(handlers);
|
package/dist/model.d.ts
CHANGED
|
@@ -65,14 +65,12 @@ export declare const NavigationEvent: Schema.Struct<{
|
|
|
65
65
|
readonly info: Schema.Unknown;
|
|
66
66
|
}>;
|
|
67
67
|
export type NavigationEvent = typeof NavigationEvent.Type;
|
|
68
|
-
declare const NavigationError_base: Schema.
|
|
69
|
-
readonly _tag: Schema.tag<"NavigationError">;
|
|
68
|
+
declare const NavigationError_base: Schema.Class<NavigationError, Schema.TaggedStruct<"@typed/navigation/NavigationError", {
|
|
70
69
|
readonly error: Schema.Unknown;
|
|
71
70
|
}>, import("effect/Cause").YieldableError>;
|
|
72
71
|
export declare class NavigationError extends NavigationError_base {
|
|
73
72
|
}
|
|
74
|
-
declare const RedirectError_base: Schema.
|
|
75
|
-
readonly _tag: Schema.tag<"RedirectError">;
|
|
73
|
+
declare const RedirectError_base: Schema.Class<RedirectError, Schema.TaggedStruct<"@typed/navigation/RedirectError", {
|
|
76
74
|
readonly url: Schema.Union<readonly [Schema.URLFromString, Schema.String]>;
|
|
77
75
|
readonly options: Schema.optional<Schema.Struct<{
|
|
78
76
|
readonly state: Schema.optional<Schema.Unknown>;
|
|
@@ -81,9 +79,7 @@ declare const RedirectError_base: Schema.ErrorClass<unknown, Schema.Struct<{
|
|
|
81
79
|
}>, import("effect/Cause").YieldableError>;
|
|
82
80
|
export declare class RedirectError extends RedirectError_base {
|
|
83
81
|
}
|
|
84
|
-
declare const CancelNavigation_base: Schema.
|
|
85
|
-
readonly _tag: Schema.tag<"CancelNavigation">;
|
|
86
|
-
}>, import("effect/Cause").YieldableError>;
|
|
82
|
+
declare const CancelNavigation_base: Schema.Class<CancelNavigation, Schema.TaggedStruct<"@typed/navigation/CancelNavigation", {}>, import("effect/Cause").YieldableError>;
|
|
87
83
|
export declare class CancelNavigation extends CancelNavigation_base {
|
|
88
84
|
}
|
|
89
85
|
export {};
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAC;AAElE,eAAO,MAAM,WAAW;;;;;;EAItB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;AAElD,eAAO,MAAM,cAAc,kIAKzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAExD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;EAKrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAEhD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;EAMhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAC;AAEtE,eAAO,MAAM,eAAe;;;;;;;;;;EAI1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAC;AAElE,eAAO,MAAM,WAAW;;;;;;EAItB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;AAElD,eAAO,MAAM,cAAc,kIAKzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAExD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;EAKrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAEhD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;EAMhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAC;AAEtE,eAAO,MAAM,eAAe;;;;;;;;;;EAI1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;;;;AAE1D,qBAAa,eAAgB,SAAQ,oBAKpC;CAAG;;;;;;;;AAEJ,qBAAa,aAAc,SAAQ,kBAWlC;CAAG;;AAEJ,qBAAa,gBAAiB,SAAQ,qBAGrC;CAAG"}
|
package/dist/model.js
CHANGED
|
@@ -34,13 +34,11 @@ export const NavigationEvent = Schema.Struct({
|
|
|
34
34
|
destination: Destination,
|
|
35
35
|
info: Schema.Unknown,
|
|
36
36
|
});
|
|
37
|
-
export class NavigationError extends Schema.
|
|
38
|
-
_tag: Schema.tag("NavigationError"),
|
|
37
|
+
export class NavigationError extends Schema.TaggedErrorClass()(`@typed/navigation/NavigationError`, {
|
|
39
38
|
error: Schema.Unknown,
|
|
40
39
|
}) {
|
|
41
40
|
}
|
|
42
|
-
export class RedirectError extends Schema.
|
|
43
|
-
_tag: Schema.tag("RedirectError"),
|
|
41
|
+
export class RedirectError extends Schema.TaggedErrorClass()(`@typed/navigation/RedirectError`, {
|
|
44
42
|
url: Schema.Union([Schema.URLFromString, Schema.String]),
|
|
45
43
|
options: Schema.optional(Schema.Struct({
|
|
46
44
|
state: Schema.optional(Schema.Unknown),
|
|
@@ -48,7 +46,5 @@ export class RedirectError extends Schema.ErrorClass(`@typed/navigation/Redirect
|
|
|
48
46
|
})),
|
|
49
47
|
}) {
|
|
50
48
|
}
|
|
51
|
-
export class CancelNavigation extends Schema.
|
|
52
|
-
_tag: Schema.tag("CancelNavigation"),
|
|
53
|
-
}) {
|
|
49
|
+
export class CancelNavigation extends Schema.TaggedErrorClass()(`@typed/navigation/CancelNavigation`, {}) {
|
|
54
50
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typed/navigation",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.4",
|
|
4
|
+
"files": [
|
|
5
|
+
"dist",
|
|
6
|
+
"src"
|
|
7
|
+
],
|
|
4
8
|
"type": "module",
|
|
5
9
|
"exports": {
|
|
6
10
|
".": {
|
|
@@ -15,21 +19,17 @@
|
|
|
15
19
|
"publishConfig": {
|
|
16
20
|
"access": "public"
|
|
17
21
|
},
|
|
18
|
-
"dependencies": {
|
|
19
|
-
"effect": "4.0.0-beta.21",
|
|
20
|
-
"@typed/fx": "2.0.0-beta.2",
|
|
21
|
-
"@typed/id": "1.0.0-beta.2"
|
|
22
|
-
},
|
|
23
|
-
"devDependencies": {
|
|
24
|
-
"typescript": "5.9.3",
|
|
25
|
-
"vitest": "4.0.18"
|
|
26
|
-
},
|
|
27
|
-
"files": [
|
|
28
|
-
"dist",
|
|
29
|
-
"src"
|
|
30
|
-
],
|
|
31
22
|
"scripts": {
|
|
32
23
|
"build": "[ -d dist ] || rm -f tsconfig.tsbuildinfo; tsc",
|
|
33
24
|
"test": "vitest run --passWithNoTests"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@typed/fx": "workspace:*",
|
|
28
|
+
"@typed/id": "workspace:*",
|
|
29
|
+
"effect": "catalog:"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"typescript": "catalog:",
|
|
33
|
+
"vitest": "catalog:"
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
}
|
package/src/Navigation.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as Effect from "effect/Effect";
|
|
2
2
|
import type * as Option from "effect/Option";
|
|
3
3
|
import type * as Scope from "effect/Scope";
|
|
4
|
-
import * as
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
5
|
import { RefSubject } from "@typed/fx";
|
|
6
6
|
import type {
|
|
7
7
|
BeforeNavigationEvent,
|
|
@@ -13,7 +13,7 @@ import type {
|
|
|
13
13
|
Transition,
|
|
14
14
|
} from "./model.js";
|
|
15
15
|
|
|
16
|
-
export class Navigation extends
|
|
16
|
+
export class Navigation extends Context.Service<
|
|
17
17
|
Navigation,
|
|
18
18
|
{
|
|
19
19
|
readonly origin: string;
|
package/src/_core.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as Effect from "effect/Effect";
|
|
|
2
2
|
import * as Option from "effect/Option";
|
|
3
3
|
import * as Result from "effect/Result";
|
|
4
4
|
import type * as Scope from "effect/Scope";
|
|
5
|
-
import type * as
|
|
5
|
+
import type * as Context from "effect/Context";
|
|
6
6
|
import { RefSubject } from "@typed/fx";
|
|
7
7
|
import type {
|
|
8
8
|
BeforeNavigationEvent,
|
|
@@ -41,14 +41,11 @@ export const makeNavigationCore = Effect.fn(function* (
|
|
|
41
41
|
|
|
42
42
|
const beforeHandlers = yield* RefSubject.make(
|
|
43
43
|
Effect.sync(
|
|
44
|
-
(): Set<readonly [BeforeNavigationHandler<any, any>,
|
|
45
|
-
new Set(),
|
|
44
|
+
(): Set<readonly [BeforeNavigationHandler<any, any>, Context.Context<any>]> => new Set(),
|
|
46
45
|
),
|
|
47
46
|
);
|
|
48
47
|
const handlers = yield* RefSubject.make(
|
|
49
|
-
Effect.sync(
|
|
50
|
-
(): Set<readonly [NavigationHandler<any, any>, ServiceMap.ServiceMap<any>]> => new Set(),
|
|
51
|
-
),
|
|
48
|
+
Effect.sync((): Set<readonly [NavigationHandler<any, any>, Context.Context<any>]> => new Set()),
|
|
52
49
|
);
|
|
53
50
|
|
|
54
51
|
const runBeforeHandlers = (event: BeforeNavigationEvent) =>
|
|
@@ -57,11 +54,11 @@ export const makeNavigationCore = Effect.fn(function* (
|
|
|
57
54
|
const matches: Array<Effect.Effect<unknown, RedirectError | CancelNavigation>> = [];
|
|
58
55
|
|
|
59
56
|
for (const [handler, ctx] of handlers) {
|
|
60
|
-
const exit = yield* handler(event).pipe(Effect.
|
|
57
|
+
const exit = yield* handler(event).pipe(Effect.provideContext(ctx), Effect.result);
|
|
61
58
|
if (Result.isSuccess(exit)) {
|
|
62
59
|
const match = exit.success;
|
|
63
60
|
if (Option.isSome(match)) {
|
|
64
|
-
matches.push(Effect.
|
|
61
|
+
matches.push(Effect.provideContext(match.value, ctx));
|
|
65
62
|
}
|
|
66
63
|
} else {
|
|
67
64
|
return Option.some(exit.failure);
|
|
@@ -169,7 +166,7 @@ export const makeNavigationCore = Effect.fn(function* (
|
|
|
169
166
|
const { entries, index } = yield* ref.get;
|
|
170
167
|
const from = entries[index];
|
|
171
168
|
|
|
172
|
-
if (error._tag === "CancelNavigation") {
|
|
169
|
+
if (error._tag === "@typed/navigation/CancelNavigation") {
|
|
173
170
|
yield* ref.set({ entries, index, transition: Option.none() });
|
|
174
171
|
return from;
|
|
175
172
|
} else {
|
|
@@ -266,7 +263,7 @@ export const makeNavigationCore = Effect.fn(function* (
|
|
|
266
263
|
const onBeforeNavigation = <R = never, R2 = never>(
|
|
267
264
|
handler: BeforeNavigationHandler<R, R2>,
|
|
268
265
|
): Effect.Effect<void, never, R | R2 | Scope.Scope> =>
|
|
269
|
-
Effect.
|
|
266
|
+
Effect.contextWith((ctx) => {
|
|
270
267
|
const entry = [handler, ctx] as const;
|
|
271
268
|
|
|
272
269
|
return Effect.flatMap(
|
|
@@ -285,7 +282,7 @@ export const makeNavigationCore = Effect.fn(function* (
|
|
|
285
282
|
const onNavigation = <R = never, R2 = never>(
|
|
286
283
|
handler: NavigationHandler<R, R2>,
|
|
287
284
|
): Effect.Effect<void, never, R | R2 | Scope.Scope> =>
|
|
288
|
-
Effect.
|
|
285
|
+
Effect.contextWith((ctx) => {
|
|
289
286
|
const entry = [handler, ctx] as const;
|
|
290
287
|
|
|
291
288
|
return Effect.flatMap(
|
package/src/model.ts
CHANGED
|
@@ -47,22 +47,27 @@ export const NavigationEvent = Schema.Struct({
|
|
|
47
47
|
});
|
|
48
48
|
export type NavigationEvent = typeof NavigationEvent.Type;
|
|
49
49
|
|
|
50
|
-
export class NavigationError extends Schema.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
export class NavigationError extends Schema.TaggedErrorClass<NavigationError>()(
|
|
51
|
+
`@typed/navigation/NavigationError`,
|
|
52
|
+
{
|
|
53
|
+
error: Schema.Unknown,
|
|
54
|
+
},
|
|
55
|
+
) {}
|
|
54
56
|
|
|
55
|
-
export class RedirectError extends Schema.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Schema.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
export class RedirectError extends Schema.TaggedErrorClass<RedirectError>()(
|
|
58
|
+
`@typed/navigation/RedirectError`,
|
|
59
|
+
{
|
|
60
|
+
url: Schema.Union([Schema.URLFromString, Schema.String]),
|
|
61
|
+
options: Schema.optional(
|
|
62
|
+
Schema.Struct({
|
|
63
|
+
state: Schema.optional(Schema.Unknown),
|
|
64
|
+
info: Schema.optional(Schema.Unknown),
|
|
65
|
+
}),
|
|
66
|
+
),
|
|
67
|
+
},
|
|
68
|
+
) {}
|
|
65
69
|
|
|
66
|
-
export class CancelNavigation extends Schema.
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
export class CancelNavigation extends Schema.TaggedErrorClass<CancelNavigation>()(
|
|
71
|
+
`@typed/navigation/CancelNavigation`,
|
|
72
|
+
{},
|
|
73
|
+
) {}
|