@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 +26 -11
- package/package.json +1 -1
- package/script/src/mq.js +29 -11
- package/types/src/mq.d.ts.map +1 -1
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
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
|
package/types/src/mq.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|