@warlock.js/cascade 5.23.2 → 5.25.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/CHANGELOG.md +352 -329
- package/README.md +101 -101
- package/bin/cascade.js +0 -0
- package/cjs/index.cjs +208 -69
- package/cjs/index.cjs.map +1 -1
- package/esm/contracts/database-driver.contract.d.mts +22 -1
- package/esm/contracts/database-driver.contract.d.mts.map +1 -1
- package/esm/contracts/index.d.mts +1 -1
- package/esm/data-source/data-source-registry.d.mts +8 -6
- package/esm/data-source/data-source-registry.d.mts.map +1 -1
- package/esm/data-source/data-source-registry.mjs +7 -1
- package/esm/data-source/data-source-registry.mjs.map +1 -1
- package/esm/drivers/mongodb/mongodb-driver.d.mts +13 -0
- package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-driver.mjs +71 -2
- package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-builder.mjs +2 -1
- package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-driver.d.mts +9 -0
- package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-driver.mjs +61 -5
- package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-query-parser.d.mts +1 -4
- package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-query-parser.mjs +4 -5
- package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -1
- package/esm/drivers/postgres/types.d.mts +5 -0
- package/esm/drivers/postgres/types.d.mts.map +1 -1
- package/esm/errors/unsafe-filter.error.mjs.map +1 -1
- package/esm/errors/unsafe-raw-expression.error.mjs.map +1 -1
- package/esm/errors/unsupported-lock-for-update.error.d.mts +11 -0
- package/esm/errors/unsupported-lock-for-update.error.d.mts.map +1 -0
- package/esm/errors/unsupported-lock-for-update.error.mjs +16 -0
- package/esm/errors/unsupported-lock-for-update.error.mjs.map +1 -0
- package/esm/events/model-events.mjs.map +1 -1
- package/esm/index.d.mts +3 -2
- package/esm/index.mjs +2 -1
- package/esm/migration/migration-runner.mjs.map +1 -1
- package/esm/migration/sql-grammar.mjs.map +1 -1
- package/esm/model/generate-model-id.mjs +23 -0
- package/esm/model/generate-model-id.mjs.map +1 -0
- package/esm/model/methods/delete-methods.mjs.map +1 -1
- package/esm/model/methods/meta-methods.mjs.map +1 -1
- package/esm/model/methods/query-methods.mjs +25 -2
- package/esm/model/methods/query-methods.mjs.map +1 -1
- package/esm/model/methods/write-methods.mjs.map +1 -1
- package/esm/query-builder/query-builder.mjs +1 -1
- package/esm/query-builder/query-builder.mjs.map +1 -1
- package/esm/utils/sanitize-filter.mjs.map +1 -1
- package/esm/validation/plugins/database-rules-plugin.mjs.map +1 -1
- package/esm/writer/database-writer.d.mts +0 -33
- package/esm/writer/database-writer.d.mts.map +1 -1
- package/esm/writer/database-writer.mjs +4 -52
- package/esm/writer/database-writer.mjs.map +1 -1
- package/llms-full.txt +2835 -2783
- package/package.json +5 -5
- package/skills/aggregate-data/SKILL.md +165 -165
- package/skills/alter-migration/SKILL.md +531 -531
- package/skills/configure-delete-strategy/SKILL.md +130 -130
- package/skills/define-model/SKILL.md +205 -205
- package/skills/define-relations/SKILL.md +171 -171
- package/skills/manage-data-sources/SKILL.md +177 -140
- package/skills/manage-transactions/SKILL.md +233 -208
- package/skills/paginate-results/SKILL.md +122 -122
- package/skills/perform-atomic-ops/SKILL.md +156 -156
- package/skills/query-data/SKILL.md +213 -213
- package/skills/run-cascade-cli/SKILL.md +125 -125
- package/skills/search-by-vector/SKILL.md +127 -127
- package/skills/subscribe-to-model-events/SKILL.md +148 -148
- package/skills/track-changes/SKILL.md +127 -127
- package/skills/write-migration/SKILL.md +206 -206
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-driver.d.mts","names":[],"sources":["../../../../../../../../cascade/src/drivers/postgres/postgres-driver.ts"],"mappings":";;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"postgres-driver.d.mts","names":[],"sources":["../../../../../../../../cascade/src/drivers/postgres/postgres-driver.ts"],"mappings":"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"}
|
|
@@ -309,6 +309,13 @@ var PostgresDriver = class {
|
|
|
309
309
|
if (!this._eventListeners.has(event)) this._eventListeners.set(event, /* @__PURE__ */ new Set());
|
|
310
310
|
this._eventListeners.get(event).add(listener);
|
|
311
311
|
}
|
|
312
|
+
/** Remove a previously registered driver event listener. */
|
|
313
|
+
off(event, listener) {
|
|
314
|
+
const listeners = this._eventListeners.get(event);
|
|
315
|
+
if (!listeners) return;
|
|
316
|
+
listeners.delete(listener);
|
|
317
|
+
if (listeners.size === 0) this._eventListeners.delete(event);
|
|
318
|
+
}
|
|
312
319
|
/**
|
|
313
320
|
* Serialize data for storage in PostgreSQL.
|
|
314
321
|
*
|
|
@@ -801,14 +808,22 @@ var PostgresDriver = class {
|
|
|
801
808
|
* @returns Transaction contract with commit/rollback methods
|
|
802
809
|
*/
|
|
803
810
|
async beginTransaction(options) {
|
|
811
|
+
const settings = Object.entries(options?.settings ?? {});
|
|
812
|
+
for (const [name] of settings) if (!/^[A-Za-z_][A-Za-z0-9_.]*$/.test(name)) throw new Error(`Invalid PostgreSQL transaction setting name: "${name}"`);
|
|
804
813
|
const client = await this.pool.connect();
|
|
814
|
+
let transactionStarted = false;
|
|
805
815
|
try {
|
|
806
816
|
let beginSql = "BEGIN";
|
|
807
817
|
if (options?.isolationLevel) beginSql += ` ISOLATION LEVEL ${options.isolationLevel.toUpperCase()}`;
|
|
808
818
|
if (options?.readOnly) beginSql += " READ ONLY";
|
|
809
819
|
if (options?.deferrable) beginSql += " DEFERRABLE";
|
|
810
|
-
await client.query(beginSql);
|
|
820
|
+
await this.executePostgresQuery(() => client.query(beginSql), beginSql);
|
|
821
|
+
transactionStarted = true;
|
|
822
|
+
for (const [name, value] of settings) await this.executePostgresQuery(() => client.query("SELECT set_config($1, $2, true)", [name, String(value)]), "SELECT set_config($1, $2, true)", [name, String(value)]);
|
|
811
823
|
} catch (error) {
|
|
824
|
+
if (transactionStarted) try {
|
|
825
|
+
await this.executePostgresQuery(() => client.query("ROLLBACK"), "ROLLBACK");
|
|
826
|
+
} catch {}
|
|
812
827
|
client.release(error instanceof Error ? error : new Error(String(error)));
|
|
813
828
|
throw error;
|
|
814
829
|
}
|
|
@@ -816,7 +831,7 @@ var PostgresDriver = class {
|
|
|
816
831
|
context: client,
|
|
817
832
|
commit: async () => {
|
|
818
833
|
try {
|
|
819
|
-
await client.query("COMMIT");
|
|
834
|
+
await this.executePostgresQuery(() => client.query("COMMIT"), "COMMIT");
|
|
820
835
|
} catch (error) {
|
|
821
836
|
client.release(error instanceof Error ? error : new Error(String(error)));
|
|
822
837
|
throw error;
|
|
@@ -825,7 +840,7 @@ var PostgresDriver = class {
|
|
|
825
840
|
},
|
|
826
841
|
rollback: async () => {
|
|
827
842
|
try {
|
|
828
|
-
await client.query("ROLLBACK");
|
|
843
|
+
await this.executePostgresQuery(() => client.query("ROLLBACK"), "ROLLBACK");
|
|
829
844
|
} catch (error) {
|
|
830
845
|
client.release(error instanceof Error ? error : new Error(String(error)));
|
|
831
846
|
throw error;
|
|
@@ -1058,8 +1073,8 @@ var PostgresDriver = class {
|
|
|
1058
1073
|
paramCount: params.length
|
|
1059
1074
|
}
|
|
1060
1075
|
});
|
|
1061
|
-
if (txClient) result = await txClient.query(sql, params);
|
|
1062
|
-
else result = await this.pool.query(sql, params);
|
|
1076
|
+
if (txClient) result = await this.executePostgresQuery(() => txClient.query(sql, params), sql, params);
|
|
1077
|
+
else result = await this.executePostgresQuery(() => this.pool.query(sql, params), sql, params);
|
|
1063
1078
|
if (this.config.logging) {
|
|
1064
1079
|
const duration = (performance.now() - startTime).toFixed(2);
|
|
1065
1080
|
log.success({
|
|
@@ -1092,6 +1107,47 @@ var PostgresDriver = class {
|
|
|
1092
1107
|
throw error;
|
|
1093
1108
|
}
|
|
1094
1109
|
}
|
|
1110
|
+
/** Execute SQL and emit its public query event when the event is observed. */
|
|
1111
|
+
async executePostgresQuery(execute, sql, bindings = []) {
|
|
1112
|
+
if (!this._eventListeners.get("query")?.size) return execute();
|
|
1113
|
+
const started = performance.now();
|
|
1114
|
+
const startedAt = performance.timeOrigin + started;
|
|
1115
|
+
let result;
|
|
1116
|
+
try {
|
|
1117
|
+
result = await execute();
|
|
1118
|
+
} catch (error) {
|
|
1119
|
+
this.emitQueryEvent({
|
|
1120
|
+
connection: this.name,
|
|
1121
|
+
driver: "postgres",
|
|
1122
|
+
sql,
|
|
1123
|
+
bindings,
|
|
1124
|
+
durationMs: performance.now() - started,
|
|
1125
|
+
startedAt,
|
|
1126
|
+
error
|
|
1127
|
+
});
|
|
1128
|
+
throw error;
|
|
1129
|
+
}
|
|
1130
|
+
const event = {
|
|
1131
|
+
connection: this.name,
|
|
1132
|
+
driver: "postgres",
|
|
1133
|
+
sql,
|
|
1134
|
+
bindings,
|
|
1135
|
+
durationMs: performance.now() - started,
|
|
1136
|
+
startedAt
|
|
1137
|
+
};
|
|
1138
|
+
if (typeof result.rowCount === "number") event.rowCount = result.rowCount;
|
|
1139
|
+
this.emitQueryEvent(event);
|
|
1140
|
+
return result;
|
|
1141
|
+
}
|
|
1142
|
+
/**
|
|
1143
|
+
* Emit a `query` event. An observer is never allowed to fail the query it
|
|
1144
|
+
* observes, so a throwing listener is swallowed here.
|
|
1145
|
+
*/
|
|
1146
|
+
emitQueryEvent(event) {
|
|
1147
|
+
try {
|
|
1148
|
+
this.emit("query", event);
|
|
1149
|
+
} catch {}
|
|
1150
|
+
}
|
|
1095
1151
|
/**
|
|
1096
1152
|
* Emit an event to all registered listeners.
|
|
1097
1153
|
*
|