123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- "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.ROUTING_MODULE_EXT = exports.MODULE_EXT = void 0;
- exports.findModuleFromOptions = findModuleFromOptions;
- exports.findModule = findModule;
- exports.buildRelativePath = buildRelativePath;
- const core_1 = require("@angular-devkit/core");
- exports.MODULE_EXT = '.module.ts';
- exports.ROUTING_MODULE_EXT = '-routing.module.ts';
- /**
- * Find the module referred by a set of options passed to the schematics.
- */
- function findModuleFromOptions(host, options) {
- if (options.standalone || options.skipImport) {
- return undefined;
- }
- const moduleExt = options.moduleExt || exports.MODULE_EXT;
- const routingModuleExt = options.routingModuleExt || exports.ROUTING_MODULE_EXT;
- if (!options.module) {
- const pathToCheck = (options.path || '') + '/' + options.name;
- return (0, core_1.normalize)(findModule(host, pathToCheck, moduleExt, routingModuleExt));
- }
- else {
- const modulePath = (0, core_1.normalize)(`/${options.path}/${options.module}`);
- const componentPath = (0, core_1.normalize)(`/${options.path}/${options.name}`);
- const moduleBaseName = (0, core_1.normalize)(modulePath).split('/').pop();
- const candidateSet = new Set([(0, core_1.normalize)(options.path || '/')]);
- for (let dir = modulePath; dir != core_1.NormalizedRoot; dir = (0, core_1.dirname)(dir)) {
- candidateSet.add(dir);
- }
- for (let dir = componentPath; dir != core_1.NormalizedRoot; dir = (0, core_1.dirname)(dir)) {
- candidateSet.add(dir);
- }
- const candidatesDirs = [...candidateSet].sort((a, b) => b.length - a.length);
- for (const c of candidatesDirs) {
- const candidateFiles = ['', `${moduleBaseName}.ts`, `${moduleBaseName}${moduleExt}`].map((x) => (0, core_1.join)(c, x));
- for (const sc of candidateFiles) {
- if (host.exists(sc)) {
- return (0, core_1.normalize)(sc);
- }
- }
- }
- throw new Error(`Specified module '${options.module}' does not exist.\n` +
- `Looked in the following directories:\n ${candidatesDirs.join('\n ')}`);
- }
- }
- /**
- * Function to find the "closest" module to a generated file's path.
- */
- function findModule(host, generateDir, moduleExt = exports.MODULE_EXT, routingModuleExt = exports.ROUTING_MODULE_EXT) {
- let dir = host.getDir('/' + generateDir);
- let foundRoutingModule = false;
- while (dir) {
- const allMatches = dir.subfiles.filter((p) => p.endsWith(moduleExt));
- const filteredMatches = allMatches.filter((p) => !p.endsWith(routingModuleExt));
- foundRoutingModule = foundRoutingModule || allMatches.length !== filteredMatches.length;
- if (filteredMatches.length == 1) {
- return (0, core_1.join)(dir.path, filteredMatches[0]);
- }
- else if (filteredMatches.length > 1) {
- throw new Error(`More than one module matches. Use the '--skip-import' option to skip importing ` +
- 'the component into the closest module or use the module option to specify a module.');
- }
- dir = dir.parent;
- }
- const errorMsg = foundRoutingModule
- ? 'Could not find a non Routing NgModule.' +
- `\nModules with suffix '${routingModuleExt}' are strictly reserved for routing.` +
- `\nUse the '--skip-import' option to skip importing in NgModule.`
- : `Could not find an NgModule. Use the '--skip-import' option to skip importing in NgModule.`;
- throw new Error(errorMsg);
- }
- /**
- * Build a relative path from one file path to another file path.
- */
- function buildRelativePath(from, to) {
- from = (0, core_1.normalize)(from);
- to = (0, core_1.normalize)(to);
- // Convert to arrays.
- const fromParts = from.split('/');
- const toParts = to.split('/');
- // Remove file names (preserving destination)
- fromParts.pop();
- const toFileName = toParts.pop();
- const relativePath = (0, core_1.relative)((0, core_1.normalize)(fromParts.join('/') || '/'), (0, core_1.normalize)(toParts.join('/') || '/'));
- let pathPrefix = '';
- // Set the path prefix for same dir or child dir, parent dir starts with `..`
- if (!relativePath) {
- pathPrefix = '.';
- }
- else if (!relativePath.startsWith('.')) {
- pathPrefix = `./`;
- }
- if (pathPrefix && !pathPrefix.endsWith('/')) {
- pathPrefix += '/';
- }
- return pathPrefix + (relativePath ? relativePath + '/' : '') + toFileName;
- }
|