@tursodatabase/vercel-experimental 0.0.1
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/auto-create.d.ts +6 -0
- package/dist/auto-create.d.ts.map +1 -0
- package/dist/auto-create.js +62 -0
- package/dist/auto-create.js.map +1 -0
- package/dist/createDb.d.ts +7 -0
- package/dist/createDb.d.ts.map +1 -0
- package/dist/createDb.js +30 -0
- package/dist/createDb.js.map +1 -0
- package/dist/database.d.ts +22 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +71 -0
- package/dist/database.js.map +1 -0
- package/dist/flush.d.ts +8 -0
- package/dist/flush.d.ts.map +1 -0
- package/dist/flush.js +48 -0
- package/dist/flush.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-create.d.ts","sourceRoot":"","sources":["../src/auto-create.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AA4BD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAyC9B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureDatabase = ensureDatabase;
|
|
4
|
+
const api_1 = require("@tursodatabase/api");
|
|
5
|
+
const credentialsCache = new Map();
|
|
6
|
+
let apiClient = null;
|
|
7
|
+
let cachedOrg = null;
|
|
8
|
+
function getApiClient() {
|
|
9
|
+
const org = getOrg();
|
|
10
|
+
if (!apiClient || cachedOrg !== org) {
|
|
11
|
+
const token = process.env.TURSO_API_TOKEN;
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw new Error("TURSO_API_TOKEN environment variable is required");
|
|
14
|
+
}
|
|
15
|
+
apiClient = (0, api_1.createClient)({ org, token });
|
|
16
|
+
cachedOrg = org;
|
|
17
|
+
}
|
|
18
|
+
return apiClient;
|
|
19
|
+
}
|
|
20
|
+
function getOrg() {
|
|
21
|
+
const org = process.env.TURSO_ORG;
|
|
22
|
+
if (!org) {
|
|
23
|
+
throw new Error("TURSO_ORG environment variable is required");
|
|
24
|
+
}
|
|
25
|
+
return org;
|
|
26
|
+
}
|
|
27
|
+
async function ensureDatabase(name, group) {
|
|
28
|
+
const cached = credentialsCache.get(name);
|
|
29
|
+
if (cached) {
|
|
30
|
+
return cached;
|
|
31
|
+
}
|
|
32
|
+
const client = getApiClient();
|
|
33
|
+
let database;
|
|
34
|
+
try {
|
|
35
|
+
database = await client.databases.get(name);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (error instanceof Error &&
|
|
39
|
+
"status" in error &&
|
|
40
|
+
error.status === 404) {
|
|
41
|
+
database = await client.databases.create(name, {
|
|
42
|
+
group: group ?? "default",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (!database?.hostname) {
|
|
50
|
+
throw new Error(`Failed to get hostname for database: ${name}`);
|
|
51
|
+
}
|
|
52
|
+
const tokenResponse = await client.databases.createToken(name, {
|
|
53
|
+
authorization: "full-access",
|
|
54
|
+
});
|
|
55
|
+
const credentials = {
|
|
56
|
+
url: `libsql://${database.hostname}`,
|
|
57
|
+
authToken: tokenResponse.jwt,
|
|
58
|
+
};
|
|
59
|
+
credentialsCache.set(name, credentials);
|
|
60
|
+
return credentials;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=auto-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-create.js","sourceRoot":"","sources":["../src/auto-create.ts"],"names":[],"mappings":";;AAiCA,wCA4CC;AA7ED,4CAAoE;AAOpE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA+B,CAAC;AAEhE,IAAI,SAAS,GAA2C,IAAI,CAAC;AAC7D,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,SAAS,GAAG,IAAA,kBAAY,EAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,MAAM;IACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAc;IAEd,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,IAAI,QAA2C,CAAC;IAEhD,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IACE,KAAK,YAAY,KAAK;YACtB,QAAQ,IAAI,KAAK;YAChB,KAA4B,CAAC,MAAM,KAAK,GAAG,EAC5C,CAAC;YACD,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC7C,KAAK,EAAE,KAAK,IAAI,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE;QAC7D,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,MAAM,WAAW,GAAwB;QACvC,GAAG,EAAE,YAAY,QAAQ,CAAC,QAAQ,EAAE;QACpC,SAAS,EAAE,aAAa,CAAC,GAAG;KAC7B,CAAC;IAEF,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACxC,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { VercelDatabase, type DatabaseOptions } from "./database.js";
|
|
2
|
+
export interface CreateDbOptions extends DatabaseOptions {
|
|
3
|
+
group?: string;
|
|
4
|
+
}
|
|
5
|
+
export type { DatabaseOptions };
|
|
6
|
+
export declare function createDb(name: string, options?: CreateDbOptions): Promise<VercelDatabase>;
|
|
7
|
+
//# sourceMappingURL=createDb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDb.d.ts","sourceRoot":"","sources":["../src/createDb.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAIhC,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CAczB"}
|
package/dist/createDb.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDb = createDb;
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const auto_create_js_1 = require("./auto-create.js");
|
|
7
|
+
const database_js_1 = require("./database.js");
|
|
8
|
+
const databaseInstances = new Map();
|
|
9
|
+
function createDb(name, options) {
|
|
10
|
+
const existing = databaseInstances.get(name);
|
|
11
|
+
if (existing) {
|
|
12
|
+
return existing;
|
|
13
|
+
}
|
|
14
|
+
const promise = initializeDatabase(name, options);
|
|
15
|
+
databaseInstances.set(name, promise);
|
|
16
|
+
promise.catch(() => {
|
|
17
|
+
databaseInstances.delete(name);
|
|
18
|
+
});
|
|
19
|
+
return promise;
|
|
20
|
+
}
|
|
21
|
+
async function initializeDatabase(name, options) {
|
|
22
|
+
const credentials = await (0, auto_create_js_1.ensureDatabase)(name, options?.group);
|
|
23
|
+
const localPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `${name}.db`);
|
|
24
|
+
const db = await database_js_1.VercelDatabase.open(localPath, credentials.url, credentials.authToken, {
|
|
25
|
+
partialSync: options?.partialSync,
|
|
26
|
+
bootstrapStrategy: options?.bootstrapStrategy,
|
|
27
|
+
});
|
|
28
|
+
return db;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=createDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDb.js","sourceRoot":"","sources":["../src/createDb.ts"],"names":[],"mappings":";;AAaA,4BAiBC;AA9BD,yCAAiC;AACjC,qCAAiC;AACjC,qDAAkD;AAClD,+CAAqE;AAQrE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmC,CAAC;AAErE,SAAgB,QAAQ,CACtB,IAAY,EACZ,OAAyB;IAEzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAErC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACjB,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAAY,EACZ,OAAyB;IAEzB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAc,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IAE/C,MAAM,EAAE,GAAG,MAAM,4BAAc,CAAC,IAAI,CAClC,SAAS,EACT,WAAW,CAAC,GAAG,EACf,WAAW,CAAC,SAAS,EACrB;QACE,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;KAC9C,CACF,CAAC;IAEF,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Database, type DatabaseOpts } from "@tursodatabase/sync";
|
|
2
|
+
export interface QueryResult {
|
|
3
|
+
columns: string[];
|
|
4
|
+
rows: unknown[][];
|
|
5
|
+
}
|
|
6
|
+
export interface DatabaseOptions {
|
|
7
|
+
partialSync?: boolean;
|
|
8
|
+
bootstrapStrategy?: NonNullable<DatabaseOpts["partialSyncExperimental"]>["bootstrapStrategy"];
|
|
9
|
+
}
|
|
10
|
+
export declare class VercelDatabase {
|
|
11
|
+
private db;
|
|
12
|
+
private dirty;
|
|
13
|
+
constructor(db: Database);
|
|
14
|
+
static open(localPath: string, remoteUrl: string, authToken: string, options?: DatabaseOptions): Promise<VercelDatabase>;
|
|
15
|
+
query(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
16
|
+
execute(sql: string, params?: unknown[]): Promise<void>;
|
|
17
|
+
push(): Promise<void>;
|
|
18
|
+
pull(): Promise<void>;
|
|
19
|
+
private markDirty;
|
|
20
|
+
isDirty(): boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGhF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;CAC/F;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,EAAE,EAAE,QAAQ;WAIX,IAAI,CACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC;IAoBpB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAW5D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,CAAC,SAAS;IAOjB,OAAO,IAAI,OAAO;CAGnB"}
|
package/dist/database.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VercelDatabase = void 0;
|
|
4
|
+
const sync_1 = require("@tursodatabase/sync");
|
|
5
|
+
const flush_js_1 = require("./flush.js");
|
|
6
|
+
class VercelDatabase {
|
|
7
|
+
db;
|
|
8
|
+
dirty = false;
|
|
9
|
+
constructor(db) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
}
|
|
12
|
+
static async open(localPath, remoteUrl, authToken, options) {
|
|
13
|
+
const connectOpts = {
|
|
14
|
+
path: localPath,
|
|
15
|
+
url: remoteUrl,
|
|
16
|
+
authToken,
|
|
17
|
+
};
|
|
18
|
+
if (options?.partialSync) {
|
|
19
|
+
connectOpts.partialSyncExperimental = {
|
|
20
|
+
bootstrapStrategy: options?.bootstrapStrategy ?? {
|
|
21
|
+
kind: "prefix",
|
|
22
|
+
length: 128 * 1024,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const db = await (0, sync_1.connect)(connectOpts);
|
|
27
|
+
return new VercelDatabase(db);
|
|
28
|
+
}
|
|
29
|
+
async query(sql, params) {
|
|
30
|
+
const stmt = this.db.prepare(sql);
|
|
31
|
+
try {
|
|
32
|
+
const columns = stmt.columns().map((c) => c.name);
|
|
33
|
+
const rows = await stmt.all(...(params ?? []));
|
|
34
|
+
return { columns, rows: rows.map((row) => Object.values(row)) };
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
stmt.close();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async execute(sql, params) {
|
|
41
|
+
const stmt = this.db.prepare(sql);
|
|
42
|
+
try {
|
|
43
|
+
await stmt.run(...(params ?? []));
|
|
44
|
+
this.markDirty();
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
stmt.close();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async push() {
|
|
51
|
+
if (!this.dirty)
|
|
52
|
+
return;
|
|
53
|
+
await this.db.push();
|
|
54
|
+
this.dirty = false;
|
|
55
|
+
(0, flush_js_1.unregisterFromFlush)(this);
|
|
56
|
+
}
|
|
57
|
+
async pull() {
|
|
58
|
+
await this.db.pull();
|
|
59
|
+
}
|
|
60
|
+
markDirty() {
|
|
61
|
+
if (!this.dirty) {
|
|
62
|
+
this.dirty = true;
|
|
63
|
+
(0, flush_js_1.registerForFlush)(this);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
isDirty() {
|
|
67
|
+
return this.dirty;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.VercelDatabase = VercelDatabase;
|
|
71
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":";;;AAAA,8CAAgF;AAChF,yCAAmE;AAYnE,MAAa,cAAc;IACjB,EAAE,CAAW;IACb,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,SAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,OAAyB;QAEzB,MAAM,WAAW,GAAiB;YAChC,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,SAAS;YACd,SAAS;SACV,CAAC;QAEF,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YACzB,WAAW,CAAC,uBAAuB,GAAG;gBACpC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI;oBAC/C,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,GAAG,GAAG,IAAI;iBACnB;aACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,IAAA,cAAO,EAAC,WAAW,CAAC,CAAC;QACtC,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAkB;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAkB;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAA,8BAAmB,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAA,2BAAgB,EAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AA3ED,wCA2EC"}
|
package/dist/flush.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { VercelDatabase } from "./database.js";
|
|
2
|
+
type WaitUntilFn = (promise: Promise<unknown>) => void;
|
|
3
|
+
export declare function setWaitUntil(fn: WaitUntilFn): void;
|
|
4
|
+
export declare function registerForFlush(db: VercelDatabase): void;
|
|
5
|
+
export declare function unregisterFromFlush(db: VercelDatabase): void;
|
|
6
|
+
export declare function flushAll(): Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=flush.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush.d.ts","sourceRoot":"","sources":["../src/flush.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAMvD,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAElD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAGzD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAE5D;AA+BD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9C"}
|
package/dist/flush.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setWaitUntil = setWaitUntil;
|
|
4
|
+
exports.registerForFlush = registerForFlush;
|
|
5
|
+
exports.unregisterFromFlush = unregisterFromFlush;
|
|
6
|
+
exports.flushAll = flushAll;
|
|
7
|
+
let waitUntilFn = null;
|
|
8
|
+
const pendingDatabases = new Set();
|
|
9
|
+
function setWaitUntil(fn) {
|
|
10
|
+
waitUntilFn = fn;
|
|
11
|
+
}
|
|
12
|
+
function registerForFlush(db) {
|
|
13
|
+
pendingDatabases.add(db);
|
|
14
|
+
scheduleFlush();
|
|
15
|
+
}
|
|
16
|
+
function unregisterFromFlush(db) {
|
|
17
|
+
pendingDatabases.delete(db);
|
|
18
|
+
}
|
|
19
|
+
let flushScheduled = false;
|
|
20
|
+
function scheduleFlush() {
|
|
21
|
+
if (flushScheduled)
|
|
22
|
+
return;
|
|
23
|
+
flushScheduled = true;
|
|
24
|
+
const flushPromise = (async () => {
|
|
25
|
+
await Promise.resolve();
|
|
26
|
+
flushScheduled = false;
|
|
27
|
+
const databases = Array.from(pendingDatabases);
|
|
28
|
+
pendingDatabases.clear();
|
|
29
|
+
await Promise.all(databases.map(async (db) => {
|
|
30
|
+
try {
|
|
31
|
+
await db.push();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.error(`Failed to push database:`, error);
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
})();
|
|
38
|
+
if (waitUntilFn) {
|
|
39
|
+
waitUntilFn(flushPromise);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function flushAll() {
|
|
43
|
+
const databases = Array.from(pendingDatabases);
|
|
44
|
+
pendingDatabases.clear();
|
|
45
|
+
flushScheduled = false;
|
|
46
|
+
await Promise.all(databases.map((db) => db.push()));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=flush.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flush.js","sourceRoot":"","sources":["../src/flush.ts"],"names":[],"mappings":";;AAQA,oCAEC;AAED,4CAGC;AAED,kDAEC;AA+BD,4BAMC;AApDD,IAAI,WAAW,GAAuB,IAAI,CAAC;AAE3C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEnD,SAAgB,YAAY,CAAC,EAAe;IAC1C,WAAW,GAAG,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB,CAAC,EAAkB;IACjD,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC;AAClB,CAAC;AAED,SAAgB,mBAAmB,CAAC,EAAkB;IACpD,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,SAAS,aAAa;IACpB,IAAI,cAAc;QAAE,OAAO;IAC3B,cAAc,GAAG,IAAI,CAAC;IAEtB,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;QAC/B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,cAAc,GAAG,KAAK,CAAC;QAEvB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAEzB,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IAEL,IAAI,WAAW,EAAE,CAAC;QAChB,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,QAAQ;IAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/C,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACzB,cAAc,GAAG,KAAK,CAAC;IAEvB,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flushAll = exports.setWaitUntil = exports.VercelDatabase = exports.createDb = void 0;
|
|
4
|
+
var createDb_js_1 = require("./createDb.js");
|
|
5
|
+
Object.defineProperty(exports, "createDb", { enumerable: true, get: function () { return createDb_js_1.createDb; } });
|
|
6
|
+
var database_js_1 = require("./database.js");
|
|
7
|
+
Object.defineProperty(exports, "VercelDatabase", { enumerable: true, get: function () { return database_js_1.VercelDatabase; } });
|
|
8
|
+
var flush_js_1 = require("./flush.js");
|
|
9
|
+
Object.defineProperty(exports, "setWaitUntil", { enumerable: true, get: function () { return flush_js_1.setWaitUntil; } });
|
|
10
|
+
Object.defineProperty(exports, "flushAll", { enumerable: true, get: function () { return flush_js_1.flushAll; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAA+D;AAAtD,uGAAA,QAAQ,OAAA;AACjB,6CAAuF;AAA9E,6GAAA,cAAc,OAAA;AACvB,uCAAoD;AAA3C,wGAAA,YAAY,OAAA;AAAE,oGAAA,QAAQ,OAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tursodatabase/vercel-experimental",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Turso database integration for Vercel Functions.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"turso",
|
|
17
|
+
"vercel",
|
|
18
|
+
"serverless",
|
|
19
|
+
"sqlite",
|
|
20
|
+
"database"
|
|
21
|
+
],
|
|
22
|
+
"author": "Turso",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@tursodatabase/api": "^1.9.0",
|
|
26
|
+
"@tursodatabase/sync": "^0.5.0-pre.5"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@vercel/functions": "^1.0.0"
|
|
30
|
+
},
|
|
31
|
+
"peerDependenciesMeta": {
|
|
32
|
+
"@vercel/functions": {
|
|
33
|
+
"optional": true
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "^20.0.0",
|
|
38
|
+
"typescript": "^5.0.0"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18.0.0"
|
|
42
|
+
}
|
|
43
|
+
}
|