@mathrunet/masamune_cloudflare_turso 3.5.5 → 3.5.6
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/README.md +33 -0
- package/dist/functions/turso.js +3 -0
- package/dist/functions/turso.js.map +1 -1
- package/dist/functions/turso_token.js +55 -2
- package/dist/functions/turso_token.js.map +1 -1
- package/dist/lib/crud.d.ts +7 -1
- package/dist/lib/crud.js +34 -6
- package/dist/lib/crud.js.map +1 -1
- package/dist/lib/schema.d.ts +8 -1
- package/dist/lib/schema.js +83 -16
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/types.d.ts +14 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -238,6 +238,14 @@ error.
|
|
|
238
238
|
Automatic migration is intentionally limited to additive field changes.
|
|
239
239
|
|
|
240
240
|
- New fields in `value` are added with `ALTER TABLE ADD COLUMN`.
|
|
241
|
+
- A `schemaManifest` applies all declared columns before reads as well as writes,
|
|
242
|
+
so a newly released filter/order does not race the first write.
|
|
243
|
+
- Direct-read token issuance applies the requested tables first, so Flutter
|
|
244
|
+
direct reads cannot bypass the migration.
|
|
245
|
+
- Concurrent `ADD COLUMN` attempts are idempotent; a duplicate-column result is
|
|
246
|
+
re-read and accepted only when the resulting type is compatible.
|
|
247
|
+
- A missing column whose first value is `null` is rejected instead of being
|
|
248
|
+
permanently inferred as `TEXT`. Supply a generated schema manifest first.
|
|
241
249
|
- Existing fields are not migrated when their inferred type changes.
|
|
242
250
|
- Field rename, field deletion, primary key changes, unique constraints, and foreign keys are not automatically migrated.
|
|
243
251
|
- `PUT` and `DELETE` require `indexKey` or `where` to avoid accidental full-table changes.
|
|
@@ -261,6 +269,31 @@ CREATE TABLE IF NOT EXISTS table_name (
|
|
|
261
269
|
|
|
262
270
|
Objects and arrays are stored as JSON strings.
|
|
263
271
|
|
|
272
|
+
Generated manifests have the following shape. `database` accepts an exact
|
|
273
|
+
logical database, `*`, or a `:parameter` pattern for per-user Turso databases.
|
|
274
|
+
|
|
275
|
+
```ts
|
|
276
|
+
turso.Functions.turso({
|
|
277
|
+
schemaManifest: {
|
|
278
|
+
version: "1-a1b2c3d4",
|
|
279
|
+
tables: {
|
|
280
|
+
users: {
|
|
281
|
+
database: "*",
|
|
282
|
+
table: "users",
|
|
283
|
+
columns: [
|
|
284
|
+
{ name: "name", type: "TEXT" },
|
|
285
|
+
{ name: "age", type: "BIGINT" },
|
|
286
|
+
],
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
For releases, add nullable columns first, deploy the schema-aware Worker, then
|
|
294
|
+
release the app. Renames and required/type changes use dual-write, backfill,
|
|
295
|
+
read cutover, and delayed cleanup; automatic migration never drops columns.
|
|
296
|
+
|
|
264
297
|
# Rules
|
|
265
298
|
|
|
266
299
|
Rules are provided by `@mathrunet/masamune_cloudflare` and are shared with
|
package/dist/functions/turso.js
CHANGED
|
@@ -6,6 +6,7 @@ const rules_1 = require("../lib/rules");
|
|
|
6
6
|
const turso_client_1 = require("../lib/turso_client");
|
|
7
7
|
const env_1 = require("../lib/env");
|
|
8
8
|
const database_prefix_1 = require("../lib/database_prefix");
|
|
9
|
+
const schema_1 = require("../lib/schema");
|
|
9
10
|
module.exports = (hono, options, data) => {
|
|
10
11
|
hono.get("/", async (context) => handleCrud(context, options, "GET"));
|
|
11
12
|
hono.get("/database/:database/:table", async (context) => handleCrud(context, options, "GET"));
|
|
@@ -68,6 +69,8 @@ async function handleCrud(context, options, method) {
|
|
|
68
69
|
request: crudRequest,
|
|
69
70
|
autoCreateTable: resolvedOptions.autoCreateTable !== false,
|
|
70
71
|
autoMigrateAddColumns: resolvedOptions.autoMigrateAddColumns !== false,
|
|
72
|
+
declaredSchema: (0, schema_1.resolveTursoSchema)(resolvedOptions.schemaManifest, crudRequest.database, crudRequest.table),
|
|
73
|
+
schemaCacheKey: connection.url,
|
|
71
74
|
});
|
|
72
75
|
const response = method === "GET"
|
|
73
76
|
? await execute()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turso.js","sourceRoot":"","sources":["../../src/functions/turso.ts"],"names":[],"mappings":";;AAQA,sCAAiE;AACjE,4CAIwB;AACxB,wCAIsB;AACtB,sDAS6B;AAC7B,oCAA+D;AAC/D,4DAAoE;
|
|
1
|
+
{"version":3,"file":"turso.js","sourceRoot":"","sources":["../../src/functions/turso.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ const turso_client_1 = require("../lib/turso_client");
|
|
|
6
6
|
const token_1 = require("../lib/token");
|
|
7
7
|
const env_1 = require("../lib/env");
|
|
8
8
|
const database_prefix_1 = require("../lib/database_prefix");
|
|
9
|
+
const schema_1 = require("../lib/schema");
|
|
10
|
+
const tokenSchemaApplications = new Map();
|
|
9
11
|
module.exports = (hono, options, data) => {
|
|
10
12
|
hono.post("/", async (context) => handleToken(context, options));
|
|
11
13
|
hono.post("/database/:database", async (context) => handleToken(context, options));
|
|
@@ -44,7 +46,58 @@ async function handleToken(context, options) {
|
|
|
44
46
|
});
|
|
45
47
|
}
|
|
46
48
|
phase = "connect";
|
|
47
|
-
const
|
|
49
|
+
const declaredSchemas = access.scopes
|
|
50
|
+
.filter((scope) => scope.readMode === "direct" || scope.writeMode === "direct")
|
|
51
|
+
.map((scope) => ({
|
|
52
|
+
table: scope.table,
|
|
53
|
+
schema: (0, schema_1.resolveTursoSchema)(resolvedOptions.schemaManifest, request.database, scope.table),
|
|
54
|
+
}))
|
|
55
|
+
.filter((item) => item.schema !== undefined);
|
|
56
|
+
let endpoint;
|
|
57
|
+
if (declaredSchemas.length > 0) {
|
|
58
|
+
phase = "schema";
|
|
59
|
+
const connection = await (0, turso_client_1.resolveDatabaseConnection)(request.database, databaseOptions);
|
|
60
|
+
const schemaClient = (0, turso_client_1.createTursoClient)(connection);
|
|
61
|
+
try {
|
|
62
|
+
if (connection.created) {
|
|
63
|
+
await (0, turso_client_1.waitForDatabaseReady)(schemaClient);
|
|
64
|
+
}
|
|
65
|
+
for (const item of declaredSchemas) {
|
|
66
|
+
const schema = item.schema;
|
|
67
|
+
const cacheKey = `${connection.url}\u0000${item.table}\u0000${schema.version}`;
|
|
68
|
+
let application = tokenSchemaApplications.get(cacheKey);
|
|
69
|
+
if (!application) {
|
|
70
|
+
application = (0, schema_1.ensureTableSchema)({
|
|
71
|
+
client: schemaClient,
|
|
72
|
+
table: item.table,
|
|
73
|
+
value: {},
|
|
74
|
+
autoCreateTable: resolvedOptions.autoCreateTable !== false,
|
|
75
|
+
autoMigrateAddColumns: resolvedOptions.autoMigrateAddColumns !== false,
|
|
76
|
+
declaredColumns: schema.columns,
|
|
77
|
+
schemaVersion: schema.version,
|
|
78
|
+
});
|
|
79
|
+
tokenSchemaApplications.set(cacheKey, application);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
await application;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
tokenSchemaApplications.delete(cacheKey);
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
await schemaClient.close();
|
|
92
|
+
}
|
|
93
|
+
endpoint = { url: connection.url, created: connection.created };
|
|
94
|
+
if (connection.created) {
|
|
95
|
+
(0, turso_client_1.cacheDatabaseEndpoint)(request.database, databaseOptions, connection.url);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
endpoint = await (0, turso_client_1.resolveDatabaseEndpoint)(request.database, databaseOptions);
|
|
100
|
+
}
|
|
48
101
|
phase = "issue-token";
|
|
49
102
|
const token = await (0, token_1.issueDatabaseToken)({
|
|
50
103
|
database: request.database,
|
|
@@ -52,7 +105,7 @@ async function handleToken(context, options) {
|
|
|
52
105
|
ttlSeconds: request.ttlSeconds,
|
|
53
106
|
options: databaseOptions,
|
|
54
107
|
});
|
|
55
|
-
if (endpoint.created) {
|
|
108
|
+
if (endpoint.created && declaredSchemas.length === 0) {
|
|
56
109
|
phase = "database-ready";
|
|
57
110
|
const client = (0, turso_client_1.createTursoClient)({
|
|
58
111
|
url: endpoint.url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turso_token.js","sourceRoot":"","sources":["../../src/functions/turso_token.ts"],"names":[],"mappings":";;AAEA,4CAA8D;AAC9D,wCAGsB;AACtB,
|
|
1
|
+
{"version":3,"file":"turso_token.js","sourceRoot":"","sources":["../../src/functions/turso_token.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/crud.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import { ColumnDefinition } from "./schema";
|
|
1
2
|
import { TursoClient } from "./turso_client";
|
|
2
3
|
import { TursoRequestBody } from "./types";
|
|
3
4
|
export declare function fetchDocumentForRules(client: TursoClient, request: Required<Pick<TursoRequestBody, "database" | "table">> & TursoRequestBody): Promise<Record<string, unknown> | null>;
|
|
4
|
-
export declare function executeCrud({ client, method, request, autoCreateTable, autoMigrateAddColumns, }: {
|
|
5
|
+
export declare function executeCrud({ client, method, request, autoCreateTable, autoMigrateAddColumns, declaredSchema, schemaCacheKey, }: {
|
|
5
6
|
client: TursoClient;
|
|
6
7
|
method: "GET" | "POST" | "PUT" | "DELETE";
|
|
7
8
|
request: Required<Pick<TursoRequestBody, "database" | "table">> & TursoRequestBody;
|
|
8
9
|
autoCreateTable: boolean;
|
|
9
10
|
autoMigrateAddColumns: boolean;
|
|
11
|
+
declaredSchema?: {
|
|
12
|
+
columns: ColumnDefinition[];
|
|
13
|
+
version: string;
|
|
14
|
+
} | undefined;
|
|
15
|
+
schemaCacheKey?: string | undefined;
|
|
10
16
|
}): Promise<unknown>;
|
package/dist/lib/crud.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.fetchDocumentForRules = fetchDocumentForRules;
|
|
|
4
4
|
exports.executeCrud = executeCrud;
|
|
5
5
|
const request_1 = require("./request");
|
|
6
6
|
const schema_1 = require("./schema");
|
|
7
|
+
const declaredSchemaApplications = new Map();
|
|
7
8
|
async function fetchDocumentForRules(client, request) {
|
|
8
9
|
const rows = await selectRows(client, {
|
|
9
10
|
...request,
|
|
@@ -11,7 +12,30 @@ async function fetchDocumentForRules(client, request) {
|
|
|
11
12
|
}, true);
|
|
12
13
|
return rows[0] ?? null;
|
|
13
14
|
}
|
|
14
|
-
async function executeCrud({ client, method, request, autoCreateTable, autoMigrateAddColumns, }) {
|
|
15
|
+
async function executeCrud({ client, method, request, autoCreateTable, autoMigrateAddColumns, declaredSchema, schemaCacheKey, }) {
|
|
16
|
+
if (declaredSchema) {
|
|
17
|
+
const cacheKey = `${schemaCacheKey ?? request.database}\u0000${request.table}\u0000${declaredSchema.version}`;
|
|
18
|
+
let application = declaredSchemaApplications.get(cacheKey);
|
|
19
|
+
if (!application) {
|
|
20
|
+
application = (0, schema_1.ensureTableSchema)({
|
|
21
|
+
client,
|
|
22
|
+
table: request.table,
|
|
23
|
+
value: {},
|
|
24
|
+
autoCreateTable,
|
|
25
|
+
autoMigrateAddColumns,
|
|
26
|
+
declaredColumns: declaredSchema.columns,
|
|
27
|
+
schemaVersion: declaredSchema.version,
|
|
28
|
+
});
|
|
29
|
+
declaredSchemaApplications.set(cacheKey, application);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
await application;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
declaredSchemaApplications.delete(cacheKey);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
15
39
|
switch (method) {
|
|
16
40
|
case "GET":
|
|
17
41
|
if (request.count) {
|
|
@@ -20,11 +44,11 @@ async function executeCrud({ client, method, request, autoCreateTable, autoMigra
|
|
|
20
44
|
return await selectRows(client, request);
|
|
21
45
|
case "POST":
|
|
22
46
|
if (request.indexKey) {
|
|
23
|
-
return await updateRows(client, request, autoCreateTable, autoMigrateAddColumns);
|
|
47
|
+
return await updateRows(client, request, autoCreateTable, autoMigrateAddColumns, declaredSchema);
|
|
24
48
|
}
|
|
25
|
-
return await insertRow(client, request, autoCreateTable, autoMigrateAddColumns);
|
|
49
|
+
return await insertRow(client, request, autoCreateTable, autoMigrateAddColumns, declaredSchema);
|
|
26
50
|
case "PUT":
|
|
27
|
-
return await updateRows(client, request, autoCreateTable, autoMigrateAddColumns);
|
|
51
|
+
return await updateRows(client, request, autoCreateTable, autoMigrateAddColumns, declaredSchema);
|
|
28
52
|
case "DELETE":
|
|
29
53
|
await deleteRows(client, request);
|
|
30
54
|
return [];
|
|
@@ -53,7 +77,7 @@ async function countRows(client, request) {
|
|
|
53
77
|
const count = row?.count;
|
|
54
78
|
return typeof count === "number" ? count : Number(count ?? 0);
|
|
55
79
|
}
|
|
56
|
-
async function insertRow(client, request, autoCreateTable, autoMigrateAddColumns) {
|
|
80
|
+
async function insertRow(client, request, autoCreateTable, autoMigrateAddColumns, declaredSchema) {
|
|
57
81
|
const value = requireValue(request.value);
|
|
58
82
|
const now = Date.now();
|
|
59
83
|
const row = {
|
|
@@ -83,6 +107,8 @@ async function insertRow(client, request, autoCreateTable, autoMigrateAddColumns
|
|
|
83
107
|
value: row,
|
|
84
108
|
autoCreateTable,
|
|
85
109
|
autoMigrateAddColumns,
|
|
110
|
+
declaredColumns: declaredSchema?.columns,
|
|
111
|
+
schemaVersion: declaredSchema?.version,
|
|
86
112
|
});
|
|
87
113
|
result = await client.execute(statement);
|
|
88
114
|
}
|
|
@@ -93,7 +119,7 @@ function isMissingTursoSchemaError(error) {
|
|
|
93
119
|
return /(?:no such table|has no column named|no column named|unknown column)/i
|
|
94
120
|
.test(message);
|
|
95
121
|
}
|
|
96
|
-
async function updateRows(client, request, autoCreateTable, autoMigrateAddColumns) {
|
|
122
|
+
async function updateRows(client, request, autoCreateTable, autoMigrateAddColumns, declaredSchema) {
|
|
97
123
|
const value = requireValue(request.value);
|
|
98
124
|
const row = {
|
|
99
125
|
...value,
|
|
@@ -105,6 +131,8 @@ async function updateRows(client, request, autoCreateTable, autoMigrateAddColumn
|
|
|
105
131
|
value: row,
|
|
106
132
|
autoCreateTable,
|
|
107
133
|
autoMigrateAddColumns,
|
|
134
|
+
declaredColumns: declaredSchema?.columns,
|
|
135
|
+
schemaVersion: declaredSchema?.version,
|
|
108
136
|
});
|
|
109
137
|
const where = buildWhereClause(request);
|
|
110
138
|
if (!where.sql) {
|
package/dist/lib/crud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/lib/crud.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../../src/lib/crud.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/schema.d.ts
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { SqlValue, TursoClient } from "./turso_client";
|
|
2
|
+
import type { TursoSchemaManifest } from "./types";
|
|
2
3
|
export interface ColumnDefinition {
|
|
3
4
|
name: string;
|
|
4
5
|
type: string;
|
|
5
6
|
}
|
|
6
|
-
export declare function ensureTableSchema({ client, table, value, autoCreateTable, autoMigrateAddColumns, }: {
|
|
7
|
+
export declare function ensureTableSchema({ client, table, value, autoCreateTable, autoMigrateAddColumns, declaredColumns, schemaVersion, }: {
|
|
7
8
|
client: TursoClient;
|
|
8
9
|
table: string;
|
|
9
10
|
value: Record<string, unknown>;
|
|
10
11
|
autoCreateTable: boolean;
|
|
11
12
|
autoMigrateAddColumns: boolean;
|
|
13
|
+
declaredColumns?: readonly ColumnDefinition[] | undefined;
|
|
14
|
+
schemaVersion?: string | undefined;
|
|
12
15
|
}): Promise<void>;
|
|
13
16
|
export declare function encodeSqlValue(value: unknown): SqlValue;
|
|
14
17
|
export declare function decodeRow(row: unknown, columns?: readonly string[]): Record<string, unknown>;
|
|
18
|
+
export declare function resolveTursoSchema(manifest: TursoSchemaManifest | undefined, database: string, table: string): {
|
|
19
|
+
columns: ColumnDefinition[];
|
|
20
|
+
version: string;
|
|
21
|
+
} | undefined;
|
|
15
22
|
export declare function quoteIdentifier(identifier: string): string;
|
package/dist/lib/schema.js
CHANGED
|
@@ -3,18 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ensureTableSchema = ensureTableSchema;
|
|
4
4
|
exports.encodeSqlValue = encodeSqlValue;
|
|
5
5
|
exports.decodeRow = decodeRow;
|
|
6
|
+
exports.resolveTursoSchema = resolveTursoSchema;
|
|
6
7
|
exports.quoteIdentifier = quoteIdentifier;
|
|
7
8
|
const request_1 = require("./request");
|
|
8
9
|
const reservedFields = new Set(["id", "created_at", "updated_at"]);
|
|
9
|
-
async function ensureTableSchema({ client, table, value, autoCreateTable, autoMigrateAddColumns, }) {
|
|
10
|
+
async function ensureTableSchema({ client, table, value, autoCreateTable, autoMigrateAddColumns, declaredColumns, schemaVersion = "runtime", }) {
|
|
10
11
|
const tableName = (0, request_1.validateIdentifier)(table, "table");
|
|
11
|
-
const columns = buildColumnDefinitions(value);
|
|
12
|
+
const columns = buildColumnDefinitions(value, declaredColumns);
|
|
12
13
|
if (autoCreateTable) {
|
|
13
14
|
await createTableIfNotExists(client, tableName, columns);
|
|
14
|
-
await createMigrationTableIfNotExists(client);
|
|
15
15
|
}
|
|
16
16
|
if (autoMigrateAddColumns) {
|
|
17
|
-
await
|
|
17
|
+
await createMigrationTableIfNotExists(client);
|
|
18
|
+
await addMissingColumns(client, tableName, columns, schemaVersion);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
function encodeSqlValue(value) {
|
|
@@ -67,15 +68,46 @@ function decodeSqlValue(value) {
|
|
|
67
68
|
}
|
|
68
69
|
return value;
|
|
69
70
|
}
|
|
70
|
-
function buildColumnDefinitions(value) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
function buildColumnDefinitions(value, declaredColumns = []) {
|
|
72
|
+
const columns = new Map();
|
|
73
|
+
for (const column of declaredColumns) {
|
|
74
|
+
const name = (0, request_1.validateIdentifier)(column.name, "column");
|
|
75
|
+
if (reservedFields.has(name)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
columns.set(name, { name, type: normalizeDeclaredType(column.type) });
|
|
79
|
+
}
|
|
80
|
+
for (const [key, item] of Object.entries(value)) {
|
|
81
|
+
if (reservedFields.has(key) || columns.has(key)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
columns.set(key, {
|
|
85
|
+
name: (0, request_1.validateIdentifier)(key, "column"),
|
|
86
|
+
type: inferSqlType(item, key),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return [...columns.values()];
|
|
90
|
+
}
|
|
91
|
+
function normalizeDeclaredType(type) {
|
|
92
|
+
const normalized = type.trim().toUpperCase();
|
|
93
|
+
if (/^(?:TINYINT|SMALLINT|MEDIUMINT|INT|INTEGER|BIGINT)(?:\b|\()/i.test(normalized)) {
|
|
94
|
+
return "INTEGER";
|
|
95
|
+
}
|
|
96
|
+
if (/^(?:FLOAT|DOUBLE|REAL|DECIMAL|NUMERIC)(?:\b|\()/i.test(normalized)) {
|
|
97
|
+
return "REAL";
|
|
98
|
+
}
|
|
99
|
+
if (/^(?:TEXT|CHAR|VARCHAR|JSON)(?:\b|\()/i.test(normalized)) {
|
|
100
|
+
return "TEXT";
|
|
101
|
+
}
|
|
102
|
+
if (normalized === "BLOB") {
|
|
103
|
+
return normalized;
|
|
104
|
+
}
|
|
105
|
+
throw new request_1.HttpError(400, `Unsupported Turso schema type: ${type}`);
|
|
77
106
|
}
|
|
78
|
-
function inferSqlType(value) {
|
|
107
|
+
function inferSqlType(value, column) {
|
|
108
|
+
if (value === null || value === undefined) {
|
|
109
|
+
throw new request_1.HttpError(400, `Cannot infer SQL type for column ${column} from null. Provide a schema manifest.`);
|
|
110
|
+
}
|
|
79
111
|
if (typeof value === "number") {
|
|
80
112
|
return Number.isInteger(value) ? "INTEGER" : "REAL";
|
|
81
113
|
}
|
|
@@ -110,23 +142,35 @@ async function createMigrationTableIfNotExists(client) {
|
|
|
110
142
|
"created_at INTEGER" +
|
|
111
143
|
")");
|
|
112
144
|
}
|
|
113
|
-
async function addMissingColumns(client, table, columns) {
|
|
145
|
+
async function addMissingColumns(client, table, columns, schemaVersion) {
|
|
114
146
|
const existing = await getColumns(client, table);
|
|
115
147
|
for (const column of columns) {
|
|
116
148
|
const current = existing.get(column.name);
|
|
117
149
|
if (!current) {
|
|
118
|
-
|
|
150
|
+
try {
|
|
151
|
+
await client.execute(`ALTER TABLE ${quoteIdentifier(table)} ADD COLUMN ${quoteIdentifier(column.name)} ${column.type}`);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (!isDuplicateColumnError(error)) {
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
const latest = await getColumns(client, table);
|
|
158
|
+
const migrated = latest.get(column.name);
|
|
159
|
+
if (!migrated || !isCompatibleType(migrated, column.type)) {
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
119
163
|
await client.execute({
|
|
120
164
|
sql: "INSERT OR IGNORE INTO __masamune_schema_migrations " +
|
|
121
165
|
"(id, database_name, table_name, column_name, column_type, operation, created_at) " +
|
|
122
166
|
"VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
123
167
|
args: [
|
|
124
|
-
`${table}:${column.name}`,
|
|
168
|
+
`${schemaVersion}:${table}:${column.name}`,
|
|
125
169
|
"",
|
|
126
170
|
table,
|
|
127
171
|
column.name,
|
|
128
172
|
column.type,
|
|
129
|
-
|
|
173
|
+
`add_column@${schemaVersion}`,
|
|
130
174
|
Date.now(),
|
|
131
175
|
],
|
|
132
176
|
});
|
|
@@ -137,6 +181,29 @@ async function addMissingColumns(client, table, columns) {
|
|
|
137
181
|
}
|
|
138
182
|
}
|
|
139
183
|
}
|
|
184
|
+
function resolveTursoSchema(manifest, database, table) {
|
|
185
|
+
if (!manifest) {
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
const match = Object.values(manifest.tables).find((item) => item.table === table && matchesDatabase(item.database, database));
|
|
189
|
+
return match
|
|
190
|
+
? { columns: match.columns.map((column) => ({ ...column })), version: manifest.version }
|
|
191
|
+
: undefined;
|
|
192
|
+
}
|
|
193
|
+
function matchesDatabase(pattern, database) {
|
|
194
|
+
if (pattern === "*") {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
const source = pattern
|
|
198
|
+
.replace(/[.+?^${}()|[\]\\]/g, "\\$&")
|
|
199
|
+
.replace(/\*/g, ".*")
|
|
200
|
+
.replace(/:[A-Za-z_][A-Za-z0-9_]*/g, "[^/]+");
|
|
201
|
+
return new RegExp(`^${source}$`).test(database);
|
|
202
|
+
}
|
|
203
|
+
function isDuplicateColumnError(error) {
|
|
204
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
205
|
+
return /duplicate column(?: name)?/i.test(message);
|
|
206
|
+
}
|
|
140
207
|
async function getColumns(client, table) {
|
|
141
208
|
const result = await client.execute(`PRAGMA table_info(${quoteIdentifier(table)})`);
|
|
142
209
|
const columns = new Map();
|
package/dist/lib/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -15,9 +15,23 @@ export interface TursoWorkersOptions extends WorkersOptions {
|
|
|
15
15
|
autoCreateDatabase?: boolean | undefined;
|
|
16
16
|
autoCreateTable?: boolean | undefined;
|
|
17
17
|
autoMigrateAddColumns?: boolean | undefined;
|
|
18
|
+
schemaManifest?: TursoSchemaManifest | undefined;
|
|
18
19
|
maxTtlSeconds?: number | undefined;
|
|
19
20
|
serverTokenTtlSeconds?: number | undefined;
|
|
20
21
|
}
|
|
22
|
+
export interface TursoSchemaColumn {
|
|
23
|
+
name: string;
|
|
24
|
+
type: string;
|
|
25
|
+
}
|
|
26
|
+
export interface TursoSchemaTable {
|
|
27
|
+
database: string;
|
|
28
|
+
table: string;
|
|
29
|
+
columns: TursoSchemaColumn[];
|
|
30
|
+
}
|
|
31
|
+
export interface TursoSchemaManifest {
|
|
32
|
+
version: string;
|
|
33
|
+
tables: Record<string, TursoSchemaTable>;
|
|
34
|
+
}
|
|
21
35
|
export interface TursoRequestBody {
|
|
22
36
|
database?: string | undefined;
|
|
23
37
|
table?: string | undefined;
|
package/package.json
CHANGED