lambda-pool 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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +291 -0
  3. package/dist/adapters/health.d.ts +30 -0
  4. package/dist/adapters/health.d.ts.map +1 -0
  5. package/dist/adapters/health.js +36 -0
  6. package/dist/adapters/health.js.map +1 -0
  7. package/dist/adapters/mysql.d.ts +40 -0
  8. package/dist/adapters/mysql.d.ts.map +1 -0
  9. package/dist/adapters/mysql.js +34 -0
  10. package/dist/adapters/mysql.js.map +1 -0
  11. package/dist/adapters/pg.d.ts +46 -0
  12. package/dist/adapters/pg.d.ts.map +1 -0
  13. package/dist/adapters/pg.js +34 -0
  14. package/dist/adapters/pg.js.map +1 -0
  15. package/dist/application/diagnostics.d.ts +33 -0
  16. package/dist/application/diagnostics.d.ts.map +1 -0
  17. package/dist/application/diagnostics.js +94 -0
  18. package/dist/application/diagnostics.js.map +1 -0
  19. package/dist/application/inspect.d.ts +20 -0
  20. package/dist/application/inspect.d.ts.map +1 -0
  21. package/dist/application/inspect.js +31 -0
  22. package/dist/application/inspect.js.map +1 -0
  23. package/dist/application/preflight.d.ts +28 -0
  24. package/dist/application/preflight.d.ts.map +1 -0
  25. package/dist/application/preflight.js +49 -0
  26. package/dist/application/preflight.js.map +1 -0
  27. package/dist/application/recommend.d.ts +22 -0
  28. package/dist/application/recommend.d.ts.map +1 -0
  29. package/dist/application/recommend.js +30 -0
  30. package/dist/application/recommend.js.map +1 -0
  31. package/dist/core/budget.d.ts +35 -0
  32. package/dist/core/budget.d.ts.map +1 -0
  33. package/dist/core/budget.js +48 -0
  34. package/dist/core/budget.js.map +1 -0
  35. package/dist/core/config.d.ts +24 -0
  36. package/dist/core/config.d.ts.map +1 -0
  37. package/dist/core/config.js +32 -0
  38. package/dist/core/config.js.map +1 -0
  39. package/dist/core/dsn.d.ts +20 -0
  40. package/dist/core/dsn.d.ts.map +1 -0
  41. package/dist/core/dsn.js +38 -0
  42. package/dist/core/dsn.js.map +1 -0
  43. package/dist/core/env.d.ts +27 -0
  44. package/dist/core/env.d.ts.map +1 -0
  45. package/dist/core/env.js +52 -0
  46. package/dist/core/env.js.map +1 -0
  47. package/dist/core/providers.d.ts +29 -0
  48. package/dist/core/providers.d.ts.map +1 -0
  49. package/dist/core/providers.js +121 -0
  50. package/dist/core/providers.js.map +1 -0
  51. package/dist/core/redact.d.ts +20 -0
  52. package/dist/core/redact.d.ts.map +1 -0
  53. package/dist/core/redact.js +63 -0
  54. package/dist/core/redact.js.map +1 -0
  55. package/dist/core/result.d.ts +16 -0
  56. package/dist/core/result.d.ts.map +1 -0
  57. package/dist/core/result.js +32 -0
  58. package/dist/core/result.js.map +1 -0
  59. package/dist/core/retry.d.ts +31 -0
  60. package/dist/core/retry.d.ts.map +1 -0
  61. package/dist/core/retry.js +67 -0
  62. package/dist/core/retry.js.map +1 -0
  63. package/dist/core/url.d.ts +38 -0
  64. package/dist/core/url.d.ts.map +1 -0
  65. package/dist/core/url.js +88 -0
  66. package/dist/core/url.js.map +1 -0
  67. package/dist/index.d.ts +17 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +35 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/presentation/bin.d.ts +3 -0
  72. package/dist/presentation/bin.d.ts.map +1 -0
  73. package/dist/presentation/bin.js +11 -0
  74. package/dist/presentation/bin.js.map +1 -0
  75. package/dist/presentation/cli.d.ts +10 -0
  76. package/dist/presentation/cli.d.ts.map +1 -0
  77. package/dist/presentation/cli.js +124 -0
  78. package/dist/presentation/cli.js.map +1 -0
  79. package/package.json +133 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/presentation/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ // Executable shim: wires real process I/O into the testable runCli().
3
+ import { runCli } from "./cli.js";
4
+ const code = await runCli({
5
+ argv: process.argv.slice(2),
6
+ env: process.env,
7
+ out: (s) => console.log(s),
8
+ err: (s) => console.error(s),
9
+ });
10
+ process.exit(code);
11
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/presentation/bin.ts"],"names":[],"mappings":";AACA,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAC;AACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface CliIo {
2
+ argv: string[];
3
+ env: NodeJS.ProcessEnv;
4
+ out: (s: string) => void;
5
+ err: (s: string) => void;
6
+ }
7
+ /** Run the CLI and return a process exit code. Pure-ish: I/O is injected. */
8
+ export declare function runCli(io: CliIo): Promise<number>;
9
+ export {};
10
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/presentation/cli.ts"],"names":[],"mappings":"AA+BA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1B;AAED,6EAA6E;AAC7E,wBAAsB,MAAM,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAiGvD"}
@@ -0,0 +1,124 @@
1
+ // CLI entry — `npx lambda-pool <command>`.
2
+ //
3
+ // Thin presentation layer over the pure core; it parses argv, reads env, calls
4
+ // the library, prints text, and sets an exit code. No business logic lives here.
5
+ import { recommendPoolLimit } from "../core/budget.js";
6
+ import { formatReport } from "../application/diagnostics.js";
7
+ import { inspectEnv } from "../application/inspect.js";
8
+ import { preflight } from "../application/preflight.js";
9
+ import { recommendForUrl } from "../application/recommend.js";
10
+ import { listProviders } from "../core/providers.js";
11
+ const HELP = `lambda-pool — serverless-safe DB pool helper
12
+
13
+ Usage:
14
+ lambda-pool inspect Lint the connection in your env for serverless safety
15
+ lambda-pool doctor Full preflight check of the connection in your env
16
+ lambda-pool recommend <url> [instances]
17
+ Recommend a pool size for a connection URL
18
+ lambda-pool budget <max> <instances> [reserved] [other]
19
+ Recommend a per-instance pool size
20
+ lambda-pool providers List recognized managed providers
21
+ lambda-pool help Show this help
22
+
23
+ Env (for "inspect"):
24
+ DATABASE_URL | MYSQL_URL | POSTGRES_URL | PG_URL connection string (required)
25
+ DATABASE_POOL_LIMIT intended pool size (default 1)
26
+ DATABASE_SSL_CA_BASE64 base64 CA cert
27
+ EXPECTED_INSTANCES peak warm instances (default 20)
28
+ `;
29
+ /** Run the CLI and return a process exit code. Pure-ish: I/O is injected. */
30
+ export async function runCli(io) {
31
+ const [cmd, ...rest] = io.argv;
32
+ switch (cmd) {
33
+ case undefined:
34
+ case "help":
35
+ case "-h":
36
+ case "--help":
37
+ io.out(HELP);
38
+ return 0;
39
+ case "inspect": {
40
+ try {
41
+ const report = inspectEnv(io.env);
42
+ io.out(formatReport(report));
43
+ // Non-zero on any warning/error so `inspect` is usable as a CI gate.
44
+ const clean = report.diagnostics.every((d) => d.severity === "info");
45
+ return clean ? 0 : 1;
46
+ }
47
+ catch (e) {
48
+ io.err(e.message);
49
+ return 2;
50
+ }
51
+ }
52
+ case "doctor": {
53
+ try {
54
+ const result = await preflight(io.env);
55
+ io.out(formatReport(result.report));
56
+ // doctor is a strict gate: any non-info diagnostic is a failure.
57
+ const clean = result.diagnostics.every((d) => d.severity === "info");
58
+ io.out(clean ? "\n✓ preflight passed" : "\n✖ preflight found issues");
59
+ return clean ? 0 : 1;
60
+ }
61
+ catch (e) {
62
+ io.err(e.message);
63
+ return 2;
64
+ }
65
+ }
66
+ case "budget": {
67
+ const [max, instances, reserved, other] = rest.map(Number);
68
+ if (!Number.isFinite(max) || !Number.isFinite(instances)) {
69
+ io.err("usage: lambda-pool budget <maxConnections> <instances> [reserved] [other]");
70
+ return 2;
71
+ }
72
+ try {
73
+ const r = recommendPoolLimit({
74
+ maxConnections: max,
75
+ expectedInstances: instances,
76
+ ...(Number.isFinite(reserved) ? { reserved: reserved } : {}),
77
+ ...(Number.isFinite(other) ? { otherClients: other } : {}),
78
+ });
79
+ io.out(`recommended pool limit: ${r.recommendedPoolLimit}`);
80
+ io.out(r.rationale);
81
+ return r.exceedsBudget ? 1 : 0;
82
+ }
83
+ catch (e) {
84
+ io.err(e.message);
85
+ return 2;
86
+ }
87
+ }
88
+ case "recommend": {
89
+ const [url, instances] = rest;
90
+ if (!url) {
91
+ io.err("usage: lambda-pool recommend <url> [instances]");
92
+ return 2;
93
+ }
94
+ try {
95
+ const r = recommendForUrl({
96
+ url,
97
+ ...(instances && Number.isFinite(Number(instances))
98
+ ? { expectedInstances: Number(instances) }
99
+ : {}),
100
+ });
101
+ io.out(`provider: ${r.provider}`);
102
+ io.out(`recommended pool limit: ${r.recommendedPoolLimit}`);
103
+ io.out(r.rationale);
104
+ if (r.poolerAdvised)
105
+ io.out("→ a connection pooler is advised.");
106
+ return r.exceedsBudget ? 1 : 0;
107
+ }
108
+ catch (e) {
109
+ io.err(e.message);
110
+ return 2;
111
+ }
112
+ }
113
+ case "providers": {
114
+ for (const p of listProviders()) {
115
+ io.out(`${p.id.padEnd(16)} max~${p.typicalMaxConnections} pooler:${p.hasPooledEndpoint ? "yes" : "no"} ${p.label}`);
116
+ }
117
+ return 0;
118
+ }
119
+ default:
120
+ io.err(`unknown command: ${cmd}\n\n${HELP}`);
121
+ return 2;
122
+ }
123
+ }
124
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/presentation/cli.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,133 @@
1
+ {
2
+ "name": "lambda-pool",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Serverless-safe connection-pool options for MySQL (mysql2) and Postgres (pg) on Vercel/Lambda with small max_connections (Aiven, Neon, RDS micro). Zero runtime dependencies.",
6
+ "author": "owlCoder",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/owlCoder/lambda-pool.git"
11
+ },
12
+ "homepage": "https://github.com/owlCoder/lambda-pool#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/owlCoder/lambda-pool/issues"
15
+ },
16
+ "engines": {
17
+ "node": ">=20"
18
+ },
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "bin": {
22
+ "lambda-pool": "dist/presentation/bin.js"
23
+ },
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js"
28
+ },
29
+ "./mysql": {
30
+ "types": "./dist/adapters/mysql.d.ts",
31
+ "import": "./dist/adapters/mysql.js"
32
+ },
33
+ "./pg": {
34
+ "types": "./dist/adapters/pg.d.ts",
35
+ "import": "./dist/adapters/pg.js"
36
+ },
37
+ "./health": {
38
+ "types": "./dist/adapters/health.d.ts",
39
+ "import": "./dist/adapters/health.js"
40
+ },
41
+ "./diagnostics": {
42
+ "types": "./dist/application/diagnostics.d.ts",
43
+ "import": "./dist/application/diagnostics.js"
44
+ },
45
+ "./inspect": {
46
+ "types": "./dist/application/inspect.d.ts",
47
+ "import": "./dist/application/inspect.js"
48
+ },
49
+ "./recommend": {
50
+ "types": "./dist/application/recommend.d.ts",
51
+ "import": "./dist/application/recommend.js"
52
+ },
53
+ "./preflight": {
54
+ "types": "./dist/application/preflight.d.ts",
55
+ "import": "./dist/application/preflight.js"
56
+ },
57
+ "./config": {
58
+ "types": "./dist/core/config.d.ts",
59
+ "import": "./dist/core/config.js"
60
+ },
61
+ "./redact": {
62
+ "types": "./dist/core/redact.d.ts",
63
+ "import": "./dist/core/redact.js"
64
+ },
65
+ "./dsn": {
66
+ "types": "./dist/core/dsn.d.ts",
67
+ "import": "./dist/core/dsn.js"
68
+ },
69
+ "./providers": {
70
+ "types": "./dist/core/providers.d.ts",
71
+ "import": "./dist/core/providers.js"
72
+ },
73
+ "./budget": {
74
+ "types": "./dist/core/budget.d.ts",
75
+ "import": "./dist/core/budget.js"
76
+ },
77
+ "./url": {
78
+ "types": "./dist/core/url.d.ts",
79
+ "import": "./dist/core/url.js"
80
+ },
81
+ "./retry": {
82
+ "types": "./dist/core/retry.d.ts",
83
+ "import": "./dist/core/retry.js"
84
+ },
85
+ "./result": {
86
+ "types": "./dist/core/result.d.ts",
87
+ "import": "./dist/core/result.js"
88
+ },
89
+ "./package.json": "./package.json"
90
+ },
91
+ "files": [
92
+ "dist",
93
+ "README.md",
94
+ "LICENSE"
95
+ ],
96
+ "scripts": {
97
+ "build": "node scripts/clean.mjs && tsc -p tsconfig.json",
98
+ "typecheck": "tsc -p tsconfig.json --noEmit",
99
+ "lint": "eslint .",
100
+ "test": "node --test --experimental-strip-types test/*.test.ts",
101
+ "test:integration": "node --test --experimental-strip-types test/integration/*.test.ts",
102
+ "check": "npm run lint && npm run typecheck && npm test",
103
+ "prepublishOnly": "npm run check",
104
+ "prepack": "npm run build"
105
+ },
106
+ "devDependencies": {
107
+ "@eslint/js": "^9.0.0",
108
+ "@types/node": "^22.0.0",
109
+ "@types/pg": "^8.11.0",
110
+ "eslint": "^9.0.0",
111
+ "mysql2": "^3.11.0",
112
+ "pg": "^8.13.0",
113
+ "typescript": "5.9.3",
114
+ "typescript-eslint": "^8.0.0"
115
+ },
116
+ "sideEffects": false,
117
+ "publishConfig": {
118
+ "access": "public"
119
+ },
120
+ "keywords": [
121
+ "serverless",
122
+ "vercel",
123
+ "lambda",
124
+ "mysql",
125
+ "mysql2",
126
+ "postgres",
127
+ "pg",
128
+ "connection-pool",
129
+ "aiven",
130
+ "neon",
131
+ "max_connections"
132
+ ]
133
+ }