effect-start 0.23.1 → 0.26.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/package.json +18 -86
- package/src/Development.ts +3 -1
- package/src/Entity.ts +17 -0
- package/src/Fetch.ts +271 -0
- package/src/SqlIntrospect.ts +64 -70
- package/src/Start.ts +21 -24
- package/src/StartApp.ts +1 -1
- package/src/bun/BunServer.ts +42 -10
- package/src/hyper/HyperHtml.ts +0 -1
- package/src/sql/bun/index.ts +1 -1
- package/src/sql/index.ts +1 -0
- package/src/sql/libsql/index.ts +173 -0
- package/src/sql/libsql/libsql.d.ts +39 -0
- package/src/sql/mssql/index.ts +1 -1
- package/dist/BlobStore.d.ts +0 -80
- package/dist/BlobStore.js +0 -19
- package/dist/ChildProcess.d.ts +0 -60
- package/dist/ChildProcess.js +0 -30
- package/dist/Commander.d.ts +0 -100
- package/dist/Commander.js +0 -326
- package/dist/ContentNegotiation.d.ts +0 -12
- package/dist/ContentNegotiation.js +0 -359
- package/dist/Cookies.d.ts +0 -47
- package/dist/Cookies.js +0 -302
- package/dist/Development.d.ts +0 -39
- package/dist/Development.js +0 -58
- package/dist/Effectify.d.ts +0 -209
- package/dist/Effectify.js +0 -19
- package/dist/Entity.d.ts +0 -47
- package/dist/Entity.js +0 -224
- package/dist/FilePathPattern.d.ts +0 -29
- package/dist/FilePathPattern.js +0 -86
- package/dist/FileRouter.d.ts +0 -56
- package/dist/FileRouter.js +0 -148
- package/dist/FileRouterCodegen.d.ts +0 -18
- package/dist/FileRouterCodegen.js +0 -227
- package/dist/FileRouterPattern.d.ts +0 -9
- package/dist/FileRouterPattern.js +0 -35
- package/dist/FileSystem.d.ts +0 -158
- package/dist/FileSystem.js +0 -70
- package/dist/Http.d.ts +0 -37
- package/dist/Http.js +0 -88
- package/dist/HttpAppExtra.d.ts +0 -7
- package/dist/HttpAppExtra.js +0 -320
- package/dist/HttpUtils.d.ts +0 -3
- package/dist/HttpUtils.js +0 -11
- package/dist/PathPattern.d.ts +0 -134
- package/dist/PathPattern.js +0 -413
- package/dist/PlatformError.d.ts +0 -38
- package/dist/PlatformError.js +0 -25
- package/dist/PlatformRuntime.d.ts +0 -27
- package/dist/PlatformRuntime.js +0 -46
- package/dist/Route.d.ts +0 -97
- package/dist/Route.js +0 -100
- package/dist/RouteBody.d.ts +0 -47
- package/dist/RouteBody.js +0 -67
- package/dist/RouteError.d.ts +0 -98
- package/dist/RouteError.js +0 -55
- package/dist/RouteHook.d.ts +0 -12
- package/dist/RouteHook.js +0 -40
- package/dist/RouteHttp.d.ts +0 -21
- package/dist/RouteHttp.js +0 -258
- package/dist/RouteHttpTracer.d.ts +0 -10
- package/dist/RouteHttpTracer.js +0 -62
- package/dist/RouteMount.d.ts +0 -86
- package/dist/RouteMount.js +0 -63
- package/dist/RouteSchema.d.ts +0 -86
- package/dist/RouteSchema.js +0 -188
- package/dist/RouteSse.d.ts +0 -21
- package/dist/RouteSse.js +0 -79
- package/dist/RouteTree.d.ts +0 -57
- package/dist/RouteTree.js +0 -93
- package/dist/RouteTrie.d.ts +0 -20
- package/dist/RouteTrie.js +0 -152
- package/dist/RouterPattern.d.ts +0 -118
- package/dist/RouterPattern.js +0 -269
- package/dist/SchemaExtra.d.ts +0 -7
- package/dist/SchemaExtra.js +0 -74
- package/dist/Socket.d.ts +0 -27
- package/dist/Socket.js +0 -29
- package/dist/Sql.d.ts +0 -34
- package/dist/Sql.js +0 -5
- package/dist/SqlIntrospect.d.ts +0 -91
- package/dist/SqlIntrospect.js +0 -466
- package/dist/Start.d.ts +0 -44
- package/dist/Start.js +0 -49
- package/dist/StartApp.d.ts +0 -19
- package/dist/StartApp.js +0 -21
- package/dist/StreamExtra.d.ts +0 -28
- package/dist/StreamExtra.js +0 -100
- package/dist/System.d.ts +0 -7
- package/dist/System.js +0 -22
- package/dist/TuplePathPattern.d.ts +0 -9
- package/dist/TuplePathPattern.js +0 -68
- package/dist/Unique.d.ts +0 -50
- package/dist/Unique.js +0 -187
- package/dist/Values.d.ts +0 -27
- package/dist/Values.js +0 -36
- package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
- package/dist/bun/BunBlobStoreDisk.js +0 -116
- package/dist/bun/BunBlobStoreS3.d.ts +0 -11
- package/dist/bun/BunBlobStoreS3.js +0 -89
- package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
- package/dist/bun/BunBlobWatcherDisk.js +0 -60
- package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
- package/dist/bun/BunBlobWatcherQueue.js +0 -17
- package/dist/bun/BunBundle.d.ts +0 -11
- package/dist/bun/BunBundle.js +0 -137
- package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
- package/dist/bun/BunChildProcessSpawner.js +0 -103
- package/dist/bun/BunHttpServer.d.ts +0 -44
- package/dist/bun/BunHttpServer.js +0 -186
- package/dist/bun/BunHttpServer_web.d.ts +0 -60
- package/dist/bun/BunHttpServer_web.js +0 -252
- package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
- package/dist/bun/BunImportTrackerPlugin.js +0 -69
- package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
- package/dist/bun/BunPlatformHttpServer.js +0 -53
- package/dist/bun/BunRoute.d.ts +0 -48
- package/dist/bun/BunRoute.js +0 -121
- package/dist/bun/BunRuntime.d.ts +0 -2
- package/dist/bun/BunRuntime.js +0 -31
- package/dist/bun/BunServer.d.ts +0 -40
- package/dist/bun/BunServer.js +0 -157
- package/dist/bun/BunServerRequest.d.ts +0 -60
- package/dist/bun/BunServerRequest.js +0 -252
- package/dist/bun/BunSql.d.ts +0 -4
- package/dist/bun/BunSql.js +0 -81
- package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
- package/dist/bun/BunVirtualFilesPlugin.js +0 -40
- package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
- package/dist/bun/_BunEnhancedResolve.js +0 -102
- package/dist/bun/index.d.ts +0 -5
- package/dist/bun/index.js +0 -5
- package/dist/bundler/Bundle.d.ts +0 -61
- package/dist/bundler/Bundle.js +0 -48
- package/dist/bundler/BundleFiles.d.ts +0 -13
- package/dist/bundler/BundleFiles.js +0 -96
- package/dist/bundler/BundleHttp.d.ts +0 -45
- package/dist/bundler/BundleHttp.js +0 -176
- package/dist/bundler/BundleRoute.d.ts +0 -27
- package/dist/bundler/BundleRoute.js +0 -51
- package/dist/client/Overlay.d.ts +0 -2
- package/dist/client/Overlay.js +0 -32
- package/dist/client/ScrollState.d.ts +0 -6
- package/dist/client/ScrollState.js +0 -94
- package/dist/client/index.d.ts +0 -6
- package/dist/client/index.js +0 -79
- package/dist/console/Console.d.ts +0 -6
- package/dist/console/Console.js +0 -26
- package/dist/console/ConsoleErrors.d.ts +0 -3
- package/dist/console/ConsoleErrors.js +0 -200
- package/dist/console/ConsoleLogger.d.ts +0 -3
- package/dist/console/ConsoleLogger.js +0 -47
- package/dist/console/ConsoleMetrics.d.ts +0 -3
- package/dist/console/ConsoleMetrics.js +0 -61
- package/dist/console/ConsoleProcess.d.ts +0 -3
- package/dist/console/ConsoleProcess.js +0 -49
- package/dist/console/ConsoleStore.d.ts +0 -144
- package/dist/console/ConsoleStore.js +0 -61
- package/dist/console/ConsoleTracer.d.ts +0 -3
- package/dist/console/ConsoleTracer.js +0 -94
- package/dist/console/Simulation.d.ts +0 -2
- package/dist/console/Simulation.js +0 -633
- package/dist/console/index.d.ts +0 -3
- package/dist/console/index.js +0 -3
- package/dist/console/routes/errors/route.d.ts +0 -10
- package/dist/console/routes/errors/route.js +0 -47
- package/dist/console/routes/fiberDetail.d.ts +0 -16
- package/dist/console/routes/fiberDetail.js +0 -38
- package/dist/console/routes/fibers/route.d.ts +0 -10
- package/dist/console/routes/fibers/route.js +0 -19
- package/dist/console/routes/git/route.d.ts +0 -11
- package/dist/console/routes/git/route.js +0 -33
- package/dist/console/routes/layout.d.ts +0 -9
- package/dist/console/routes/layout.js +0 -3
- package/dist/console/routes/logs/route.d.ts +0 -10
- package/dist/console/routes/logs/route.js +0 -32
- package/dist/console/routes/metrics/route.d.ts +0 -10
- package/dist/console/routes/metrics/route.js +0 -17
- package/dist/console/routes/route.d.ts +0 -6
- package/dist/console/routes/route.js +0 -5
- package/dist/console/routes/routes/route.d.ts +0 -6
- package/dist/console/routes/routes/route.js +0 -20
- package/dist/console/routes/services/route.d.ts +0 -6
- package/dist/console/routes/services/route.js +0 -12
- package/dist/console/routes/system/route.d.ts +0 -10
- package/dist/console/routes/system/route.js +0 -18
- package/dist/console/routes/traceDetail.d.ts +0 -16
- package/dist/console/routes/traceDetail.js +0 -14
- package/dist/console/routes/traces/route.d.ts +0 -10
- package/dist/console/routes/traces/route.js +0 -39
- package/dist/console/routes/tree.d.ts +0 -153
- package/dist/console/routes/tree.js +0 -29
- package/dist/console/ui/Errors.d.ts +0 -4
- package/dist/console/ui/Errors.js +0 -15
- package/dist/console/ui/Fibers.d.ts +0 -24
- package/dist/console/ui/Fibers.js +0 -121
- package/dist/console/ui/Git.d.ts +0 -20
- package/dist/console/ui/Git.js +0 -95
- package/dist/console/ui/Logs.d.ts +0 -4
- package/dist/console/ui/Logs.js +0 -25
- package/dist/console/ui/Metrics.d.ts +0 -4
- package/dist/console/ui/Metrics.js +0 -26
- package/dist/console/ui/Routes.d.ts +0 -8
- package/dist/console/ui/Routes.js +0 -70
- package/dist/console/ui/Services.d.ts +0 -10
- package/dist/console/ui/Services.js +0 -246
- package/dist/console/ui/Shell.d.ts +0 -10
- package/dist/console/ui/Shell.js +0 -7
- package/dist/console/ui/System.d.ts +0 -4
- package/dist/console/ui/System.js +0 -35
- package/dist/console/ui/Traces.d.ts +0 -12
- package/dist/console/ui/Traces.js +0 -179
- package/dist/datastar/actions/fetch.d.ts +0 -30
- package/dist/datastar/actions/fetch.js +0 -403
- package/dist/datastar/actions/peek.d.ts +0 -1
- package/dist/datastar/actions/peek.js +0 -13
- package/dist/datastar/actions/setAll.d.ts +0 -1
- package/dist/datastar/actions/setAll.js +0 -12
- package/dist/datastar/actions/toggleAll.d.ts +0 -1
- package/dist/datastar/actions/toggleAll.js +0 -12
- package/dist/datastar/attributes/attr.d.ts +0 -1
- package/dist/datastar/attributes/attr.js +0 -48
- package/dist/datastar/attributes/bind.d.ts +0 -1
- package/dist/datastar/attributes/bind.js +0 -175
- package/dist/datastar/attributes/class.d.ts +0 -1
- package/dist/datastar/attributes/class.js +0 -47
- package/dist/datastar/attributes/computed.d.ts +0 -1
- package/dist/datastar/attributes/computed.js +0 -26
- package/dist/datastar/attributes/effect.d.ts +0 -1
- package/dist/datastar/attributes/effect.js +0 -9
- package/dist/datastar/attributes/indicator.d.ts +0 -1
- package/dist/datastar/attributes/indicator.js +0 -30
- package/dist/datastar/attributes/init.d.ts +0 -1
- package/dist/datastar/attributes/init.js +0 -26
- package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
- package/dist/datastar/attributes/jsonSignals.js +0 -30
- package/dist/datastar/attributes/on.d.ts +0 -1
- package/dist/datastar/attributes/on.js +0 -78
- package/dist/datastar/attributes/onIntersect.d.ts +0 -1
- package/dist/datastar/attributes/onIntersect.js +0 -53
- package/dist/datastar/attributes/onInterval.d.ts +0 -1
- package/dist/datastar/attributes/onInterval.js +0 -30
- package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
- package/dist/datastar/attributes/onSignalPatch.js +0 -42
- package/dist/datastar/attributes/ref.d.ts +0 -1
- package/dist/datastar/attributes/ref.js +0 -10
- package/dist/datastar/attributes/show.d.ts +0 -1
- package/dist/datastar/attributes/show.js +0 -31
- package/dist/datastar/attributes/signals.d.ts +0 -1
- package/dist/datastar/attributes/signals.js +0 -17
- package/dist/datastar/attributes/style.d.ts +0 -1
- package/dist/datastar/attributes/style.js +0 -50
- package/dist/datastar/attributes/text.d.ts +0 -1
- package/dist/datastar/attributes/text.js +0 -26
- package/dist/datastar/engine.d.ts +0 -162
- package/dist/datastar/engine.js +0 -999
- package/dist/datastar/happydom.d.ts +0 -1
- package/dist/datastar/happydom.js +0 -8
- package/dist/datastar/index.d.ts +0 -24
- package/dist/datastar/index.js +0 -24
- package/dist/datastar/load.d.ts +0 -24
- package/dist/datastar/load.js +0 -24
- package/dist/datastar/utils.d.ts +0 -51
- package/dist/datastar/utils.js +0 -202
- package/dist/datastar/watchers/patchElements.d.ts +0 -1
- package/dist/datastar/watchers/patchElements.js +0 -399
- package/dist/datastar/watchers/patchSignals.d.ts +0 -1
- package/dist/datastar/watchers/patchSignals.js +0 -14
- package/dist/experimental/EncryptedCookies.d.ts +0 -48
- package/dist/experimental/EncryptedCookies.js +0 -212
- package/dist/experimental/SseHttpResponse.d.ts +0 -7
- package/dist/experimental/SseHttpResponse.js +0 -28
- package/dist/experimental/index.d.ts +0 -1
- package/dist/experimental/index.js +0 -1
- package/dist/hyper/Hyper.d.ts +0 -25
- package/dist/hyper/Hyper.js +0 -23
- package/dist/hyper/HyperHtml.d.ts +0 -23
- package/dist/hyper/HyperHtml.js +0 -150
- package/dist/hyper/HyperHtml.test.d.ts +0 -1
- package/dist/hyper/HyperHtml.test.js +0 -197
- package/dist/hyper/HyperNode.d.ts +0 -14
- package/dist/hyper/HyperNode.js +0 -11
- package/dist/hyper/HyperRoute.d.ts +0 -8
- package/dist/hyper/HyperRoute.js +0 -32
- package/dist/hyper/HyperRoute.test.d.ts +0 -1
- package/dist/hyper/HyperRoute.test.js +0 -83
- package/dist/hyper/html.d.ts +0 -11
- package/dist/hyper/html.js +0 -30
- package/dist/hyper/index.d.ts +0 -6
- package/dist/hyper/index.js +0 -5
- package/dist/hyper/jsx-runtime.d.ts +0 -7
- package/dist/hyper/jsx-runtime.js +0 -8
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -8
- package/dist/inference_check.d.ts +0 -1
- package/dist/inference_check.js +0 -15
- package/dist/lint/plugin.d.ts +0 -86
- package/dist/lint/plugin.js +0 -341
- package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
- package/dist/middlewares/BasicAuthMiddleware.js +0 -22
- package/dist/middlewares/index.d.ts +0 -1
- package/dist/middlewares/index.js +0 -1
- package/dist/node/Effectify.d.ts +0 -209
- package/dist/node/Effectify.js +0 -19
- package/dist/node/FileSystem.d.ts +0 -7
- package/dist/node/FileSystem.js +0 -420
- package/dist/node/NodeFileSystem.d.ts +0 -7
- package/dist/node/NodeFileSystem.js +0 -410
- package/dist/node/NodeUtils.d.ts +0 -2
- package/dist/node/NodeUtils.js +0 -20
- package/dist/node/PlatformError.d.ts +0 -46
- package/dist/node/PlatformError.js +0 -43
- package/dist/node/Utils.d.ts +0 -1
- package/dist/node/Utils.js +0 -19
- package/dist/repro_fail.d.ts +0 -1
- package/dist/repro_fail.js +0 -14
- package/dist/sql/bun/index.d.ts +0 -3
- package/dist/sql/bun/index.js +0 -75
- package/dist/sql/mssql/docker.d.ts +0 -2
- package/dist/sql/mssql/docker.js +0 -67
- package/dist/sql/mssql/index.d.ts +0 -21
- package/dist/sql/mssql/index.js +0 -113
- package/dist/testing/TestHttpClient.d.ts +0 -13
- package/dist/testing/TestHttpClient.js +0 -68
- package/dist/testing/TestLogger.d.ts +0 -13
- package/dist/testing/TestLogger.js +0 -32
- package/dist/testing/index.d.ts +0 -2
- package/dist/testing/index.js +0 -2
- package/dist/testing/utils.d.ts +0 -9
- package/dist/testing/utils.js +0 -39
- package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
- package/dist/x/cloudflare/CloudflareTunnel.js +0 -30
- package/dist/x/cloudflare/index.d.ts +0 -1
- package/dist/x/cloudflare/index.js +0 -1
- package/dist/x/datastar/Datastar.d.ts +0 -6
- package/dist/x/datastar/Datastar.js +0 -47
- package/dist/x/datastar/index.d.ts +0 -1
- package/dist/x/datastar/index.js +0 -1
- package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
- package/dist/x/tailscale/TailscaleTunnel.js +0 -68
- package/dist/x/tailscale/index.d.ts +0 -1
- package/dist/x/tailscale/index.js +0 -1
- package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
- package/dist/x/tailwind/TailwindPlugin.js +0 -219
- package/dist/x/tailwind/compile.d.ts +0 -19
- package/dist/x/tailwind/compile.js +0 -154
- package/dist/x/tailwind/plugin.d.ts +0 -2
- package/dist/x/tailwind/plugin.js +0 -15
- /package/src/{Sql.ts → sql/Sql.ts} +0 -0
package/src/Start.ts
CHANGED
|
@@ -64,28 +64,30 @@ export function pack<const Layers extends readonly [Layer.Layer.Any, ...Array<La
|
|
|
64
64
|
return result as AnyLayer
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
export
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
export type PlatformServices =
|
|
68
|
+
| BunServer.BunServer
|
|
69
|
+
| FileSystem.FileSystem
|
|
70
|
+
| ChildProcess.ChildProcessSpawner
|
|
71
|
+
| StartApp.StartApp
|
|
72
|
+
|
|
73
|
+
export const Live: Layer.Layer<
|
|
74
|
+
Exclude<PlatformServices, BunServer.BunServer>,
|
|
75
|
+
never,
|
|
76
|
+
never
|
|
77
|
+
> = Layer.mergeAll(
|
|
78
|
+
NodeFileSystem.layer,
|
|
79
|
+
BunChildProcessSpawner.layer,
|
|
80
|
+
Layer.effect(
|
|
81
|
+
StartApp.StartApp,
|
|
82
|
+
Deferred.make<BunServer.BunServer>().pipe(Effect.map((server) => ({ server }))),
|
|
83
|
+
),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
export function serve<ROut, E, RIn extends PlatformServices>(
|
|
76
87
|
load: () => Promise<{
|
|
77
88
|
default: Layer.Layer<ROut, E, RIn>
|
|
78
89
|
}>,
|
|
79
90
|
) {
|
|
80
|
-
const startAppLayer = Layer.effect(
|
|
81
|
-
StartApp.StartApp,
|
|
82
|
-
Deferred.make<BunServer.BunServer>().pipe(
|
|
83
|
-
Effect.map((server) => ({
|
|
84
|
-
server,
|
|
85
|
-
})),
|
|
86
|
-
),
|
|
87
|
-
)
|
|
88
|
-
|
|
89
91
|
const appLayer = Function.pipe(
|
|
90
92
|
Effect.tryPromise(load),
|
|
91
93
|
Effect.map((v) => v.default),
|
|
@@ -93,12 +95,7 @@ export function serve<
|
|
|
93
95
|
Layer.unwrapEffect,
|
|
94
96
|
)
|
|
95
97
|
|
|
96
|
-
const appLayerResolved = Function.pipe(
|
|
97
|
-
appLayer,
|
|
98
|
-
Layer.provide(NodeFileSystem.layer),
|
|
99
|
-
Layer.provide(BunChildProcessSpawner.layer),
|
|
100
|
-
Layer.provideMerge(startAppLayer),
|
|
101
|
-
)
|
|
98
|
+
const appLayerResolved = Function.pipe(appLayer, Layer.provideMerge(Live))
|
|
102
99
|
|
|
103
100
|
const composed = Function.pipe(
|
|
104
101
|
BunServer.layerStart(),
|
package/src/StartApp.ts
CHANGED
package/src/bun/BunServer.ts
CHANGED
|
@@ -66,7 +66,7 @@ export const make = (
|
|
|
66
66
|
}),
|
|
67
67
|
)
|
|
68
68
|
const hostFlag = process.argv.includes("--host")
|
|
69
|
-
const hostname = yield* Config.string("
|
|
69
|
+
const hostname = yield* Config.string("HOST").pipe(
|
|
70
70
|
Effect.catchTag("ConfigError", () => Effect.succeed(hostFlag ? "0.0.0.0" : undefined)),
|
|
71
71
|
)
|
|
72
72
|
|
|
@@ -213,14 +213,13 @@ export const layerStart = (
|
|
|
213
213
|
|
|
214
214
|
export const withLogAddress = <A, E, R>(layer: Layer.Layer<A, E, R>) =>
|
|
215
215
|
Layer.effectDiscard(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
Effect.gen(function* () {
|
|
217
|
+
const { server } = yield* BunServer
|
|
218
|
+
const { hostname, port } = server
|
|
219
|
+
const addr = hostname === "0.0.0.0" ? getLocalIp() : "localhost"
|
|
220
220
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
),
|
|
221
|
+
yield* Effect.log(`Listening on http://${addr}:${port}`)
|
|
222
|
+
}),
|
|
224
223
|
).pipe(Layer.provideMerge(layer))
|
|
225
224
|
|
|
226
225
|
function walkBunRoutes(runtime: Runtime.Runtime<BunServer>, tree: RouteTree.RouteTree) {
|
|
@@ -261,8 +260,10 @@ function registerPrebuiltBundle(prefix: string, bundle: any, bunRoutes: BunRoute
|
|
|
261
260
|
const mainDir = NPath.dirname(Bun.main)
|
|
262
261
|
const indexPath = NPath.resolve(mainDir, bundle.index)
|
|
263
262
|
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
const htmlPromise = rewriteRelativeAssetPaths(Bun.file(indexPath).text())
|
|
264
|
+
|
|
265
|
+
bunRoutes[`${prefix}/*`] = async () =>
|
|
266
|
+
new Response(await htmlPromise, { headers: { "content-type": "text/html;charset=utf-8" } })
|
|
266
267
|
|
|
267
268
|
for (const file of bundle.files ?? []) {
|
|
268
269
|
if (file.loader === "html") continue
|
|
@@ -273,6 +274,37 @@ function registerPrebuiltBundle(prefix: string, bundle: any, bunRoutes: BunRoute
|
|
|
273
274
|
}
|
|
274
275
|
}
|
|
275
276
|
|
|
277
|
+
function rewriteRelativeAssetPaths(html: string | Promise<string>): Promise<string> {
|
|
278
|
+
const rewriter = new HTMLRewriter()
|
|
279
|
+
.on("link[href]", {
|
|
280
|
+
element(el) {
|
|
281
|
+
const href = el.getAttribute("href")
|
|
282
|
+
if (href && isRelativePath(href)) {
|
|
283
|
+
el.setAttribute("href", "/" + assetBasename(href))
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
})
|
|
287
|
+
.on("script[src]", {
|
|
288
|
+
element(el) {
|
|
289
|
+
const src = el.getAttribute("src")
|
|
290
|
+
if (src && isRelativePath(src)) {
|
|
291
|
+
el.setAttribute("src", "/" + assetBasename(src))
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
return Promise.resolve(html).then((h) => rewriter.transform(new Response(h)).text())
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function isRelativePath(path: string): boolean {
|
|
300
|
+
return path.startsWith("./") || path.startsWith("../")
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function assetBasename(path: string): string {
|
|
304
|
+
const i = path.lastIndexOf("/")
|
|
305
|
+
return i === -1 ? path : path.slice(i + 1)
|
|
306
|
+
}
|
|
307
|
+
|
|
276
308
|
function getLocalIp(): string | undefined {
|
|
277
309
|
return Object.values(NOs.networkInterfaces())
|
|
278
310
|
.flatMap((addresses) => addresses ?? [])
|
package/src/hyper/HyperHtml.ts
CHANGED
package/src/sql/bun/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as FiberRef from "effect/FiberRef"
|
|
|
4
4
|
import * as GlobalValue from "effect/GlobalValue"
|
|
5
5
|
import * as Layer from "effect/Layer"
|
|
6
6
|
import * as Option from "effect/Option"
|
|
7
|
-
import * as Sql from "
|
|
7
|
+
import * as Sql from "../Sql.ts"
|
|
8
8
|
|
|
9
9
|
const errorCode = (error: unknown): string => {
|
|
10
10
|
const e = error as any
|
package/src/sql/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as Sql from "./Sql.ts"
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect"
|
|
2
|
+
import * as Exit from "effect/Exit"
|
|
3
|
+
import * as FiberRef from "effect/FiberRef"
|
|
4
|
+
import * as GlobalValue from "effect/GlobalValue"
|
|
5
|
+
import * as Layer from "effect/Layer"
|
|
6
|
+
import * as Option from "effect/Option"
|
|
7
|
+
import type * as Libsql from "@libsql/client"
|
|
8
|
+
import * as Sql from "../Sql.ts"
|
|
9
|
+
|
|
10
|
+
export interface LibsqlConfig {
|
|
11
|
+
readonly url: string
|
|
12
|
+
readonly authToken?: string
|
|
13
|
+
readonly syncUrl?: string
|
|
14
|
+
readonly syncInterval?: number
|
|
15
|
+
readonly encryptionKey?: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const wrapError = (error: unknown): Sql.SqlError =>
|
|
19
|
+
new Sql.SqlError({
|
|
20
|
+
code: (error as any)?.code ?? "UNKNOWN",
|
|
21
|
+
message: error instanceof Error ? error.message : String(error),
|
|
22
|
+
cause: error,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
const wrap = <T>(fn: () => PromiseLike<T>): Effect.Effect<T, Sql.SqlError> =>
|
|
26
|
+
Effect.tryPromise({ try: () => Promise.resolve(fn()), catch: wrapError })
|
|
27
|
+
|
|
28
|
+
const makeValues: Sql.SqlQuery["values"] = (obj: any, ...columns: Array<string>) => {
|
|
29
|
+
const items = Array.isArray(obj) ? obj : [obj]
|
|
30
|
+
const cols = columns.length > 0 ? columns : Object.keys(items[0])
|
|
31
|
+
return { value: items, columns: cols }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const resultSetToRows = <T>(result: Libsql.ResultSet): ReadonlyArray<T> => {
|
|
35
|
+
const { columns, rows } = result
|
|
36
|
+
return rows.map((row) => {
|
|
37
|
+
const obj: any = {}
|
|
38
|
+
for (let i = 0; i < columns.length; i++) obj[columns[i]] = row[i]
|
|
39
|
+
return obj
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const buildQuery = (strings: TemplateStringsArray, values: Array<unknown>) => {
|
|
44
|
+
let sql = strings[0]
|
|
45
|
+
for (let i = 0; i < values.length; i++) sql += "?" + strings[i + 1]
|
|
46
|
+
return { sql, args: values }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface TxState {
|
|
50
|
+
readonly depth: number
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type LibsqlModule = {
|
|
54
|
+
createClient: (config: Libsql.Config) => Libsql.Client
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const loadLibsql = () => import("@libsql/client") as Promise<LibsqlModule>
|
|
58
|
+
|
|
59
|
+
const currentTransaction = GlobalValue.globalValue(
|
|
60
|
+
Symbol.for("effect-start/sql/libsql/currentTransaction"),
|
|
61
|
+
() => FiberRef.unsafeMake<Option.Option<TxState>>(Option.none()),
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
const executeQuery = <T>(
|
|
65
|
+
client: Libsql.Client,
|
|
66
|
+
sql: string,
|
|
67
|
+
args: Array<unknown>,
|
|
68
|
+
): Effect.Effect<ReadonlyArray<T>, Sql.SqlError> =>
|
|
69
|
+
wrap(() => client.execute({ sql, args })).pipe(Effect.map(resultSetToRows<T>))
|
|
70
|
+
|
|
71
|
+
const runQuery = <T>(
|
|
72
|
+
client: Libsql.Client,
|
|
73
|
+
strings: TemplateStringsArray,
|
|
74
|
+
values: Array<unknown>,
|
|
75
|
+
): Effect.Effect<ReadonlyArray<T>, Sql.SqlError> => {
|
|
76
|
+
const { sql, args } = buildQuery(strings, values)
|
|
77
|
+
return executeQuery(client, sql, args)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const runUnsafe = <T>(
|
|
81
|
+
client: Libsql.Client,
|
|
82
|
+
query: string,
|
|
83
|
+
values?: Array<unknown>,
|
|
84
|
+
): Effect.Effect<ReadonlyArray<T>, Sql.SqlError> =>
|
|
85
|
+
executeQuery(client, query, values ?? [])
|
|
86
|
+
|
|
87
|
+
const exec = (client: Libsql.Client, sql: string) =>
|
|
88
|
+
wrap(() => client.execute(sql))
|
|
89
|
+
|
|
90
|
+
const makeWithTransaction =
|
|
91
|
+
(client: Libsql.Client) =>
|
|
92
|
+
<A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, Sql.SqlError | E, R> =>
|
|
93
|
+
Effect.uninterruptibleMask((restore) =>
|
|
94
|
+
Effect.flatMap(FiberRef.get(currentTransaction), (txOpt) => {
|
|
95
|
+
if (Option.isSome(txOpt)) {
|
|
96
|
+
const { depth } = txOpt.value
|
|
97
|
+
const name = `sp_${depth}`
|
|
98
|
+
return Effect.gen(function* () {
|
|
99
|
+
yield* exec(client, `SAVEPOINT ${name}`)
|
|
100
|
+
const exit = yield* Effect.exit(
|
|
101
|
+
restore(
|
|
102
|
+
Effect.locally(self, currentTransaction, Option.some({ depth: depth + 1 })),
|
|
103
|
+
),
|
|
104
|
+
)
|
|
105
|
+
if (Exit.isSuccess(exit)) {
|
|
106
|
+
yield* exec(client, `RELEASE SAVEPOINT ${name}`)
|
|
107
|
+
return exit.value
|
|
108
|
+
}
|
|
109
|
+
yield* exec(client, `ROLLBACK TO SAVEPOINT ${name}`).pipe(Effect.orDie)
|
|
110
|
+
return yield* exit
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return Effect.gen(function* () {
|
|
115
|
+
yield* exec(client, "BEGIN")
|
|
116
|
+
const exit = yield* Effect.exit(
|
|
117
|
+
restore(Effect.locally(self, currentTransaction, Option.some({ depth: 1 }))),
|
|
118
|
+
)
|
|
119
|
+
if (Exit.isSuccess(exit)) {
|
|
120
|
+
yield* exec(client, "COMMIT")
|
|
121
|
+
return exit.value
|
|
122
|
+
}
|
|
123
|
+
yield* exec(client, "ROLLBACK").pipe(Effect.orDie)
|
|
124
|
+
return yield* exit
|
|
125
|
+
})
|
|
126
|
+
}),
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
export const layer = (config: LibsqlConfig): Layer.Layer<Sql.SqlClient, Sql.SqlError> =>
|
|
130
|
+
Layer.scoped(
|
|
131
|
+
Sql.SqlClient,
|
|
132
|
+
Effect.acquireRelease(
|
|
133
|
+
wrap(() => loadLibsql()).pipe(
|
|
134
|
+
Effect.map((libsql) => {
|
|
135
|
+
const client = libsql.createClient(config)
|
|
136
|
+
const use: Sql.SqlClient["use"] = (fn) =>
|
|
137
|
+
Effect.tryPromise({ try: () => Promise.resolve(fn(client)), catch: wrapError })
|
|
138
|
+
return Object.assign(
|
|
139
|
+
<T = any>(strings: TemplateStringsArray, ...values: Array<unknown>) =>
|
|
140
|
+
runQuery<T>(client, strings, values),
|
|
141
|
+
{
|
|
142
|
+
unsafe: <T = any>(query: string, values?: Array<unknown>) =>
|
|
143
|
+
runUnsafe<T>(client, query, values),
|
|
144
|
+
values: makeValues,
|
|
145
|
+
withTransaction: makeWithTransaction(client),
|
|
146
|
+
reserve: Effect.acquireRelease(
|
|
147
|
+
wrap(() => loadLibsql()).pipe(
|
|
148
|
+
Effect.map((m) => m.createClient(config)),
|
|
149
|
+
),
|
|
150
|
+
(reserved: Libsql.Client) => Effect.sync(() => reserved.close()),
|
|
151
|
+
).pipe(
|
|
152
|
+
Effect.map(
|
|
153
|
+
(reserved): Sql.SqlQuery =>
|
|
154
|
+
Object.assign(
|
|
155
|
+
<T = any>(strings: TemplateStringsArray, ...values: Array<unknown>) =>
|
|
156
|
+
runQuery<T>(reserved, strings, values),
|
|
157
|
+
{
|
|
158
|
+
unsafe: <T = any>(query: string, values?: Array<unknown>) =>
|
|
159
|
+
runUnsafe<T>(reserved, query, values),
|
|
160
|
+
values: makeValues,
|
|
161
|
+
},
|
|
162
|
+
),
|
|
163
|
+
),
|
|
164
|
+
),
|
|
165
|
+
close: () => Effect.sync(() => client.close()),
|
|
166
|
+
use,
|
|
167
|
+
},
|
|
168
|
+
) satisfies Sql.SqlClient
|
|
169
|
+
}),
|
|
170
|
+
),
|
|
171
|
+
(client) => client.close().pipe(Effect.orDie),
|
|
172
|
+
),
|
|
173
|
+
)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
declare module "@libsql/client" {
|
|
2
|
+
export interface Config {
|
|
3
|
+
readonly url: string
|
|
4
|
+
readonly authToken?: string
|
|
5
|
+
readonly syncUrl?: string
|
|
6
|
+
readonly syncInterval?: number
|
|
7
|
+
readonly encryptionKey?: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ResultSet {
|
|
11
|
+
readonly columns: ReadonlyArray<string>
|
|
12
|
+
readonly rows: ReadonlyArray<ReadonlyArray<unknown>>
|
|
13
|
+
readonly rowsAffected: number
|
|
14
|
+
readonly lastInsertRowid?: bigint
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface InStatement {
|
|
18
|
+
readonly sql: string
|
|
19
|
+
readonly args?: ReadonlyArray<unknown> | Record<string, unknown>
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface Client {
|
|
23
|
+
execute(stmt: InStatement | string): Promise<ResultSet>
|
|
24
|
+
batch(stmts: ReadonlyArray<InStatement | string>, mode?: TransactionMode): Promise<ReadonlyArray<ResultSet>>
|
|
25
|
+
transaction(mode?: TransactionMode): Promise<Transaction>
|
|
26
|
+
close(): void
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface Transaction {
|
|
30
|
+
execute(stmt: InStatement | string): Promise<ResultSet>
|
|
31
|
+
commit(): Promise<void>
|
|
32
|
+
rollback(): Promise<void>
|
|
33
|
+
close(): void
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type TransactionMode = "write" | "read" | "deferred"
|
|
37
|
+
|
|
38
|
+
export function createClient(config: Config): Client
|
|
39
|
+
}
|
package/src/sql/mssql/index.ts
CHANGED
|
@@ -5,7 +5,7 @@ import * as GlobalValue from "effect/GlobalValue"
|
|
|
5
5
|
import * as Layer from "effect/Layer"
|
|
6
6
|
import * as Option from "effect/Option"
|
|
7
7
|
import type * as Mssql from "mssql"
|
|
8
|
-
import * as Sql from "
|
|
8
|
+
import * as Sql from "../Sql.ts"
|
|
9
9
|
|
|
10
10
|
export interface MssqlConfig {
|
|
11
11
|
readonly server: string
|
package/dist/BlobStore.d.ts
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import * as Context from "effect/Context";
|
|
2
|
-
import * as Effect from "effect/Effect";
|
|
3
|
-
import type * as Option from "effect/Option";
|
|
4
|
-
import * as Stream from "effect/Stream";
|
|
5
|
-
import type * as PlatformError from "./PlatformError.ts";
|
|
6
|
-
export interface BlobInfo {
|
|
7
|
-
readonly size: number;
|
|
8
|
-
readonly lastModified: Option.Option<Date>;
|
|
9
|
-
readonly etag: Option.Option<string>;
|
|
10
|
-
readonly type: Option.Option<string>;
|
|
11
|
-
}
|
|
12
|
-
export interface BlobRef {
|
|
13
|
-
readonly key: string;
|
|
14
|
-
readonly bytes: Effect.Effect<Uint8Array, PlatformError.PlatformError>;
|
|
15
|
-
readonly text: Effect.Effect<string, PlatformError.PlatformError>;
|
|
16
|
-
readonly json: Effect.Effect<unknown, PlatformError.PlatformError>;
|
|
17
|
-
readonly stat: Effect.Effect<BlobInfo, PlatformError.PlatformError>;
|
|
18
|
-
readonly exists: Effect.Effect<boolean, PlatformError.PlatformError>;
|
|
19
|
-
readonly delete: Effect.Effect<void, PlatformError.PlatformError>;
|
|
20
|
-
readonly stream: Stream.Stream<Uint8Array, PlatformError.PlatformError>;
|
|
21
|
-
readonly write: (data: string | Uint8Array | ArrayBuffer) => Effect.Effect<void, PlatformError.PlatformError>;
|
|
22
|
-
readonly slice: (begin?: number, end?: number) => BlobRef;
|
|
23
|
-
}
|
|
24
|
-
export interface ListEntry {
|
|
25
|
-
readonly key: string;
|
|
26
|
-
readonly size: Option.Option<number>;
|
|
27
|
-
readonly lastModified: Option.Option<Date>;
|
|
28
|
-
readonly etag: Option.Option<string>;
|
|
29
|
-
}
|
|
30
|
-
export interface ListOptions {
|
|
31
|
-
readonly prefix?: string;
|
|
32
|
-
}
|
|
33
|
-
export interface PresignOptions {
|
|
34
|
-
readonly expiresIn?: number;
|
|
35
|
-
readonly method?: "GET" | "PUT" | "DELETE" | "HEAD";
|
|
36
|
-
}
|
|
37
|
-
declare const BlobStore_base: Context.TagClass<BlobStore, "effect-start/BlobStore", {
|
|
38
|
-
readonly ref: (key: string) => Effect.Effect<BlobRef, PlatformError.PlatformError>;
|
|
39
|
-
readonly list: (options?: ListOptions) => Stream.Stream<ListEntry, PlatformError.PlatformError>;
|
|
40
|
-
readonly presign: (key: string, options?: PresignOptions) => Effect.Effect<string, PlatformError.PlatformError>;
|
|
41
|
-
}>;
|
|
42
|
-
export declare class BlobStore extends BlobStore_base {
|
|
43
|
-
}
|
|
44
|
-
declare const WatchEventCreated_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]; }) => Readonly<A> & {
|
|
45
|
-
readonly _tag: "Created";
|
|
46
|
-
};
|
|
47
|
-
export declare class WatchEventCreated extends WatchEventCreated_base<{
|
|
48
|
-
readonly key: string;
|
|
49
|
-
}> {
|
|
50
|
-
}
|
|
51
|
-
declare const WatchEventUpdated_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]; }) => Readonly<A> & {
|
|
52
|
-
readonly _tag: "Updated";
|
|
53
|
-
};
|
|
54
|
-
export declare class WatchEventUpdated extends WatchEventUpdated_base<{
|
|
55
|
-
readonly key: string;
|
|
56
|
-
}> {
|
|
57
|
-
}
|
|
58
|
-
declare const WatchEventDeleted_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]; }) => Readonly<A> & {
|
|
59
|
-
readonly _tag: "Deleted";
|
|
60
|
-
};
|
|
61
|
-
export declare class WatchEventDeleted extends WatchEventDeleted_base<{
|
|
62
|
-
readonly key: string;
|
|
63
|
-
}> {
|
|
64
|
-
}
|
|
65
|
-
export type WatchEvent = WatchEventCreated | WatchEventUpdated | WatchEventDeleted;
|
|
66
|
-
export interface WatchOptions {
|
|
67
|
-
readonly prefix?: string;
|
|
68
|
-
}
|
|
69
|
-
declare const BlobWatcher_base: Context.TagClass<BlobWatcher, "effect-start/BlobWatcher", {
|
|
70
|
-
readonly watch: (options?: WatchOptions) => Stream.Stream<WatchEvent, PlatformError.PlatformError>;
|
|
71
|
-
readonly notify: (event: WatchEvent) => Effect.Effect<boolean, PlatformError.PlatformError>;
|
|
72
|
-
}>;
|
|
73
|
-
export declare class BlobWatcher extends BlobWatcher_base {
|
|
74
|
-
}
|
|
75
|
-
export declare const watch: (options?: WatchOptions) => Stream.Stream<WatchEvent, PlatformError.PlatformError, BlobWatcher>;
|
|
76
|
-
export declare const notify: (event: WatchEvent) => Effect.Effect<boolean, PlatformError.PlatformError, BlobWatcher>;
|
|
77
|
-
export declare const ref: (key: string) => Effect.Effect<BlobRef, PlatformError.PlatformError, BlobStore>;
|
|
78
|
-
export declare const list: (options?: ListOptions) => Stream.Stream<ListEntry, PlatformError.PlatformError, BlobStore>;
|
|
79
|
-
export declare const presign: (key: string, options?: PresignOptions) => Effect.Effect<string, PlatformError.PlatformError, BlobStore>;
|
|
80
|
-
export {};
|
package/dist/BlobStore.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import * as Context from "effect/Context";
|
|
2
|
-
import * as Data from "effect/Data";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import * as Stream from "effect/Stream";
|
|
5
|
-
export class BlobStore extends Context.Tag("effect-start/BlobStore")() {
|
|
6
|
-
}
|
|
7
|
-
export class WatchEventCreated extends Data.TaggedClass("Created") {
|
|
8
|
-
}
|
|
9
|
-
export class WatchEventUpdated extends Data.TaggedClass("Updated") {
|
|
10
|
-
}
|
|
11
|
-
export class WatchEventDeleted extends Data.TaggedClass("Deleted") {
|
|
12
|
-
}
|
|
13
|
-
export class BlobWatcher extends Context.Tag("effect-start/BlobWatcher")() {
|
|
14
|
-
}
|
|
15
|
-
export const watch = (options) => Stream.unwrap(Effect.map(BlobWatcher, (watcher) => watcher.watch(options)));
|
|
16
|
-
export const notify = (event) => Effect.flatMap(BlobWatcher, (watcher) => watcher.notify(event));
|
|
17
|
-
export const ref = (key) => Effect.flatMap(BlobStore, (store) => store.ref(key));
|
|
18
|
-
export const list = (options) => Stream.unwrap(Effect.map(BlobStore, (store) => store.list(options)));
|
|
19
|
-
export const presign = (key, options) => Effect.flatMap(BlobStore, (store) => store.presign(key, options));
|
package/dist/ChildProcess.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adapted from upcomnig Effect 4 aka effect-smol.
|
|
3
|
-
*
|
|
4
|
-
* Kept a minimal interface without tempaltes and file descirptor
|
|
5
|
-
* to keep it compatible if it lands in the core (ie. not in seperate platform package.)
|
|
6
|
-
*/
|
|
7
|
-
import * as Context from "effect/Context";
|
|
8
|
-
import * as Effect from "effect/Effect";
|
|
9
|
-
import * as Pipeable from "effect/Pipeable";
|
|
10
|
-
import type * as Scope from "effect/Scope";
|
|
11
|
-
import type * as Sink from "effect/Sink";
|
|
12
|
-
import type * as Stream from "effect/Stream";
|
|
13
|
-
import type * as PlatformError from "./PlatformError.ts";
|
|
14
|
-
declare const TypeId: unique symbol;
|
|
15
|
-
type TypeId = typeof TypeId;
|
|
16
|
-
type Stdio = "pipe" | "inherit" | "ignore";
|
|
17
|
-
export interface Command extends Pipeable.Pipeable {
|
|
18
|
-
readonly [TypeId]: TypeId;
|
|
19
|
-
readonly command: string;
|
|
20
|
-
readonly args: ReadonlyArray<string>;
|
|
21
|
-
readonly cwd?: string;
|
|
22
|
-
readonly env?: Record<string, string>;
|
|
23
|
-
readonly stdin?: Stdio;
|
|
24
|
-
readonly stdout?: Stdio;
|
|
25
|
-
readonly stderr?: Stdio;
|
|
26
|
-
readonly detached?: boolean;
|
|
27
|
-
[Symbol.iterator](): Effect.EffectGenerator<Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, ChildProcessSpawner | Scope.Scope>>;
|
|
28
|
-
}
|
|
29
|
-
export declare namespace Command {
|
|
30
|
-
interface Options {
|
|
31
|
-
readonly cwd?: string;
|
|
32
|
-
readonly env?: Record<string, string>;
|
|
33
|
-
readonly stdin?: Stdio;
|
|
34
|
-
readonly stdout?: Stdio;
|
|
35
|
-
readonly stderr?: Stdio;
|
|
36
|
-
readonly detached?: boolean;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export declare const isCommand: (u: unknown) => u is Command;
|
|
40
|
-
export declare const make: (command: string, args?: ReadonlyArray<string>, options?: Command.Options) => Command;
|
|
41
|
-
export type Signal = "SIGABRT" | "SIGALRM" | "SIGBUS" | "SIGCHLD" | "SIGCONT" | "SIGFPE" | "SIGHUP" | "SIGILL" | "SIGINT" | "SIGIO" | "SIGIOT" | "SIGKILL" | "SIGPIPE" | "SIGPOLL" | "SIGPROF" | "SIGPWR" | "SIGQUIT" | "SIGSEGV" | "SIGSTKFLT" | "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" | "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO";
|
|
42
|
-
export interface KillOptions {
|
|
43
|
-
readonly killSignal?: Signal | undefined;
|
|
44
|
-
}
|
|
45
|
-
export interface ChildProcessHandle {
|
|
46
|
-
readonly pid: number;
|
|
47
|
-
readonly exitCode: Effect.Effect<number, PlatformError.PlatformError>;
|
|
48
|
-
readonly isRunning: Effect.Effect<boolean, PlatformError.PlatformError>;
|
|
49
|
-
readonly kill: (options?: KillOptions) => Effect.Effect<void, PlatformError.PlatformError>;
|
|
50
|
-
readonly stdin: Sink.Sink<void, Uint8Array, never, PlatformError.PlatformError>;
|
|
51
|
-
readonly stdout: Stream.Stream<Uint8Array, PlatformError.PlatformError>;
|
|
52
|
-
readonly stderr: Stream.Stream<Uint8Array, PlatformError.PlatformError>;
|
|
53
|
-
}
|
|
54
|
-
declare const ChildProcessSpawner_base: Context.TagClass<ChildProcessSpawner, "effect-start/ChildProcessSpawner", {
|
|
55
|
-
readonly spawn: (command: Command) => Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, Scope.Scope>;
|
|
56
|
-
}>;
|
|
57
|
-
export declare class ChildProcessSpawner extends ChildProcessSpawner_base {
|
|
58
|
-
}
|
|
59
|
-
export declare const spawn: (command: Command) => Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, ChildProcessSpawner | Scope.Scope>;
|
|
60
|
-
export {};
|
package/dist/ChildProcess.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adapted from upcomnig Effect 4 aka effect-smol.
|
|
3
|
-
*
|
|
4
|
-
* Kept a minimal interface without tempaltes and file descirptor
|
|
5
|
-
* to keep it compatible if it lands in the core (ie. not in seperate platform package.)
|
|
6
|
-
*/
|
|
7
|
-
import * as Context from "effect/Context";
|
|
8
|
-
import * as Effect from "effect/Effect";
|
|
9
|
-
import * as Pipeable from "effect/Pipeable";
|
|
10
|
-
import * as Predicate from "effect/Predicate";
|
|
11
|
-
import * as Utils from "effect/Utils";
|
|
12
|
-
const TypeId = Symbol.for("effect-start/ChildProcess/Command");
|
|
13
|
-
const CommandProto = {
|
|
14
|
-
[TypeId]: TypeId,
|
|
15
|
-
pipe() {
|
|
16
|
-
return Pipeable.pipeArguments(this, arguments);
|
|
17
|
-
},
|
|
18
|
-
[Symbol.iterator]() {
|
|
19
|
-
return new Utils.SingleShotGen(new Utils.YieldWrap(spawn(this)));
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
export const isCommand = (u) => Predicate.hasProperty(u, TypeId);
|
|
23
|
-
export const make = (command, args, options) => Object.assign(Object.create(CommandProto), {
|
|
24
|
-
command,
|
|
25
|
-
args: args ?? [],
|
|
26
|
-
...options,
|
|
27
|
-
});
|
|
28
|
-
export class ChildProcessSpawner extends Context.Tag("effect-start/ChildProcessSpawner")() {
|
|
29
|
-
}
|
|
30
|
-
export const spawn = (command) => Effect.flatMap(ChildProcessSpawner, (spawner) => spawner.spawn(command));
|