@shivaedev/local-postgres 0.9.0 → 0.11.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +8 -9
  3. package/dist/server/PostgresSettingError.d.ts +11 -0
  4. package/dist/server/PostgresSettingError.d.ts.map +1 -0
  5. package/dist/server/PostgresSettingError.js +11 -0
  6. package/dist/server/PostgresSettingError.js.map +1 -0
  7. package/dist/server/{clientConnection.d.ts → adapters/clientConnection.d.ts} +2 -2
  8. package/dist/server/adapters/clientConnection.d.ts.map +1 -0
  9. package/dist/server/{clientConnection.js → adapters/clientConnection.js} +1 -1
  10. package/dist/server/adapters/clientConnection.js.map +1 -0
  11. package/dist/server/adapters/docker.d.ts +8 -0
  12. package/dist/server/adapters/docker.d.ts.map +1 -0
  13. package/dist/server/{localDocker.js → adapters/docker.js} +3 -3
  14. package/dist/server/adapters/docker.js.map +1 -0
  15. package/dist/server/adapters/ensureConnections.d.ts +11 -0
  16. package/dist/server/adapters/ensureConnections.d.ts.map +1 -0
  17. package/dist/server/{localConnections.js → adapters/ensureConnections.js} +5 -13
  18. package/dist/server/adapters/ensureConnections.js.map +1 -0
  19. package/dist/server/{localContainer.d.ts → adapters/localContainer.d.ts} +4 -4
  20. package/dist/server/adapters/localContainer.d.ts.map +1 -0
  21. package/dist/server/{localContainer.js → adapters/localContainer.js} +3 -3
  22. package/dist/server/adapters/localContainer.js.map +1 -0
  23. package/dist/server/adapters/localSql.d.ts +6 -0
  24. package/dist/server/adapters/localSql.d.ts.map +1 -0
  25. package/dist/server/adapters/localSql.js +15 -0
  26. package/dist/server/adapters/localSql.js.map +1 -0
  27. package/dist/server/{runCommand.d.ts → adapters/runCommand.d.ts} +1 -1
  28. package/dist/server/adapters/runCommand.d.ts.map +1 -0
  29. package/dist/server/{runCommand.js → adapters/runCommand.js} +1 -1
  30. package/dist/server/adapters/runCommand.js.map +1 -0
  31. package/dist/server/assertLocalDatabase.d.ts +4 -0
  32. package/dist/server/assertLocalDatabase.d.ts.map +1 -0
  33. package/dist/server/assertLocalDatabase.js +14 -0
  34. package/dist/server/assertLocalDatabase.js.map +1 -0
  35. package/dist/server/dockerEnvironment.d.ts +10 -0
  36. package/dist/server/dockerEnvironment.d.ts.map +1 -0
  37. package/dist/server/dockerEnvironment.js +6 -0
  38. package/dist/server/dockerEnvironment.js.map +1 -0
  39. package/dist/server/localPostgres.d.ts +5 -6
  40. package/dist/server/localPostgres.d.ts.map +1 -1
  41. package/dist/server/localPostgres.js +7 -26
  42. package/dist/server/localPostgres.js.map +1 -1
  43. package/package.json +6 -6
  44. package/src/server/PostgresSettingError.ts +11 -0
  45. package/src/server/{clientConnection.ts → adapters/clientConnection.ts} +2 -2
  46. package/src/server/{localDocker.ts → adapters/docker.ts} +3 -4
  47. package/src/server/{localConnections.ts → adapters/ensureConnections.ts} +7 -16
  48. package/src/server/{localContainer.ts → adapters/localContainer.ts} +5 -5
  49. package/src/server/adapters/localSql.ts +20 -0
  50. package/src/server/{runCommand.ts → adapters/runCommand.ts} +1 -1
  51. package/src/server/assertLocalDatabase.ts +16 -0
  52. package/src/server/dockerEnvironment.ts +8 -0
  53. package/src/server/localPostgres.ts +9 -34
  54. package/dist/server/clientConnection.d.ts.map +0 -1
  55. package/dist/server/clientConnection.js.map +0 -1
  56. package/dist/server/localConnections.d.ts +0 -18
  57. package/dist/server/localConnections.d.ts.map +0 -1
  58. package/dist/server/localConnections.js.map +0 -1
  59. package/dist/server/localContainer.d.ts.map +0 -1
  60. package/dist/server/localContainer.js.map +0 -1
  61. package/dist/server/localDocker.d.ts +0 -12
  62. package/dist/server/localDocker.d.ts.map +0 -1
  63. package/dist/server/localDocker.js.map +0 -1
  64. package/dist/server/runCommand.d.ts.map +0 -1
  65. package/dist/server/runCommand.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.0 - 2026-11-03
4
+
5
+ ### Added
6
+
7
+ - Read Docker settings through Effect Config with `dockerEnvironment` from `@shivaedev/local-postgres/server/dockerEnvironment.ts`.
8
+
9
+ ### Breaking
10
+
11
+ - Import `PostgresSettingError` from `@shivaedev/local-postgres/server/PostgresSettingError.ts` and `ensureConnections` from `server/adapters/ensureConnections.ts` instead of `server/localConnections.ts`.
12
+ - Import `DockerEnvironment` from `@shivaedev/local-postgres/server/dockerEnvironment.ts` and `docker` from `server/adapters/docker.ts` instead of `server/localDocker.ts`. Import `localContainer`, `runCommand` and `clientConnection` modules from `server/adapters/` instead of `server/`; their exported names stay the same.
13
+
14
+ ## 0.10.0 - 2026-11-02
15
+
16
+ ### Breaking
17
+
18
+ - Import `assertLocalDatabase` from `@shivaedev/local-postgres/server/assertLocalDatabase.ts` instead of `@shivaedev/local-postgres/server/localPostgres.ts`. The validator has its own module so validation stays independent of process execution; its validation behavior is unchanged.
19
+
3
20
  ## 0.9.0 - 2026-11-02
4
21
 
5
22
  ### Fixed
package/README.md CHANGED
@@ -40,15 +40,13 @@ When database names come from the application's configured URLs, pass those URLs
40
40
 
41
41
  ```ts
42
42
  import { Config, Effect } from "effect";
43
+ import { dockerEnvironment } from "@shivaedev/local-postgres/server/dockerEnvironment.ts";
43
44
  import { LOCAL_SERVER, localPostgres } from "@shivaedev/local-postgres/server/localPostgres.ts";
44
45
 
45
46
  const setup = Effect.gen(function* () {
46
47
  const development = yield* Config.String("DATABASE_URL").pipe(Config.withDefault(`${LOCAL_SERVER}/example_dev`));
47
48
  const tests = yield* Config.String("TEST_DATABASE_URL").pipe(Config.withDefault(`${LOCAL_SERVER}/example_test`));
48
- const environment = yield* Config.all({
49
- "DOCKER_CONTEXT": Config.String("DOCKER_CONTEXT").pipe(Config.withDefault("")),
50
- "DOCKER_HOST": Config.String("DOCKER_HOST").pipe(Config.withDefault("")),
51
- });
49
+ const environment = yield* dockerEnvironment;
52
50
  yield* localPostgres(environment).prepareDatabases([development, tests]);
53
51
  });
54
52
  ```
@@ -59,7 +57,8 @@ Use `assertLocalDatabase` when the setup script owns a fixed set of database nam
59
57
 
60
58
  ```ts
61
59
  import { Effect } from "effect";
62
- import { assertLocalDatabase, LOCAL_SERVER, localPostgres } from "@shivaedev/local-postgres/server/localPostgres.ts";
60
+ import { assertLocalDatabase } from "@shivaedev/local-postgres/server/assertLocalDatabase.ts";
61
+ import { LOCAL_SERVER, localPostgres } from "@shivaedev/local-postgres/server/localPostgres.ts";
63
62
 
64
63
  const setup = Effect.gen(function* () {
65
64
  const development = `${LOCAL_SERVER}/example_dev`;
@@ -94,11 +93,11 @@ Run these setup Effects at a Node entry point with `NodeRuntime.runMain(setup.pi
94
93
 
95
94
  `startPostgres(connection)` prepares the service without choosing an application database to create. Its connection defaults to `LOCAL_SERVER`. Prefer `prepareDatabases` when the setup script needs named databases as well.
96
95
 
97
- On each start, setup reads `SHOW max_connections`. Native servers retain their configured limit. When the running managed container publishes port 55432 and allows fewer than 500 connections, setup applies `ALTER SYSTEM SET max_connections = 500`, restarts that same container, waits for readiness and confirms the setting. Existing data stays in place. A limit of 500 or higher causes no setting change or restart. If the setting cannot be applied, setup fails with `PostgresSettingError` from `@shivaedev/local-postgres/server/localConnections.ts`, with `_tag`, `container`, `setting` and the original `cause`.
96
+ On each start, setup reads `SHOW max_connections`. Native servers retain their configured limit. When the running managed container publishes port 55432 and allows fewer than 500 connections, setup applies `ALTER SYSTEM SET max_connections = 500`, restarts that same container, waits for readiness and confirms the setting. Existing data stays in place. A limit of 500 or higher causes no setting change or restart. If the setting cannot be applied, setup fails with `PostgresSettingError` from `@shivaedev/local-postgres/server/PostgresSettingError.ts`, with `_tag`, `container`, `setting` and the original `cause`.
98
97
 
99
98
  ### API
100
99
 
101
- Import the setup API from `@shivaedev/local-postgres/server/localPostgres.ts`:
100
+ Import service preparation from `@shivaedev/local-postgres/server/localPostgres.ts` and fixed-name validation from `@shivaedev/local-postgres/server/assertLocalDatabase.ts`:
102
101
 
103
102
  | Export | Purpose |
104
103
  | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -111,7 +110,7 @@ Import the setup API from `@shivaedev/local-postgres/server/localPostgres.ts`:
111
110
 
112
111
  The last three functions are members of the object returned by `localPostgres`, not module-level exports. They fail in the typed error channel. `PostgresCommandError` carries the command, diagnostic message and exit code or platform cause; `LocalPostgresError` describes local-target and image refusals, and malformed URL password escapes. Exhausted readiness checks retain their final failure; a version mismatch always names a version the service returned.
113
112
 
114
- The module export pattern also exposes the lower-level Docker and container command functions in `@shivaedev/local-postgres/server/localDocker.ts` and `@shivaedev/local-postgres/server/localContainer.ts`. Use `@shivaedev/local-postgres/server/localPostgres.ts` for application preparation.
113
+ The module export pattern also exposes the lower-level Docker and container command functions in `@shivaedev/local-postgres/server/adapters/docker.ts` and `@shivaedev/local-postgres/server/adapters/localContainer.ts`. Use `@shivaedev/local-postgres/server/localPostgres.ts` for application preparation.
115
114
 
116
115
  ### Install and machine setup
117
116
 
@@ -129,7 +128,7 @@ postgres:18.6-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f
129
128
 
130
129
  A newly created container uses username and password `postgres`; connection URLs supply credentials for client commands. Setup accepts native PostgreSQL 18.6 version strings with distribution suffixes, such as `18.6 (Debian 18.6-1.pgdg13+2)`, without requiring a managed container or Docker installation. Setup refuses a running release other than 18.6 with `PostgresVersionMismatch` from `@shivaedev/local-postgres/server/PostgresVersionMismatch.ts`. The error carries `_tag: "PostgresVersionMismatch"`, `expectedVersion` and `observedVersion`. A running PostgreSQL 17 service is refused without losing its existing rows; upgrading it while preserving its data is your job. Container preparation and container-client fallback also check the managed image; a successful host-`psql` version probe does not inspect that image.
131
130
 
132
- Read Docker settings through Effect Config and pass them to `localPostgres`, as in the configuration example. With `DOCKER_CONTEXT`, endpoint validation uses that context and ignores `DOCKER_HOST`; otherwise it validates `DOCKER_HOST` or the active context. Remote endpoints are rejected before a Docker operation. Each operation pins `DOCKER_HOST` to the validated endpoint and clears `DOCKER_CONTEXT`. The lower-level `docker` function refuses command environment settings that conflict with the supplied `DOCKER_HOST` or `DOCKER_CONTEXT` before invoking Docker.
131
+ Yield `dockerEnvironment` from `@shivaedev/local-postgres/server/dockerEnvironment.ts` and pass its result to `localPostgres`, as in the configuration example. This reader uses Effect Config for `DOCKER_CONTEXT` and `DOCKER_HOST`, with empty defaults that let Docker use its active context. The same module exports the `DockerEnvironment` type. With `DOCKER_CONTEXT`, endpoint validation uses that context and ignores `DOCKER_HOST`; otherwise it validates `DOCKER_HOST` or the active context. Remote endpoints are rejected before a Docker operation. Each operation pins `DOCKER_HOST` to the validated endpoint and clears `DOCKER_CONTEXT`. The lower-level `docker` function refuses command environment settings that conflict with the supplied `DOCKER_HOST` or `DOCKER_CONTEXT` before invoking Docker.
133
132
 
134
133
  ### Limits
135
134
 
@@ -0,0 +1,11 @@
1
+ import { Schema } from "effect";
2
+ declare const PostgresSettingError_base: Schema.Class<PostgresSettingError, Schema.TaggedStruct<"PostgresSettingError", {
3
+ readonly cause: Schema.Unknown;
4
+ readonly container: Schema.Literal<"development-postgres">;
5
+ readonly setting: Schema.Literal<"max_connections">;
6
+ }>, import("effect/Cause").YieldableError>;
7
+ export declare class PostgresSettingError extends PostgresSettingError_base {
8
+ get message(): string;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=PostgresSettingError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresSettingError.d.ts","sourceRoot":"","sources":["../../src/server/PostgresSettingError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;AAEhC,qBAAa,oBAAqB,SAAQ,yBAIxC;IACD,IAAa,OAAO,WAEnB;CACD"}
@@ -0,0 +1,11 @@
1
+ import { Schema } from "effect";
2
+ export class PostgresSettingError extends Schema.TaggedError()("PostgresSettingError", {
3
+ cause: Schema.Unknown,
4
+ container: Schema.Literal("development-postgres"),
5
+ setting: Schema.Literal("max_connections"),
6
+ }) {
7
+ get message() {
8
+ return "Could not set max_connections to at least 500 in container development-postgres.";
9
+ }
10
+ }
11
+ //# sourceMappingURL=PostgresSettingError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresSettingError.js","sourceRoot":"","sources":["../../src/server/PostgresSettingError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,EAAwB,CAAC,sBAAsB,EAAE;IAC5G,KAAK,EAAE,MAAM,CAAC,OAAO;IACrB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;CAC1C,CAAC;IACD,IAAa,OAAO;QACnB,OAAO,kFAAkF,CAAC;IAC3F,CAAC;CACD"}
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import type { CommandOptions } from "#runCommand.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import type { CommandOptions } from "./runCommand.ts";
4
4
  export declare const clientConnection: (value: URL, options?: CommandOptions | undefined) => Effect.Effect<{
5
5
  options: {
6
6
  env: {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientConnection.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/clientConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,eAAO,MAAM,gBAAgB;;;;;;;;6BAe3B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
3
  export const clientConnection = Effect.fn("LocalPostgres.clientConnection")(function* (value, options = {}) {
4
4
  const url = new URL(value);
5
5
  // libpq treats + literally in URI passwords.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientConnection.js","sourceRoot":"","sources":["../../../src/server/adapters/clientConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAU,EAAE,OAAO,GAAmB,EAAE;IAC9H,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;QAC3F,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC/H,CAAC,CAAC;IACH,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;AAChI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Effect } from "effect";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import { type CommandOptions } from "./runCommand.ts";
4
+ export declare const docker: (environment: Readonly<{
5
+ DOCKER_CONTEXT?: string | undefined;
6
+ DOCKER_HOST?: string | undefined;
7
+ }>, args: readonly string[], options?: CommandOptions | undefined) => Effect.Effect<string, LocalPostgresError | import("../PostgresCommandError.ts").PostgresCommandError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
8
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,cAAc,EAAc,MAAM,iBAAiB,CAAC;AAElE,eAAO,MAAM,MAAM;;;6OA4BjB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import { runCommand } from "#runCommand.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import { runCommand } from "./runCommand.js";
4
4
  export const docker = Effect.fn("LocalPostgres.docker")(function* (environment, args, options = {}) {
5
5
  const context = environment.DOCKER_CONTEXT;
6
6
  const host = environment.DOCKER_HOST;
@@ -21,4 +21,4 @@ export const docker = Effect.fn("LocalPostgres.docker")(function* (environment,
21
21
  }
22
22
  return yield* runCommand("docker", args, { ...settings, env: { ...settings.env, "DOCKER_CONTEXT": "", "DOCKER_HOST": endpoint } });
23
23
  });
24
- //# sourceMappingURL=localDocker.js.map
24
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/server/adapters/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAuB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAChE,WAA8B,EAC9B,IAAuB,EACvB,OAAO,GAAmB,EAAE;IAE5B,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;IACrC,IAAK,CAAC,gBAAgB,EAAE,aAAa,CAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7H,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,yEAAyE,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,QAAQ,GAAG;QAChB,GAAG,OAAO;QACV,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,EAAE;QACnG,SAAS,EAAE,IAAI;KACf,CAAC;IACF,MAAM,QAAQ,GACb,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;WACf,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,4BAA4B,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7I,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9I,IACC,CAAC,CACA,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;WACrF,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAC1F,EACA,CAAC;QACF,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,qFAAqF,EAAE,CAAC,CAAC;IAC1I,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AACpI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Effect } from "effect";
2
+ import type { ChildProcessSpawner } from "effect/process";
3
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
4
+ import type { PostgresCommandError } from "#server/PostgresCommandError.ts";
5
+ import { PostgresSettingError } from "#server/PostgresSettingError.ts";
6
+ import type { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
7
+ import type { docker as localDocker } from "./docker.ts";
8
+ type Query = (query: string) => Effect.Effect<string, LocalPostgresError | PostgresCommandError, ChildProcessSpawner.ChildProcessSpawner>;
9
+ export declare const ensureConnections: (docker: (args: readonly string[]) => ReturnType<typeof localDocker>, sql: Query, ready: () => Effect.Effect<void, LocalPostgresError | PostgresCommandError | PostgresVersionMismatch, ChildProcessSpawner.ChildProcessSpawner>) => Effect.Effect<void, PostgresSettingError, ChildProcessSpawner.ChildProcessSpawner>;
10
+ export {};
11
+ //# sourceMappingURL=ensureConnections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureConnections.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/ensureConnections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzD,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;AAE1I,eAAO,MAAM,iBAAiB,kBACd,SAAS,MAAM,EAAE,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,2BAEtD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,uBAAuB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,uFA6B7I,CAAC"}
@@ -1,15 +1,7 @@
1
- import { Effect, Schema } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import { POSTGRES_IMAGE } from "#localContainer.ts";
4
- export class PostgresSettingError extends Schema.TaggedError()("PostgresSettingError", {
5
- cause: Schema.Unknown,
6
- container: Schema.Literal("development-postgres"),
7
- setting: Schema.Literal("max_connections"),
8
- }) {
9
- get message() {
10
- return "Could not set max_connections to at least 500 in container development-postgres.";
11
- }
12
- }
1
+ import { Effect } from "effect";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import { PostgresSettingError } from "#server/PostgresSettingError.ts";
4
+ import { POSTGRES_IMAGE } from "./localContainer.js";
13
5
  export const ensureConnections = Effect.fn("LocalPostgres.ensureConnections")(function* (docker, sql, ready) {
14
6
  yield* Effect.gen(function* () {
15
7
  const current = Number(yield* sql("SHOW max_connections"));
@@ -37,4 +29,4 @@ export const ensureConnections = Effect.fn("LocalPostgres.ensureConnections")(fu
37
29
  }
38
30
  }).pipe(Effect.mapError((cause) => new PostgresSettingError({ cause, container: "development-postgres", setting: "max_connections" })));
39
31
  });
40
- //# sourceMappingURL=localConnections.js.map
32
+ //# sourceMappingURL=ensureConnections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureConnections.js","sourceRoot":"","sources":["../../../src/server/adapters/ensureConnections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,EACtF,MAAmE,EACnE,GAAU,EACV,KAA8I;IAE9I,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC,CAAC;QAC5G,CAAC;QACD,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,8BAA8B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CACzI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CACjE,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClG,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC;gBACpC,OAAO,EAAE,sGAAsG;aAC/G,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,4DAA4D,EAAE,CAAC,CAAC;QACjH,CAAC;IACF,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;AACzI,CAAC,CAAC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import type { docker as runDocker } from "#localDocker.ts";
4
- import { PostgresCommandError } from "#PostgresCommandError.ts";
5
- import type { CommandOptions } from "#runCommand.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import { PostgresCommandError } from "#server/PostgresCommandError.ts";
4
+ import type { docker as runDocker } from "./docker.ts";
5
+ import type { CommandOptions } from "./runCommand.ts";
6
6
  export declare const POSTGRES_IMAGE = "postgres:18.6-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873";
7
7
  type Docker = (args: readonly string[], options?: CommandOptions) => ReturnType<typeof runDocker>;
8
8
  export declare const sqlInContainer: (docker: Docker, url: URL, args: readonly string[], options: CommandOptions) => Effect.Effect<string, LocalPostgresError | PostgresCommandError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localContainer.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/localContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,eAAO,MAAM,cAAc,iGAAiG,CAAC;AAE7H,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAElG,eAAO,MAAM,cAAc,oNAmBzB,CAAC;AAEH,eAAO,MAAM,cAAc,2JA2BzB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Effect } from "effect";
2
- import { clientConnection } from "#clientConnection.ts";
3
- import { LocalPostgresError } from "#LocalPostgresError.ts";
4
- import { PostgresCommandError } from "#PostgresCommandError.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import { PostgresCommandError } from "#server/PostgresCommandError.ts";
4
+ import { clientConnection } from "./clientConnection.js";
5
5
  export const POSTGRES_IMAGE = "postgres:18.6-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873";
6
6
  const CONTAINER = "development-postgres";
7
7
  export const sqlInContainer = Effect.fn("LocalPostgres.sqlInContainer")(function* (docker, url, args, options) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localContainer.js","sourceRoot":"","sources":["../../../src/server/adapters/localContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Effect } from "effect";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import type { docker } from "./docker.ts";
4
+ import { type CommandOptions } from "./runCommand.ts";
5
+ export declare function localSql(localDocker: (args: readonly string[], options?: CommandOptions) => ReturnType<typeof docker>): (value: string | URL, query: string) => Effect.Effect<string, LocalPostgresError | import("../PostgresCommandError.ts").PostgresCommandError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
6
+ //# sourceMappingURL=localSql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localSql.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/localSql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,iBAAiB,CAAC;AAElF,wBAAgB,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,UAAU,CAAC,OAAO,MAAM,CAAC,mNAWrH"}
@@ -0,0 +1,15 @@
1
+ import { Effect } from "effect";
2
+ import { assertLocalDatabase } from "#server/assertLocalDatabase.ts";
3
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
4
+ import { clientConnection } from "./clientConnection.js";
5
+ import { sqlInContainer } from "./localContainer.js";
6
+ import { missingCommand, runCommand } from "./runCommand.js";
7
+ export function localSql(localDocker) {
8
+ return Effect.fn("LocalPostgres.sql")(function* (value, query) {
9
+ const parsed = yield* Effect.try({ catch: () => new LocalPostgresError({ message: "Invalid local database URL." }), try: () => new URL(value) });
10
+ const { url, options } = yield* clientConnection(yield* assertLocalDatabase(parsed.toString(), [parsed.pathname.slice(1)]));
11
+ const args = ["-X", "--set", "ON_ERROR_STOP=1", "-At", "-c", query];
12
+ return yield* runCommand("psql", [...args, "--dbname", url.toString()], options).pipe(Effect.catchTag("PostgresCommandError", (error) => missingCommand(error) ? sqlInContainer(localDocker, url, args, options) : Effect.fail(error)));
13
+ });
14
+ }
15
+ //# sourceMappingURL=localSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localSql.js","sourceRoot":"","sources":["../../../src/server/adapters/localSql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAuB,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElF,MAAM,UAAU,QAAQ,CAAC,WAA6F;IACrH,OAAO,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAmB,EAAE,KAAa;QAClF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjJ,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5H,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACpF,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,EAAE,CACjD,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAC5F,CACD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "effect";
2
2
  import { ChildProcess, ChildProcessSpawner } from "effect/process";
3
- import { PostgresCommandError } from "#PostgresCommandError.ts";
3
+ import { PostgresCommandError } from "#server/PostgresCommandError.ts";
4
4
  export type CommandOptions = Pick<ChildProcess.CommandOptions, "env" | "extendEnv">;
5
5
  export declare const runCommand: (command: string, args: readonly string[], options?: CommandOptions | undefined) => Effect.Effect<string, PostgresCommandError, ChildProcessSpawner.ChildProcessSpawner>;
6
6
  export declare function missingCommand(error: PostgresCommandError): boolean;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/runCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAyB,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;AAEpF,eAAO,MAAM,UAAU,0KAoBrB,CAAC;AAEH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,WAEzD"}
@@ -1,6 +1,6 @@
1
1
  import { Effect, PlatformError, Stream } from "effect";
2
2
  import { ChildProcess, ChildProcessSpawner } from "effect/process";
3
- import { PostgresCommandError } from "#PostgresCommandError.ts";
3
+ import { PostgresCommandError } from "#server/PostgresCommandError.ts";
4
4
  export const runCommand = Effect.fn("LocalPostgres.runCommand")(function* (command, args, options = {}) {
5
5
  const label = command === "docker" ? `docker ${args[0] ?? ""}`.trim() : command;
6
6
  return yield* Effect.scoped(Effect.gen(function* () {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../../../src/server/adapters/runCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAIvE,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAe,EAAE,IAAuB,EAAE,OAAO,GAAmB,EAAE;IAChJ,MAAM,KAAK,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAChF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC/C,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EACpH,EAAE,WAAW,EAAE,WAAW,EAAE,CAC5B,CAAC;QACF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;gBACtC,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,qBAAqB,IAAI,GAAG;aAChE,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/I,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,KAA2B;IACzD,OAAO,KAAK,CAAC,KAAK,YAAY,aAAa,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;AACrG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Effect } from "effect";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ export declare const assertLocalDatabase: (value: string, names: readonly string[]) => Effect.Effect<import("url").URL, LocalPostgresError, never>;
4
+ //# sourceMappingURL=assertLocalDatabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertLocalDatabase.d.ts","sourceRoot":"","sources":["../../src/server/assertLocalDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,eAAO,MAAM,mBAAmB,0GAY9B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Effect } from "effect";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ export const assertLocalDatabase = Effect.fn("LocalPostgres.assertLocalDatabase")(function* (value, names) {
4
+ const message = `Use a local database on 127.0.0.1:55432 named ${names.join(" or ")}.`;
5
+ const url = yield* Effect.try({ catch: () => new LocalPostgresError({ message }), try: () => new URL(value) });
6
+ if (!(["postgres:", "postgresql:"].includes(url.protocol) && ["localhost", "127.0.0.1"].includes(url.hostname))
7
+ || url.port !== "55432"
8
+ || ["host", "hostaddr", "port", "dbname", "service"].some((key) => url.searchParams.has(key))
9
+ || !names.includes(url.pathname.slice(1))) {
10
+ return yield* new LocalPostgresError({ message });
11
+ }
12
+ return url;
13
+ });
14
+ //# sourceMappingURL=assertLocalDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertLocalDatabase.js","sourceRoot":"","sources":["../../src/server/assertLocalDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAa,EAAE,KAAwB;IACnI,MAAM,OAAO,GAAG,iDAAiD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACvF,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/G,IACC,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;WACxG,GAAG,CAAC,IAAI,KAAK,OAAO;WACpB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;WAC1F,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACxC,CAAC;QACF,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Config } from "effect";
2
+ export type DockerEnvironment = Readonly<{
3
+ "DOCKER_CONTEXT"?: string | undefined;
4
+ "DOCKER_HOST"?: string | undefined;
5
+ }>;
6
+ export declare const dockerEnvironment: Config.Config<{
7
+ DOCKER_CONTEXT: string;
8
+ DOCKER_HOST: string;
9
+ }>;
10
+ //# sourceMappingURL=dockerEnvironment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerEnvironment.d.ts","sourceRoot":"","sources":["../../src/server/dockerEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAExH,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Config } from "effect";
2
+ export const dockerEnvironment = Config.all({
3
+ "DOCKER_CONTEXT": Config.String("DOCKER_CONTEXT").pipe(Config.withDefault("")),
4
+ "DOCKER_HOST": Config.String("DOCKER_HOST").pipe(Config.withDefault("")),
5
+ });
6
+ //# sourceMappingURL=dockerEnvironment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerEnvironment.js","sourceRoot":"","sources":["../../src/server/dockerEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC;IAC3C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9E,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;CACxE,CAAC,CAAC"}
@@ -1,16 +1,15 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import { type DockerEnvironment } from "#localDocker.ts";
4
- import { PostgresVersionMismatch } from "#PostgresVersionMismatch.ts";
2
+ import type { DockerEnvironment } from "#server/dockerEnvironment.ts";
3
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
4
+ import { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
5
5
  export declare const LOCAL_SERVER = "postgresql://postgres:postgres@127.0.0.1:55432";
6
- export declare const assertLocalDatabase: (value: string, names: readonly string[]) => Effect.Effect<import("url").URL, LocalPostgresError, never>;
7
6
  export interface ReadinessOptions {
8
7
  readonly attempts?: number;
9
8
  readonly delayMillis?: number;
10
9
  }
11
10
  export declare function localPostgres(environment: DockerEnvironment, { attempts, delayMillis }?: ReadinessOptions): {
12
- prepareDatabases: (values: readonly string[]) => Effect.Effect<undefined, LocalPostgresError | import("./PostgresCommandError.ts").PostgresCommandError | import("#localConnections.ts").PostgresSettingError | PostgresVersionMismatch, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
11
+ prepareDatabases: (values: readonly string[]) => Effect.Effect<undefined, LocalPostgresError | import("./PostgresCommandError.ts").PostgresCommandError | import("./PostgresSettingError.ts").PostgresSettingError | PostgresVersionMismatch, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
13
12
  sql: (value: string | URL, query: string) => Effect.Effect<string, LocalPostgresError | import("./PostgresCommandError.ts").PostgresCommandError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
14
- startPostgres: (connection?: any) => Effect.Effect<void, LocalPostgresError | import("./PostgresCommandError.ts").PostgresCommandError | import("#localConnections.ts").PostgresSettingError | PostgresVersionMismatch, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
13
+ startPostgres: (connection?: any) => Effect.Effect<void, LocalPostgresError | import("./PostgresCommandError.ts").PostgresCommandError | import("./PostgresSettingError.ts").PostgresSettingError | PostgresVersionMismatch, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
15
14
  };
16
15
  //# sourceMappingURL=localPostgres.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"localPostgres.d.ts","sourceRoot":"","sources":["../../src/server/localPostgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,KAAK,iBAAiB,EAAU,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAGtE,eAAO,MAAM,YAAY,mDAAmD,CAAC;AAE7E,eAAO,MAAM,mBAAmB,0GAY9B,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,QAAa,EAAE,WAAkB,EAAE,GAAE,gBAAqB;;;;EAuDzH"}
1
+ {"version":3,"file":"localPostgres.d.ts","sourceRoot":"","sources":["../../src/server/localPostgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAO1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,eAAO,MAAM,YAAY,mDAAmD,CAAC;AAE7E,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,QAAa,EAAE,WAAkB,EAAE,GAAE,gBAAqB;;;;EAuDzH"}
@@ -1,23 +1,12 @@
1
1
  import { Effect, Schedule } from "effect";
2
- import { clientConnection } from "#clientConnection.ts";
3
- import { LocalPostgresError } from "#LocalPostgresError.ts";
4
- import { ensureConnections } from "#localConnections.ts";
5
- import { sqlInContainer, startContainer } from "#localContainer.ts";
6
- import { docker } from "#localDocker.ts";
7
- import { PostgresVersionMismatch } from "#PostgresVersionMismatch.ts";
8
- import { missingCommand, runCommand } from "#runCommand.ts";
2
+ import { docker } from "#server/adapters/docker.ts";
3
+ import { ensureConnections } from "#server/adapters/ensureConnections.ts";
4
+ import { startContainer } from "#server/adapters/localContainer.ts";
5
+ import { localSql } from "#server/adapters/localSql.ts";
6
+ import { assertLocalDatabase } from "#server/assertLocalDatabase.ts";
7
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
8
+ import { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
9
9
  export const LOCAL_SERVER = "postgresql://postgres:postgres@127.0.0.1:55432";
10
- export const assertLocalDatabase = Effect.fn("LocalPostgres.assertLocalDatabase")(function* (value, names) {
11
- const message = `Use a local database on 127.0.0.1:55432 named ${names.join(" or ")}.`;
12
- const url = yield* Effect.try({ catch: () => new LocalPostgresError({ message }), try: () => new URL(value) });
13
- if (!(["postgres:", "postgresql:"].includes(url.protocol) && ["localhost", "127.0.0.1"].includes(url.hostname))
14
- || url.port !== "55432"
15
- || ["host", "hostaddr", "port", "dbname", "service"].some((key) => url.searchParams.has(key))
16
- || !names.includes(url.pathname.slice(1))) {
17
- return yield* new LocalPostgresError({ message });
18
- }
19
- return url;
20
- });
21
10
  export function localPostgres(environment, { attempts = 30, delayMillis = 1000 } = {}) {
22
11
  function localDocker(args, options) {
23
12
  return docker(environment, args, options);
@@ -68,12 +57,4 @@ export function localPostgres(environment, { attempts = 30, delayMillis = 1000 }
68
57
  });
69
58
  return { prepareDatabases, sql, startPostgres };
70
59
  }
71
- function localSql(localDocker) {
72
- return Effect.fn("LocalPostgres.sql")(function* (value, query) {
73
- const parsed = yield* Effect.try({ catch: () => new LocalPostgresError({ message: "Invalid local database URL." }), try: () => new URL(value) });
74
- const { url, options } = yield* clientConnection(yield* assertLocalDatabase(parsed.toString(), [parsed.pathname.slice(1)]));
75
- const args = ["-X", "--set", "ON_ERROR_STOP=1", "-At", "-c", query];
76
- return yield* runCommand("psql", [...args, "--dbname", url.toString()], options).pipe(Effect.catchTag("PostgresCommandError", (error) => missingCommand(error) ? sqlInContainer(localDocker, url, args, options) : Effect.fail(error)));
77
- });
78
- }
79
60
  //# sourceMappingURL=localPostgres.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"localPostgres.js","sourceRoot":"","sources":["../../src/server/localPostgres.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localPostgres.js","sourceRoot":"","sources":["../../src/server/localPostgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG,gDAAgD,CAAC;AAO7E,MAAM,UAAU,aAAa,CAAC,WAA8B,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,WAAW,GAAG,IAAI,EAAE,GAAqB,EAAE;IACzH,SAAS,WAAW,CAAC,IAAuB,EAAE,OAAwB;QACrE,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,YAAY;QAClG,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAChC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;YAC/E,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC9B,KAAK,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5D,SAAS,cAAc;YACtB,OAAO,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/H,CAAC;QACD,SAAS,cAAc,CAAC,QAAgB;YACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,CAAC,CAAC,MAAM,CAAC,IAAI;gBACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAC7D,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC,CAC1G,CAAC;QACF,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/B,KAAK,CAAC,CAAC,iBAAiB,CACvB,WAAW,EACX,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,EAC7B,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,cAAc,CAAC,CACtD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAyB;QACxG,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAChC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;gBAC/E,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;aACzB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;YAC9B,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,8CAA8C,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClF,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,IAAI,GAAG,CAAC,CAAC;YACjD,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;AACjD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/local-postgres",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "Repeatable local PostgreSQL preparation with one shared persistent service",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/local-postgres#readme",
6
6
  "bugs": {
@@ -17,9 +17,9 @@
17
17
  "imports": {
18
18
  "#test/*": "./src/test-support/*",
19
19
  "#*.ts": {
20
- "source": "./src/server/*.ts",
21
- "types": "./dist/server/*.d.ts",
22
- "default": "./dist/server/*.js"
20
+ "source": "./src/*.ts",
21
+ "types": "./dist/*.d.ts",
22
+ "default": "./dist/*.js"
23
23
  }
24
24
  },
25
25
  "exports": {
@@ -41,8 +41,8 @@
41
41
  ],
42
42
  "devDependencies": {
43
43
  "@effect/platform-node": "4.0.6",
44
- "@shivaedev/quality": "0.55.0",
45
- "@shivaedev/test-story": "0.33.0",
44
+ "@shivaedev/quality": "0.57.0",
45
+ "@shivaedev/test-story": "0.35.0",
46
46
  "@types/node": "24.19.2",
47
47
  "effect": "4.0.6",
48
48
  "typescript": "7.0.2",
@@ -0,0 +1,11 @@
1
+ import { Schema } from "effect";
2
+
3
+ export class PostgresSettingError extends Schema.TaggedError<PostgresSettingError>()("PostgresSettingError", {
4
+ cause: Schema.Unknown,
5
+ container: Schema.Literal("development-postgres"),
6
+ setting: Schema.Literal("max_connections"),
7
+ }) {
8
+ override get message() {
9
+ return "Could not set max_connections to at least 500 in container development-postgres.";
10
+ }
11
+ }
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import type { CommandOptions } from "#runCommand.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import type { CommandOptions } from "./runCommand.ts";
4
4
 
5
5
  export const clientConnection = Effect.fn("LocalPostgres.clientConnection")(function* (value: URL, options: CommandOptions = {}) {
6
6
  const url = new URL(value);
@@ -1,8 +1,7 @@
1
1
  import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import { type CommandOptions, runCommand } from "#runCommand.ts";
4
-
5
- export type DockerEnvironment = Readonly<{ "DOCKER_CONTEXT"?: string | undefined; "DOCKER_HOST"?: string | undefined }>;
2
+ import type { DockerEnvironment } from "#server/dockerEnvironment.ts";
3
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
4
+ import { type CommandOptions, runCommand } from "./runCommand.ts";
6
5
 
7
6
  export const docker = Effect.fn("LocalPostgres.docker")(function* (
8
7
  environment: DockerEnvironment,
@@ -1,20 +1,11 @@
1
- import { Effect, Schema } from "effect";
1
+ import { Effect } from "effect";
2
2
  import type { ChildProcessSpawner } from "effect/process";
3
- import { LocalPostgresError } from "#LocalPostgresError.ts";
4
- import { POSTGRES_IMAGE } from "#localContainer.ts";
5
- import type { docker as localDocker } from "#localDocker.ts";
6
- import type { PostgresCommandError } from "#PostgresCommandError.ts";
7
- import type { PostgresVersionMismatch } from "#PostgresVersionMismatch.ts";
8
-
9
- export class PostgresSettingError extends Schema.TaggedError<PostgresSettingError>()("PostgresSettingError", {
10
- cause: Schema.Unknown,
11
- container: Schema.Literal("development-postgres"),
12
- setting: Schema.Literal("max_connections"),
13
- }) {
14
- override get message() {
15
- return "Could not set max_connections to at least 500 in container development-postgres.";
16
- }
17
- }
3
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
4
+ import type { PostgresCommandError } from "#server/PostgresCommandError.ts";
5
+ import { PostgresSettingError } from "#server/PostgresSettingError.ts";
6
+ import type { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
7
+ import type { docker as localDocker } from "./docker.ts";
8
+ import { POSTGRES_IMAGE } from "./localContainer.ts";
18
9
 
19
10
  type Query = (query: string) => Effect.Effect<string, LocalPostgresError | PostgresCommandError, ChildProcessSpawner.ChildProcessSpawner>;
20
11
 
@@ -1,9 +1,9 @@
1
1
  import { Effect } from "effect";
2
- import { clientConnection } from "#clientConnection.ts";
3
- import { LocalPostgresError } from "#LocalPostgresError.ts";
4
- import type { docker as runDocker } from "#localDocker.ts";
5
- import { PostgresCommandError } from "#PostgresCommandError.ts";
6
- import type { CommandOptions } from "#runCommand.ts";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+ import { PostgresCommandError } from "#server/PostgresCommandError.ts";
4
+ import { clientConnection } from "./clientConnection.ts";
5
+ import type { docker as runDocker } from "./docker.ts";
6
+ import type { CommandOptions } from "./runCommand.ts";
7
7
 
8
8
  export const POSTGRES_IMAGE = "postgres:18.6-alpine@sha256:77f585114c32fbca283dc835b0596f4e52b51b4c6662d7810b2f4084f60a1873";
9
9
  const CONTAINER = "development-postgres";
@@ -0,0 +1,20 @@
1
+ import { Effect } from "effect";
2
+ import { assertLocalDatabase } from "#server/assertLocalDatabase.ts";
3
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
4
+ import { clientConnection } from "./clientConnection.ts";
5
+ import type { docker } from "./docker.ts";
6
+ import { sqlInContainer } from "./localContainer.ts";
7
+ import { type CommandOptions, missingCommand, runCommand } from "./runCommand.ts";
8
+
9
+ export function localSql(localDocker: (args: readonly string[], options?: CommandOptions) => ReturnType<typeof docker>) {
10
+ return Effect.fn("LocalPostgres.sql")(function* (value: string | URL, query: string) {
11
+ const parsed = yield* Effect.try({ catch: () => new LocalPostgresError({ message: "Invalid local database URL." }), try: () => new URL(value) });
12
+ const { url, options } = yield* clientConnection(yield* assertLocalDatabase(parsed.toString(), [parsed.pathname.slice(1)]));
13
+ const args = ["-X", "--set", "ON_ERROR_STOP=1", "-At", "-c", query];
14
+ return yield* runCommand("psql", [...args, "--dbname", url.toString()], options).pipe(
15
+ Effect.catchTag("PostgresCommandError", (error) =>
16
+ missingCommand(error) ? sqlInContainer(localDocker, url, args, options) : Effect.fail(error),
17
+ ),
18
+ );
19
+ });
20
+ }
@@ -1,6 +1,6 @@
1
1
  import { Effect, PlatformError, Stream } from "effect";
2
2
  import { ChildProcess, ChildProcessSpawner } from "effect/process";
3
- import { PostgresCommandError } from "#PostgresCommandError.ts";
3
+ import { PostgresCommandError } from "#server/PostgresCommandError.ts";
4
4
 
5
5
  export type CommandOptions = Pick<ChildProcess.CommandOptions, "env" | "extendEnv">;
6
6
 
@@ -0,0 +1,16 @@
1
+ import { Effect } from "effect";
2
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
3
+
4
+ export const assertLocalDatabase = Effect.fn("LocalPostgres.assertLocalDatabase")(function* (value: string, names: readonly string[]) {
5
+ const message = `Use a local database on 127.0.0.1:55432 named ${names.join(" or ")}.`;
6
+ const url = yield* Effect.try({ catch: () => new LocalPostgresError({ message }), try: () => new URL(value) });
7
+ if (
8
+ !(["postgres:", "postgresql:"].includes(url.protocol) && ["localhost", "127.0.0.1"].includes(url.hostname))
9
+ || url.port !== "55432"
10
+ || ["host", "hostaddr", "port", "dbname", "service"].some((key) => url.searchParams.has(key))
11
+ || !names.includes(url.pathname.slice(1))
12
+ ) {
13
+ return yield* new LocalPostgresError({ message });
14
+ }
15
+ return url;
16
+ });
@@ -0,0 +1,8 @@
1
+ import { Config } from "effect";
2
+
3
+ export type DockerEnvironment = Readonly<{ "DOCKER_CONTEXT"?: string | undefined; "DOCKER_HOST"?: string | undefined }>;
4
+
5
+ export const dockerEnvironment = Config.all({
6
+ "DOCKER_CONTEXT": Config.String("DOCKER_CONTEXT").pipe(Config.withDefault("")),
7
+ "DOCKER_HOST": Config.String("DOCKER_HOST").pipe(Config.withDefault("")),
8
+ });
@@ -1,28 +1,16 @@
1
1
  import { Effect, Schedule } from "effect";
2
- import { clientConnection } from "#clientConnection.ts";
3
- import { LocalPostgresError } from "#LocalPostgresError.ts";
4
- import { ensureConnections } from "#localConnections.ts";
5
- import { sqlInContainer, startContainer } from "#localContainer.ts";
6
- import { type DockerEnvironment, docker } from "#localDocker.ts";
7
- import { PostgresVersionMismatch } from "#PostgresVersionMismatch.ts";
8
- import { type CommandOptions, missingCommand, runCommand } from "#runCommand.ts";
2
+ import { docker } from "#server/adapters/docker.ts";
3
+ import { ensureConnections } from "#server/adapters/ensureConnections.ts";
4
+ import { startContainer } from "#server/adapters/localContainer.ts";
5
+ import { localSql } from "#server/adapters/localSql.ts";
6
+ import type { CommandOptions } from "#server/adapters/runCommand.ts";
7
+ import { assertLocalDatabase } from "#server/assertLocalDatabase.ts";
8
+ import type { DockerEnvironment } from "#server/dockerEnvironment.ts";
9
+ import { LocalPostgresError } from "#server/LocalPostgresError.ts";
10
+ import { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
9
11
 
10
12
  export const LOCAL_SERVER = "postgresql://postgres:postgres@127.0.0.1:55432";
11
13
 
12
- export const assertLocalDatabase = Effect.fn("LocalPostgres.assertLocalDatabase")(function* (value: string, names: readonly string[]) {
13
- const message = `Use a local database on 127.0.0.1:55432 named ${names.join(" or ")}.`;
14
- const url = yield* Effect.try({ catch: () => new LocalPostgresError({ message }), try: () => new URL(value) });
15
- if (
16
- !(["postgres:", "postgresql:"].includes(url.protocol) && ["localhost", "127.0.0.1"].includes(url.hostname))
17
- || url.port !== "55432"
18
- || ["host", "hostaddr", "port", "dbname", "service"].some((key) => url.searchParams.has(key))
19
- || !names.includes(url.pathname.slice(1))
20
- ) {
21
- return yield* new LocalPostgresError({ message });
22
- }
23
- return url;
24
- });
25
-
26
14
  export interface ReadinessOptions {
27
15
  readonly attempts?: number;
28
16
  readonly delayMillis?: number;
@@ -84,16 +72,3 @@ export function localPostgres(environment: DockerEnvironment, { attempts = 30, d
84
72
  });
85
73
  return { prepareDatabases, sql, startPostgres };
86
74
  }
87
-
88
- function localSql(localDocker: (args: readonly string[], options?: CommandOptions) => ReturnType<typeof docker>) {
89
- return Effect.fn("LocalPostgres.sql")(function* (value: string | URL, query: string) {
90
- const parsed = yield* Effect.try({ catch: () => new LocalPostgresError({ message: "Invalid local database URL." }), try: () => new URL(value) });
91
- const { url, options } = yield* clientConnection(yield* assertLocalDatabase(parsed.toString(), [parsed.pathname.slice(1)]));
92
- const args = ["-X", "--set", "ON_ERROR_STOP=1", "-At", "-c", query];
93
- return yield* runCommand("psql", [...args, "--dbname", url.toString()], options).pipe(
94
- Effect.catchTag("PostgresCommandError", (error) =>
95
- missingCommand(error) ? sqlInContainer(localDocker, url, args, options) : Effect.fail(error),
96
- ),
97
- );
98
- });
99
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"clientConnection.d.ts","sourceRoot":"","sources":["../../src/server/clientConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,gBAAgB;;;;;;;;6BAe3B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"clientConnection.js","sourceRoot":"","sources":["../../src/server/clientConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAU,EAAE,OAAO,GAAmB,EAAE;IAC9H,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;QAC3F,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC/H,CAAC,CAAC;IACH,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;AAChI,CAAC,CAAC,CAAC"}
@@ -1,18 +0,0 @@
1
- import { Effect, Schema } from "effect";
2
- import type { ChildProcessSpawner } from "effect/process";
3
- import { LocalPostgresError } from "#LocalPostgresError.ts";
4
- import type { docker as localDocker } from "#localDocker.ts";
5
- import type { PostgresCommandError } from "#PostgresCommandError.ts";
6
- import type { PostgresVersionMismatch } from "#PostgresVersionMismatch.ts";
7
- declare const PostgresSettingError_base: Schema.Class<PostgresSettingError, Schema.TaggedStruct<"PostgresSettingError", {
8
- readonly cause: Schema.Unknown;
9
- readonly container: Schema.Literal<"development-postgres">;
10
- readonly setting: Schema.Literal<"max_connections">;
11
- }>, import("effect/Cause").YieldableError>;
12
- export declare class PostgresSettingError extends PostgresSettingError_base {
13
- get message(): string;
14
- }
15
- type Query = (query: string) => Effect.Effect<string, LocalPostgresError | PostgresCommandError, ChildProcessSpawner.ChildProcessSpawner>;
16
- export declare const ensureConnections: (docker: (args: readonly string[]) => ReturnType<typeof localDocker>, sql: Query, ready: () => Effect.Effect<void, LocalPostgresError | PostgresCommandError | PostgresVersionMismatch, ChildProcessSpawner.ChildProcessSpawner>) => Effect.Effect<void, PostgresSettingError, ChildProcessSpawner.ChildProcessSpawner>;
17
- export {};
18
- //# sourceMappingURL=localConnections.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localConnections.d.ts","sourceRoot":"","sources":["../../src/server/localConnections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;;;;;AAE3E,qBAAa,oBAAqB,SAAQ,yBAIxC;IACD,IAAa,OAAO,WAEnB;CACD;AAED,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;AAE1I,eAAO,MAAM,iBAAiB,kBACd,SAAS,MAAM,EAAE,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,2BAEtD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,uBAAuB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,uFA6B7I,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localConnections.js","sourceRoot":"","sources":["../../src/server/localConnections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,EAAwB,CAAC,sBAAsB,EAAE;IAC5G,KAAK,EAAE,MAAM,CAAC,OAAO;IACrB,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;CAC1C,CAAC;IACD,IAAa,OAAO;QACnB,OAAO,kFAAkF,CAAC;IAC3F,CAAC;CACD;AAID,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,EACtF,MAAmE,EACnE,GAAU,EACV,KAA8I;IAE9I,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC,CAAC;QAC5G,CAAC;QACD,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,8BAA8B,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CACzI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CACjE,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClG,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC;gBACpC,OAAO,EAAE,sGAAsG;aAC/G,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,4DAA4D,EAAE,CAAC,CAAC;QACjH,CAAC;IACF,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;AACzI,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localContainer.d.ts","sourceRoot":"","sources":["../../src/server/localContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,cAAc,iGAAiG,CAAC;AAE7H,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAElG,eAAO,MAAM,cAAc,oNAmBzB,CAAC;AAEH,eAAO,MAAM,cAAc,2JA2BzB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localContainer.js","sourceRoot":"","sources":["../../src/server/localContainer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { Effect } from "effect";
2
- import { LocalPostgresError } from "#LocalPostgresError.ts";
3
- import { type CommandOptions } from "#runCommand.ts";
4
- export type DockerEnvironment = Readonly<{
5
- "DOCKER_CONTEXT"?: string | undefined;
6
- "DOCKER_HOST"?: string | undefined;
7
- }>;
8
- export declare const docker: (environment: Readonly<{
9
- DOCKER_CONTEXT?: string | undefined;
10
- DOCKER_HOST?: string | undefined;
11
- }>, args: readonly string[], options?: CommandOptions | undefined) => Effect.Effect<string, LocalPostgresError | import("./PostgresCommandError.ts").PostgresCommandError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
12
- //# sourceMappingURL=localDocker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localDocker.d.ts","sourceRoot":"","sources":["../../src/server/localDocker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,KAAK,cAAc,EAAc,MAAM,gBAAgB,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC;AAExH,eAAO,MAAM,MAAM;qBAF2C,MAAM,GAAG,SAAS;kBAAkB,MAAM,GAAG,SAAS;4OA8BlH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localDocker.js","sourceRoot":"","sources":["../../src/server/localDocker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAuB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjE,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAChE,WAA8B,EAC9B,IAAuB,EACvB,OAAO,GAAmB,EAAE;IAE5B,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;IACrC,IAAK,CAAC,gBAAgB,EAAE,aAAa,CAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7H,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,yEAAyE,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,QAAQ,GAAG;QAChB,GAAG,OAAO;QACV,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,EAAE;QACnG,SAAS,EAAE,IAAI;KACf,CAAC;IACF,MAAM,QAAQ,GACb,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;WACf,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,4BAA4B,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7I,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9I,IACC,CAAC,CACA,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;WACrF,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAC1F,EACA,CAAC;QACF,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,qFAAqF,EAAE,CAAC,CAAC;IAC1I,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AACpI,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../../src/server/runCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAyB,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC;AAEpF,eAAO,MAAM,UAAU,0KAoBrB,CAAC;AAEH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,WAEzD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runCommand.js","sourceRoot":"","sources":["../../src/server/runCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIhE,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAe,EAAE,IAAuB,EAAE,OAAO,GAAmB,EAAE;IAChJ,MAAM,KAAK,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAChF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC/C,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EACpH,EAAE,WAAW,EAAE,WAAW,EAAE,CAC5B,CAAC;QACF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;gBACtC,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,qBAAqB,IAAI,GAAG;aAChE,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/I,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,KAA2B;IACzD,OAAO,KAAK,CAAC,KAAK,YAAY,aAAa,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;AACrG,CAAC"}