UNPKG

ng-upgrade-orchestrator

Version:

Enterprise-grade Angular Multi-Version Upgrade Orchestrator with automatic npm installation, comprehensive dependency management, and seamless integration of all 9 official Angular migrations. Safely migrate Angular applications across multiple major vers

171 lines 6.29 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.SSRDetector = void 0; const fs = __importStar(require("fs-extra")); const path = __importStar(require("path")); class SSRDetector { /** * Detect if the application is configured for Server-Side Rendering */ static async isSSRApplication(projectPath) { // Check for various SSR indicators const indicators = [ await this.hasServerMain(projectPath), await this.hasSSRConfiguration(projectPath), await this.hasSSRBuildTarget(projectPath), await this.hasSSRDependencies(projectPath), await this.hasSSRFiles(projectPath) ]; // Return true if any SSR indicator is found return indicators.some(indicator => indicator); } /** * Check for main.server.ts file */ static async hasServerMain(projectPath) { const serverMainPaths = [ path.join(projectPath, 'src/main.server.ts'), path.join(projectPath, 'src/server/main.ts'), path.join(projectPath, 'server.ts') ]; for (const serverPath of serverMainPaths) { if (await fs.pathExists(serverPath)) { return true; } } return false; } /** * Check for SSR configuration in angular.json */ static async hasSSRConfiguration(projectPath) { const angularJsonPath = path.join(projectPath, 'angular.json'); if (await fs.pathExists(angularJsonPath)) { try { const angularJson = await fs.readJson(angularJsonPath); // Check for server build configuration for (const projectName of Object.keys(angularJson.projects || {})) { const project = angularJson.projects[projectName]; if (project.architect?.server || project.architect?.['build-ssr'] || project.architect?.prerender) { return true; } } } catch (error) { // Ignore JSON parsing errors } } return false; } /** * Check for server build target in angular.json */ static async hasSSRBuildTarget(projectPath) { const angularJsonPath = path.join(projectPath, 'angular.json'); if (await fs.pathExists(angularJsonPath)) { try { const content = await fs.readFile(angularJsonPath, 'utf-8'); return content.includes('@nguniversal/builders') || content.includes('server') || content.includes('prerender'); } catch (error) { // Ignore file reading errors } } return false; } /** * Check for SSR-related dependencies */ static async hasSSRDependencies(projectPath) { const packageJsonPath = path.join(projectPath, 'package.json'); if (await fs.pathExists(packageJsonPath)) { try { const packageJson = await fs.readJson(packageJsonPath); const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies }; const ssrPackages = [ '@nguniversal/express-engine', '@nguniversal/builders', '@angular/platform-server', '@angular/ssr' ]; return ssrPackages.some(pkg => dependencies[pkg]); } catch (error) { // Ignore JSON parsing errors } } return false; } /** * Check for SSR-related files */ static async hasSSRFiles(projectPath) { const ssrFiles = [ path.join(projectPath, 'server.ts'), path.join(projectPath, 'webpack.server.config.js'), path.join(projectPath, 'src/app/app.server.module.ts'), path.join(projectPath, 'prerender.js') ]; for (const filePath of ssrFiles) { if (await fs.pathExists(filePath)) { return true; } } return false; } /** * Check if main.ts already has SSR-related imports */ static async hasSSRImports(mainTsPath) { if (!await fs.pathExists(mainTsPath)) { return false; } try { const content = await fs.readFile(mainTsPath, 'utf-8'); return content.includes('provideClientHydration') || content.includes('@angular/platform-server') || content.includes('withEventReplay') || content.includes('withIncrementalHydration'); } catch (error) { return false; } } } exports.SSRDetector = SSRDetector; //# sourceMappingURL=SSRDetector.js.map