Upload 603 files
Browse files- server/dist/db/client.d.ts +1 -1
- server/dist/db/client.d.ts.map +1 -1
- server/dist/db/client.js +13 -1
- server/dist/db/client.js.map +1 -1
- server/src/db/client.ts +17 -2
server/dist/db/client.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface TursoDb {
|
|
| 20 |
/** Execute a single statement (like .prepare(sql).run(args)). Returns { changes, lastInsertRowid }. */
|
| 21 |
run(sql: string, args?: any[]): Promise<{
|
| 22 |
changes: number;
|
| 23 |
-
lastInsertRowid:
|
| 24 |
}>;
|
| 25 |
/** Execute a single statement and return the first row (like .prepare(sql).get(args)). */
|
| 26 |
get<T = any>(sql: string, args?: any[]): Promise<T | undefined>;
|
|
|
|
| 20 |
/** Execute a single statement (like .prepare(sql).run(args)). Returns { changes, lastInsertRowid }. */
|
| 21 |
run(sql: string, args?: any[]): Promise<{
|
| 22 |
changes: number;
|
| 23 |
+
lastInsertRowid: number;
|
| 24 |
}>;
|
| 25 |
/** Execute a single statement and return the first row (like .prepare(sql).get(args)). */
|
| 26 |
get<T = any>(sql: string, args?: any[]): Promise<T | undefined>;
|
server/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
|
|
| 1 |
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAEvG,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACvD,uGAAuG;IACvG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,0FAA0F;IAC1F,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAChE,qFAAqF;IACrF,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACtD,yDAAyD;IACzD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,+EAA+E;IAC/E,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACxD;AA+CD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAwBhD;AAED,uEAAuE;AACvE,wBAAgB,KAAK,IAAI,OAAO,CAK/B;AAGD,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC"}
|
server/dist/db/client.js
CHANGED
|
@@ -12,6 +12,8 @@
|
|
| 12 |
* db.transaction(() => { ... })() → await db.batch([...])
|
| 13 |
* db.pragma(...) → await db.run('PRAGMA ...')
|
| 14 |
*/
|
|
|
|
|
|
|
| 15 |
import { createClient } from '@libsql/client';
|
| 16 |
let db = null;
|
| 17 |
function createTursoDb(client) {
|
|
@@ -24,7 +26,7 @@ function createTursoDb(client) {
|
|
| 24 |
const result = await client.execute({ sql, args });
|
| 25 |
return {
|
| 26 |
changes: result.rowsAffected,
|
| 27 |
-
lastInsertRowid: result.lastInsertRowid ?
|
| 28 |
};
|
| 29 |
},
|
| 30 |
async get(sql, args = []) {
|
|
@@ -58,6 +60,16 @@ function createTursoDb(client) {
|
|
| 58 |
*/
|
| 59 |
export function initClient(url) {
|
| 60 |
const dbUrl = url ?? process.env.TURSO_DATABASE_URL ?? 'file:./data/freeapi.db';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
const authToken = process.env.TURSO_AUTH_TOKEN;
|
| 62 |
const client = createClient({
|
| 63 |
url: dbUrl,
|
|
|
|
| 12 |
* db.transaction(() => { ... })() → await db.batch([...])
|
| 13 |
* db.pragma(...) → await db.run('PRAGMA ...')
|
| 14 |
*/
|
| 15 |
+
import fs from 'fs';
|
| 16 |
+
import path from 'path';
|
| 17 |
import { createClient } from '@libsql/client';
|
| 18 |
let db = null;
|
| 19 |
function createTursoDb(client) {
|
|
|
|
| 26 |
const result = await client.execute({ sql, args });
|
| 27 |
return {
|
| 28 |
changes: result.rowsAffected,
|
| 29 |
+
lastInsertRowid: result.lastInsertRowid !== undefined ? Number(result.lastInsertRowid) : 0,
|
| 30 |
};
|
| 31 |
},
|
| 32 |
async get(sql, args = []) {
|
|
|
|
| 60 |
*/
|
| 61 |
export function initClient(url) {
|
| 62 |
const dbUrl = url ?? process.env.TURSO_DATABASE_URL ?? 'file:./data/freeapi.db';
|
| 63 |
+
if (process.env.NODE_ENV === 'production' && !process.env.TURSO_DATABASE_URL && !url) {
|
| 64 |
+
console.warn('\n[WARNING] TURSO_DATABASE_URL is not set in production. Falling back to local SQLite database. Any changes will be lost when the container restarts!\n');
|
| 65 |
+
}
|
| 66 |
+
if (dbUrl.startsWith('file:')) {
|
| 67 |
+
const filePath = dbUrl.slice(5);
|
| 68 |
+
const dir = path.dirname(filePath);
|
| 69 |
+
if (!fs.existsSync(dir)) {
|
| 70 |
+
fs.mkdirSync(dir, { recursive: true });
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
const authToken = process.env.TURSO_AUTH_TOKEN;
|
| 74 |
const client = createClient({
|
| 75 |
url: dbUrl,
|
server/dist/db/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAA2D,MAAM,gBAAgB,CAAC;AAkBvG,IAAI,EAAE,GAAmB,IAAI,CAAC;AAE9B,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO;QACL,MAAM;QAEN,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,OAAc,EAAE;YACzC,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAc,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,eAAe,EAAE,MAAM,CAAC,eAAe,
|
|
|
|
| 1 |
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"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"}
|
server/src/db/client.ts
CHANGED
|
@@ -13,6 +13,8 @@
|
|
| 13 |
* db.pragma(...) → await db.run('PRAGMA ...')
|
| 14 |
*/
|
| 15 |
|
|
|
|
|
|
|
| 16 |
import { createClient, type Client, type InStatement, type ResultSet, type Row } from '@libsql/client';
|
| 17 |
|
| 18 |
export interface TursoDb {
|
|
@@ -20,7 +22,7 @@ export interface TursoDb {
|
|
| 20 |
/** Execute a single statement, return full result set. */
|
| 21 |
execute(sql: string, args?: any[]): Promise<ResultSet>;
|
| 22 |
/** Execute a single statement (like .prepare(sql).run(args)). Returns { changes, lastInsertRowid }. */
|
| 23 |
-
run(sql: string, args?: any[]): Promise<{ changes: number; lastInsertRowid:
|
| 24 |
/** Execute a single statement and return the first row (like .prepare(sql).get(args)). */
|
| 25 |
get<T = any>(sql: string, args?: any[]): Promise<T | undefined>;
|
| 26 |
/** Execute a single statement and return all rows (like .prepare(sql).all(args)). */
|
|
@@ -45,7 +47,7 @@ function createTursoDb(client: Client): TursoDb {
|
|
| 45 |
const result = await client.execute({ sql, args });
|
| 46 |
return {
|
| 47 |
changes: result.rowsAffected,
|
| 48 |
-
lastInsertRowid: result.lastInsertRowid ?
|
| 49 |
};
|
| 50 |
},
|
| 51 |
|
|
@@ -83,6 +85,19 @@ function createTursoDb(client: Client): TursoDb {
|
|
| 83 |
*/
|
| 84 |
export function initClient(url?: string): TursoDb {
|
| 85 |
const dbUrl = url ?? process.env.TURSO_DATABASE_URL ?? 'file:./data/freeapi.db';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
const authToken = process.env.TURSO_AUTH_TOKEN;
|
| 87 |
|
| 88 |
const client = createClient({
|
|
|
|
| 13 |
* db.pragma(...) → await db.run('PRAGMA ...')
|
| 14 |
*/
|
| 15 |
|
| 16 |
+
import fs from 'fs';
|
| 17 |
+
import path from 'path';
|
| 18 |
import { createClient, type Client, type InStatement, type ResultSet, type Row } from '@libsql/client';
|
| 19 |
|
| 20 |
export interface TursoDb {
|
|
|
|
| 22 |
/** Execute a single statement, return full result set. */
|
| 23 |
execute(sql: string, args?: any[]): Promise<ResultSet>;
|
| 24 |
/** Execute a single statement (like .prepare(sql).run(args)). Returns { changes, lastInsertRowid }. */
|
| 25 |
+
run(sql: string, args?: any[]): Promise<{ changes: number; lastInsertRowid: number }>;
|
| 26 |
/** Execute a single statement and return the first row (like .prepare(sql).get(args)). */
|
| 27 |
get<T = any>(sql: string, args?: any[]): Promise<T | undefined>;
|
| 28 |
/** Execute a single statement and return all rows (like .prepare(sql).all(args)). */
|
|
|
|
| 47 |
const result = await client.execute({ sql, args });
|
| 48 |
return {
|
| 49 |
changes: result.rowsAffected,
|
| 50 |
+
lastInsertRowid: result.lastInsertRowid !== undefined ? Number(result.lastInsertRowid) : 0,
|
| 51 |
};
|
| 52 |
},
|
| 53 |
|
|
|
|
| 85 |
*/
|
| 86 |
export function initClient(url?: string): TursoDb {
|
| 87 |
const dbUrl = url ?? process.env.TURSO_DATABASE_URL ?? 'file:./data/freeapi.db';
|
| 88 |
+
|
| 89 |
+
if (process.env.NODE_ENV === 'production' && !process.env.TURSO_DATABASE_URL && !url) {
|
| 90 |
+
console.warn('\n[WARNING] TURSO_DATABASE_URL is not set in production. Falling back to local SQLite database. Any changes will be lost when the container restarts!\n');
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
if (dbUrl.startsWith('file:')) {
|
| 94 |
+
const filePath = dbUrl.slice(5);
|
| 95 |
+
const dir = path.dirname(filePath);
|
| 96 |
+
if (!fs.existsSync(dir)) {
|
| 97 |
+
fs.mkdirSync(dir, { recursive: true });
|
| 98 |
+
}
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
const authToken = process.env.TURSO_AUTH_TOKEN;
|
| 102 |
|
| 103 |
const client = createClient({
|