@supabase/pg-delta 1.0.0-alpha.25 → 1.0.0-alpha.26
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/core/catalog.model.js +2 -0
- package/dist/core/expand-replace-dependencies.js +1 -7
- package/dist/core/objects/table/table.diff.js +53 -30
- package/dist/core/plan/hierarchy.js +4 -4
- package/dist/core/postgres-config.d.ts +7 -0
- package/dist/core/postgres-config.js +19 -5
- package/dist/core/sort/debug-visualization.js +1 -1
- package/dist/core/sort/topological-sort.js +2 -2
- package/package.json +34 -33
- package/src/core/catalog.model.ts +4 -3
- package/src/core/catalog.snapshot.test.ts +1 -0
- package/src/core/expand-replace-dependencies.test.ts +12 -0
- package/src/core/expand-replace-dependencies.ts +1 -12
- package/src/core/objects/aggregate/changes/aggregate.base.ts +1 -1
- package/src/core/objects/collation/changes/collation.base.ts +1 -1
- package/src/core/objects/domain/changes/domain.base.ts +1 -1
- package/src/core/objects/extension/changes/extension.base.ts +1 -1
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +1 -1
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +1 -1
- package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +1 -1
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +1 -1
- package/src/core/objects/index/changes/index.base.ts +1 -1
- package/src/core/objects/language/changes/language.base.ts +1 -1
- package/src/core/objects/materialized-view/changes/materialized-view.base.ts +1 -1
- package/src/core/objects/procedure/changes/procedure.base.ts +1 -1
- package/src/core/objects/rls-policy/changes/rls-policy.base.ts +1 -1
- package/src/core/objects/role/changes/role.base.ts +1 -1
- package/src/core/objects/schema/changes/schema.base.ts +1 -1
- package/src/core/objects/sequence/changes/sequence.base.ts +1 -1
- package/src/core/objects/table/changes/table.base.ts +1 -1
- package/src/core/objects/table/changes/table.comment.ts +2 -8
- package/src/core/objects/table/table.diff.test.ts +198 -5
- package/src/core/objects/table/table.diff.ts +63 -34
- package/src/core/objects/trigger/changes/trigger.alter.ts +1 -4
- package/src/core/objects/trigger/changes/trigger.base.ts +1 -1
- package/src/core/objects/type/composite-type/changes/composite-type.base.ts +1 -1
- package/src/core/objects/type/enum/changes/enum.base.ts +1 -1
- package/src/core/objects/type/range/changes/range.base.ts +1 -1
- package/src/core/objects/view/changes/view.base.ts +1 -1
- package/src/core/plan/hierarchy.ts +4 -4
- package/src/core/postgres-config.test.ts +39 -1
- package/src/core/postgres-config.ts +32 -16
- package/src/core/sort/debug-visualization.ts +1 -1
- package/src/core/sort/sort-changes.test.ts +1 -0
- package/src/core/sort/topological-sort.ts +2 -2
|
@@ -209,6 +209,37 @@ export async function connectWithRetry<T>(opts: {
|
|
|
209
209
|
throw lastError;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Race `connect()` against a `timeoutMs` rejection and clear the timer when
|
|
214
|
+
* either side wins. If the timer is left running after a fast connect, the
|
|
215
|
+
* pending `setTimeout` keeps the event loop alive and the process hangs for
|
|
216
|
+
* the rest of `timeoutMs`.
|
|
217
|
+
*/
|
|
218
|
+
export function connectWithTimeout<T>(
|
|
219
|
+
connect: () => Promise<T>,
|
|
220
|
+
timeoutMs: number,
|
|
221
|
+
label: "source" | "target",
|
|
222
|
+
): Promise<T> {
|
|
223
|
+
let timer: ReturnType<typeof setTimeout>;
|
|
224
|
+
return Promise.race([
|
|
225
|
+
connect(),
|
|
226
|
+
new Promise<never>((_, reject) => {
|
|
227
|
+
timer = setTimeout(
|
|
228
|
+
() =>
|
|
229
|
+
reject(
|
|
230
|
+
new Error(
|
|
231
|
+
`Connection to ${label} database timed out after ${timeoutMs}ms. ` +
|
|
232
|
+
`The server may require SSL, use an invalid certificate, or be unreachable.`,
|
|
233
|
+
),
|
|
234
|
+
),
|
|
235
|
+
timeoutMs,
|
|
236
|
+
);
|
|
237
|
+
}),
|
|
238
|
+
]).finally(() => {
|
|
239
|
+
clearTimeout(timer);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
|
|
212
243
|
/**
|
|
213
244
|
* Options for creating a Pool with event listeners.
|
|
214
245
|
*/
|
|
@@ -412,22 +443,7 @@ export async function createManagedPool(
|
|
|
412
443
|
const timeoutMs = DEFAULT_CONNECT_TIMEOUT_MS;
|
|
413
444
|
try {
|
|
414
445
|
const client = await connectWithRetry({
|
|
415
|
-
connect: () =>
|
|
416
|
-
Promise.race([
|
|
417
|
-
pool.connect(),
|
|
418
|
-
new Promise<never>((_, reject) =>
|
|
419
|
-
setTimeout(
|
|
420
|
-
() =>
|
|
421
|
-
reject(
|
|
422
|
-
new Error(
|
|
423
|
-
`Connection to ${label} database timed out after ${timeoutMs}ms. ` +
|
|
424
|
-
`The server may require SSL, use an invalid certificate, or be unreachable.`,
|
|
425
|
-
),
|
|
426
|
-
),
|
|
427
|
-
timeoutMs,
|
|
428
|
-
),
|
|
429
|
-
),
|
|
430
|
-
]),
|
|
446
|
+
connect: () => connectWithTimeout(() => pool.connect(), timeoutMs, label),
|
|
431
447
|
});
|
|
432
448
|
client.release();
|
|
433
449
|
} catch (err) {
|
|
@@ -144,6 +144,7 @@ function table(
|
|
|
144
144
|
|
|
145
145
|
async function catalogWithDepends(depends: PgDepend[]) {
|
|
146
146
|
const base = await createEmptyCatalog(170000, "postgres");
|
|
147
|
+
// oxlint-disable-next-line typescript/no-misused-spread
|
|
147
148
|
return new Catalog({ ...base, depends });
|
|
148
149
|
}
|
|
149
150
|
|
|
@@ -14,7 +14,7 @@ export function performStableTopologicalSort(
|
|
|
14
14
|
{ length: nodeCount },
|
|
15
15
|
() => new Set<number>(),
|
|
16
16
|
);
|
|
17
|
-
const inDegreeCounts =
|
|
17
|
+
const inDegreeCounts: number[] = Array.from({ length: nodeCount }, () => 0);
|
|
18
18
|
|
|
19
19
|
for (const [sourceIndex, targetIndex] of edges) {
|
|
20
20
|
if (!adjacencyList[sourceIndex].has(targetIndex)) {
|
|
@@ -73,7 +73,7 @@ export function findCycle(
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// 0 = unvisited, 1 = visiting, 2 = completed
|
|
76
|
-
const visitState =
|
|
76
|
+
const visitState: number[] = Array.from({ length: nodeCount }, () => 0);
|
|
77
77
|
const pathStack: number[] = [];
|
|
78
78
|
let cycleNodeIndexes: number[] | null = null;
|
|
79
79
|
|