turbine-orm 0.3.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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/cli/config.d.ts +58 -0
  4. package/dist/cli/config.d.ts.map +1 -0
  5. package/dist/cli/config.js +123 -0
  6. package/dist/cli/config.js.map +1 -0
  7. package/dist/cli/index.d.ts +23 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +935 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/migrate.d.ts +94 -0
  12. package/dist/cli/migrate.d.ts.map +1 -0
  13. package/dist/cli/migrate.js +383 -0
  14. package/dist/cli/migrate.js.map +1 -0
  15. package/dist/cli/ui.d.ts +74 -0
  16. package/dist/cli/ui.d.ts.map +1 -0
  17. package/dist/cli/ui.js +220 -0
  18. package/dist/cli/ui.js.map +1 -0
  19. package/dist/client.d.ts +212 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +423 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/generate.d.ts +24 -0
  24. package/dist/generate.d.ts.map +1 -0
  25. package/dist/generate.js +289 -0
  26. package/dist/generate.js.map +1 -0
  27. package/dist/index.d.ts +44 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +53 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/introspect.d.ts +22 -0
  32. package/dist/introspect.d.ts.map +1 -0
  33. package/dist/introspect.js +284 -0
  34. package/dist/introspect.js.map +1 -0
  35. package/dist/pipeline.d.ts +44 -0
  36. package/dist/pipeline.d.ts.map +1 -0
  37. package/dist/pipeline.js +69 -0
  38. package/dist/pipeline.js.map +1 -0
  39. package/dist/query.d.ts +342 -0
  40. package/dist/query.d.ts.map +1 -0
  41. package/dist/query.js +1396 -0
  42. package/dist/query.js.map +1 -0
  43. package/dist/schema-builder.d.ts +127 -0
  44. package/dist/schema-builder.d.ts.map +1 -0
  45. package/dist/schema-builder.js +164 -0
  46. package/dist/schema-builder.js.map +1 -0
  47. package/dist/schema-sql.d.ts +71 -0
  48. package/dist/schema-sql.d.ts.map +1 -0
  49. package/dist/schema-sql.js +347 -0
  50. package/dist/schema-sql.js.map +1 -0
  51. package/dist/schema.d.ts +90 -0
  52. package/dist/schema.d.ts.map +1 -0
  53. package/dist/schema.js +129 -0
  54. package/dist/schema.js.map +1 -0
  55. package/dist/serverless.d.ts +162 -0
  56. package/dist/serverless.d.ts.map +1 -0
  57. package/dist/serverless.js +195 -0
  58. package/dist/serverless.js.map +1 -0
  59. package/dist/types.d.ts +93 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +126 -0
  62. package/dist/types.js.map +1 -0
  63. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
package/dist/cli/ui.js ADDED
@@ -0,0 +1,220 @@
1
+ /**
2
+ * @batadata/turbine CLI — UI utilities
3
+ *
4
+ * ANSI colors, spinners, box-drawing, and formatting helpers.
5
+ * Zero dependencies — raw escape codes only.
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // ANSI escape codes
9
+ // ---------------------------------------------------------------------------
10
+ const isColorSupported = process.env['NO_COLOR'] == null &&
11
+ process.env['TERM'] !== 'dumb' &&
12
+ (process.stdout.isTTY ?? false);
13
+ function code(open, close) {
14
+ if (!isColorSupported)
15
+ return (s) => s;
16
+ return (s) => `\x1b[${open}m${s}\x1b[${close}m`;
17
+ }
18
+ export const bold = code('1', '22');
19
+ export const dim = code('2', '22');
20
+ export const italic = code('3', '23');
21
+ export const underline = code('4', '24');
22
+ export const red = code('31', '39');
23
+ export const green = code('32', '39');
24
+ export const yellow = code('33', '39');
25
+ export const blue = code('34', '39');
26
+ export const magenta = code('35', '39');
27
+ export const cyan = code('36', '39');
28
+ export const white = code('37', '39');
29
+ export const gray = code('90', '39');
30
+ // Bright variants
31
+ export const greenBright = code('92', '39');
32
+ export const cyanBright = code('96', '39');
33
+ export const yellowBright = code('93', '39');
34
+ export const redBright = code('91', '39');
35
+ // Background
36
+ export const bgGreen = code('42', '49');
37
+ export const bgRed = code('41', '49');
38
+ export const bgYellow = code('43', '49');
39
+ export const bgCyan = code('46', '49');
40
+ // ---------------------------------------------------------------------------
41
+ // Symbols
42
+ // ---------------------------------------------------------------------------
43
+ export const symbols = {
44
+ check: isColorSupported ? '\u2713' : 'v',
45
+ cross: isColorSupported ? '\u2717' : 'x',
46
+ bullet: isColorSupported ? '\u2022' : '*',
47
+ arrow: isColorSupported ? '\u2192' : '->',
48
+ arrowRight: isColorSupported ? '\u25B8' : '>',
49
+ info: isColorSupported ? '\u2139' : 'i',
50
+ warning: isColorSupported ? '\u26A0' : '!',
51
+ dot: isColorSupported ? '\u2219' : '.',
52
+ line: isColorSupported ? '\u2500' : '-',
53
+ vertLine: isColorSupported ? '\u2502' : '|',
54
+ topLeft: isColorSupported ? '\u256D' : '+',
55
+ topRight: isColorSupported ? '\u256E' : '+',
56
+ bottomLeft: isColorSupported ? '\u2570' : '+',
57
+ bottomRight: isColorSupported ? '\u256F' : '+',
58
+ tee: isColorSupported ? '\u251C' : '|',
59
+ teeEnd: isColorSupported ? '\u2514' : '\\',
60
+ };
61
+ // ---------------------------------------------------------------------------
62
+ // Box drawing
63
+ // ---------------------------------------------------------------------------
64
+ export function box(content, options) {
65
+ const padding = options?.padding ?? 1;
66
+ const lines = content.split('\n');
67
+ const pad = ' '.repeat(padding);
68
+ // Calculate max width (strip ANSI for measurement)
69
+ const maxWidth = Math.max(...lines.map((l) => stripAnsi(l).length), options?.title ? stripAnsi(options.title).length + 2 : 0);
70
+ const innerWidth = maxWidth + padding * 2;
71
+ const top = options?.title
72
+ ? `${symbols.topLeft}${symbols.line} ${options.title} ${symbols.line.repeat(Math.max(0, innerWidth - stripAnsi(options.title).length - 3))}${symbols.topRight}`
73
+ : `${symbols.topLeft}${symbols.line.repeat(innerWidth)}${symbols.topRight}`;
74
+ const bottom = `${symbols.bottomLeft}${symbols.line.repeat(innerWidth)}${symbols.bottomRight}`;
75
+ const body = lines.map((line) => {
76
+ const stripped = stripAnsi(line);
77
+ const rightPad = ' '.repeat(Math.max(0, maxWidth - stripped.length));
78
+ return `${symbols.vertLine}${pad}${line}${rightPad}${pad}${symbols.vertLine}`;
79
+ });
80
+ return [top, ...body, bottom].join('\n');
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Table formatting
84
+ // ---------------------------------------------------------------------------
85
+ export function table(headers, rows) {
86
+ const colWidths = headers.map((h, i) => {
87
+ const dataMax = rows.reduce((max, row) => {
88
+ const cell = row[i] ?? '';
89
+ return Math.max(max, stripAnsi(cell).length);
90
+ }, 0);
91
+ return Math.max(stripAnsi(h).length, dataMax);
92
+ });
93
+ const headerLine = headers
94
+ .map((h, i) => {
95
+ const w = colWidths[i];
96
+ return ` ${bold(h)}${' '.repeat(Math.max(0, w - stripAnsi(h).length))} `;
97
+ })
98
+ .join(dim(symbols.vertLine));
99
+ const separator = colWidths
100
+ .map((w) => symbols.line.repeat(w + 2))
101
+ .join(dim(symbols.line));
102
+ const bodyLines = rows.map((row) => row
103
+ .map((cell, i) => {
104
+ const w = colWidths[i];
105
+ return ` ${cell}${' '.repeat(Math.max(0, w - stripAnsi(cell).length))} `;
106
+ })
107
+ .join(dim(symbols.vertLine)));
108
+ return [headerLine, dim(separator), ...bodyLines].join('\n');
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Spinner (simple dots animation)
112
+ // ---------------------------------------------------------------------------
113
+ export class Spinner {
114
+ frames = [' ', '. ', '.. ', '...', ' ..', ' .'];
115
+ frameIndex = 0;
116
+ interval = null;
117
+ message;
118
+ constructor(message) {
119
+ this.message = message;
120
+ }
121
+ start() {
122
+ if (!isColorSupported || !process.stdout.isTTY) {
123
+ process.stdout.write(` ${this.message}...\n`);
124
+ return this;
125
+ }
126
+ this.interval = setInterval(() => {
127
+ const frame = this.frames[this.frameIndex % this.frames.length];
128
+ process.stdout.write(`\r ${cyan(frame)} ${this.message}`);
129
+ this.frameIndex++;
130
+ }, 120);
131
+ return this;
132
+ }
133
+ succeed(msg) {
134
+ this.stop();
135
+ const text = msg ?? this.message;
136
+ process.stdout.write(`\r ${green(symbols.check)} ${text}\n`);
137
+ }
138
+ fail(msg) {
139
+ this.stop();
140
+ const text = msg ?? this.message;
141
+ process.stdout.write(`\r ${red(symbols.cross)} ${text}\n`);
142
+ }
143
+ info(msg) {
144
+ this.stop();
145
+ const text = msg ?? this.message;
146
+ process.stdout.write(`\r ${blue(symbols.info)} ${text}\n`);
147
+ }
148
+ stop() {
149
+ if (this.interval) {
150
+ clearInterval(this.interval);
151
+ this.interval = null;
152
+ // Clear the line
153
+ if (isColorSupported && process.stdout.isTTY) {
154
+ process.stdout.write('\r\x1b[K');
155
+ }
156
+ }
157
+ }
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Logging helpers
161
+ // ---------------------------------------------------------------------------
162
+ export function header(text) {
163
+ console.log('');
164
+ console.log(` ${bold(cyan(text))}`);
165
+ console.log('');
166
+ }
167
+ export function success(msg) {
168
+ console.log(` ${green(symbols.check)} ${msg}`);
169
+ }
170
+ export function error(msg) {
171
+ console.log(` ${red(symbols.cross)} ${msg}`);
172
+ }
173
+ export function warn(msg) {
174
+ console.log(` ${yellow(symbols.warning)} ${msg}`);
175
+ }
176
+ export function info(msg) {
177
+ console.log(` ${blue(symbols.info)} ${msg}`);
178
+ }
179
+ export function label(key, value) {
180
+ console.log(` ${dim(key + ':')} ${value}`);
181
+ }
182
+ export function newline() {
183
+ console.log('');
184
+ }
185
+ export function divider() {
186
+ const width = Math.min(process.stdout.columns ?? 60, 60);
187
+ console.log(` ${dim(symbols.line.repeat(width - 4))}`);
188
+ }
189
+ // ---------------------------------------------------------------------------
190
+ // Banner
191
+ // ---------------------------------------------------------------------------
192
+ export function banner() {
193
+ console.log('');
194
+ console.log(` ${bold(cyan('turbine'))} ${dim('by')} ${bold('BataData')}`);
195
+ console.log(` ${dim('TypeScript ORM with json_agg nested queries')}`);
196
+ console.log('');
197
+ }
198
+ // ---------------------------------------------------------------------------
199
+ // Elapsed time formatting
200
+ // ---------------------------------------------------------------------------
201
+ export function elapsed(startMs) {
202
+ const ms = performance.now() - startMs;
203
+ if (ms < 1000)
204
+ return `${Math.round(ms)}ms`;
205
+ return `${(ms / 1000).toFixed(2)}s`;
206
+ }
207
+ // ---------------------------------------------------------------------------
208
+ // Strip ANSI codes (for width calculation)
209
+ // ---------------------------------------------------------------------------
210
+ export function stripAnsi(s) {
211
+ // eslint-disable-next-line no-control-regex
212
+ return s.replace(/\x1b\[[0-9;]*m/g, '');
213
+ }
214
+ // ---------------------------------------------------------------------------
215
+ // Redact password from connection URL
216
+ // ---------------------------------------------------------------------------
217
+ export function redactUrl(url) {
218
+ return url.replace(/:([^@/:]+)@/, ':***@');
219
+ }
220
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * @batadata/turbine — TurbineClient
3
+ *
4
+ * The main entry point for the Turbine TypeScript SDK.
5
+ * Manages connection pooling and provides typed table accessors.
6
+ *
7
+ * Schema-driven: call `table<T>(name)` to get a QueryInterface for any
8
+ * table in the introspected schema. Generated clients extend this with
9
+ * typed properties (e.g. `db.users`, `db.posts`).
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // With generated client (recommended):
14
+ * import { turbine } from './generated/turbine';
15
+ * const db = turbine({ connectionString: process.env.DATABASE_URL });
16
+ * const user = await db.users.findUnique({ where: { id: 1 } });
17
+ *
18
+ * // With base client (dynamic):
19
+ * import { TurbineClient } from '@batadata/turbine';
20
+ * const db = new TurbineClient({ connectionString: '...' }, schema);
21
+ * const users = db.table<User>('users');
22
+ * ```
23
+ */
24
+ import pg from 'pg';
25
+ import { QueryInterface, type DeferredQuery } from './query.js';
26
+ import { type PipelineResults } from './pipeline.js';
27
+ import type { SchemaMetadata } from './schema.js';
28
+ export interface TurbineConfig {
29
+ /** Postgres connection string (e.g. postgres://user:pass@host:5432/db) */
30
+ connectionString?: string;
31
+ /** Host (used if connectionString is not set) */
32
+ host?: string;
33
+ /** Port (default: 5432) */
34
+ port?: number;
35
+ /** Database name */
36
+ database?: string;
37
+ /** Username */
38
+ user?: string;
39
+ /** Password */
40
+ password?: string;
41
+ /** Maximum number of connections in the pool (default: 10) */
42
+ poolSize?: number;
43
+ /** Idle timeout in ms before a connection is closed (default: 30000) */
44
+ idleTimeoutMs?: number;
45
+ /** Connection timeout in ms (default: 5000) */
46
+ connectionTimeoutMs?: number;
47
+ /** Enable query logging to console (default: false) */
48
+ logging?: boolean;
49
+ }
50
+ /** Parameters passed to middleware functions */
51
+ export interface MiddlewareParams {
52
+ /** The table/model being queried (e.g. 'users') */
53
+ model: string;
54
+ /** The operation being performed (e.g. 'findUnique', 'create', 'update') */
55
+ action: string;
56
+ /** The arguments passed to the query method */
57
+ args: Record<string, unknown>;
58
+ }
59
+ /** The next function in the middleware chain */
60
+ export type MiddlewareNext = (params: MiddlewareParams) => Promise<unknown>;
61
+ /** A middleware function that intercepts queries */
62
+ export type Middleware = (params: MiddlewareParams, next: MiddlewareNext) => Promise<unknown>;
63
+ export interface TransactionOptions {
64
+ /** Timeout in ms — transaction will be rolled back if exceeded */
65
+ timeout?: number;
66
+ /** Isolation level for the transaction */
67
+ isolationLevel?: 'ReadUncommitted' | 'ReadCommitted' | 'RepeatableRead' | 'Serializable';
68
+ }
69
+ /**
70
+ * A transaction-scoped client that provides the same table accessor API as TurbineClient.
71
+ * All queries run on a dedicated connection within a BEGIN/COMMIT block.
72
+ * Supports nested transactions via SAVEPOINTs.
73
+ */
74
+ export declare class TransactionClient {
75
+ private readonly client;
76
+ readonly schema: SchemaMetadata;
77
+ private readonly middlewares;
78
+ private readonly tableCache;
79
+ private savepointCounter;
80
+ constructor(client: pg.PoolClient, schema: SchemaMetadata, middlewares: Middleware[]);
81
+ /**
82
+ * Get a QueryInterface for a table within this transaction.
83
+ * Uses the dedicated transaction connection instead of the pool.
84
+ */
85
+ table<T extends object = Record<string, unknown>>(name: string): QueryInterface<T>;
86
+ /**
87
+ * Execute a nested transaction via SAVEPOINT.
88
+ * If the inner function throws, only the savepoint is rolled back.
89
+ */
90
+ $transaction<R>(fn: (tx: TransactionClient) => Promise<R>): Promise<R>;
91
+ /**
92
+ * Execute a raw SQL query within this transaction.
93
+ */
94
+ raw<T extends Record<string, unknown> = Record<string, unknown>>(strings: TemplateStringsArray, ...values: unknown[]): Promise<T[]>;
95
+ /**
96
+ * Create a pool-like wrapper around the transaction client.
97
+ * This allows QueryInterface to work with the transaction connection
98
+ * without knowing it's in a transaction.
99
+ */
100
+ private createTxPool;
101
+ }
102
+ export declare class TurbineClient {
103
+ /** The underlying pg.Pool — exposed for escape hatches */
104
+ readonly pool: pg.Pool;
105
+ /** The schema metadata this client was built from */
106
+ readonly schema: SchemaMetadata;
107
+ private readonly logging;
108
+ private readonly tableCache;
109
+ private readonly middlewares;
110
+ constructor(config: TurbineConfig | undefined, schema: SchemaMetadata);
111
+ /**
112
+ * Register a middleware function that runs before/after every query.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * // Query timing middleware
117
+ * db.$use(async (params, next) => {
118
+ * const before = Date.now();
119
+ * const result = await next(params);
120
+ * console.log(`${params.model}.${params.action} took ${Date.now() - before}ms`);
121
+ * return result;
122
+ * });
123
+ *
124
+ * // Soft-delete middleware
125
+ * db.$use(async (params, next) => {
126
+ * if (params.action === 'findMany' || params.action === 'findUnique') {
127
+ * params.args.where = { ...params.args.where, deletedAt: null };
128
+ * }
129
+ * if (params.action === 'delete') {
130
+ * params.action = 'update';
131
+ * params.args = { where: params.args.where, data: { deletedAt: new Date() } };
132
+ * }
133
+ * return next(params);
134
+ * });
135
+ * ```
136
+ */
137
+ $use(middleware: Middleware): void;
138
+ /**
139
+ * Get a QueryInterface for a table.
140
+ * Results are cached — calling `table('users')` twice returns the same instance.
141
+ */
142
+ table<T extends object = Record<string, unknown>>(name: string): QueryInterface<T>;
143
+ /**
144
+ * Execute multiple queries in a single database round-trip.
145
+ *
146
+ * Pass the result of any `.build*()` method on a table accessor.
147
+ */
148
+ pipeline<T extends readonly DeferredQuery<unknown>[]>(...queries: T): Promise<PipelineResults<T>>;
149
+ /**
150
+ * Execute a raw SQL query with parameter interpolation via tagged templates.
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * const result = await db.raw<{ day: Date; count: number }>`
155
+ * SELECT DATE_TRUNC('day', created_at) as day, COUNT(*)::int as count
156
+ * FROM posts WHERE org_id = ${orgId}
157
+ * GROUP BY day ORDER BY day
158
+ * `;
159
+ * ```
160
+ */
161
+ raw<T extends Record<string, unknown> = Record<string, unknown>>(strings: TemplateStringsArray, ...values: unknown[]): Promise<T[]>;
162
+ /**
163
+ * Execute a function within a database transaction (raw pg.PoolClient).
164
+ * For the typed API, use `$transaction()` instead.
165
+ *
166
+ * @example
167
+ * ```ts
168
+ * await db.transaction(async (client) => {
169
+ * await client.query('INSERT INTO users (name) VALUES ($1)', ['Alice']);
170
+ * });
171
+ * ```
172
+ */
173
+ transaction<T>(fn: (client: pg.PoolClient) => Promise<T>): Promise<T>;
174
+ /**
175
+ * Execute a function within a database transaction with full typed table accessors.
176
+ *
177
+ * The `tx` object provides the same table accessor API as the main client.
178
+ * Supports nested transactions via SAVEPOINTs, timeouts, and isolation levels.
179
+ *
180
+ * @example
181
+ * ```ts
182
+ * await db.$transaction(async (tx) => {
183
+ * const user = await tx.users.create({ data: { email: 'a@b.com' } });
184
+ * await tx.posts.create({ data: { userId: user.id, title: 'Hello' } });
185
+ * });
186
+ *
187
+ * // With options:
188
+ * await db.$transaction(async (tx) => {
189
+ * // ...
190
+ * }, { timeout: 5000, isolationLevel: 'Serializable' });
191
+ * ```
192
+ */
193
+ $transaction<R>(fn: (tx: TransactionClient) => Promise<R>, options?: TransactionOptions): Promise<R>;
194
+ /**
195
+ * Test the database connection.
196
+ * Throws if the connection fails.
197
+ */
198
+ connect(): Promise<void>;
199
+ /**
200
+ * Gracefully shut down the connection pool.
201
+ */
202
+ disconnect(): Promise<void>;
203
+ /** Alias for disconnect() */
204
+ end(): Promise<void>;
205
+ /** Pool statistics for monitoring. */
206
+ get stats(): {
207
+ totalCount: number;
208
+ idleCount: number;
209
+ waitingCount: number;
210
+ };
211
+ }
212
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}