@antelopejs/core 1.13.4 → 1.14.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/build/build-artifact.d.ts +2 -1
- package/dist/core/build/build-artifact.js.map +1 -1
- package/dist/core/cli/command.d.ts +2 -1
- package/dist/core/cli/command.js +36 -22
- package/dist/core/cli/command.js.map +1 -1
- package/dist/core/cli/output/interface-conflicts.d.ts +3 -0
- package/dist/core/cli/output/interface-conflicts.js +61 -0
- package/dist/core/cli/output/interface-conflicts.js.map +1 -0
- package/dist/core/cli/output/translations.js +5 -0
- package/dist/core/cli/output/translations.js.map +1 -1
- package/dist/core/config/config-parser.d.ts +1 -0
- package/dist/core/config/config-parser.js +11 -0
- package/dist/core/config/config-parser.js.map +1 -1
- package/dist/core/config/config-paths.d.ts +1 -0
- package/dist/core/config/config-paths.js +3 -2
- package/dist/core/config/config-paths.js.map +1 -1
- package/dist/core/embedded/prepare-embedded.js +5 -4
- package/dist/core/embedded/prepare-embedded.js.map +1 -1
- package/dist/core/embedded/types.d.ts +1 -0
- package/dist/core/interface-registry.d.ts +2 -2
- package/dist/core/interface-registry.js +19 -12
- package/dist/core/interface-registry.js.map +1 -1
- package/dist/core/module-isolation.d.ts +18 -0
- package/dist/core/module-isolation.js +107 -0
- package/dist/core/module-isolation.js.map +1 -0
- package/dist/core/module-manager.d.ts +21 -3
- package/dist/core/module-manager.js +217 -39
- package/dist/core/module-manager.js.map +1 -1
- package/dist/core/module-manifest.d.ts +1 -0
- package/dist/core/module-manifest.js +34 -0
- package/dist/core/module-manifest.js.map +1 -1
- package/dist/core/module-registry.d.ts +1 -0
- package/dist/core/module-registry.js +3 -0
- package/dist/core/module-registry.js.map +1 -1
- package/dist/core/module.d.ts +1 -3
- package/dist/core/module.js +0 -18
- package/dist/core/module.js.map +1 -1
- package/dist/core/resolution/binding-diagnostics.d.ts +30 -0
- package/dist/core/resolution/binding-diagnostics.js +65 -0
- package/dist/core/resolution/binding-diagnostics.js.map +1 -0
- package/dist/core/resolution/binding-graph-order.d.ts +3 -0
- package/dist/core/resolution/binding-graph-order.js +49 -0
- package/dist/core/resolution/binding-graph-order.js.map +1 -0
- package/dist/core/resolution/binding-graph-types.d.ts +46 -0
- package/dist/core/resolution/binding-graph-types.js +3 -0
- package/dist/core/resolution/binding-graph-types.js.map +1 -0
- package/dist/core/resolution/binding-graph-warnings.d.ts +11 -0
- package/dist/core/resolution/binding-graph-warnings.js +73 -0
- package/dist/core/resolution/binding-graph-warnings.js.map +1 -0
- package/dist/core/resolution/binding-graph.d.ts +2 -0
- package/dist/core/resolution/binding-graph.js +375 -0
- package/dist/core/resolution/binding-graph.js.map +1 -0
- package/dist/core/resolution/binding-providers.d.ts +11 -0
- package/dist/core/resolution/binding-providers.js +47 -0
- package/dist/core/resolution/binding-providers.js.map +1 -0
- package/dist/core/resolution/instance-copies.d.ts +5 -0
- package/dist/core/resolution/instance-copies.js +109 -0
- package/dist/core/resolution/instance-copies.js.map +1 -0
- package/dist/core/resolution/interface-dependencies.d.ts +1 -0
- package/dist/core/resolution/interface-dependencies.js +27 -0
- package/dist/core/resolution/interface-dependencies.js.map +1 -0
- package/dist/core/resolution/interface-instances.d.ts +28 -0
- package/dist/core/resolution/interface-instances.js +188 -0
- package/dist/core/resolution/interface-instances.js.map +1 -0
- package/dist/core/resolution/interface-resolution-error.d.ts +24 -0
- package/dist/core/resolution/interface-resolution-error.js +30 -0
- package/dist/core/resolution/interface-resolution-error.js.map +1 -0
- package/dist/core/resolution/resolver-detour.js +14 -22
- package/dist/core/resolution/resolver-detour.js.map +1 -1
- package/dist/core/resolution/resolver.d.ts +30 -72
- package/dist/core/resolution/resolver.js +201 -659
- package/dist/core/resolution/resolver.js.map +1 -1
- package/dist/core/runtime/build-runtime.d.ts +1 -1
- package/dist/core/runtime/build-runtime.js +9 -1
- package/dist/core/runtime/build-runtime.js.map +1 -1
- package/dist/core/runtime/dev-server-registry.js +1 -1
- package/dist/core/runtime/dev-server-registry.js.map +1 -1
- package/dist/core/runtime/launch-sequence.js +68 -24
- package/dist/core/runtime/launch-sequence.js.map +1 -1
- package/dist/core/runtime/launch-steps.d.ts +5 -0
- package/dist/core/runtime/launch-steps.js +26 -0
- package/dist/core/runtime/launch-steps.js.map +1 -0
- package/dist/core/runtime/module-loading.d.ts +1 -0
- package/dist/core/runtime/module-loading.js +18 -5
- package/dist/core/runtime/module-loading.js.map +1 -1
- package/dist/core/runtime/project-launch.js +33 -12
- package/dist/core/runtime/project-launch.js.map +1 -1
- package/dist/core/runtime/runtime-bootstrap.js +0 -3
- package/dist/core/runtime/runtime-bootstrap.js.map +1 -1
- package/dist/core/runtime/runtime-policy.js.map +1 -1
- package/dist/core/runtime/runtime-types.d.ts +3 -2
- package/dist/core/shutdown/shutdown-manager.d.ts +2 -0
- package/dist/core/shutdown/shutdown-manager.js +11 -2
- package/dist/core/shutdown/shutdown-manager.js.map +1 -1
- package/dist/core/version-checker.d.ts +2 -2
- package/dist/core/version-checker.js +49 -31
- package/dist/core/version-checker.js.map +1 -1
- package/dist/core/watch/file-watcher.d.ts +7 -0
- package/dist/core/watch/file-watcher.js +70 -14
- package/dist/core/watch/file-watcher.js.map +1 -1
- package/package.json +2 -2
|
@@ -32,12 +32,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.startProject = startProject;
|
|
37
40
|
exports.launchFromBuild = launchFromBuild;
|
|
41
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
38
42
|
const node_stream_1 = require("node:stream");
|
|
39
43
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
40
44
|
const process_claim_1 = require("./process-claim");
|
|
45
|
+
const launch_steps_1 = require("./launch-steps");
|
|
41
46
|
const runtime_bootstrap_1 = require("./runtime-bootstrap");
|
|
42
47
|
const config_paths_1 = require("../config/config-paths");
|
|
43
48
|
const runtime_policy_1 = require("./runtime-policy");
|
|
@@ -55,6 +60,10 @@ function keepRunningThroughFailedReloads(shutdownManager) {
|
|
|
55
60
|
withdraw();
|
|
56
61
|
}, SHUTDOWN_PRIORITY_CLEANUP);
|
|
57
62
|
}
|
|
63
|
+
function excludeProjectState(watcher, projectFolder, loaderContext) {
|
|
64
|
+
watcher.excludePath(node_path_1.default.resolve(projectFolder, config_paths_1.PROJECT_STATE_DIR));
|
|
65
|
+
watcher.excludePath(node_path_1.default.resolve(projectFolder, loaderContext.cache.path));
|
|
66
|
+
}
|
|
58
67
|
async function setupWatching(manager, fs, projectFolder, env, options, shutdownManager, loaderContext) {
|
|
59
68
|
const [{ FileWatcher }, { HotReload }, moduleLoading] = await Promise.all([
|
|
60
69
|
Promise.resolve().then(() => __importStar(require("../watch/file-watcher"))),
|
|
@@ -62,6 +71,7 @@ async function setupWatching(manager, fs, projectFolder, env, options, shutdownM
|
|
|
62
71
|
Promise.resolve().then(() => __importStar(require("./module-loading"))),
|
|
63
72
|
]);
|
|
64
73
|
const watcher = new FileWatcher(fs);
|
|
74
|
+
excludeProjectState(watcher, projectFolder, loaderContext);
|
|
65
75
|
const loadedSignatures = new Map();
|
|
66
76
|
const hotReload = new HotReload(async (moduleId) => {
|
|
67
77
|
const signature = watcher.getModuleSignature(moduleId);
|
|
@@ -93,27 +103,38 @@ async function setupWatching(manager, fs, projectFolder, env, options, shutdownM
|
|
|
93
103
|
watcher.onModuleChanged((id) => hotReload.queue(id));
|
|
94
104
|
watcher.startWatching();
|
|
95
105
|
}
|
|
96
|
-
|
|
97
|
-
const { manager, shutdownManager } = started;
|
|
106
|
+
function warnAboutUnsupportedOptions({ started, options }) {
|
|
98
107
|
if (!started.dev && (options.watch || options.interactive)) {
|
|
99
108
|
Logger.Warn(UNSUPPORTED_ARTIFACT_OPTIONS_WARNING);
|
|
100
109
|
}
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
}
|
|
111
|
+
async function startWatching({ started, projectFolder, env, options, }) {
|
|
112
|
+
if (!started.dev || !options.watch) {
|
|
113
|
+
return;
|
|
103
114
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}, SHUTDOWN_PRIORITY_RESOURCES);
|
|
110
|
-
repl.start(INTERACTIVE_PROMPT);
|
|
115
|
+
await setupWatching(started.manager, started.fs, projectFolder, env, options, started.shutdownManager, await started.loadContext());
|
|
116
|
+
}
|
|
117
|
+
async function startInteractiveSession({ started, options, }) {
|
|
118
|
+
if (!started.dev || !options.interactive) {
|
|
119
|
+
return;
|
|
111
120
|
}
|
|
121
|
+
const { ReplSession } = await Promise.resolve().then(() => __importStar(require("../repl/repl-session")));
|
|
122
|
+
const repl = new ReplSession({ moduleManager: started.manager });
|
|
123
|
+
started.shutdownManager.register(async () => {
|
|
124
|
+
repl.close();
|
|
125
|
+
}, SHUTDOWN_PRIORITY_RESOURCES);
|
|
126
|
+
repl.start(INTERACTIVE_PROMPT);
|
|
112
127
|
}
|
|
128
|
+
const POST_LAUNCH_STEPS = [
|
|
129
|
+
warnAboutUnsupportedOptions,
|
|
130
|
+
startWatching,
|
|
131
|
+
startInteractiveSession,
|
|
132
|
+
];
|
|
113
133
|
async function startProject(prepare, projectFolder, env, options, policy = runtime_policy_1.DEFAULT_RUNTIME_POLICY) {
|
|
114
134
|
const started = await (0, launch_sequence_1.runLaunchSequence)(prepare, projectFolder, env, options, policy);
|
|
135
|
+
const postLaunch = { started, projectFolder, env, options };
|
|
115
136
|
try {
|
|
116
|
-
await
|
|
137
|
+
await (0, launch_steps_1.runLaunchSteps)(POST_LAUNCH_STEPS, postLaunch, started.shutdownManager.stopping);
|
|
117
138
|
return started;
|
|
118
139
|
}
|
|
119
140
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-launch.js","sourceRoot":"","sources":["../../../src/core/runtime/project-launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-launch.js","sourceRoot":"","sources":["../../../src/core/runtime/project-launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,9 +78,6 @@ function setupProcessHandlers(shutdownManager) {
|
|
|
78
78
|
logging_1.Logging.Error("Unhandled rejection:", reason);
|
|
79
79
|
shutdownProcess(EXIT_CODE_ERROR);
|
|
80
80
|
});
|
|
81
|
-
process.on("warning", (warning) => {
|
|
82
|
-
logging_1.Logging.Warn("Warning:", warning);
|
|
83
|
-
});
|
|
84
81
|
}
|
|
85
82
|
function releaseProcessShutdownManager(shutdownManager) {
|
|
86
83
|
const index = shutdownManagers.indexOf(shutdownManager);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-bootstrap.js","sourceRoot":"","sources":["../../../src/core/runtime/runtime-bootstrap.ts"],"names":[],"mappings":";;;;;AAqEA,sEAUC;AAED,
|
|
1
|
+
{"version":3,"file":"runtime-bootstrap.js","sourceRoot":"","sources":["../../../src/core/runtime/runtime-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-policy.js","sourceRoot":"","sources":["../../../src/core/runtime/runtime-policy.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"runtime-policy.js","sourceRoot":"","sources":["../../../src/core/runtime/runtime-policy.ts"],"names":[],"mappings":";;;AA6BA,oDAKC;AAnBY,QAAA,sBAAsB,GAA4B,MAAM,CAAC,MAAM,CAAC;IAC3E,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEU,QAAA,uBAAuB,GAA4B,MAAM,CAAC,MAAM,CAAC;IAC5E,eAAe,EAAE,KAAK;IACtB,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AAEH,SAAgB,oBAAoB,CAClC,YAAoC,EAAE,EACtC,OAAgC,8BAAsB;IAEtD,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -9,7 +9,7 @@ import type { DownloaderRegistry } from "../downloaders/registry";
|
|
|
9
9
|
import type { ExpandedModuleConfig } from "../config/config-parser";
|
|
10
10
|
import type { ModuleConfig, ModuleManager } from "../module-manager";
|
|
11
11
|
export interface ModuleOverrideRef {
|
|
12
|
-
module
|
|
12
|
+
module?: string;
|
|
13
13
|
id?: string;
|
|
14
14
|
}
|
|
15
15
|
export type ModuleOverrideMap = Map<string, ModuleOverrideRef[]>;
|
|
@@ -45,8 +45,9 @@ export interface PreparedProject {
|
|
|
45
45
|
dev: boolean;
|
|
46
46
|
logging?: AntelopeLogging;
|
|
47
47
|
loadContext: LoaderContextProvider;
|
|
48
|
-
verify: () => Promise<void>;
|
|
48
|
+
verify: (stopping: AbortSignal) => Promise<void>;
|
|
49
49
|
createEntries: () => Promise<ModuleManifestEntry[]>;
|
|
50
|
+
instanceRoot?: string;
|
|
50
51
|
}
|
|
51
52
|
export type ProjectPreparer = (projectFolder: string, env: string) => Promise<PreparedProject>;
|
|
52
53
|
export interface StartedProject {
|
|
@@ -22,11 +22,13 @@ export declare class ShutdownManager {
|
|
|
22
22
|
private sigintHandler?;
|
|
23
23
|
private sigtermHandler?;
|
|
24
24
|
private seenSignals;
|
|
25
|
+
private readonly stopController;
|
|
25
26
|
constructor(timeoutMs?: number, signalSource?: ProcessSignalSource, signalListener?: SignalShutdownListener);
|
|
26
27
|
register(handler: ShutdownHandler, priority: number): void;
|
|
27
28
|
unregister(handler: ShutdownHandler): void;
|
|
28
29
|
shutdown(exitCode?: number): Promise<void>;
|
|
29
30
|
get active(): boolean;
|
|
31
|
+
get stopping(): AbortSignal;
|
|
30
32
|
setupSignalHandlers(): void;
|
|
31
33
|
removeSignalHandlers(): void;
|
|
32
34
|
private detachSignalHandler;
|
|
@@ -7,6 +7,7 @@ const Logger = new logging_1.Logging.Channel("shutdown");
|
|
|
7
7
|
exports.DEFAULT_SHUTDOWN_TIMEOUT_MS = 10000;
|
|
8
8
|
exports.SHUTDOWN_CLEANUP_TIMEOUT_MS = 3000;
|
|
9
9
|
const MILLISECONDS_PER_SECOND = 1000;
|
|
10
|
+
const NO_TIME_LEFT_MS = 0;
|
|
10
11
|
const SIGNAL_EXIT_CODES = {
|
|
11
12
|
SIGINT: exit_codes_1.CANCELLED_EXIT_CODE,
|
|
12
13
|
SIGTERM: exit_codes_1.SUCCESS_EXIT_CODE,
|
|
@@ -20,6 +21,9 @@ const SILENT_LISTENER = {
|
|
|
20
21
|
onStopped: () => undefined,
|
|
21
22
|
onForced: () => undefined,
|
|
22
23
|
};
|
|
24
|
+
function timeLeftUntil(deadline) {
|
|
25
|
+
return Math.max(NO_TIME_LEFT_MS, deadline - Date.now());
|
|
26
|
+
}
|
|
23
27
|
function settleWithin(work, timeoutMs) {
|
|
24
28
|
let timer;
|
|
25
29
|
const timeout = new Promise((resolve) => {
|
|
@@ -38,6 +42,7 @@ class ShutdownManager {
|
|
|
38
42
|
sigintHandler;
|
|
39
43
|
sigtermHandler;
|
|
40
44
|
seenSignals = new Set();
|
|
45
|
+
stopController = new AbortController();
|
|
41
46
|
constructor(timeoutMs = exports.DEFAULT_SHUTDOWN_TIMEOUT_MS, signalSource = process, signalListener = SILENT_LISTENER) {
|
|
42
47
|
this.timeoutMs = timeoutMs;
|
|
43
48
|
this.signalSource = signalSource;
|
|
@@ -55,12 +60,16 @@ class ShutdownManager {
|
|
|
55
60
|
return this.shutdownPromise;
|
|
56
61
|
}
|
|
57
62
|
this.isShuttingDown = true;
|
|
63
|
+
this.stopController.abort();
|
|
58
64
|
this.shutdownPromise = this.executeShutdown();
|
|
59
65
|
return this.shutdownPromise;
|
|
60
66
|
}
|
|
61
67
|
get active() {
|
|
62
68
|
return this.isShuttingDown;
|
|
63
69
|
}
|
|
70
|
+
get stopping() {
|
|
71
|
+
return this.stopController.signal;
|
|
72
|
+
}
|
|
64
73
|
setupSignalHandlers() {
|
|
65
74
|
if (this.sigintHandler || this.sigtermHandler) {
|
|
66
75
|
return;
|
|
@@ -83,7 +92,7 @@ class ShutdownManager {
|
|
|
83
92
|
this.signalSource.removeListener(signal, handler);
|
|
84
93
|
}
|
|
85
94
|
handleSignal(signal) {
|
|
86
|
-
if (this.
|
|
95
|
+
if (this.seenSignals.size > 0) {
|
|
87
96
|
this.handleSignalDuringShutdown(signal);
|
|
88
97
|
return;
|
|
89
98
|
}
|
|
@@ -137,7 +146,7 @@ class ShutdownManager {
|
|
|
137
146
|
async runHandlersWithin(handlers, timeoutMs) {
|
|
138
147
|
const deadline = Date.now() + timeoutMs;
|
|
139
148
|
for (const [index, { handler }] of handlers.entries()) {
|
|
140
|
-
const hasSettled = await settleWithin(this.runHandler(handler), deadline
|
|
149
|
+
const hasSettled = await settleWithin(this.runHandler(handler), timeLeftUntil(deadline));
|
|
141
150
|
if (!hasSettled) {
|
|
142
151
|
return { hasTimedOut: true, remaining: handlers.slice(index + 1) };
|
|
143
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown-manager.js","sourceRoot":"","sources":["../../../src/core/shutdown/shutdown-manager.ts"],"names":[],"mappings":";;;AAAA,gEAA6D;AAE7D,kDAI2B;AA0C3B,MAAM,MAAM,GAAG,IAAI,iBAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAElC,QAAA,2BAA2B,GAAG,KAAK,CAAC;AAKpC,QAAA,2BAA2B,GAAG,IAAI,CAAC;AAChD,MAAM,uBAAuB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"shutdown-manager.js","sourceRoot":"","sources":["../../../src/core/shutdown/shutdown-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,6 @@ export declare function bumpVersionSpec(currentSpec: string, latest: string): st
|
|
|
9
9
|
export declare function toFloatingSpec(version: string): string;
|
|
10
10
|
export declare function fetchDistTags(packageName: string): Promise<Record<string, string>>;
|
|
11
11
|
export declare function validateVersionSpec(packageName: string, spec: string): Promise<void>;
|
|
12
|
-
export declare function fetchLatestVersion(packageName: string): Promise<string>;
|
|
13
|
-
export declare function checkOutdatedModules(modules: Record<string, ExpandedModuleConfig
|
|
12
|
+
export declare function fetchLatestVersion(packageName: string, signal?: AbortSignal): Promise<string>;
|
|
13
|
+
export declare function checkOutdatedModules(modules: Record<string, ExpandedModuleConfig>, signal?: AbortSignal): Promise<OutdatedModule[]>;
|
|
14
14
|
export declare function warnOutdatedModules(outdated: OutdatedModule[]): void;
|
|
@@ -13,9 +13,11 @@ const command_1 = require("./cli/command");
|
|
|
13
13
|
const cli_ui_1 = require("./cli/cli-ui");
|
|
14
14
|
const output_1 = require("./cli/output");
|
|
15
15
|
const package_manager_1 = require("./cli/package-manager");
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
16
|
+
const package_manager_name_1 = require("./cli/package-manager-name");
|
|
17
|
+
const REGISTRY_CLIENT = "npm";
|
|
18
|
+
const VIEW_ARGUMENT = "view";
|
|
19
|
+
const VERSION_ARGUMENTS = ["version"];
|
|
20
|
+
const DIST_TAGS_ARGUMENTS = ["dist-tags", "--json"];
|
|
19
21
|
const CARET_PREFIX = "^";
|
|
20
22
|
const UPDATE_COMMAND = "ajs project modules update";
|
|
21
23
|
const SLOW_CHECK_THRESHOLD_MS = 15_000;
|
|
@@ -38,12 +40,20 @@ function bumpVersionSpec(currentSpec, latest) {
|
|
|
38
40
|
function toFloatingSpec(version) {
|
|
39
41
|
return `${CARET_PREFIX}${version}`;
|
|
40
42
|
}
|
|
41
|
-
async function
|
|
42
|
-
const
|
|
43
|
-
const
|
|
43
|
+
async function viewPackage(packageName, fieldArguments, signal) {
|
|
44
|
+
const executable = (0, package_manager_name_1.packageManagerExecutable)(REGISTRY_CLIENT);
|
|
45
|
+
const args = [VIEW_ARGUMENT, packageName, ...fieldArguments];
|
|
46
|
+
const result = await (0, command_1.ExecuteFile)(executable, args, { signal });
|
|
44
47
|
if (result.code !== 0) {
|
|
45
|
-
throw new command_1.ExecError({
|
|
48
|
+
throw new command_1.ExecError({
|
|
49
|
+
...result,
|
|
50
|
+
command: [executable, ...args].join(" "),
|
|
51
|
+
});
|
|
46
52
|
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
async function fetchDistTags(packageName) {
|
|
56
|
+
const result = await viewPackage(packageName, DIST_TAGS_ARGUMENTS);
|
|
47
57
|
return JSON.parse(result.stdout);
|
|
48
58
|
}
|
|
49
59
|
async function validateVersionSpec(packageName, spec) {
|
|
@@ -58,53 +68,61 @@ async function validateVersionSpec(packageName, spec) {
|
|
|
58
68
|
title: `'${spec}' is neither a valid semver range nor a dist-tag of '${packageName}'`,
|
|
59
69
|
});
|
|
60
70
|
}
|
|
61
|
-
async function fetchLatestVersion(packageName) {
|
|
62
|
-
const
|
|
63
|
-
const result = await (0, command_1.ExecuteCMD)(command, {});
|
|
64
|
-
if (result.code !== 0) {
|
|
65
|
-
throw new command_1.ExecError({ ...result, command });
|
|
66
|
-
}
|
|
71
|
+
async function fetchLatestVersion(packageName, signal) {
|
|
72
|
+
const result = await viewPackage(packageName, VERSION_ARGUMENTS, signal);
|
|
67
73
|
return (0, package_manager_1.parsePackageInfoOutput)(result.stdout);
|
|
68
74
|
}
|
|
69
|
-
|
|
75
|
+
function whenAborted(signal) {
|
|
76
|
+
return new Promise((resolve) => {
|
|
77
|
+
signal?.addEventListener("abort", () => resolve(), { once: true });
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async function fetchLatestVersions(packageNames, signal) {
|
|
70
81
|
const task = (0, output_1.getProcessTasks)().start(`Checking ${(0, output_1.pluralize)(packageNames.length, "module")} on npm`);
|
|
71
82
|
const slowWarning = setTimeout(() => {
|
|
72
83
|
(0, cli_ui_1.warning)("Module version check is taking longer than expected: the npm registry may be slow or unreachable. " +
|
|
73
84
|
"Set NPM_CONFIG_FETCH_RETRIES=0 to fail fast.");
|
|
74
85
|
}, SLOW_CHECK_THRESHOLD_MS);
|
|
75
86
|
try {
|
|
76
|
-
return await Promise.
|
|
87
|
+
return await Promise.race([
|
|
88
|
+
Promise.allSettled(packageNames.map((packageName) => fetchLatestVersion(packageName, signal))),
|
|
89
|
+
whenAborted(signal).then(() => []),
|
|
90
|
+
]);
|
|
77
91
|
}
|
|
78
92
|
finally {
|
|
79
93
|
clearTimeout(slowWarning);
|
|
80
94
|
task.dismiss();
|
|
81
95
|
}
|
|
82
96
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
function packageSourceOf(info) {
|
|
98
|
+
return info.source;
|
|
99
|
+
}
|
|
100
|
+
function warnUncheckedPackage(packageName, reason) {
|
|
101
|
+
const truncated = (0, output_1.truncate)((0, output_1.describeFailure)(reason, false).title, MAX_REASON_LENGTH, (0, output_1.getProcessUi)().symbols.ellipsis);
|
|
102
|
+
(0, cli_ui_1.warning)(`Could not check latest version of ${packageName}: ${truncated}`);
|
|
103
|
+
}
|
|
104
|
+
function collectOutdatedModules(packageModules, results) {
|
|
89
105
|
return packageModules.reduce((outdated, [name, info], index) => {
|
|
90
106
|
const result = results[index];
|
|
91
|
-
const
|
|
107
|
+
const source = packageSourceOf(info);
|
|
92
108
|
if (result.status === "rejected") {
|
|
93
|
-
|
|
94
|
-
(0, cli_ui_1.warning)(`Could not check latest version of ${packageName}: ${truncated}`);
|
|
95
|
-
return outdated;
|
|
96
|
-
}
|
|
97
|
-
if (!result.value) {
|
|
109
|
+
warnUncheckedPackage(source.package, result.reason);
|
|
98
110
|
return outdated;
|
|
99
111
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (!isUpToDate(current, latest)) {
|
|
103
|
-
outdated.push({ name, current, latest });
|
|
112
|
+
if (result.value && !isUpToDate(source.version, result.value)) {
|
|
113
|
+
outdated.push({ name, current: source.version, latest: result.value });
|
|
104
114
|
}
|
|
105
115
|
return outdated;
|
|
106
116
|
}, []);
|
|
107
117
|
}
|
|
118
|
+
async function checkOutdatedModules(modules, signal) {
|
|
119
|
+
const packageModules = Object.entries(modules).filter(([, info]) => info.source?.type === "package");
|
|
120
|
+
if (packageModules.length === 0 || signal?.aborted) {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
const results = await fetchLatestVersions(packageModules.map(([, info]) => packageSourceOf(info).package), signal);
|
|
124
|
+
return signal?.aborted ? [] : collectOutdatedModules(packageModules, results);
|
|
125
|
+
}
|
|
108
126
|
function warnOutdatedModules(outdated) {
|
|
109
127
|
if (outdated.length === 0) {
|
|
110
128
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-checker.js","sourceRoot":"","sources":["../../src/core/version-checker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"version-checker.js","sourceRoot":"","sources":["../../src/core/version-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export declare class FileWatcher {
|
|
|
9
9
|
private moduleFiles;
|
|
10
10
|
private listeners;
|
|
11
11
|
private excludedDirs;
|
|
12
|
+
private excludedPaths;
|
|
12
13
|
private watchers;
|
|
13
14
|
private watchedDirs;
|
|
14
15
|
private dirModules;
|
|
@@ -17,6 +18,7 @@ export declare class FileWatcher {
|
|
|
17
18
|
private stopped;
|
|
18
19
|
constructor(fs: IFileSystem, hasher?: FileHasher);
|
|
19
20
|
onModuleChanged(listener: ModuleChangeListener): void;
|
|
21
|
+
excludePath(excludedPath: string): void;
|
|
20
22
|
scanModule(moduleId: string, rootDir: string, watchDirs?: string[]): Promise<void>;
|
|
21
23
|
watchFile(filePath: string, listener: FileChangeListener): Promise<void>;
|
|
22
24
|
startWatching(): void;
|
|
@@ -25,12 +27,17 @@ export declare class FileWatcher {
|
|
|
25
27
|
private setFileEntry;
|
|
26
28
|
private deleteFileEntry;
|
|
27
29
|
handleFileChange(filePath: string): Promise<void>;
|
|
30
|
+
private processFileChange;
|
|
28
31
|
private handleWatchedFileChange;
|
|
29
32
|
private handleNewPath;
|
|
33
|
+
private handleRemovedPath;
|
|
30
34
|
private handleRemovedDir;
|
|
31
35
|
private pruneDir;
|
|
32
36
|
getModuleSignature(moduleId: string): string;
|
|
33
37
|
private exploreDir;
|
|
38
|
+
private exploreEntry;
|
|
39
|
+
private addEntry;
|
|
34
40
|
private notifyModuleChange;
|
|
35
41
|
private isExcludedPath;
|
|
42
|
+
private isInsideExcludedPath;
|
|
36
43
|
}
|
|
@@ -39,6 +39,19 @@ const node_crypto_1 = require("node:crypto");
|
|
|
39
39
|
const node_fs_1 = require("node:fs");
|
|
40
40
|
const file_hasher_1 = require("./file-hasher");
|
|
41
41
|
const EXCLUDED_WATCH_DIRS = [".git", "node_modules"];
|
|
42
|
+
const VANISHED_PATH_ERROR_CODES = new Set(["ENOENT", "ENOTDIR"]);
|
|
43
|
+
function isVanishedPathError(error) {
|
|
44
|
+
if (!(error instanceof Error)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
const { code } = error;
|
|
48
|
+
return code !== undefined && VANISHED_PATH_ERROR_CODES.has(code);
|
|
49
|
+
}
|
|
50
|
+
function isInsideDir(filePath, dirPath) {
|
|
51
|
+
const relative = path.relative(dirPath, filePath);
|
|
52
|
+
return (relative === "" ||
|
|
53
|
+
(!relative.startsWith("..") && !path.isAbsolute(relative)));
|
|
54
|
+
}
|
|
42
55
|
class FileWatcher {
|
|
43
56
|
fs;
|
|
44
57
|
hasher;
|
|
@@ -46,6 +59,7 @@ class FileWatcher {
|
|
|
46
59
|
moduleFiles = new Map();
|
|
47
60
|
listeners = [];
|
|
48
61
|
excludedDirs = new Set(EXCLUDED_WATCH_DIRS);
|
|
62
|
+
excludedPaths = new Set();
|
|
49
63
|
watchers = new Map();
|
|
50
64
|
watchedDirs = new Set();
|
|
51
65
|
dirModules = new Map();
|
|
@@ -59,6 +73,9 @@ class FileWatcher {
|
|
|
59
73
|
onModuleChanged(listener) {
|
|
60
74
|
this.listeners.push(listener);
|
|
61
75
|
}
|
|
76
|
+
excludePath(excludedPath) {
|
|
77
|
+
this.excludedPaths.add(path.resolve(excludedPath));
|
|
78
|
+
}
|
|
62
79
|
async scanModule(moduleId, rootDir, watchDirs = [""]) {
|
|
63
80
|
for (const dir of watchDirs) {
|
|
64
81
|
await this.exploreDir(moduleId, path.join(rootDir, dir));
|
|
@@ -147,6 +164,17 @@ class FileWatcher {
|
|
|
147
164
|
if (this.stopped || this.isExcludedPath(filePath)) {
|
|
148
165
|
return;
|
|
149
166
|
}
|
|
167
|
+
try {
|
|
168
|
+
await this.processFileChange(filePath);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
if (!isVanishedPathError(error)) {
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
this.handleRemovedPath(filePath);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async processFileChange(filePath) {
|
|
150
178
|
const resolved = path.resolve(filePath);
|
|
151
179
|
const watchedFile = this.watchedFiles.get(resolved);
|
|
152
180
|
if (watchedFile) {
|
|
@@ -159,8 +187,7 @@ class FileWatcher {
|
|
|
159
187
|
return;
|
|
160
188
|
}
|
|
161
189
|
if (!(await this.fs.exists(filePath))) {
|
|
162
|
-
this.
|
|
163
|
-
this.notifyModuleChange(entry.moduleId);
|
|
190
|
+
this.handleRemovedPath(filePath);
|
|
164
191
|
return;
|
|
165
192
|
}
|
|
166
193
|
const stat = await this.fs.stat(filePath);
|
|
@@ -216,6 +243,15 @@ class FileWatcher {
|
|
|
216
243
|
this.setFileEntry(filePath, moduleId, hash);
|
|
217
244
|
this.notifyModuleChange(moduleId);
|
|
218
245
|
}
|
|
246
|
+
handleRemovedPath(filePath) {
|
|
247
|
+
const entry = this.filesHash.get(filePath);
|
|
248
|
+
if (!entry) {
|
|
249
|
+
this.handleRemovedDir(filePath);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.deleteFileEntry(filePath);
|
|
253
|
+
this.notifyModuleChange(entry.moduleId);
|
|
254
|
+
}
|
|
219
255
|
handleRemovedDir(dirPath) {
|
|
220
256
|
if (!this.watchedDirs.has(dirPath)) {
|
|
221
257
|
return;
|
|
@@ -266,18 +302,33 @@ class FileWatcher {
|
|
|
266
302
|
this.dirModules.set(dirPath, moduleId);
|
|
267
303
|
const entries = await this.fs.readdir(dirPath);
|
|
268
304
|
for (const entry of entries) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
this.setFileEntry(fullPath, moduleId, hash);
|
|
305
|
+
await this.exploreEntry(moduleId, path.join(dirPath, entry));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
async exploreEntry(moduleId, fullPath) {
|
|
309
|
+
try {
|
|
310
|
+
await this.addEntry(moduleId, fullPath);
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
if (!isVanishedPathError(error)) {
|
|
314
|
+
throw error;
|
|
280
315
|
}
|
|
316
|
+
this.pruneDir(fullPath);
|
|
317
|
+
this.deleteFileEntry(fullPath);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async addEntry(moduleId, fullPath) {
|
|
321
|
+
if (this.isInsideExcludedPath(fullPath)) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const stat = await this.fs.stat(fullPath);
|
|
325
|
+
if (!stat.isDirectory()) {
|
|
326
|
+
const hash = await this.hasher.hashFile(fullPath);
|
|
327
|
+
this.setFileEntry(fullPath, moduleId, hash);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (!this.excludedDirs.has(path.basename(fullPath))) {
|
|
331
|
+
await this.exploreDir(moduleId, fullPath);
|
|
281
332
|
}
|
|
282
333
|
}
|
|
283
334
|
notifyModuleChange(moduleId) {
|
|
@@ -291,7 +342,12 @@ class FileWatcher {
|
|
|
291
342
|
isExcludedPath(filePath) {
|
|
292
343
|
const normalized = path.normalize(filePath);
|
|
293
344
|
const parts = normalized.split(path.sep);
|
|
294
|
-
return parts.some((part) => this.excludedDirs.has(part))
|
|
345
|
+
return (parts.some((part) => this.excludedDirs.has(part)) ||
|
|
346
|
+
this.isInsideExcludedPath(filePath));
|
|
347
|
+
}
|
|
348
|
+
isInsideExcludedPath(filePath) {
|
|
349
|
+
const resolved = path.resolve(filePath);
|
|
350
|
+
return [...this.excludedPaths].some((excludedPath) => isInsideDir(resolved, excludedPath));
|
|
295
351
|
}
|
|
296
352
|
}
|
|
297
353
|
exports.FileWatcher = FileWatcher;
|