@telorun/kernel 0.28.0 → 0.30.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/dist/controller-loader.d.ts +27 -0
- package/dist/controller-loader.d.ts.map +1 -1
- package/dist/controller-loader.js +45 -3
- package/dist/controller-loader.js.map +1 -1
- package/dist/controller-loaders/bundle-builder.d.ts +15 -0
- package/dist/controller-loaders/bundle-builder.d.ts.map +1 -0
- package/dist/controller-loaders/bundle-builder.js +306 -0
- package/dist/controller-loaders/bundle-builder.js.map +1 -0
- package/dist/controller-loaders/bundle-loader.d.ts +10 -0
- package/dist/controller-loaders/bundle-loader.d.ts.map +1 -1
- package/dist/controller-loaders/bundle-loader.js +29 -14
- package/dist/controller-loaders/bundle-loader.js.map +1 -1
- package/dist/controller-loaders/napi-loader.d.ts +11 -0
- package/dist/controller-loaders/napi-loader.d.ts.map +1 -1
- package/dist/controller-loaders/napi-loader.js +49 -30
- package/dist/controller-loaders/napi-loader.js.map +1 -1
- package/dist/controller-loaders/npm-loader.d.ts +10 -0
- package/dist/controller-loaders/npm-loader.d.ts.map +1 -1
- package/dist/controller-loaders/npm-loader.js +21 -3
- package/dist/controller-loaders/npm-loader.js.map +1 -1
- package/dist/controller-registry.d.ts +17 -10
- package/dist/controller-registry.d.ts.map +1 -1
- package/dist/controller-registry.js +44 -10
- package/dist/controller-registry.js.map +1 -1
- package/dist/controllers/resource-definition/resource-definition-controller.d.ts.map +1 -1
- package/dist/controllers/resource-definition/resource-definition-controller.js +27 -8
- package/dist/controllers/resource-definition/resource-definition-controller.js.map +1 -1
- package/dist/kernel.d.ts +7 -0
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +19 -1
- package/dist/kernel.js.map +1 -1
- package/dist/resource-context.d.ts +7 -0
- package/dist/resource-context.d.ts.map +1 -1
- package/dist/resource-context.js +10 -0
- package/dist/resource-context.js.map +1 -1
- package/package.json +6 -3
- package/src/controller-loader.ts +72 -3
- package/src/controller-loaders/bundle-builder.ts +313 -0
- package/src/controller-loaders/bundle-loader.ts +39 -20
- package/src/controller-loaders/napi-loader.ts +51 -30
- package/src/controller-loaders/npm-loader.ts +25 -3
- package/src/controller-registry.ts +63 -0
- package/src/controllers/resource-definition/resource-definition-controller.ts +44 -11
- package/src/kernel.ts +25 -1
- package/src/resource-context.ts +15 -0
|
@@ -8,6 +8,18 @@ export type { ControllerPolicy } from "./runtime-registry.js";
|
|
|
8
8
|
* "downloading…" line was honest or should be erased.
|
|
9
9
|
*/
|
|
10
10
|
export type ControllerResolveSource = "local" | "node_modules" | "cache" | "npm-install" | "cargo-build" | "bundle";
|
|
11
|
+
/**
|
|
12
|
+
* A controller candidate that has been *resolved* (verified hostable: package
|
|
13
|
+
* installed / bundle present / crate located) but not yet imported/evaluated.
|
|
14
|
+
* `importInstance` performs the deferred — and expensive — module load; lazy
|
|
15
|
+
* controller loading calls it on the kind's first instantiation. `purl`/`source`
|
|
16
|
+
* are known at resolve time and carried for the load-time events.
|
|
17
|
+
*/
|
|
18
|
+
export interface ResolvedController {
|
|
19
|
+
purl: string;
|
|
20
|
+
source: ControllerResolveSource;
|
|
21
|
+
importInstance: () => Promise<ControllerInstance>;
|
|
22
|
+
}
|
|
11
23
|
export type ControllerLoaderEvent = {
|
|
12
24
|
name: "ControllerLoading";
|
|
13
25
|
payload: {
|
|
@@ -88,6 +100,21 @@ export declare class ControllerLoader {
|
|
|
88
100
|
private readonly bundleLoader;
|
|
89
101
|
constructor(options?: ControllerLoaderOptions);
|
|
90
102
|
load(purlCandidates: string[], baseUri: string, policy?: ControllerPolicy): Promise<ControllerInstance>;
|
|
103
|
+
/**
|
|
104
|
+
* Resolve a controller without importing it: pick the first candidate this
|
|
105
|
+
* environment can host (same ordering + env-missing fallback as {@link load}),
|
|
106
|
+
* verify it's present, and return a {@link ResolvedController} whose
|
|
107
|
+
* `importInstance` defers the actual import/eval. Used by lazy controller
|
|
108
|
+
* loading so a `Telo.Definition` fails fast at boot when its controller can't
|
|
109
|
+
* load at all, while the expensive import is paid only on first instantiation.
|
|
110
|
+
*
|
|
111
|
+
* Silent by design — no lifecycle events here; the caller emits
|
|
112
|
+
* ControllerLoading/Loaded around `importInstance` so the events fire when the
|
|
113
|
+
* load actually happens. A total resolution failure throws (the boot-time
|
|
114
|
+
* fail-fast), mirroring {@link load}'s aggregated error.
|
|
115
|
+
*/
|
|
116
|
+
resolve(purlCandidates: string[], baseUri: string, policy?: ControllerPolicy): Promise<ResolvedController>;
|
|
91
117
|
private dispatchOne;
|
|
118
|
+
private dispatchResolveOne;
|
|
92
119
|
}
|
|
93
120
|
//# sourceMappingURL=controller-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,gBAAgB,EAAmC,MAAM,uBAAuB,CAAC;AAE1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,cAAc,GACd,OAAO,GACP,aAAa,GACb,aAAa,GACb,QAAQ,CAAC;AAEb,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACxD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF,GACD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAC5E;;;;;;GAMG;GACD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;kDAE8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,OAAO,GAAE,uBAA4B;IAU3C,IAAI,CACR,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAIhE,OAAO,EAAE,gBAAgB,EAAmC,MAAM,uBAAuB,CAAC;AAE1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,cAAc,GACd,OAAO,GACP,aAAa,GACb,aAAa,GACb,QAAQ,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,uBAAuB,CAAC;IAChC,cAAc,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACxD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF,GACD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAC5E;;;;;;GAMG;GACD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;kDAE8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,OAAO,GAAE,uBAA4B;IAU3C,IAAI,CACR,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAqD9B;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;YA+BhB,WAAW;YAQX,kBAAkB;CAejC"}
|
|
@@ -79,15 +79,57 @@ export class ControllerLoader {
|
|
|
79
79
|
});
|
|
80
80
|
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", aggregated);
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve a controller without importing it: pick the first candidate this
|
|
84
|
+
* environment can host (same ordering + env-missing fallback as {@link load}),
|
|
85
|
+
* verify it's present, and return a {@link ResolvedController} whose
|
|
86
|
+
* `importInstance` defers the actual import/eval. Used by lazy controller
|
|
87
|
+
* loading so a `Telo.Definition` fails fast at boot when its controller can't
|
|
88
|
+
* load at all, while the expensive import is paid only on first instantiation.
|
|
89
|
+
*
|
|
90
|
+
* Silent by design — no lifecycle events here; the caller emits
|
|
91
|
+
* ControllerLoading/Loaded around `importInstance` so the events fire when the
|
|
92
|
+
* load actually happens. A total resolution failure throws (the boot-time
|
|
93
|
+
* fail-fast), mirroring {@link load}'s aggregated error.
|
|
94
|
+
*/
|
|
95
|
+
async resolve(purlCandidates, baseUri, policy) {
|
|
96
|
+
if (!purlCandidates || purlCandidates.length === 0) {
|
|
97
|
+
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", "Missing controller PURL candidates");
|
|
98
|
+
}
|
|
99
|
+
const effectivePolicy = policy ?? DEFAULT_POLICY;
|
|
100
|
+
const ordered = orderCandidates(purlCandidates, effectivePolicy);
|
|
101
|
+
if (ordered.length === 0) {
|
|
102
|
+
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", `No controllers match runtime selection [${effectivePolicy.load.join(", ")}]; declared: ${purlCandidates.join(", ")}`);
|
|
103
|
+
}
|
|
104
|
+
const errors = [];
|
|
105
|
+
for (const purl of ordered) {
|
|
106
|
+
try {
|
|
107
|
+
const { source, importInstance } = await this.dispatchResolveOne(purl, baseUri);
|
|
108
|
+
return { purl, source, importInstance };
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof ControllerEnvMissingError) {
|
|
112
|
+
errors.push(`${purl}: ${err.message}`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", `No controller resolved. Tried ${ordered.length} candidate(s):\n${errors.join("\n")}`);
|
|
119
|
+
}
|
|
82
120
|
async dispatchOne(purl, baseUri) {
|
|
121
|
+
const { source, importInstance } = await this.dispatchResolveOne(purl, baseUri);
|
|
122
|
+
return { instance: await importInstance(), source };
|
|
123
|
+
}
|
|
124
|
+
async dispatchResolveOne(purl, baseUri) {
|
|
83
125
|
if (purl.startsWith("pkg:npm")) {
|
|
84
|
-
return this.npmLoader.
|
|
126
|
+
return this.npmLoader.resolve(purl, baseUri);
|
|
85
127
|
}
|
|
86
128
|
if (purl.startsWith("pkg:cargo")) {
|
|
87
|
-
return this.napiLoader.
|
|
129
|
+
return this.napiLoader.resolve(purl, baseUri);
|
|
88
130
|
}
|
|
89
131
|
if (purl.startsWith("pkg:telo")) {
|
|
90
|
-
return this.bundleLoader.
|
|
132
|
+
return this.bundleLoader.resolve(purl, baseUri);
|
|
91
133
|
}
|
|
92
134
|
throw new ControllerEnvMissingError(`Unsupported PURL scheme: ${purl}`);
|
|
93
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-loader.js","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAoB,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"controller-loader.js","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build — or reuse a cached — single-file bundle of `entryFile`, written beside
|
|
3
|
+
* the entry inside the installed package so the bundle's externalized bare
|
|
4
|
+
* imports (`@telorun/sdk`, native packages) resolve through the entry's own
|
|
5
|
+
* `node_modules` walk-up. Built from the pinned `name@version` package, so the
|
|
6
|
+
* same controller yields the same bundle in every environment — parity by
|
|
7
|
+
* construction.
|
|
8
|
+
*
|
|
9
|
+
* Returns `null` (caller falls back to the loose entry import) when: bundling is
|
|
10
|
+
* disabled, the install is a symlinked source checkout, esbuild isn't installed,
|
|
11
|
+
* the package dir is read-only (baked runtime), or the build fails (an
|
|
12
|
+
* unbundleable controller).
|
|
13
|
+
*/
|
|
14
|
+
export declare function tryBuildControllerBundle(installRoot: string, entryFile: string): Promise<string | null>;
|
|
15
|
+
//# sourceMappingURL=bundle-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-builder.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/bundle-builder.ts"],"names":[],"mappings":"AAyGA;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import * as fs from "node:fs/promises";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { REALM_COLLAPSE_NAMES } from "./realm.js";
|
|
5
|
+
/**
|
|
6
|
+
* Transparent controller bundling: collapse a controller's loose `node_modules`
|
|
7
|
+
* dependency tree into one esbuild bundle so cold-start import reads a single
|
|
8
|
+
* file instead of hundreds of small ones (the k8s cold-FS latency this targets).
|
|
9
|
+
*
|
|
10
|
+
* The PURL never changes — bundling is a load-time cache over npm resolution, not
|
|
11
|
+
* a delivery format. {@link tryBuildControllerBundle} is a pure accelerator: it
|
|
12
|
+
* returns a bundle path on success, or `null` (→ caller imports the loose entry)
|
|
13
|
+
* whenever bundling can't or shouldn't run, and never throws.
|
|
14
|
+
*
|
|
15
|
+
* The bundle is written **next to its entry file** (inside the package), so its
|
|
16
|
+
* externalized bare imports (`@telorun/sdk`, native packages like
|
|
17
|
+
* `better-sqlite3`) resolve at runtime through the exact same `node_modules`
|
|
18
|
+
* walk-up the loose entry would — wherever the dep is hoisted or nested.
|
|
19
|
+
*
|
|
20
|
+
* On by default; `TELO_CONTROLLER_BUNDLE=0` (or false/no/off) is a kill-switch
|
|
21
|
+
* that forces loose imports. Safe to leave on: it applies only to real (copied)
|
|
22
|
+
* installs — symlinked `local_path` dev installs are skipped — and any build
|
|
23
|
+
* failure falls back to the loose import.
|
|
24
|
+
*/
|
|
25
|
+
const BUNDLE_PREFIX = ".telobundle.";
|
|
26
|
+
function bundlingEnabled() {
|
|
27
|
+
const v = process.env.TELO_CONTROLLER_BUNDLE?.trim().toLowerCase();
|
|
28
|
+
return !(v === "0" || v === "false" || v === "no" || v === "off");
|
|
29
|
+
}
|
|
30
|
+
async function pathExists(p) {
|
|
31
|
+
try {
|
|
32
|
+
await fs.access(p);
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function sanitize(s) {
|
|
40
|
+
return s.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
41
|
+
}
|
|
42
|
+
async function realpathOrNull(p) {
|
|
43
|
+
try {
|
|
44
|
+
return await fs.realpath(p);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function isUnder(child, parent) {
|
|
51
|
+
const rel = path.relative(parent, child);
|
|
52
|
+
return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
|
|
53
|
+
}
|
|
54
|
+
const typeModuleCache = new Map();
|
|
55
|
+
/** Whether `entryFile` is an ES module: `.mjs` / non-`.js` (e.g. `.ts`) yes,
|
|
56
|
+
* `.cjs` no, `.js` per the nearest `package.json` `"type"`. */
|
|
57
|
+
async function isEsmEntry(entryFile) {
|
|
58
|
+
const ext = path.extname(entryFile).toLowerCase();
|
|
59
|
+
if (ext === ".mjs")
|
|
60
|
+
return true;
|
|
61
|
+
if (ext === ".cjs")
|
|
62
|
+
return false;
|
|
63
|
+
if (ext !== ".js")
|
|
64
|
+
return true; // .ts and friends — authored as ESM
|
|
65
|
+
const dir = path.dirname(entryFile);
|
|
66
|
+
const cached = typeModuleCache.get(dir);
|
|
67
|
+
if (cached !== undefined)
|
|
68
|
+
return cached;
|
|
69
|
+
let isModule = false;
|
|
70
|
+
let d = dir;
|
|
71
|
+
for (;;) {
|
|
72
|
+
const pj = path.join(d, "package.json");
|
|
73
|
+
if (await pathExists(pj)) {
|
|
74
|
+
try {
|
|
75
|
+
isModule = JSON.parse(await fs.readFile(pj, "utf8")).type === "module";
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
/* unreadable package.json → treat as CJS (skip bundling) */
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
const parent = path.dirname(d);
|
|
83
|
+
if (parent === d)
|
|
84
|
+
break;
|
|
85
|
+
d = parent;
|
|
86
|
+
}
|
|
87
|
+
typeModuleCache.set(dir, isModule);
|
|
88
|
+
return isModule;
|
|
89
|
+
}
|
|
90
|
+
/** Memoized esbuild handle: `undefined` until first tried, `null` when absent.
|
|
91
|
+
* A failed dynamic import isn't reliably cached by Node, so without this every
|
|
92
|
+
* controller load would re-attempt (and re-fail) the import. */
|
|
93
|
+
let esbuildModule;
|
|
94
|
+
async function loadEsbuild() {
|
|
95
|
+
if (esbuildModule !== undefined)
|
|
96
|
+
return esbuildModule;
|
|
97
|
+
try {
|
|
98
|
+
esbuildModule = await import("esbuild");
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
esbuildModule = null;
|
|
102
|
+
}
|
|
103
|
+
return esbuildModule;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build — or reuse a cached — single-file bundle of `entryFile`, written beside
|
|
107
|
+
* the entry inside the installed package so the bundle's externalized bare
|
|
108
|
+
* imports (`@telorun/sdk`, native packages) resolve through the entry's own
|
|
109
|
+
* `node_modules` walk-up. Built from the pinned `name@version` package, so the
|
|
110
|
+
* same controller yields the same bundle in every environment — parity by
|
|
111
|
+
* construction.
|
|
112
|
+
*
|
|
113
|
+
* Returns `null` (caller falls back to the loose entry import) when: bundling is
|
|
114
|
+
* disabled, the install is a symlinked source checkout, esbuild isn't installed,
|
|
115
|
+
* the package dir is read-only (baked runtime), or the build fails (an
|
|
116
|
+
* unbundleable controller).
|
|
117
|
+
*/
|
|
118
|
+
export async function tryBuildControllerBundle(installRoot, entryFile) {
|
|
119
|
+
if (!bundlingEnabled())
|
|
120
|
+
return null;
|
|
121
|
+
// Only bundle a *real* install (the package physically copied under the install
|
|
122
|
+
// root). A `local_path` / `file:` dep is symlinked to its source checkout, so
|
|
123
|
+
// its entry's realpath escapes the install root — writing "next to the entry"
|
|
124
|
+
// there would land bundles in the committed source tree. Dev runs that way
|
|
125
|
+
// simply skip bundling (loose import); the production bake is a real install.
|
|
126
|
+
const realEntry = await realpathOrNull(entryFile);
|
|
127
|
+
const realRoot = await realpathOrNull(installRoot);
|
|
128
|
+
if (!realEntry || !realRoot || !isUnder(realEntry, realRoot))
|
|
129
|
+
return null;
|
|
130
|
+
// Only bundle ESM entries. esbuild's ESM output preserves named exports, so a
|
|
131
|
+
// bundled ESM controller has the same `create`/`register` shape as the loose
|
|
132
|
+
// one. A CJS entry, by contrast, bundles to `{ default }` only (esbuild does
|
|
133
|
+
// not lift CJS named exports), which the loader would reject — so skip it and
|
|
134
|
+
// let the loose import (where Node synthesizes the named exports) handle it.
|
|
135
|
+
if (!(await isEsmEntry(realEntry)))
|
|
136
|
+
return null;
|
|
137
|
+
// Beside the entry, so the bundle's externalized imports resolve through the
|
|
138
|
+
// entry's own node_modules walk-up (native deps may be nested under the
|
|
139
|
+
// controller package, not hoisted to the install root).
|
|
140
|
+
const bundleFile = path.join(path.dirname(realEntry), `${BUNDLE_PREFIX}${sanitize(path.basename(realEntry))}.mjs`);
|
|
141
|
+
if (await usableCachedBundle(bundleFile))
|
|
142
|
+
return bundleFile;
|
|
143
|
+
// Single-flight per bundle file within the process: a test run spawns many
|
|
144
|
+
// kernels sharing one install root, so concurrent loads of the same controller
|
|
145
|
+
// would otherwise each launch an esbuild over the same output.
|
|
146
|
+
const inFlight = buildsInFlight.get(bundleFile);
|
|
147
|
+
if (inFlight)
|
|
148
|
+
return inFlight;
|
|
149
|
+
const work = buildBundle(bundleFile, entryFile).finally(() => buildsInFlight.delete(bundleFile));
|
|
150
|
+
buildsInFlight.set(bundleFile, work);
|
|
151
|
+
return work;
|
|
152
|
+
}
|
|
153
|
+
const buildsInFlight = new Map();
|
|
154
|
+
let tmpCounter = 0;
|
|
155
|
+
/** A bundle that anchors path resolution to its own directory (esbuild rewrites
|
|
156
|
+
* `__dirname`/`__filename` to `import.meta.url`) can't be safely relocated. */
|
|
157
|
+
const DIR_RELATIVE = /import\.meta\.url|\b__dirname\b|\b__filename\b/;
|
|
158
|
+
/** A cached bundle is usable only when its `.ok` sidecar is present — written
|
|
159
|
+
* once after the build passed the safety guard. Checking the marker (two stats)
|
|
160
|
+
* avoids re-reading the whole bundle on every load. A bundle without its marker
|
|
161
|
+
* (written before the guard existed, a torn write, or a failed build) self-heals
|
|
162
|
+
* to the loose import and is cleared on a writable FS. */
|
|
163
|
+
async function usableCachedBundle(bundleFile) {
|
|
164
|
+
if ((await pathExists(okMarker(bundleFile))) && (await pathExists(bundleFile)))
|
|
165
|
+
return true;
|
|
166
|
+
await fs.rm(bundleFile, { force: true }).catch(() => { });
|
|
167
|
+
await fs.rm(okMarker(bundleFile), { force: true }).catch(() => { });
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
function okMarker(bundleFile) {
|
|
171
|
+
return `${bundleFile}.ok`;
|
|
172
|
+
}
|
|
173
|
+
async function buildBundle(bundleFile, entryFile) {
|
|
174
|
+
if (await usableCachedBundle(bundleFile))
|
|
175
|
+
return bundleFile;
|
|
176
|
+
const esbuild = await loadEsbuild();
|
|
177
|
+
if (!esbuild)
|
|
178
|
+
return null; // esbuild not installed → loose import
|
|
179
|
+
// Build in memory, then write to a unique temp and atomically rename into
|
|
180
|
+
// place — so a cross-process race never leaves a half-written bundle for a
|
|
181
|
+
// concurrent reader (or a concurrent build) to import.
|
|
182
|
+
const tmpFile = `${bundleFile}.${process.pid}.${tmpCounter++}.tmp`;
|
|
183
|
+
try {
|
|
184
|
+
const result = await esbuild.build({
|
|
185
|
+
entryPoints: [entryFile],
|
|
186
|
+
outfile: bundleFile,
|
|
187
|
+
bundle: true,
|
|
188
|
+
format: "esm",
|
|
189
|
+
platform: "node",
|
|
190
|
+
logLevel: "silent",
|
|
191
|
+
write: false,
|
|
192
|
+
plugins: [nativeExternalsPlugin()],
|
|
193
|
+
});
|
|
194
|
+
const out = result.outputFiles?.[0];
|
|
195
|
+
if (!out)
|
|
196
|
+
return null;
|
|
197
|
+
// A flattened bundle that resolves paths relative to its own directory is
|
|
198
|
+
// unsafe: a deep dep locating a sibling asset (e.g. http-server's
|
|
199
|
+
// `${__dirname}/js/standalone.js`) would miss it at the bundle's new
|
|
200
|
+
// location. esbuild rewrites `__dirname`/`__filename` to `import.meta.url`,
|
|
201
|
+
// so its presence flags this — fall back to the loose import for those.
|
|
202
|
+
if (DIR_RELATIVE.test(out.text)) {
|
|
203
|
+
if (process.env.TELO_BUNDLE_DEBUG) {
|
|
204
|
+
process.stderr.write(`[bundle] skipped ${entryFile}: directory-relative asset resolution\n`);
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
await fs.writeFile(tmpFile, out.contents);
|
|
209
|
+
await fs.rename(tmpFile, bundleFile);
|
|
210
|
+
// Marker written last: its presence means "this bundle built and passed the
|
|
211
|
+
// safety guard", so cache hits trust it without re-reading the bundle.
|
|
212
|
+
await fs.writeFile(okMarker(bundleFile), "").catch(() => { });
|
|
213
|
+
return bundleFile;
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
if (process.env.TELO_BUNDLE_DEBUG) {
|
|
217
|
+
process.stderr.write(`[bundle] skipped ${entryFile}: ${err instanceof Error ? err.message.split("\n")[0] : String(err)}\n`);
|
|
218
|
+
}
|
|
219
|
+
await fs.rm(tmpFile, { force: true }).catch(() => { });
|
|
220
|
+
return null; // unbundleable controller → loose import
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* esbuild plugin deciding which bare imports stay external rather than inline:
|
|
225
|
+
* - `@telorun/*` framework packages — the shared runtime (incl. the realm
|
|
226
|
+
* `@telorun/sdk`, whose `Stream`/`InvokeError` identity must be the kernel's
|
|
227
|
+
* copy); inlining them is both wrong (duplicates the runtime per controller)
|
|
228
|
+
* and impossible (the kernel pulls in esbuild's unbundleable API);
|
|
229
|
+
* - `esbuild` — a build tool, never part of a controller;
|
|
230
|
+
* - native packages — ship a `.node` and can't be inlined;
|
|
231
|
+
* - packages not present in the install (optional deps like `pg-native`) —
|
|
232
|
+
* externalized so the build succeeds and the runtime require behaves exactly
|
|
233
|
+
* as it would loose (the controller's own try/catch handles the absence).
|
|
234
|
+
* Everything else (the controller's own files + third-party JS) inlines.
|
|
235
|
+
*/
|
|
236
|
+
function nativeExternalsPlugin() {
|
|
237
|
+
const realm = new Set(REALM_COLLAPSE_NAMES);
|
|
238
|
+
const decided = new Map();
|
|
239
|
+
return {
|
|
240
|
+
name: "telo-native-externals",
|
|
241
|
+
setup(build) {
|
|
242
|
+
// A direct `.node` binary import can never be bundled.
|
|
243
|
+
build.onResolve({ filter: /\.node$/ }, () => ({ external: true }));
|
|
244
|
+
// Bare specifiers only (paths starting with `.` or `/` are relative/absolute).
|
|
245
|
+
build.onResolve({ filter: /^[^./]/ }, async (args) => {
|
|
246
|
+
if (path.isAbsolute(args.path))
|
|
247
|
+
return null;
|
|
248
|
+
const top = topPackage(args.path);
|
|
249
|
+
// Realm names (the identity-critical set realm.ts owns) plus the rest of
|
|
250
|
+
// the `@telorun/*` framework and esbuild itself — never inline these.
|
|
251
|
+
if (realm.has(top) || top.startsWith("@telorun/") || top === "esbuild") {
|
|
252
|
+
return { external: true };
|
|
253
|
+
}
|
|
254
|
+
const pkgDir = findPackageDir(top, args.resolveDir);
|
|
255
|
+
if (!pkgDir)
|
|
256
|
+
return { external: true }; // missing/optional dep → behave as loose
|
|
257
|
+
let isNative = decided.get(pkgDir);
|
|
258
|
+
if (isNative === undefined) {
|
|
259
|
+
isNative = await detectNative(pkgDir);
|
|
260
|
+
decided.set(pkgDir, isNative);
|
|
261
|
+
}
|
|
262
|
+
return isNative ? { external: true } : null;
|
|
263
|
+
});
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** Top-level package of a bare specifier: `@scope/x/y` → `@scope/x`, `a/b` → `a`. */
|
|
268
|
+
function topPackage(spec) {
|
|
269
|
+
const parts = spec.split("/");
|
|
270
|
+
return spec.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
|
|
271
|
+
}
|
|
272
|
+
/** Nearest `node_modules/<pkgName>` walking up from `fromDir`, or null. */
|
|
273
|
+
function findPackageDir(pkgName, fromDir) {
|
|
274
|
+
let dir = fromDir;
|
|
275
|
+
for (;;) {
|
|
276
|
+
const candidate = path.join(dir, "node_modules", ...pkgName.split("/"));
|
|
277
|
+
if (existsSync(path.join(candidate, "package.json")))
|
|
278
|
+
return candidate;
|
|
279
|
+
const parent = path.dirname(dir);
|
|
280
|
+
if (parent === dir)
|
|
281
|
+
return null;
|
|
282
|
+
dir = parent;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/** A package is native if it ships prebuilt binaries / a build output, or its
|
|
286
|
+
* manifest declares a node-gyp / prebuild-style native build. */
|
|
287
|
+
async function detectNative(pkgDir) {
|
|
288
|
+
if (await pathExists(path.join(pkgDir, "prebuilds")))
|
|
289
|
+
return true;
|
|
290
|
+
if (await pathExists(path.join(pkgDir, "build", "Release")))
|
|
291
|
+
return true;
|
|
292
|
+
try {
|
|
293
|
+
const pj = JSON.parse(await fs.readFile(path.join(pkgDir, "package.json"), "utf8"));
|
|
294
|
+
if (pj.gypfile || pj.binary)
|
|
295
|
+
return true;
|
|
296
|
+
const scripts = pj.scripts ?? {};
|
|
297
|
+
const installish = `${scripts.preinstall ?? ""} ${scripts.install ?? ""} ${scripts.postinstall ?? ""}`;
|
|
298
|
+
if (/node-gyp|prebuild-install|node-pre-gyp|node-gyp-build|cmake-js/.test(installish))
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
// unreadable package.json — treat as non-native; esbuild surfaces real errors
|
|
303
|
+
}
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=bundle-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-builder.js","sourceRoot":"","sources":["../../src/controller-loaders/bundle-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,5 +41,15 @@ export declare class BundleControllerLoader {
|
|
|
41
41
|
instance: ControllerInstance;
|
|
42
42
|
source: ControllerResolveSource;
|
|
43
43
|
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Resolve without importing: parse + validate the PURL, confirm the bundle
|
|
46
|
+
* file exists and its format is hostable, and ensure the realm symlinks — all
|
|
47
|
+
* cheap, fail-fast checks — but defer the bundle `import()` (the eval cost)
|
|
48
|
+
* into the returned `importInstance` thunk. Used by lazy controller loading.
|
|
49
|
+
*/
|
|
50
|
+
resolve(purl: string, baseUri: string): Promise<{
|
|
51
|
+
source: ControllerResolveSource;
|
|
52
|
+
importInstance: () => Promise<ControllerInstance>;
|
|
53
|
+
}>;
|
|
44
54
|
}
|
|
45
55
|
//# sourceMappingURL=bundle-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/bundle-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAOhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AA+FvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,sBAAsB;IAC3B,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/bundle-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAOhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AA+FvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,sBAAsB;IAC3B,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC;IAK7E;;;;;OAKG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,uBAAuB,CAAC;QAAC,cAAc,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;CAmFnG"}
|
|
@@ -145,6 +145,16 @@ function findPackageRoot(entryFile, name) {
|
|
|
145
145
|
*/
|
|
146
146
|
export class BundleControllerLoader {
|
|
147
147
|
async load(purl, baseUri) {
|
|
148
|
+
const { source, importInstance } = await this.resolve(purl, baseUri);
|
|
149
|
+
return { instance: await importInstance(), source };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Resolve without importing: parse + validate the PURL, confirm the bundle
|
|
153
|
+
* file exists and its format is hostable, and ensure the realm symlinks — all
|
|
154
|
+
* cheap, fail-fast checks — but defer the bundle `import()` (the eval cost)
|
|
155
|
+
* into the returned `importInstance` thunk. Used by lazy controller loading.
|
|
156
|
+
*/
|
|
157
|
+
async resolve(purl, baseUri) {
|
|
148
158
|
let parsed;
|
|
149
159
|
try {
|
|
150
160
|
parsed = PackageURL.fromString(purl);
|
|
@@ -182,21 +192,26 @@ export class BundleControllerLoader {
|
|
|
182
192
|
// Make bare `@telorun/sdk` (etc.) resolve to the kernel's copy before
|
|
183
193
|
// importing the bundle, so authors write normal imports.
|
|
184
194
|
await ensureRealmSymlinks(path.dirname(absFile));
|
|
185
|
-
// A broken bundle (syntax / failed import) is a real user-code failure —
|
|
186
|
-
// let it propagate rather than masking it as env-missing.
|
|
187
|
-
const mod = (await import(pathToFileURL(absFile).href));
|
|
188
195
|
const fragment = parsed.subpath;
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
(fragment
|
|
198
|
-
|
|
199
|
-
|
|
196
|
+
return {
|
|
197
|
+
source: "bundle",
|
|
198
|
+
importInstance: async () => {
|
|
199
|
+
// A broken bundle (syntax / failed import) is a real user-code failure —
|
|
200
|
+
// let it propagate rather than masking it as env-missing.
|
|
201
|
+
const mod = (await import(pathToFileURL(absFile).href));
|
|
202
|
+
// Distinguish "no such export" from "export isn't a controller" so the
|
|
203
|
+
// error points at the actual problem (mirrors the napi loader's project()).
|
|
204
|
+
if (fragment && !(fragment in mod)) {
|
|
205
|
+
throw new RuntimeError("ERR_CONTROLLER_INVALID", `Bundled controller "${purl}": module "${absFile}" has no export named "${fragment}"`);
|
|
206
|
+
}
|
|
207
|
+
const instance = fragment ? mod[fragment] : mod;
|
|
208
|
+
if (!instance || (!instance.create && !instance.register)) {
|
|
209
|
+
throw new RuntimeError("ERR_CONTROLLER_INVALID", `Bundled controller "${purl}" exports neither create() nor register()` +
|
|
210
|
+
(fragment ? ` at fragment "#${fragment}"` : ""));
|
|
211
|
+
}
|
|
212
|
+
return instance;
|
|
213
|
+
},
|
|
214
|
+
};
|
|
200
215
|
}
|
|
201
216
|
}
|
|
202
217
|
//# sourceMappingURL=bundle-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-loader.js","sourceRoot":"","sources":["../../src/controller-loaders/bundle-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;AAC1C,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IAClD,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;QACxC,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,yDAAyD;QAC3D,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,8EAA8E;QAC9E,0EAA0E;QAC1E,+EAA+E;QAC/E,+EAA+E;QAC/E,yEAAyE;QACzE,yDAAyD;QACzD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACrF,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,SAAS;YACX,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;QACD,IAAI,CAAC;YACH,IAAI,KAAK;gBAAE,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzF,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;YACvE,0CAA0C;QAC5C,CAAC;IACH,CAAC;IACD,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAiB,EAAE,IAAY;IACtD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,IAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAuB,CAAC,IAAI,KAAK,IAAI;oBAAE,OAAO,GAAG,CAAC;YAC5F,CAAC;YAAC,MAAM,CAAC;gBACP,mDAAmD;YACrD,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,OAAO,sBAAsB;IACjC,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,OAAe;QAEf,IAAI,MAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,yBAAyB,CACjC,8BAA8B,IAAI,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC3F,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,0EAA0E;QAC1E,mDAAmD;QACnD,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,yBAAyB,CACjC,wBAAwB,IAAI,oEAAoE,MAAM,CAAC,SAAS,IAAI,QAAQ,GAAG,CAChI,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,yBAAyB,CACjC,wBAAwB,IAAI,cAAc,MAAM,mEAAmE,CACpH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,yBAAyB,CACjC,wBAAwB,IAAI,iCAAiC,CAC9D,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,kDAAkD;QAClD,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,yBAAyB,CACjC,wBAAwB,IAAI,mDAAmD,OAAO,GAAG,CAC1F,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,yBAAyB,CACjC,4CAA4C,OAAO,YAAY,IAAI,IAAI,CACxE,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjD,yEAAyE;
|
|
1
|
+
{"version":3,"file":"bundle-loader.js","sourceRoot":"","sources":["../../src/controller-loaders/bundle-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,17 @@ export declare class NapiControllerLoader {
|
|
|
54
54
|
* though all exports come from one linked dylib.
|
|
55
55
|
*/
|
|
56
56
|
load(purl: string, baseUri: string): Promise<NapiLoadResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Resolve without building: validate the PURL and confirm the crate's
|
|
59
|
+
* `local_path` exists (the fail-fast checks), then defer the cargo build +
|
|
60
|
+
* dylib load — the expensive part — into the returned `importInstance` thunk.
|
|
61
|
+
* A cache hit resolves instantly. Used by lazy controller loading so the build
|
|
62
|
+
* is paid on the kind's first instantiation, not at boot.
|
|
63
|
+
*/
|
|
64
|
+
resolve(purl: string, baseUri: string): Promise<{
|
|
65
|
+
source: NapiResolveSource;
|
|
66
|
+
importInstance: () => Promise<ControllerInstance>;
|
|
67
|
+
}>;
|
|
57
68
|
private buildAndLoad;
|
|
58
69
|
}
|
|
59
70
|
//# sourceMappingURL=napi-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"napi-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/napi-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAWhE;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,WAAW,EAAG,IAAI,CAAU;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAgDD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AACD,wBAAgB,wBAAwB,IAAI,IAAI,CAI/C;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,qBAAa,oBAAoB;IAC/B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"napi-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/napi-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,cAAc,CAAC;AAWhE;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,WAAW,EAAG,IAAI,CAAU;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAgDD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AACD,wBAAgB,wBAAwB,IAAI,IAAI,CAI/C;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,qBAAa,oBAAoB;IAC/B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAKlE;;;;;;OAMG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,iBAAiB,CAAC;QAAC,cAAc,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;YAmE9E,YAAY;CAwD3B"}
|