@shivaedev/local-postgres 0.15.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +2 -0
- package/dist/server/adapters/clientConnection.d.ts +1 -1
- package/dist/server/adapters/clientConnection.d.ts.map +1 -1
- package/dist/server/adapters/clientConnection.js.map +1 -1
- package/dist/server/adapters/docker.d.ts +1 -1
- package/dist/server/adapters/docker.d.ts.map +1 -1
- package/dist/server/adapters/docker.js +1 -1
- package/dist/server/adapters/docker.js.map +1 -1
- package/dist/server/adapters/ensureConnections.d.ts +1 -1
- package/dist/server/adapters/ensureConnections.d.ts.map +1 -1
- package/dist/server/adapters/ensureConnections.js +1 -1
- package/dist/server/adapters/ensureConnections.js.map +1 -1
- package/dist/server/adapters/localContainer.d.ts +2 -2
- package/dist/server/adapters/localContainer.d.ts.map +1 -1
- package/dist/server/adapters/localContainer.js +1 -1
- package/dist/server/adapters/localContainer.js.map +1 -1
- package/dist/server/adapters/localSql.d.ts +2 -2
- package/dist/server/adapters/localSql.d.ts.map +1 -1
- package/dist/server/adapters/localSql.js +3 -3
- package/dist/server/adapters/localSql.js.map +1 -1
- package/dist/server/assertLocalDatabase.d.ts +1 -1
- package/dist/server/assertLocalDatabase.d.ts.map +1 -1
- package/dist/server/assertLocalDatabase.js +7 -6
- package/dist/server/assertLocalDatabase.js.map +1 -1
- package/package.json +7 -7
- package/src/server/adapters/clientConnection.ts +1 -1
- package/src/server/adapters/docker.ts +1 -1
- package/src/server/adapters/ensureConnections.ts +2 -2
- package/src/server/adapters/localContainer.ts +3 -3
- package/src/server/adapters/localSql.ts +4 -4
- package/src/server/assertLocalDatabase.ts +8 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.16.1 - 2026-11-11
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Align published dependency requirements with the workspace.
|
|
8
|
+
|
|
9
|
+
## 0.16.0 - 2026-11-07
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Allow an explicit list of ports in `assertLocalDatabase` so test configuration can accept a loopback PostgreSQL CI service while shared development setup keeps port 55432 as its default.
|
|
14
|
+
|
|
3
15
|
## 0.15.0 - 2026-11-05
|
|
4
16
|
|
|
5
17
|
### Breaking
|
package/README.md
CHANGED
|
@@ -71,6 +71,8 @@ const setup = Effect.gen(function* () {
|
|
|
71
71
|
|
|
72
72
|
`assertLocalDatabase` applies the same local-target checks and also rejects a database name outside the caller's allowlist. The fixed names above provide an independent application policy.
|
|
73
73
|
|
|
74
|
+
`assertLocalDatabase(value, names, ports)` accepts an explicit allowed-port list when validating test configuration. Repository CI and generated app tests read `TEST_DATABASE_URL` through Effect Config and validate it with ports `["55432", "5432"]`, accepting the shared development service or a loopback PostgreSQL CI service. Remote hosts and redirecting connection parameters are refused. Omitting `ports` retains the shared setup restriction to port 55432. Service preparation always retains that restriction.
|
|
75
|
+
|
|
74
76
|
### 2. Once per feature: prepare its schema in application tooling
|
|
75
77
|
|
|
76
78
|
After `prepareDatabases`, run the application's own schema or migration entry point. This package provides no schema model, migration ledger, fixture catalogue or seed convention. `@shivaedev/sql` owns the SQL and migration APIs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "effect";
|
|
2
|
+
import type { CommandOptions } from "#server/adapters/runCommand.ts";
|
|
2
3
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
|
-
import type { CommandOptions } from "./runCommand.ts";
|
|
4
4
|
export declare function clientConnection(value: URL, options?: CommandOptions): Result.Result<{
|
|
5
5
|
options: {
|
|
6
6
|
env: {
|
|
@@ -1 +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,
|
|
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,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE,cAAmB;;;;;;;;uBAiBxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientConnection.js","sourceRoot":"","sources":["../../../src/server/adapters/clientConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"clientConnection.js","sourceRoot":"","sources":["../../../src/server/adapters/clientConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,UAAU,gBAAgB,CAAC,KAAU,EAAE,OAAO,GAAmB,EAAE;IACxE,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAClC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;YAC3F,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;SAC/H,CAAC,CAAC;QACH,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;YAC3F,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;QACD,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;IAChI,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { type CommandOptions } from "#server/adapters/runCommand.ts";
|
|
2
3
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
|
-
import { type CommandOptions } from "./runCommand.ts";
|
|
4
4
|
export declare const docker: (environment: Readonly<{
|
|
5
5
|
DOCKER_CONTEXT?: string | undefined;
|
|
6
6
|
DOCKER_HOST?: string | undefined;
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,cAAc,EAAc,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,eAAO,MAAM,MAAM;;;6OA4BjB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { runCommand } from "#server/adapters/runCommand.ts";
|
|
2
3
|
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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/server/adapters/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/server/adapters/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAuB,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,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,10 +1,10 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import type { ChildProcessSpawner } from "effect/process";
|
|
3
|
+
import type { docker as localDocker } from "#server/adapters/docker.ts";
|
|
3
4
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
4
5
|
import type { PostgresCommandError } from "#server/PostgresCommandError.ts";
|
|
5
6
|
import { PostgresSettingError } from "#server/PostgresSettingError.ts";
|
|
6
7
|
import type { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
|
|
7
|
-
import type { docker as localDocker } from "./docker.ts";
|
|
8
8
|
type Query = (query: string) => Effect.Effect<string, LocalPostgresError | PostgresCommandError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
9
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
10
|
export {};
|
|
@@ -1 +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;
|
|
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,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAExE,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;AAElF,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,7 +1,7 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { POSTGRES_IMAGE } from "#server/adapters/localContainer.ts";
|
|
2
3
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
4
|
import { PostgresSettingError } from "#server/PostgresSettingError.ts";
|
|
4
|
-
import { POSTGRES_IMAGE } from "./localContainer.js";
|
|
5
5
|
export const ensureConnections = Effect.fn("LocalPostgres.ensureConnections")(function* (docker, sql, ready) {
|
|
6
6
|
yield* Effect.gen(function* () {
|
|
7
7
|
const current = Number(yield* sql("SHOW max_connections"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureConnections.js","sourceRoot":"","sources":["../../../src/server/adapters/ensureConnections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ensureConnections.js","sourceRoot":"","sources":["../../../src/server/adapters/ensureConnections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAKvE,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 type { docker as runDocker } from "#server/adapters/docker.ts";
|
|
3
|
+
import type { CommandOptions } from "#server/adapters/runCommand.ts";
|
|
2
4
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
5
|
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>;
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"localContainer.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/localContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,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 "#server/adapters/clientConnection.ts";
|
|
2
3
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
4
|
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) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localContainer.js","sourceRoot":"","sources":["../../../src/server/adapters/localContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"localContainer.js","sourceRoot":"","sources":["../../../src/server/adapters/localContainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import type { docker } from "#server/adapters/docker.ts";
|
|
3
|
+
import { type CommandOptions } from "#server/adapters/runCommand.ts";
|
|
2
4
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
|
-
import type { docker } from "./docker.ts";
|
|
4
|
-
import { type CommandOptions } from "./runCommand.ts";
|
|
5
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
6
|
//# sourceMappingURL=localSql.d.ts.map
|
|
@@ -1 +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,
|
|
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,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,gCAAgC,CAAC;AAEjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,UAAU,CAAC,OAAO,MAAM,CAAC,mNAarH"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { clientConnection } from "#server/adapters/clientConnection.ts";
|
|
3
|
+
import { sqlInContainer } from "#server/adapters/localContainer.ts";
|
|
4
|
+
import { missingCommand, runCommand } from "#server/adapters/runCommand.ts";
|
|
2
5
|
import { assertLocalDatabase } from "#server/assertLocalDatabase.ts";
|
|
3
6
|
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
7
|
export function localSql(localDocker) {
|
|
8
8
|
return Effect.fn("LocalPostgres.sql")(function* (value, query) {
|
|
9
9
|
const parsed = yield* Effect.try({ catch: () => new LocalPostgresError({ message: "Invalid local database URL." }), try: () => new URL(value) });
|
|
@@ -1 +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,
|
|
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,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAuB,cAAc,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,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,MAAM,CAAC,UAAU,CAChD,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9G,CAAC;QACF,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,4 +1,4 @@
|
|
|
1
1
|
import { Result } from "effect";
|
|
2
2
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
|
-
export declare function assertLocalDatabase(value: string, names: readonly string[]): Result.Result<import("url").URL, LocalPostgresError>;
|
|
3
|
+
export declare function assertLocalDatabase(value: string, names: readonly string[], ports?: readonly string[]): Result.Result<import("url").URL, LocalPostgresError>;
|
|
4
4
|
//# sourceMappingURL=assertLocalDatabase.d.ts.map
|
|
@@ -1 +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,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,
|
|
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,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,GAAE,SAAS,MAAM,EAAc,wDAiBhH"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Result } from "effect";
|
|
2
2
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
|
-
export function assertLocalDatabase(value, names) {
|
|
3
|
+
export function assertLocalDatabase(value, names, ports = ["55432"]) {
|
|
4
4
|
return Result.gen(function* () {
|
|
5
|
-
const message = `Use a local database on 127.0.0.1
|
|
5
|
+
const message = `Use a local database on 127.0.0.1:${ports.join(" or ")} named ${names.join(" or ")}.`;
|
|
6
6
|
const url = yield* Result.try({ catch: () => new LocalPostgresError({ message }), try: () => new URL(value) });
|
|
7
|
-
if (!(["postgres:", "postgresql:"].includes(url.protocol)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
if (!(["postgres:", "postgresql:"].includes(url.protocol)
|
|
8
|
+
&& ["localhost", "127.0.0.1"].includes(url.hostname)
|
|
9
|
+
&& ports.includes(url.port)
|
|
10
|
+
&& names.includes(url.pathname.slice(1)))
|
|
11
|
+
|| ["host", "hostaddr", "port", "dbname", "service"].some((key) => url.searchParams.has(key))) {
|
|
11
12
|
return yield* Result.fail(new LocalPostgresError({ message }));
|
|
12
13
|
}
|
|
13
14
|
return url;
|
|
@@ -1 +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,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAwB;
|
|
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,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAwB,EAAE,KAAK,GAAsB,CAAC,OAAO,CAAC;IAChH,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,OAAO,GAAG,qCAAqC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QACvG,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;QAC/G,IACC,CAAC,CACA,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;eAChD,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;eACjD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;eACxB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACxC;eACE,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,EAC5F,CAAC;YACF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/local-postgres",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
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": {
|
|
@@ -40,16 +40,16 @@
|
|
|
40
40
|
"README.md"
|
|
41
41
|
],
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@effect/platform-node": "4.1.
|
|
44
|
-
"@shivaedev/quality": "0.
|
|
45
|
-
"@shivaedev/test-story": "0.
|
|
43
|
+
"@effect/platform-node": "4.1.2",
|
|
44
|
+
"@shivaedev/quality": "0.77.0",
|
|
45
|
+
"@shivaedev/test-story": "0.47.0",
|
|
46
46
|
"@types/node": "24.19.2",
|
|
47
|
-
"effect": "4.1.
|
|
47
|
+
"effect": "4.1.2",
|
|
48
48
|
"typescript": "7.0.2",
|
|
49
|
-
"vitest": "5.0
|
|
49
|
+
"vitest": "5.1.0"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"effect": "4.1.
|
|
52
|
+
"effect": "4.1.2"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": ">=24"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "effect";
|
|
2
|
+
import type { CommandOptions } from "#server/adapters/runCommand.ts";
|
|
2
3
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
|
-
import type { CommandOptions } from "./runCommand.ts";
|
|
4
4
|
|
|
5
5
|
export function clientConnection(value: URL, options: CommandOptions = {}) {
|
|
6
6
|
return Result.gen(function* () {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { type CommandOptions, runCommand } from "#server/adapters/runCommand.ts";
|
|
2
3
|
import type { DockerEnvironment } from "#server/dockerEnvironment.ts";
|
|
3
4
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
4
|
-
import { type CommandOptions, runCommand } from "./runCommand.ts";
|
|
5
5
|
|
|
6
6
|
export const docker = Effect.fn("LocalPostgres.docker")(function* (
|
|
7
7
|
environment: DockerEnvironment,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import type { ChildProcessSpawner } from "effect/process";
|
|
3
|
+
import type { docker as localDocker } from "#server/adapters/docker.ts";
|
|
4
|
+
import { POSTGRES_IMAGE } from "#server/adapters/localContainer.ts";
|
|
3
5
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
4
6
|
import type { PostgresCommandError } from "#server/PostgresCommandError.ts";
|
|
5
7
|
import { PostgresSettingError } from "#server/PostgresSettingError.ts";
|
|
6
8
|
import type { PostgresVersionMismatch } from "#server/PostgresVersionMismatch.ts";
|
|
7
|
-
import type { docker as localDocker } from "./docker.ts";
|
|
8
|
-
import { POSTGRES_IMAGE } from "./localContainer.ts";
|
|
9
9
|
|
|
10
10
|
type Query = (query: string) => Effect.Effect<string, LocalPostgresError | PostgresCommandError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
11
11
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { clientConnection } from "#server/adapters/clientConnection.ts";
|
|
3
|
+
import type { docker as runDocker } from "#server/adapters/docker.ts";
|
|
4
|
+
import type { CommandOptions } from "#server/adapters/runCommand.ts";
|
|
2
5
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
6
|
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";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { clientConnection } from "#server/adapters/clientConnection.ts";
|
|
3
|
+
import type { docker } from "#server/adapters/docker.ts";
|
|
4
|
+
import { sqlInContainer } from "#server/adapters/localContainer.ts";
|
|
5
|
+
import { type CommandOptions, missingCommand, runCommand } from "#server/adapters/runCommand.ts";
|
|
2
6
|
import { assertLocalDatabase } from "#server/assertLocalDatabase.ts";
|
|
3
7
|
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
8
|
|
|
9
9
|
export function localSql(localDocker: (args: readonly string[], options?: CommandOptions) => ReturnType<typeof docker>) {
|
|
10
10
|
return Effect.fn("LocalPostgres.sql")(function* (value: string | URL, query: string) {
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { Result } from "effect";
|
|
2
2
|
import { LocalPostgresError } from "#server/LocalPostgresError.ts";
|
|
3
3
|
|
|
4
|
-
export function assertLocalDatabase(value: string, names: readonly string[]) {
|
|
4
|
+
export function assertLocalDatabase(value: string, names: readonly string[], ports: readonly string[] = ["55432"]) {
|
|
5
5
|
return Result.gen(function* () {
|
|
6
|
-
const message = `Use a local database on 127.0.0.1
|
|
6
|
+
const message = `Use a local database on 127.0.0.1:${ports.join(" or ")} named ${names.join(" or ")}.`;
|
|
7
7
|
const url = yield* Result.try({ catch: () => new LocalPostgresError({ message }), try: () => new URL(value) });
|
|
8
8
|
if (
|
|
9
|
-
!(
|
|
10
|
-
|
|
9
|
+
!(
|
|
10
|
+
["postgres:", "postgresql:"].includes(url.protocol)
|
|
11
|
+
&& ["localhost", "127.0.0.1"].includes(url.hostname)
|
|
12
|
+
&& ports.includes(url.port)
|
|
13
|
+
&& names.includes(url.pathname.slice(1))
|
|
14
|
+
)
|
|
11
15
|
|| ["host", "hostaddr", "port", "dbname", "service"].some((key) => url.searchParams.has(key))
|
|
12
|
-
|| !names.includes(url.pathname.slice(1))
|
|
13
16
|
) {
|
|
14
17
|
return yield* Result.fail(new LocalPostgresError({ message }));
|
|
15
18
|
}
|