@c9up/eon 0.2.8 → 0.2.9

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.
@@ -34,6 +34,16 @@ export interface EonAppContext {
34
34
  config: {
35
35
  get<T = unknown>(key: string): T | undefined;
36
36
  };
37
+ /**
38
+ * Optional reader — present on ream's real application.
39
+ *
40
+ * `'warmup'` means the application was assembled to be INSPECTED rather than
41
+ * run: a route listing, a codegen pass, a config dump. Providers register,
42
+ * boot and start on that path too, so anything that opens a socket or
43
+ * creates a database has to ask first. A host that does not implement it is
44
+ * treated as running.
45
+ */
46
+ getMode?(): string;
37
47
  }
38
48
  /**
39
49
  * The transport-independent compiler service registered under `eon.compiler`.
@@ -1 +1 @@
1
- {"version":3,"file":"EonProvider.d.ts","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EACN,KAAK,iBAAiB,EAEtB,KAAK,UAAU,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE;QACV,SAAS,CACR,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,EAC5D,OAAO,EAAE,MAAM,OAAO,GACpB,IAAI,CAAC;QACR;;;;WAIG;QACH,OAAO,CAAC,CACP,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAC1D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE;QAAE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;CAC/D;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAC1B,MAAM,EAAE,mBAAmB,KACvB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,qBAAa,WAAW;;gBAQX,GAAG,EAAE,aAAa,EAAE,OAAO,GAAE,YAA2B;IAKpE,QAAQ,IAAI,IAAI;IAEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmIrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgF/B;AAID,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"EonProvider.d.ts","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EACN,KAAK,iBAAiB,EAEtB,KAAK,UAAU,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE;QACV,SAAS,CACR,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,EAC5D,OAAO,EAAE,MAAM,OAAO,GACpB,IAAI,CAAC;QACR;;;;WAIG;QACH,OAAO,CAAC,CACP,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAC1D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE;QAAE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;IACzD;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAI,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;CAC/D;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAC1B,MAAM,EAAE,mBAAmB,KACvB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,qBAAa,WAAW;;gBAQX,GAAG,EAAE,aAAa,EAAE,OAAO,GAAE,YAA2B;IAKpE,QAAQ,IAAI,IAAI;IAOV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6IrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgF/B;AAID,eAAe,WAAW,CAAC"}
@@ -27,7 +27,15 @@ export class EonProvider {
27
27
  this.#connect = connect;
28
28
  }
29
29
  register() { }
30
+ /** True when the application was assembled to be inspected rather than run. */
31
+ #isInspecting() {
32
+ return this.#app.getMode?.() === "warmup";
33
+ }
30
34
  async boot() {
35
+ // An inspection opens no WebSocket and creates no database. `warmUp()`
36
+ // runs boot, so a route listing reached TDengine — and could CREATE a
37
+ // database there — while `shutdown()` never fires on that path, leaving
38
+ // the sockets open. The compiler binding below is pure and stays.
31
39
  if (this.#booted) {
32
40
  throw new Error("EonProvider: boot() has already opened connections; a second boot would overwrite and leak them. Call shutdown() first, or construct a new provider.");
33
41
  }
@@ -36,6 +44,12 @@ export class EonProvider {
36
44
  compile: (spec, dialect) => compileStatementNative(spec, dialect),
37
45
  };
38
46
  this.#app.container.singleton("eon.compiler", () => service);
47
+ // Everything past here opens a socket or creates a database, so an
48
+ // inspection stops at the compiler. `warmUp()` runs boot, so a route
49
+ // listing reached TDengine — and could CREATE a database there — while
50
+ // `shutdown()` never fires on that path, leaving the sockets open.
51
+ if (this.#isInspecting())
52
+ return;
39
53
  const config = this.#app.config.get("timeseries") ??
40
54
  this.#app.config.get("eon");
41
55
  if (!config)
@@ -1 +1 @@
1
- {"version":3,"file":"EonProvider.js","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EonProvider.js","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/query/native.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;CAClB;AA6HD;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,UAAuB,GAC9B,iBAAiB,CAKnB;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/query/native.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;CAClB;AA0HD;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,UAAuB,GAC9B,iBAAiB,CAKnB;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
@@ -7,19 +7,7 @@
7
7
  * throws a descriptive error naming the attempted path — never a silent `null`.
8
8
  */
9
9
  import { randomUUID } from "node:crypto";
10
- import { createRequire } from "node:module";
11
- import { dirname, join } from "node:path";
12
- import { arch, platform } from "node:process";
13
- import { fileURLToPath } from "node:url";
14
- const require2 = createRequire(import.meta.url);
15
- const here = dirname(fileURLToPath(import.meta.url));
16
- const platformMap = {
17
- "linux-x64": "linux-x64-gnu",
18
- "linux-arm64": "linux-arm64-gnu",
19
- "darwin-x64": "darwin-x64",
20
- "darwin-arm64": "darwin-arm64",
21
- "win32-x64": "win32-x64-msvc",
22
- };
10
+ import { loadNativeBinary, muslHint, supportedTargets, } from "../vendor/nativeBinary.js";
23
11
  let native;
24
12
  /**
25
13
  * Resolve and cache the NAPI binding. Throws a descriptive error on an
@@ -30,21 +18,17 @@ let native;
30
18
  function loadNative() {
31
19
  if (native)
32
20
  return native;
33
- const key = `${platform}-${arch}`;
34
- const suffix = platformMap[key];
35
- if (!suffix) {
36
- throw new Error(`[E_EON_NAPI_UNSUPPORTED] no eon-query native binary for platform '${key}'. Supported: ${Object.keys(platformMap).join(", ")}.`);
37
- }
38
- const binaryPath = join(here, `../../index.${suffix}.node`);
39
- let binding;
40
- try {
41
- binding = require2(binaryPath);
42
- }
43
- catch (cause) {
44
- throw new Error(`[E_EON_NAPI_NOT_FOUND] eon-query native binary not found at '${binaryPath}'. Build it with: pnpm --filter @c9up/eon build:napi`, cause !== undefined ? { cause } : undefined);
21
+ // The resolution is shared; the refusal is not. Both codes below are eon's,
22
+ // and a caller branches on them.
23
+ const attempt = loadNativeBinary();
24
+ if (!attempt.loaded) {
25
+ if (attempt.suffix === undefined) {
26
+ throw new Error(`[E_EON_NAPI_UNSUPPORTED] no eon-query native binary for this platform. Supported: ${supportedTargets().join(", ")}.`);
27
+ }
28
+ throw new Error(`[E_EON_NAPI_NOT_FOUND] eon-query native binary 'index.${attempt.suffix}.node' not found or unloadable.${muslHint()} Build it with: pnpm --filter @c9up/eon build:napi`, attempt.cause !== undefined ? { cause: attempt.cause } : undefined);
45
29
  }
46
- native = binding;
47
- return binding;
30
+ native = attempt.binary;
31
+ return attempt.binary;
48
32
  }
49
33
  /**
50
34
  * i64 / nanosecond-timestamp precision guard for the JSON compile boundary.
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/query/native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/query/native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Every `platform-arch` a binary is built for.
3
+ *
4
+ * For the message a package raises when it refuses: "no binary for
5
+ * linux-riscv64" is only actionable next to the list of what there IS.
6
+ */
7
+ export declare function supportedTargets(): readonly string[];
8
+ /** The suffix a given `platform-arch` builds under, or `undefined`. */
9
+ export declare function nativeTargetSuffix(target: string): string | undefined;
10
+ /** The suffix for THIS platform, or `undefined` where no binary is built. */
11
+ export declare function nativeBinarySuffix(): string | undefined;
12
+ /**
13
+ * Why the binary is not there, phrased for whoever has to fix it.
14
+ *
15
+ * "not found" and "not built for your platform" call for different actions,
16
+ * and a single "unavailable" leaves the reader to guess which one they are
17
+ * looking at.
18
+ */
19
+ export declare function unavailableReason(cause?: unknown): string;
20
+ /**
21
+ * `musl` builds under a different suffix, and the failure is otherwise
22
+ * baffling: the file is there, and `require` still refuses it. Worth saying so
23
+ * in a message rather than leaving a reader to discover glibc.
24
+ */
25
+ export declare function muslHint(): string;
26
+ /** What a load attempt did, so the caller can apply its own policy. */
27
+ export type NativeBinaryResult<T> = {
28
+ loaded: true;
29
+ binary: T;
30
+ } | {
31
+ loaded: false;
32
+ suffix: string | undefined;
33
+ cause?: unknown;
34
+ };
35
+ /**
36
+ * Load `<package root>/index.<suffix>.node`.
37
+ *
38
+ * The path is fixed rather than passed: this file is generated into
39
+ * `<package>/src/vendor/`, so the package root is always two levels up, from
40
+ * `src` and from `dist` alike.
41
+ */
42
+ export declare function loadNativeBinary<T>(): NativeBinaryResult<T>;
43
+ //# sourceMappingURL=nativeBinary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeBinary.d.ts","sourceRoot":"","sources":["../../src/vendor/nativeBinary.ts"],"names":[],"mappings":"AAoCA;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAEpD;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAQzD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAIjC;AAED,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC7B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAElE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAa3D"}
@@ -0,0 +1,99 @@
1
+ // Generated from scripts/vendor/nativeBinary.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
+ * Finding the NAPI binary a package ships beside itself.
8
+ *
9
+ * Every package with a Rust engine repeats the same table: napi-rs names its
10
+ * artefacts `index.<platform>-<arch>-<abi>.node`, and the mapping from Node's
11
+ * `platform`/`arch` to that suffix is the part that must never differ between
12
+ * packages. Adding a target means adding it everywhere, and a package that
13
+ * missed the edit fails only on that platform — which is exactly the failure
14
+ * nobody reproduces.
15
+ *
16
+ * What is NOT here is the policy. Some packages degrade when the binary is
17
+ * absent and answer `undefined`; others refuse loudly with build instructions.
18
+ * Both are right for their package, so the loader reports what happened and
19
+ * the caller decides.
20
+ */
21
+ import { createRequire } from "node:module";
22
+ import { dirname, join } from "node:path";
23
+ import { arch, platform } from "node:process";
24
+ import { fileURLToPath } from "node:url";
25
+ /** Node's `platform-arch` → the suffix napi-rs builds under. */
26
+ const TARGETS = {
27
+ "linux-x64": "linux-x64-gnu",
28
+ "linux-arm64": "linux-arm64-gnu",
29
+ "darwin-x64": "darwin-x64",
30
+ "darwin-arm64": "darwin-arm64",
31
+ "win32-x64": "win32-x64-msvc",
32
+ };
33
+ /**
34
+ * Every `platform-arch` a binary is built for.
35
+ *
36
+ * For the message a package raises when it refuses: "no binary for
37
+ * linux-riscv64" is only actionable next to the list of what there IS.
38
+ */
39
+ export function supportedTargets() {
40
+ return Object.keys(TARGETS);
41
+ }
42
+ /** The suffix a given `platform-arch` builds under, or `undefined`. */
43
+ export function nativeTargetSuffix(target) {
44
+ return TARGETS[target];
45
+ }
46
+ /** The suffix for THIS platform, or `undefined` where no binary is built. */
47
+ export function nativeBinarySuffix() {
48
+ return nativeTargetSuffix(`${platform}-${arch}`);
49
+ }
50
+ /**
51
+ * Why the binary is not there, phrased for whoever has to fix it.
52
+ *
53
+ * "not found" and "not built for your platform" call for different actions,
54
+ * and a single "unavailable" leaves the reader to guess which one they are
55
+ * looking at.
56
+ */
57
+ export function unavailableReason(cause) {
58
+ if (cause !== undefined) {
59
+ return `failed to load (${cause instanceof Error ? cause.message : String(cause)})`;
60
+ }
61
+ const target = `${platform}-${arch}`;
62
+ return nativeTargetSuffix(target) !== undefined
63
+ ? "binary not found"
64
+ : `no prebuilt binary for ${target}`;
65
+ }
66
+ /**
67
+ * `musl` builds under a different suffix, and the failure is otherwise
68
+ * baffling: the file is there, and `require` still refuses it. Worth saying so
69
+ * in a message rather than leaving a reader to discover glibc.
70
+ */
71
+ export function muslHint() {
72
+ return platform === "linux"
73
+ ? " On Alpine/musl, the gnu binary will not load — build the musl target."
74
+ : "";
75
+ }
76
+ /**
77
+ * Load `<package root>/index.<suffix>.node`.
78
+ *
79
+ * The path is fixed rather than passed: this file is generated into
80
+ * `<package>/src/vendor/`, so the package root is always two levels up, from
81
+ * `src` and from `dist` alike.
82
+ */
83
+ export function loadNativeBinary() {
84
+ const suffix = nativeBinarySuffix();
85
+ if (suffix === undefined)
86
+ return { loaded: false, suffix };
87
+ const here = dirname(fileURLToPath(import.meta.url));
88
+ try {
89
+ const nodeRequire = createRequire(import.meta.url);
90
+ return {
91
+ loaded: true,
92
+ binary: nodeRequire(join(here, `../../index.${suffix}.node`)),
93
+ };
94
+ }
95
+ catch (cause) {
96
+ return { loaded: false, suffix, cause };
97
+ }
98
+ }
99
+ //# sourceMappingURL=nativeBinary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeBinary.js","sourceRoot":"","sources":["../../src/vendor/nativeBinary.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAE5E;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,gEAAgE;AAChE,MAAM,OAAO,GAA2B;IACvC,WAAW,EAAE,eAAe;IAC5B,aAAa,EAAE,iBAAiB;IAChC,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,gBAAgB;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAChD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,kBAAkB;IACjC,OAAO,kBAAkB,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACrF,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;IACrC,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,SAAS;QAC9C,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,0BAA0B,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ;IACvB,OAAO,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,wEAAwE;QAC1E,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC/B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,OAAO;YACN,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,MAAM,OAAO,CAAC,CAAM;SAClE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;AACF,CAAC"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c9up/eon",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "description": "Eon — time-series data layer for the Ream framework (TDengine-backed)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -59,6 +59,7 @@
59
59
  "devDependencies": {
60
60
  "@biomejs/biome": "^2.4.10",
61
61
  "@types/node": "^22",
62
+ "@vitest/coverage-v8": "^4.1.2",
62
63
  "tsx": "^4.19.0",
63
64
  "typescript": "^6.0.2",
64
65
  "vitest": "^4.1.2",
@@ -93,7 +94,7 @@
93
94
  "build:napi-types": "node scripts/build-napi-types.mjs",
94
95
  "test": "vitest run",
95
96
  "test:rust": "cargo test -p eon-query",
96
- "lint": "biome check src/",
97
+ "lint": "biome check src/ tests/",
97
98
  "test:coverage": "vitest run --coverage",
98
99
  "typecheck": "tsc --noEmit"
99
100
  }
@@ -45,6 +45,16 @@ export interface EonAppContext {
45
45
  ): unknown | Promise<unknown>;
46
46
  };
47
47
  config: { get<T = unknown>(key: string): T | undefined };
48
+ /**
49
+ * Optional reader — present on ream's real application.
50
+ *
51
+ * `'warmup'` means the application was assembled to be INSPECTED rather than
52
+ * run: a route listing, a codegen pass, a config dump. Providers register,
53
+ * boot and start on that path too, so anything that opens a socket or
54
+ * creates a database has to ask first. A host that does not implement it is
55
+ * treated as running.
56
+ */
57
+ getMode?(): string;
48
58
  }
49
59
 
50
60
  /**
@@ -78,7 +88,16 @@ export class EonProvider {
78
88
 
79
89
  register(): void {}
80
90
 
91
+ /** True when the application was assembled to be inspected rather than run. */
92
+ #isInspecting(): boolean {
93
+ return this.#app.getMode?.() === "warmup";
94
+ }
95
+
81
96
  async boot(): Promise<void> {
97
+ // An inspection opens no WebSocket and creates no database. `warmUp()`
98
+ // runs boot, so a route listing reached TDengine — and could CREATE a
99
+ // database there — while `shutdown()` never fires on that path, leaving
100
+ // the sockets open. The compiler binding below is pure and stays.
82
101
  if (this.#booted) {
83
102
  throw new Error(
84
103
  "EonProvider: boot() has already opened connections; a second boot would overwrite and leak them. Call shutdown() first, or construct a new provider.",
@@ -90,6 +109,12 @@ export class EonProvider {
90
109
  };
91
110
  this.#app.container.singleton("eon.compiler", () => service);
92
111
 
112
+ // Everything past here opens a socket or creates a database, so an
113
+ // inspection stops at the compiler. `warmUp()` runs boot, so a route
114
+ // listing reached TDengine — and could CREATE a database there — while
115
+ // `shutdown()` never fires on that path, leaving the sockets open.
116
+ if (this.#isInspecting()) return;
117
+
93
118
  const config =
94
119
  this.#app.config.get<EonConfig>("timeseries") ??
95
120
  this.#app.config.get<EonConfig>("eon");
@@ -8,21 +8,11 @@
8
8
  */
9
9
 
10
10
  import { randomUUID } from "node:crypto";
11
- import { createRequire } from "node:module";
12
- import { dirname, join } from "node:path";
13
- import { arch, platform } from "node:process";
14
- import { fileURLToPath } from "node:url";
15
-
16
- const require2 = createRequire(import.meta.url);
17
- const here = dirname(fileURLToPath(import.meta.url));
18
-
19
- const platformMap: Record<string, string> = {
20
- "linux-x64": "linux-x64-gnu",
21
- "linux-arm64": "linux-arm64-gnu",
22
- "darwin-x64": "darwin-x64",
23
- "darwin-arm64": "darwin-arm64",
24
- "win32-x64": "win32-x64-msvc",
25
- };
11
+ import {
12
+ loadNativeBinary,
13
+ muslHint,
14
+ supportedTargets,
15
+ } from "../vendor/nativeBinary.js";
26
16
 
27
17
  /**
28
18
  * The compiler's surface, as the Rust declares it.
@@ -51,25 +41,22 @@ let native: NativeBinding | undefined;
51
41
  */
52
42
  function loadNative(): NativeBinding {
53
43
  if (native) return native;
54
- const key = `${platform}-${arch}`;
55
- const suffix = platformMap[key];
56
- if (!suffix) {
57
- throw new Error(
58
- `[E_EON_NAPI_UNSUPPORTED] no eon-query native binary for platform '${key}'. Supported: ${Object.keys(platformMap).join(", ")}.`,
59
- );
60
- }
61
- const binaryPath = join(here, `../../index.${suffix}.node`);
62
- let binding: NativeBinding;
63
- try {
64
- binding = require2(binaryPath);
65
- } catch (cause) {
44
+ // The resolution is shared; the refusal is not. Both codes below are eon's,
45
+ // and a caller branches on them.
46
+ const attempt = loadNativeBinary<NativeBinding>();
47
+ if (!attempt.loaded) {
48
+ if (attempt.suffix === undefined) {
49
+ throw new Error(
50
+ `[E_EON_NAPI_UNSUPPORTED] no eon-query native binary for this platform. Supported: ${supportedTargets().join(", ")}.`,
51
+ );
52
+ }
66
53
  throw new Error(
67
- `[E_EON_NAPI_NOT_FOUND] eon-query native binary not found at '${binaryPath}'. Build it with: pnpm --filter @c9up/eon build:napi`,
68
- cause !== undefined ? { cause } : undefined,
54
+ `[E_EON_NAPI_NOT_FOUND] eon-query native binary 'index.${attempt.suffix}.node' not found or unloadable.${muslHint()} Build it with: pnpm --filter @c9up/eon build:napi`,
55
+ attempt.cause !== undefined ? { cause: attempt.cause } : undefined,
69
56
  );
70
57
  }
71
- native = binding;
72
- return binding;
58
+ native = attempt.binary;
59
+ return attempt.binary;
73
60
  }
74
61
 
75
62
  /**
@@ -0,0 +1,110 @@
1
+ // Generated from scripts/vendor/nativeBinary.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
+ * Finding the NAPI binary a package ships beside itself.
9
+ *
10
+ * Every package with a Rust engine repeats the same table: napi-rs names its
11
+ * artefacts `index.<platform>-<arch>-<abi>.node`, and the mapping from Node's
12
+ * `platform`/`arch` to that suffix is the part that must never differ between
13
+ * packages. Adding a target means adding it everywhere, and a package that
14
+ * missed the edit fails only on that platform — which is exactly the failure
15
+ * nobody reproduces.
16
+ *
17
+ * What is NOT here is the policy. Some packages degrade when the binary is
18
+ * absent and answer `undefined`; others refuse loudly with build instructions.
19
+ * Both are right for their package, so the loader reports what happened and
20
+ * the caller decides.
21
+ */
22
+
23
+ import { createRequire } from "node:module";
24
+ import { dirname, join } from "node:path";
25
+ import { arch, platform } from "node:process";
26
+ import { fileURLToPath } from "node:url";
27
+
28
+ /** Node's `platform-arch` → the suffix napi-rs builds under. */
29
+ const TARGETS: Record<string, string> = {
30
+ "linux-x64": "linux-x64-gnu",
31
+ "linux-arm64": "linux-arm64-gnu",
32
+ "darwin-x64": "darwin-x64",
33
+ "darwin-arm64": "darwin-arm64",
34
+ "win32-x64": "win32-x64-msvc",
35
+ };
36
+
37
+ /**
38
+ * Every `platform-arch` a binary is built for.
39
+ *
40
+ * For the message a package raises when it refuses: "no binary for
41
+ * linux-riscv64" is only actionable next to the list of what there IS.
42
+ */
43
+ export function supportedTargets(): readonly string[] {
44
+ return Object.keys(TARGETS);
45
+ }
46
+
47
+ /** The suffix a given `platform-arch` builds under, or `undefined`. */
48
+ export function nativeTargetSuffix(target: string): string | undefined {
49
+ return TARGETS[target];
50
+ }
51
+
52
+ /** The suffix for THIS platform, or `undefined` where no binary is built. */
53
+ export function nativeBinarySuffix(): string | undefined {
54
+ return nativeTargetSuffix(`${platform}-${arch}`);
55
+ }
56
+
57
+ /**
58
+ * Why the binary is not there, phrased for whoever has to fix it.
59
+ *
60
+ * "not found" and "not built for your platform" call for different actions,
61
+ * and a single "unavailable" leaves the reader to guess which one they are
62
+ * looking at.
63
+ */
64
+ export function unavailableReason(cause?: unknown): string {
65
+ if (cause !== undefined) {
66
+ return `failed to load (${cause instanceof Error ? cause.message : String(cause)})`;
67
+ }
68
+ const target = `${platform}-${arch}`;
69
+ return nativeTargetSuffix(target) !== undefined
70
+ ? "binary not found"
71
+ : `no prebuilt binary for ${target}`;
72
+ }
73
+
74
+ /**
75
+ * `musl` builds under a different suffix, and the failure is otherwise
76
+ * baffling: the file is there, and `require` still refuses it. Worth saying so
77
+ * in a message rather than leaving a reader to discover glibc.
78
+ */
79
+ export function muslHint(): string {
80
+ return platform === "linux"
81
+ ? " On Alpine/musl, the gnu binary will not load — build the musl target."
82
+ : "";
83
+ }
84
+
85
+ /** What a load attempt did, so the caller can apply its own policy. */
86
+ export type NativeBinaryResult<T> =
87
+ | { loaded: true; binary: T }
88
+ | { loaded: false; suffix: string | undefined; cause?: unknown };
89
+
90
+ /**
91
+ * Load `<package root>/index.<suffix>.node`.
92
+ *
93
+ * The path is fixed rather than passed: this file is generated into
94
+ * `<package>/src/vendor/`, so the package root is always two levels up, from
95
+ * `src` and from `dist` alike.
96
+ */
97
+ export function loadNativeBinary<T>(): NativeBinaryResult<T> {
98
+ const suffix = nativeBinarySuffix();
99
+ if (suffix === undefined) return { loaded: false, suffix };
100
+ const here = dirname(fileURLToPath(import.meta.url));
101
+ try {
102
+ const nodeRequire = createRequire(import.meta.url);
103
+ return {
104
+ loaded: true,
105
+ binary: nodeRequire(join(here, `../../index.${suffix}.node`)) as T,
106
+ };
107
+ } catch (cause) {
108
+ return { loaded: false, suffix, cause };
109
+ }
110
+ }