@warlock.js/cascade 5.24.0 → 5.26.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 +30 -5
- package/README.md +101 -101
- package/bin/cascade.js +0 -0
- package/cjs/index.cjs +307 -88
- 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/contracts/query-builder.contract.d.mts +7 -0
- package/esm/contracts/query-builder.contract.d.mts.map +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 +5 -0
- package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -1
- package/esm/drivers/mongodb/mongodb-query-builder.mjs +11 -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 +55 -7
- package/esm/drivers/postgres/postgres-driver.mjs.map +1 -1
- package/esm/drivers/postgres/postgres-query-builder.d.mts +5 -0
- package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -1
- package/esm/drivers/postgres/postgres-query-builder.mjs +15 -0
- package/esm/drivers/postgres/postgres-query-builder.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/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 +4 -3
- package/esm/index.mjs +2 -1
- package/esm/migration/index.d.mts +1 -1
- package/esm/migration/migration-order.mjs +6 -3
- package/esm/migration/migration-order.mjs.map +1 -1
- package/esm/migration/migration-runner.d.mts +5 -3
- package/esm/migration/migration-runner.d.mts.map +1 -1
- package/esm/migration/migration-runner.mjs +3 -2
- package/esm/migration/migration-runner.mjs.map +1 -1
- package/esm/migration/migration.d.mts +11 -1
- package/esm/migration/migration.d.mts.map +1 -1
- package/esm/migration/migration.mjs +45 -2
- package/esm/migration/migration.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 +38 -11
- package/esm/model/methods/query-methods.mjs.map +1 -1
- package/esm/model/methods/write-methods.mjs.map +1 -1
- package/esm/model/model.d.mts +2 -2
- package/esm/model/model.d.mts.map +1 -1
- package/esm/model/model.mjs +1 -1
- package/esm/model/model.mjs.map +1 -1
- package/esm/query-builder/query-builder.d.mts +5 -0
- package/esm/query-builder/query-builder.d.mts.map +1 -1
- package/esm/query-builder/query-builder.mjs +16 -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 +3 -52
- package/esm/writer/database-writer.mjs.map +1 -1
- package/llms-full.txt +2911 -2864
- 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 +215 -205
- 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
|
@@ -148,6 +148,8 @@ declare class PostgresDriver implements DriverContract {
|
|
|
148
148
|
* @param listener - Callback function to invoke
|
|
149
149
|
*/
|
|
150
150
|
on(event: string, listener: DriverEventListener): void;
|
|
151
|
+
/** Remove a previously registered driver event listener. */
|
|
152
|
+
off(event: string, listener: DriverEventListener): void;
|
|
151
153
|
/**
|
|
152
154
|
* Serialize data for storage in PostgreSQL.
|
|
153
155
|
*
|
|
@@ -493,6 +495,13 @@ declare class PostgresDriver implements DriverContract {
|
|
|
493
495
|
*/
|
|
494
496
|
private recordColumnTypes;
|
|
495
497
|
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<PostgresQueryResult<T>>;
|
|
498
|
+
/** Execute SQL and emit its public query event when the event is observed. */
|
|
499
|
+
private executePostgresQuery;
|
|
500
|
+
/**
|
|
501
|
+
* Emit a `query` event. An observer is never allowed to fail the query it
|
|
502
|
+
* observes, so a throwing listener is swallowed here.
|
|
503
|
+
*/
|
|
504
|
+
private emitQueryEvent;
|
|
496
505
|
/**
|
|
497
506
|
* Emit an event to all registered listeners.
|
|
498
507
|
*
|
|
@@ -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
|
*
|
|
@@ -810,12 +817,12 @@ var PostgresDriver = class {
|
|
|
810
817
|
if (options?.isolationLevel) beginSql += ` ISOLATION LEVEL ${options.isolationLevel.toUpperCase()}`;
|
|
811
818
|
if (options?.readOnly) beginSql += " READ ONLY";
|
|
812
819
|
if (options?.deferrable) beginSql += " DEFERRABLE";
|
|
813
|
-
await client.query(beginSql);
|
|
820
|
+
await this.executePostgresQuery(() => client.query(beginSql), beginSql);
|
|
814
821
|
transactionStarted = true;
|
|
815
|
-
for (const [name, value] of settings) await client.query("SELECT set_config($1, $2, true)", [name, String(value)]);
|
|
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)]);
|
|
816
823
|
} catch (error) {
|
|
817
824
|
if (transactionStarted) try {
|
|
818
|
-
await client.query("ROLLBACK");
|
|
825
|
+
await this.executePostgresQuery(() => client.query("ROLLBACK"), "ROLLBACK");
|
|
819
826
|
} catch {}
|
|
820
827
|
client.release(error instanceof Error ? error : new Error(String(error)));
|
|
821
828
|
throw error;
|
|
@@ -824,7 +831,7 @@ var PostgresDriver = class {
|
|
|
824
831
|
context: client,
|
|
825
832
|
commit: async () => {
|
|
826
833
|
try {
|
|
827
|
-
await client.query("COMMIT");
|
|
834
|
+
await this.executePostgresQuery(() => client.query("COMMIT"), "COMMIT");
|
|
828
835
|
} catch (error) {
|
|
829
836
|
client.release(error instanceof Error ? error : new Error(String(error)));
|
|
830
837
|
throw error;
|
|
@@ -833,7 +840,7 @@ var PostgresDriver = class {
|
|
|
833
840
|
},
|
|
834
841
|
rollback: async () => {
|
|
835
842
|
try {
|
|
836
|
-
await client.query("ROLLBACK");
|
|
843
|
+
await this.executePostgresQuery(() => client.query("ROLLBACK"), "ROLLBACK");
|
|
837
844
|
} catch (error) {
|
|
838
845
|
client.release(error instanceof Error ? error : new Error(String(error)));
|
|
839
846
|
throw error;
|
|
@@ -1066,8 +1073,8 @@ var PostgresDriver = class {
|
|
|
1066
1073
|
paramCount: params.length
|
|
1067
1074
|
}
|
|
1068
1075
|
});
|
|
1069
|
-
if (txClient) result = await txClient.query(sql, params);
|
|
1070
|
-
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);
|
|
1071
1078
|
if (this.config.logging) {
|
|
1072
1079
|
const duration = (performance.now() - startTime).toFixed(2);
|
|
1073
1080
|
log.success({
|
|
@@ -1100,6 +1107,47 @@ var PostgresDriver = class {
|
|
|
1100
1107
|
throw error;
|
|
1101
1108
|
}
|
|
1102
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
|
+
}
|
|
1103
1151
|
/**
|
|
1104
1152
|
* Emit an event to all registered listeners.
|
|
1105
1153
|
*
|