@async/pipeline 0.6.0 → 0.7.0
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/API_SURFACE.md +6 -1
- package/api-contract.json +47 -0
- package/dist/internal/core/cache.d.ts +47 -1
- package/dist/internal/core/cache.d.ts.map +1 -1
- package/dist/internal/core/cache.js +39 -1
- package/dist/internal/core/cache.js.map +1 -1
- package/dist/internal/core/index.d.ts +38 -0
- package/dist/internal/core/index.d.ts.map +1 -1
- package/dist/internal/core/index.js +104 -3
- package/dist/internal/core/index.js.map +1 -1
- package/dist/internal/node/cli.d.ts.map +1 -1
- package/dist/internal/node/cli.js +17 -5
- package/dist/internal/node/cli.js.map +1 -1
- package/dist/internal/node/github.d.ts +17 -0
- package/dist/internal/node/github.d.ts.map +1 -1
- package/dist/internal/node/github.js +213 -16
- package/dist/internal/node/github.js.map +1 -1
- package/dist/internal/node/package-lifecycle.d.ts +3 -0
- package/dist/internal/node/package-lifecycle.d.ts.map +1 -1
- package/dist/internal/node/package-lifecycle.js +90 -35
- package/dist/internal/node/package-lifecycle.js.map +1 -1
- package/dist/internal/node/redis-cache.d.ts +3 -0
- package/dist/internal/node/redis-cache.d.ts.map +1 -0
- package/dist/internal/node/redis-cache.js +533 -0
- package/dist/internal/node/redis-cache.js.map +1 -0
- package/dist/internal/node/runner.d.ts.map +1 -1
- package/dist/internal/node/runner.js +59 -49
- package/dist/internal/node/runner.js.map +1 -1
- package/dist/internal/node/store.d.ts +20 -6
- package/dist/internal/node/store.d.ts.map +1 -1
- package/dist/internal/node/store.js +344 -52
- package/dist/internal/node/store.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
import { createConnection } from "node:net";
|
|
2
|
+
import { connect as tlsConnect } from "node:tls";
|
|
3
|
+
export function createRedisCacheStoreAdapter(config = {}, env = process.env) {
|
|
4
|
+
const target = parseRedisUrl(resolveRedisUrl(config.url, env));
|
|
5
|
+
const keyPrefix = stringOption(config, "keyPrefix", "async:pipeline:cache:");
|
|
6
|
+
const connectTimeoutMs = numberOption(config, "connectTimeoutMs", 5_000);
|
|
7
|
+
const commandTimeoutMs = numberOption(config, "commandTimeoutMs", 5_000);
|
|
8
|
+
return {
|
|
9
|
+
name: "redis",
|
|
10
|
+
async get(key) {
|
|
11
|
+
const client = await RedisClient.open(target, { connectTimeoutMs, commandTimeoutMs });
|
|
12
|
+
try {
|
|
13
|
+
const reply = await client.command(["GET", redisDataKey(keyPrefix, key)]);
|
|
14
|
+
if (reply === null)
|
|
15
|
+
return null;
|
|
16
|
+
if (!Buffer.isBuffer(reply))
|
|
17
|
+
throw new Error("Redis GET returned an unexpected reply.");
|
|
18
|
+
return reply;
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
client.close();
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
async put(key, value) {
|
|
25
|
+
const client = await RedisClient.open(target, { connectTimeoutMs, commandTimeoutMs });
|
|
26
|
+
try {
|
|
27
|
+
const bytes = await cacheBlobToUint8Array(value);
|
|
28
|
+
const now = new Date().toISOString();
|
|
29
|
+
const dataReply = await client.command(["SET", redisDataKey(keyPrefix, key), bytes]);
|
|
30
|
+
if (dataReply !== "OK")
|
|
31
|
+
throw new Error("Redis SET returned an unexpected reply.");
|
|
32
|
+
await writeRedisMetadata(client, keyPrefix, {
|
|
33
|
+
version: 1,
|
|
34
|
+
key,
|
|
35
|
+
sizeBytes: bytes.byteLength,
|
|
36
|
+
createdAt: now,
|
|
37
|
+
lastUsedAt: now
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
client.close();
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
async touch(key) {
|
|
45
|
+
const client = await RedisClient.open(target, { connectTimeoutMs, commandTimeoutMs });
|
|
46
|
+
try {
|
|
47
|
+
const metadata = await readRedisMetadata(client, keyPrefix, key);
|
|
48
|
+
if (metadata) {
|
|
49
|
+
await writeRedisMetadata(client, keyPrefix, { ...metadata, lastUsedAt: new Date().toISOString() });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const blob = await client.command(["GET", redisDataKey(keyPrefix, key)]);
|
|
53
|
+
if (blob === null)
|
|
54
|
+
return;
|
|
55
|
+
if (!Buffer.isBuffer(blob))
|
|
56
|
+
throw new Error("Redis GET returned an unexpected reply.");
|
|
57
|
+
const now = new Date().toISOString();
|
|
58
|
+
await writeRedisMetadata(client, keyPrefix, {
|
|
59
|
+
version: 1,
|
|
60
|
+
key,
|
|
61
|
+
sizeBytes: blob.byteLength,
|
|
62
|
+
createdAt: now,
|
|
63
|
+
lastUsedAt: now
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
client.close();
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
async delete(key) {
|
|
71
|
+
const client = await RedisClient.open(target, { connectTimeoutMs, commandTimeoutMs });
|
|
72
|
+
try {
|
|
73
|
+
await client.command(["DEL", redisDataKey(keyPrefix, key), redisMetadataKey(keyPrefix, key)]);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
client.close();
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
async *list(prefix) {
|
|
80
|
+
const client = await RedisClient.open(target, { connectTimeoutMs, commandTimeoutMs });
|
|
81
|
+
try {
|
|
82
|
+
yield* listRedisEntries(client, keyPrefix, prefix);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
client.close();
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
async prune(options) {
|
|
89
|
+
const client = await RedisClient.open(target, { connectTimeoutMs, commandTimeoutMs });
|
|
90
|
+
try {
|
|
91
|
+
return await pruneRedisEntries(client, keyPrefix, options);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
client.close();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
class RedisClient {
|
|
100
|
+
socket;
|
|
101
|
+
commandTimeoutMs;
|
|
102
|
+
buffer = Buffer.alloc(0);
|
|
103
|
+
constructor(socket, commandTimeoutMs) {
|
|
104
|
+
this.socket = socket;
|
|
105
|
+
this.commandTimeoutMs = commandTimeoutMs;
|
|
106
|
+
}
|
|
107
|
+
static async open(target, options) {
|
|
108
|
+
const socket = await connectRedisSocket(target, options.connectTimeoutMs);
|
|
109
|
+
const client = new RedisClient(socket, options.commandTimeoutMs);
|
|
110
|
+
try {
|
|
111
|
+
if (target.password) {
|
|
112
|
+
const auth = target.username ? ["AUTH", target.username, target.password] : ["AUTH", target.password];
|
|
113
|
+
const reply = await client.command(auth);
|
|
114
|
+
if (reply !== "OK")
|
|
115
|
+
throw new Error("Redis AUTH returned an unexpected reply.");
|
|
116
|
+
}
|
|
117
|
+
if (target.database !== undefined && target.database !== 0) {
|
|
118
|
+
const reply = await client.command(["SELECT", String(target.database)]);
|
|
119
|
+
if (reply !== "OK")
|
|
120
|
+
throw new Error("Redis SELECT returned an unexpected reply.");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
client.close();
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
return client;
|
|
128
|
+
}
|
|
129
|
+
command(parts) {
|
|
130
|
+
const payload = encodeRedisCommand(parts);
|
|
131
|
+
return new Promise((resolve, reject) => {
|
|
132
|
+
const timer = setTimeout(() => {
|
|
133
|
+
cleanup();
|
|
134
|
+
reject(new Error("Redis command timed out."));
|
|
135
|
+
}, this.commandTimeoutMs);
|
|
136
|
+
const cleanup = () => {
|
|
137
|
+
clearTimeout(timer);
|
|
138
|
+
this.socket.off("data", onData);
|
|
139
|
+
this.socket.off("error", onError);
|
|
140
|
+
this.socket.off("close", onClose);
|
|
141
|
+
};
|
|
142
|
+
const finish = (reply) => {
|
|
143
|
+
cleanup();
|
|
144
|
+
resolve(reply);
|
|
145
|
+
};
|
|
146
|
+
const fail = (error) => {
|
|
147
|
+
cleanup();
|
|
148
|
+
reject(error);
|
|
149
|
+
};
|
|
150
|
+
const tryParse = () => {
|
|
151
|
+
try {
|
|
152
|
+
const parsed = parseRedisReply(this.buffer);
|
|
153
|
+
if (!parsed)
|
|
154
|
+
return;
|
|
155
|
+
this.buffer = parsed.rest;
|
|
156
|
+
finish(parsed.reply);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
fail(error instanceof Error ? error : new Error(String(error)));
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const onData = (chunk) => {
|
|
163
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
164
|
+
tryParse();
|
|
165
|
+
};
|
|
166
|
+
const onError = (error) => fail(error);
|
|
167
|
+
const onClose = () => fail(new Error("Redis connection closed before a reply was received."));
|
|
168
|
+
this.socket.on("data", onData);
|
|
169
|
+
this.socket.once("error", onError);
|
|
170
|
+
this.socket.once("close", onClose);
|
|
171
|
+
this.socket.write(payload, (error) => {
|
|
172
|
+
if (error)
|
|
173
|
+
fail(error);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
close() {
|
|
178
|
+
this.socket.end();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function connectRedisSocket(target, timeoutMs) {
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
let settled = false;
|
|
184
|
+
const onConnect = () => {
|
|
185
|
+
if (settled)
|
|
186
|
+
return;
|
|
187
|
+
settled = true;
|
|
188
|
+
cleanup();
|
|
189
|
+
socket.setNoDelay(true);
|
|
190
|
+
resolve(socket);
|
|
191
|
+
};
|
|
192
|
+
const socket = target.tls
|
|
193
|
+
? tlsConnect({ host: target.host, port: target.port, servername: target.host }, onConnect)
|
|
194
|
+
: createConnection({ host: target.host, port: target.port }, onConnect);
|
|
195
|
+
const timer = setTimeout(() => {
|
|
196
|
+
if (settled)
|
|
197
|
+
return;
|
|
198
|
+
settled = true;
|
|
199
|
+
cleanup();
|
|
200
|
+
socket.destroy();
|
|
201
|
+
reject(new Error("Redis connection timed out."));
|
|
202
|
+
}, timeoutMs);
|
|
203
|
+
const cleanup = () => {
|
|
204
|
+
clearTimeout(timer);
|
|
205
|
+
socket.off("error", onError);
|
|
206
|
+
};
|
|
207
|
+
const onError = (error) => {
|
|
208
|
+
if (settled)
|
|
209
|
+
return;
|
|
210
|
+
settled = true;
|
|
211
|
+
cleanup();
|
|
212
|
+
reject(error);
|
|
213
|
+
};
|
|
214
|
+
socket.once("error", onError);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
function parseRedisUrl(urlText) {
|
|
218
|
+
let url;
|
|
219
|
+
try {
|
|
220
|
+
url = new URL(urlText);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
throw new Error("Redis cache store received an invalid URL.");
|
|
224
|
+
}
|
|
225
|
+
if (url.protocol !== "redis:" && url.protocol !== "rediss:") {
|
|
226
|
+
throw new Error("Redis cache store URL must use redis:// or rediss://.");
|
|
227
|
+
}
|
|
228
|
+
const port = url.port ? Number(url.port) : 6379;
|
|
229
|
+
if (!Number.isInteger(port) || port <= 0) {
|
|
230
|
+
throw new Error("Redis cache store URL has an invalid port.");
|
|
231
|
+
}
|
|
232
|
+
const databaseText = url.pathname.replace(/^\//, "");
|
|
233
|
+
const database = databaseText ? Number(databaseText) : undefined;
|
|
234
|
+
if (database !== undefined && (!Number.isInteger(database) || database < 0)) {
|
|
235
|
+
throw new Error("Redis cache store URL has an invalid database index.");
|
|
236
|
+
}
|
|
237
|
+
if (url.username && !url.password) {
|
|
238
|
+
throw new Error("Redis cache store URL username requires a password.");
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
tls: url.protocol === "rediss:",
|
|
242
|
+
host: url.hostname || "localhost",
|
|
243
|
+
port,
|
|
244
|
+
...(url.username ? { username: decodeURIComponent(url.username) } : {}),
|
|
245
|
+
...(url.password ? { password: decodeURIComponent(url.password) } : {}),
|
|
246
|
+
...(database === undefined ? {} : { database })
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function resolveRedisUrl(source, env) {
|
|
250
|
+
if (source === undefined) {
|
|
251
|
+
const value = env.REDIS_URL;
|
|
252
|
+
if (value)
|
|
253
|
+
return value;
|
|
254
|
+
throw new Error("Redis cache store requires `url` or REDIS_URL.");
|
|
255
|
+
}
|
|
256
|
+
if (typeof source === "string" && source.length > 0)
|
|
257
|
+
return source;
|
|
258
|
+
if (isEnvVarRef(source)) {
|
|
259
|
+
const value = resolveEnvVar(source, env);
|
|
260
|
+
if (value)
|
|
261
|
+
return value;
|
|
262
|
+
throw new Error(`Redis cache store requires variable "${source.name}".`);
|
|
263
|
+
}
|
|
264
|
+
if (isRecord(source) && typeof source.env === "string") {
|
|
265
|
+
const value = env[source.env] ?? (typeof source.default === "string" ? source.default : undefined);
|
|
266
|
+
if (value)
|
|
267
|
+
return value;
|
|
268
|
+
throw new Error(`Redis cache store requires variable "${source.env}".`);
|
|
269
|
+
}
|
|
270
|
+
throw new Error("Redis cache store `url` must be a string, env.var(...), or { env: string }.");
|
|
271
|
+
}
|
|
272
|
+
function resolveEnvVar(ref, env) {
|
|
273
|
+
const selector = env[ref.name] ?? ref.default;
|
|
274
|
+
if (selector === undefined || selector === "")
|
|
275
|
+
return undefined;
|
|
276
|
+
return ref.values ? ref.values[selector] : selector;
|
|
277
|
+
}
|
|
278
|
+
function stringOption(config, key, fallback) {
|
|
279
|
+
const value = config[key];
|
|
280
|
+
if (value === undefined)
|
|
281
|
+
return fallback;
|
|
282
|
+
if (typeof value !== "string")
|
|
283
|
+
throw new Error(`Redis cache store option "${key}" must be a string.`);
|
|
284
|
+
return value;
|
|
285
|
+
}
|
|
286
|
+
function numberOption(config, key, fallback) {
|
|
287
|
+
const value = config[key];
|
|
288
|
+
if (value === undefined)
|
|
289
|
+
return fallback;
|
|
290
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
291
|
+
throw new Error(`Redis cache store option "${key}" must be a positive number.`);
|
|
292
|
+
}
|
|
293
|
+
return value;
|
|
294
|
+
}
|
|
295
|
+
function redisDataKey(keyPrefix, key) {
|
|
296
|
+
return `${keyPrefix}${key}`;
|
|
297
|
+
}
|
|
298
|
+
function redisMetadataPrefix(keyPrefix) {
|
|
299
|
+
return `${keyPrefix}__async_pipeline_meta__:`;
|
|
300
|
+
}
|
|
301
|
+
function redisMetadataKey(keyPrefix, key) {
|
|
302
|
+
return `${redisMetadataPrefix(keyPrefix)}${Buffer.from(key, "utf8").toString("base64url")}`;
|
|
303
|
+
}
|
|
304
|
+
async function writeRedisMetadata(client, keyPrefix, metadata) {
|
|
305
|
+
const reply = await client.command(["SET", redisMetadataKey(keyPrefix, metadata.key), JSON.stringify(metadata)]);
|
|
306
|
+
if (reply !== "OK")
|
|
307
|
+
throw new Error("Redis SET metadata returned an unexpected reply.");
|
|
308
|
+
}
|
|
309
|
+
async function readRedisMetadata(client, keyPrefix, key) {
|
|
310
|
+
const reply = await client.command(["GET", redisMetadataKey(keyPrefix, key)]);
|
|
311
|
+
if (reply === null)
|
|
312
|
+
return null;
|
|
313
|
+
if (!Buffer.isBuffer(reply))
|
|
314
|
+
throw new Error("Redis GET metadata returned an unexpected reply.");
|
|
315
|
+
try {
|
|
316
|
+
return validateRedisMetadata(JSON.parse(reply.toString("utf8")));
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
function validateRedisMetadata(value) {
|
|
323
|
+
if (!isRecord(value))
|
|
324
|
+
return null;
|
|
325
|
+
if (value.version !== 1)
|
|
326
|
+
return null;
|
|
327
|
+
if (typeof value.key !== "string")
|
|
328
|
+
return null;
|
|
329
|
+
if (typeof value.sizeBytes !== "number" || !Number.isFinite(value.sizeBytes) || value.sizeBytes < 0)
|
|
330
|
+
return null;
|
|
331
|
+
if (typeof value.createdAt !== "string" || typeof value.lastUsedAt !== "string")
|
|
332
|
+
return null;
|
|
333
|
+
return {
|
|
334
|
+
version: 1,
|
|
335
|
+
key: value.key,
|
|
336
|
+
sizeBytes: value.sizeBytes,
|
|
337
|
+
createdAt: value.createdAt,
|
|
338
|
+
lastUsedAt: value.lastUsedAt
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
async function* listRedisEntries(client, keyPrefix, prefix) {
|
|
342
|
+
const metadataPrefix = redisMetadataPrefix(keyPrefix);
|
|
343
|
+
let cursor = "0";
|
|
344
|
+
do {
|
|
345
|
+
const reply = await client.command(["SCAN", cursor, "MATCH", `${escapeRedisGlob(keyPrefix)}${escapeRedisGlob(prefix)}*`, "COUNT", "100"]);
|
|
346
|
+
const scan = parseRedisScanReply(reply);
|
|
347
|
+
cursor = scan.cursor;
|
|
348
|
+
for (const key of scan.keys.sort((left, right) => left.localeCompare(right))) {
|
|
349
|
+
if (key.startsWith(metadataPrefix))
|
|
350
|
+
continue;
|
|
351
|
+
if (!key.startsWith(keyPrefix))
|
|
352
|
+
continue;
|
|
353
|
+
const logicalKey = key.slice(keyPrefix.length);
|
|
354
|
+
const metadata = await readRedisMetadata(client, keyPrefix, logicalKey);
|
|
355
|
+
if (metadata) {
|
|
356
|
+
yield {
|
|
357
|
+
key: metadata.key,
|
|
358
|
+
sizeBytes: metadata.sizeBytes,
|
|
359
|
+
createdAt: metadata.createdAt,
|
|
360
|
+
lastUsedAt: metadata.lastUsedAt
|
|
361
|
+
};
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
const sizeReply = await client.command(["STRLEN", key]);
|
|
365
|
+
if (typeof sizeReply !== "number")
|
|
366
|
+
throw new Error("Redis STRLEN returned an unexpected reply.");
|
|
367
|
+
yield { key: logicalKey, sizeBytes: sizeReply };
|
|
368
|
+
}
|
|
369
|
+
} while (cursor !== "0");
|
|
370
|
+
}
|
|
371
|
+
async function pruneRedisEntries(client, keyPrefix, options) {
|
|
372
|
+
const entries = [];
|
|
373
|
+
for await (const entry of listRedisEntries(client, keyPrefix, options.prefix ?? "")) {
|
|
374
|
+
entries.push(entry);
|
|
375
|
+
}
|
|
376
|
+
const keys = selectPrunedRedisKeys(entries, options);
|
|
377
|
+
let bytesRemoved = 0;
|
|
378
|
+
for (const key of keys) {
|
|
379
|
+
const entry = entries.find((candidate) => candidate.key === key);
|
|
380
|
+
bytesRemoved += entry?.sizeBytes ?? 0;
|
|
381
|
+
await client.command(["DEL", redisDataKey(keyPrefix, key), redisMetadataKey(keyPrefix, key)]);
|
|
382
|
+
}
|
|
383
|
+
return { removed: keys.length, bytesRemoved };
|
|
384
|
+
}
|
|
385
|
+
function selectPrunedRedisKeys(entries, options) {
|
|
386
|
+
const removed = new Set();
|
|
387
|
+
if (options.maxAgeMs !== undefined && Number.isFinite(options.maxAgeMs) && options.maxAgeMs >= 0) {
|
|
388
|
+
const cutoff = Date.now() - options.maxAgeMs;
|
|
389
|
+
for (const entry of entries) {
|
|
390
|
+
if (cacheEntryLastUsedMs(entry) <= cutoff)
|
|
391
|
+
removed.add(entry.key);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
if (options.maxSizeBytes !== undefined && Number.isFinite(options.maxSizeBytes) && options.maxSizeBytes >= 0) {
|
|
395
|
+
const retained = entries
|
|
396
|
+
.filter((entry) => !removed.has(entry.key))
|
|
397
|
+
.sort((left, right) => cacheEntryLastUsedMs(left) - cacheEntryLastUsedMs(right) || left.key.localeCompare(right.key));
|
|
398
|
+
let totalBytes = retained.reduce((sum, entry) => sum + (entry.sizeBytes ?? 0), 0);
|
|
399
|
+
for (const entry of retained) {
|
|
400
|
+
if (totalBytes <= options.maxSizeBytes)
|
|
401
|
+
break;
|
|
402
|
+
removed.add(entry.key);
|
|
403
|
+
totalBytes -= entry.sizeBytes ?? 0;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return [...removed].sort((left, right) => left.localeCompare(right));
|
|
407
|
+
}
|
|
408
|
+
function cacheEntryLastUsedMs(entry) {
|
|
409
|
+
const parsed = entry.lastUsedAt ? Date.parse(entry.lastUsedAt) : NaN;
|
|
410
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
411
|
+
}
|
|
412
|
+
function parseRedisScanReply(reply) {
|
|
413
|
+
if (!Array.isArray(reply) || reply.length !== 2)
|
|
414
|
+
throw new Error("Redis SCAN returned an unexpected reply.");
|
|
415
|
+
const [cursorReply, keysReply] = reply;
|
|
416
|
+
const cursor = redisReplyToString(cursorReply);
|
|
417
|
+
if (!Array.isArray(keysReply))
|
|
418
|
+
throw new Error("Redis SCAN keys returned an unexpected reply.");
|
|
419
|
+
return { cursor, keys: keysReply.map(redisReplyToString) };
|
|
420
|
+
}
|
|
421
|
+
function redisReplyToString(reply) {
|
|
422
|
+
if (typeof reply === "string")
|
|
423
|
+
return reply;
|
|
424
|
+
if (Buffer.isBuffer(reply))
|
|
425
|
+
return reply.toString("utf8");
|
|
426
|
+
throw new Error("Redis returned an unexpected string reply.");
|
|
427
|
+
}
|
|
428
|
+
function escapeRedisGlob(value) {
|
|
429
|
+
return value.replaceAll(/[\\*?\[\]]/g, (match) => `\\${match}`);
|
|
430
|
+
}
|
|
431
|
+
async function cacheBlobToUint8Array(blob) {
|
|
432
|
+
if (typeof blob === "string")
|
|
433
|
+
return new TextEncoder().encode(blob);
|
|
434
|
+
if (blob instanceof Uint8Array)
|
|
435
|
+
return blob;
|
|
436
|
+
const chunks = [];
|
|
437
|
+
for await (const chunk of blob) {
|
|
438
|
+
chunks.push(chunk);
|
|
439
|
+
}
|
|
440
|
+
const size = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);
|
|
441
|
+
const output = new Uint8Array(size);
|
|
442
|
+
let offset = 0;
|
|
443
|
+
for (const chunk of chunks) {
|
|
444
|
+
output.set(chunk, offset);
|
|
445
|
+
offset += chunk.byteLength;
|
|
446
|
+
}
|
|
447
|
+
return output;
|
|
448
|
+
}
|
|
449
|
+
function encodeRedisCommand(parts) {
|
|
450
|
+
const chunks = [Buffer.from(`*${parts.length}\r\n`, "utf8")];
|
|
451
|
+
for (const part of parts) {
|
|
452
|
+
const bytes = typeof part === "string" ? Buffer.from(part, "utf8") : Buffer.from(part);
|
|
453
|
+
chunks.push(Buffer.from(`$${bytes.byteLength}\r\n`, "utf8"), bytes, Buffer.from("\r\n", "utf8"));
|
|
454
|
+
}
|
|
455
|
+
return Buffer.concat(chunks);
|
|
456
|
+
}
|
|
457
|
+
function parseRedisReply(buffer) {
|
|
458
|
+
if (buffer.length === 0)
|
|
459
|
+
return null;
|
|
460
|
+
const prefix = buffer[0];
|
|
461
|
+
if (prefix === undefined)
|
|
462
|
+
return null;
|
|
463
|
+
const type = String.fromCharCode(prefix);
|
|
464
|
+
if (type === "+") {
|
|
465
|
+
const line = readRedisLine(buffer, 1);
|
|
466
|
+
if (!line)
|
|
467
|
+
return null;
|
|
468
|
+
return { reply: line.text, rest: buffer.subarray(line.next) };
|
|
469
|
+
}
|
|
470
|
+
if (type === "-") {
|
|
471
|
+
const line = readRedisLine(buffer, 1);
|
|
472
|
+
if (!line)
|
|
473
|
+
return null;
|
|
474
|
+
throw new Error(`Redis error: ${line.text}`);
|
|
475
|
+
}
|
|
476
|
+
if (type === ":") {
|
|
477
|
+
const line = readRedisLine(buffer, 1);
|
|
478
|
+
if (!line)
|
|
479
|
+
return null;
|
|
480
|
+
return { reply: Number(line.text), rest: buffer.subarray(line.next) };
|
|
481
|
+
}
|
|
482
|
+
if (type === "$") {
|
|
483
|
+
const line = readRedisLine(buffer, 1);
|
|
484
|
+
if (!line)
|
|
485
|
+
return null;
|
|
486
|
+
const length = Number(line.text);
|
|
487
|
+
if (length === -1)
|
|
488
|
+
return { reply: null, rest: buffer.subarray(line.next) };
|
|
489
|
+
if (!Number.isInteger(length) || length < 0)
|
|
490
|
+
throw new Error("Redis returned an invalid bulk string length.");
|
|
491
|
+
const start = line.next;
|
|
492
|
+
const end = start + length;
|
|
493
|
+
if (buffer.length < end + 2)
|
|
494
|
+
return null;
|
|
495
|
+
if (buffer[end] !== 13 || buffer[end + 1] !== 10)
|
|
496
|
+
throw new Error("Redis returned a malformed bulk string.");
|
|
497
|
+
return { reply: Buffer.from(buffer.subarray(start, end)), rest: buffer.subarray(end + 2) };
|
|
498
|
+
}
|
|
499
|
+
if (type === "*") {
|
|
500
|
+
const line = readRedisLine(buffer, 1);
|
|
501
|
+
if (!line)
|
|
502
|
+
return null;
|
|
503
|
+
const length = Number(line.text);
|
|
504
|
+
if (length === -1)
|
|
505
|
+
return { reply: null, rest: buffer.subarray(line.next) };
|
|
506
|
+
if (!Number.isInteger(length) || length < 0)
|
|
507
|
+
throw new Error("Redis returned an invalid array length.");
|
|
508
|
+
const replies = [];
|
|
509
|
+
let rest = buffer.subarray(line.next);
|
|
510
|
+
for (let index = 0; index < length; index += 1) {
|
|
511
|
+
const parsed = parseRedisReply(rest);
|
|
512
|
+
if (!parsed)
|
|
513
|
+
return null;
|
|
514
|
+
replies.push(parsed.reply);
|
|
515
|
+
rest = parsed.rest;
|
|
516
|
+
}
|
|
517
|
+
return { reply: replies, rest };
|
|
518
|
+
}
|
|
519
|
+
throw new Error(`Redis returned unsupported reply type "${type}".`);
|
|
520
|
+
}
|
|
521
|
+
function readRedisLine(buffer, offset) {
|
|
522
|
+
const end = buffer.indexOf("\r\n", offset);
|
|
523
|
+
if (end === -1)
|
|
524
|
+
return null;
|
|
525
|
+
return { text: buffer.toString("utf8", offset, end), next: end + 2 };
|
|
526
|
+
}
|
|
527
|
+
function isEnvVarRef(value) {
|
|
528
|
+
return isRecord(value) && value.kind === "async-pipeline.env.var" && typeof value.name === "string";
|
|
529
|
+
}
|
|
530
|
+
function isRecord(value) {
|
|
531
|
+
return typeof value === "object" && value !== null;
|
|
532
|
+
}
|
|
533
|
+
//# sourceMappingURL=redis-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-cache.js","sourceRoot":"","sources":["../src/redis-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|