effect-start 0.19.0 → 0.20.1
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/README.md +3 -3
- package/dist/Development.d.ts +3 -3
- package/dist/Development.js +3 -2
- package/dist/Effectify.d.ts +212 -0
- package/dist/Effectify.js +19 -0
- package/dist/FilePathPattern.d.ts +29 -0
- package/dist/FilePathPattern.js +86 -0
- package/dist/FileRouter.d.ts +39 -41
- package/dist/FileRouter.js +104 -158
- package/dist/FileRouterCodegen.d.ts +7 -8
- package/dist/FileRouterCodegen.js +97 -66
- package/dist/PlatformError.d.ts +46 -0
- package/dist/PlatformError.js +43 -0
- package/dist/PlatformRuntime.d.ts +23 -0
- package/dist/PlatformRuntime.js +42 -0
- package/dist/RouteBody.d.ts +1 -1
- package/dist/Start.d.ts +34 -3
- package/dist/Start.js +31 -6
- package/dist/bun/BunPlatformHttpServer.d.ts +10 -0
- package/dist/bun/BunPlatformHttpServer.js +53 -0
- package/dist/bun/BunRoute.d.ts +3 -5
- package/dist/bun/BunRoute.js +9 -17
- package/dist/bun/BunRuntime.d.ts +2 -1
- package/dist/bun/BunRuntime.js +10 -5
- package/dist/bun/BunServer.d.ts +33 -0
- package/dist/bun/BunServer.js +133 -0
- package/dist/bun/BunServerRequest.d.ts +60 -0
- package/dist/bun/BunServerRequest.js +252 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.js +1 -1
- package/dist/datastar/actions/fetch.d.ts +30 -0
- package/dist/datastar/actions/fetch.js +411 -0
- package/dist/datastar/actions/peek.d.ts +1 -0
- package/dist/datastar/actions/peek.js +14 -0
- package/dist/datastar/actions/setAll.d.ts +1 -0
- package/dist/datastar/actions/setAll.js +13 -0
- package/dist/datastar/actions/toggleAll.d.ts +1 -0
- package/dist/datastar/actions/toggleAll.js +13 -0
- package/dist/datastar/attributes/attr.d.ts +1 -0
- package/dist/datastar/attributes/attr.js +49 -0
- package/dist/datastar/attributes/bind.d.ts +1 -0
- package/dist/datastar/attributes/bind.js +183 -0
- package/dist/datastar/attributes/class.d.ts +1 -0
- package/dist/datastar/attributes/class.js +50 -0
- package/dist/datastar/attributes/computed.d.ts +1 -0
- package/dist/datastar/attributes/computed.js +27 -0
- package/dist/datastar/attributes/effect.d.ts +1 -0
- package/dist/datastar/attributes/effect.js +10 -0
- package/dist/datastar/attributes/indicator.d.ts +1 -0
- package/dist/datastar/attributes/indicator.js +32 -0
- package/dist/datastar/attributes/init.d.ts +1 -0
- package/dist/datastar/attributes/init.js +27 -0
- package/dist/datastar/attributes/jsonSignals.d.ts +1 -0
- package/dist/datastar/attributes/jsonSignals.js +31 -0
- package/dist/datastar/attributes/on.d.ts +1 -0
- package/dist/datastar/attributes/on.js +59 -0
- package/dist/datastar/attributes/onIntersect.d.ts +1 -0
- package/dist/datastar/attributes/onIntersect.js +54 -0
- package/dist/datastar/attributes/onInterval.d.ts +1 -0
- package/dist/datastar/attributes/onInterval.js +31 -0
- package/dist/datastar/attributes/onSignalPatch.d.ts +1 -0
- package/dist/datastar/attributes/onSignalPatch.js +44 -0
- package/dist/datastar/attributes/ref.d.ts +1 -0
- package/dist/datastar/attributes/ref.js +11 -0
- package/dist/datastar/attributes/show.d.ts +1 -0
- package/dist/datastar/attributes/show.js +32 -0
- package/dist/datastar/attributes/signals.d.ts +1 -0
- package/dist/datastar/attributes/signals.js +18 -0
- package/dist/datastar/attributes/style.d.ts +1 -0
- package/dist/datastar/attributes/style.js +56 -0
- package/dist/datastar/attributes/text.d.ts +1 -0
- package/dist/datastar/attributes/text.js +27 -0
- package/dist/datastar/engine.d.ts +156 -0
- package/dist/datastar/engine.js +971 -0
- package/dist/datastar/index.d.ts +24 -0
- package/dist/datastar/index.js +24 -0
- package/dist/datastar/load.d.ts +24 -0
- package/dist/datastar/load.js +24 -0
- package/dist/datastar/utils.d.ts +51 -0
- package/dist/datastar/utils.js +205 -0
- package/dist/datastar/watchers/patchElements.d.ts +1 -0
- package/dist/datastar/watchers/patchElements.js +420 -0
- package/dist/datastar/watchers/patchSignals.d.ts +1 -0
- package/dist/datastar/watchers/patchSignals.js +15 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/node/NodeFileSystem.d.ts +7 -0
- package/dist/node/NodeFileSystem.js +420 -0
- package/dist/node/NodeUtils.d.ts +2 -0
- package/dist/node/NodeUtils.js +20 -0
- package/dist/x/tailwind/plugin.js +1 -1
- package/package.json +11 -7
- package/src/Development.ts +26 -25
- package/src/{node/Effectify.ts → Effectify.ts} +10 -3
- package/src/FilePathPattern.ts +115 -0
- package/src/FileRouter.ts +178 -255
- package/src/FileRouterCodegen.ts +135 -92
- package/src/{node/PlatformError.ts → PlatformError.ts} +34 -19
- package/src/PlatformRuntime.ts +97 -0
- package/src/RouteBody.ts +1 -1
- package/src/RouteHttp.ts +3 -1
- package/src/Start.ts +61 -14
- package/src/bun/BunPlatformHttpServer.ts +88 -0
- package/src/bun/BunRoute.ts +12 -22
- package/src/bun/BunRuntime.ts +21 -5
- package/src/bun/BunServer.ts +228 -0
- package/src/bun/index.ts +1 -1
- package/src/datastar/README.md +18 -0
- package/src/datastar/actions/fetch.ts +609 -0
- package/src/datastar/actions/peek.ts +17 -0
- package/src/datastar/actions/setAll.ts +20 -0
- package/src/datastar/actions/toggleAll.ts +20 -0
- package/src/datastar/attributes/attr.ts +50 -0
- package/src/datastar/attributes/bind.ts +220 -0
- package/src/datastar/attributes/class.ts +57 -0
- package/src/datastar/attributes/computed.ts +33 -0
- package/src/datastar/attributes/effect.ts +11 -0
- package/src/datastar/attributes/indicator.ts +39 -0
- package/src/datastar/attributes/init.ts +35 -0
- package/src/datastar/attributes/jsonSignals.ts +38 -0
- package/src/datastar/attributes/on.ts +71 -0
- package/src/datastar/attributes/onIntersect.ts +65 -0
- package/src/datastar/attributes/onInterval.ts +39 -0
- package/src/datastar/attributes/onSignalPatch.ts +63 -0
- package/src/datastar/attributes/ref.ts +12 -0
- package/src/datastar/attributes/show.ts +33 -0
- package/src/datastar/attributes/signals.ts +22 -0
- package/src/datastar/attributes/style.ts +63 -0
- package/src/datastar/attributes/text.ts +30 -0
- package/src/datastar/engine.ts +1341 -0
- package/src/datastar/index.ts +25 -0
- package/src/datastar/utils.ts +286 -0
- package/src/datastar/watchers/patchElements.ts +554 -0
- package/src/datastar/watchers/patchSignals.ts +15 -0
- package/src/index.ts +1 -1
- package/src/node/{FileSystem.ts → NodeFileSystem.ts} +2 -2
- package/src/node/{Utils.ts → NodeUtils.ts} +2 -0
- package/src/x/tailwind/plugin.ts +1 -1
- package/src/FileRouterCodegen.todo.ts +0 -1133
- package/src/FileRouterPattern.ts +0 -59
- package/src/RouterPattern.ts +0 -416
- package/src/StartApp.ts +0 -47
- package/src/bun/BunHttpServer.ts +0 -303
- /package/src/bun/{BunHttpServer_web.ts → BunServerRequest.ts} +0 -0
package/README.md
CHANGED
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
|
|
22
22
|
export default Start.layer(
|
|
23
23
|
FileRouter.layer({
|
|
24
|
-
load: () => import("./routes/
|
|
25
|
-
path: import.meta.resolve("./routes/
|
|
24
|
+
load: () => import("./routes/routes.gen.ts"),
|
|
25
|
+
path: import.meta.resolve("./routes/routes.gen.ts"),
|
|
26
26
|
}),
|
|
27
27
|
)
|
|
28
28
|
|
|
@@ -46,7 +46,7 @@ src/routes
|
|
|
46
46
|
│ ├── layer.tsx
|
|
47
47
|
│ └── route.tsx
|
|
48
48
|
├── layer.tsx
|
|
49
|
-
├──
|
|
49
|
+
├── routes.gen.ts
|
|
50
50
|
└── route.tsx
|
|
51
51
|
```
|
|
52
52
|
|
package/dist/Development.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import * as FileSystem from "@effect/platform/FileSystem";
|
|
1
2
|
import * as Context from "effect/Context";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as Layer from "effect/Layer";
|
|
4
5
|
import * as PubSub from "effect/PubSub";
|
|
5
6
|
import * as Stream from "effect/Stream";
|
|
6
|
-
import * as
|
|
7
|
-
import * as FileSystem from "@effect/platform/FileSystem";
|
|
7
|
+
import * as PlatformError from "./PlatformError.ts";
|
|
8
8
|
export type DevelopmentEvent = FileSystem.WatchEvent | {
|
|
9
9
|
readonly _tag: "Reload";
|
|
10
10
|
};
|
|
@@ -22,7 +22,7 @@ export declare const watchSource: (opts?: {
|
|
|
22
22
|
path?: string;
|
|
23
23
|
recursive?: boolean;
|
|
24
24
|
filter?: (event: FileSystem.WatchEvent) => boolean;
|
|
25
|
-
}) => Stream.Stream<FileSystem.WatchEvent,
|
|
25
|
+
}) => Stream.Stream<FileSystem.WatchEvent, PlatformError.PlatformError, FileSystem.FileSystem>;
|
|
26
26
|
export declare const watch: (opts?: {
|
|
27
27
|
path?: string;
|
|
28
28
|
recursive?: boolean;
|
package/dist/Development.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as FileSystem from "@effect/platform/FileSystem";
|
|
1
2
|
import * as Context from "effect/Context";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as Function from "effect/Function";
|
|
@@ -6,7 +7,6 @@ import * as Layer from "effect/Layer";
|
|
|
6
7
|
import * as Option from "effect/Option";
|
|
7
8
|
import * as PubSub from "effect/PubSub";
|
|
8
9
|
import * as Stream from "effect/Stream";
|
|
9
|
-
import * as FileSystem from "@effect/platform/FileSystem";
|
|
10
10
|
const devState = GlobalValue.globalValue(Symbol.for("effect-start/Development"), () => ({
|
|
11
11
|
count: 0,
|
|
12
12
|
pubsub: null,
|
|
@@ -35,7 +35,8 @@ export const watchSource = (opts) => {
|
|
|
35
35
|
strategy: "enforce",
|
|
36
36
|
}));
|
|
37
37
|
};
|
|
38
|
-
export const watch = (opts) => Effect
|
|
38
|
+
export const watch = (opts) => Effect
|
|
39
|
+
.gen(function* () {
|
|
39
40
|
devState.count++;
|
|
40
41
|
if (devState.count === 1) {
|
|
41
42
|
const pubsub = yield* PubSub.unbounded();
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
interface Callback<E, A> {
|
|
3
|
+
(err: E, a?: A): void;
|
|
4
|
+
}
|
|
5
|
+
type ArgsWithCallback<Args extends Array<any>, E, A> = [
|
|
6
|
+
...args: Args,
|
|
7
|
+
cb: Callback<E, A>
|
|
8
|
+
];
|
|
9
|
+
type WithoutNull<A> = unknown extends A ? void : Exclude<A, null | undefined>;
|
|
10
|
+
type Effectify<T, E> = T extends {
|
|
11
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
12
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
13
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
14
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
15
|
+
(...args: ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
|
|
16
|
+
(...args: ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
|
|
17
|
+
(...args: ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
|
|
18
|
+
(...args: ArgsWithCallback<infer Args8, infer _E8, infer A8>): infer _R8;
|
|
19
|
+
(...args: ArgsWithCallback<infer Args9, infer _E9, infer A9>): infer _R9;
|
|
20
|
+
(...args: ArgsWithCallback<infer Args10, infer _E10, infer A10>): infer _R10;
|
|
21
|
+
} ? {
|
|
22
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
23
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
24
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
25
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
26
|
+
(...args: Args5): Effect.Effect<WithoutNull<A5>, E>;
|
|
27
|
+
(...args: Args6): Effect.Effect<WithoutNull<A6>, E>;
|
|
28
|
+
(...args: Args7): Effect.Effect<WithoutNull<A7>, E>;
|
|
29
|
+
(...args: Args8): Effect.Effect<WithoutNull<A8>, E>;
|
|
30
|
+
(...args: Args9): Effect.Effect<WithoutNull<A9>, E>;
|
|
31
|
+
(...args: Args10): Effect.Effect<WithoutNull<A10>, E>;
|
|
32
|
+
} : T extends {
|
|
33
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
34
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
35
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
36
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
37
|
+
(...args: ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
|
|
38
|
+
(...args: ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
|
|
39
|
+
(...args: ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
|
|
40
|
+
(...args: ArgsWithCallback<infer Args8, infer _E8, infer A8>): infer _R8;
|
|
41
|
+
(...args: ArgsWithCallback<infer Args9, infer _E9, infer A9>): infer _R9;
|
|
42
|
+
} ? {
|
|
43
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
44
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
45
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
46
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
47
|
+
(...args: Args5): Effect.Effect<WithoutNull<A5>, E>;
|
|
48
|
+
(...args: Args6): Effect.Effect<WithoutNull<A6>, E>;
|
|
49
|
+
(...args: Args7): Effect.Effect<WithoutNull<A7>, E>;
|
|
50
|
+
(...args: Args8): Effect.Effect<WithoutNull<A8>, E>;
|
|
51
|
+
(...args: Args9): Effect.Effect<WithoutNull<A9>, E>;
|
|
52
|
+
} : T extends {
|
|
53
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
54
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
55
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
56
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
57
|
+
(...args: ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
|
|
58
|
+
(...args: ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
|
|
59
|
+
(...args: ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
|
|
60
|
+
(...args: ArgsWithCallback<infer Args8, infer _E8, infer A8>): infer _R8;
|
|
61
|
+
} ? {
|
|
62
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
63
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
64
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
65
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
66
|
+
(...args: Args5): Effect.Effect<WithoutNull<A5>, E>;
|
|
67
|
+
(...args: Args6): Effect.Effect<WithoutNull<A6>, E>;
|
|
68
|
+
(...args: Args7): Effect.Effect<WithoutNull<A7>, E>;
|
|
69
|
+
(...args: Args8): Effect.Effect<WithoutNull<A8>, E>;
|
|
70
|
+
} : T extends {
|
|
71
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
72
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
73
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
74
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
75
|
+
(...args: ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
|
|
76
|
+
(...args: ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
|
|
77
|
+
(...args: ArgsWithCallback<infer Args7, infer _E7, infer A7>): infer _R7;
|
|
78
|
+
} ? {
|
|
79
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
80
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
81
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
82
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
83
|
+
(...args: Args5): Effect.Effect<WithoutNull<A5>, E>;
|
|
84
|
+
(...args: Args6): Effect.Effect<WithoutNull<A6>, E>;
|
|
85
|
+
(...args: Args7): Effect.Effect<WithoutNull<A7>, E>;
|
|
86
|
+
} : T extends {
|
|
87
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
88
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
89
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
90
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
91
|
+
(...args: ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
|
|
92
|
+
(...args: ArgsWithCallback<infer Args6, infer _E6, infer A6>): infer _R6;
|
|
93
|
+
} ? {
|
|
94
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
95
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
96
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
97
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
98
|
+
(...args: Args5): Effect.Effect<WithoutNull<A5>, E>;
|
|
99
|
+
(...args: Args6): Effect.Effect<WithoutNull<A6>, E>;
|
|
100
|
+
} : T extends {
|
|
101
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
102
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
103
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
104
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
105
|
+
(...args: ArgsWithCallback<infer Args5, infer _E5, infer A5>): infer _R5;
|
|
106
|
+
} ? {
|
|
107
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
108
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
109
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
110
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
111
|
+
(...args: Args5): Effect.Effect<WithoutNull<A5>, E>;
|
|
112
|
+
} : T extends {
|
|
113
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
114
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
115
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
116
|
+
(...args: ArgsWithCallback<infer Args4, infer _E4, infer A4>): infer _R4;
|
|
117
|
+
} ? {
|
|
118
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
119
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
120
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
121
|
+
(...args: Args4): Effect.Effect<WithoutNull<A4>, E>;
|
|
122
|
+
} : T extends {
|
|
123
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
124
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
125
|
+
(...args: ArgsWithCallback<infer Args3, infer _E3, infer A3>): infer _R3;
|
|
126
|
+
} ? {
|
|
127
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
128
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
129
|
+
(...args: Args3): Effect.Effect<WithoutNull<A3>, E>;
|
|
130
|
+
} : T extends {
|
|
131
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
132
|
+
(...args: ArgsWithCallback<infer Args2, infer _E2, infer A2>): infer _R2;
|
|
133
|
+
} ? {
|
|
134
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
135
|
+
(...args: Args2): Effect.Effect<WithoutNull<A2>, E>;
|
|
136
|
+
} : T extends {
|
|
137
|
+
(...args: ArgsWithCallback<infer Args1, infer _E1, infer A1>): infer _R1;
|
|
138
|
+
} ? {
|
|
139
|
+
(...args: Args1): Effect.Effect<WithoutNull<A1>, E>;
|
|
140
|
+
} : never;
|
|
141
|
+
type EffectifyError<T> = T extends {
|
|
142
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
143
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
144
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
145
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
146
|
+
(...args: ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
|
|
147
|
+
(...args: ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
|
|
148
|
+
(...args: ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
|
|
149
|
+
(...args: ArgsWithCallback<infer _Args8, infer E8, infer _A8>): infer _R8;
|
|
150
|
+
(...args: ArgsWithCallback<infer _Args9, infer E9, infer _A9>): infer _R9;
|
|
151
|
+
(...args: ArgsWithCallback<infer _Args10, infer E10, infer _A10>): infer _R10;
|
|
152
|
+
} ? NonNullable<E1 | E2 | E3 | E4 | E5 | E6 | E7 | E8 | E9 | E10> : T extends {
|
|
153
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
154
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
155
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
156
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
157
|
+
(...args: ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
|
|
158
|
+
(...args: ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
|
|
159
|
+
(...args: ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
|
|
160
|
+
(...args: ArgsWithCallback<infer _Args8, infer E8, infer _A8>): infer _R8;
|
|
161
|
+
(...args: ArgsWithCallback<infer _Args9, infer E9, infer _A9>): infer _R9;
|
|
162
|
+
} ? NonNullable<E1 | E2 | E3 | E4 | E5 | E6 | E7 | E8 | E9> : T extends {
|
|
163
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
164
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
165
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
166
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
167
|
+
(...args: ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
|
|
168
|
+
(...args: ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
|
|
169
|
+
(...args: ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
|
|
170
|
+
(...args: ArgsWithCallback<infer _Args8, infer E8, infer _A8>): infer _R8;
|
|
171
|
+
} ? NonNullable<E1 | E2 | E3 | E4 | E5 | E6 | E7 | E8> : T extends {
|
|
172
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
173
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
174
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
175
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
176
|
+
(...args: ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
|
|
177
|
+
(...args: ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
|
|
178
|
+
(...args: ArgsWithCallback<infer _Args7, infer E7, infer _A7>): infer _R7;
|
|
179
|
+
} ? NonNullable<E1 | E2 | E3 | E4 | E5 | E6 | E7> : T extends {
|
|
180
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
181
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
182
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
183
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
184
|
+
(...args: ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
|
|
185
|
+
(...args: ArgsWithCallback<infer _Args6, infer E6, infer _A6>): infer _R6;
|
|
186
|
+
} ? NonNullable<E1 | E2 | E3 | E4 | E5 | E6> : T extends {
|
|
187
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
188
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
189
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
190
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
191
|
+
(...args: ArgsWithCallback<infer _Args5, infer E5, infer _A5>): infer _R5;
|
|
192
|
+
} ? NonNullable<E1 | E2 | E3 | E4 | E5> : T extends {
|
|
193
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
194
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
195
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
196
|
+
(...args: ArgsWithCallback<infer _Args4, infer E4, infer _A4>): infer _R4;
|
|
197
|
+
} ? NonNullable<E1 | E2 | E3 | E4> : T extends {
|
|
198
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
199
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
200
|
+
(...args: ArgsWithCallback<infer _Args3, infer E3, infer _A3>): infer _R3;
|
|
201
|
+
} ? NonNullable<E1 | E2 | E3> : T extends {
|
|
202
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
203
|
+
(...args: ArgsWithCallback<infer _Args2, infer E2, infer _A2>): infer _R2;
|
|
204
|
+
} ? NonNullable<E1 | E2> : T extends {
|
|
205
|
+
(...args: ArgsWithCallback<infer _Args1, infer E1, infer _A1>): infer _R1;
|
|
206
|
+
} ? NonNullable<E1> : never;
|
|
207
|
+
export declare const effectify: {
|
|
208
|
+
<F extends (...args: Array<any>) => any>(fn: F): Effectify<F, EffectifyError<F>>;
|
|
209
|
+
<F extends (...args: Array<any>) => any, E>(fn: F, onError: (error: EffectifyError<F>, args: Parameters<F>) => E): Effectify<F, E>;
|
|
210
|
+
<F extends (...args: Array<any>) => any, E, E2>(fn: F, onError: (error: EffectifyError<F>, args: Parameters<F>) => E, onSyncError: (error: unknown, args: Parameters<F>) => E2): Effectify<F, E | E2>;
|
|
211
|
+
};
|
|
212
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Adapted from @effect/platform
|
|
3
|
+
*/
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
export const effectify = ((fn, onError, onSyncError) => (...args) => Effect.async((resume) => {
|
|
6
|
+
try {
|
|
7
|
+
fn(...args, (err, result) => {
|
|
8
|
+
if (err) {
|
|
9
|
+
resume(Effect.fail(onError ? onError(err, args) : err));
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
resume(Effect.succeed(result));
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
resume(onSyncError ? Effect.fail(onSyncError(err, args)) : Effect.die(err));
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as Either from "effect/Either";
|
|
2
|
+
import type * as PathPattern from "./PathPattern.ts";
|
|
3
|
+
export type FilePathPattern = string;
|
|
4
|
+
export type Segment = {
|
|
5
|
+
_tag: "GroupSegment";
|
|
6
|
+
name: string;
|
|
7
|
+
} | {
|
|
8
|
+
_tag: "RestSegment";
|
|
9
|
+
name: string;
|
|
10
|
+
} | {
|
|
11
|
+
_tag: "ParamSegment";
|
|
12
|
+
name: string;
|
|
13
|
+
} | {
|
|
14
|
+
_tag: "LiteralSegment";
|
|
15
|
+
value: string;
|
|
16
|
+
} | {
|
|
17
|
+
_tag: "InvalidSegment";
|
|
18
|
+
value: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function segments(pattern: string): Segment[];
|
|
21
|
+
export type ValidationError = {
|
|
22
|
+
_tag: "FilePathPatternError";
|
|
23
|
+
pattern: string;
|
|
24
|
+
message: string;
|
|
25
|
+
};
|
|
26
|
+
export type ValidationResult = Either.Either<Segment[], ValidationError>;
|
|
27
|
+
export declare function validate(pattern: string): ValidationResult;
|
|
28
|
+
export declare function format(segs: Segment[]): `/${string}`;
|
|
29
|
+
export declare function toPathPattern(pattern: string): Either.Either<PathPattern.PathPattern, ValidationError>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as Either from "effect/Either";
|
|
2
|
+
export function segments(pattern) {
|
|
3
|
+
const parts = pattern.split("/").filter(Boolean);
|
|
4
|
+
const result = [];
|
|
5
|
+
for (const part of parts) {
|
|
6
|
+
if (/^\(\w+\)$/.test(part)) {
|
|
7
|
+
result.push({ _tag: "GroupSegment", name: part.slice(1, -1) });
|
|
8
|
+
}
|
|
9
|
+
else if (part.startsWith("[[") && part.endsWith("]]")) {
|
|
10
|
+
result.push({ _tag: "RestSegment", name: part.slice(2, -2) });
|
|
11
|
+
}
|
|
12
|
+
else if (part.startsWith("[") && part.endsWith("]")) {
|
|
13
|
+
result.push({ _tag: "ParamSegment", name: part.slice(1, -1) });
|
|
14
|
+
}
|
|
15
|
+
else if (/^[\p{L}\p{N}._~-]+$/u.test(part)) {
|
|
16
|
+
result.push({ _tag: "LiteralSegment", value: part });
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
result.push({ _tag: "InvalidSegment", value: part });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
export function validate(pattern) {
|
|
25
|
+
const segs = segments(pattern);
|
|
26
|
+
const invalid = segs.find((s) => s._tag === "InvalidSegment");
|
|
27
|
+
if (invalid) {
|
|
28
|
+
return Either.left({
|
|
29
|
+
_tag: "FilePathPatternError",
|
|
30
|
+
pattern,
|
|
31
|
+
message: `Invalid segment: "${invalid.value}"`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const restIndex = segs.findIndex((s) => s._tag === "RestSegment");
|
|
35
|
+
if (restIndex !== -1 && restIndex !== segs.length - 1) {
|
|
36
|
+
return Either.left({
|
|
37
|
+
_tag: "FilePathPatternError",
|
|
38
|
+
pattern,
|
|
39
|
+
message: "Rest segment must be the last segment",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return Either.right(segs);
|
|
43
|
+
}
|
|
44
|
+
export function format(segs) {
|
|
45
|
+
const parts = segs.map((seg) => {
|
|
46
|
+
switch (seg._tag) {
|
|
47
|
+
case "GroupSegment":
|
|
48
|
+
return `(${seg.name})`;
|
|
49
|
+
case "RestSegment":
|
|
50
|
+
return `[[${seg.name}]]`;
|
|
51
|
+
case "ParamSegment":
|
|
52
|
+
return `[${seg.name}]`;
|
|
53
|
+
case "LiteralSegment":
|
|
54
|
+
return seg.value;
|
|
55
|
+
case "InvalidSegment":
|
|
56
|
+
return seg.value;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const joined = parts.join("/");
|
|
60
|
+
return (joined ? `/${joined}` : "/");
|
|
61
|
+
}
|
|
62
|
+
export function toPathPattern(pattern) {
|
|
63
|
+
const result = validate(pattern);
|
|
64
|
+
if (Either.isLeft(result)) {
|
|
65
|
+
return Either.left(result.left);
|
|
66
|
+
}
|
|
67
|
+
const segs = result.right;
|
|
68
|
+
const pathParts = [];
|
|
69
|
+
for (const seg of segs) {
|
|
70
|
+
switch (seg._tag) {
|
|
71
|
+
case "GroupSegment":
|
|
72
|
+
continue;
|
|
73
|
+
case "RestSegment":
|
|
74
|
+
pathParts.push(`:${seg.name}*`);
|
|
75
|
+
break;
|
|
76
|
+
case "ParamSegment":
|
|
77
|
+
pathParts.push(`:${seg.name}`);
|
|
78
|
+
break;
|
|
79
|
+
case "LiteralSegment":
|
|
80
|
+
pathParts.push(seg.value);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const joined = pathParts.join("/");
|
|
85
|
+
return Either.right((joined ? `/${joined}` : "/"));
|
|
86
|
+
}
|
package/dist/FileRouter.d.ts
CHANGED
|
@@ -1,61 +1,59 @@
|
|
|
1
|
-
import type { PlatformError } from "@effect/platform/Error";
|
|
2
1
|
import * as FileSystem from "@effect/platform/FileSystem";
|
|
3
|
-
import * as Context from "effect/Context";
|
|
4
2
|
import * as Effect from "effect/Effect";
|
|
5
3
|
import * as Layer from "effect/Layer";
|
|
6
|
-
import * as
|
|
4
|
+
import * as FilePathPattern from "./FilePathPattern.ts";
|
|
5
|
+
import type * as PathPattern from "./PathPattern.ts";
|
|
6
|
+
import type * as PlatformError from "./PlatformError.ts";
|
|
7
|
+
import * as Route from "./Route.ts";
|
|
8
|
+
import * as RouteTree from "./RouteTree.ts";
|
|
9
|
+
declare const FileRouterError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
10
|
+
readonly _tag: "FileRouterError";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
export declare class FileRouterError extends FileRouterError_base<{
|
|
13
|
+
reason: "Import" | "Conflict" | "FileSystem";
|
|
14
|
+
cause?: unknown;
|
|
15
|
+
path?: string;
|
|
16
|
+
}> {
|
|
17
|
+
}
|
|
7
18
|
export type RouteModule = {
|
|
8
|
-
default:
|
|
9
|
-
};
|
|
10
|
-
export type LazyRoute = {
|
|
11
|
-
path: `/${string}`;
|
|
12
|
-
load: () => Promise<RouteModule>;
|
|
13
|
-
layers?: ReadonlyArray<() => Promise<unknown>>;
|
|
19
|
+
default: Route.RouteSet.Any;
|
|
14
20
|
};
|
|
15
|
-
type
|
|
16
|
-
|
|
21
|
+
export type LazyRouteModule = () => Promise<RouteModule>;
|
|
22
|
+
export type FileRoutes = {
|
|
23
|
+
[path: PathPattern.PathPattern]: [
|
|
24
|
+
LazyRouteModule,
|
|
25
|
+
...LazyRouteModule[]
|
|
26
|
+
];
|
|
17
27
|
};
|
|
18
|
-
|
|
19
|
-
export
|
|
20
|
-
}
|
|
21
|
-
export type GroupSegment<Name extends string = string> = FileRouterPattern.GroupSegment<Name>;
|
|
22
|
-
export type Segment = FileRouterPattern.Segment;
|
|
23
|
-
export type RouteHandle = {
|
|
28
|
+
export type Segment = FilePathPattern.Segment;
|
|
29
|
+
export type FileRoute = {
|
|
24
30
|
handle: "route" | "layer";
|
|
25
|
-
modulePath: string
|
|
31
|
+
modulePath: `/${string}`;
|
|
26
32
|
routePath: `/${string}`;
|
|
27
33
|
segments: Segment[];
|
|
28
34
|
};
|
|
29
35
|
/**
|
|
30
|
-
* Routes
|
|
31
|
-
* rest parameters are put at the end for each segment.
|
|
36
|
+
* Routes sorted by depth, with rest parameters at the end.
|
|
32
37
|
* - layer.tsx
|
|
33
38
|
* - users/route.tsx
|
|
34
39
|
* - users/[userId]/route.tsx
|
|
35
|
-
* - [[
|
|
40
|
+
* - [[rest]]/route.tsx
|
|
36
41
|
*/
|
|
37
|
-
export type
|
|
38
|
-
export declare
|
|
39
|
-
export declare const formatSegment: typeof FileRouterPattern.formatSegment;
|
|
40
|
-
export declare const format: typeof FileRouterPattern.format;
|
|
41
|
-
export declare function parseRoute(path: string): RouteHandle;
|
|
42
|
+
export type OrderedFileRoutes = FileRoute[];
|
|
43
|
+
export declare function parseRoute(path: string): FileRoute | null;
|
|
42
44
|
/**
|
|
43
|
-
* Generates a
|
|
45
|
+
* Generates a tree file that references all routes.
|
|
44
46
|
*/
|
|
47
|
+
export declare function layer(load: () => Promise<{
|
|
48
|
+
default: FileRoutes;
|
|
49
|
+
}>): Layer.Layer<Route.Routes, FileRouterError, FileSystem.FileSystem>;
|
|
45
50
|
export declare function layer(options: {
|
|
46
|
-
load: () => Promise<
|
|
51
|
+
load: () => Promise<{
|
|
52
|
+
default: FileRoutes;
|
|
53
|
+
}>;
|
|
47
54
|
path: string;
|
|
48
|
-
}): Layer.Layer<
|
|
49
|
-
export declare function
|
|
50
|
-
export declare function walkRoutesDirectory(dir: string): Effect.Effect<
|
|
51
|
-
|
|
52
|
-
* Given a list of paths, return a list of route handles.
|
|
53
|
-
*/
|
|
54
|
-
export declare function getRouteHandlesFromPaths(paths: string[]): OrderedRouteHandles;
|
|
55
|
-
type RouteTree = {
|
|
56
|
-
path: `/${string}`;
|
|
57
|
-
handles: RouteHandle[];
|
|
58
|
-
children?: RouteTree[];
|
|
59
|
-
};
|
|
60
|
-
export declare function treeFromRouteHandles(handles: RouteHandle[]): RouteTree;
|
|
55
|
+
}): Layer.Layer<Route.Routes, FileRouterError, FileSystem.FileSystem>;
|
|
56
|
+
export declare function fromFileRoutes(fileRoutes: FileRoutes): Effect.Effect<RouteTree.RouteTree>;
|
|
57
|
+
export declare function walkRoutesDirectory(dir: string): Effect.Effect<OrderedFileRoutes, PlatformError.PlatformError | FileRouterError, FileSystem.FileSystem>;
|
|
58
|
+
export declare function getFileRoutes(paths: string[]): Effect.Effect<OrderedFileRoutes, FileRouterError>;
|
|
61
59
|
export {};
|