@schemavaults/dbh 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,6 +10,27 @@ This package makes it easy to connect to a Postgres instance and run queries usi
10
10
  - [neon](https://neon.com/) - Serverless Postgres ([@neondatabase/serverless driver GitHub Repo](https://github.com/neondatabase/serverless))
11
11
  - [kysely-neon](https://github.com/seveibar/kysely-neon) - Kysely Dialect for using @neondatabase/serverless
12
12
 
13
+ ## Usage
14
+
15
+ While `@schemavaults/dbh` can be used in development or production, this repository also contains tools to run your postgres database locally.
16
+
17
+ ### In your docker-compose.yml
18
+
19
+ Ensure that you have both `postgres` and a `postgres-ws-proxy` containers running with Docker. For an example, see the e2e test `docker-compose.yml` file: [./tests/docker-compose.yml](./tests/docker-compose.yml)
20
+
21
+ You'll likely want to replace the `build:` sections for the services in the e2e test example `.yml` file with `image:`. For example, use `image: postgres:17.7` for the `postgres` service. For the proxy, you can pull the docker image from `ghcr.io/schemavaults/dbh/postgres-ws-proxy`; use the version number equal to your `@schemavaults/dbh` npm package installation:
22
+ ```md
23
+ # NPM Package: @schemavaults/dbh@0.7.0 => ghcr.io/schemavaults/dbh/postgres-ws-proxy:0.7.0
24
+ ```
25
+
26
+ ### In your application server code
27
+
28
+ Set up an adapter.
29
+
30
+ For an example, see the e2e test file: [./src/tests/e2e/ConnectToLocalDatabase.test.ts](./src/tests/e2e/ConnectToLocalDatabase.test.ts)
31
+
32
+ You may need to define a custom `WsProxyUrlGenerator` function to determine how the `postgres-ws-proxy` can be reached.
33
+
13
34
  ## Required Environment Variables
14
35
 
15
36
  Ensure that the following environment variables are defined:
@@ -22,3 +43,19 @@ POSTGRES_HOST=""
22
43
  POSTGRES_PORT="5432"
23
44
  POSTGRES_DATABASE=""
24
45
  ```
46
+
47
+ ## Examples / Integration Tests
48
+
49
+ See the [`tests` docker-compose.yml](./tests/docker-compose.yml) file for an example of:
50
+ - a [postgres container](./postgres/Dockerfile) (runs on port `5432`).
51
+ - a [postgres-ws-proxy container](./postgres-ws-proxy/Dockerfile); that proxies HTTP traffic to the Postgres container via custom TCP protocol (runs on port `5433`).
52
+ - a [test container](./tests/Dockerfile), that uses the `@schemavaults/dbh` package to execute test queries in this containerized database setup.
53
+
54
+ If you have [docker compose](https://docs.docker.com/compose/) installed you can use the helper script to run the tests:
55
+ ```bash
56
+ cd ./tests && /bin/bash ./run_e2e_tests.sh
57
+ ```
58
+
59
+ ## GitHub Repository
60
+
61
+ [https://github.com/schemavaults/dbh](https://github.com/schemavaults/dbh)
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { SchemaVaultsPostgresNeonProxyAdapter, SchemaVaultsPostgresNeonProxyAdapter as default, } from "./schemavaults-postgres-neon-proxy-adapter";
2
+ export type { WsProxyUrlGenerator, IGetPostgresNeonWsProxyUrlOpts, } from "./schemavaults-postgres-neon-proxy-adapter";
2
3
  export { sql } from "./sql";
3
4
  export type * from "kysely";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,oCAAoC,IAAI,OAAO,GAChD,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,oCAAoC,IAAI,OAAO,GAChD,MAAM,4CAA4C,CAAC;AAMpD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
@@ -1,18 +1,33 @@
1
1
  import { Kysely } from "kysely";
2
- import type { SchemaVaultsAppEnvironment } from "./SchemaVaultsAppEnvironment";
2
+ import { type SchemaVaultsAppEnvironment } from "./SchemaVaultsAppEnvironment";
3
+ import { type WsProxyUrlGenerator } from "./utils/getPostgresNeonWsProxyUrl";
3
4
  import type { BaseInitializablePostgresDatabaseCredentials } from "./PostgresDatabaseCredentials";
4
5
  export interface ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts {
6
+ /**
7
+ * @description SchemaVaultsAppEnvironment.
8
+ * @example 'development' 'test' 'staging' 'production'
9
+ */
5
10
  environment: SchemaVaultsAppEnvironment;
11
+ /**
12
+ * @description PostgresDatabaseCredentials.
13
+ * @default loaded from environment variables if not supplied
14
+ */
6
15
  credentials?: BaseInitializablePostgresDatabaseCredentials;
16
+ /**
17
+ * @description Pass a custom function, it will receive an object containing the 'pg_host' and 'environment' and should output the endpoint of the proxy to use
18
+ * @example given { pg_host: 'localhost', environment: 'development' } it might return => 'localhost:5433/v1'
19
+ */
20
+ wsProxyUrl?: WsProxyUrlGenerator | string;
7
21
  }
8
22
  export declare class SchemaVaultsPostgresNeonProxyAdapter<KyselyTablesType extends object> {
9
23
  private readonly kysely_db;
10
24
  private readonly env;
11
25
  private readonly debug;
12
- private static maybeStripQuotes;
13
26
  private static getPostgresNeonWsProxyUrl;
14
- constructor(opts: ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts);
27
+ private static parsePort;
28
+ constructor({ environment, ...opts }: ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts);
15
29
  get db(): Kysely<KyselyTablesType>;
16
30
  destroy(): Promise<void>;
17
31
  }
18
32
  export default SchemaVaultsPostgresNeonProxyAdapter;
33
+ export type { WsProxyUrlGenerator, IGetPostgresNeonWsProxyUrlOpts, } from "./utils/getPostgresNeonWsProxyUrl";
@@ -1,7 +1,7 @@
1
1
  // This file sets up kysely to connect to postgress
2
2
  import { NeonDialect } from "kysely-neon";
3
3
  import { Kysely } from "kysely";
4
- import maybeStripQuotes from "./utils/maybeStripQuotes";
4
+ import { isValidAppEnvironment, } from "./SchemaVaultsAppEnvironment";
5
5
  import getPostgresNeonWsProxyUrl from "./utils/getPostgresNeonWsProxyUrl";
6
6
  import isDbhInDebugMode from "./utils/isDbhInDebugMode";
7
7
  import parseDatabaseCredentialsFromEnv from "./utils/parseDatabaseCredentialsFromEnv";
@@ -10,31 +10,39 @@ export class SchemaVaultsPostgresNeonProxyAdapter {
10
10
  kysely_db;
11
11
  env;
12
12
  debug;
13
- static maybeStripQuotes(maybeQuotes) {
14
- return maybeStripQuotes(maybeQuotes);
15
- }
16
13
  static getPostgresNeonWsProxyUrl(opts) {
17
14
  return getPostgresNeonWsProxyUrl(opts);
18
15
  } // end of getPostgresNeonWsProxyUrl()
16
+ static parsePort(credentials) {
17
+ const port = typeof credentials.POSTGRES_PORT === "number"
18
+ ? credentials.POSTGRES_PORT
19
+ : Number.parseInt(credentials.POSTGRES_PORT);
20
+ if (isNaN(port)) {
21
+ throw new Error(`Invalid port number: ${credentials.POSTGRES_PORT}`);
22
+ }
23
+ return port;
24
+ }
19
25
  // Initialized from getInstance() (Singleton pattern)
20
- constructor(opts) {
21
- const environment = opts.environment;
26
+ constructor({ environment, ...opts }) {
27
+ if (!isValidAppEnvironment(environment)) {
28
+ throw new TypeError("Invalid SCHEMAVAULTS_APP_ENVIRONMENT!");
29
+ }
22
30
  this.env = environment;
23
31
  // checks if 'SCHEMAVAULTS_DBH_DEBUG="true"' is set in env vars, or defaults to yes if in dev/test/staging environment
24
- this.debug = isDbhInDebugMode(this.env);
25
- const debug = this.debug;
32
+ const debug = isDbhInDebugMode(this.env);
33
+ this.debug = debug;
26
34
  let credentials = undefined;
27
35
  if (opts.credentials) {
28
- credentials = parseDatabaseCredentials(opts.credentials, debug);
36
+ if (typeof opts.credentials !== "object") {
37
+ throw new TypeError("'credentials' is truthy but not an object!");
38
+ }
39
+ credentials = parseDatabaseCredentials(opts.credentials, this.debug);
29
40
  }
30
41
  else {
31
- credentials = parseDatabaseCredentialsFromEnv(process.env, debug);
42
+ credentials = parseDatabaseCredentialsFromEnv(process.env, this.debug);
32
43
  }
33
- const port = typeof credentials.POSTGRES_PORT === "number"
34
- ? credentials.POSTGRES_PORT
35
- : Number.parseInt(credentials.POSTGRES_PORT);
36
- if (isNaN(port)) {
37
- throw new Error(`Invalid port number: ${credentials.POSTGRES_PORT}`);
44
+ if (!credentials) {
45
+ throw new Error("Failed to parse database credentials from options or environment variables!");
38
46
  }
39
47
  const kysely_neon_dialect_config = {
40
48
  connectionString: credentials.POSTGRES_URL,
@@ -43,17 +51,45 @@ export class SchemaVaultsPostgresNeonProxyAdapter {
43
51
  password: credentials.POSTGRES_PASSWORD,
44
52
  database: credentials.POSTGRES_DATABASE,
45
53
  useSecureWebSocket: (this.env === "production"),
46
- port,
54
+ port: SchemaVaultsPostgresNeonProxyAdapter.parsePort(credentials),
47
55
  wsProxy: (pg_host) => {
48
56
  if (debug) {
49
57
  console.log(`[SchemaVaultsPostgresNeonProxyAdapter] NeonDialectConfig.wsProxy("${pg_host}")`);
50
58
  }
51
59
  // Calculate the wsProxy url from host
52
- return SchemaVaultsPostgresNeonProxyAdapter.getPostgresNeonWsProxyUrl({
53
- pg_host,
54
- environment,
55
- debug,
56
- });
60
+ let resolvedWsProxyUrl;
61
+ try {
62
+ const wsProxyUrlGeneratorSettings = {
63
+ pg_host,
64
+ environment,
65
+ debug: this.debug,
66
+ };
67
+ if (typeof opts.wsProxyUrl === "undefined" || !opts.wsProxyUrl) {
68
+ // Default ws proxy URL generator
69
+ resolvedWsProxyUrl =
70
+ SchemaVaultsPostgresNeonProxyAdapter.getPostgresNeonWsProxyUrl(wsProxyUrlGeneratorSettings);
71
+ }
72
+ else if (typeof opts.wsProxyUrl === "string" &&
73
+ opts.wsProxyUrl &&
74
+ opts.wsProxyUrl.length > 0) {
75
+ resolvedWsProxyUrl = opts.wsProxyUrl;
76
+ }
77
+ else if (typeof opts.wsProxyUrl === "function" && opts.wsProxyUrl) {
78
+ const wsProxyUrlBuilder = opts.wsProxyUrl;
79
+ resolvedWsProxyUrl = wsProxyUrlBuilder(wsProxyUrlGeneratorSettings);
80
+ }
81
+ else {
82
+ throw new Error(`Invalid wsProxy url for host: "${pg_host}". Not a string, undefined, or function!`);
83
+ }
84
+ }
85
+ catch (error) {
86
+ console.error(`[SchemaVaultsPostgresNeonProxyAdapter] NeonDialectConfig.wsProxy("${pg_host}") => Failure: `, error);
87
+ throw new Error(`Failed to calculate wsProxy url for host: "${pg_host}"`);
88
+ }
89
+ if (this.debug) {
90
+ console.log(`[SchemaVaultsPostgresNeonProxyAdapter] NeonDialectConfig.wsProxy("${pg_host}") => `, resolvedWsProxyUrl);
91
+ }
92
+ return resolvedWsProxyUrl;
57
93
  },
58
94
  };
59
95
  if (this.debug) {
@@ -1 +1 @@
1
- {"version":3,"file":"schemavaults-postgres-neon-proxy-adapter.js","sourceRoot":"","sources":["../src/schemavaults-postgres-neon-proxy-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemavaults-postgres-neon-proxy-adapter.js","sourceRoot":"","sources":["../src/schemavaults-postgres-neon-proxy-adapter.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,7 @@ export interface IGetPostgresNeonWsProxyUrlOpts {
4
4
  environment: SchemaVaultsAppEnvironment;
5
5
  debug?: boolean;
6
6
  }
7
+ export type WsProxyUrlGenerator = (opts: IGetPostgresNeonWsProxyUrlOpts) => string;
7
8
  export declare function getPostgresNeonWsProxyUrl({ pg_host, environment, ...opts }: IGetPostgresNeonWsProxyUrlOpts): string;
8
- export default getPostgresNeonWsProxyUrl;
9
+ declare const _default: typeof getPostgresNeonWsProxyUrl;
10
+ export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"getPostgresNeonWsProxyUrl.js","sourceRoot":"","sources":["../../src/utils/getPostgresNeonWsProxyUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,8BAA8B,CAAC;AAQtC,MAAM,UAAU,yBAAyB,CAAC,EACxC,OAAO,EACP,WAAW,EACX,GAAG,IAAI,EACwB;IAC/B,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,2EAA2E,WAAW,4BAA4B,EAClH,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;SAAM,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,OAAO,GAAG,WAAW,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,mBAAmB,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/D,OAAO,GAAG,mBAAmB,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,MAAM,CACZ,qBAAqB,CAAC,WAAW,CAAC,EAClC,6EAA6E,CAC9E,CAAC;IAEF,MAAM,uBAAuB,GAC3B,WAAW,KAAK,YAAY;QAC1B,CAAC,CAAE,IAA+B;QAClC,CAAC,CAAE,IAA+B,CAAC;IAEvC,MAAM,4BAA4B,GAAY,WAAW,KAAK,YAAY,CAAC;IAC3E,MAAM,gBAAgB,GAAY,4BAA4B,CAAC;IAE/D,MAAM,sBAAsB,GAC1B,GAAG,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,uBAAuB,EAA4B,CAAC;IAEtG,OAAO,CAAC,MAAM,CACZ,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC;QACzC,CAAC,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC9C,6FAA6F,CAC9F,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,0DAA0D,EAC1D,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"getPostgresNeonWsProxyUrl.js","sourceRoot":"","sources":["../../src/utils/getPostgresNeonWsProxyUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,8BAA8B,CAAC;AAYtC,MAAM,UAAU,yBAAyB,CAAC,EACxC,OAAO,EACP,WAAW,EACX,GAAG,IAAI,EACwB;IAC/B,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,2EAA2E,WAAW,4BAA4B,EAClH,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;SAAM,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,OAAO,GAAG,WAAW,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,mBAAmB,CAAC;QAChC,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/D,OAAO,GAAG,mBAAmB,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,MAAM,CACZ,qBAAqB,CAAC,WAAW,CAAC,EAClC,6EAA6E,CAC9E,CAAC;IAEF,MAAM,uBAAuB,GAC3B,WAAW,KAAK,YAAY;QAC1B,CAAC,CAAE,IAA+B;QAClC,CAAC,CAAE,IAA+B,CAAC;IAEvC,MAAM,4BAA4B,GAAY,WAAW,KAAK,YAAY,CAAC;IAC3E,MAAM,gBAAgB,GAAY,4BAA4B,CAAC;IAE/D,MAAM,sBAAsB,GAC1B,GAAG,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,uBAAuB,EAA4B,CAAC;IAEtG,OAAO,CAAC,MAAM,CACZ,CAAC,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC;QACzC,CAAC,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC9C,6FAA6F,CAC9F,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CACT,0DAA0D,EAC1D,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,eAAe,yBAAuD,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import type { BaseInitializablePostgresDatabaseCredentials, PostgresDatabaseCredentials } from "../PostgresDatabaseCredentials";
2
- declare function parseDatabaseCredentials(minimum_credentials: Partial<PostgresDatabaseCredentials> & BaseInitializablePostgresDatabaseCredentials, debug?: boolean): PostgresDatabaseCredentials;
2
+ declare function parseDatabaseCredentials(minimum_credentials: Record<string, boolean | string | number | undefined> | BaseInitializablePostgresDatabaseCredentials, debug?: boolean): PostgresDatabaseCredentials;
3
3
  export default parseDatabaseCredentials;
@@ -1,22 +1,44 @@
1
1
  import maybeStripQuotes from "../utils/maybeStripQuotes";
2
2
  import buildPostgresUrl from "./buildPostgresUrl";
3
3
  function parseDatabaseCredentials(minimum_credentials, debug = false) {
4
- const POSTGRES_URL_NON_POOLING = maybeStripQuotes(minimum_credentials.POSTGRES_URL_NON_POOLING);
4
+ if (typeof minimum_credentials !== "object") {
5
+ throw new Error("Did not receive an object to parse database credentials from!");
6
+ }
7
+ if (
8
+ // ensure there are no strange types in the (probably process.env) object
9
+ Object.values(minimum_credentials).some((value) => typeof value !== "string" &&
10
+ typeof value !== "undefined" &&
11
+ typeof value !== "number" &&
12
+ typeof value !== "boolean")) {
13
+ const invalidTypes = new Set(Object.values(minimum_credentials).map((value) => typeof value));
14
+ invalidTypes.delete("undefined");
15
+ invalidTypes.delete("string");
16
+ invalidTypes.delete("number");
17
+ invalidTypes.delete("boolean");
18
+ throw new TypeError("Received invalid database credentials; " +
19
+ "expected only strings or undefined in values object provided to parse credentials from. " +
20
+ `Received invalid types: ${Array.from(invalidTypes).join(", ")}`);
21
+ }
22
+ const POSTGRES_URL_NON_POOLING = maybeStripQuotes(typeof minimum_credentials.POSTGRES_URL_NON_POOLING === "string"
23
+ ? minimum_credentials.POSTGRES_URL_NON_POOLING
24
+ : undefined);
5
25
  if (!POSTGRES_URL_NON_POOLING) {
6
26
  console.warn("POSTGRES_URL_NON_POOLING is not set in environment variables!");
7
27
  }
8
28
  else {
9
29
  if (debug) {
10
- console.log(`[SchemaVaultsPostgresNeonProxyAdapter] Using postgres no-pooling connection url POSTGRES_URL_NON_POOLING: \"${POSTGRES_URL_NON_POOLING}\"`);
30
+ console.log(`[SchemaVaultsPostgresNeonProxyAdapter] Using postgres no-pooling connection url POSTGRES_URL_NON_POOLING: "${POSTGRES_URL_NON_POOLING}"`);
11
31
  }
12
32
  }
13
- const POSTGRES_HOST = maybeStripQuotes(minimum_credentials.POSTGRES_HOST);
33
+ const POSTGRES_HOST = maybeStripQuotes(typeof minimum_credentials.POSTGRES_HOST === "string"
34
+ ? minimum_credentials.POSTGRES_HOST
35
+ : undefined);
14
36
  if (!POSTGRES_HOST) {
15
37
  throw new Error("POSTGRES_HOST is not set in environment variables!");
16
38
  }
17
39
  else {
18
40
  if (debug) {
19
- console.log(`[SchemaVaultsPostgresNeonProxyAdapter] Using database POSTGRES_HOST: \"${POSTGRES_HOST}\"`);
41
+ console.log(`[SchemaVaultsPostgresNeonProxyAdapter] Using database POSTGRES_HOST: "${POSTGRES_HOST}"`);
20
42
  }
21
43
  }
22
44
  let POSTGRES_PORT = 5432;
@@ -27,15 +49,21 @@ function parseDatabaseCredentials(minimum_credentials, debug = false) {
27
49
  if (typeof POSTGRES_PORT !== "number" || isNaN(POSTGRES_PORT)) {
28
50
  throw new Error("Failed to load POSTGRES_PORT from environment variables! NaN error!");
29
51
  }
30
- const POSTGRES_DATABASE = maybeStripQuotes(minimum_credentials.POSTGRES_DATABASE);
52
+ const POSTGRES_DATABASE = maybeStripQuotes(typeof minimum_credentials.POSTGRES_DATABASE === "string"
53
+ ? minimum_credentials.POSTGRES_DATABASE
54
+ : undefined);
31
55
  if (!POSTGRES_DATABASE) {
32
56
  throw new Error("Failed to load database name from POSTGRES_DATABASE environment variable!");
33
57
  }
34
- const POSTGRES_USER = maybeStripQuotes(minimum_credentials.POSTGRES_USER);
58
+ const POSTGRES_USER = maybeStripQuotes(typeof minimum_credentials.POSTGRES_USER === "string"
59
+ ? minimum_credentials.POSTGRES_USER
60
+ : undefined);
35
61
  if (!POSTGRES_USER) {
36
62
  throw new Error("POSTGRES_USER is not defined in environment variables!");
37
63
  }
38
- const POSTGRES_PASSWORD = maybeStripQuotes(minimum_credentials.POSTGRES_PASSWORD);
64
+ const POSTGRES_PASSWORD = maybeStripQuotes(typeof minimum_credentials.POSTGRES_PASSWORD === "string"
65
+ ? minimum_credentials.POSTGRES_PASSWORD
66
+ : undefined);
39
67
  if (!POSTGRES_PASSWORD) {
40
68
  throw new Error("POSTGRES_PASSWORD is not defined in environment variables!");
41
69
  }
@@ -57,7 +85,7 @@ function parseDatabaseCredentials(minimum_credentials, debug = false) {
57
85
  throw new Error("Failed to load POSTGRES_URL from environment variables, or to construct it from other environment variables!");
58
86
  }
59
87
  if (debug) {
60
- console.log(`[SchemaVaultsPostgresNeonProxyAdapter] Using postgres connection url POSTGRES_URL: \"${POSTGRES_URL}\"`);
88
+ console.log(`[SchemaVaultsPostgresNeonProxyAdapter] Using postgres connection url POSTGRES_URL: "${POSTGRES_URL}"`);
61
89
  }
62
90
  return {
63
91
  POSTGRES_USER,
@@ -1 +1 @@
1
- {"version":3,"file":"parseDatabaseCredentials.js","sourceRoot":"","sources":["../../src/utils/parseDatabaseCredentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseDatabaseCredentials.js","sourceRoot":"","sources":["../../src/utils/parseDatabaseCredentials.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { PostgresDatabaseCredentials } from "../PostgresDatabaseCredentials";
2
- export declare function parseDatabaseCredentialsFromEnv(env: NodeJS.ProcessEnv, debug?: boolean): PostgresDatabaseCredentials;
2
+ export declare function parseDatabaseCredentialsFromEnv(env: Record<string, string | undefined>, debug?: boolean): PostgresDatabaseCredentials;
3
3
  export default parseDatabaseCredentialsFromEnv;
@@ -1,6 +1,6 @@
1
1
  import parseDatabaseCredentials from "./parseDatabaseCredentials";
2
2
  export function parseDatabaseCredentialsFromEnv(env, debug = false) {
3
- return parseDatabaseCredentials(process.env, debug);
3
+ return parseDatabaseCredentials(env, debug);
4
4
  }
5
5
  export default parseDatabaseCredentialsFromEnv;
6
6
  //# sourceMappingURL=parseDatabaseCredentialsFromEnv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseDatabaseCredentialsFromEnv.js","sourceRoot":"","sources":["../../src/utils/parseDatabaseCredentialsFromEnv.ts"],"names":[],"mappings":"AAEA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,MAAM,UAAU,+BAA+B,CAC7C,GAAsB,EACtB,QAAiB,KAAK;IAEtB,OAAO,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,eAAe,+BAA+B,CAAC"}
1
+ {"version":3,"file":"parseDatabaseCredentialsFromEnv.js","sourceRoot":"","sources":["../../src/utils/parseDatabaseCredentialsFromEnv.ts"],"names":[],"mappings":"AACA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,MAAM,UAAU,+BAA+B,CAC7C,GAAuC,EACvC,QAAiB,KAAK;IAEtB,OAAO,wBAAwB,CAC7B,GAAgD,EAChD,KAAK,CACN,CAAC;AACJ,CAAC;AAED,eAAe,+BAA+B,CAAC"}
@@ -0,0 +1,54 @@
1
+ // @schemavaults/dbh - eslint.config.cjs
2
+
3
+ const js = require("@eslint/js");
4
+ const tsParser = require("@typescript-eslint/parser");
5
+ const tsPlugin = require("@typescript-eslint/eslint-plugin");
6
+ const globals = require("globals");
7
+
8
+ module.exports = [
9
+ // Base recommended configs
10
+ js.configs.recommended,
11
+
12
+ // Main config
13
+ {
14
+ files: ["src/**/*.{ts,tsx,js,jsx}"],
15
+
16
+ languageOptions: {
17
+ parser: tsParser,
18
+ parserOptions: {
19
+ ecmaVersion: "latest",
20
+ sourceType: "module",
21
+ ecmaFeatures: {
22
+ jsx: false,
23
+ },
24
+ project: "./tsconfig.json",
25
+ },
26
+ globals: {
27
+ ...globals.browser,
28
+ ...globals.es2021,
29
+ ...globals.node,
30
+ },
31
+ },
32
+
33
+ plugins: {
34
+ "@typescript-eslint": tsPlugin,
35
+ },
36
+
37
+ rules: {
38
+ // TypeScript recommended rules
39
+ ...tsPlugin.configs.recommended.rules,
40
+
41
+ "@typescript-eslint/no-unused-vars": [
42
+ "warn",
43
+ { argsIgnorePattern: "^_" },
44
+ ],
45
+ "@typescript-eslint/no-explicit-any": "warn",
46
+ "@typescript-eslint/no-namespace": "off",
47
+ },
48
+ },
49
+
50
+ // Ignore patterns
51
+ {
52
+ ignores: ["dist/**", "node_modules/**", "*.config.js", "*.config.cjs"],
53
+ },
54
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemavaults/dbh",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "Easily connect to PostgresDB from serverless environment",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -16,7 +16,12 @@
16
16
  "devDependencies": {
17
17
  "typescript": "5.9.3",
18
18
  "bun-types": "1.3.3",
19
- "tsc-alias": "1.8.16"
19
+ "tsc-alias": "1.8.16",
20
+ "eslint": "9.39.1",
21
+ "@eslint/js": "9.39.1",
22
+ "globals": "16.5.0",
23
+ "@typescript-eslint/eslint-plugin": "8.48.1",
24
+ "@typescript-eslint/parser": "8.48.1"
20
25
  },
21
26
  "scripts": {
22
27
  "build": "tsc --project tsconfig.json && tsc-alias --project tsconfig.json",
@@ -27,7 +32,8 @@
27
32
  "cleanup:rm_tests_dir": "rm -rf ./dist/tests",
28
33
  "cleanup": "bun run cleanup:compiled_tests_in_dist_directory",
29
34
  "postbuild": "bun run cleanup",
30
- "version": "bun run ./scripts/package_version.ts"
35
+ "version": "bun run ./scripts/package_version.ts",
36
+ "lint": "eslint src"
31
37
  },
32
38
  "main": "dist/index.js",
33
39
  "module": "dist/index.js",