@antelopejs/core 1.4.10 → 1.5.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/core/cli/terminal-display.d.ts +3 -0
- package/dist/core/cli/terminal-display.js +14 -0
- package/dist/core/cli/terminal-display.js.map +1 -1
- package/dist/core/embedded/host-module.d.ts +4 -0
- package/dist/core/embedded/host-module.js +11 -0
- package/dist/core/embedded/host-module.js.map +1 -0
- package/dist/core/embedded/prepare-embedded.d.ts +6 -0
- package/dist/core/embedded/prepare-embedded.js +97 -0
- package/dist/core/embedded/prepare-embedded.js.map +1 -0
- package/dist/core/embedded/proxy-ownership.d.ts +1 -0
- package/dist/core/embedded/proxy-ownership.js +51 -0
- package/dist/core/embedded/proxy-ownership.js.map +1 -0
- package/dist/core/embedded/runtime.d.ts +23 -0
- package/dist/core/embedded/runtime.js +131 -0
- package/dist/core/embedded/runtime.js.map +1 -0
- package/dist/core/embedded/types.d.ts +20 -0
- package/dist/core/embedded/types.js +3 -0
- package/dist/core/embedded/types.js.map +1 -0
- package/dist/core/module-manager.d.ts +1 -1
- package/dist/core/module-manager.js +37 -18
- package/dist/core/module-manager.js.map +1 -1
- package/dist/core/module.d.ts +2 -0
- package/dist/core/module.js +14 -1
- package/dist/core/module.js.map +1 -1
- package/dist/core/resolution/resolver-detour.js +37 -12
- package/dist/core/resolution/resolver-detour.js.map +1 -1
- package/dist/core/resolution/resolver.d.ts +51 -31
- package/dist/core/resolution/resolver.js +475 -177
- package/dist/core/resolution/resolver.js.map +1 -1
- package/dist/core/runtime/launch-sequence.d.ts +4 -2
- package/dist/core/runtime/launch-sequence.js +31 -10
- package/dist/core/runtime/launch-sequence.js.map +1 -1
- package/dist/core/runtime/module-loading.d.ts +3 -1
- package/dist/core/runtime/module-loading.js +1 -0
- package/dist/core/runtime/module-loading.js.map +1 -1
- package/dist/core/runtime/project-launch.d.ts +3 -2
- package/dist/core/runtime/project-launch.js +9 -5
- package/dist/core/runtime/project-launch.js.map +1 -1
- package/dist/core/runtime/runtime-policy.d.ts +9 -0
- package/dist/core/runtime/runtime-policy.js +20 -0
- package/dist/core/runtime/runtime-policy.js.map +1 -0
- package/dist/core/runtime/runtime-types.d.ts +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/core/module-context.d.ts +0 -7
- package/dist/core/module-context.js +0 -60
- package/dist/core/module-context.js.map +0 -1
|
@@ -5,6 +5,17 @@ const cli_ui_1 = require("./cli-ui");
|
|
|
5
5
|
class TerminalDisplay {
|
|
6
6
|
currentSpinner;
|
|
7
7
|
currentSpinnerTexts = [];
|
|
8
|
+
silent = false;
|
|
9
|
+
setSilent(silent) {
|
|
10
|
+
this.silent = silent;
|
|
11
|
+
if (silent) {
|
|
12
|
+
this.currentSpinnerTexts = [];
|
|
13
|
+
this.destroySpinner();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
isSilent() {
|
|
17
|
+
return this.silent;
|
|
18
|
+
}
|
|
8
19
|
updateSpinnerText() {
|
|
9
20
|
if (this.currentSpinnerTexts.length > 0) {
|
|
10
21
|
const lastText = this.currentSpinnerTexts[this.currentSpinnerTexts.length - 1];
|
|
@@ -37,6 +48,9 @@ class TerminalDisplay {
|
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
50
|
async startSpinner(text) {
|
|
51
|
+
if (this.silent) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
40
54
|
this.currentSpinnerTexts.push(text);
|
|
41
55
|
if (!this.currentSpinner) {
|
|
42
56
|
this.currentSpinner = new cli_ui_1.Spinner(text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-display.js","sourceRoot":"","sources":["../../../src/core/cli/terminal-display.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAEnC,MAAa,eAAe;IAClB,cAAc,CAAW;IACzB,mBAAmB,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal-display.js","sourceRoot":"","sources":["../../../src/core/cli/terminal-display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.construct = construct;
|
|
4
|
+
exports.start = start;
|
|
5
|
+
exports.stop = stop;
|
|
6
|
+
exports.destroy = destroy;
|
|
7
|
+
async function construct() { }
|
|
8
|
+
async function start() { }
|
|
9
|
+
async function stop() { }
|
|
10
|
+
async function destroy() { }
|
|
11
|
+
//# sourceMappingURL=host-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-module.js","sourceRoot":"","sources":["../../../src/core/embedded/host-module.ts"],"names":[],"mappings":";;AAAA,8BAAmD;AAEnD,sBAA+C;AAE/C,oBAA8C;AAE9C,0BAAiD;AAN1C,KAAK,UAAU,SAAS,KAAmB,CAAC;AAE5C,KAAK,UAAU,KAAK,KAAmB,CAAC;AAExC,KAAK,UAAU,IAAI,KAAmB,CAAC;AAEvC,KAAK,UAAU,OAAO,KAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProjectPreparer } from "../runtime/runtime-types";
|
|
2
|
+
import type { EmbeddedRuntimeOptions } from "./types";
|
|
3
|
+
export declare const HOST_MODULE_ID = "__antelope_host__";
|
|
4
|
+
export declare const HOST_MODULE_VERSION = "0.0.0";
|
|
5
|
+
export declare function getHostModuleFolder(projectFolder: string): string;
|
|
6
|
+
export declare function prepareEmbedded(options: EmbeddedRuntimeOptions, projectFolder: string): ProjectPreparer;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HOST_MODULE_VERSION = exports.HOST_MODULE_ID = void 0;
|
|
7
|
+
exports.getHostModuleFolder = getHostModuleFolder;
|
|
8
|
+
exports.prepareEmbedded = prepareEmbedded;
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const filesystem_1 = require("../filesystem");
|
|
11
|
+
const module_manifest_1 = require("../module-manifest");
|
|
12
|
+
const package_resolution_1 = require("../resolution/package-resolution");
|
|
13
|
+
const launch_sequence_1 = require("../runtime/launch-sequence");
|
|
14
|
+
const module_loading_1 = require("../runtime/module-loading");
|
|
15
|
+
exports.HOST_MODULE_ID = "__antelope_host__";
|
|
16
|
+
exports.HOST_MODULE_VERSION = "0.0.0";
|
|
17
|
+
const HOST_FOLDER_SEGMENTS = [".antelope", "host"];
|
|
18
|
+
const HOST_MODULE_ENTRY = node_path_1.default.join(__dirname, "host-module");
|
|
19
|
+
const EMBEDDED_CACHE_SEGMENTS = [".antelope", "embedded-cache"];
|
|
20
|
+
const HOST_DEPENDENCY_RANGE = "latest";
|
|
21
|
+
function getHostModuleFolder(projectFolder) {
|
|
22
|
+
return node_path_1.default.join(projectFolder, ...HOST_FOLDER_SEGMENTS);
|
|
23
|
+
}
|
|
24
|
+
function resolveModuleFolder(name, projectFolder) {
|
|
25
|
+
const resolved = (0, package_resolution_1.resolvePackage)(name, projectFolder);
|
|
26
|
+
if (!resolved) {
|
|
27
|
+
throw new Error(`Embedded module '${name}' could not be resolved from '${projectFolder}'. Install it as a dependency of the host application.`);
|
|
28
|
+
}
|
|
29
|
+
return resolved.realRoot;
|
|
30
|
+
}
|
|
31
|
+
function getModuleFolder(name, moduleConfig, projectFolder) {
|
|
32
|
+
if (!moduleConfig.path) {
|
|
33
|
+
return resolveModuleFolder(name, projectFolder);
|
|
34
|
+
}
|
|
35
|
+
return node_path_1.default.resolve(projectFolder, moduleConfig.path);
|
|
36
|
+
}
|
|
37
|
+
function buildEntryConfig(moduleConfig) {
|
|
38
|
+
return {
|
|
39
|
+
config: moduleConfig.config,
|
|
40
|
+
importOverrides: (0, module_loading_1.buildModuleOverrides)(moduleConfig.importOverrides),
|
|
41
|
+
disabledExports: new Set(moduleConfig.disabledExports ?? []),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function createHostEntry(projectFolder, options) {
|
|
45
|
+
const folder = getHostModuleFolder(projectFolder);
|
|
46
|
+
const source = { type: "local", id: exports.HOST_MODULE_ID };
|
|
47
|
+
const provides = options.provides ?? [];
|
|
48
|
+
const declared = [...new Set([...(options.uses ?? []), ...provides])];
|
|
49
|
+
const dependencies = Object.fromEntries(declared.map((interfacePackage) => [
|
|
50
|
+
interfacePackage,
|
|
51
|
+
HOST_DEPENDENCY_RANGE,
|
|
52
|
+
]));
|
|
53
|
+
const manifest = module_manifest_1.ModuleManifest.fromBuildEntry({
|
|
54
|
+
folder,
|
|
55
|
+
source,
|
|
56
|
+
name: exports.HOST_MODULE_ID,
|
|
57
|
+
version: exports.HOST_MODULE_VERSION,
|
|
58
|
+
main: HOST_MODULE_ENTRY,
|
|
59
|
+
manifest: {
|
|
60
|
+
name: exports.HOST_MODULE_ID,
|
|
61
|
+
version: exports.HOST_MODULE_VERSION,
|
|
62
|
+
dependencies,
|
|
63
|
+
antelopeJs: { implements: provides },
|
|
64
|
+
},
|
|
65
|
+
implements: provides,
|
|
66
|
+
baseUrl: folder,
|
|
67
|
+
paths: [],
|
|
68
|
+
});
|
|
69
|
+
return { manifest, config: buildEntryConfig({}) };
|
|
70
|
+
}
|
|
71
|
+
async function createEmbeddedEntries(options, projectFolder, fs) {
|
|
72
|
+
const modules = Object.entries(options.modules ?? {});
|
|
73
|
+
const entries = await Promise.all(modules.map(async ([name, moduleConfig]) => {
|
|
74
|
+
const folder = getModuleFolder(name, moduleConfig, projectFolder);
|
|
75
|
+
const source = { type: "local", id: name };
|
|
76
|
+
const manifest = await module_manifest_1.ModuleManifest.create(folder, source, name, fs);
|
|
77
|
+
return { manifest, config: buildEntryConfig(moduleConfig) };
|
|
78
|
+
}));
|
|
79
|
+
return [...entries, createHostEntry(projectFolder, options)];
|
|
80
|
+
}
|
|
81
|
+
function prepareEmbedded(options, projectFolder) {
|
|
82
|
+
return async () => {
|
|
83
|
+
const fs = new filesystem_1.NodeFileSystem();
|
|
84
|
+
return {
|
|
85
|
+
fs,
|
|
86
|
+
dev: false,
|
|
87
|
+
logging: options.logging,
|
|
88
|
+
loadContext: (0, launch_sequence_1.memoizeLoaderContext)(() => (0, module_loading_1.createLoaderContext)({
|
|
89
|
+
projectFolder,
|
|
90
|
+
cacheFolder: node_path_1.default.join(projectFolder, ...EMBEDDED_CACHE_SEGMENTS),
|
|
91
|
+
}, fs)),
|
|
92
|
+
verify: async () => { },
|
|
93
|
+
createEntries: () => createEmbeddedEntries(options, projectFolder, fs),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=prepare-embedded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-embedded.js","sourceRoot":"","sources":["../../../src/core/embedded/prepare-embedded.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function captureOwnedProxies(attach: () => void): () => void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.captureOwnedProxies = captureOwnedProxies;
|
|
4
|
+
const internal_1 = require("@antelopejs/interface-core/internal");
|
|
5
|
+
const OWNERSHIP_MAPS = [
|
|
6
|
+
(runtime) => runtime.knownAsync,
|
|
7
|
+
(runtime) => runtime.knownRegisters,
|
|
8
|
+
];
|
|
9
|
+
function getOwnedProxies(owner) {
|
|
10
|
+
return OWNERSHIP_MAPS.map((select) => select(internal_1.internal).get(owner) ?? new Set());
|
|
11
|
+
}
|
|
12
|
+
function releaseProxy(proxy) {
|
|
13
|
+
const cleanup = proxy.cleanup;
|
|
14
|
+
if (typeof cleanup === "function") {
|
|
15
|
+
cleanup.call(proxy);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
proxy.detach();
|
|
19
|
+
}
|
|
20
|
+
function forgetProxy(owner, proxy) {
|
|
21
|
+
OWNERSHIP_MAPS.forEach((select) => {
|
|
22
|
+
select(internal_1.internal).get(owner)?.delete(proxy);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function captureOwnedProxies(attach) {
|
|
26
|
+
const owner = (0, internal_1.getModuleContext)()?.owner;
|
|
27
|
+
if (!owner) {
|
|
28
|
+
attach();
|
|
29
|
+
return () => { };
|
|
30
|
+
}
|
|
31
|
+
const before = getOwnedProxies(owner).map((proxies) => new Set(proxies));
|
|
32
|
+
attach();
|
|
33
|
+
const attached = getOwnedProxies(owner).flatMap((proxies, index) => [...proxies].filter((proxy) => !before[index].has(proxy)));
|
|
34
|
+
return () => {
|
|
35
|
+
const errors = [];
|
|
36
|
+
attached.forEach((proxy) => {
|
|
37
|
+
try {
|
|
38
|
+
releaseProxy(proxy);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
errors.push(error);
|
|
42
|
+
}
|
|
43
|
+
forgetProxy(owner, proxy);
|
|
44
|
+
});
|
|
45
|
+
attached.length = 0;
|
|
46
|
+
if (errors.length > 0) {
|
|
47
|
+
throw new AggregateError(errors, "Failed to release host registrations");
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=proxy-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-ownership.js","sourceRoot":"","sources":["../../../src/core/embedded/proxy-ownership.ts"],"names":[],"mappings":";;AAmCA,kDA4BC;AA/DD,kEAI6C;AAK7C,MAAM,cAAc,GAAuD;IACzE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU;IAC/B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc;CACpC,CAAC;AAEF,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,cAAc,CAAC,GAAG,CACvB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAc,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,MAAM,OAAO,GAAI,KAAwB,CAAC,OAAO,CAAC;IAClD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IACA,KAA4B,CAAC,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAiB;IACnD,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAChC,MAAM,CAAC,mBAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAkB;IACpD,MAAM,KAAK,GAAG,IAAA,2BAAgB,GAAE,EAAE,KAAK,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CACjE,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;IAEF,OAAO,GAAG,EAAE;QACV,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ModuleManager } from "../module-manager";
|
|
2
|
+
import type { EmbeddedRuntimeOptions, ProvideHandle } from "./types";
|
|
3
|
+
export declare class AntelopeRuntime {
|
|
4
|
+
private readonly options;
|
|
5
|
+
private started?;
|
|
6
|
+
private pending?;
|
|
7
|
+
private readonly projectFolder;
|
|
8
|
+
private readonly env;
|
|
9
|
+
private readonly policy;
|
|
10
|
+
constructor(options?: EmbeddedRuntimeOptions);
|
|
11
|
+
get manager(): ModuleManager;
|
|
12
|
+
get isRunning(): boolean;
|
|
13
|
+
start(): Promise<void>;
|
|
14
|
+
stop(): Promise<void>;
|
|
15
|
+
private launch;
|
|
16
|
+
private verifyDeclaredInterfaces;
|
|
17
|
+
private warnOnContestedProviders;
|
|
18
|
+
use<T>(request: string): T;
|
|
19
|
+
provide(packageName: string, implementation: unknown): ProvideHandle;
|
|
20
|
+
private hostModule;
|
|
21
|
+
private requireStarted;
|
|
22
|
+
}
|
|
23
|
+
export declare function createRuntime(options?: EmbeddedRuntimeOptions): AntelopeRuntime;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AntelopeRuntime = void 0;
|
|
4
|
+
exports.createRuntime = createRuntime;
|
|
5
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
6
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
7
|
+
const config_paths_1 = require("../config/config-paths");
|
|
8
|
+
const project_launch_1 = require("../runtime/project-launch");
|
|
9
|
+
const runtime_policy_1 = require("../runtime/runtime-policy");
|
|
10
|
+
const prepare_embedded_1 = require("./prepare-embedded");
|
|
11
|
+
const proxy_ownership_1 = require("./proxy-ownership");
|
|
12
|
+
const attachImplementation = interface_core_1.ImplementInterface;
|
|
13
|
+
const Logger = new logging_1.Logging.Channel("loader.embedded");
|
|
14
|
+
function findInterfacePackage(started, request) {
|
|
15
|
+
return [...started.manager.resolver.interfacePackages.keys()].find((packageName) => request === packageName || request.startsWith(`${packageName}/`));
|
|
16
|
+
}
|
|
17
|
+
const NOT_STARTED_MESSAGE = "The embedded runtime has not been started. Call start() first.";
|
|
18
|
+
class AntelopeRuntime {
|
|
19
|
+
options;
|
|
20
|
+
started;
|
|
21
|
+
pending;
|
|
22
|
+
projectFolder;
|
|
23
|
+
env;
|
|
24
|
+
policy;
|
|
25
|
+
constructor(options = {}) {
|
|
26
|
+
this.options = options;
|
|
27
|
+
this.projectFolder = options.projectFolder ?? process.cwd();
|
|
28
|
+
this.env = options.env ?? config_paths_1.DEFAULT_ENV;
|
|
29
|
+
this.policy = (0, runtime_policy_1.resolveRuntimePolicy)({ ...(options.logging ? { logging: true } : {}), ...options.policy }, runtime_policy_1.EMBEDDED_RUNTIME_POLICY);
|
|
30
|
+
}
|
|
31
|
+
get manager() {
|
|
32
|
+
return this.requireStarted().manager;
|
|
33
|
+
}
|
|
34
|
+
get isRunning() {
|
|
35
|
+
return this.started !== undefined;
|
|
36
|
+
}
|
|
37
|
+
async start() {
|
|
38
|
+
this.pending ??= this.launch();
|
|
39
|
+
try {
|
|
40
|
+
this.started = await this.pending;
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
this.pending = undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async stop() {
|
|
47
|
+
if (this.pending) {
|
|
48
|
+
await this.pending.catch(() => undefined);
|
|
49
|
+
}
|
|
50
|
+
const started = this.started;
|
|
51
|
+
if (!started) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.started = undefined;
|
|
55
|
+
await started.shutdownManager.shutdown();
|
|
56
|
+
}
|
|
57
|
+
async launch() {
|
|
58
|
+
if (this.started) {
|
|
59
|
+
return this.started;
|
|
60
|
+
}
|
|
61
|
+
const started = await (0, project_launch_1.startProject)((0, prepare_embedded_1.prepareEmbedded)(this.options, this.projectFolder), this.projectFolder, this.env, {}, this.policy);
|
|
62
|
+
try {
|
|
63
|
+
this.verifyDeclaredInterfaces(started);
|
|
64
|
+
this.warnOnContestedProviders(started);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
await started.shutdownManager.shutdown();
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
return started;
|
|
71
|
+
}
|
|
72
|
+
verifyDeclaredInterfaces(started) {
|
|
73
|
+
const declared = [
|
|
74
|
+
...(this.options.uses ?? []),
|
|
75
|
+
...(this.options.provides ?? []),
|
|
76
|
+
];
|
|
77
|
+
const missing = declared.filter((packageName) => !started.manager.resolver.interfacePackages.has(packageName));
|
|
78
|
+
if (missing.length > 0) {
|
|
79
|
+
throw new Error(`Declared interfaces were not resolved: ${missing.join(", ")}. Check the package names, and that each is installed alongside a module that implements it.`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
warnOnContestedProviders(started) {
|
|
83
|
+
const provides = this.options.provides ?? [];
|
|
84
|
+
for (const { module, config } of started.manager.getLoadedModules()) {
|
|
85
|
+
if (module.id === prepare_embedded_1.HOST_MODULE_ID) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const contested = (module.manifest.implements ?? []).filter((packageName) => provides.includes(packageName) &&
|
|
89
|
+
!config.disabledExports?.has(packageName));
|
|
90
|
+
if (contested.length > 0) {
|
|
91
|
+
Logger.Warn(`Host and module '${module.id}' both provide ${contested.join(", ")}; the host is selected by default. Use importOverrides to route consumers to '${module.id}'.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
use(request) {
|
|
96
|
+
const started = this.requireStarted();
|
|
97
|
+
if (!findInterfacePackage(started, request)) {
|
|
98
|
+
throw new Error(`Interface '${request}' is not provided by any loaded module. Declare it in 'uses' and load a module that implements it.`);
|
|
99
|
+
}
|
|
100
|
+
return this.hostModule().runInContext(() => require(request));
|
|
101
|
+
}
|
|
102
|
+
provide(packageName, implementation) {
|
|
103
|
+
if (!this.options.provides?.includes(packageName)) {
|
|
104
|
+
throw new Error(`Interface '${packageName}' is not declared in 'provides', so nothing routes to a host implementation of it. Add it to 'provides' before calling provide().`);
|
|
105
|
+
}
|
|
106
|
+
const declaration = this.use(packageName);
|
|
107
|
+
const release = this.hostModule().runInContext(() => (0, proxy_ownership_1.captureOwnedProxies)(() => {
|
|
108
|
+
attachImplementation(declaration, implementation);
|
|
109
|
+
}));
|
|
110
|
+
return { detach: release };
|
|
111
|
+
}
|
|
112
|
+
hostModule() {
|
|
113
|
+
const started = this.requireStarted();
|
|
114
|
+
const module = started.manager.getModule(prepare_embedded_1.HOST_MODULE_ID);
|
|
115
|
+
if (!module) {
|
|
116
|
+
throw new Error(NOT_STARTED_MESSAGE);
|
|
117
|
+
}
|
|
118
|
+
return module;
|
|
119
|
+
}
|
|
120
|
+
requireStarted() {
|
|
121
|
+
if (!this.started) {
|
|
122
|
+
throw new Error(NOT_STARTED_MESSAGE);
|
|
123
|
+
}
|
|
124
|
+
return this.started;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.AntelopeRuntime = AntelopeRuntime;
|
|
128
|
+
function createRuntime(options = {}) {
|
|
129
|
+
return new AntelopeRuntime(options);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/embedded/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AntelopeLogging, ImportOverride } from "@antelopejs/interface-core/config";
|
|
2
|
+
import type { RuntimePolicy } from "../runtime/runtime-policy";
|
|
3
|
+
export interface EmbeddedModuleConfig {
|
|
4
|
+
path?: string;
|
|
5
|
+
config?: unknown;
|
|
6
|
+
importOverrides?: ImportOverride[];
|
|
7
|
+
disabledExports?: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface EmbeddedRuntimeOptions {
|
|
10
|
+
projectFolder?: string;
|
|
11
|
+
env?: string;
|
|
12
|
+
modules?: Record<string, EmbeddedModuleConfig>;
|
|
13
|
+
uses?: string[];
|
|
14
|
+
provides?: string[];
|
|
15
|
+
logging?: AntelopeLogging;
|
|
16
|
+
policy?: Partial<RuntimePolicy>;
|
|
17
|
+
}
|
|
18
|
+
export interface ProvideHandle {
|
|
19
|
+
detach(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/embedded/types.ts"],"names":[],"mappings":""}
|
|
@@ -50,7 +50,7 @@ export declare class ModuleManager {
|
|
|
50
50
|
getLoadedModuleEntry(id: string): ManagedModule | undefined;
|
|
51
51
|
getLoadedModules(): IterableIterator<ManagedModule>;
|
|
52
52
|
getAllManagedModules(): ManagedModule[];
|
|
53
|
-
unrequireModuleFiles(moduleId: string): void;
|
|
53
|
+
unrequireModuleFiles(moduleId: string, shouldPreserveInterfaceGraph?: boolean): void;
|
|
54
54
|
replaceLoadedModule(id: string, module: Module): ManagedModule | undefined;
|
|
55
55
|
refreshAssociations(): void;
|
|
56
56
|
hasResolvedInterface(moduleId: string, interfaceName: string): boolean;
|
|
@@ -40,7 +40,6 @@ const semver_1 = require("semver");
|
|
|
40
40
|
const types_1 = require("../types");
|
|
41
41
|
const interface_registry_1 = require("./interface-registry");
|
|
42
42
|
const module_1 = require("./module");
|
|
43
|
-
const module_context_1 = require("./module-context");
|
|
44
43
|
const module_registry_1 = require("./module-registry");
|
|
45
44
|
const module_tracker_1 = require("./module-tracker");
|
|
46
45
|
const package_resolution_1 = require("./resolution/package-resolution");
|
|
@@ -120,7 +119,7 @@ class ModuleManager {
|
|
|
120
119
|
getAllManagedModules() {
|
|
121
120
|
return [...this.staticModules, ...this.loaded.values()];
|
|
122
121
|
}
|
|
123
|
-
unrequireModuleFiles(moduleId) {
|
|
122
|
+
unrequireModuleFiles(moduleId, shouldPreserveInterfaceGraph = true) {
|
|
124
123
|
const entry = this.loaded.get(moduleId);
|
|
125
124
|
if (!entry) {
|
|
126
125
|
return;
|
|
@@ -140,6 +139,11 @@ class ModuleManager {
|
|
|
140
139
|
if (!this.isPathWithin(filePath, moduleFolder)) {
|
|
141
140
|
continue;
|
|
142
141
|
}
|
|
142
|
+
if (shouldPreserveInterfaceGraph &&
|
|
143
|
+
filePath !== entry.module.manifest.main &&
|
|
144
|
+
this.resolver.isInterfaceGraphFile(filePath)) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
143
147
|
let shouldDelete = true;
|
|
144
148
|
for (const avoided of avoidedFolders) {
|
|
145
149
|
if (this.isPathWithin(filePath, avoided)) {
|
|
@@ -185,7 +189,7 @@ class ModuleManager {
|
|
|
185
189
|
canonicalPackage,
|
|
186
190
|
consumers,
|
|
187
191
|
});
|
|
188
|
-
this.registerInterfacePackage(packageName, canonicalPackage);
|
|
192
|
+
this.registerInterfacePackage(packageName, canonicalPackage, true);
|
|
189
193
|
(0, stub_interface_runtime_1.logStubInterfaceWarningOnce)(packageName, entries.some((entry) => entry.standalone));
|
|
190
194
|
}
|
|
191
195
|
applyInterfaceStubs() {
|
|
@@ -195,10 +199,11 @@ class ModuleManager {
|
|
|
195
199
|
]) {
|
|
196
200
|
if (implemented.has(interfaceName)) {
|
|
197
201
|
this.stubbedInterfacePackages.delete(interfaceName);
|
|
202
|
+
this.resolver.stubbedInterfacePackages.delete(interfaceName);
|
|
198
203
|
continue;
|
|
199
204
|
}
|
|
200
205
|
if (!this.resolver.interfacePackages.has(interfaceName)) {
|
|
201
|
-
this.registerInterfacePackage(interfaceName, resolvedPackage);
|
|
206
|
+
this.registerInterfacePackage(interfaceName, resolvedPackage, true);
|
|
202
207
|
}
|
|
203
208
|
try {
|
|
204
209
|
require(interfaceName);
|
|
@@ -299,6 +304,9 @@ class ModuleManager {
|
|
|
299
304
|
const modules = this.getReverseLifecycleModules();
|
|
300
305
|
const results = await runTrackedModuleOperations(modules, (module) => module.destroy());
|
|
301
306
|
this.pendingCleanup = results.failed.filter(({ module }) => module.state !== types_1.ModuleState.Loaded);
|
|
307
|
+
for (const id of this.loaded.keys()) {
|
|
308
|
+
this.unrequireModuleFiles(id, false);
|
|
309
|
+
}
|
|
302
310
|
const errors = [...results.errors, ...this.clearManagedState()];
|
|
303
311
|
if (errors.length > 0) {
|
|
304
312
|
throw new AggregateError(errors, "Failed to destroy modules");
|
|
@@ -344,6 +352,7 @@ class ModuleManager {
|
|
|
344
352
|
this.resolver.interfacePackages.clear();
|
|
345
353
|
this.resolver.interfacePackageEntries.clear();
|
|
346
354
|
this.resolver.interfacePackageResolveFrom.clear();
|
|
355
|
+
this.resolver.lifecycleInterfacePackages.clear();
|
|
347
356
|
this.interfacePackagePlans.clear();
|
|
348
357
|
this.startupOrder = [];
|
|
349
358
|
return this.releaseRuntimeState();
|
|
@@ -351,6 +360,7 @@ class ModuleManager {
|
|
|
351
360
|
releaseRuntimeState() {
|
|
352
361
|
const errors = [];
|
|
353
362
|
this.stubbedInterfacePackages.clear();
|
|
363
|
+
this.resolver.stubbedInterfacePackages.clear();
|
|
354
364
|
(0, stub_interface_runtime_1.clearStubInterfaceWarnings)();
|
|
355
365
|
this.moduleTracker.clear();
|
|
356
366
|
this.interfaceRegistry.clear();
|
|
@@ -376,6 +386,8 @@ class ModuleManager {
|
|
|
376
386
|
this.resolver.interfacePackages.clear();
|
|
377
387
|
this.resolver.interfacePackageEntries.clear();
|
|
378
388
|
this.resolver.interfacePackageResolveFrom.clear();
|
|
389
|
+
this.resolver.lifecycleInterfacePackages.clear();
|
|
390
|
+
this.resolver.stubbedInterfacePackages.clear();
|
|
379
391
|
this.interfacePackagePlans.clear();
|
|
380
392
|
this.resolvedAssociations.clear();
|
|
381
393
|
this.resolvedConnections.clear();
|
|
@@ -422,7 +434,7 @@ class ModuleManager {
|
|
|
422
434
|
canonicalPackage,
|
|
423
435
|
consumers: this.collectInterfacePackageConsumers(ifacePkg),
|
|
424
436
|
});
|
|
425
|
-
this.registerInterfacePackage(ifacePkg, canonicalPackage);
|
|
437
|
+
this.registerInterfacePackage(ifacePkg, canonicalPackage, false);
|
|
426
438
|
}
|
|
427
439
|
for (const [packageName, canonicalPackage] of this
|
|
428
440
|
.stubbedInterfacePackages) {
|
|
@@ -433,7 +445,7 @@ class ModuleManager {
|
|
|
433
445
|
canonicalPackage,
|
|
434
446
|
consumers: this.collectInterfacePackageConsumers(packageName),
|
|
435
447
|
});
|
|
436
|
-
this.registerInterfacePackage(packageName, canonicalPackage);
|
|
448
|
+
this.registerInterfacePackage(packageName, canonicalPackage, true);
|
|
437
449
|
}
|
|
438
450
|
}
|
|
439
451
|
resolveImplementedPackage(packageName, module) {
|
|
@@ -444,7 +456,10 @@ class ModuleManager {
|
|
|
444
456
|
if (module.manifest.manifest.name !== packageName) {
|
|
445
457
|
return undefined;
|
|
446
458
|
}
|
|
447
|
-
return
|
|
459
|
+
return {
|
|
460
|
+
...(0, package_resolution_1.resolvePackageAtRoot)(packageName, module.manifest.folder, module.manifest.version),
|
|
461
|
+
antelopeJs: module.manifest.manifest.antelopeJs,
|
|
462
|
+
};
|
|
448
463
|
}
|
|
449
464
|
collectInterfacePackageConsumers(packageName) {
|
|
450
465
|
const consumers = [];
|
|
@@ -463,10 +478,23 @@ class ModuleManager {
|
|
|
463
478
|
}
|
|
464
479
|
return consumers;
|
|
465
480
|
}
|
|
466
|
-
registerInterfacePackage(packageName, resolvedPackage) {
|
|
481
|
+
registerInterfacePackage(packageName, resolvedPackage, isStubbed = false) {
|
|
467
482
|
this.resolver.interfacePackages.set(packageName, resolvedPackage.root);
|
|
468
483
|
this.resolver.interfacePackageEntries.set(packageName, resolvedPackage.entry);
|
|
469
484
|
this.resolver.interfacePackageResolveFrom.set(packageName, resolvedPackage.resolveFrom);
|
|
485
|
+
if (isStubbed) {
|
|
486
|
+
this.resolver.stubbedInterfacePackages.add(packageName);
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
this.resolver.stubbedInterfacePackages.delete(packageName);
|
|
490
|
+
}
|
|
491
|
+
const implementations = resolvedPackage.antelopeJs?.implements;
|
|
492
|
+
if (Array.isArray(implementations) &&
|
|
493
|
+
implementations.includes(packageName)) {
|
|
494
|
+
this.resolver.lifecycleInterfacePackages.add(packageName);
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
this.resolver.lifecycleInterfacePackages.delete(packageName);
|
|
470
498
|
}
|
|
471
499
|
validateInterfacePackages() {
|
|
472
500
|
const errors = [...this.interfacePackagePlans].flatMap(([name, plan]) => [
|
|
@@ -570,17 +598,8 @@ class ModuleManager {
|
|
|
570
598
|
}
|
|
571
599
|
configureModuleContexts() {
|
|
572
600
|
for (const { module, config } of this.getAllManagedModules()) {
|
|
573
|
-
const selected = this.selectedProviders.get(module.id) ?? new Map();
|
|
574
|
-
const connections = this.resolvedConnections.get(module.id) ??
|
|
575
|
-
new Map();
|
|
576
|
-
const routes = [...selected].map(([interfaceName, provider]) => ({
|
|
577
|
-
interfaceName,
|
|
578
|
-
packageEntry: this.resolver.interfacePackageEntries.get(interfaceName),
|
|
579
|
-
provider,
|
|
580
|
-
providerCount: new Set(connections.get(interfaceName)?.map(({ module }) => module)).size,
|
|
581
|
-
}));
|
|
582
601
|
const isProvider = (module.manifest.implements ?? []).some((interfaceName) => !config.disabledExports?.has(interfaceName));
|
|
583
|
-
module.setProviderRoutes(
|
|
602
|
+
module.setProviderRoutes(this.resolver.buildProviderRoutes(module.id), isProvider);
|
|
584
603
|
}
|
|
585
604
|
}
|
|
586
605
|
isPathWithin(filePath, dirPath) {
|