@dudousxd/nestjs-durable-store-typeorm 0.1.4 → 0.1.5
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/schema.d.ts.map +1 -1
- package/dist/schema.js +38 -21
- package/dist/schema.js.map +1 -1
- package/package.json +2 -2
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFtF"}
|
package/dist/schema.js
CHANGED
|
@@ -20,6 +20,7 @@ async function ensureTypeOrmDurableSchema(dataSource) {
|
|
|
20
20
|
const type = String(dataSource.options.type);
|
|
21
21
|
const isPg = type === 'postgres' || type === 'aurora-postgres';
|
|
22
22
|
const isMysql = type === 'mysql' || type === 'mariadb' || type === 'aurora-mysql';
|
|
23
|
+
const isSqlite = type === 'sqlite' || type === 'better-sqlite3' || type === 'expo';
|
|
23
24
|
// Keyed/short strings must be varchar on MySQL (a `text` PK/index needs a key length); `text`
|
|
24
25
|
// for the free-form JSON payloads. Dates use the dialect's native timestamp type.
|
|
25
26
|
const str = 'varchar(191)';
|
|
@@ -53,31 +54,35 @@ async function ensureTypeOrmDurableSchema(dataSource) {
|
|
|
53
54
|
)`,
|
|
54
55
|
];
|
|
55
56
|
// Additive nullable columns gained across versions (e.g. `input`, `events`, `enqueuedAt`). On a
|
|
56
|
-
// table that predates them, `CREATE TABLE IF NOT EXISTS` above is a no-op, so back-fill
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
[
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
[
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
// table that predates them, `CREATE TABLE IF NOT EXISTS` above is a no-op, so back-fill the ones
|
|
58
|
+
// that are actually missing — the auto-schema self-heals instead of needing a manual migration.
|
|
59
|
+
// We check the live columns first (rather than ALTER-and-ignore) so a *real* ALTER failure
|
|
60
|
+
// surfaces instead of being swallowed as a presumed "column already exists".
|
|
61
|
+
const additive = {
|
|
62
|
+
durable_workflow_runs: [
|
|
63
|
+
['input', txt],
|
|
64
|
+
['output', txt],
|
|
65
|
+
['error', txt],
|
|
66
|
+
],
|
|
67
|
+
durable_step_checkpoints: [
|
|
68
|
+
['input', txt],
|
|
69
|
+
['output', txt],
|
|
70
|
+
['error', txt],
|
|
71
|
+
['events', txt],
|
|
72
|
+
['workerGroup', str],
|
|
73
|
+
['enqueuedAt', ts],
|
|
74
|
+
],
|
|
75
|
+
};
|
|
69
76
|
const runner = dataSource.createQueryRunner();
|
|
70
77
|
try {
|
|
71
78
|
for (const sql of tables)
|
|
72
79
|
await runner.query(sql);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
catch {
|
|
80
|
-
/* column already exists */
|
|
80
|
+
for (const [table, cols] of Object.entries(additive)) {
|
|
81
|
+
const have = await existingColumns(runner, table, { isSqlite, isMysql });
|
|
82
|
+
for (const [col, colType] of cols) {
|
|
83
|
+
if (!have.has(col)) {
|
|
84
|
+
await runner.query(`ALTER TABLE ${q(table)} ADD COLUMN ${q(col)} ${colType}`);
|
|
85
|
+
}
|
|
81
86
|
}
|
|
82
87
|
}
|
|
83
88
|
// MySQL has no `CREATE INDEX IF NOT EXISTS`; create it best-effort and ignore "already exists".
|
|
@@ -92,4 +97,16 @@ async function ensureTypeOrmDurableSchema(dataSource) {
|
|
|
92
97
|
await runner.release();
|
|
93
98
|
}
|
|
94
99
|
}
|
|
100
|
+
/** The columns that currently exist on `table`, so the schema can add only the missing ones
|
|
101
|
+
* (instead of ALTER-and-swallow, which would also hide a genuine ALTER failure). */
|
|
102
|
+
async function existingColumns(runner, table, d) {
|
|
103
|
+
if (d.isSqlite) {
|
|
104
|
+
const rows = (await runner.query(`PRAGMA table_info("${table}")`));
|
|
105
|
+
return new Set(rows.map((r) => r.name));
|
|
106
|
+
}
|
|
107
|
+
// Postgres + MySQL both expose information_schema; scope to the connection's own schema/db.
|
|
108
|
+
const scope = d.isMysql ? 'TABLE_SCHEMA = DATABASE()' : 'table_schema = current_schema()';
|
|
109
|
+
const rows = (await runner.query(`SELECT column_name AS name FROM information_schema.columns WHERE table_name = ? AND ${scope}`, [table]));
|
|
110
|
+
return new Set(rows.map((r) => (r.name ?? r.COLUMN_NAME)));
|
|
111
|
+
}
|
|
95
112
|
//# sourceMappingURL=schema.js.map
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;AAgBA,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dudousxd/nestjs-durable-store-typeorm",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "TypeORM adapter for the nestjs-durable StateStore",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Davide Carvalho",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"reflect-metadata": "0.2.2",
|
|
25
25
|
"typeorm": "0.3.30",
|
|
26
26
|
"typescript": "5.9.3",
|
|
27
|
-
"@dudousxd/nestjs-durable-core": "^0.3.
|
|
27
|
+
"@dudousxd/nestjs-durable-core": "^0.3.1"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"build": "tsc -p tsconfig.json",
|