@schemavaults/dbh 0.8.7 → 0.10.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 (51) hide show
  1. package/.claude/hooks/install-deps-in-fresh-environment.sh +5 -0
  2. package/.claude/settings.json +15 -0
  3. package/README.md +5 -5
  4. package/dist/adapters/abstract-schemavaults-dbh-adapter.d.ts +28 -0
  5. package/dist/adapters/abstract-schemavaults-dbh-adapter.js +50 -0
  6. package/dist/adapters/abstract-schemavaults-dbh-adapter.js.map +1 -0
  7. package/dist/adapters/schemavaults-postgres-adapter.d.ts +11 -0
  8. package/dist/adapters/schemavaults-postgres-adapter.js +31 -0
  9. package/dist/adapters/schemavaults-postgres-adapter.js.map +1 -0
  10. package/dist/adapters/schemavaults-postgres-neon-proxy-adapter.d.ts +18 -0
  11. package/dist/{schemavaults-postgres-neon-proxy-adapter.js → adapters/schemavaults-postgres-neon-proxy-adapter.js} +17 -63
  12. package/dist/adapters/schemavaults-postgres-neon-proxy-adapter.js.map +1 -0
  13. package/dist/create-dbh.d.ts +67 -0
  14. package/dist/create-dbh.js +17 -0
  15. package/dist/create-dbh.js.map +1 -0
  16. package/dist/index.d.ts +4 -2
  17. package/dist/index.js +7 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/migrate.d.ts +1 -1
  20. package/dist/migrate.js +1 -1
  21. package/dist/migrate.js.map +1 -1
  22. package/dist/types/IDatabaseHandler.d.ts +5 -0
  23. package/dist/types/IDatabaseHandler.js +2 -0
  24. package/dist/types/IDatabaseHandler.js.map +1 -0
  25. package/dist/types/PostgresDatabaseCredentials.js.map +1 -0
  26. package/dist/types/SchemaVaultsAppEnvironment.js.map +1 -0
  27. package/dist/utils/buildPostgresUrl.d.ts +1 -1
  28. package/dist/utils/getAppEnvironment.d.ts +1 -1
  29. package/dist/utils/getAppEnvironment.js +1 -1
  30. package/dist/utils/getAppEnvironment.js.map +1 -1
  31. package/dist/utils/getPostgresNeonWsProxyUrl.d.ts +1 -1
  32. package/dist/utils/getPostgresNeonWsProxyUrl.js +1 -1
  33. package/dist/utils/getPostgresNeonWsProxyUrl.js.map +1 -1
  34. package/dist/utils/isDbhInDebugMode.d.ts +2 -2
  35. package/dist/utils/parseDatabaseCredentials.d.ts +1 -1
  36. package/dist/utils/parseDatabaseCredentialsFromEnv.d.ts +1 -1
  37. package/dist/utils/parsePort.d.ts +1 -0
  38. package/dist/utils/parsePort.js +21 -0
  39. package/dist/utils/parsePort.js.map +1 -0
  40. package/dist-cli/build-db-migrations.js +8 -8
  41. package/dist-cli/cli.js +24 -24
  42. package/eslint.config.cjs +3 -1
  43. package/package.json +8 -6
  44. package/dist/PostgresDatabaseCredentials.js.map +0 -1
  45. package/dist/SchemaVaultsAppEnvironment.js.map +0 -1
  46. package/dist/schemavaults-postgres-neon-proxy-adapter.d.ts +0 -33
  47. package/dist/schemavaults-postgres-neon-proxy-adapter.js.map +0 -1
  48. /package/dist/{PostgresDatabaseCredentials.d.ts → types/PostgresDatabaseCredentials.d.ts} +0 -0
  49. /package/dist/{PostgresDatabaseCredentials.js → types/PostgresDatabaseCredentials.js} +0 -0
  50. /package/dist/{SchemaVaultsAppEnvironment.d.ts → types/SchemaVaultsAppEnvironment.d.ts} +0 -0
  51. /package/dist/{SchemaVaultsAppEnvironment.js → types/SchemaVaultsAppEnvironment.js} +0 -0
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ if [ ! -d "node_modules" ]; then
3
+ echo "No node_modules/ folder appears to exist so we're going to install dependencies..."
4
+ bun install
5
+ fi
@@ -0,0 +1,15 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": ".claude/hooks/install-deps-in-fresh-environment.sh"
10
+ }
11
+ ]
12
+ }
13
+ ]
14
+ }
15
+ }
package/README.md CHANGED
@@ -20,12 +20,12 @@ Ensure that you have both `postgres` and a `postgres-ws-proxy` containers runnin
20
20
 
21
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
22
  ```md
23
- # NPM Package: @schemavaults/dbh@0.8.7 => ghcr.io/schemavaults/dbh/postgres-ws-proxy:0.8.7
23
+ # NPM Package: @schemavaults/dbh@0.10.0 => ghcr.io/schemavaults/dbh/postgres-ws-proxy:0.10.0
24
24
  ```
25
25
 
26
26
  ### In your application server code
27
27
 
28
- Set up an adapter.
28
+ Set up an adapter based on your requirements (whether you need serverless/edge access to the database or whether using a standard ).
29
29
 
30
30
  For an example, see the e2e test file: [./src/tests/e2e/ConnectToLocalDatabase.test.ts](./src/tests/e2e/ConnectToLocalDatabase.test.ts)
31
31
 
@@ -44,13 +44,13 @@ npx @schemavaults/dbh --help
44
44
  ```bash
45
45
  mkdir ./tests/tmp
46
46
 
47
- # compile TypeScript Kysely migrations to JavaScript
48
- npx @schemavaults/dbh build-db-migrations ./src/tests/example-migrations \
47
+ # compile TypeScript Kysely migrations to JavaScript (Bun is used for building migrations)
48
+ bunx @schemavaults/dbh build-db-migrations ./src/tests/example-migrations \
49
49
  --outdir ./tests/tmp/example-compiled-migrations \
50
50
  --sql-module ./src/sql.ts \
51
51
  --sql-outdir ./tests/tmp/
52
52
 
53
- # apply built migrations to database
53
+ # apply built migrations to database (NodeJS is used for applying migrations)
54
54
  npx @schemavaults/dbh migrate ./tests/tmp/example-compiled-migrations --environment production --env-file ./.env.production
55
55
 
56
56
  rm -rf ./tests/tmp
@@ -0,0 +1,28 @@
1
+ import type { BaseInitializablePostgresDatabaseCredentials, PostgresDatabaseCredentials } from "../types/PostgresDatabaseCredentials";
2
+ import { IDatabaseHandler } from "../types/IDatabaseHandler";
3
+ import { type SchemaVaultsAppEnvironment } from "../types/SchemaVaultsAppEnvironment";
4
+ import type { Dialect } from "kysely";
5
+ import { Kysely } from "kysely";
6
+ export interface IAbstractSchemaVaultsDbhAdapterConstructorOpts {
7
+ /**
8
+ * @description SchemaVaultsAppEnvironment.
9
+ * @example 'development' 'test' 'staging' 'production'
10
+ */
11
+ environment: SchemaVaultsAppEnvironment;
12
+ /**
13
+ * @description PostgresDatabaseCredentials.
14
+ * @default loaded from environment variables if not supplied
15
+ */
16
+ credentials?: BaseInitializablePostgresDatabaseCredentials;
17
+ }
18
+ export default abstract class AbstractSchemaVaultsDbhAdapter<KyselyTablesType extends object, TConstructorOpts extends IAbstractSchemaVaultsDbhAdapterConstructorOpts = IAbstractSchemaVaultsDbhAdapterConstructorOpts> implements IDatabaseHandler<KyselyTablesType> {
19
+ protected readonly credentials: PostgresDatabaseCredentials;
20
+ protected readonly kysely_db: Kysely<KyselyTablesType>;
21
+ protected readonly env: SchemaVaultsAppEnvironment;
22
+ protected readonly debug: boolean;
23
+ constructor(opts: TConstructorOpts);
24
+ protected abstract initializeDbDialect(opts: Omit<TConstructorOpts, "credentials" | "environment">): Dialect;
25
+ get db(): Kysely<KyselyTablesType>;
26
+ destroy(): Promise<void>;
27
+ [Symbol.asyncDispose](): Promise<void>;
28
+ }
@@ -0,0 +1,50 @@
1
+ import { isValidAppEnvironment, } from "../types/SchemaVaultsAppEnvironment";
2
+ import isDbhInDebugMode from "../utils/isDbhInDebugMode";
3
+ import parseDatabaseCredentials from "../utils/parseDatabaseCredentials";
4
+ import parseDatabaseCredentialsFromEnv from "../utils/parseDatabaseCredentialsFromEnv";
5
+ import { Kysely } from "kysely";
6
+ export default class AbstractSchemaVaultsDbhAdapter {
7
+ credentials;
8
+ kysely_db;
9
+ env;
10
+ debug;
11
+ constructor(opts) {
12
+ // parse SCHEMAVAULTS_APP_ENVIRONMENT
13
+ if (!isValidAppEnvironment(opts.environment)) {
14
+ throw new TypeError("Invalid SCHEMAVAULTS_APP_ENVIRONMENT!");
15
+ }
16
+ this.env = opts.environment;
17
+ // checks if 'SCHEMAVAULTS_DBH_DEBUG="true"' is set in env vars, or defaults to yes if in dev/test/staging environment
18
+ this.debug = isDbhInDebugMode(this.env);
19
+ let credentials = undefined;
20
+ if (opts.credentials) {
21
+ if (typeof opts.credentials !== "object") {
22
+ throw new TypeError("'credentials' is truthy but not an object!");
23
+ }
24
+ credentials = parseDatabaseCredentials(opts.credentials, this.debug);
25
+ }
26
+ else {
27
+ credentials = parseDatabaseCredentialsFromEnv(process.env, this.debug);
28
+ }
29
+ if (!credentials) {
30
+ throw new Error("Failed to parse database credentials from options or environment variables!");
31
+ }
32
+ this.credentials = credentials;
33
+ const dialect = this.initializeDbDialect(opts);
34
+ const kysely_configuration = {
35
+ dialect,
36
+ log: ["query", "error"],
37
+ };
38
+ this.kysely_db = new Kysely(kysely_configuration);
39
+ }
40
+ get db() {
41
+ return this.kysely_db;
42
+ }
43
+ async destroy() {
44
+ return await this.kysely_db.destroy();
45
+ }
46
+ async [Symbol.asyncDispose]() {
47
+ return await this.destroy();
48
+ }
49
+ }
50
+ //# sourceMappingURL=abstract-schemavaults-dbh-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-schemavaults-dbh-adapter.js","sourceRoot":"","sources":["../../src/adapters/abstract-schemavaults-dbh-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,qBAAqB,GAEtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,gBAAgB,MAAM,0BAA0B,CAAC;AACxD,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,+BAA+B,MAAM,yCAAyC,CAAC;AAEtF,OAAO,EAAE,MAAM,EAAqB,MAAM,QAAQ,CAAC;AAgBnD,MAAM,CAAC,OAAO,OAAgB,8BAA8B;IAKvC,WAAW,CAA8B;IACzC,SAAS,CAA2B;IACpC,GAAG,CAA6B;IAChC,KAAK,CAAU;IAElC,YAAmB,IAAsB;QACvC,qCAAqC;QACrC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAgD,CAAC;QAEjE,sHAAsH;QACtH,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,WAAW,GAA4C,SAAS,CAAC;QACrE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACzC,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;YACpE,CAAC;YACD,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,+BAA+B,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,OAAO,GAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAExD,MAAM,oBAAoB,GAAiB;YACzC,OAAO;YACP,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;SACxB,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAmB,oBAAoB,CAAC,CAAC;IACtE,CAAC;IAMD,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAChC,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { IDatabaseHandler } from "../types/IDatabaseHandler";
2
+ import type { IAbstractSchemaVaultsDbhAdapterConstructorOpts } from "../adapters/abstract-schemavaults-dbh-adapter";
3
+ import AbstractSchemaVaultsDbhAdapter from "../adapters/abstract-schemavaults-dbh-adapter";
4
+ import { type Dialect } from "kysely";
5
+ export interface ISchemaVaultsPostgresAdapterConstructorOpts extends IAbstractSchemaVaultsDbhAdapterConstructorOpts {
6
+ }
7
+ export declare class SchemaVaultsPostgresAdapter<KyselyTablesType extends object> extends AbstractSchemaVaultsDbhAdapter<KyselyTablesType, ISchemaVaultsPostgresAdapterConstructorOpts> implements IDatabaseHandler<KyselyTablesType> {
8
+ protected initializeDbDialect(): Dialect;
9
+ constructor(opts: ISchemaVaultsPostgresAdapterConstructorOpts);
10
+ }
11
+ export default SchemaVaultsPostgresAdapter;
@@ -0,0 +1,31 @@
1
+ // schemavaults-postgres-adapter.ts
2
+ // This file sets up kysely to connect to postgres
3
+ import parsePort from "../utils/parsePort";
4
+ import AbstractSchemaVaultsDbhAdapter from "../adapters/abstract-schemavaults-dbh-adapter";
5
+ import { PostgresDialect, } from "kysely";
6
+ import { Pool } from "pg";
7
+ export class SchemaVaultsPostgresAdapter extends AbstractSchemaVaultsDbhAdapter {
8
+ initializeDbDialect() {
9
+ const credentials = this.credentials;
10
+ const postgres_dialect_conig = {
11
+ pool: async () => new Pool({
12
+ database: credentials.POSTGRES_DATABASE,
13
+ host: credentials.POSTGRES_HOST,
14
+ user: credentials.POSTGRES_USER,
15
+ password: credentials.POSTGRES_PASSWORD,
16
+ port: parsePort(credentials.POSTGRES_PORT),
17
+ connectionString: credentials.POSTGRES_URL,
18
+ }),
19
+ };
20
+ const dialect = new PostgresDialect(postgres_dialect_conig);
21
+ return dialect;
22
+ }
23
+ constructor(opts) {
24
+ super(opts);
25
+ if (this.debug) {
26
+ console.log("[SchemaVaultsPostgresNeonProxyAdapter] Initialized SchemaVaults x Kysely x Neon database adapter in environment: ", this.env);
27
+ }
28
+ }
29
+ }
30
+ export default SchemaVaultsPostgresAdapter;
31
+ //# sourceMappingURL=schemavaults-postgres-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemavaults-postgres-adapter.js","sourceRoot":"","sources":["../../src/adapters/schemavaults-postgres-adapter.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,kDAAkD;AAGlD,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,8BAA8B,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EACL,eAAe,GAGhB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI1B,MAAM,OAAO,2BACX,SAAQ,8BAGP;IAGS,mBAAmB;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,sBAAsB,GAA0B;YACpD,IAAI,EAAE,KAAK,IAAI,EAAE,CACf,IAAI,IAAI,CAAC;gBACP,QAAQ,EAAE,WAAW,CAAC,iBAAkC;gBACxD,IAAI,EAAE,WAAW,CAAC,aAA8B;gBAChD,IAAI,EAAE,WAAW,CAAC,aAA8B;gBAChD,QAAQ,EAAE,WAAW,CAAC,iBAAkC;gBACxD,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,aAAa,CAAkB;gBAC3D,gBAAgB,EAAE,WAAW,CAAC,YAA6B;aAC5D,CAAC;SACL,CAAC;QAEF,MAAM,OAAO,GAAY,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;QACrE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAmB,IAAiD;QAClE,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,mHAAmH,EACnH,IAAI,CAAC,GAAG,CACT,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,eAAe,2BAA2B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type WsProxyUrlGenerator } from "../utils/getPostgresNeonWsProxyUrl";
2
+ import type { IDatabaseHandler } from "../types/IDatabaseHandler";
3
+ import type { IAbstractSchemaVaultsDbhAdapterConstructorOpts } from "../adapters/abstract-schemavaults-dbh-adapter";
4
+ import AbstractSchemaVaultsDbhAdapter from "../adapters/abstract-schemavaults-dbh-adapter";
5
+ import type { Dialect } from "kysely";
6
+ export interface ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts extends IAbstractSchemaVaultsDbhAdapterConstructorOpts {
7
+ /**
8
+ * @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
9
+ * @example given { pg_host: 'localhost', environment: 'development' } it might return => 'localhost:5433/v1'
10
+ */
11
+ wsProxyUrl?: WsProxyUrlGenerator | string;
12
+ }
13
+ export declare class SchemaVaultsPostgresNeonProxyAdapter<KyselyTablesType extends object> extends AbstractSchemaVaultsDbhAdapter<KyselyTablesType, ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts> implements IDatabaseHandler<KyselyTablesType> {
14
+ protected initializeDbDialect(opts: Omit<ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts, "credentials">): Dialect;
15
+ constructor(opts: ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts);
16
+ }
17
+ export default SchemaVaultsPostgresNeonProxyAdapter;
18
+ export type { WsProxyUrlGenerator, IGetPostgresNeonWsProxyUrlOpts, } from "../utils/getPostgresNeonWsProxyUrl";
@@ -1,49 +1,15 @@
1
- // This file sets up kysely to connect to postgress
1
+ // schemavaults-postgres-neon-proxy-adapter.ts
2
+ // This file sets up kysely to connect to postgres via a Neon websocket proxy
3
+ // (allows database usage from a serverless/edge environment)
2
4
  import { NeonDialect } from "kysely-neon";
3
- import { Kysely } from "kysely";
4
- import { isValidAppEnvironment, } from "./SchemaVaultsAppEnvironment";
5
- import getPostgresNeonWsProxyUrl from "./utils/getPostgresNeonWsProxyUrl";
6
- import isDbhInDebugMode from "./utils/isDbhInDebugMode";
7
- import parseDatabaseCredentialsFromEnv from "./utils/parseDatabaseCredentialsFromEnv";
8
- import parseDatabaseCredentials from "./utils/parseDatabaseCredentials";
9
- export class SchemaVaultsPostgresNeonProxyAdapter {
10
- kysely_db;
11
- env;
12
- debug;
13
- static getPostgresNeonWsProxyUrl(opts) {
14
- return getPostgresNeonWsProxyUrl(opts);
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
- }
25
- // Initialized from getInstance() (Singleton pattern)
26
- constructor({ environment, ...opts }) {
27
- if (!isValidAppEnvironment(environment)) {
28
- throw new TypeError("Invalid SCHEMAVAULTS_APP_ENVIRONMENT!");
29
- }
30
- this.env = environment;
31
- // checks if 'SCHEMAVAULTS_DBH_DEBUG="true"' is set in env vars, or defaults to yes if in dev/test/staging environment
32
- const debug = isDbhInDebugMode(this.env);
33
- this.debug = debug;
34
- let credentials = undefined;
35
- if (opts.credentials) {
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);
40
- }
41
- else {
42
- credentials = parseDatabaseCredentialsFromEnv(process.env, this.debug);
43
- }
44
- if (!credentials) {
45
- throw new Error("Failed to parse database credentials from options or environment variables!");
46
- }
5
+ import getPostgresNeonWsProxyUrl from "../utils/getPostgresNeonWsProxyUrl";
6
+ import parsePort from "../utils/parsePort";
7
+ import AbstractSchemaVaultsDbhAdapter from "../adapters/abstract-schemavaults-dbh-adapter";
8
+ export class SchemaVaultsPostgresNeonProxyAdapter extends AbstractSchemaVaultsDbhAdapter {
9
+ initializeDbDialect(opts) {
10
+ const debug = this.debug;
11
+ const environment = this.env;
12
+ const credentials = this.credentials;
47
13
  const kysely_neon_dialect_config = {
48
14
  connectionString: credentials.POSTGRES_URL,
49
15
  host: credentials.POSTGRES_HOST,
@@ -51,7 +17,7 @@ export class SchemaVaultsPostgresNeonProxyAdapter {
51
17
  password: credentials.POSTGRES_PASSWORD,
52
18
  database: credentials.POSTGRES_DATABASE,
53
19
  useSecureWebSocket: (this.env === "production"),
54
- port: SchemaVaultsPostgresNeonProxyAdapter.parsePort(credentials),
20
+ port: parsePort(credentials.POSTGRES_PORT),
55
21
  wsProxy: (pg_host) => {
56
22
  if (debug) {
57
23
  console.log(`[SchemaVaultsPostgresNeonProxyAdapter] NeonDialectConfig.wsProxy("${pg_host}")`);
@@ -66,8 +32,7 @@ export class SchemaVaultsPostgresNeonProxyAdapter {
66
32
  };
67
33
  if (typeof opts.wsProxyUrl === "undefined" || !opts.wsProxyUrl) {
68
34
  // Default ws proxy URL generator
69
- resolvedWsProxyUrl =
70
- SchemaVaultsPostgresNeonProxyAdapter.getPostgresNeonWsProxyUrl(wsProxyUrlGeneratorSettings);
35
+ resolvedWsProxyUrl = getPostgresNeonWsProxyUrl(wsProxyUrlGeneratorSettings);
71
36
  }
72
37
  else if (typeof opts.wsProxyUrl === "string" &&
73
38
  opts.wsProxyUrl &&
@@ -99,26 +64,15 @@ export class SchemaVaultsPostgresNeonProxyAdapter {
99
64
  if (this.debug) {
100
65
  console.log("[SchemaVaultsPostgresNeonProxyAdapter] Kysely Neon DB adapter configuration: ", kysely_neon_dialect_config);
101
66
  }
102
- if (this.debug) {
103
- console.log("[SchemaVaultsPostgresNeonProxyAdapter] Initializing SchemaVaults x Kysely x Neon database adapter...");
104
- }
105
67
  const dialect = new NeonDialect(kysely_neon_dialect_config);
106
- const kysely_configuration = {
107
- dialect,
108
- log: ["query", "error"],
109
- };
110
- this.kysely_db = new Kysely(kysely_configuration);
68
+ return dialect;
69
+ }
70
+ constructor(opts) {
71
+ super(opts);
111
72
  if (this.debug) {
112
73
  console.log("[SchemaVaultsPostgresNeonProxyAdapter] Initialized SchemaVaults x Kysely x Neon database adapter in environment: ", this.env);
113
74
  }
114
75
  }
115
- get db() {
116
- return this.kysely_db;
117
- }
118
- async destroy() {
119
- await this.kysely_db.destroy();
120
- return;
121
- }
122
76
  }
123
77
  export default SchemaVaultsPostgresNeonProxyAdapter;
124
78
  //# sourceMappingURL=schemavaults-postgres-neon-proxy-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemavaults-postgres-neon-proxy-adapter.js","sourceRoot":"","sources":["../../src/adapters/schemavaults-postgres-neon-proxy-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { SchemaVaultsPostgresAdapter, ISchemaVaultsPostgresAdapterConstructorOpts } from "./adapters/schemavaults-postgres-adapter";
2
+ import type { SchemaVaultsPostgresNeonProxyAdapter, ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts } from "./adapters/schemavaults-postgres-neon-proxy-adapter";
3
+ /**
4
+ * Asynchronously construct a SchemaVaults database handler for the given
5
+ * adapter type, dynamically importing only the adapter that was requested.
6
+ *
7
+ * The returned instance implements `Symbol.asyncDispose`, so it is designed
8
+ * to be used with TC39 explicit-resource-management (`await using`) — the
9
+ * underlying Kysely connection pool is destroyed automatically when the
10
+ * binding goes out of scope.
11
+ *
12
+ * @template KyselyTablesType - The Kysely table-types interface describing
13
+ * the schema of the target database.
14
+ *
15
+ * @param adapter_type - Discriminator selecting which adapter to instantiate:
16
+ * - `"postgres"` — direct Postgres connection via `pg` Pool.
17
+ * - `"postgres-neon-proxy"` — Postgres connection tunneled through a
18
+ * Neon-compatible WebSocket proxy (serverless/edge-friendly).
19
+ * @param opts - Adapter-specific constructor options. The shape is narrowed
20
+ * per-overload to match the chosen `adapter_type`.
21
+ *
22
+ * @returns A Promise resolving to a ready-to-use adapter instance whose
23
+ * concrete type is narrowed per-overload.
24
+ *
25
+ * @example Direct Postgres connection
26
+ * ```ts
27
+ * import createDbh from "@schemavaults/dbh/create-dbh";
28
+ * import type { DB } from "./db-types";
29
+ *
30
+ * await using dbh = await createDbh<DB>("postgres", {
31
+ * environment: "development",
32
+ * });
33
+ * const users = await dbh.db.selectFrom("users").selectAll().execute();
34
+ * ```
35
+ *
36
+ * @example Neon WebSocket proxy with custom proxy URL
37
+ * ```ts
38
+ * await using dbh = await createDbh<DB>("postgres-neon-proxy", {
39
+ * environment: "production",
40
+ * wsProxyUrl: ({ pg_host }) => `wss://proxy.example.com/${pg_host}/v1`,
41
+ * });
42
+ * ```
43
+ *
44
+ * @example Explicit credentials instead of process.env
45
+ * ```ts
46
+ * await using dbh = await createDbh<DB>("postgres", {
47
+ * environment: "test",
48
+ * credentials: {
49
+ * POSTGRES_HOST: "localhost",
50
+ * POSTGRES_PORT: "5432",
51
+ * POSTGRES_USER: "postgres",
52
+ * POSTGRES_PASSWORD: "postgres",
53
+ * POSTGRES_DATABASE: "schemavaults_test",
54
+ * },
55
+ * });
56
+ * ```
57
+ *
58
+ * @see {@link SchemaVaultsPostgresAdapter} — adapter loaded when
59
+ * `adapter_type === "postgres"`.
60
+ * @see {@link SchemaVaultsPostgresNeonProxyAdapter} — adapter loaded when
61
+ * `adapter_type === "postgres-neon-proxy"`.
62
+ */
63
+ export default function createDbh<KyselyTablesType extends object>(adapter_type: "postgres", opts: ISchemaVaultsPostgresAdapterConstructorOpts): Promise<SchemaVaultsPostgresAdapter<KyselyTablesType>>;
64
+ /**
65
+ * @see {@link SchemaVaultsPostgresNeonProxyAdapter}
66
+ */
67
+ export default function createDbh<KyselyTablesType extends object>(adapter_type: "postgres-neon-proxy", opts: ISchemaVaultsPostgresNeonProxyAdapterConstructorOpts): Promise<SchemaVaultsPostgresNeonProxyAdapter<KyselyTablesType>>;
@@ -0,0 +1,17 @@
1
+ // create-dbh.ts
2
+ const ADAPTER_MAP = {
3
+ postgres: async () => await import("./adapters/schemavaults-postgres-adapter").then((mod) => mod.SchemaVaultsPostgresAdapter),
4
+ "postgres-neon-proxy": async () => await import("./adapters/schemavaults-postgres-neon-proxy-adapter").then((mod) => mod.SchemaVaultsPostgresNeonProxyAdapter),
5
+ };
6
+ export default async function createDbh(adapter_type, opts) {
7
+ if (typeof adapter_type !== "string") {
8
+ throw new TypeError(`Invalid adapter type '${typeof adapter_type}'`);
9
+ }
10
+ const adapter_loader = ADAPTER_MAP[adapter_type];
11
+ if (typeof adapter_loader !== "function") {
12
+ throw new TypeError(`Failed to load database adapter loader for type '${adapter_type}'`);
13
+ }
14
+ const AdapterClass = (await adapter_loader());
15
+ return new AdapterClass(opts);
16
+ }
17
+ //# sourceMappingURL=create-dbh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dbh.js","sourceRoot":"","sources":["../src/create-dbh.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAahB,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,CACnB,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC,IAAI,CAC3D,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,2BAA2B,CACzC;IACH,qBAAqB,EAAE,KAAK,IAAI,EAAE,CAChC,MAAM,MAAM,CAAC,qDAAqD,CAAC,CAAC,IAAI,CACtE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,oCAAoC,CAClD;CACK,CAAC;AA2EX,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CACrC,YAAwB,EACxB,IAAoD;IAEpD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,yBAAyB,OAAO,YAAY,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CACjB,oDAAoD,YAAY,GAAG,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,MAAM,cAAc,EAAE,CAEL,CAAC;IACxC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- export { SchemaVaultsPostgresNeonProxyAdapter, SchemaVaultsPostgresNeonProxyAdapter as default, } from "./schemavaults-postgres-neon-proxy-adapter";
2
- export type { WsProxyUrlGenerator, IGetPostgresNeonWsProxyUrlOpts, } from "./schemavaults-postgres-neon-proxy-adapter";
1
+ export { default as default, default as createDbh } from "./create-dbh";
2
+ export { SchemaVaultsPostgresNeonProxyAdapter } from "./adapters/schemavaults-postgres-neon-proxy-adapter";
3
+ export type { WsProxyUrlGenerator, IGetPostgresNeonWsProxyUrlOpts, } from "./adapters/schemavaults-postgres-neon-proxy-adapter";
4
+ export { SchemaVaultsPostgresAdapter } from "./adapters/schemavaults-postgres-adapter";
3
5
  export { sql } from "./sql";
4
6
  export type * from "kysely";
package/dist/index.js CHANGED
@@ -1,3 +1,9 @@
1
- export { SchemaVaultsPostgresNeonProxyAdapter, SchemaVaultsPostgresNeonProxyAdapter as default, } from "./schemavaults-postgres-neon-proxy-adapter";
1
+ // index.ts
2
+ export { default as default, default as createDbh } from "./create-dbh";
3
+ // Postgres Neon Proxy Adapter (for use in serverless environments)
4
+ export { SchemaVaultsPostgresNeonProxyAdapter } from "./adapters/schemavaults-postgres-neon-proxy-adapter";
5
+ // Postgres Adapter (for use in standard Node.js environments)
6
+ export { SchemaVaultsPostgresAdapter } from "./adapters/schemavaults-postgres-adapter";
7
+ // Kysely SQL builder + types
2
8
  export { sql } from "./sql";
3
9
  //# sourceMappingURL=index.js.map
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;AAMpD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AAEX,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AAExE,mEAAmE;AACnE,OAAO,EAAE,oCAAoC,EAAE,MAAM,qDAAqD,CAAC;AAM3G,8DAA8D;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAEvF,6BAA6B;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC"}
package/dist/migrate.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Kysely } from "kysely";
1
+ import type { Kysely } from "kysely";
2
2
  export interface IMigrationResult {
3
3
  migrationName: string;
4
4
  status: "Success" | "Error" | "NotExecuted";
package/dist/migrate.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // migrate.ts
2
- import { Migrator, FileMigrationProvider, } from "kysely";
2
+ import { Migrator, FileMigrationProvider, } from "kysely/migration";
3
3
  import fs from "fs/promises";
4
4
  import path from "path";
5
5
  import { existsSync } from "fs";
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA,aAAa;AAGb,OAAO,EACL,QAAQ,EACR,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAoBhC,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE,eAAe,EAAmB;IAC9D,OAAO,IAAI,QAAQ,CAAC;QAClB,EAAE,EAAE,EAAE;QACN,QAAQ,EAAE,IAAI,qBAAqB,CAAC;YAClC,EAAE;YACF,IAAI;YACJ,eAAe;SAChB,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CACpC,gBAAyB;IAEzB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IACD,IACE,CAAC,CAAC,eAAe,IAAI,gBAAgB,CAAC;QACtC,OAAO,gBAAgB,CAAC,aAAa,KAAK,QAAQ,EAClD,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,6DAA6D,CAC9D,CAAC;IACJ,CAAC;SAAM,IACL,CAAC,CAAC,WAAW,IAAI,gBAAgB,CAAC;QAClC,OAAO,gBAAgB,CAAC,SAAS,KAAK,QAAQ,EAC9C,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,yDAAyD,CAC1D,CAAC;IACJ,CAAC;SAAM,IACL,CAAC,CAAC,QAAQ,IAAI,gBAAgB,CAAC;QAC/B,OAAO,gBAAgB,CAAC,MAAM,KAAK,QAAQ,EAC3C,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC9E,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CACjB,uEAAuE,CACxE,CAAC;IACJ,CAAC;SAAM,IACL,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACtE,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,8BAA8B,CACrC,OAA2B;IAE3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,gBAAgB,IAAI,OAAO,EAAE,CAAC;QACvC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAC5B,EAAE,EACF,eAAe,EACf,GAAG,IAAI,EACS;IAChB,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,oBAAoB,eAAe,kBAAkB,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IAEzD,IAAI,MAA0B,CAAC;IAC/B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAClC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CACjB,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,OAA6C,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAC5B,EAAE,EACF,eAAe,EACf,OAAO,GACS;IAChB,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,oBAAoB,eAAe,kBAAkB,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IAEzD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CACjB,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,eAAe,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Kysely } from "kysely";
2
+ export interface IDatabaseHandler<KyselyTablesType extends object> extends AsyncDisposable {
3
+ destroy(): Promise<void>;
4
+ db: Kysely<KyselyTablesType>;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IDatabaseHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IDatabaseHandler.js","sourceRoot":"","sources":["../../src/types/IDatabaseHandler.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresDatabaseCredentials.js","sourceRoot":"","sources":["../../src/types/PostgresDatabaseCredentials.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaVaultsAppEnvironment.js","sourceRoot":"","sources":["../../src/types/SchemaVaultsAppEnvironment.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { BaseInitializablePostgresDatabaseCredentials } from "../PostgresDatabaseCredentials";
1
+ import type { BaseInitializablePostgresDatabaseCredentials } from "../types/PostgresDatabaseCredentials";
2
2
  declare function buildPostgresUrl(opts: Pick<BaseInitializablePostgresDatabaseCredentials, "POSTGRES_HOST" | "POSTGRES_PORT" | "POSTGRES_USER" | "POSTGRES_PASSWORD" | "POSTGRES_DATABASE">): string;
3
3
  export default buildPostgresUrl;
@@ -1,3 +1,3 @@
1
- import { type SchemaVaultsAppEnvironment } from "../SchemaVaultsAppEnvironment";
1
+ import { type SchemaVaultsAppEnvironment } from "../types/SchemaVaultsAppEnvironment";
2
2
  export declare function getAppEnvironment(): SchemaVaultsAppEnvironment;
3
3
  export default getAppEnvironment;
@@ -1,4 +1,4 @@
1
- import { isValidAppEnvironment } from "../SchemaVaultsAppEnvironment";
1
+ import { isValidAppEnvironment, } from "../types/SchemaVaultsAppEnvironment";
2
2
  export function getAppEnvironment() {
3
3
  const env = process.env["SCHEMAVAULTS_APP_ENVIRONMENT"];
4
4
  if (isValidAppEnvironment(env)) {
@@ -1 +1 @@
1
- {"version":3,"file":"getAppEnvironment.js","sourceRoot":"","sources":["../../src/utils/getAppEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAmC,MAAM,8BAA8B,CAAC;AAEtG,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACxD,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,YAAY,CAAC,CAAC,8CAA8C;AACrE,CAAC;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"getAppEnvironment.js","sourceRoot":"","sources":["../../src/utils/getAppEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACxD,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,YAAY,CAAC,CAAC,8CAA8C;AACrE,CAAC;AAED,eAAe,iBAAiB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type SchemaVaultsAppEnvironment } from "../SchemaVaultsAppEnvironment";
1
+ import { type SchemaVaultsAppEnvironment } from "../types/SchemaVaultsAppEnvironment";
2
2
  export interface IGetPostgresNeonWsProxyUrlOpts {
3
3
  pg_host: string;
4
4
  environment: SchemaVaultsAppEnvironment;
@@ -1,4 +1,4 @@
1
- import { isValidAppEnvironment, } from "../SchemaVaultsAppEnvironment";
1
+ import { isValidAppEnvironment, } from "../types/SchemaVaultsAppEnvironment";
2
2
  export function getPostgresNeonWsProxyUrl({ pg_host, environment, ...opts }) {
3
3
  const debug = opts.debug ?? false;
4
4
  if (debug) {
@@ -1 +1 @@
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
+ {"version":3,"file":"getPostgresNeonWsProxyUrl.js","sourceRoot":"","sources":["../../src/utils/getPostgresNeonWsProxyUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,oCAAoC,CAAC;AAY5C,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,8 +1,8 @@
1
- import type { SchemaVaultsAppEnvironment } from "../SchemaVaultsAppEnvironment";
1
+ import type { SchemaVaultsAppEnvironment } from "../types/SchemaVaultsAppEnvironment";
2
2
  declare global {
3
3
  namespace NodeJS {
4
4
  interface ProcessEnv {
5
- SCHEMAVAULTS_DBH_DEBUG?: 'true' | 'false';
5
+ SCHEMAVAULTS_DBH_DEBUG?: "true" | "false";
6
6
  }
7
7
  }
8
8
  }
@@ -1,3 +1,3 @@
1
- import type { BaseInitializablePostgresDatabaseCredentials, PostgresDatabaseCredentials } from "../PostgresDatabaseCredentials";
1
+ import type { BaseInitializablePostgresDatabaseCredentials, PostgresDatabaseCredentials } from "../types/PostgresDatabaseCredentials";
2
2
  declare function parseDatabaseCredentials(minimum_credentials: Record<string, boolean | string | number | undefined> | BaseInitializablePostgresDatabaseCredentials, debug?: boolean): PostgresDatabaseCredentials;
3
3
  export default parseDatabaseCredentials;
@@ -1,3 +1,3 @@
1
- import type { PostgresDatabaseCredentials } from "../PostgresDatabaseCredentials";
1
+ import type { PostgresDatabaseCredentials } from "../types/PostgresDatabaseCredentials";
2
2
  export declare function parseDatabaseCredentialsFromEnv(env: Record<string, string | undefined>, debug?: boolean): PostgresDatabaseCredentials;
3
3
  export default parseDatabaseCredentialsFromEnv;
@@ -0,0 +1 @@
1
+ export default function parsePort(val: string | number): number;
@@ -0,0 +1,21 @@
1
+ function isValidPort(val) {
2
+ return (!isNaN(val) && Number.isInteger(val) && Number.isFinite(val) && val > 0);
3
+ }
4
+ export default function parsePort(val) {
5
+ if (typeof val === "number") {
6
+ if (isValidPort(val)) {
7
+ return val;
8
+ }
9
+ }
10
+ else if (typeof val === "string") {
11
+ const parsed = Number.parseInt(val);
12
+ if (isValidPort(parsed)) {
13
+ return parsed;
14
+ }
15
+ }
16
+ else {
17
+ throw new TypeError(`Unexpected type for value to parse port number from: '${typeof val}'`);
18
+ }
19
+ throw new TypeError("Failed to parse port number for database configuration!");
20
+ }
21
+ //# sourceMappingURL=parsePort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsePort.js","sourceRoot":"","sources":["../../src/utils/parsePort.ts"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,CACL,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CACxE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,GAAoB;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CACjB,yDAAyD,OAAO,GAAG,GAAG,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,SAAS,CACjB,yDAAyD,CAC1D,CAAC;AACJ,CAAC"}