@cadenza.io/service 1.19.2 → 1.20.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/dist/index.d.mts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +63 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +63 -25
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -85,6 +85,10 @@ interface DbOperationPayload {
|
|
|
85
85
|
target: string[];
|
|
86
86
|
action: OnConflictAction;
|
|
87
87
|
};
|
|
88
|
+
awaitExists?: Record<string, {
|
|
89
|
+
table: string;
|
|
90
|
+
column: string;
|
|
91
|
+
}>;
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
declare class DatabaseTask extends DeputyTask {
|
|
@@ -277,6 +281,7 @@ interface TableDefinition {
|
|
|
277
281
|
tableName: string;
|
|
278
282
|
fields: string[];
|
|
279
283
|
referenceFields: string[];
|
|
284
|
+
onDelete?: "cascade" | "set null" | "no action";
|
|
280
285
|
}[];
|
|
281
286
|
triggers?: Record<string, {
|
|
282
287
|
when: "before" | "after";
|
package/dist/index.d.ts
CHANGED
|
@@ -85,6 +85,10 @@ interface DbOperationPayload {
|
|
|
85
85
|
target: string[];
|
|
86
86
|
action: OnConflictAction;
|
|
87
87
|
};
|
|
88
|
+
awaitExists?: Record<string, {
|
|
89
|
+
table: string;
|
|
90
|
+
column: string;
|
|
91
|
+
}>;
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
declare class DatabaseTask extends DeputyTask {
|
|
@@ -277,6 +281,7 @@ interface TableDefinition {
|
|
|
277
281
|
tableName: string;
|
|
278
282
|
fields: string[];
|
|
279
283
|
referenceFields: string[];
|
|
284
|
+
onDelete?: "cascade" | "set null" | "no action";
|
|
280
285
|
}[];
|
|
281
286
|
triggers?: Record<string, {
|
|
282
287
|
when: "before" | "after";
|
package/dist/index.js
CHANGED
|
@@ -180,7 +180,7 @@ var DeputyTask = class extends import_core.Task {
|
|
|
180
180
|
__localTaskName: this.name,
|
|
181
181
|
__remoteRoutineName: this.remoteRoutineName,
|
|
182
182
|
__serviceName: this.serviceName,
|
|
183
|
-
__localRoutineExecId: metadata.__routineExecId,
|
|
183
|
+
__localRoutineExecId: metadata.__routineExecId ?? metadata.__metadata?.__routineExecId,
|
|
184
184
|
__executionTraceId: metadata.__executionTraceId ?? null,
|
|
185
185
|
__metadata: {
|
|
186
186
|
...metadata,
|
|
@@ -2032,19 +2032,27 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
2032
2032
|
}
|
|
2033
2033
|
delete ctx.data.context;
|
|
2034
2034
|
return {
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2035
|
+
queryData: {
|
|
2036
|
+
data: {
|
|
2037
|
+
...ctx.data,
|
|
2038
|
+
service_name: CadenzaService.serviceRegistry.serviceName,
|
|
2039
|
+
service_instance_id: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
2040
|
+
context_id: typeof context === "string" ? context : {
|
|
2041
|
+
subOperation: "insert",
|
|
2042
|
+
table: "context",
|
|
2043
|
+
data: {
|
|
2044
|
+
uuid: context.id,
|
|
2045
|
+
context: context.context,
|
|
2046
|
+
is_meta: ctx.data.isMeta
|
|
2047
|
+
},
|
|
2048
|
+
return: "uuid"
|
|
2049
|
+
}
|
|
2050
|
+
},
|
|
2051
|
+
awaitExists: {
|
|
2052
|
+
previousRoutineExecution: {
|
|
2053
|
+
table: "routine_execution",
|
|
2054
|
+
column: "uuid"
|
|
2055
|
+
}
|
|
2048
2056
|
}
|
|
2049
2057
|
}
|
|
2050
2058
|
};
|
|
@@ -2208,6 +2216,13 @@ var SCHEMA_TYPES = [
|
|
|
2208
2216
|
// src/database/DatabaseController.ts
|
|
2209
2217
|
var import_pg = require("pg");
|
|
2210
2218
|
var import_lodash_es = require("lodash-es");
|
|
2219
|
+
|
|
2220
|
+
// src/utils/promise.ts
|
|
2221
|
+
function sleep(ms) {
|
|
2222
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
2223
|
+
}
|
|
2224
|
+
|
|
2225
|
+
// src/database/DatabaseController.ts
|
|
2211
2226
|
var DatabaseController = class _DatabaseController {
|
|
2212
2227
|
constructor() {
|
|
2213
2228
|
this.dbClient = new import_pg.Pool({
|
|
@@ -2845,12 +2860,37 @@ var DatabaseController = class _DatabaseController {
|
|
|
2845
2860
|
}
|
|
2846
2861
|
}
|
|
2847
2862
|
async insertFunction(tableName, context) {
|
|
2848
|
-
const {
|
|
2863
|
+
const {
|
|
2864
|
+
data,
|
|
2865
|
+
transaction = true,
|
|
2866
|
+
fields = [],
|
|
2867
|
+
onConflict,
|
|
2868
|
+
awaitExists
|
|
2869
|
+
} = context;
|
|
2849
2870
|
if (!data || Array.isArray(data) && data.length === 0) {
|
|
2850
2871
|
return { errored: true, __error: "No data provided for insert" };
|
|
2851
2872
|
}
|
|
2852
2873
|
const client = transaction ? await this.getClient() : this.dbClient;
|
|
2853
2874
|
try {
|
|
2875
|
+
if (awaitExists) {
|
|
2876
|
+
for (const fk of Object.keys(awaitExists)) {
|
|
2877
|
+
if (data[fk] === void 0 || data[fk] === null) continue;
|
|
2878
|
+
const { table, column } = awaitExists[fk];
|
|
2879
|
+
let exists = false;
|
|
2880
|
+
let retries = 0;
|
|
2881
|
+
const maxRetries = 100;
|
|
2882
|
+
while (!exists && retries < maxRetries) {
|
|
2883
|
+
const result2 = await client.query(
|
|
2884
|
+
`SELECT EXISTS(SELECT 1 from ${table} where ${column}=${data[fk]}) AS "exists"`
|
|
2885
|
+
);
|
|
2886
|
+
console.log("Exists check", fk, result2);
|
|
2887
|
+
exists = result2.rows[0].exists;
|
|
2888
|
+
if (exists) break;
|
|
2889
|
+
retries++;
|
|
2890
|
+
await sleep(100);
|
|
2891
|
+
}
|
|
2892
|
+
}
|
|
2893
|
+
}
|
|
2854
2894
|
if (transaction) await client.query("BEGIN");
|
|
2855
2895
|
const resolvedData = await this.resolveNestedData(data, tableName);
|
|
2856
2896
|
const isBatch = Array.isArray(resolvedData);
|
|
@@ -3107,7 +3147,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
3107
3147
|
console.log(
|
|
3108
3148
|
"EXECUTED",
|
|
3109
3149
|
`db${op.charAt(0).toUpperCase() + op.slice(1)}${tableNameFormatted}`,
|
|
3110
|
-
JSON.stringify(context).slice(0, 100),
|
|
3150
|
+
context.errored ? JSON.stringify(context).slice(0, 500) : JSON.stringify(context).slice(0, 100),
|
|
3111
3151
|
context.__error
|
|
3112
3152
|
);
|
|
3113
3153
|
delete context.queryData;
|
|
@@ -3179,6 +3219,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
3179
3219
|
}
|
|
3180
3220
|
});
|
|
3181
3221
|
for (const task of routine.tasks) {
|
|
3222
|
+
if (task.registered) continue;
|
|
3182
3223
|
const tasks = task.getIterator();
|
|
3183
3224
|
while (tasks.hasNext()) {
|
|
3184
3225
|
const nextTask = tasks.next();
|
|
@@ -3200,14 +3241,14 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
3200
3241
|
if (!__signals) return;
|
|
3201
3242
|
const filteredSignals = __signals.filter(
|
|
3202
3243
|
(signal) => !signal.data.registered
|
|
3203
|
-
);
|
|
3244
|
+
).map((signal) => signal.signal);
|
|
3204
3245
|
for (const signal of filteredSignals) {
|
|
3205
|
-
const parts = signal.
|
|
3246
|
+
const parts = signal.split(".");
|
|
3206
3247
|
const domain = parts[0] === "meta" ? parts[1] : parts[0];
|
|
3207
3248
|
const action = parts[parts.length - 1];
|
|
3208
3249
|
emit("meta.sync_controller.signal_added", {
|
|
3209
3250
|
data: {
|
|
3210
|
-
name: signal
|
|
3251
|
+
name: signal,
|
|
3211
3252
|
domain,
|
|
3212
3253
|
action,
|
|
3213
3254
|
isMeta: parts[0] === "meta",
|
|
@@ -3215,21 +3256,17 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
3215
3256
|
}
|
|
3216
3257
|
});
|
|
3217
3258
|
emit("meta.signal.registered", {
|
|
3218
|
-
__signalName: signal
|
|
3259
|
+
__signalName: signal
|
|
3219
3260
|
});
|
|
3220
3261
|
}
|
|
3221
3262
|
}).doAfter(CadenzaService.broker.getSignalsTask);
|
|
3222
3263
|
CadenzaService.createMetaTask("Split tasks for registration", (ctx, emit) => {
|
|
3223
3264
|
const { __tasks } = ctx;
|
|
3224
3265
|
if (!__tasks) return;
|
|
3225
|
-
console.log(
|
|
3226
|
-
"SPLITTING TASKS",
|
|
3227
|
-
__tasks.length,
|
|
3228
|
-
__tasks.map((t) => t.name)
|
|
3229
|
-
);
|
|
3230
3266
|
for (const task of __tasks) {
|
|
3231
3267
|
if (task.registered) continue;
|
|
3232
3268
|
task.registered = true;
|
|
3269
|
+
console.log("REGISTERING TASK", task.name);
|
|
3233
3270
|
const { __functionString, __getTagCallback } = task.export();
|
|
3234
3271
|
emit("meta.sync_controller.task_added", {
|
|
3235
3272
|
data: {
|
|
@@ -3303,6 +3340,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
3303
3340
|
}
|
|
3304
3341
|
for (const task of __tasks) {
|
|
3305
3342
|
if (task.hidden || !task.register) continue;
|
|
3343
|
+
if (task.registered) continue;
|
|
3306
3344
|
task.mapNext(
|
|
3307
3345
|
(t) => emit("meta.sync_controller.task_map", {
|
|
3308
3346
|
data: {
|