turbine-orm 0.3.1 → 0.4.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/dist/cli/config.js +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/ui.js +1 -1
- package/dist/client.d.ts +2 -2
- package/dist/client.js +2 -2
- package/dist/generate.d.ts +1 -1
- package/dist/generate.js +6 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/introspect.d.ts +1 -1
- package/dist/introspect.js +1 -1
- package/dist/pipeline.d.ts +1 -1
- package/dist/pipeline.js +1 -1
- package/dist/query.d.ts +9 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +105 -9
- package/dist/schema-builder.d.ts +2 -2
- package/dist/schema-builder.js +2 -2
- package/dist/schema-sql.d.ts +1 -1
- package/dist/schema-sql.js +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +1 -1
- package/dist/serverless.d.ts +3 -3
- package/dist/serverless.js +4 -4
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/package.json +4 -5
package/dist/cli/config.js
CHANGED
|
@@ -92,7 +92,7 @@ export function configTemplate(connectionString) {
|
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
94
|
* Turbine configuration
|
|
95
|
-
* @see https://
|
|
95
|
+
* @see https://github.com/zvndev/turbine-orm
|
|
96
96
|
*/
|
|
97
97
|
const config: TurbineCliConfig = {
|
|
98
98
|
/** Postgres connection string */
|
package/dist/cli/index.js
CHANGED
|
@@ -231,7 +231,7 @@ async function cmdInit(args, config) {
|
|
|
231
231
|
* Define your database schema in TypeScript.
|
|
232
232
|
* Use \`npx turbine push\` to sync it to your database.
|
|
233
233
|
*
|
|
234
|
-
* @see https://
|
|
234
|
+
* @see https://github.com/zvndev/turbine-orm
|
|
235
235
|
*/
|
|
236
236
|
|
|
237
237
|
import { defineSchema } from 'turbine-orm';
|
|
@@ -768,7 +768,7 @@ async function cmdStudio(_args, _config) {
|
|
|
768
768
|
'A local web UI for browsing your database,',
|
|
769
769
|
'exploring relations, and managing data.',
|
|
770
770
|
'',
|
|
771
|
-
`Follow ${cyan('@
|
|
771
|
+
`Follow ${cyan('@zvndev')} for updates.`,
|
|
772
772
|
].join('\n'), { title: bold(cyan('Studio')), padding: 2 }));
|
|
773
773
|
newline();
|
|
774
774
|
}
|
package/dist/cli/ui.js
CHANGED
|
@@ -191,7 +191,7 @@ export function divider() {
|
|
|
191
191
|
// ---------------------------------------------------------------------------
|
|
192
192
|
export function banner() {
|
|
193
193
|
console.log('');
|
|
194
|
-
console.log(` ${bold(cyan('
|
|
194
|
+
console.log(` ${bold(cyan('Turbine ORM'))}`);
|
|
195
195
|
console.log(` ${dim('TypeScript ORM with json_agg nested queries')}`);
|
|
196
196
|
console.log('');
|
|
197
197
|
}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — TurbineClient
|
|
3
3
|
*
|
|
4
4
|
* The main entry point for the Turbine TypeScript SDK.
|
|
5
5
|
* Manages connection pooling and provides typed table accessors.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* const user = await db.users.findUnique({ where: { id: 1 } });
|
|
17
17
|
*
|
|
18
18
|
* // With base client (dynamic):
|
|
19
|
-
* import { TurbineClient } from '
|
|
19
|
+
* import { TurbineClient } from 'turbine-orm';
|
|
20
20
|
* const db = new TurbineClient({ connectionString: '...' }, schema);
|
|
21
21
|
* const users = db.table<User>('users');
|
|
22
22
|
* ```
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — TurbineClient
|
|
3
3
|
*
|
|
4
4
|
* The main entry point for the Turbine TypeScript SDK.
|
|
5
5
|
* Manages connection pooling and provides typed table accessors.
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* const user = await db.users.findUnique({ where: { id: 1 } });
|
|
17
17
|
*
|
|
18
18
|
* // With base client (dynamic):
|
|
19
|
-
* import { TurbineClient } from '
|
|
19
|
+
* import { TurbineClient } from 'turbine-orm';
|
|
20
20
|
* const db = new TurbineClient({ connectionString: '...' }, schema);
|
|
21
21
|
* const users = db.table<User>('users');
|
|
22
22
|
* ```
|
package/dist/generate.d.ts
CHANGED
package/dist/generate.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — Code generator
|
|
3
3
|
*
|
|
4
4
|
* Takes an IntrospectedSchema and emits TypeScript files:
|
|
5
5
|
* - types.ts — Entity interfaces, Create/Update input types
|
|
@@ -46,10 +46,10 @@ export function generate(options) {
|
|
|
46
46
|
function generatedFileHeader() {
|
|
47
47
|
return [
|
|
48
48
|
'/**',
|
|
49
|
-
' * Auto-generated by
|
|
49
|
+
' * Auto-generated by turbine-orm — DO NOT EDIT',
|
|
50
50
|
' *',
|
|
51
51
|
` * Generated at: ${new Date().toISOString()}`,
|
|
52
|
-
' * @see https://
|
|
52
|
+
' * @see https://github.com/zvndev/turbine-orm',
|
|
53
53
|
' */',
|
|
54
54
|
'',
|
|
55
55
|
];
|
|
@@ -136,7 +136,7 @@ function generateTypes(schema) {
|
|
|
136
136
|
function generateMetadata(schema) {
|
|
137
137
|
const lines = [
|
|
138
138
|
...generatedFileHeader(),
|
|
139
|
-
"import type { SchemaMetadata } from '
|
|
139
|
+
"import type { SchemaMetadata } from 'turbine-orm';",
|
|
140
140
|
'',
|
|
141
141
|
'export const SCHEMA: SchemaMetadata = {',
|
|
142
142
|
' tables: {',
|
|
@@ -209,8 +209,8 @@ function generateIndex(schema) {
|
|
|
209
209
|
const tableEntries = Object.values(schema.tables);
|
|
210
210
|
const lines = [
|
|
211
211
|
...generatedFileHeader(),
|
|
212
|
-
"import { TurbineClient as BaseTurbineClient, QueryInterface } from '
|
|
213
|
-
"import type { TurbineConfig } from '
|
|
212
|
+
"import { TurbineClient as BaseTurbineClient, QueryInterface } from 'turbine-orm';",
|
|
213
|
+
"import type { TurbineConfig } from 'turbine-orm';",
|
|
214
214
|
"import { SCHEMA } from './metadata.js';",
|
|
215
215
|
];
|
|
216
216
|
// Import all entity types
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/introspect.d.ts
CHANGED
package/dist/introspect.js
CHANGED
package/dist/pipeline.d.ts
CHANGED
package/dist/pipeline.js
CHANGED
package/dist/query.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — Query builder
|
|
3
3
|
*
|
|
4
4
|
* Each table accessor (db.users, db.posts, etc.) returns a QueryInterface<T>
|
|
5
5
|
* that builds parameterized SQL and executes it through the connection pool.
|
|
@@ -219,6 +219,7 @@ export declare class QueryInterface<T extends object> {
|
|
|
219
219
|
/** SQL template cache: cacheKey → sql string (params are always positional $1,$2,...) */
|
|
220
220
|
private readonly sqlCache;
|
|
221
221
|
private readonly middlewares;
|
|
222
|
+
private readonly hasNoDateColumns;
|
|
222
223
|
constructor(pool: pg.Pool, table: string, schema: SchemaMetadata, middlewares?: MiddlewareFn[]);
|
|
223
224
|
/**
|
|
224
225
|
* Execute a query through the middleware chain.
|
|
@@ -304,6 +305,13 @@ export declare class QueryInterface<T extends object> {
|
|
|
304
305
|
private buildOrderBy;
|
|
305
306
|
/** Parse a flat row: convert snake_case to camelCase + Date coercion */
|
|
306
307
|
private parseRow;
|
|
308
|
+
/**
|
|
309
|
+
* Fast path: parse a flat row when the table has NO date columns.
|
|
310
|
+
* Only renames snake_case -> camelCase via the pre-computed reverseMap.
|
|
311
|
+
* Skips all date coercion checks — avoids Set.has() per field per row.
|
|
312
|
+
* Used by findUnique/findMany fast paths when hasNoDateColumns is true.
|
|
313
|
+
*/
|
|
314
|
+
private parseRowFast;
|
|
307
315
|
/** Parse a row that may contain JSON nested relation columns */
|
|
308
316
|
private parseNestedRow;
|
|
309
317
|
/**
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/query.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — Query builder
|
|
3
3
|
*
|
|
4
4
|
* Each table accessor (db.users, db.posts, etc.) returns a QueryInterface<T>
|
|
5
5
|
* that builds parameterized SQL and executes it through the connection pool.
|
|
@@ -74,6 +74,9 @@ export class QueryInterface {
|
|
|
74
74
|
/** SQL template cache: cacheKey → sql string (params are always positional $1,$2,...) */
|
|
75
75
|
sqlCache = new Map();
|
|
76
76
|
middlewares;
|
|
77
|
+
// Fast path: pre-computed flag — true when this table has zero date/timestamp columns.
|
|
78
|
+
// When true, parseRow can skip the per-field dateCols.has() check entirely.
|
|
79
|
+
hasNoDateColumns;
|
|
77
80
|
constructor(pool, table, schema, middlewares) {
|
|
78
81
|
this.pool = pool;
|
|
79
82
|
this.table = table;
|
|
@@ -84,6 +87,7 @@ export class QueryInterface {
|
|
|
84
87
|
}
|
|
85
88
|
this.tableMeta = meta;
|
|
86
89
|
this.middlewares = middlewares ?? [];
|
|
90
|
+
this.hasNoDateColumns = meta.dateColumns.size === 0;
|
|
87
91
|
}
|
|
88
92
|
/**
|
|
89
93
|
* Execute a query through the middleware chain.
|
|
@@ -133,11 +137,15 @@ export class QueryInterface {
|
|
|
133
137
|
const whereObj = args.where;
|
|
134
138
|
// Check if all where values are simple (plain equality, no operators/null/OR)
|
|
135
139
|
const whereKeys = Object.keys(whereObj).filter((k) => whereObj[k] !== undefined);
|
|
136
|
-
const isSimpleWhere = !whereObj['OR'] && whereKeys.every((k) => {
|
|
140
|
+
const isSimpleWhere = !whereObj['OR'] && !whereObj['AND'] && !whereObj['NOT'] && whereKeys.every((k) => {
|
|
137
141
|
const v = whereObj[k];
|
|
138
|
-
return v !== null && !isWhereOperator(v);
|
|
142
|
+
return v !== null && !isWhereOperator(v) && !isJsonFilter(v) && !isArrayFilter(v);
|
|
139
143
|
});
|
|
140
|
-
//
|
|
144
|
+
// -----------------------------------------------------------------------
|
|
145
|
+
// Fast path: no relations, simple equality where — cache SQL template.
|
|
146
|
+
// Generates: SELECT col1, col2 FROM "table" WHERE "id" = $1 LIMIT 1
|
|
147
|
+
// No json_build_object, no subqueries, no COALESCE wrappers.
|
|
148
|
+
// -----------------------------------------------------------------------
|
|
141
149
|
if (!args.with && isSimpleWhere) {
|
|
142
150
|
const colKey = columnsList ? columnsList.join(',') : '*';
|
|
143
151
|
const ck = `fu:${whereKeys.sort().join(',')}:c=${colKey}`;
|
|
@@ -153,18 +161,23 @@ export class QueryInterface {
|
|
|
153
161
|
sql = `SELECT ${selectExpr} FROM ${qt}${whereSql} LIMIT 1`;
|
|
154
162
|
this.sqlCache.set(ck, sql);
|
|
155
163
|
}
|
|
164
|
+
// Fast path: skip date coercion when table has no date columns
|
|
165
|
+
const transformRow = this.hasNoDateColumns
|
|
166
|
+
? (row) => this.parseRowFast(row)
|
|
167
|
+
: (row) => this.parseRow(row, this.table);
|
|
156
168
|
return {
|
|
157
169
|
sql,
|
|
158
170
|
params,
|
|
159
171
|
transform: (result) => {
|
|
160
172
|
const row = result.rows[0];
|
|
161
|
-
return row ?
|
|
173
|
+
return row ? transformRow(row) : null;
|
|
162
174
|
},
|
|
163
175
|
tag: `${this.table}.findUnique`,
|
|
164
176
|
};
|
|
165
177
|
}
|
|
166
178
|
// General path: supports operators, null, OR, nested with
|
|
167
179
|
const { sql: whereSql, params } = this.buildWhere(args.where);
|
|
180
|
+
// Fast path: no relations, skip json_agg (but where has operators/null/OR)
|
|
168
181
|
if (!args.with) {
|
|
169
182
|
const qt = quoteIdent(this.table);
|
|
170
183
|
const selectExpr = columnsList
|
|
@@ -205,11 +218,78 @@ export class QueryInterface {
|
|
|
205
218
|
});
|
|
206
219
|
}
|
|
207
220
|
buildFindMany(args) {
|
|
221
|
+
const columnsList = this.resolveColumns(args?.select, args?.omit);
|
|
222
|
+
const qt = quoteIdent(this.table);
|
|
223
|
+
const hasWith = !!(args?.with);
|
|
224
|
+
// -----------------------------------------------------------------------
|
|
225
|
+
// Fast path: no relations, no cursor, no distinct — cache SQL template
|
|
226
|
+
// Skip json_agg subquery machinery entirely for simple table scans.
|
|
227
|
+
// -----------------------------------------------------------------------
|
|
228
|
+
if (!hasWith && !args?.cursor && !args?.distinct) {
|
|
229
|
+
const whereObj = args?.where;
|
|
230
|
+
const whereKeys = whereObj
|
|
231
|
+
? Object.keys(whereObj).filter((k) => whereObj[k] !== undefined)
|
|
232
|
+
: [];
|
|
233
|
+
// Check if all where values are simple equality (no operators, null, OR/AND/NOT)
|
|
234
|
+
const isSimpleWhere = !whereObj || (!whereObj['OR'] && !whereObj['AND'] && !whereObj['NOT'] && whereKeys.every((k) => {
|
|
235
|
+
const v = whereObj[k];
|
|
236
|
+
return v !== null && !isWhereOperator(v) && !isJsonFilter(v) && !isArrayFilter(v);
|
|
237
|
+
}));
|
|
238
|
+
if (isSimpleWhere) {
|
|
239
|
+
// Build cache key: operation + where keys + columns + orderBy + hasLimit + hasOffset
|
|
240
|
+
const colKey = columnsList ? columnsList.join(',') : '*';
|
|
241
|
+
const orderKey = args?.orderBy ? Object.entries(args.orderBy).map(([k, d]) => `${k}:${d}`).join(',') : '';
|
|
242
|
+
const hasLimit = args?.limit !== undefined || args?.take !== undefined;
|
|
243
|
+
const hasOffset = args?.offset !== undefined;
|
|
244
|
+
const ck = `fm:${whereKeys.sort().join(',')}:c=${colKey}:o=${orderKey}:l=${hasLimit ? '1' : '0'}:off=${hasOffset ? '1' : '0'}`;
|
|
245
|
+
let sql = this.sqlCache.get(ck);
|
|
246
|
+
const params = whereKeys.map((k) => whereObj[k]);
|
|
247
|
+
if (!sql) {
|
|
248
|
+
// Build SQL template once and cache it
|
|
249
|
+
const selectExpr = columnsList
|
|
250
|
+
? columnsList.map((c) => `${qt}.${quoteIdent(c)}`).join(', ')
|
|
251
|
+
: `${qt}.*`;
|
|
252
|
+
const whereClauses = whereKeys.map((k, i) => `${this.toSqlColumn(k)} = $${i + 1}`);
|
|
253
|
+
const whereSql = whereClauses.length > 0 ? ` WHERE ${whereClauses.join(' AND ')}` : '';
|
|
254
|
+
sql = `SELECT ${selectExpr} FROM ${qt}${whereSql}`;
|
|
255
|
+
if (args?.orderBy) {
|
|
256
|
+
sql += ` ORDER BY ${this.buildOrderBy(args.orderBy)}`;
|
|
257
|
+
}
|
|
258
|
+
// Placeholders for LIMIT/OFFSET — positions are stable since where params come first
|
|
259
|
+
if (hasLimit) {
|
|
260
|
+
sql += ` LIMIT $${params.length + 1}`;
|
|
261
|
+
}
|
|
262
|
+
if (hasOffset) {
|
|
263
|
+
sql += ` OFFSET $${params.length + (hasLimit ? 2 : 1)}`;
|
|
264
|
+
}
|
|
265
|
+
this.sqlCache.set(ck, sql);
|
|
266
|
+
}
|
|
267
|
+
// Append runtime param values for LIMIT and OFFSET
|
|
268
|
+
const effectiveLimit = args?.take ?? args?.limit;
|
|
269
|
+
if (effectiveLimit !== undefined) {
|
|
270
|
+
params.push(Number(effectiveLimit));
|
|
271
|
+
}
|
|
272
|
+
if (args?.offset !== undefined) {
|
|
273
|
+
params.push(Number(args.offset));
|
|
274
|
+
}
|
|
275
|
+
// Fast path: no relations, use parseRow (or parseRowFast when no date columns)
|
|
276
|
+
const parseRow = this.hasNoDateColumns
|
|
277
|
+
? (row) => this.parseRowFast(row)
|
|
278
|
+
: (row) => this.parseRow(row, this.table);
|
|
279
|
+
return {
|
|
280
|
+
sql,
|
|
281
|
+
params,
|
|
282
|
+
transform: (result) => result.rows.map(parseRow),
|
|
283
|
+
tag: `${this.table}.findMany`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// -----------------------------------------------------------------------
|
|
288
|
+
// General path: supports operators, null, OR, cursor, distinct, nested with
|
|
289
|
+
// -----------------------------------------------------------------------
|
|
208
290
|
const { sql: whereSql, params } = args?.where
|
|
209
291
|
? this.buildWhere(args.where)
|
|
210
292
|
: { sql: '', params: [] };
|
|
211
|
-
const columnsList = this.resolveColumns(args?.select, args?.omit);
|
|
212
|
-
const qt = quoteIdent(this.table);
|
|
213
293
|
// Distinct support
|
|
214
294
|
let distinctPrefix = '';
|
|
215
295
|
if (args?.distinct && args.distinct.length > 0) {
|
|
@@ -217,7 +297,7 @@ export class QueryInterface {
|
|
|
217
297
|
distinctPrefix = `DISTINCT ON (${distinctCols.join(', ')}) `;
|
|
218
298
|
}
|
|
219
299
|
let selectClause;
|
|
220
|
-
if (
|
|
300
|
+
if (hasWith) {
|
|
221
301
|
selectClause = this.buildSelectWithRelations(this.table, args.with, params, columnsList);
|
|
222
302
|
}
|
|
223
303
|
else if (columnsList) {
|
|
@@ -264,7 +344,7 @@ export class QueryInterface {
|
|
|
264
344
|
return {
|
|
265
345
|
sql,
|
|
266
346
|
params,
|
|
267
|
-
transform: (result) => result.rows.map((row) =>
|
|
347
|
+
transform: (result) => result.rows.map((row) => hasWith
|
|
268
348
|
? this.parseNestedRow(row, this.table)
|
|
269
349
|
: this.parseRow(row, this.table)),
|
|
270
350
|
tag: `${this.table}.findMany`,
|
|
@@ -1169,6 +1249,22 @@ export class QueryInterface {
|
|
|
1169
1249
|
}
|
|
1170
1250
|
return parsed;
|
|
1171
1251
|
}
|
|
1252
|
+
/**
|
|
1253
|
+
* Fast path: parse a flat row when the table has NO date columns.
|
|
1254
|
+
* Only renames snake_case -> camelCase via the pre-computed reverseMap.
|
|
1255
|
+
* Skips all date coercion checks — avoids Set.has() per field per row.
|
|
1256
|
+
* Used by findUnique/findMany fast paths when hasNoDateColumns is true.
|
|
1257
|
+
*/
|
|
1258
|
+
parseRowFast(row) {
|
|
1259
|
+
const parsed = {};
|
|
1260
|
+
const reverseMap = this.tableMeta.reverseColumnMap;
|
|
1261
|
+
const keys = Object.keys(row);
|
|
1262
|
+
for (let i = 0; i < keys.length; i++) {
|
|
1263
|
+
const col = keys[i];
|
|
1264
|
+
parsed[reverseMap[col] ?? col] = row[col];
|
|
1265
|
+
}
|
|
1266
|
+
return parsed;
|
|
1267
|
+
}
|
|
1172
1268
|
/** Parse a row that may contain JSON nested relation columns */
|
|
1173
1269
|
parseNestedRow(row, table) {
|
|
1174
1270
|
const parsed = this.parseRow(row, table);
|
package/dist/schema-builder.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — Schema Builder
|
|
3
3
|
*
|
|
4
4
|
* TypeScript-first schema definition API. Define your database schema
|
|
5
5
|
* as plain objects — no method chaining, no DSL. Fully type-checked,
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```ts
|
|
10
|
-
* import { defineSchema } from '
|
|
10
|
+
* import { defineSchema } from 'turbine-orm';
|
|
11
11
|
*
|
|
12
12
|
* export default defineSchema({
|
|
13
13
|
* users: {
|
package/dist/schema-builder.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm — Schema Builder
|
|
3
3
|
*
|
|
4
4
|
* TypeScript-first schema definition API. Define your database schema
|
|
5
5
|
* as plain objects — no method chaining, no DSL. Fully type-checked,
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```ts
|
|
10
|
-
* import { defineSchema } from '
|
|
10
|
+
* import { defineSchema } from 'turbine-orm';
|
|
11
11
|
*
|
|
12
12
|
* export default defineSchema({
|
|
13
13
|
* users: {
|
package/dist/schema-sql.d.ts
CHANGED
package/dist/schema-sql.js
CHANGED
package/dist/schema.d.ts
CHANGED
package/dist/schema.js
CHANGED
package/dist/serverless.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm/serverless — HTTP-based query driver for edge functions
|
|
3
3
|
*
|
|
4
4
|
* Use this driver when you cannot establish a direct TCP connection to Postgres
|
|
5
5
|
* (e.g., Vercel Edge Functions, Cloudflare Workers, Deno Deploy).
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
|
-
* import { createServerlessClient } from '
|
|
16
|
+
* import { createServerlessClient } from 'turbine-orm/serverless';
|
|
17
17
|
*
|
|
18
18
|
* const db = createServerlessClient({
|
|
19
19
|
* endpoint: 'https://your-turbine-proxy.fly.dev/query',
|
|
@@ -148,7 +148,7 @@ export declare class ServerlessClient {
|
|
|
148
148
|
*
|
|
149
149
|
* @example
|
|
150
150
|
* ```ts
|
|
151
|
-
* import { createServerlessClient } from '
|
|
151
|
+
* import { createServerlessClient } from 'turbine-orm/serverless';
|
|
152
152
|
*
|
|
153
153
|
* const db = createServerlessClient({
|
|
154
154
|
* endpoint: process.env.TURBINE_ENDPOINT!,
|
package/dist/serverless.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* turbine-orm/serverless — HTTP-based query driver for edge functions
|
|
3
3
|
*
|
|
4
4
|
* Use this driver when you cannot establish a direct TCP connection to Postgres
|
|
5
5
|
* (e.g., Vercel Edge Functions, Cloudflare Workers, Deno Deploy).
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
|
-
* import { createServerlessClient } from '
|
|
16
|
+
* import { createServerlessClient } from 'turbine-orm/serverless';
|
|
17
17
|
*
|
|
18
18
|
* const db = createServerlessClient({
|
|
19
19
|
* endpoint: 'https://your-turbine-proxy.fly.dev/query',
|
|
@@ -134,7 +134,7 @@ export class ServerlessClient {
|
|
|
134
134
|
headers: {
|
|
135
135
|
'Content-Type': 'application/json',
|
|
136
136
|
'Authorization': `Bearer ${this.config.authToken}`,
|
|
137
|
-
'User-Agent': '
|
|
137
|
+
'User-Agent': 'turbine-orm-serverless',
|
|
138
138
|
...this.config.headers,
|
|
139
139
|
},
|
|
140
140
|
body: JSON.stringify(body),
|
|
@@ -179,7 +179,7 @@ export class ServerlessClient {
|
|
|
179
179
|
*
|
|
180
180
|
* @example
|
|
181
181
|
* ```ts
|
|
182
|
-
* import { createServerlessClient } from '
|
|
182
|
+
* import { createServerlessClient } from 'turbine-orm/serverless';
|
|
183
183
|
*
|
|
184
184
|
* const db = createServerlessClient({
|
|
185
185
|
* endpoint: process.env.TURBINE_ENDPOINT!,
|
package/dist/types.d.ts
CHANGED
package/dist/types.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "turbine-orm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "TypeScript ORM with json_agg nested queries — 2-3x faster than Prisma, 1.5x faster than Drizzle",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -62,15 +62,14 @@
|
|
|
62
62
|
"database",
|
|
63
63
|
"sql",
|
|
64
64
|
"turbine",
|
|
65
|
-
"
|
|
65
|
+
"turbine-orm",
|
|
66
66
|
"nested-queries"
|
|
67
67
|
],
|
|
68
68
|
"author": "ZVN DEV <dev@zvndev.com>",
|
|
69
69
|
"license": "MIT",
|
|
70
|
-
"homepage": "https://
|
|
70
|
+
"homepage": "https://github.com/zvndev/turbine-orm",
|
|
71
71
|
"repository": {
|
|
72
72
|
"type": "git",
|
|
73
|
-
"url": "https://github.com/zvndev/
|
|
74
|
-
"directory": "turbine/turbine-ts"
|
|
73
|
+
"url": "https://github.com/zvndev/turbine-orm"
|
|
75
74
|
}
|
|
76
75
|
}
|