@fedify/postgres 2.3.8 → 2.3.9

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 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 : Temporal.Duration.from(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
- ${this.#json(value)},
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 : Temporal.Duration.from(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
- ${this.#json(value)},
65
+ ${jsonValue},
65
66
  ${ttl}
66
67
  )
67
68
  ON CONFLICT (key)
package/dist/mq.cjs CHANGED
@@ -158,6 +158,7 @@ var PostgresMessageQueue = class {
158
158
  async listen(handler, options = {}) {
159
159
  await this.initialize();
160
160
  const { signal } = options;
161
+ if (signal?.aborted) return;
161
162
  const poll = async () => {
162
163
  while (!signal?.aborted) {
163
164
  let processed = false;
@@ -251,6 +252,7 @@ var PostgresMessageQueue = class {
251
252
  };
252
253
  const timeouts = /* @__PURE__ */ new Set();
253
254
  const listen = await this.#sql.listen(this.#channelName, async (delay) => {
255
+ if (signal?.aborted) return;
254
256
  try {
255
257
  const durationMs = Temporal.Duration.from(delay).total("millisecond");
256
258
  if (durationMs < 1) await safeSerializedPoll("notify-immediate");
@@ -274,31 +276,35 @@ var PostgresMessageQueue = class {
274
276
  timeouts.clear();
275
277
  };
276
278
  signal?.addEventListener("abort", clearTimeouts, { once: true });
277
- let unlistenError;
278
279
  try {
279
280
  while (!signal?.aborted) {
280
- let timeout;
281
281
  await new Promise((resolve) => {
282
- signal?.addEventListener("abort", resolve, { once: true });
283
- timeout = setTimeout(() => {
284
- signal?.removeEventListener("abort", resolve);
285
- resolve(0);
282
+ const onAbort = () => {
283
+ clearTimeout(timeout);
284
+ signal?.removeEventListener("abort", onAbort);
285
+ resolve();
286
+ };
287
+ const timeout = setTimeout(() => {
288
+ signal?.removeEventListener("abort", onAbort);
289
+ resolve();
286
290
  }, this.#pollIntervalMs);
287
- timeouts.add(timeout);
291
+ signal?.addEventListener("abort", onAbort, { once: true });
288
292
  });
289
- if (timeout != null) timeouts.delete(timeout);
290
293
  await safeSerializedPoll("interval");
291
294
  }
292
295
  } finally {
293
296
  signal?.removeEventListener("abort", clearTimeouts);
294
297
  clearTimeouts();
298
+ await pollLock;
295
299
  try {
296
300
  await listen.unlisten();
297
301
  } catch (error) {
298
- if (!isConnectionDestroyedError(error)) unlistenError = error;
302
+ if (!isConnectionDestroyedError(error)) logger.error("Error while unlistening from channel {channelName}: {error}", {
303
+ channelName: this.#channelName,
304
+ error
305
+ });
299
306
  }
300
307
  }
301
- if (unlistenError != null) throw unlistenError;
302
308
  }
303
309
  /**
304
310
  * Initializes the message queue table if it does not already exist.
package/dist/mq.js CHANGED
@@ -155,6 +155,7 @@ var PostgresMessageQueue = class {
155
155
  async listen(handler, options = {}) {
156
156
  await this.initialize();
157
157
  const { signal } = options;
158
+ if (signal?.aborted) return;
158
159
  const poll = async () => {
159
160
  while (!signal?.aborted) {
160
161
  let processed = false;
@@ -248,6 +249,7 @@ var PostgresMessageQueue = class {
248
249
  };
249
250
  const timeouts = /* @__PURE__ */ new Set();
250
251
  const listen = await this.#sql.listen(this.#channelName, async (delay) => {
252
+ if (signal?.aborted) return;
251
253
  try {
252
254
  const durationMs = Temporal.Duration.from(delay).total("millisecond");
253
255
  if (durationMs < 1) await safeSerializedPoll("notify-immediate");
@@ -271,31 +273,35 @@ var PostgresMessageQueue = class {
271
273
  timeouts.clear();
272
274
  };
273
275
  signal?.addEventListener("abort", clearTimeouts, { once: true });
274
- let unlistenError;
275
276
  try {
276
277
  while (!signal?.aborted) {
277
- let timeout;
278
278
  await new Promise((resolve) => {
279
- signal?.addEventListener("abort", resolve, { once: true });
280
- timeout = setTimeout(() => {
281
- signal?.removeEventListener("abort", resolve);
282
- resolve(0);
279
+ const onAbort = () => {
280
+ clearTimeout(timeout);
281
+ signal?.removeEventListener("abort", onAbort);
282
+ resolve();
283
+ };
284
+ const timeout = setTimeout(() => {
285
+ signal?.removeEventListener("abort", onAbort);
286
+ resolve();
283
287
  }, this.#pollIntervalMs);
284
- timeouts.add(timeout);
288
+ signal?.addEventListener("abort", onAbort, { once: true });
285
289
  });
286
- if (timeout != null) timeouts.delete(timeout);
287
290
  await safeSerializedPoll("interval");
288
291
  }
289
292
  } finally {
290
293
  signal?.removeEventListener("abort", clearTimeouts);
291
294
  clearTimeouts();
295
+ await pollLock;
292
296
  try {
293
297
  await listen.unlisten();
294
298
  } catch (error) {
295
- if (!isConnectionDestroyedError(error)) unlistenError = error;
299
+ if (!isConnectionDestroyedError(error)) logger.error("Error while unlistening from channel {channelName}: {error}", {
300
+ channelName: this.#channelName,
301
+ error
302
+ });
296
303
  }
297
304
  }
298
- if (unlistenError != null) throw unlistenError;
299
305
  }
300
306
  /**
301
307
  * 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.3.8",
3
+ "version": "2.3.9",
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.3.8"
77
+ "@fedify/fedify": "^2.3.9"
78
78
  },
79
79
  "devDependencies": {
80
80
  "@std/async": "npm:@jsr/std__async@^1.0.13",
81
81
  "tsdown": "^0.22.0",
82
82
  "typescript": "^6.0.0",
83
83
  "@fedify/fixture": "^2.0.0",
84
- "@fedify/testing": "^2.3.8"
84
+ "@fedify/testing": "^2.3.9"
85
85
  },
86
86
  "scripts": {
87
87
  "build:self": "tsdown",