@fedify/postgres 2.2.14-dev.2082 → 2.2.15-dev.2196

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 : 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 : 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
@@ -140,6 +140,7 @@ var PostgresMessageQueue = class {
140
140
  async listen(handler, options = {}) {
141
141
  await this.initialize();
142
142
  const { signal } = options;
143
+ if (signal?.aborted) return;
143
144
  const poll = async () => {
144
145
  while (!signal?.aborted) {
145
146
  let processed = false;
@@ -233,6 +234,7 @@ var PostgresMessageQueue = class {
233
234
  };
234
235
  const timeouts = /* @__PURE__ */ new Set();
235
236
  const listen = await this.#sql.listen(this.#channelName, async (delay) => {
237
+ if (signal?.aborted) return;
236
238
  try {
237
239
  const durationMs = Temporal.Duration.from(delay).total("millisecond");
238
240
  if (durationMs < 1) await safeSerializedPoll("notify-immediate");
@@ -256,31 +258,35 @@ var PostgresMessageQueue = class {
256
258
  timeouts.clear();
257
259
  };
258
260
  signal?.addEventListener("abort", clearTimeouts, { once: true });
259
- let unlistenError;
260
261
  try {
261
262
  while (!signal?.aborted) {
262
- let timeout;
263
263
  await new Promise((resolve) => {
264
- signal?.addEventListener("abort", resolve, { once: true });
265
- timeout = setTimeout(() => {
266
- signal?.removeEventListener("abort", resolve);
267
- resolve(0);
264
+ const onAbort = () => {
265
+ clearTimeout(timeout);
266
+ signal?.removeEventListener("abort", onAbort);
267
+ resolve();
268
+ };
269
+ const timeout = setTimeout(() => {
270
+ signal?.removeEventListener("abort", onAbort);
271
+ resolve();
268
272
  }, this.#pollIntervalMs);
269
- timeouts.add(timeout);
273
+ signal?.addEventListener("abort", onAbort, { once: true });
270
274
  });
271
- if (timeout != null) timeouts.delete(timeout);
272
275
  await safeSerializedPoll("interval");
273
276
  }
274
277
  } finally {
275
278
  signal?.removeEventListener("abort", clearTimeouts);
276
279
  clearTimeouts();
280
+ await pollLock;
277
281
  try {
278
282
  await listen.unlisten();
279
283
  } catch (error) {
280
- if (!isConnectionDestroyedError(error)) unlistenError = error;
284
+ if (!isConnectionDestroyedError(error)) logger.error("Error while unlistening from channel {channelName}: {error}", {
285
+ channelName: this.#channelName,
286
+ error
287
+ });
281
288
  }
282
289
  }
283
- if (unlistenError != null) throw unlistenError;
284
290
  }
285
291
  /**
286
292
  * Initializes the message queue table if it does not already exist.
package/dist/mq.js CHANGED
@@ -137,6 +137,7 @@ var PostgresMessageQueue = class {
137
137
  async listen(handler, options = {}) {
138
138
  await this.initialize();
139
139
  const { signal } = options;
140
+ if (signal?.aborted) return;
140
141
  const poll = async () => {
141
142
  while (!signal?.aborted) {
142
143
  let processed = false;
@@ -230,6 +231,7 @@ var PostgresMessageQueue = class {
230
231
  };
231
232
  const timeouts = /* @__PURE__ */ new Set();
232
233
  const listen = await this.#sql.listen(this.#channelName, async (delay) => {
234
+ if (signal?.aborted) return;
233
235
  try {
234
236
  const durationMs = Temporal.Duration.from(delay).total("millisecond");
235
237
  if (durationMs < 1) await safeSerializedPoll("notify-immediate");
@@ -253,31 +255,35 @@ var PostgresMessageQueue = class {
253
255
  timeouts.clear();
254
256
  };
255
257
  signal?.addEventListener("abort", clearTimeouts, { once: true });
256
- let unlistenError;
257
258
  try {
258
259
  while (!signal?.aborted) {
259
- let timeout;
260
260
  await new Promise((resolve) => {
261
- signal?.addEventListener("abort", resolve, { once: true });
262
- timeout = setTimeout(() => {
263
- signal?.removeEventListener("abort", resolve);
264
- resolve(0);
261
+ const onAbort = () => {
262
+ clearTimeout(timeout);
263
+ signal?.removeEventListener("abort", onAbort);
264
+ resolve();
265
+ };
266
+ const timeout = setTimeout(() => {
267
+ signal?.removeEventListener("abort", onAbort);
268
+ resolve();
265
269
  }, this.#pollIntervalMs);
266
- timeouts.add(timeout);
270
+ signal?.addEventListener("abort", onAbort, { once: true });
267
271
  });
268
- if (timeout != null) timeouts.delete(timeout);
269
272
  await safeSerializedPoll("interval");
270
273
  }
271
274
  } finally {
272
275
  signal?.removeEventListener("abort", clearTimeouts);
273
276
  clearTimeouts();
277
+ await pollLock;
274
278
  try {
275
279
  await listen.unlisten();
276
280
  } catch (error) {
277
- if (!isConnectionDestroyedError(error)) unlistenError = error;
281
+ if (!isConnectionDestroyedError(error)) logger.error("Error while unlistening from channel {channelName}: {error}", {
282
+ channelName: this.#channelName,
283
+ error
284
+ });
278
285
  }
279
286
  }
280
- if (unlistenError != null) throw unlistenError;
281
287
  }
282
288
  /**
283
289
  * 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.2.14-dev.2082+79cd52e9",
3
+ "version": "2.2.15-dev.2196+10201be2",
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.2.14-dev.2082+79cd52e9"
77
+ "@fedify/fedify": "^2.2.15-dev.2196+10201be2"
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
83
  "@fedify/fixture": "^2.0.0",
84
- "@fedify/testing": "^2.2.14-dev.2082+79cd52e9"
84
+ "@fedify/testing": "^2.2.15-dev.2196+10201be2"
85
85
  },
86
86
  "scripts": {
87
87
  "build:self": "tsdown",