@fedify/postgres 2.1.24 → 2.1.25
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/kv.cjs +2 -1
- package/dist/kv.js +2 -1
- package/dist/mq.cjs +33 -19
- package/dist/mq.js +33 -19
- package/package.json +4 -4
package/dist/kv.cjs
CHANGED
|
@@ -58,11 +58,12 @@ var PostgresKvStore = class {
|
|
|
58
58
|
async set(key, value, options) {
|
|
59
59
|
await this.initialize();
|
|
60
60
|
const ttl = options?.ttl == null ? null : options.ttl.toString();
|
|
61
|
+
const jsonValue = value === null ? this.#sql`'null'::jsonb` : this.#json(value);
|
|
61
62
|
await this.#sql`
|
|
62
63
|
INSERT INTO ${this.#sql(this.#tableName)} (key, value, ttl)
|
|
63
64
|
VALUES (
|
|
64
65
|
${key},
|
|
65
|
-
${
|
|
66
|
+
${jsonValue},
|
|
66
67
|
${ttl}
|
|
67
68
|
)
|
|
68
69
|
ON CONFLICT (key)
|
package/dist/kv.js
CHANGED
|
@@ -57,11 +57,12 @@ var PostgresKvStore = class {
|
|
|
57
57
|
async set(key, value, options) {
|
|
58
58
|
await this.initialize();
|
|
59
59
|
const ttl = options?.ttl == null ? null : options.ttl.toString();
|
|
60
|
+
const jsonValue = value === null ? this.#sql`'null'::jsonb` : this.#json(value);
|
|
60
61
|
await this.#sql`
|
|
61
62
|
INSERT INTO ${this.#sql(this.#tableName)} (key, value, ttl)
|
|
62
63
|
VALUES (
|
|
63
64
|
${key},
|
|
64
|
-
${
|
|
65
|
+
${jsonValue},
|
|
65
66
|
${ttl}
|
|
66
67
|
)
|
|
67
68
|
ON CONFLICT (key)
|
package/dist/mq.cjs
CHANGED
|
@@ -136,6 +136,7 @@ var PostgresMessageQueue = class {
|
|
|
136
136
|
async listen(handler, options = {}) {
|
|
137
137
|
await this.initialize();
|
|
138
138
|
const { signal } = options;
|
|
139
|
+
if (signal?.aborted) return;
|
|
139
140
|
const poll = async () => {
|
|
140
141
|
while (!signal?.aborted) {
|
|
141
142
|
let processed = false;
|
|
@@ -229,6 +230,7 @@ var PostgresMessageQueue = class {
|
|
|
229
230
|
};
|
|
230
231
|
const timeouts = /* @__PURE__ */ new Set();
|
|
231
232
|
const listen = await this.#sql.listen(this.#channelName, async (delay) => {
|
|
233
|
+
if (signal?.aborted) return;
|
|
232
234
|
try {
|
|
233
235
|
const durationMs = Temporal.Duration.from(delay).total("millisecond");
|
|
234
236
|
if (durationMs < 1) await safeSerializedPoll("notify-immediate");
|
|
@@ -247,28 +249,40 @@ var PostgresMessageQueue = class {
|
|
|
247
249
|
await safeSerializedPoll("notify-fallback");
|
|
248
250
|
}
|
|
249
251
|
}, () => safeSerializedPoll("subscribe"));
|
|
250
|
-
|
|
251
|
-
listen.unlisten();
|
|
252
|
+
const clearTimeouts = () => {
|
|
252
253
|
for (const timeout of timeouts) clearTimeout(timeout);
|
|
253
254
|
timeouts.clear();
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
255
|
+
};
|
|
256
|
+
signal?.addEventListener("abort", clearTimeouts);
|
|
257
|
+
try {
|
|
258
|
+
while (!signal?.aborted) {
|
|
259
|
+
await new Promise((resolve) => {
|
|
260
|
+
const onAbort = () => {
|
|
261
|
+
clearTimeout(timeout);
|
|
262
|
+
signal?.removeEventListener("abort", onAbort);
|
|
263
|
+
resolve();
|
|
264
|
+
};
|
|
265
|
+
const timeout = setTimeout(() => {
|
|
266
|
+
signal?.removeEventListener("abort", onAbort);
|
|
267
|
+
resolve();
|
|
268
|
+
}, this.#pollIntervalMs);
|
|
269
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
270
|
+
});
|
|
271
|
+
await safeSerializedPoll("interval");
|
|
272
|
+
}
|
|
273
|
+
} finally {
|
|
274
|
+
signal?.removeEventListener("abort", clearTimeouts);
|
|
275
|
+
clearTimeouts();
|
|
276
|
+
await pollLock;
|
|
277
|
+
try {
|
|
278
|
+
await listen.unlisten();
|
|
279
|
+
} catch (error) {
|
|
280
|
+
logger.error("Error while unlistening from channel {channelName}: {error}", {
|
|
281
|
+
channelName: this.#channelName,
|
|
282
|
+
error
|
|
283
|
+
});
|
|
284
|
+
}
|
|
267
285
|
}
|
|
268
|
-
await new Promise((resolve) => {
|
|
269
|
-
signal?.addEventListener("abort", () => resolve());
|
|
270
|
-
if (signal?.aborted) return resolve();
|
|
271
|
-
});
|
|
272
286
|
}
|
|
273
287
|
/**
|
|
274
288
|
* Initializes the message queue table if it does not already exist.
|
package/dist/mq.js
CHANGED
|
@@ -133,6 +133,7 @@ var PostgresMessageQueue = class {
|
|
|
133
133
|
async listen(handler, options = {}) {
|
|
134
134
|
await this.initialize();
|
|
135
135
|
const { signal } = options;
|
|
136
|
+
if (signal?.aborted) return;
|
|
136
137
|
const poll = async () => {
|
|
137
138
|
while (!signal?.aborted) {
|
|
138
139
|
let processed = false;
|
|
@@ -226,6 +227,7 @@ var PostgresMessageQueue = class {
|
|
|
226
227
|
};
|
|
227
228
|
const timeouts = /* @__PURE__ */ new Set();
|
|
228
229
|
const listen = await this.#sql.listen(this.#channelName, async (delay) => {
|
|
230
|
+
if (signal?.aborted) return;
|
|
229
231
|
try {
|
|
230
232
|
const durationMs = Temporal.Duration.from(delay).total("millisecond");
|
|
231
233
|
if (durationMs < 1) await safeSerializedPoll("notify-immediate");
|
|
@@ -244,28 +246,40 @@ var PostgresMessageQueue = class {
|
|
|
244
246
|
await safeSerializedPoll("notify-fallback");
|
|
245
247
|
}
|
|
246
248
|
}, () => safeSerializedPoll("subscribe"));
|
|
247
|
-
|
|
248
|
-
listen.unlisten();
|
|
249
|
+
const clearTimeouts = () => {
|
|
249
250
|
for (const timeout of timeouts) clearTimeout(timeout);
|
|
250
251
|
timeouts.clear();
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
252
|
+
};
|
|
253
|
+
signal?.addEventListener("abort", clearTimeouts);
|
|
254
|
+
try {
|
|
255
|
+
while (!signal?.aborted) {
|
|
256
|
+
await new Promise((resolve) => {
|
|
257
|
+
const onAbort = () => {
|
|
258
|
+
clearTimeout(timeout);
|
|
259
|
+
signal?.removeEventListener("abort", onAbort);
|
|
260
|
+
resolve();
|
|
261
|
+
};
|
|
262
|
+
const timeout = setTimeout(() => {
|
|
263
|
+
signal?.removeEventListener("abort", onAbort);
|
|
264
|
+
resolve();
|
|
265
|
+
}, this.#pollIntervalMs);
|
|
266
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
267
|
+
});
|
|
268
|
+
await safeSerializedPoll("interval");
|
|
269
|
+
}
|
|
270
|
+
} finally {
|
|
271
|
+
signal?.removeEventListener("abort", clearTimeouts);
|
|
272
|
+
clearTimeouts();
|
|
273
|
+
await pollLock;
|
|
274
|
+
try {
|
|
275
|
+
await listen.unlisten();
|
|
276
|
+
} catch (error) {
|
|
277
|
+
logger.error("Error while unlistening from channel {channelName}: {error}", {
|
|
278
|
+
channelName: this.#channelName,
|
|
279
|
+
error
|
|
280
|
+
});
|
|
281
|
+
}
|
|
264
282
|
}
|
|
265
|
-
await new Promise((resolve) => {
|
|
266
|
-
signal?.addEventListener("abort", () => resolve());
|
|
267
|
-
if (signal?.aborted) return resolve();
|
|
268
|
-
});
|
|
269
283
|
}
|
|
270
284
|
/**
|
|
271
285
|
* Initializes the message queue table if it does not already exist.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/postgres",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.25",
|
|
4
4
|
"description": "PostgreSQL drivers for Fedify",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fedify",
|
|
@@ -74,14 +74,14 @@
|
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"postgres": "^3.4.7",
|
|
77
|
-
"@fedify/fedify": "^2.1.
|
|
77
|
+
"@fedify/fedify": "^2.1.25"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
80
|
"@std/async": "npm:@jsr/std__async@^1.0.13",
|
|
81
81
|
"tsdown": "^0.21.6",
|
|
82
82
|
"typescript": "^6.0.0",
|
|
83
|
-
"@fedify/
|
|
84
|
-
"@fedify/
|
|
83
|
+
"@fedify/fixture": "^2.0.0",
|
|
84
|
+
"@fedify/testing": "^2.1.25"
|
|
85
85
|
},
|
|
86
86
|
"scripts": {
|
|
87
87
|
"build:self": "tsdown",
|