UNPKG

@angular/build

Version:

Official build system for Angular

83 lines 3 kB
"use strict"; /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ Object.defineProperty(exports, "__esModule", { value: true }); exports.DependencyChecker = exports.MissingDependenciesError = void 0; const node_module_1 = require("node:module"); /** * A custom error class to represent missing dependency errors. * This is used to avoid printing a stack trace for this expected error. */ class MissingDependenciesError extends Error { constructor(message) { super(message); this.name = 'MissingDependenciesError'; } } exports.MissingDependenciesError = MissingDependenciesError; class DependencyChecker { resolver; missingDependencies = new Set(); constructor(projectSourceRoot) { this.resolver = (0, node_module_1.createRequire)(projectSourceRoot + '/').resolve; } /** * Checks if a package is installed. * @param packageName The name of the package to check. * @returns True if the package is found, false otherwise. */ isInstalled(packageName) { try { this.resolver(packageName); return true; } catch { return false; } } /** * Verifies that a package is installed and adds it to a list of missing * dependencies if it is not. * @param packageName The name of the package to check. */ check(packageName) { if (!this.isInstalled(packageName)) { this.missingDependencies.add(packageName); } } /** * Verifies that at least one of a list of packages is installed. If none are * installed, a custom error message is added to the list of errors. * @param packageNames An array of package names to check. * @param customErrorMessage The error message to use if none of the packages are found. */ checkAny(packageNames, customErrorMessage) { if (packageNames.every((name) => !this.isInstalled(name))) { // This is a custom error, so we add it directly. // Using a Set avoids duplicate custom messages. this.missingDependencies.add(customErrorMessage); } } /** * Throws a `MissingDependenciesError` if any dependencies were found to be missing. * The error message is a formatted list of all missing packages. */ report() { if (this.missingDependencies.size === 0) { return; } let message = 'The following packages are required but were not found:\n'; for (const name of this.missingDependencies) { message += ` - ${name}\n`; } message += 'Please install the missing packages and rerun the test command.'; throw new MissingDependenciesError(message); } } exports.DependencyChecker = DependencyChecker; //# sourceMappingURL=dependency-checker.js.map