@fedify/postgres 0.1.0-dev.2 → 0.1.0-dev.4

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/esm/src/mq.js CHANGED
@@ -11,6 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
11
11
  };
12
12
  var _PostgresMessageQueue_sql, _PostgresMessageQueue_tableName, _PostgresMessageQueue_channelName, _PostgresMessageQueue_pollIntervalMs, _PostgresMessageQueue_initialized;
13
13
  import * as dntShim from "../_dnt.shims.js";
14
+ import postgres from "postgres";
14
15
  /**
15
16
  * A message queue that uses PostgreSQL as the underlying storage.
16
17
  *
@@ -58,11 +59,11 @@ export class PostgresMessageQueue {
58
59
  async listen(
59
60
  // deno-lint-ignore no-explicit-any
60
61
  handler, options = {}) {
62
+ await this.initialize();
61
63
  const { signal } = options;
62
64
  const poll = async () => {
63
- if (signal?.aborted)
64
- return;
65
- const query = __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
65
+ while (!signal?.aborted) {
66
+ const query = __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
66
67
  DELETE FROM ${__classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").call(this, __classPrivateFieldGet(this, _PostgresMessageQueue_tableName, "f"))}
67
68
  WHERE id = (
68
69
  SELECT id
@@ -73,14 +74,19 @@ export class PostgresMessageQueue {
73
74
  )
74
75
  RETURNING message;
75
76
  `.execute();
76
- const cancel = query.cancel.bind(query);
77
- signal?.addEventListener("abort", cancel);
78
- for (const message of await query) {
79
- if (signal?.aborted)
80
- return;
81
- await handler(JSON.parse(message.message));
77
+ const cancel = query.cancel.bind(query);
78
+ signal?.addEventListener("abort", cancel);
79
+ let i = 0;
80
+ for (const message of await query) {
81
+ if (signal?.aborted)
82
+ return;
83
+ await handler(JSON.parse(message.message));
84
+ i++;
85
+ }
86
+ signal?.removeEventListener("abort", cancel);
87
+ if (i < 1)
88
+ break;
82
89
  }
83
- signal?.removeEventListener("abort", cancel);
84
90
  };
85
91
  const timeouts = new Set();
86
92
  const listen = await __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").listen(__classPrivateFieldGet(this, _PostgresMessageQueue_channelName, "f"), async (delay) => {
@@ -122,7 +128,8 @@ export class PostgresMessageQueue {
122
128
  async initialize() {
123
129
  if (__classPrivateFieldGet(this, _PostgresMessageQueue_initialized, "f"))
124
130
  return;
125
- await __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
131
+ try {
132
+ await __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
126
133
  CREATE TABLE IF NOT EXISTS ${__classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").call(this, __classPrivateFieldGet(this, _PostgresMessageQueue_tableName, "f"))} (
127
134
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
128
135
  message jsonb NOT NULL,
@@ -130,6 +137,13 @@ export class PostgresMessageQueue {
130
137
  created timestamp with time zone DEFAULT CURRENT_TIMESTAMP
131
138
  );
132
139
  `;
140
+ }
141
+ catch (e) {
142
+ if (!(e instanceof postgres.PostgresError &&
143
+ e.constraint_name === "pg_type_typname_nsp_index")) {
144
+ throw e;
145
+ }
146
+ }
133
147
  __classPrivateFieldSet(this, _PostgresMessageQueue_initialized, true, "f");
134
148
  }
135
149
  /**
@@ -140,3 +154,4 @@ export class PostgresMessageQueue {
140
154
  }
141
155
  }
142
156
  _PostgresMessageQueue_sql = new WeakMap(), _PostgresMessageQueue_tableName = new WeakMap(), _PostgresMessageQueue_channelName = new WeakMap(), _PostgresMessageQueue_pollIntervalMs = new WeakMap(), _PostgresMessageQueue_initialized = new WeakMap();
157
+ // cSpell: ignore typname
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/postgres",
3
- "version": "0.1.0-dev.2+463ee4d6",
3
+ "version": "0.1.0-dev.4+d5239460",
4
4
  "description": "PostgreSQL drivers for Fedify",
5
5
  "keywords": [
6
6
  "fedify",
package/script/src/mq.js CHANGED
@@ -33,10 +33,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
33
33
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
34
34
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
35
35
  };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
36
39
  var _PostgresMessageQueue_sql, _PostgresMessageQueue_tableName, _PostgresMessageQueue_channelName, _PostgresMessageQueue_pollIntervalMs, _PostgresMessageQueue_initialized;
37
40
  Object.defineProperty(exports, "__esModule", { value: true });
38
41
  exports.PostgresMessageQueue = void 0;
39
42
  const dntShim = __importStar(require("../_dnt.shims.js"));
43
+ const postgres_1 = __importDefault(require("postgres"));
40
44
  /**
41
45
  * A message queue that uses PostgreSQL as the underlying storage.
42
46
  *
@@ -84,11 +88,11 @@ class PostgresMessageQueue {
84
88
  async listen(
85
89
  // deno-lint-ignore no-explicit-any
86
90
  handler, options = {}) {
91
+ await this.initialize();
87
92
  const { signal } = options;
88
93
  const poll = async () => {
89
- if (signal?.aborted)
90
- return;
91
- const query = __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
94
+ while (!signal?.aborted) {
95
+ const query = __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
92
96
  DELETE FROM ${__classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").call(this, __classPrivateFieldGet(this, _PostgresMessageQueue_tableName, "f"))}
93
97
  WHERE id = (
94
98
  SELECT id
@@ -99,14 +103,19 @@ class PostgresMessageQueue {
99
103
  )
100
104
  RETURNING message;
101
105
  `.execute();
102
- const cancel = query.cancel.bind(query);
103
- signal?.addEventListener("abort", cancel);
104
- for (const message of await query) {
105
- if (signal?.aborted)
106
- return;
107
- await handler(JSON.parse(message.message));
106
+ const cancel = query.cancel.bind(query);
107
+ signal?.addEventListener("abort", cancel);
108
+ let i = 0;
109
+ for (const message of await query) {
110
+ if (signal?.aborted)
111
+ return;
112
+ await handler(JSON.parse(message.message));
113
+ i++;
114
+ }
115
+ signal?.removeEventListener("abort", cancel);
116
+ if (i < 1)
117
+ break;
108
118
  }
109
- signal?.removeEventListener("abort", cancel);
110
119
  };
111
120
  const timeouts = new Set();
112
121
  const listen = await __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").listen(__classPrivateFieldGet(this, _PostgresMessageQueue_channelName, "f"), async (delay) => {
@@ -148,7 +157,8 @@ class PostgresMessageQueue {
148
157
  async initialize() {
149
158
  if (__classPrivateFieldGet(this, _PostgresMessageQueue_initialized, "f"))
150
159
  return;
151
- await __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
160
+ try {
161
+ await __classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").bind(this) `
152
162
  CREATE TABLE IF NOT EXISTS ${__classPrivateFieldGet(this, _PostgresMessageQueue_sql, "f").call(this, __classPrivateFieldGet(this, _PostgresMessageQueue_tableName, "f"))} (
153
163
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
154
164
  message jsonb NOT NULL,
@@ -156,6 +166,13 @@ class PostgresMessageQueue {
156
166
  created timestamp with time zone DEFAULT CURRENT_TIMESTAMP
157
167
  );
158
168
  `;
169
+ }
170
+ catch (e) {
171
+ if (!(e instanceof postgres_1.default.PostgresError &&
172
+ e.constraint_name === "pg_type_typname_nsp_index")) {
173
+ throw e;
174
+ }
175
+ }
159
176
  __classPrivateFieldSet(this, _PostgresMessageQueue_initialized, true, "f");
160
177
  }
161
178
  /**
@@ -167,3 +184,4 @@ class PostgresMessageQueue {
167
184
  }
168
185
  exports.PostgresMessageQueue = PostgresMessageQueue;
169
186
  _PostgresMessageQueue_sql = new WeakMap(), _PostgresMessageQueue_tableName = new WeakMap(), _PostgresMessageQueue_channelName = new WeakMap(), _PostgresMessageQueue_pollIntervalMs = new WeakMap(), _PostgresMessageQueue_initialized = new WeakMap();
187
+ // cSpell: ignore typname
@@ -1 +1 @@
1
- {"version":3,"file":"mq.d.ts","sourceRoot":"","sources":["../../src/src/mq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;CAC1E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,oBAAqB,YAAW,YAAY;;gBAUrD,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACZ,OAAO,GAAE,2BAAgC;IAWrC,OAAO,CAEX,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,IAAI,CAAC;IAUV,MAAM,CAEV,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC/C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,IAAI,CAAC;IAyDhB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
1
+ {"version":3,"file":"mq.d.ts","sourceRoot":"","sources":["../../src/src/mq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;CAC1E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,oBAAqB,YAAW,YAAY;;gBAUrD,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACZ,OAAO,GAAE,2BAAgC;IAWrC,OAAO,CAEX,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,IAAI,CAAC;IAUV,MAAM,CAEV,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC/C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,IAAI,CAAC;IA8DhB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}