@flexsiteio/cli
Advanced tools
| /** | ||
| * Composer command for FlexSite CLI. | ||
| * Transforms composer.json from other platforms (Pantheon, Acquia, etc.) to FlexSite format. | ||
| */ | ||
| import { Command } from 'commander'; | ||
| export declare const composerCommand: Command; | ||
| //# sourceMappingURL=composer.d.ts.map |
| {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/commands/composer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAubpC,eAAO,MAAM,eAAe,SACqC,CAAC"} |
| "use strict"; | ||
| /** | ||
| * Composer command for FlexSite CLI. | ||
| * Transforms composer.json from other platforms (Pantheon, Acquia, etc.) to FlexSite format. | ||
| */ | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.composerCommand = void 0; | ||
| const commander_1 = require("commander"); | ||
| const chalk_1 = __importDefault(require("chalk")); | ||
| const inquirer_1 = __importDefault(require("inquirer")); | ||
| const ora_1 = __importDefault(require("ora")); | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const path_1 = __importDefault(require("path")); | ||
| /** | ||
| * Sanitize project name to be valid for Composer | ||
| * Composer package names must be lowercase alphanumeric with -_. | ||
| */ | ||
| function sanitizeProjectName(name) { | ||
| return name | ||
| .toLowerCase() | ||
| .replace(/[^a-z0-9._-]/g, '-') // Replace invalid chars with - | ||
| .replace(/^[^a-z0-9]+/, '') // Remove leading non-alphanumeric | ||
| .replace(/[^a-z0-9]+$/, '') // Remove trailing non-alphanumeric | ||
| .replace(/-+/g, '-'); // Collapse multiple dashes | ||
| } | ||
| // FlexSite required packages for performance | ||
| const FLEXSITE_PERFORMANCE_PACKAGES = { | ||
| 'flexsite/fs_performance': '^1.0', | ||
| 'drupal/redis': '^1.7', | ||
| 'drupal/purge': '^3.5', | ||
| 'drupal/varnish_purge': '^2.2', | ||
| 'drupal/ultimate_cron': '^2.0@beta', | ||
| }; | ||
| // FlexSite repository | ||
| const FLEXSITE_REPOSITORY = { | ||
| type: 'composer', | ||
| url: 'https://packages.flexsite.io/packages.json' | ||
| }; | ||
| // Drupal.org repository | ||
| const DRUPAL_REPOSITORY = { | ||
| type: 'composer', | ||
| url: 'https://packages.drupal.org/8' | ||
| }; | ||
| // Pantheon-specific packages to remove | ||
| const PANTHEON_PACKAGES = [ | ||
| 'pantheon-upstreams/upstream-configuration', | ||
| 'pantheon-systems/drupal-integrations', | ||
| ]; | ||
| // Acquia-specific packages to remove | ||
| const ACQUIA_PACKAGES = [ | ||
| 'acquia/blt', | ||
| 'acquia/blt-require-dev', | ||
| 'acquia/drupal-recommended-settings', | ||
| 'acquia/memcache-settings', | ||
| ]; | ||
| // Platform.sh specific packages to remove | ||
| const PLATFORMSH_PACKAGES = [ | ||
| 'platformsh/config-reader', | ||
| ]; | ||
| // All platform-specific packages | ||
| const PLATFORM_PACKAGES = [ | ||
| ...PANTHEON_PACKAGES, | ||
| ...ACQUIA_PACKAGES, | ||
| ...PLATFORMSH_PACKAGES, | ||
| ]; | ||
| // FlexSite recipe installer path | ||
| const RECIPE_INSTALLER_PATH = { | ||
| 'recipes/{$name}': ['type:drupal-recipe'] | ||
| }; | ||
| // Pantheon-specific installer paths to remove | ||
| const PANTHEON_INSTALLER_PATHS = [ | ||
| 'web/private/scripts/quicksilver/{$name}/' | ||
| ]; | ||
| /** | ||
| * Detect which platform the composer.json is from | ||
| */ | ||
| function detectPlatform(composer) { | ||
| if (composer.name?.includes('pantheon') || | ||
| composer.require?.['pantheon-upstreams/upstream-configuration'] || | ||
| composer.require?.['pantheon-systems/drupal-integrations']) { | ||
| return 'pantheon'; | ||
| } | ||
| if (composer.name?.includes('acquia') || | ||
| composer.require?.['acquia/blt'] || | ||
| composer.require?.['acquia/drupal-recommended-settings']) { | ||
| return 'acquia'; | ||
| } | ||
| if (composer.require?.['platformsh/config-reader']) { | ||
| return 'platformsh'; | ||
| } | ||
| if (composer.name?.includes('flexsite')) { | ||
| return 'flexsite'; | ||
| } | ||
| return 'unknown'; | ||
| } | ||
| /** | ||
| * Detect Drupal version from composer.json | ||
| */ | ||
| function detectDrupalVersion(composer) { | ||
| const coreVersion = composer.require?.['drupal/core-recommended'] || | ||
| composer.require?.['drupal/core'] || ''; | ||
| if (coreVersion.includes('^11') || coreVersion.includes('~11')) { | ||
| return 11; | ||
| } | ||
| if (coreVersion.includes('^10') || coreVersion.includes('~10')) { | ||
| return 10; | ||
| } | ||
| if (coreVersion.includes('^9') || coreVersion.includes('~9')) { | ||
| return 9; | ||
| } | ||
| return 11; // Default to latest | ||
| } | ||
| /** | ||
| * Fix composer.json for FlexSite compatibility | ||
| */ | ||
| function fixComposerJson(composer, options) { | ||
| const result = { | ||
| changes: [], | ||
| warnings: [], | ||
| removedPackages: [], | ||
| addedPackages: [], | ||
| }; | ||
| const fixed = JSON.parse(JSON.stringify(composer)); | ||
| const drupalVersion = detectDrupalVersion(composer); | ||
| const platform = detectPlatform(composer); | ||
| // 1. Update name | ||
| const projectName = options.projectName || 'my-project'; | ||
| const newName = `flexsite/${projectName}`; | ||
| if (fixed.name !== newName) { | ||
| const oldName = fixed.name || '(none)'; | ||
| fixed.name = newName; | ||
| result.changes.push(`Changed name: ${oldName} → ${fixed.name}`); | ||
| } | ||
| // 2. Update description | ||
| if (fixed.description?.toLowerCase().includes('pantheon') || | ||
| fixed.description?.toLowerCase().includes('acquia') || | ||
| fixed.description?.toLowerCase().includes('platform.sh')) { | ||
| fixed.description = `Drupal ${drupalVersion} project for FlexSite platform`; | ||
| result.changes.push('Updated description for FlexSite'); | ||
| } | ||
| // 3. Update license | ||
| if (fixed.license !== 'GPL-2.0-or-later') { | ||
| fixed.license = 'GPL-2.0-or-later'; | ||
| result.changes.push('Updated license to GPL-2.0-or-later'); | ||
| } | ||
| // 4. Fix repositories | ||
| const newRepositories = []; | ||
| // Always add Drupal.org first | ||
| newRepositories.push(DRUPAL_REPOSITORY); | ||
| // Add FlexSite repository | ||
| newRepositories.push(FLEXSITE_REPOSITORY); | ||
| // Keep any custom/path repositories that aren't platform-specific | ||
| if (fixed.repositories) { | ||
| for (const repo of fixed.repositories) { | ||
| // Skip drupal.org (we already added it) | ||
| if (repo.url === 'https://packages.drupal.org/8') | ||
| continue; | ||
| // Skip FlexSite repo (we already added it) | ||
| if (repo.url === 'https://packages.flexsite.io/packages.json') | ||
| continue; | ||
| // Skip Pantheon upstream-configuration path | ||
| if (repo.type === 'path' && repo.url === 'upstream-configuration') { | ||
| result.changes.push('Removed Pantheon upstream-configuration repository'); | ||
| continue; | ||
| } | ||
| // Keep other repositories (custom package sources, etc.) | ||
| newRepositories.push(repo); | ||
| } | ||
| } | ||
| fixed.repositories = newRepositories; | ||
| result.changes.push('Updated repositories (added FlexSite package source)'); | ||
| // 5. Remove platform-specific packages from require | ||
| if (fixed.require) { | ||
| for (const pkg of PLATFORM_PACKAGES) { | ||
| if (fixed.require[pkg]) { | ||
| delete fixed.require[pkg]; | ||
| result.removedPackages.push(pkg); | ||
| } | ||
| } | ||
| } | ||
| // 6. Remove platform-specific packages from require-dev | ||
| if (fixed['require-dev']) { | ||
| for (const pkg of PLATFORM_PACKAGES) { | ||
| if (fixed['require-dev'][pkg]) { | ||
| delete fixed['require-dev'][pkg]; | ||
| result.removedPackages.push(`${pkg} (dev)`); | ||
| } | ||
| } | ||
| } | ||
| // 7. Add FlexSite performance packages | ||
| if (!options.skipPerformance) { | ||
| for (const [pkg, version] of Object.entries(FLEXSITE_PERFORMANCE_PACKAGES)) { | ||
| if (!fixed.require?.[pkg]) { | ||
| fixed.require = fixed.require || {}; | ||
| fixed.require[pkg] = version; | ||
| result.addedPackages.push(pkg); | ||
| } | ||
| } | ||
| } | ||
| // 7b. Upgrade composer/installers to v2 (required for drupal-recipe type support) | ||
| if (fixed.require?.['composer/installers']) { | ||
| const currentVersion = fixed.require['composer/installers']; | ||
| // Check if it's v1.x (e.g., ^1.9, ~1.9, 1.x, etc.) | ||
| if (currentVersion.match(/^[\^~]?1\./)) { | ||
| fixed.require['composer/installers'] = '^2.0'; | ||
| result.changes.push('Upgraded composer/installers to ^2.0 (required for recipe support)'); | ||
| } | ||
| } | ||
| // 8. Ensure PHP requirement | ||
| if (!fixed.require?.['php']) { | ||
| fixed.require = fixed.require || {}; | ||
| fixed.require['php'] = '>=8.2'; | ||
| result.changes.push('Added PHP >=8.2 requirement'); | ||
| } | ||
| // 9. Ensure drush is present | ||
| if (!fixed.require?.['drush/drush']) { | ||
| fixed.require = fixed.require || {}; | ||
| fixed.require['drush/drush'] = '^13.6'; | ||
| result.addedPackages.push('drush/drush'); | ||
| } | ||
| // 10. Fix drupal-scaffold section | ||
| if (fixed.extra?.['drupal-scaffold']) { | ||
| const scaffold = fixed.extra['drupal-scaffold']; | ||
| // Remove Pantheon-specific allowed-packages | ||
| if (scaffold['allowed-packages']) { | ||
| const filtered = scaffold['allowed-packages'].filter((pkg) => !pkg.includes('pantheon') && !pkg.includes('acquia')); | ||
| if (filtered.length === 0) { | ||
| delete scaffold['allowed-packages']; | ||
| } | ||
| else { | ||
| scaffold['allowed-packages'] = filtered; | ||
| } | ||
| result.changes.push('Cleaned up drupal-scaffold allowed-packages'); | ||
| } | ||
| // Remove Pantheon-specific file-mapping | ||
| if (scaffold['file-mapping']) { | ||
| const newMapping = {}; | ||
| for (const [key, value] of Object.entries(scaffold['file-mapping'])) { | ||
| // Skip Pantheon-specific files | ||
| if (key.includes('pantheon') || key.includes('acquia')) { | ||
| continue; | ||
| } | ||
| newMapping[key] = value; | ||
| } | ||
| if (Object.keys(newMapping).length > 0) { | ||
| scaffold['file-mapping'] = newMapping; | ||
| } | ||
| else { | ||
| delete scaffold['file-mapping']; | ||
| } | ||
| } | ||
| // Normalize web-root | ||
| if (scaffold.locations?.['web-root']) { | ||
| scaffold.locations['web-root'] = 'web/'; | ||
| } | ||
| } | ||
| // 11. Fix installer-paths | ||
| if (fixed.extra?.['installer-paths']) { | ||
| const installerPaths = fixed.extra['installer-paths']; | ||
| // Remove Pantheon quicksilver paths | ||
| for (const pathToRemove of PANTHEON_INSTALLER_PATHS) { | ||
| if (installerPaths[pathToRemove]) { | ||
| delete installerPaths[pathToRemove]; | ||
| result.changes.push('Removed Pantheon quicksilver installer path'); | ||
| } | ||
| } | ||
| // Add recipe installer path if not present | ||
| const recipeKey = 'recipes/{$name}'; | ||
| if (!installerPaths[recipeKey]) { | ||
| installerPaths[recipeKey] = ['type:drupal-recipe']; | ||
| result.changes.push('Added recipe installer path'); | ||
| } | ||
| } | ||
| // 12. Remove Pantheon-specific autoload | ||
| if (fixed.autoload?.classmap) { | ||
| const filteredClassmap = fixed.autoload.classmap.filter((path) => !path.includes('upstream-configuration') && !path.includes('ComposerScripts')); | ||
| if (filteredClassmap.length === 0) { | ||
| delete fixed.autoload.classmap; | ||
| if (Object.keys(fixed.autoload).length === 0) { | ||
| delete fixed.autoload; | ||
| } | ||
| } | ||
| else { | ||
| fixed.autoload.classmap = filteredClassmap; | ||
| } | ||
| result.changes.push('Removed Pantheon autoload entries'); | ||
| } | ||
| // 13. Clean up scripts | ||
| if (fixed.scripts) { | ||
| const scriptsToRemove = ['pre-update-cmd', 'post-update-cmd']; | ||
| for (const script of scriptsToRemove) { | ||
| if (fixed.scripts[script]) { | ||
| const commands = Array.isArray(fixed.scripts[script]) | ||
| ? fixed.scripts[script] | ||
| : [fixed.scripts[script]]; | ||
| const filtered = commands.filter((cmd) => !cmd.includes('ComposerScripts') && | ||
| !cmd.includes('Pantheon') && | ||
| !cmd.includes('Acquia')); | ||
| if (filtered.length === 0) { | ||
| delete fixed.scripts[script]; | ||
| } | ||
| else { | ||
| fixed.scripts[script] = filtered; | ||
| } | ||
| } | ||
| } | ||
| // Add post-install-cmd for custom directories if not present | ||
| if (!fixed.scripts['post-install-cmd']) { | ||
| fixed.scripts['post-install-cmd'] = [ | ||
| 'mkdir -p web/themes/custom', | ||
| 'mkdir -p web/modules/custom' | ||
| ]; | ||
| result.changes.push('Added post-install-cmd for custom directories'); | ||
| } | ||
| } | ||
| // 14. Update config section | ||
| if (fixed.config) { | ||
| // Remove platform-specific php version pinning if it's too restrictive | ||
| if (fixed.config.platform?.php) { | ||
| // Keep it but warn if it's below 8.2 | ||
| const phpVersion = fixed.config.platform.php; | ||
| if (phpVersion.startsWith('8.0') || phpVersion.startsWith('8.1')) { | ||
| result.warnings.push(`PHP version ${phpVersion} is set in config.platform.php. FlexSite uses PHP 8.3.`); | ||
| } | ||
| } | ||
| // Ensure sort-packages is true | ||
| fixed.config['sort-packages'] = true; | ||
| // Add optimize-autoloader | ||
| fixed.config['optimize-autoloader'] = true; | ||
| // Ensure necessary plugins are allowed | ||
| const allowPlugins = fixed.config['allow-plugins'] || {}; | ||
| allowPlugins['composer/installers'] = true; | ||
| allowPlugins['drupal/core-composer-scaffold'] = true; | ||
| allowPlugins['drupal/core-project-message'] = true; | ||
| allowPlugins['php-http/discovery'] = true; | ||
| allowPlugins['tbachert/spi'] = true; | ||
| // Remove platform-specific plugins | ||
| delete allowPlugins['pantheon-systems/upstream-management']; | ||
| fixed.config['allow-plugins'] = allowPlugins; | ||
| } | ||
| // 15. Set minimum-stability | ||
| fixed['minimum-stability'] = 'dev'; | ||
| fixed['prefer-stable'] = true; | ||
| // Generate summary | ||
| if (result.removedPackages.length > 0) { | ||
| result.changes.push(`Removed ${result.removedPackages.length} platform-specific package(s)`); | ||
| } | ||
| if (result.addedPackages.length > 0) { | ||
| result.changes.push(`Added ${result.addedPackages.length} FlexSite package(s)`); | ||
| } | ||
| return { fixed, result }; | ||
| } | ||
| exports.composerCommand = new commander_1.Command('composer') | ||
| .description('Manage composer.json for FlexSite compatibility'); | ||
| exports.composerCommand | ||
| .command('fix') | ||
| .description('Transform composer.json from other platforms (Pantheon, Acquia, etc.) to FlexSite format') | ||
| .option('-f, --file <path>', 'Path to composer.json', 'composer.json') | ||
| .option('-o, --output <path>', 'Output file (default: overwrite input)') | ||
| .option('-n, --name <name>', 'Project name for FlexSite') | ||
| .option('--dry-run', 'Show changes without modifying files') | ||
| .option('--skip-performance', 'Skip adding FlexSite performance packages') | ||
| .option('--backup', 'Create a backup before modifying') | ||
| .action(async (options) => { | ||
| try { | ||
| const composerPath = path_1.default.resolve(options.file); | ||
| // Check if file exists | ||
| if (!fs_1.default.existsSync(composerPath)) { | ||
| console.error(chalk_1.default.red(`File not found: ${composerPath}`)); | ||
| process.exit(1); | ||
| } | ||
| // Read composer.json | ||
| const spinner = (0, ora_1.default)('Reading composer.json...').start(); | ||
| const content = fs_1.default.readFileSync(composerPath, 'utf-8'); | ||
| let composer; | ||
| try { | ||
| composer = JSON.parse(content); | ||
| } | ||
| catch (e) { | ||
| spinner.fail('Invalid JSON in composer.json'); | ||
| process.exit(1); | ||
| } | ||
| spinner.succeed('Read composer.json'); | ||
| // Detect platform | ||
| const platform = detectPlatform(composer); | ||
| const drupalVersion = detectDrupalVersion(composer); | ||
| console.log(chalk_1.default.cyan(`\nDetected platform: ${chalk_1.default.bold(platform.toUpperCase())}`)); | ||
| console.log(chalk_1.default.cyan(`Drupal version: ${chalk_1.default.bold(drupalVersion)}`)); | ||
| if (platform === 'flexsite') { | ||
| console.log(chalk_1.default.green('\nThis composer.json is already configured for FlexSite!')); | ||
| const { continueAnyway } = await inquirer_1.default.prompt([ | ||
| { | ||
| type: 'confirm', | ||
| name: 'continueAnyway', | ||
| message: 'Do you want to run the fix anyway?', | ||
| default: false | ||
| } | ||
| ]); | ||
| if (!continueAnyway) { | ||
| process.exit(0); | ||
| } | ||
| } | ||
| // Get project name if not provided | ||
| let projectName = options.name; | ||
| if (!projectName) { | ||
| // Try to extract from current name or directory | ||
| const dirName = path_1.default.basename(path_1.default.dirname(composerPath)); | ||
| const currentName = composer.name?.split('/').pop() || dirName; | ||
| const { name } = await inquirer_1.default.prompt([ | ||
| { | ||
| type: 'input', | ||
| name: 'name', | ||
| message: 'Project name for FlexSite:', | ||
| default: sanitizeProjectName(currentName), | ||
| validate: (input) => { | ||
| const sanitized = sanitizeProjectName(input); | ||
| if (!sanitized) { | ||
| return 'Project name must contain at least one valid character (a-z, 0-9)'; | ||
| } | ||
| if (!/^[a-z0-9]([_.-]?[a-z0-9]+)*$/.test(sanitized)) { | ||
| return 'Invalid project name. Use only lowercase letters, numbers, and -_.'; | ||
| } | ||
| return true; | ||
| } | ||
| } | ||
| ]); | ||
| // Always sanitize the input | ||
| projectName = sanitizeProjectName(name); | ||
| } | ||
| else { | ||
| // Sanitize provided name | ||
| projectName = sanitizeProjectName(projectName); | ||
| } | ||
| // Fix composer.json | ||
| const fixSpinner = (0, ora_1.default)('Analyzing composer.json...').start(); | ||
| const { fixed, result } = fixComposerJson(composer, { | ||
| projectName, | ||
| dryRun: options.dryRun, | ||
| skipPerformance: options.skipPerformance | ||
| }); | ||
| fixSpinner.succeed('Analysis complete'); | ||
| // Show changes | ||
| console.log(chalk_1.default.cyan('\n--- Changes ---')); | ||
| if (result.changes.length === 0) { | ||
| console.log(chalk_1.default.dim(' No changes needed')); | ||
| } | ||
| else { | ||
| for (const change of result.changes) { | ||
| console.log(chalk_1.default.green(` ✓ ${change}`)); | ||
| } | ||
| } | ||
| if (result.removedPackages.length > 0) { | ||
| console.log(chalk_1.default.cyan('\n--- Removed Packages ---')); | ||
| for (const pkg of result.removedPackages) { | ||
| console.log(chalk_1.default.yellow(` - ${pkg}`)); | ||
| } | ||
| } | ||
| if (result.addedPackages.length > 0) { | ||
| console.log(chalk_1.default.cyan('\n--- Added Packages ---')); | ||
| for (const pkg of result.addedPackages) { | ||
| console.log(chalk_1.default.green(` + ${pkg}`)); | ||
| } | ||
| } | ||
| if (result.warnings.length > 0) { | ||
| console.log(chalk_1.default.cyan('\n--- Warnings ---')); | ||
| for (const warning of result.warnings) { | ||
| console.log(chalk_1.default.yellow(` ⚠ ${warning}`)); | ||
| } | ||
| } | ||
| // Dry run - don't write | ||
| if (options.dryRun) { | ||
| console.log(chalk_1.default.dim('\n(Dry run - no files modified)')); | ||
| console.log(chalk_1.default.cyan('\nPreview of fixed composer.json:')); | ||
| console.log(JSON.stringify(fixed, null, 4)); | ||
| process.exit(0); | ||
| } | ||
| // Confirm before writing | ||
| const { confirm } = await inquirer_1.default.prompt([ | ||
| { | ||
| type: 'confirm', | ||
| name: 'confirm', | ||
| message: 'Apply these changes?', | ||
| default: true | ||
| } | ||
| ]); | ||
| if (!confirm) { | ||
| console.log(chalk_1.default.dim('Cancelled')); | ||
| process.exit(0); | ||
| } | ||
| // Create backup if requested | ||
| if (options.backup) { | ||
| const backupPath = `${composerPath}.backup.${Date.now()}`; | ||
| fs_1.default.writeFileSync(backupPath, content); | ||
| console.log(chalk_1.default.dim(`Backup created: ${backupPath}`)); | ||
| } | ||
| // Write fixed composer.json | ||
| const outputPath = options.output ? path_1.default.resolve(options.output) : composerPath; | ||
| fs_1.default.writeFileSync(outputPath, JSON.stringify(fixed, null, 4) + '\n'); | ||
| console.log(chalk_1.default.green(`\n✓ Updated ${outputPath}`)); | ||
| // Post-fix instructions | ||
| console.log(chalk_1.default.cyan('\n--- Next Steps ---')); | ||
| console.log(' 1. Review the changes to composer.json'); | ||
| console.log(' 2. Run: ' + chalk_1.default.bold('composer install')); | ||
| console.log(' 3. If you have upstream-configuration directory, you can delete it'); | ||
| console.log(' 4. Commit your changes to git'); | ||
| if (platform === 'pantheon') { | ||
| console.log(chalk_1.default.yellow('\n--- Pantheon-specific cleanup ---')); | ||
| console.log(' • Delete: upstream-configuration/'); | ||
| console.log(' • Delete: pantheon.yml (if exists)'); | ||
| console.log(' • Delete: pantheon.upstream.yml (if exists)'); | ||
| } | ||
| } | ||
| catch (error) { | ||
| if (error instanceof Error) { | ||
| console.error(chalk_1.default.red(`\nError: ${error.message}`)); | ||
| } | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| exports.composerCommand | ||
| .command('check') | ||
| .description('Check composer.json for FlexSite compatibility') | ||
| .option('-f, --file <path>', 'Path to composer.json', 'composer.json') | ||
| .action(async (options) => { | ||
| try { | ||
| const composerPath = path_1.default.resolve(options.file); | ||
| if (!fs_1.default.existsSync(composerPath)) { | ||
| console.error(chalk_1.default.red(`File not found: ${composerPath}`)); | ||
| process.exit(1); | ||
| } | ||
| const content = fs_1.default.readFileSync(composerPath, 'utf-8'); | ||
| const composer = JSON.parse(content); | ||
| const platform = detectPlatform(composer); | ||
| const drupalVersion = detectDrupalVersion(composer); | ||
| console.log(chalk_1.default.cyan('=== Composer.json Analysis ===\n')); | ||
| console.log(`Platform: ${chalk_1.default.bold(platform.toUpperCase())}`); | ||
| console.log(`Drupal version: ${chalk_1.default.bold(drupalVersion)}`); | ||
| console.log(`Name: ${chalk_1.default.bold(composer.name || 'Not set')}`); | ||
| // Check FlexSite compatibility | ||
| const issues = []; | ||
| const good = []; | ||
| // Check repositories | ||
| const hasFlexSiteRepo = composer.repositories?.some(r => r.url === 'https://packages.flexsite.io/packages.json'); | ||
| if (hasFlexSiteRepo) { | ||
| good.push('FlexSite repository configured'); | ||
| } | ||
| else { | ||
| issues.push('Missing FlexSite repository (packages.flexsite.io)'); | ||
| } | ||
| // Check performance packages | ||
| const hasPerformancePackage = composer.require?.['flexsite/fs_performance']; | ||
| if (hasPerformancePackage) { | ||
| good.push('FlexSite performance package installed'); | ||
| } | ||
| else { | ||
| issues.push('Missing flexsite/fs_performance package'); | ||
| } | ||
| // Check Redis | ||
| const hasRedis = composer.require?.['drupal/redis']; | ||
| if (hasRedis) { | ||
| good.push('Redis module configured'); | ||
| } | ||
| else { | ||
| issues.push('Missing drupal/redis package'); | ||
| } | ||
| // Check recipe path | ||
| const hasRecipePath = composer.extra?.['installer-paths']?.['recipes/{$name}']; | ||
| if (hasRecipePath) { | ||
| good.push('Recipe installer path configured'); | ||
| } | ||
| else { | ||
| issues.push('Missing recipe installer path'); | ||
| } | ||
| // Check for platform-specific packages | ||
| const platformPackages = []; | ||
| for (const pkg of PLATFORM_PACKAGES) { | ||
| if (composer.require?.[pkg] || composer['require-dev']?.[pkg]) { | ||
| platformPackages.push(pkg); | ||
| } | ||
| } | ||
| if (platformPackages.length > 0) { | ||
| issues.push(`Platform-specific packages found: ${platformPackages.join(', ')}`); | ||
| } | ||
| else { | ||
| good.push('No platform-specific packages'); | ||
| } | ||
| // Print results | ||
| if (good.length > 0) { | ||
| console.log(chalk_1.default.green('\n✓ Good:')); | ||
| for (const item of good) { | ||
| console.log(chalk_1.default.green(` • ${item}`)); | ||
| } | ||
| } | ||
| if (issues.length > 0) { | ||
| console.log(chalk_1.default.yellow('\n⚠ Issues:')); | ||
| for (const item of issues) { | ||
| console.log(chalk_1.default.yellow(` • ${item}`)); | ||
| } | ||
| console.log(chalk_1.default.cyan(`\nRun ${chalk_1.default.bold('flexsite composer fix')} to resolve these issues.`)); | ||
| } | ||
| else { | ||
| console.log(chalk_1.default.green('\n✓ composer.json is fully compatible with FlexSite!')); | ||
| } | ||
| } | ||
| catch (error) { | ||
| if (error instanceof Error) { | ||
| console.error(chalk_1.default.red(`\nError: ${error.message}`)); | ||
| } | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| //# sourceMappingURL=composer.js.map |
| {"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/commands/composer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,yCAAoC;AACpC,kDAA0B;AAC1B,wDAAgC;AAChC,8CAAsB;AACtB,4CAAoB;AACpB,gDAAwB;AAExB;;;GAGG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAE,+BAA+B;SAC9D,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAM,kCAAkC;SAClE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAM,mCAAmC;SACnE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAY,2BAA2B;AAChE,CAAC;AAED,6CAA6C;AAC7C,MAAM,6BAA6B,GAA2B;IAC5D,yBAAyB,EAAE,MAAM;IACjC,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,MAAM;IACtB,sBAAsB,EAAE,MAAM;IAC9B,sBAAsB,EAAE,WAAW;CACpC,CAAC;AAEF,sBAAsB;AACtB,MAAM,mBAAmB,GAAG;IAC1B,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,4CAA4C;CAClD,CAAC;AAEF,wBAAwB;AACxB,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,+BAA+B;CACrC,CAAC;AAEF,uCAAuC;AACvC,MAAM,iBAAiB,GAAG;IACxB,2CAA2C;IAC3C,sCAAsC;CACvC,CAAC;AAEF,qCAAqC;AACrC,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,wBAAwB;IACxB,oCAAoC;IACpC,0BAA0B;CAC3B,CAAC;AAEF,0CAA0C;AAC1C,MAAM,mBAAmB,GAAG;IAC1B,0BAA0B;CAC3B,CAAC;AAEF,iCAAiC;AACjC,MAAM,iBAAiB,GAAG;IACxB,GAAG,iBAAiB;IACpB,GAAG,eAAe;IAClB,GAAG,mBAAmB;CACvB,CAAC;AAEF,iCAAiC;AACjC,MAAM,qBAAqB,GAAG;IAC5B,iBAAiB,EAAE,CAAC,oBAAoB,CAAC;CAC1C,CAAC;AAEF,8CAA8C;AAC9C,MAAM,wBAAwB,GAAG;IAC/B,0CAA0C;CAC3C,CAAC;AAiCF;;GAEG;AACH,SAAS,cAAc,CAAC,QAAsB;IAC5C,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;QACnC,QAAQ,CAAC,OAAO,EAAE,CAAC,2CAA2C,CAAC;QAC/D,QAAQ,CAAC,OAAO,EAAE,CAAC,sCAAsC,CAAC,EAAE,CAAC;QAC/D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC;QAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,oCAAoC,CAAC,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACnD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,QAAsB;IACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,yBAAyB,CAAC;QAC7C,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAE5D,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,EAAE,CAAC,CAAC,oBAAoB;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAsB,EAAE,OAIhD;IACC,MAAM,MAAM,GAAc;QACxB,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,EAAE;KAClB,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAiB,CAAC;IACnE,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE1C,iBAAiB;IACjB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC;IACxD,MAAM,OAAO,GAAG,YAAY,WAAW,EAAE,CAAC;IAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;QACvC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrD,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACnD,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,KAAK,CAAC,WAAW,GAAG,UAAU,aAAa,gCAAgC,CAAC;QAC5E,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC1D,CAAC;IAED,oBAAoB;IACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACzC,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC7D,CAAC;IAED,sBAAsB;IACtB,MAAM,eAAe,GAA8D,EAAE,CAAC;IAEtF,8BAA8B;IAC9B,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAExC,0BAA0B;IAC1B,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE1C,kEAAkE;IAClE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACtC,wCAAwC;YACxC,IAAI,IAAI,CAAC,GAAG,KAAK,+BAA+B;gBAAE,SAAS;YAE3D,2CAA2C;YAC3C,IAAI,IAAI,CAAC,GAAG,KAAK,4CAA4C;gBAAE,SAAS;YAExE,4CAA4C;YAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,wBAAwB,EAAE,CAAC;gBAClE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;gBAC1E,SAAS;YACX,CAAC;YAED,yDAAyD;YACzD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC;IACrC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IAE5E,oDAAoD;IACpD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBACpC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBAC7B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC5D,mDAAmD;QACnD,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACrD,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEhD,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAClD,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACtE,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;YAC1C,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACrE,CAAC;QAED,wCAAwC;QACxC,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAwB,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;gBACpE,+BAA+B;gBAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvD,SAAS;gBACX,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,QAAQ,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEtD,oCAAoC;QACpC,KAAK,MAAM,YAAY,IAAI,wBAAwB,EAAE,CAAC;YACpD,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,OAAO,cAAc,CAAC,YAAY,CAAC,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,SAAS,GAAG,iBAAiB,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CACrD,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAChG,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC,QAAQ,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QAC7C,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC3D,CAAC;IAED,uBAAuB;IACvB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,eAAe,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACnD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;oBACvB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAE5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAC/C,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;oBAChC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACzB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxB,CAAC;gBAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG;gBAClC,4BAA4B;gBAC5B,6BAA6B;aAC9B,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,uEAAuE;QACvE,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;YAC/B,qCAAqC;YACrC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,UAAU,wDAAwD,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;QAErC,0BAA0B;QAC1B,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;QAE3C,uCAAuC;QACvC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACzD,YAAY,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;QAC3C,YAAY,CAAC,+BAA+B,CAAC,GAAG,IAAI,CAAC;QACrD,YAAY,CAAC,6BAA6B,CAAC,GAAG,IAAI,CAAC;QACnD,YAAY,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;QAC1C,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QAEpC,mCAAmC;QACnC,OAAO,YAAY,CAAC,sCAAsC,CAAC,CAAC;QAE5D,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;IAC/C,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC;IACnC,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAE9B,mBAAmB;IACnB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,eAAe,CAAC,MAAM,+BAA+B,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,aAAa,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAEY,QAAA,eAAe,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,iDAAiD,CAAC,CAAC;AAElE,uBAAe;KACZ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,0FAA0F,CAAC;KACvG,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,eAAe,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;KACvE,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;KACxD,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC3D,MAAM,CAAC,oBAAoB,EAAE,2CAA2C,CAAC;KACzE,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;KACtD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEhD,uBAAuB;QACvB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,qBAAqB;QACrB,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,QAAsB,CAAC;QAE3B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAEtC,kBAAkB;QAClB,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAExE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC;YAErF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBAC/C;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,oCAAoC;oBAC7C,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,gDAAgD;YAChD,MAAM,OAAO,GAAG,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;YAE/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACrC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,4BAA4B;oBACrC,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC;oBACzC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC1B,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;wBAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;4BACf,OAAO,mEAAmE,CAAC;wBAC7E,CAAC;wBACD,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;4BACpD,OAAO,oEAAoE,CAAC;wBAC9E,CAAC;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,4BAA4B;YAC5B,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAA,aAAG,EAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE;YAClD,WAAW;YACX,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAExC,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAE7C,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC9C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,yBAAyB;QACzB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,GAAG,YAAY,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1D,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,4BAA4B;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAChF,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC,CAAC;QAEtD,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAE/C,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,uBAAe;KACZ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,eAAe,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,aAAa,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QAE/D,+BAA+B;QAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,qBAAqB;QACrB,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,4CAA4C,CAC5D,CAAC;QACF,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACpE,CAAC;QAED,6BAA6B;QAC7B,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,yBAAyB,CAAC,CAAC;QAC5E,IAAI,qBAAqB,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;QAED,cAAc;QACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAED,oBAAoB;QACpB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAC/E,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAED,uCAAuC;QACvC,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,qCAAqC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACtC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACnG,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;QACnF,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"} |
@@ -14,2 +14,3 @@ #!/usr/bin/env node | ||
| const config_js_1 = require("../commands/config.js"); | ||
| const composer_js_1 = require("../commands/composer.js"); | ||
| // Version is managed in package.json | ||
@@ -28,2 +29,3 @@ const VERSION = '1.0.2'; | ||
| program.addCommand(config_js_1.configCommand); | ||
| program.addCommand(composer_js_1.composerCommand); | ||
| // Parse arguments | ||
@@ -30,0 +32,0 @@ program.parse(process.argv); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"flexsite.js","sourceRoot":"","sources":["../../src/bin/flexsite.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,iDAAkD;AAClD,6CAA8C;AAC9C,mDAAoD;AACpD,iDAAkD;AAClD,qDAAsD;AAEtD,qCAAqC;AACrC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,iBAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,uBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC;AAElC,kBAAkB;AAClB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"} | ||
| {"version":3,"file":"flexsite.js","sourceRoot":"","sources":["../../src/bin/flexsite.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,iDAAkD;AAClD,6CAA8C;AAC9C,mDAAoD;AACpD,iDAAkD;AAClD,qDAAsD;AACtD,yDAA0D;AAE1D,qCAAqC;AACrC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,iBAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,uBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,6BAAe,CAAC,CAAC;AAEpC,kBAAkB;AAClB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"} |
+1
-1
| { | ||
| "name": "@flexsiteio/cli", | ||
| "version": "1.0.2", | ||
| "version": "1.0.3", | ||
| "description": "FlexSite CLI - Command-line tool for managing FlexSite projects", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
+45
-0
@@ -107,2 +107,45 @@ # FlexSite CLI | ||
| ### Composer Migration | ||
| Transform `composer.json` from other platforms (Pantheon, Acquia, Platform.sh) to FlexSite format. | ||
| ```bash | ||
| # Check composer.json for FlexSite compatibility | ||
| flexsite composer check | ||
| # Fix composer.json for FlexSite (interactive) | ||
| flexsite composer fix | ||
| # Fix with project name specified | ||
| flexsite composer fix --name my-project | ||
| # Preview changes without modifying files | ||
| flexsite composer fix --dry-run | ||
| # Create backup before modifying | ||
| flexsite composer fix --backup | ||
| # Skip adding performance packages | ||
| flexsite composer fix --skip-performance | ||
| # Specify custom file path | ||
| flexsite composer fix -f path/to/composer.json | ||
| ``` | ||
| **What `composer fix` does:** | ||
| | Change | Description | | ||
| |--------|-------------| | ||
| | Name | Updates to `flexsite/{project-name}` | | ||
| | Repositories | Adds FlexSite package repository, removes platform-specific paths | | ||
| | Packages | Removes Pantheon/Acquia packages, adds `flexsite/fs_performance`, `drupal/redis`, `drupal/purge`, `drupal/varnish_purge` | | ||
| | Installer paths | Adds `recipes/{$name}` for Drupal recipes, removes Quicksilver | | ||
| | Scaffold | Removes platform-specific file mappings | | ||
| | Scripts | Removes platform-specific composer scripts | | ||
| **Supported platforms:** | ||
| - Pantheon (`pantheon-upstreams/drupal-composer-managed`) | ||
| - Acquia (`acquia/blt`) | ||
| - Platform.sh (`platformsh/config-reader`) | ||
| ## Local Environment Support | ||
@@ -165,4 +208,6 @@ | ||
| > **Note:** The `flexsite composer` commands work locally and do not require authentication or any token scopes. | ||
| ## License | ||
| MIT |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
52
4%2687
30.12%212
26.95%193317
-94.01%10
11.11%