@c9up/bay 0.2.0 → 0.2.1
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/BayProvider.d.ts +12 -0
- package/dist/BayProvider.d.ts.map +1 -1
- package/dist/BayProvider.js +2 -1
- package/dist/BayProvider.js.map +1 -1
- package/dist/drivers/RedisDriver.d.ts.map +1 -1
- package/dist/drivers/RedisDriver.js +5 -1
- package/dist/drivers/RedisDriver.js.map +1 -1
- package/dist/jobs.d.ts +13 -1
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +36 -6
- package/dist/jobs.js.map +1 -1
- package/dist/quasar.d.ts +6 -9
- package/dist/quasar.d.ts.map +1 -1
- package/dist/quasar.js +27 -55
- package/dist/quasar.js.map +1 -1
- package/dist/vendor/nodeEnv.d.ts +5 -0
- package/dist/vendor/nodeEnv.d.ts.map +1 -0
- package/dist/{nodeEnv.js → vendor/nodeEnv.js} +13 -7
- package/dist/vendor/nodeEnv.js.map +1 -0
- package/dist/vendor/quasarConnection.d.ts +35 -0
- package/dist/vendor/quasarConnection.d.ts.map +1 -0
- package/dist/vendor/quasarConnection.js +62 -0
- package/dist/vendor/quasarConnection.js.map +1 -0
- package/package.json +1 -1
- package/src/BayProvider.ts +14 -1
- package/src/drivers/RedisDriver.ts +5 -1
- package/src/jobs.ts +42 -9
- package/src/quasar.ts +28 -72
- package/src/{nodeEnv.ts → vendor/nodeEnv.ts} +14 -7
- package/src/vendor/quasarConnection.ts +129 -0
- package/dist/nodeEnv.d.ts +0 -16
- package/dist/nodeEnv.d.ts.map +0 -1
- package/dist/nodeEnv.js.map +0 -1
package/dist/BayProvider.d.ts
CHANGED
|
@@ -22,6 +22,18 @@ export interface BayConfigStore {
|
|
|
22
22
|
export interface BayAppContext {
|
|
23
23
|
container: BayContainer;
|
|
24
24
|
config: BayConfigStore;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a path against the application root (AdonisJS `app.makePath`).
|
|
27
|
+
*
|
|
28
|
+
* `app/jobs` means "under the application root", not "under whatever
|
|
29
|
+
* directory the process started in". Without this, discovery resolved
|
|
30
|
+
* against `process.cwd()`, so a worker launched from anywhere else found
|
|
31
|
+
* nothing — and found it silently.
|
|
32
|
+
*
|
|
33
|
+
* Optional, because bay is agnostic: a host with no notion of an
|
|
34
|
+
* application root leaves discovery cwd-relative, as before.
|
|
35
|
+
*/
|
|
36
|
+
makePath?(...segments: string[]): string;
|
|
25
37
|
}
|
|
26
38
|
export interface BayProviderConfig {
|
|
27
39
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BayProvider.d.ts","sourceRoot":"","sources":["../src/BayProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,oBAAoB,CAAC;AAS5B,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGrE;;;;;GAKG;AACH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjD;AACD,MAAM,WAAW,cAAc;IAC9B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;CAC7C;AACD,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"BayProvider.d.ts","sourceRoot":"","sources":["../src/BayProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,oBAAoB,CAAC;AAS5B,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGrE;;;;;GAKG;AACH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjD;AACD,MAAM,WAAW,cAAc;IAC9B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;CAC7C;AACD,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAwED,MAAM,CAAC,OAAO,OAAO,WAAW;;IACnB,SAAS,CAAC,GAAG,EAAE,aAAa;gBAAlB,GAAG,EAAE,aAAa;IAExC,QAAQ,IAAI,IAAI;IAmBV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAS/B"}
|
package/dist/BayProvider.js
CHANGED
|
@@ -95,7 +95,8 @@ export default class BayProvider {
|
|
|
95
95
|
const first = locations[0];
|
|
96
96
|
if (first !== undefined)
|
|
97
97
|
setJobsDir(directoryOf(first));
|
|
98
|
-
|
|
98
|
+
const resolveLocation = this.app.makePath?.bind(this.app);
|
|
99
|
+
for (const job of await discoverJobs(locations, resolveLocation)) {
|
|
99
100
|
this.#queue.registerJob(job);
|
|
100
101
|
}
|
|
101
102
|
}
|
package/dist/BayProvider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BayProvider.js","sourceRoot":"","sources":["../src/BayProvider.ts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACN,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,UAAU,GACV,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAsB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"BayProvider.js","sourceRoot":"","sources":["../src/BayProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/RedisDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
* needs a thin adapter.
|
|
19
19
|
*/
|
|
20
20
|
import { DEFAULT_QUEUE } from "../Job.js";
|
|
21
|
-
import { inProduction } from "../nodeEnv.js";
|
|
22
21
|
import { queueOf } from "../QueueManager.js";
|
|
22
|
+
import { inProduction } from "../vendor/nodeEnv.js";
|
|
23
23
|
function isValidJob(obj) {
|
|
24
24
|
if (typeof obj !== "object" || obj === null)
|
|
25
25
|
return false;
|
|
@@ -65,6 +65,10 @@ function checkLmove(client, allowNonAtomicPop) {
|
|
|
65
65
|
// job from pending before it reaches processing: nothing recovers it,
|
|
66
66
|
// because nothing knows it existed. That is a different product, and in
|
|
67
67
|
// production it must be asked for rather than fallen into.
|
|
68
|
+
// Read through `inProduction()` rather than `NODE_ENV === "production"`:
|
|
69
|
+
// `NODE_ENV=prod` is ordinary in a Dockerfile, and taken verbatim it answers
|
|
70
|
+
// "not production" — so this queue would silently accept a delivery
|
|
71
|
+
// guarantee weaker than the one it advertises.
|
|
68
72
|
if (inProduction() && !allowNonAtomicPop) {
|
|
69
73
|
throw new Error("[bay] this Redis client has no LMOVE (Redis < 6.2), so pop() would be a non-atomic lpop+rpush — " +
|
|
70
74
|
"a crash between the two loses the in-flight job, turning at-least-once delivery into at-most-once.\n" +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisDriver.js","sourceRoot":"","sources":["../../src/drivers/RedisDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RedisDriver.js","sourceRoot":"","sources":["../../src/drivers/RedisDriver.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs.d.ts
CHANGED
|
@@ -39,5 +39,17 @@ export declare function directoryOf(location: string): string;
|
|
|
39
39
|
* A module that throws on import is reported and skipped: one unfinished job
|
|
40
40
|
* file must not stop the worker from running every other job.
|
|
41
41
|
*/
|
|
42
|
-
export declare function discoverJobs(locations: readonly string[]
|
|
42
|
+
export declare function discoverJobs(locations: readonly string[],
|
|
43
|
+
/**
|
|
44
|
+
* Turn a configured location into an absolute path.
|
|
45
|
+
*
|
|
46
|
+
* The host supplies it — `app.makePath` on ream — because `app/jobs` means
|
|
47
|
+
* "under the application root", not "under whatever directory the process
|
|
48
|
+
* happens to have started in". Resolving against `process.cwd()` gave a
|
|
49
|
+
* worker launched from anywhere else a silent empty discovery.
|
|
50
|
+
*
|
|
51
|
+
* Absent, the old cwd-relative behaviour stands: bay is agnostic, and a host
|
|
52
|
+
* with no notion of an application root has nothing better to offer.
|
|
53
|
+
*/
|
|
54
|
+
resolveLocation?: (location: string) => string): Promise<JobClass[]>;
|
|
43
55
|
//# sourceMappingURL=jobs.d.ts.map
|
package/dist/jobs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErD,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAI3C,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIpD;
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErD,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAI3C,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIpD;AAwCD;;;;;;GAMG;AACH,wBAAsB,YAAY,CACjC,SAAS,EAAE,SAAS,MAAM,EAAE;AAC5B;;;;;;;;;;GAUG;AACH,eAAe,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAChB,GACrB,OAAO,CAAC,QAAQ,EAAE,CAAC,CA8BrB"}
|
package/dist/jobs.js
CHANGED
|
@@ -54,10 +54,17 @@ async function walk(dir, depth = 0) {
|
|
|
54
54
|
try {
|
|
55
55
|
entries = await fsp.readdir(dir, { withFileTypes: true });
|
|
56
56
|
}
|
|
57
|
-
catch {
|
|
58
|
-
// A declared directory that does not exist
|
|
57
|
+
catch (err) {
|
|
58
|
+
// A declared directory that does not exist YET is not an error: a project
|
|
59
59
|
// can name where its jobs will go before writing the first one.
|
|
60
|
-
|
|
60
|
+
//
|
|
61
|
+
// Anything else is. Reading every failure as "empty" meant a permission
|
|
62
|
+
// denial, a broken mount or a path pointing at a file produced a worker
|
|
63
|
+
// with no handlers and nothing said — the queue accepted jobs and
|
|
64
|
+
// processed none of them.
|
|
65
|
+
if (err.code === "ENOENT")
|
|
66
|
+
return [];
|
|
67
|
+
throw new Error(`[bay] cannot read the jobs directory '${dir}': ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
61
68
|
}
|
|
62
69
|
const found = [];
|
|
63
70
|
for (const entry of entries) {
|
|
@@ -81,16 +88,33 @@ async function walk(dir, depth = 0) {
|
|
|
81
88
|
* A module that throws on import is reported and skipped: one unfinished job
|
|
82
89
|
* file must not stop the worker from running every other job.
|
|
83
90
|
*/
|
|
84
|
-
export async function discoverJobs(locations
|
|
91
|
+
export async function discoverJobs(locations,
|
|
92
|
+
/**
|
|
93
|
+
* Turn a configured location into an absolute path.
|
|
94
|
+
*
|
|
95
|
+
* The host supplies it — `app.makePath` on ream — because `app/jobs` means
|
|
96
|
+
* "under the application root", not "under whatever directory the process
|
|
97
|
+
* happens to have started in". Resolving against `process.cwd()` gave a
|
|
98
|
+
* worker launched from anywhere else a silent empty discovery.
|
|
99
|
+
*
|
|
100
|
+
* Absent, the old cwd-relative behaviour stands: bay is agnostic, and a host
|
|
101
|
+
* with no notion of an application root has nothing better to offer.
|
|
102
|
+
*/
|
|
103
|
+
resolveLocation = (location) => path.resolve(location)) {
|
|
85
104
|
const found = [];
|
|
105
|
+
let scanned = 0;
|
|
106
|
+
const failures = [];
|
|
86
107
|
for (const location of locations) {
|
|
87
|
-
for (const file of await walk(directoryOf(location))) {
|
|
108
|
+
for (const file of await walk(resolveLocation(directoryOf(location)))) {
|
|
109
|
+
scanned += 1;
|
|
88
110
|
let module;
|
|
89
111
|
try {
|
|
90
112
|
module = await import(pathToFileURL(path.resolve(file)).href);
|
|
91
113
|
}
|
|
92
114
|
catch (err) {
|
|
93
|
-
|
|
115
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
116
|
+
failures.push(`${file}: ${message}`);
|
|
117
|
+
process.stderr.write(`[bay] could not load '${file}': ${message}\n`);
|
|
94
118
|
continue;
|
|
95
119
|
}
|
|
96
120
|
if (typeof module !== "object" || module === null)
|
|
@@ -100,6 +124,12 @@ export async function discoverJobs(locations) {
|
|
|
100
124
|
found.push(exported);
|
|
101
125
|
}
|
|
102
126
|
}
|
|
127
|
+
// Skipping ONE broken file so the others still run is the point of the catch
|
|
128
|
+
// above. Ending with nothing at all because every file was broken is a
|
|
129
|
+
// different thing: the worker would come up, accept jobs and process none.
|
|
130
|
+
if (found.length === 0 && scanned > 0 && failures.length === scanned) {
|
|
131
|
+
throw new Error(`[bay] every job file failed to load, so the worker has no handlers:\n ${failures.join("\n ")}`);
|
|
132
|
+
}
|
|
103
133
|
return found;
|
|
104
134
|
}
|
|
105
135
|
//# sourceMappingURL=jobs.js.map
|
package/dist/jobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AAErD,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE3C,IAAI,OAAO,GAAG,gBAAgB,CAAC;AAE/B,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,GAAW;IACrC,OAAO,GAAG,GAAG,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU;IACzB,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAC5C,CAAC;AAED,kDAAkD;AAClD,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,KAAK,GAAG,CAAC;IACzC,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACzB,IAAI,OAAmC,CAAC;IACxC,IAAI,CAAC;QACJ,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AAErD,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE3C,IAAI,OAAO,GAAG,gBAAgB,CAAC;AAE/B,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,GAAW;IACrC,OAAO,GAAG,GAAG,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU;IACzB,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAC5C,CAAC;AAED,kDAAkD;AAClD,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,KAAK,GAAG,CAAC;IACzC,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACzB,IAAI,OAAmC,CAAC;IACxC,IAAI,CAAC;QACJ,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,0EAA0E;QAC1E,gEAAgE;QAChE,EAAE;QACF,wEAAwE;QACxE,wEAAwE;QACxE,kEAAkE;QAClE,0BAA0B;QAC1B,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACd,yCAAyC,GAAG,MAC3C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAChD,EAAE,EACF,EAAE,KAAK,EAAE,GAAG,EAAE,CACd,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,SAAS;QACV,CAAC;QACD,2DAA2D;QAC3D,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,SAA4B;AAC5B;;;;;;;;;;GAUG;AACH,kBAAgD,CAAC,QAAQ,EAAE,EAAE,CAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAEvB,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACJ,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;gBACrE,SAAS;YACV,CAAC;YACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAS;YAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IACD,6EAA6E;IAC7E,uEAAuE;IACvE,2EAA2E;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACd,0EAA0E,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACjG,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
|
package/dist/quasar.d.ts
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolving a Redis connection by name, from `@c9up/quasar`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* The shape is checked before use rather than asserted, the same way bay
|
|
10
|
-
* duck-types its host framework.
|
|
4
|
+
* The loading, the shape check and the messages are the same in every package
|
|
5
|
+
* that offers a Redis-backed option, so they are vendored rather than written
|
|
6
|
+
* again: `src/vendor/quasarConnection.ts`, generated from one source. What is
|
|
7
|
+
* specific to this package — the commands it issues, and what it does with
|
|
8
|
+
* them — stays here, because that is the part a reader needs.
|
|
11
9
|
*/
|
|
12
10
|
import type { RedisClient } from "./drivers/RedisDriver.js";
|
|
13
11
|
/**
|
|
14
|
-
* A resolver
|
|
15
|
-
* loaded on the first queue command, not at config time.
|
|
12
|
+
* A resolver — quasar is loaded on first use, not at config time.
|
|
16
13
|
*/
|
|
17
14
|
export declare function quasarConnection(name?: string): () => Promise<RedisClient>;
|
|
18
15
|
//# sourceMappingURL=quasar.d.ts.map
|
package/dist/quasar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quasar.d.ts","sourceRoot":"","sources":["../src/quasar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quasar.d.ts","sourceRoot":"","sources":["../src/quasar.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiB5D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAS1E"}
|
package/dist/quasar.js
CHANGED
|
@@ -1,64 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolving a Redis connection by name, from `@c9up/quasar`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* The shape is checked before use rather than asserted, the same way bay
|
|
10
|
-
* duck-types its host framework.
|
|
4
|
+
* The loading, the shape check and the messages are the same in every package
|
|
5
|
+
* that offers a Redis-backed option, so they are vendored rather than written
|
|
6
|
+
* again: `src/vendor/quasarConnection.ts`, generated from one source. What is
|
|
7
|
+
* specific to this package — the commands it issues, and what it does with
|
|
8
|
+
* them — stays here, because that is the part a reader needs.
|
|
11
9
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"lpop",
|
|
27
|
-
"lrem",
|
|
28
|
-
"llen",
|
|
29
|
-
"lrange",
|
|
30
|
-
"del",
|
|
31
|
-
"set",
|
|
32
|
-
"get",
|
|
33
|
-
];
|
|
34
|
-
return required.every((name) => typeof Reflect.get(value, name) === "function");
|
|
35
|
-
}
|
|
10
|
+
import { quasarConnection as loadQuasarConnection } from "./vendor/quasarConnection.js";
|
|
11
|
+
// The commands this driver actually issues — every non-optional member of
|
|
12
|
+
// `RedisClient`. `lmove` is deliberately absent: the driver declares it
|
|
13
|
+
// optional and falls back when it is not there.
|
|
14
|
+
const REQUIRED = [
|
|
15
|
+
"rpush",
|
|
16
|
+
"lpop",
|
|
17
|
+
"lrem",
|
|
18
|
+
"llen",
|
|
19
|
+
"lrange",
|
|
20
|
+
"del",
|
|
21
|
+
"set",
|
|
22
|
+
"get",
|
|
23
|
+
];
|
|
36
24
|
/**
|
|
37
|
-
* A resolver
|
|
38
|
-
* loaded on the first queue command, not at config time.
|
|
25
|
+
* A resolver — quasar is loaded on first use, not at config time.
|
|
39
26
|
*/
|
|
40
27
|
export function quasarConnection(name) {
|
|
41
|
-
return async () => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
throw new Error(`Bay: the "${name ?? "default"}" queue asks for a quasar connection, but @c9up/quasar is not installed.\n` +
|
|
49
|
-
" pnpm add @c9up/quasar", { cause });
|
|
50
|
-
}
|
|
51
|
-
const manager = isConnectionSource(loaded)
|
|
52
|
-
? loaded
|
|
53
|
-
: Reflect.get(Object(loaded), "default");
|
|
54
|
-
if (!isConnectionSource(manager)) {
|
|
55
|
-
throw new Error("Bay: @c9up/quasar/services/main did not expose a connection() manager");
|
|
56
|
-
}
|
|
57
|
-
const connection = manager.connection(name);
|
|
58
|
-
if (!isRedisClient(connection)) {
|
|
59
|
-
throw new Error(`Bay: quasar connection "${name ?? "default"}" does not carry the commands this queue needs`);
|
|
60
|
-
}
|
|
61
|
-
return connection;
|
|
62
|
-
};
|
|
28
|
+
return async () => loadQuasarConnection({
|
|
29
|
+
pkg: "bay",
|
|
30
|
+
name,
|
|
31
|
+
required: REQUIRED,
|
|
32
|
+
what: "the queue driver",
|
|
33
|
+
raise: (_reason, message, cause) => new Error(message, { cause }),
|
|
34
|
+
});
|
|
63
35
|
}
|
|
64
36
|
//# sourceMappingURL=quasar.js.map
|
package/dist/quasar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quasar.js","sourceRoot":"","sources":["../src/quasar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quasar.js","sourceRoot":"","sources":["../src/quasar.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAExF,0EAA0E;AAC1E,wEAAwE;AACxE,gDAAgD;AAChD,MAAM,QAAQ,GAAG;IAChB,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,KAAK;IACL,KAAK;IACL,KAAK;CACI,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC7C,OAAO,KAAK,IAAI,EAAE,CACjB,oBAAoB,CAAc;QACjC,GAAG,EAAE,KAAK;QACV,IAAI;QACJ,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC;KACjE,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** The canonical name for whatever `NODE_ENV` holds. */
|
|
2
|
+
export declare function normalizeNodeEnv(value: string | undefined): string;
|
|
3
|
+
/** Whether this process is running in production, under any spelling. */
|
|
4
|
+
export declare function inProduction(): boolean;
|
|
5
|
+
//# sourceMappingURL=nodeEnv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeEnv.d.ts","sourceRoot":"","sources":["../../src/vendor/nodeEnv.ts"],"names":[],"mappings":"AAuBA,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOlE;AAED,yEAAyE;AACzE,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
// Generated from scripts/vendor/nodeEnv.ts — do not edit.
|
|
2
|
+
//
|
|
3
|
+
// This package is published and built from its own repository, so the file
|
|
4
|
+
// has to exist here rather than be imported. `pnpm vendor:sync` rewrites it,
|
|
5
|
+
// and `pnpm vendor:check` fails if this copy has drifted from the original.
|
|
1
6
|
/**
|
|
2
|
-
*
|
|
7
|
+
* `NODE_ENV`, read the way every runtime actually spells it.
|
|
3
8
|
*
|
|
4
|
-
* `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard
|
|
5
|
-
*
|
|
6
|
-
*
|
|
9
|
+
* `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard, and a
|
|
10
|
+
* bare `=== "production"` answers "not production" for it. What that costs
|
|
11
|
+
* differs per package, so the consequence is stated where the decision is
|
|
12
|
+
* taken, not here.
|
|
7
13
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
14
|
+
* The tables mirror the framework's (`@c9up/ream`, src/env/nodeEnv.ts), which
|
|
15
|
+
* is the origin rather than a peer: it formats to different rules and exposes
|
|
16
|
+
* `currentNodeEnv()` instead of `inProduction()`.
|
|
11
17
|
*/
|
|
12
18
|
const DEV_ENVS = ["dev", "develop", "development"];
|
|
13
19
|
const PROD_ENVS = ["prod", "production"];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeEnv.js","sourceRoot":"","sources":["../../src/vendor/nodeEnv.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAE5E;;;;;;;;;;;GAWG;AAEH,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEtC,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC;IACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY;IAC3B,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,YAAY,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface QuasarConnectionRequest {
|
|
2
|
+
/** The package asking. It prefixes every message this can raise. */
|
|
3
|
+
pkg: string;
|
|
4
|
+
/**
|
|
5
|
+
* How this package builds an error.
|
|
6
|
+
*
|
|
7
|
+
* Not optional, and not `new Error` by default: a package with its own
|
|
8
|
+
* error type carries codes (`E_<PKG>_<REASON>`) that a caller catches on,
|
|
9
|
+
* and a shared helper throwing a bare Error would silently drop them. The
|
|
10
|
+
* two reasons are distinguished so the codes can be too.
|
|
11
|
+
*/
|
|
12
|
+
raise: (reason: "quasar-missing" | "incomplete-connection", message: string, cause?: unknown) => Error;
|
|
13
|
+
/** Connection name, or `undefined` for quasar's default. */
|
|
14
|
+
name?: string;
|
|
15
|
+
/** The commands the caller will actually issue. */
|
|
16
|
+
required: readonly string[];
|
|
17
|
+
/** What the caller does with them, for the message that names a gap. */
|
|
18
|
+
what: string;
|
|
19
|
+
/**
|
|
20
|
+
* A second way out, when this package has one.
|
|
21
|
+
*
|
|
22
|
+
* Several of them accept a client object directly, so "pass a client
|
|
23
|
+
* instead of a connection name" is actionable — and it was in each
|
|
24
|
+
* package's own message before this was shared. Dropping it to unify the
|
|
25
|
+
* wording would have made the error strictly less useful.
|
|
26
|
+
*/
|
|
27
|
+
alternative?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The named connection, checked for the commands the caller needs BEFORE it is
|
|
31
|
+
* handed over — a connection missing one would otherwise fail on the first
|
|
32
|
+
* command, far from the line that asked for it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function quasarConnection<T>(request: QuasarConnectionRequest): Promise<T>;
|
|
35
|
+
//# sourceMappingURL=quasarConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quasarConnection.d.ts","sourceRoot":"","sources":["../../src/vendor/quasarConnection.ts"],"names":[],"mappings":"AAiDA,MAAM,WAAW,uBAAuB;IACvC,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;OAOG;IACH,KAAK,EAAE,CACN,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,EAClD,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,KACX,KAAK,CAAC;IACX,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACvC,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC,CAAC,CAAC,CAuCZ"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Generated from scripts/vendor/quasarConnection.ts — do not edit.
|
|
2
|
+
//
|
|
3
|
+
// This package is published and built from its own repository, so the file
|
|
4
|
+
// has to exist here rather than be imported. `pnpm vendor:sync` rewrites it,
|
|
5
|
+
// and `pnpm vendor:check` fails if this copy has drifted from the original.
|
|
6
|
+
/**
|
|
7
|
+
* Read a member without assuming how the object answers.
|
|
8
|
+
*
|
|
9
|
+
* Two shapes have to work, and they disagree about `in`. Quasar's accessor is
|
|
10
|
+
* a Proxy over an empty null-prototype object with only a `get` trap, so
|
|
11
|
+
* `"connection" in manager` is FALSE while reading it returns the function —
|
|
12
|
+
* gating on `in` rejected the real manager. And a module namespace under a
|
|
13
|
+
* test double RAISES for an export it does not have, rather than answering
|
|
14
|
+
* undefined, so a bare read fails on the mock. Reading through a catch is what
|
|
15
|
+
* satisfies both.
|
|
16
|
+
*/
|
|
17
|
+
function readMember(value, name) {
|
|
18
|
+
if (typeof value !== "object" || value === null)
|
|
19
|
+
return undefined;
|
|
20
|
+
try {
|
|
21
|
+
return Reflect.get(value, name);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function isConnectionSource(value) {
|
|
28
|
+
return typeof readMember(value, "connection") === "function";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The named connection, checked for the commands the caller needs BEFORE it is
|
|
32
|
+
* handed over — a connection missing one would otherwise fail on the first
|
|
33
|
+
* command, far from the line that asked for it.
|
|
34
|
+
*/
|
|
35
|
+
export async function quasarConnection(request) {
|
|
36
|
+
const { pkg, name, required, what, raise, alternative } = request;
|
|
37
|
+
const specifier = "@c9up/quasar/services/main";
|
|
38
|
+
let loaded;
|
|
39
|
+
try {
|
|
40
|
+
loaded = await import(/* @vite-ignore */ specifier);
|
|
41
|
+
}
|
|
42
|
+
catch (cause) {
|
|
43
|
+
throw raise("quasar-missing", `[${pkg}] ${what} asks for the quasar connection "${name ?? "default"}", but @c9up/quasar is not installed.\n` +
|
|
44
|
+
` pnpm add @c9up/quasar${alternative ? `, ${alternative}` : ""}`, cause);
|
|
45
|
+
}
|
|
46
|
+
const manager = isConnectionSource(loaded)
|
|
47
|
+
? loaded
|
|
48
|
+
: Reflect.get(Object(loaded), "default");
|
|
49
|
+
if (!isConnectionSource(manager)) {
|
|
50
|
+
throw raise("quasar-missing", `[${pkg}] @c9up/quasar/services/main did not expose a connection() manager`);
|
|
51
|
+
}
|
|
52
|
+
const connection = manager.connection(name);
|
|
53
|
+
const missing = required.filter((command) => typeof readMember(connection, command) !== "function");
|
|
54
|
+
if (missing.length > 0) {
|
|
55
|
+
throw raise("incomplete-connection", `[${pkg}] the quasar connection${name ? ` '${name}'` : ""} is missing ${missing.join(", ")}, which ${what} issues`);
|
|
56
|
+
}
|
|
57
|
+
// Load-bearing: every member of `required` has just been checked to be a
|
|
58
|
+
// function on this object. The caller names the type it needs because only
|
|
59
|
+
// the caller knows which commands it asked for.
|
|
60
|
+
return connection;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=quasarConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quasarConnection.js","sourceRoot":"","sources":["../../src/vendor/quasarConnection.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAqB5E;;;;;;;;;;GAUG;AACH,SAAS,UAAU,CAAC,KAAc,EAAE,IAAY;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,CAAC;QACJ,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACzC,OAAO,OAAO,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,UAAU,CAAC;AAC9D,CAAC;AAmCD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,OAAgC;IAEhC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAClE,MAAM,SAAS,GAAG,4BAA4B,CAAC;IAC/C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,KAAK,CACV,gBAAgB,EAChB,IAAI,GAAG,KAAK,IAAI,oCAAoC,IAAI,IAAI,SAAS,yCAAyC;YAC7G,0BAA0B,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAClE,KAAK,CACL,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACzC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,CACV,gBAAgB,EAChB,IAAI,GAAG,oEAAoE,CAC3E,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAC9B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,UAAU,CAClE,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,CACV,uBAAuB,EACvB,IAAI,GAAG,0BAA0B,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAClH,CAAC;IACH,CAAC;IACD,yEAAyE;IACzE,2EAA2E;IAC3E,gDAAgD;IAChD,OAAO,UAAe,CAAC;AACxB,CAAC"}
|
package/package.json
CHANGED
package/src/BayProvider.ts
CHANGED
|
@@ -32,6 +32,18 @@ export interface BayConfigStore {
|
|
|
32
32
|
export interface BayAppContext {
|
|
33
33
|
container: BayContainer;
|
|
34
34
|
config: BayConfigStore;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a path against the application root (AdonisJS `app.makePath`).
|
|
37
|
+
*
|
|
38
|
+
* `app/jobs` means "under the application root", not "under whatever
|
|
39
|
+
* directory the process started in". Without this, discovery resolved
|
|
40
|
+
* against `process.cwd()`, so a worker launched from anywhere else found
|
|
41
|
+
* nothing — and found it silently.
|
|
42
|
+
*
|
|
43
|
+
* Optional, because bay is agnostic: a host with no notion of an
|
|
44
|
+
* application root leaves discovery cwd-relative, as before.
|
|
45
|
+
*/
|
|
46
|
+
makePath?(...segments: string[]): string;
|
|
35
47
|
}
|
|
36
48
|
|
|
37
49
|
export interface BayProviderConfig {
|
|
@@ -180,7 +192,8 @@ export default class BayProvider {
|
|
|
180
192
|
// `make:job` writes where discovery reads, so the two cannot drift.
|
|
181
193
|
const first = locations[0];
|
|
182
194
|
if (first !== undefined) setJobsDir(directoryOf(first));
|
|
183
|
-
|
|
195
|
+
const resolveLocation = this.app.makePath?.bind(this.app);
|
|
196
|
+
for (const job of await discoverJobs(locations, resolveLocation)) {
|
|
184
197
|
this.#queue.registerJob(job);
|
|
185
198
|
}
|
|
186
199
|
}
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
import { DEFAULT_QUEUE } from "../Job.js";
|
|
22
|
-
import { inProduction } from "../nodeEnv.js";
|
|
23
22
|
import { type JobRecord, type QueueDriver, queueOf } from "../QueueManager.js";
|
|
23
|
+
import { inProduction } from "../vendor/nodeEnv.js";
|
|
24
24
|
|
|
25
25
|
export interface RedisClient {
|
|
26
26
|
rpush(key: string, ...values: string[]): Promise<number>;
|
|
@@ -130,6 +130,10 @@ function checkLmove(client: RedisClient, allowNonAtomicPop: boolean): void {
|
|
|
130
130
|
// job from pending before it reaches processing: nothing recovers it,
|
|
131
131
|
// because nothing knows it existed. That is a different product, and in
|
|
132
132
|
// production it must be asked for rather than fallen into.
|
|
133
|
+
// Read through `inProduction()` rather than `NODE_ENV === "production"`:
|
|
134
|
+
// `NODE_ENV=prod` is ordinary in a Dockerfile, and taken verbatim it answers
|
|
135
|
+
// "not production" — so this queue would silently accept a delivery
|
|
136
|
+
// guarantee weaker than the one it advertises.
|
|
133
137
|
if (inProduction() && !allowNonAtomicPop) {
|
|
134
138
|
throw new Error(
|
|
135
139
|
"[bay] this Redis client has no LMOVE (Redis < 6.2), so pop() would be a non-atomic lpop+rpush — " +
|
package/src/jobs.ts
CHANGED
|
@@ -59,10 +59,21 @@ async function walk(dir: string, depth = 0): Promise<string[]> {
|
|
|
59
59
|
let entries: import("node:fs").Dirent[];
|
|
60
60
|
try {
|
|
61
61
|
entries = await fsp.readdir(dir, { withFileTypes: true });
|
|
62
|
-
} catch {
|
|
63
|
-
// A declared directory that does not exist
|
|
62
|
+
} catch (err) {
|
|
63
|
+
// A declared directory that does not exist YET is not an error: a project
|
|
64
64
|
// can name where its jobs will go before writing the first one.
|
|
65
|
-
|
|
65
|
+
//
|
|
66
|
+
// Anything else is. Reading every failure as "empty" meant a permission
|
|
67
|
+
// denial, a broken mount or a path pointing at a file produced a worker
|
|
68
|
+
// with no handlers and nothing said — the queue accepted jobs and
|
|
69
|
+
// processed none of them.
|
|
70
|
+
if ((err as NodeJS.ErrnoException).code === "ENOENT") return [];
|
|
71
|
+
throw new Error(
|
|
72
|
+
`[bay] cannot read the jobs directory '${dir}': ${
|
|
73
|
+
err instanceof Error ? err.message : String(err)
|
|
74
|
+
}`,
|
|
75
|
+
{ cause: err },
|
|
76
|
+
);
|
|
66
77
|
}
|
|
67
78
|
const found: string[] = [];
|
|
68
79
|
for (const entry of entries) {
|
|
@@ -87,19 +98,33 @@ async function walk(dir: string, depth = 0): Promise<string[]> {
|
|
|
87
98
|
*/
|
|
88
99
|
export async function discoverJobs(
|
|
89
100
|
locations: readonly string[],
|
|
101
|
+
/**
|
|
102
|
+
* Turn a configured location into an absolute path.
|
|
103
|
+
*
|
|
104
|
+
* The host supplies it — `app.makePath` on ream — because `app/jobs` means
|
|
105
|
+
* "under the application root", not "under whatever directory the process
|
|
106
|
+
* happens to have started in". Resolving against `process.cwd()` gave a
|
|
107
|
+
* worker launched from anywhere else a silent empty discovery.
|
|
108
|
+
*
|
|
109
|
+
* Absent, the old cwd-relative behaviour stands: bay is agnostic, and a host
|
|
110
|
+
* with no notion of an application root has nothing better to offer.
|
|
111
|
+
*/
|
|
112
|
+
resolveLocation: (location: string) => string = (location) =>
|
|
113
|
+
path.resolve(location),
|
|
90
114
|
): Promise<JobClass[]> {
|
|
91
115
|
const found: JobClass[] = [];
|
|
116
|
+
let scanned = 0;
|
|
117
|
+
const failures: string[] = [];
|
|
92
118
|
for (const location of locations) {
|
|
93
|
-
for (const file of await walk(directoryOf(location))) {
|
|
119
|
+
for (const file of await walk(resolveLocation(directoryOf(location)))) {
|
|
120
|
+
scanned += 1;
|
|
94
121
|
let module: unknown;
|
|
95
122
|
try {
|
|
96
123
|
module = await import(pathToFileURL(path.resolve(file)).href);
|
|
97
124
|
} catch (err) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}\n`,
|
|
102
|
-
);
|
|
125
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
126
|
+
failures.push(`${file}: ${message}`);
|
|
127
|
+
process.stderr.write(`[bay] could not load '${file}': ${message}\n`);
|
|
103
128
|
continue;
|
|
104
129
|
}
|
|
105
130
|
if (typeof module !== "object" || module === null) continue;
|
|
@@ -107,5 +132,13 @@ export async function discoverJobs(
|
|
|
107
132
|
if (isJobClass(exported)) found.push(exported);
|
|
108
133
|
}
|
|
109
134
|
}
|
|
135
|
+
// Skipping ONE broken file so the others still run is the point of the catch
|
|
136
|
+
// above. Ending with nothing at all because every file was broken is a
|
|
137
|
+
// different thing: the worker would come up, accept jobs and process none.
|
|
138
|
+
if (found.length === 0 && scanned > 0 && failures.length === scanned) {
|
|
139
|
+
throw new Error(
|
|
140
|
+
`[bay] every job file failed to load, so the worker has no handlers:\n ${failures.join("\n ")}`,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
110
143
|
return found;
|
|
111
144
|
}
|
package/src/quasar.ts
CHANGED
|
@@ -1,84 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resolving a Redis connection by name, from `@c9up/quasar`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* The shape is checked before use rather than asserted, the same way bay
|
|
10
|
-
* duck-types its host framework.
|
|
4
|
+
* The loading, the shape check and the messages are the same in every package
|
|
5
|
+
* that offers a Redis-backed option, so they are vendored rather than written
|
|
6
|
+
* again: `src/vendor/quasarConnection.ts`, generated from one source. What is
|
|
7
|
+
* specific to this package — the commands it issues, and what it does with
|
|
8
|
+
* them — stays here, because that is the part a reader needs.
|
|
11
9
|
*/
|
|
12
10
|
|
|
13
11
|
import type { RedisClient } from "./drivers/RedisDriver.js";
|
|
12
|
+
import { quasarConnection as loadQuasarConnection } from "./vendor/quasarConnection.js";
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
function isRedisClient(value: unknown): value is RedisClient {
|
|
29
|
-
if (typeof value !== "object" || value === null) return false;
|
|
30
|
-
// The commands this driver actually issues — every non-optional member of
|
|
31
|
-
// `RedisClient`. A connection missing one would fail on the first job push,
|
|
32
|
-
// far from the cause. `lmove` is deliberately absent: the driver declares it
|
|
33
|
-
// optional and falls back when it is not there.
|
|
34
|
-
const required = [
|
|
35
|
-
"rpush",
|
|
36
|
-
"lpop",
|
|
37
|
-
"lrem",
|
|
38
|
-
"llen",
|
|
39
|
-
"lrange",
|
|
40
|
-
"del",
|
|
41
|
-
"set",
|
|
42
|
-
"get",
|
|
43
|
-
];
|
|
44
|
-
return required.every(
|
|
45
|
-
(name) => typeof Reflect.get(value, name) === "function",
|
|
46
|
-
);
|
|
47
|
-
}
|
|
14
|
+
// The commands this driver actually issues — every non-optional member of
|
|
15
|
+
// `RedisClient`. `lmove` is deliberately absent: the driver declares it
|
|
16
|
+
// optional and falls back when it is not there.
|
|
17
|
+
const REQUIRED = [
|
|
18
|
+
"rpush",
|
|
19
|
+
"lpop",
|
|
20
|
+
"lrem",
|
|
21
|
+
"llen",
|
|
22
|
+
"lrange",
|
|
23
|
+
"del",
|
|
24
|
+
"set",
|
|
25
|
+
"get",
|
|
26
|
+
] as const;
|
|
48
27
|
|
|
49
28
|
/**
|
|
50
|
-
* A resolver
|
|
51
|
-
* loaded on the first queue command, not at config time.
|
|
29
|
+
* A resolver — quasar is loaded on first use, not at config time.
|
|
52
30
|
*/
|
|
53
31
|
export function quasarConnection(name?: string): () => Promise<RedisClient> {
|
|
54
|
-
return async () =>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
" pnpm add @c9up/quasar",
|
|
63
|
-
{ cause },
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const manager = isConnectionSource(loaded)
|
|
68
|
-
? loaded
|
|
69
|
-
: Reflect.get(Object(loaded), "default");
|
|
70
|
-
if (!isConnectionSource(manager)) {
|
|
71
|
-
throw new Error(
|
|
72
|
-
"Bay: @c9up/quasar/services/main did not expose a connection() manager",
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const connection = manager.connection(name);
|
|
77
|
-
if (!isRedisClient(connection)) {
|
|
78
|
-
throw new Error(
|
|
79
|
-
`Bay: quasar connection "${name ?? "default"}" does not carry the commands this queue needs`,
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
return connection;
|
|
83
|
-
};
|
|
32
|
+
return async () =>
|
|
33
|
+
loadQuasarConnection<RedisClient>({
|
|
34
|
+
pkg: "bay",
|
|
35
|
+
name,
|
|
36
|
+
required: REQUIRED,
|
|
37
|
+
what: "the queue driver",
|
|
38
|
+
raise: (_reason, message, cause) => new Error(message, { cause }),
|
|
39
|
+
});
|
|
84
40
|
}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
+
// Generated from scripts/vendor/nodeEnv.ts — do not edit.
|
|
2
|
+
//
|
|
3
|
+
// This package is published and built from its own repository, so the file
|
|
4
|
+
// has to exist here rather than be imported. `pnpm vendor:sync` rewrites it,
|
|
5
|
+
// and `pnpm vendor:check` fails if this copy has drifted from the original.
|
|
6
|
+
|
|
1
7
|
/**
|
|
2
|
-
*
|
|
8
|
+
* `NODE_ENV`, read the way every runtime actually spells it.
|
|
3
9
|
*
|
|
4
|
-
* `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard
|
|
5
|
-
*
|
|
6
|
-
*
|
|
10
|
+
* `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard, and a
|
|
11
|
+
* bare `=== "production"` answers "not production" for it. What that costs
|
|
12
|
+
* differs per package, so the consequence is stated where the decision is
|
|
13
|
+
* taken, not here.
|
|
7
14
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
15
|
+
* The tables mirror the framework's (`@c9up/ream`, src/env/nodeEnv.ts), which
|
|
16
|
+
* is the origin rather than a peer: it formats to different rules and exposes
|
|
17
|
+
* `currentNodeEnv()` instead of `inProduction()`.
|
|
11
18
|
*/
|
|
12
19
|
|
|
13
20
|
const DEV_ENVS = ["dev", "develop", "development"];
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Generated from scripts/vendor/quasarConnection.ts — do not edit.
|
|
2
|
+
//
|
|
3
|
+
// This package is published and built from its own repository, so the file
|
|
4
|
+
// has to exist here rather than be imported. `pnpm vendor:sync` rewrites it,
|
|
5
|
+
// and `pnpm vendor:check` fails if this copy has drifted from the original.
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Resolving a Redis connection by name, from `@c9up/quasar`.
|
|
9
|
+
*
|
|
10
|
+
* No package here depends on quasar: it is an optional peer, and this module
|
|
11
|
+
* never imports it statically — the specifier is built at runtime so the
|
|
12
|
+
* TypeScript build stays free of it too. A host that never names a connection
|
|
13
|
+
* neither installs it nor pays for it.
|
|
14
|
+
*
|
|
15
|
+
* What varies between callers is passed in rather than copied: which commands
|
|
16
|
+
* they will issue, and what they are doing with them. Both end up in the
|
|
17
|
+
* message, because "the connection is missing lpop" is only useful next to
|
|
18
|
+
* "which the queue's atomic pop issues".
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/** The slice of quasar's manager this needs: a connection, by name. */
|
|
22
|
+
interface ConnectionSource {
|
|
23
|
+
connection(name?: string): unknown;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Read a member without assuming how the object answers.
|
|
28
|
+
*
|
|
29
|
+
* Two shapes have to work, and they disagree about `in`. Quasar's accessor is
|
|
30
|
+
* a Proxy over an empty null-prototype object with only a `get` trap, so
|
|
31
|
+
* `"connection" in manager` is FALSE while reading it returns the function —
|
|
32
|
+
* gating on `in` rejected the real manager. And a module namespace under a
|
|
33
|
+
* test double RAISES for an export it does not have, rather than answering
|
|
34
|
+
* undefined, so a bare read fails on the mock. Reading through a catch is what
|
|
35
|
+
* satisfies both.
|
|
36
|
+
*/
|
|
37
|
+
function readMember(value: unknown, name: string): unknown {
|
|
38
|
+
if (typeof value !== "object" || value === null) return undefined;
|
|
39
|
+
try {
|
|
40
|
+
return Reflect.get(value, name);
|
|
41
|
+
} catch {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function isConnectionSource(value: unknown): value is ConnectionSource {
|
|
47
|
+
return typeof readMember(value, "connection") === "function";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface QuasarConnectionRequest {
|
|
51
|
+
/** The package asking. It prefixes every message this can raise. */
|
|
52
|
+
pkg: string;
|
|
53
|
+
/**
|
|
54
|
+
* How this package builds an error.
|
|
55
|
+
*
|
|
56
|
+
* Not optional, and not `new Error` by default: a package with its own
|
|
57
|
+
* error type carries codes (`E_<PKG>_<REASON>`) that a caller catches on,
|
|
58
|
+
* and a shared helper throwing a bare Error would silently drop them. The
|
|
59
|
+
* two reasons are distinguished so the codes can be too.
|
|
60
|
+
*/
|
|
61
|
+
raise: (
|
|
62
|
+
reason: "quasar-missing" | "incomplete-connection",
|
|
63
|
+
message: string,
|
|
64
|
+
cause?: unknown,
|
|
65
|
+
) => Error;
|
|
66
|
+
/** Connection name, or `undefined` for quasar's default. */
|
|
67
|
+
name?: string;
|
|
68
|
+
/** The commands the caller will actually issue. */
|
|
69
|
+
required: readonly string[];
|
|
70
|
+
/** What the caller does with them, for the message that names a gap. */
|
|
71
|
+
what: string;
|
|
72
|
+
/**
|
|
73
|
+
* A second way out, when this package has one.
|
|
74
|
+
*
|
|
75
|
+
* Several of them accept a client object directly, so "pass a client
|
|
76
|
+
* instead of a connection name" is actionable — and it was in each
|
|
77
|
+
* package's own message before this was shared. Dropping it to unify the
|
|
78
|
+
* wording would have made the error strictly less useful.
|
|
79
|
+
*/
|
|
80
|
+
alternative?: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The named connection, checked for the commands the caller needs BEFORE it is
|
|
85
|
+
* handed over — a connection missing one would otherwise fail on the first
|
|
86
|
+
* command, far from the line that asked for it.
|
|
87
|
+
*/
|
|
88
|
+
export async function quasarConnection<T>(
|
|
89
|
+
request: QuasarConnectionRequest,
|
|
90
|
+
): Promise<T> {
|
|
91
|
+
const { pkg, name, required, what, raise, alternative } = request;
|
|
92
|
+
const specifier = "@c9up/quasar/services/main";
|
|
93
|
+
let loaded: unknown;
|
|
94
|
+
try {
|
|
95
|
+
loaded = await import(/* @vite-ignore */ specifier);
|
|
96
|
+
} catch (cause) {
|
|
97
|
+
throw raise(
|
|
98
|
+
"quasar-missing",
|
|
99
|
+
`[${pkg}] ${what} asks for the quasar connection "${name ?? "default"}", but @c9up/quasar is not installed.\n` +
|
|
100
|
+
` pnpm add @c9up/quasar${alternative ? `, ${alternative}` : ""}`,
|
|
101
|
+
cause,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const manager = isConnectionSource(loaded)
|
|
106
|
+
? loaded
|
|
107
|
+
: Reflect.get(Object(loaded), "default");
|
|
108
|
+
if (!isConnectionSource(manager)) {
|
|
109
|
+
throw raise(
|
|
110
|
+
"quasar-missing",
|
|
111
|
+
`[${pkg}] @c9up/quasar/services/main did not expose a connection() manager`,
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const connection = manager.connection(name);
|
|
116
|
+
const missing = required.filter(
|
|
117
|
+
(command) => typeof readMember(connection, command) !== "function",
|
|
118
|
+
);
|
|
119
|
+
if (missing.length > 0) {
|
|
120
|
+
throw raise(
|
|
121
|
+
"incomplete-connection",
|
|
122
|
+
`[${pkg}] the quasar connection${name ? ` '${name}'` : ""} is missing ${missing.join(", ")}, which ${what} issues`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
// Load-bearing: every member of `required` has just been checked to be a
|
|
126
|
+
// function on this object. The caller names the type it needs because only
|
|
127
|
+
// the caller knows which commands it asked for.
|
|
128
|
+
return connection as T;
|
|
129
|
+
}
|
package/dist/nodeEnv.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reading `NODE_ENV`, with the aliases people actually set.
|
|
3
|
-
*
|
|
4
|
-
* `NODE_ENV=prod` is ordinary in a Dockerfile or a platform dashboard. Read
|
|
5
|
-
* verbatim it answers "not production" — and here that decides whether a queue
|
|
6
|
-
* silently accepts a delivery guarantee weaker than the one it advertises.
|
|
7
|
-
*
|
|
8
|
-
* Duplicated rather than imported: bay depends on no other package in this
|
|
9
|
-
* workspace, and a safety decision that only holds when an optional peer is
|
|
10
|
-
* installed is not a decision.
|
|
11
|
-
*/
|
|
12
|
-
/** The canonical name for whatever `NODE_ENV` holds. */
|
|
13
|
-
export declare function normalizeNodeEnv(value: string | undefined): string;
|
|
14
|
-
/** Whether this process is running in production, under any spelling. */
|
|
15
|
-
export declare function inProduction(): boolean;
|
|
16
|
-
//# sourceMappingURL=nodeEnv.d.ts.map
|
package/dist/nodeEnv.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nodeEnv.d.ts","sourceRoot":"","sources":["../src/nodeEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOlE;AAED,yEAAyE;AACzE,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
|
package/dist/nodeEnv.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nodeEnv.js","sourceRoot":"","sources":["../src/nodeEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACzC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEtC,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,aAAa,CAAC;IACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY;IAC3B,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,YAAY,CAAC;AAChE,CAAC"}
|