embedded-postgres-node 0.0.0-stage → 0.1.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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -2
  3. package/dist/cjs/binary.d.ts +24 -0
  4. package/dist/cjs/binary.js +168 -0
  5. package/dist/cjs/binary.js.map +1 -0
  6. package/dist/cjs/errors.d.ts +9 -0
  7. package/dist/cjs/errors.js +35 -0
  8. package/dist/cjs/errors.js.map +1 -0
  9. package/dist/cjs/index.d.ts +7 -0
  10. package/dist/cjs/index.js +13 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/lifecycle.d.ts +21 -0
  13. package/dist/cjs/lifecycle.js +209 -0
  14. package/dist/cjs/lifecycle.js.map +1 -0
  15. package/dist/cjs/options.d.ts +46 -0
  16. package/dist/cjs/options.js +79 -0
  17. package/dist/cjs/options.js.map +1 -0
  18. package/dist/cjs/package.json +1 -0
  19. package/dist/cjs/protocol.d.ts +22 -0
  20. package/dist/cjs/protocol.js +70 -0
  21. package/dist/cjs/protocol.js.map +1 -0
  22. package/dist/esm/binary.d.ts +24 -0
  23. package/dist/esm/binary.js +162 -0
  24. package/dist/esm/binary.js.map +1 -0
  25. package/dist/esm/errors.d.ts +9 -0
  26. package/dist/esm/errors.js +29 -0
  27. package/dist/esm/errors.js.map +1 -0
  28. package/dist/esm/index.d.ts +7 -0
  29. package/dist/esm/index.js +4 -0
  30. package/dist/esm/index.js.map +1 -0
  31. package/dist/esm/lifecycle.d.ts +21 -0
  32. package/dist/esm/lifecycle.js +205 -0
  33. package/dist/esm/lifecycle.js.map +1 -0
  34. package/dist/esm/options.d.ts +46 -0
  35. package/dist/esm/options.js +76 -0
  36. package/dist/esm/options.js.map +1 -0
  37. package/dist/esm/protocol.d.ts +22 -0
  38. package/dist/esm/protocol.js +66 -0
  39. package/dist/esm/protocol.js.map +1 -0
  40. package/docs/api.md +73 -0
  41. package/docs/binaries.md +50 -0
  42. package/docs/integration.md +39 -0
  43. package/docs/releasing.md +47 -0
  44. package/docs/validation.md +94 -0
  45. package/examples/jest.config.cjs +1 -0
  46. package/examples/jest.test.cjs +22 -0
  47. package/examples/migrations.mjs +17 -0
  48. package/examples/node-test.mjs +22 -0
  49. package/examples/options.mjs +6 -0
  50. package/examples/scoped.mjs +21 -0
  51. package/examples/vitest.config.mjs +2 -0
  52. package/examples/vitest.test.mjs +21 -0
  53. package/package.json +73 -4
@@ -0,0 +1,21 @@
1
+ import assert from 'node:assert/strict';
2
+ import pg from 'pg';
3
+ import { startPostgres, withPostgres } from 'embedded-postgres-node';
4
+ import { options } from './options.mjs';
5
+
6
+ // Explicit ownership works in every supported Node version.
7
+ const database = await startPostgres(options);
8
+ try {
9
+ const client = new pg.Client({ connectionString: database.connectionUrl });
10
+ try {
11
+ await client.connect();
12
+ assert.equal((await client.query('SELECT 42 AS answer')).rows[0].answer, 42);
13
+ } finally { await client.end(); }
14
+ } finally { await database.stop(); }
15
+
16
+ // Return values and errors pass through; PostgreSQL is always stopped.
17
+ await withPostgres(options, async database => {
18
+ const pool = new pg.Pool({ connectionString: database.connectionUrl });
19
+ try { assert.equal((await pool.query('SELECT 7 AS answer')).rows[0].answer, 7); }
20
+ finally { await pool.end(); }
21
+ });
@@ -0,0 +1,2 @@
1
+ import { defineConfig } from 'vitest/config';
2
+ export default defineConfig({ test: { include: ['examples/vitest.test.mjs'] } });
@@ -0,0 +1,21 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
2
+ import pg from 'pg';
3
+ import { startPostgres } from 'embedded-postgres-node';
4
+ import { options } from './options.mjs';
5
+
6
+ describe('repository (one database per suite)', () => {
7
+ let database;
8
+ let pool;
9
+ beforeAll(async () => {
10
+ database = await startPostgres(options);
11
+ pool = new pg.Pool({ connectionString: database.connectionUrl });
12
+ await pool.query('CREATE TABLE widgets (id integer PRIMARY KEY)');
13
+ }, 180000);
14
+ afterAll(async () => {
15
+ try { await pool?.end(); }
16
+ finally { await database?.stop(); }
17
+ }, 20000);
18
+ it('queries the database', async () => {
19
+ expect((await pool.query('SELECT 42 AS answer')).rows[0].answer).toBe(42);
20
+ });
21
+ });
package/package.json CHANGED
@@ -1,6 +1,75 @@
1
1
  {
2
2
  "name": "embedded-postgres-node",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Supervised, disposable PostgreSQL for Node.js tests using the embedded-postgres v2 CLI",
5
+ "license": "MIT",
6
+ "author": "Fergus Strange",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/fergusstrange/embedded-postgres-node.git"
10
+ },
11
+ "homepage": "https://github.com/fergusstrange/embedded-postgres-node#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/fergusstrange/embedded-postgres-node/issues"
14
+ },
15
+ "type": "module",
16
+ "engines": {
17
+ "node": "^22.0.0 || ^24.0.0"
18
+ },
19
+ "main": "./dist/cjs/index.js",
20
+ "types": "./dist/esm/index.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "import": {
24
+ "types": "./dist/esm/index.d.ts",
25
+ "default": "./dist/esm/index.js"
26
+ },
27
+ "require": {
28
+ "types": "./dist/cjs/index.d.ts",
29
+ "default": "./dist/cjs/index.js"
30
+ }
31
+ },
32
+ "./package.json": "./package.json"
33
+ },
34
+ "files": [
35
+ "dist/",
36
+ "README.md",
37
+ "LICENSE",
38
+ "docs/",
39
+ "examples/"
40
+ ],
41
+ "keywords": [
42
+ "postgres",
43
+ "postgresql",
44
+ "testing",
45
+ "embedded",
46
+ "vitest",
47
+ "jest"
48
+ ],
49
+ "sideEffects": false,
50
+ "publishConfig": {
51
+ "access": "public",
52
+ "tag": "latest",
53
+ "provenance": true,
54
+ "registry": "https://registry.npmjs.org"
55
+ },
56
+ "scripts": {
57
+ "build": "node scripts/build.mjs",
58
+ "test": "npm run build && node --test test/*.test.mjs",
59
+ "test:coverage": "npm run build && c8 --all --include \"dist/esm/**/*.js\" --exclude \"dist/esm/index.js\" --reporter=text --reporter=json-summary --reporter=lcov --check-coverage --per-file --lines 90 --functions 90 --branches 90 --statements 90 node --test test/*.test.mjs",
60
+ "test:integration": "npm run build && node --test test/integration/*.test.mjs",
61
+ "test:examples": "node scripts/test-examples.mjs",
62
+ "check:package": "node scripts/check-package.mjs",
63
+ "check:release": "node scripts/check-package.mjs --real",
64
+ "prepack": "npm run build",
65
+ "check": "npm run test:coverage && npm run check:package"
66
+ },
67
+ "devDependencies": {
68
+ "@types/node": "22.20.5",
69
+ "c8": "12.0.0",
70
+ "jest": "30.5.2",
71
+ "pg": "8.23.1",
72
+ "typescript": "7.0.2",
73
+ "vitest": "5.0.3"
74
+ }
75
+ }