@flexsiteio/cli 1.0.1 → 1.0.3

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/README.md CHANGED
@@ -104,6 +104,49 @@ flexsite config set env <envId>
104
104
  flexsite config path
105
105
  ```
106
106
 
107
+ ### Composer Migration
108
+
109
+ Transform `composer.json` from other platforms (Pantheon, Acquia, Platform.sh) to FlexSite format.
110
+
111
+ ```bash
112
+ # Check composer.json for FlexSite compatibility
113
+ flexsite composer check
114
+
115
+ # Fix composer.json for FlexSite (interactive)
116
+ flexsite composer fix
117
+
118
+ # Fix with project name specified
119
+ flexsite composer fix --name my-project
120
+
121
+ # Preview changes without modifying files
122
+ flexsite composer fix --dry-run
123
+
124
+ # Create backup before modifying
125
+ flexsite composer fix --backup
126
+
127
+ # Skip adding performance packages
128
+ flexsite composer fix --skip-performance
129
+
130
+ # Specify custom file path
131
+ flexsite composer fix -f path/to/composer.json
132
+ ```
133
+
134
+ **What `composer fix` does:**
135
+
136
+ | Change | Description |
137
+ |--------|-------------|
138
+ | Name | Updates to `flexsite/{project-name}` |
139
+ | Repositories | Adds FlexSite package repository, removes platform-specific paths |
140
+ | Packages | Removes Pantheon/Acquia packages, adds `flexsite/fs_performance`, `drupal/redis`, `drupal/purge`, `drupal/varnish_purge` |
141
+ | Installer paths | Adds `recipes/{$name}` for Drupal recipes, removes Quicksilver |
142
+ | Scaffold | Removes platform-specific file mappings |
143
+ | Scripts | Removes platform-specific composer scripts |
144
+
145
+ **Supported platforms:**
146
+ - Pantheon (`pantheon-upstreams/drupal-composer-managed`)
147
+ - Acquia (`acquia/blt`)
148
+ - Platform.sh (`platformsh/config-reader`)
149
+
107
150
  ## Local Environment Support
108
151
 
109
152
  The CLI automatically detects Lando and DDEV environments and uses the appropriate commands for importing databases and files.
@@ -161,6 +204,8 @@ When creating a personal access token, you can limit its permissions:
161
204
  | `projects:read` | List projects |
162
205
  | `environments:read` | List environments |
163
206
 
207
+ > **Note:** The `flexsite composer` commands work locally and do not require authentication or any token scopes.
208
+
164
209
  ## License
165
210
 
166
211
  MIT
@@ -11,17 +11,21 @@ const db_js_1 = require("../commands/db.js");
11
11
  const files_js_1 = require("../commands/files.js");
12
12
  const sync_js_1 = require("../commands/sync.js");
13
13
  const config_js_1 = require("../commands/config.js");
14
+ const composer_js_1 = require("../commands/composer.js");
15
+ // Version is managed in package.json
16
+ const VERSION = '1.0.2';
14
17
  const program = new commander_1.Command();
15
18
  program
16
19
  .name('flexsite')
17
20
  .description('FlexSite CLI - Manage your FlexSite projects from the command line')
18
- .version('1.0.0');
21
+ .version(VERSION);
19
22
  // Register commands
20
23
  program.addCommand(auth_js_1.authCommand);
21
24
  program.addCommand(db_js_1.dbCommand);
22
25
  program.addCommand(files_js_1.filesCommand);
23
26
  program.addCommand(sync_js_1.syncCommand);
24
27
  program.addCommand(config_js_1.configCommand);
28
+ program.addCommand(composer_js_1.composerCommand);
25
29
  // Parse arguments
26
30
  program.parse(process.argv);
27
31
  // Show help if no command provided
@@ -1 +1 @@
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,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"}
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;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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Composer command for FlexSite CLI.
3
+ * Transforms composer.json from other platforms (Pantheon, Acquia, etc.) to FlexSite format.
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const composerCommand: Command;
7
+ //# sourceMappingURL=composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"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"}
@@ -0,0 +1,615 @@
1
+ "use strict";
2
+ /**
3
+ * Composer command for FlexSite CLI.
4
+ * Transforms composer.json from other platforms (Pantheon, Acquia, etc.) to FlexSite format.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.composerCommand = void 0;
11
+ const commander_1 = require("commander");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const inquirer_1 = __importDefault(require("inquirer"));
14
+ const ora_1 = __importDefault(require("ora"));
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const path_1 = __importDefault(require("path"));
17
+ /**
18
+ * Sanitize project name to be valid for Composer
19
+ * Composer package names must be lowercase alphanumeric with -_.
20
+ */
21
+ function sanitizeProjectName(name) {
22
+ return name
23
+ .toLowerCase()
24
+ .replace(/[^a-z0-9._-]/g, '-') // Replace invalid chars with -
25
+ .replace(/^[^a-z0-9]+/, '') // Remove leading non-alphanumeric
26
+ .replace(/[^a-z0-9]+$/, '') // Remove trailing non-alphanumeric
27
+ .replace(/-+/g, '-'); // Collapse multiple dashes
28
+ }
29
+ // FlexSite required packages for performance
30
+ const FLEXSITE_PERFORMANCE_PACKAGES = {
31
+ 'flexsite/fs_performance': '^1.0',
32
+ 'drupal/redis': '^1.7',
33
+ 'drupal/purge': '^3.5',
34
+ 'drupal/varnish_purge': '^2.2',
35
+ 'drupal/ultimate_cron': '^2.0@beta',
36
+ };
37
+ // FlexSite repository
38
+ const FLEXSITE_REPOSITORY = {
39
+ type: 'composer',
40
+ url: 'https://packages.flexsite.io/packages.json'
41
+ };
42
+ // Drupal.org repository
43
+ const DRUPAL_REPOSITORY = {
44
+ type: 'composer',
45
+ url: 'https://packages.drupal.org/8'
46
+ };
47
+ // Pantheon-specific packages to remove
48
+ const PANTHEON_PACKAGES = [
49
+ 'pantheon-upstreams/upstream-configuration',
50
+ 'pantheon-systems/drupal-integrations',
51
+ ];
52
+ // Acquia-specific packages to remove
53
+ const ACQUIA_PACKAGES = [
54
+ 'acquia/blt',
55
+ 'acquia/blt-require-dev',
56
+ 'acquia/drupal-recommended-settings',
57
+ 'acquia/memcache-settings',
58
+ ];
59
+ // Platform.sh specific packages to remove
60
+ const PLATFORMSH_PACKAGES = [
61
+ 'platformsh/config-reader',
62
+ ];
63
+ // All platform-specific packages
64
+ const PLATFORM_PACKAGES = [
65
+ ...PANTHEON_PACKAGES,
66
+ ...ACQUIA_PACKAGES,
67
+ ...PLATFORMSH_PACKAGES,
68
+ ];
69
+ // FlexSite recipe installer path
70
+ const RECIPE_INSTALLER_PATH = {
71
+ 'recipes/{$name}': ['type:drupal-recipe']
72
+ };
73
+ // Pantheon-specific installer paths to remove
74
+ const PANTHEON_INSTALLER_PATHS = [
75
+ 'web/private/scripts/quicksilver/{$name}/'
76
+ ];
77
+ /**
78
+ * Detect which platform the composer.json is from
79
+ */
80
+ function detectPlatform(composer) {
81
+ if (composer.name?.includes('pantheon') ||
82
+ composer.require?.['pantheon-upstreams/upstream-configuration'] ||
83
+ composer.require?.['pantheon-systems/drupal-integrations']) {
84
+ return 'pantheon';
85
+ }
86
+ if (composer.name?.includes('acquia') ||
87
+ composer.require?.['acquia/blt'] ||
88
+ composer.require?.['acquia/drupal-recommended-settings']) {
89
+ return 'acquia';
90
+ }
91
+ if (composer.require?.['platformsh/config-reader']) {
92
+ return 'platformsh';
93
+ }
94
+ if (composer.name?.includes('flexsite')) {
95
+ return 'flexsite';
96
+ }
97
+ return 'unknown';
98
+ }
99
+ /**
100
+ * Detect Drupal version from composer.json
101
+ */
102
+ function detectDrupalVersion(composer) {
103
+ const coreVersion = composer.require?.['drupal/core-recommended'] ||
104
+ composer.require?.['drupal/core'] || '';
105
+ if (coreVersion.includes('^11') || coreVersion.includes('~11')) {
106
+ return 11;
107
+ }
108
+ if (coreVersion.includes('^10') || coreVersion.includes('~10')) {
109
+ return 10;
110
+ }
111
+ if (coreVersion.includes('^9') || coreVersion.includes('~9')) {
112
+ return 9;
113
+ }
114
+ return 11; // Default to latest
115
+ }
116
+ /**
117
+ * Fix composer.json for FlexSite compatibility
118
+ */
119
+ function fixComposerJson(composer, options) {
120
+ const result = {
121
+ changes: [],
122
+ warnings: [],
123
+ removedPackages: [],
124
+ addedPackages: [],
125
+ };
126
+ const fixed = JSON.parse(JSON.stringify(composer));
127
+ const drupalVersion = detectDrupalVersion(composer);
128
+ const platform = detectPlatform(composer);
129
+ // 1. Update name
130
+ const projectName = options.projectName || 'my-project';
131
+ const newName = `flexsite/${projectName}`;
132
+ if (fixed.name !== newName) {
133
+ const oldName = fixed.name || '(none)';
134
+ fixed.name = newName;
135
+ result.changes.push(`Changed name: ${oldName} → ${fixed.name}`);
136
+ }
137
+ // 2. Update description
138
+ if (fixed.description?.toLowerCase().includes('pantheon') ||
139
+ fixed.description?.toLowerCase().includes('acquia') ||
140
+ fixed.description?.toLowerCase().includes('platform.sh')) {
141
+ fixed.description = `Drupal ${drupalVersion} project for FlexSite platform`;
142
+ result.changes.push('Updated description for FlexSite');
143
+ }
144
+ // 3. Update license
145
+ if (fixed.license !== 'GPL-2.0-or-later') {
146
+ fixed.license = 'GPL-2.0-or-later';
147
+ result.changes.push('Updated license to GPL-2.0-or-later');
148
+ }
149
+ // 4. Fix repositories
150
+ const newRepositories = [];
151
+ // Always add Drupal.org first
152
+ newRepositories.push(DRUPAL_REPOSITORY);
153
+ // Add FlexSite repository
154
+ newRepositories.push(FLEXSITE_REPOSITORY);
155
+ // Keep any custom/path repositories that aren't platform-specific
156
+ if (fixed.repositories) {
157
+ for (const repo of fixed.repositories) {
158
+ // Skip drupal.org (we already added it)
159
+ if (repo.url === 'https://packages.drupal.org/8')
160
+ continue;
161
+ // Skip FlexSite repo (we already added it)
162
+ if (repo.url === 'https://packages.flexsite.io/packages.json')
163
+ continue;
164
+ // Skip Pantheon upstream-configuration path
165
+ if (repo.type === 'path' && repo.url === 'upstream-configuration') {
166
+ result.changes.push('Removed Pantheon upstream-configuration repository');
167
+ continue;
168
+ }
169
+ // Keep other repositories (custom package sources, etc.)
170
+ newRepositories.push(repo);
171
+ }
172
+ }
173
+ fixed.repositories = newRepositories;
174
+ result.changes.push('Updated repositories (added FlexSite package source)');
175
+ // 5. Remove platform-specific packages from require
176
+ if (fixed.require) {
177
+ for (const pkg of PLATFORM_PACKAGES) {
178
+ if (fixed.require[pkg]) {
179
+ delete fixed.require[pkg];
180
+ result.removedPackages.push(pkg);
181
+ }
182
+ }
183
+ }
184
+ // 6. Remove platform-specific packages from require-dev
185
+ if (fixed['require-dev']) {
186
+ for (const pkg of PLATFORM_PACKAGES) {
187
+ if (fixed['require-dev'][pkg]) {
188
+ delete fixed['require-dev'][pkg];
189
+ result.removedPackages.push(`${pkg} (dev)`);
190
+ }
191
+ }
192
+ }
193
+ // 7. Add FlexSite performance packages
194
+ if (!options.skipPerformance) {
195
+ for (const [pkg, version] of Object.entries(FLEXSITE_PERFORMANCE_PACKAGES)) {
196
+ if (!fixed.require?.[pkg]) {
197
+ fixed.require = fixed.require || {};
198
+ fixed.require[pkg] = version;
199
+ result.addedPackages.push(pkg);
200
+ }
201
+ }
202
+ }
203
+ // 7b. Upgrade composer/installers to v2 (required for drupal-recipe type support)
204
+ if (fixed.require?.['composer/installers']) {
205
+ const currentVersion = fixed.require['composer/installers'];
206
+ // Check if it's v1.x (e.g., ^1.9, ~1.9, 1.x, etc.)
207
+ if (currentVersion.match(/^[\^~]?1\./)) {
208
+ fixed.require['composer/installers'] = '^2.0';
209
+ result.changes.push('Upgraded composer/installers to ^2.0 (required for recipe support)');
210
+ }
211
+ }
212
+ // 8. Ensure PHP requirement
213
+ if (!fixed.require?.['php']) {
214
+ fixed.require = fixed.require || {};
215
+ fixed.require['php'] = '>=8.2';
216
+ result.changes.push('Added PHP >=8.2 requirement');
217
+ }
218
+ // 9. Ensure drush is present
219
+ if (!fixed.require?.['drush/drush']) {
220
+ fixed.require = fixed.require || {};
221
+ fixed.require['drush/drush'] = '^13.6';
222
+ result.addedPackages.push('drush/drush');
223
+ }
224
+ // 10. Fix drupal-scaffold section
225
+ if (fixed.extra?.['drupal-scaffold']) {
226
+ const scaffold = fixed.extra['drupal-scaffold'];
227
+ // Remove Pantheon-specific allowed-packages
228
+ if (scaffold['allowed-packages']) {
229
+ const filtered = scaffold['allowed-packages'].filter((pkg) => !pkg.includes('pantheon') && !pkg.includes('acquia'));
230
+ if (filtered.length === 0) {
231
+ delete scaffold['allowed-packages'];
232
+ }
233
+ else {
234
+ scaffold['allowed-packages'] = filtered;
235
+ }
236
+ result.changes.push('Cleaned up drupal-scaffold allowed-packages');
237
+ }
238
+ // Remove Pantheon-specific file-mapping
239
+ if (scaffold['file-mapping']) {
240
+ const newMapping = {};
241
+ for (const [key, value] of Object.entries(scaffold['file-mapping'])) {
242
+ // Skip Pantheon-specific files
243
+ if (key.includes('pantheon') || key.includes('acquia')) {
244
+ continue;
245
+ }
246
+ newMapping[key] = value;
247
+ }
248
+ if (Object.keys(newMapping).length > 0) {
249
+ scaffold['file-mapping'] = newMapping;
250
+ }
251
+ else {
252
+ delete scaffold['file-mapping'];
253
+ }
254
+ }
255
+ // Normalize web-root
256
+ if (scaffold.locations?.['web-root']) {
257
+ scaffold.locations['web-root'] = 'web/';
258
+ }
259
+ }
260
+ // 11. Fix installer-paths
261
+ if (fixed.extra?.['installer-paths']) {
262
+ const installerPaths = fixed.extra['installer-paths'];
263
+ // Remove Pantheon quicksilver paths
264
+ for (const pathToRemove of PANTHEON_INSTALLER_PATHS) {
265
+ if (installerPaths[pathToRemove]) {
266
+ delete installerPaths[pathToRemove];
267
+ result.changes.push('Removed Pantheon quicksilver installer path');
268
+ }
269
+ }
270
+ // Add recipe installer path if not present
271
+ const recipeKey = 'recipes/{$name}';
272
+ if (!installerPaths[recipeKey]) {
273
+ installerPaths[recipeKey] = ['type:drupal-recipe'];
274
+ result.changes.push('Added recipe installer path');
275
+ }
276
+ }
277
+ // 12. Remove Pantheon-specific autoload
278
+ if (fixed.autoload?.classmap) {
279
+ const filteredClassmap = fixed.autoload.classmap.filter((path) => !path.includes('upstream-configuration') && !path.includes('ComposerScripts'));
280
+ if (filteredClassmap.length === 0) {
281
+ delete fixed.autoload.classmap;
282
+ if (Object.keys(fixed.autoload).length === 0) {
283
+ delete fixed.autoload;
284
+ }
285
+ }
286
+ else {
287
+ fixed.autoload.classmap = filteredClassmap;
288
+ }
289
+ result.changes.push('Removed Pantheon autoload entries');
290
+ }
291
+ // 13. Clean up scripts
292
+ if (fixed.scripts) {
293
+ const scriptsToRemove = ['pre-update-cmd', 'post-update-cmd'];
294
+ for (const script of scriptsToRemove) {
295
+ if (fixed.scripts[script]) {
296
+ const commands = Array.isArray(fixed.scripts[script])
297
+ ? fixed.scripts[script]
298
+ : [fixed.scripts[script]];
299
+ const filtered = commands.filter((cmd) => !cmd.includes('ComposerScripts') &&
300
+ !cmd.includes('Pantheon') &&
301
+ !cmd.includes('Acquia'));
302
+ if (filtered.length === 0) {
303
+ delete fixed.scripts[script];
304
+ }
305
+ else {
306
+ fixed.scripts[script] = filtered;
307
+ }
308
+ }
309
+ }
310
+ // Add post-install-cmd for custom directories if not present
311
+ if (!fixed.scripts['post-install-cmd']) {
312
+ fixed.scripts['post-install-cmd'] = [
313
+ 'mkdir -p web/themes/custom',
314
+ 'mkdir -p web/modules/custom'
315
+ ];
316
+ result.changes.push('Added post-install-cmd for custom directories');
317
+ }
318
+ }
319
+ // 14. Update config section
320
+ if (fixed.config) {
321
+ // Remove platform-specific php version pinning if it's too restrictive
322
+ if (fixed.config.platform?.php) {
323
+ // Keep it but warn if it's below 8.2
324
+ const phpVersion = fixed.config.platform.php;
325
+ if (phpVersion.startsWith('8.0') || phpVersion.startsWith('8.1')) {
326
+ result.warnings.push(`PHP version ${phpVersion} is set in config.platform.php. FlexSite uses PHP 8.3.`);
327
+ }
328
+ }
329
+ // Ensure sort-packages is true
330
+ fixed.config['sort-packages'] = true;
331
+ // Add optimize-autoloader
332
+ fixed.config['optimize-autoloader'] = true;
333
+ // Ensure necessary plugins are allowed
334
+ const allowPlugins = fixed.config['allow-plugins'] || {};
335
+ allowPlugins['composer/installers'] = true;
336
+ allowPlugins['drupal/core-composer-scaffold'] = true;
337
+ allowPlugins['drupal/core-project-message'] = true;
338
+ allowPlugins['php-http/discovery'] = true;
339
+ allowPlugins['tbachert/spi'] = true;
340
+ // Remove platform-specific plugins
341
+ delete allowPlugins['pantheon-systems/upstream-management'];
342
+ fixed.config['allow-plugins'] = allowPlugins;
343
+ }
344
+ // 15. Set minimum-stability
345
+ fixed['minimum-stability'] = 'dev';
346
+ fixed['prefer-stable'] = true;
347
+ // Generate summary
348
+ if (result.removedPackages.length > 0) {
349
+ result.changes.push(`Removed ${result.removedPackages.length} platform-specific package(s)`);
350
+ }
351
+ if (result.addedPackages.length > 0) {
352
+ result.changes.push(`Added ${result.addedPackages.length} FlexSite package(s)`);
353
+ }
354
+ return { fixed, result };
355
+ }
356
+ exports.composerCommand = new commander_1.Command('composer')
357
+ .description('Manage composer.json for FlexSite compatibility');
358
+ exports.composerCommand
359
+ .command('fix')
360
+ .description('Transform composer.json from other platforms (Pantheon, Acquia, etc.) to FlexSite format')
361
+ .option('-f, --file <path>', 'Path to composer.json', 'composer.json')
362
+ .option('-o, --output <path>', 'Output file (default: overwrite input)')
363
+ .option('-n, --name <name>', 'Project name for FlexSite')
364
+ .option('--dry-run', 'Show changes without modifying files')
365
+ .option('--skip-performance', 'Skip adding FlexSite performance packages')
366
+ .option('--backup', 'Create a backup before modifying')
367
+ .action(async (options) => {
368
+ try {
369
+ const composerPath = path_1.default.resolve(options.file);
370
+ // Check if file exists
371
+ if (!fs_1.default.existsSync(composerPath)) {
372
+ console.error(chalk_1.default.red(`File not found: ${composerPath}`));
373
+ process.exit(1);
374
+ }
375
+ // Read composer.json
376
+ const spinner = (0, ora_1.default)('Reading composer.json...').start();
377
+ const content = fs_1.default.readFileSync(composerPath, 'utf-8');
378
+ let composer;
379
+ try {
380
+ composer = JSON.parse(content);
381
+ }
382
+ catch (e) {
383
+ spinner.fail('Invalid JSON in composer.json');
384
+ process.exit(1);
385
+ }
386
+ spinner.succeed('Read composer.json');
387
+ // Detect platform
388
+ const platform = detectPlatform(composer);
389
+ const drupalVersion = detectDrupalVersion(composer);
390
+ console.log(chalk_1.default.cyan(`\nDetected platform: ${chalk_1.default.bold(platform.toUpperCase())}`));
391
+ console.log(chalk_1.default.cyan(`Drupal version: ${chalk_1.default.bold(drupalVersion)}`));
392
+ if (platform === 'flexsite') {
393
+ console.log(chalk_1.default.green('\nThis composer.json is already configured for FlexSite!'));
394
+ const { continueAnyway } = await inquirer_1.default.prompt([
395
+ {
396
+ type: 'confirm',
397
+ name: 'continueAnyway',
398
+ message: 'Do you want to run the fix anyway?',
399
+ default: false
400
+ }
401
+ ]);
402
+ if (!continueAnyway) {
403
+ process.exit(0);
404
+ }
405
+ }
406
+ // Get project name if not provided
407
+ let projectName = options.name;
408
+ if (!projectName) {
409
+ // Try to extract from current name or directory
410
+ const dirName = path_1.default.basename(path_1.default.dirname(composerPath));
411
+ const currentName = composer.name?.split('/').pop() || dirName;
412
+ const { name } = await inquirer_1.default.prompt([
413
+ {
414
+ type: 'input',
415
+ name: 'name',
416
+ message: 'Project name for FlexSite:',
417
+ default: sanitizeProjectName(currentName),
418
+ validate: (input) => {
419
+ const sanitized = sanitizeProjectName(input);
420
+ if (!sanitized) {
421
+ return 'Project name must contain at least one valid character (a-z, 0-9)';
422
+ }
423
+ if (!/^[a-z0-9]([_.-]?[a-z0-9]+)*$/.test(sanitized)) {
424
+ return 'Invalid project name. Use only lowercase letters, numbers, and -_.';
425
+ }
426
+ return true;
427
+ }
428
+ }
429
+ ]);
430
+ // Always sanitize the input
431
+ projectName = sanitizeProjectName(name);
432
+ }
433
+ else {
434
+ // Sanitize provided name
435
+ projectName = sanitizeProjectName(projectName);
436
+ }
437
+ // Fix composer.json
438
+ const fixSpinner = (0, ora_1.default)('Analyzing composer.json...').start();
439
+ const { fixed, result } = fixComposerJson(composer, {
440
+ projectName,
441
+ dryRun: options.dryRun,
442
+ skipPerformance: options.skipPerformance
443
+ });
444
+ fixSpinner.succeed('Analysis complete');
445
+ // Show changes
446
+ console.log(chalk_1.default.cyan('\n--- Changes ---'));
447
+ if (result.changes.length === 0) {
448
+ console.log(chalk_1.default.dim(' No changes needed'));
449
+ }
450
+ else {
451
+ for (const change of result.changes) {
452
+ console.log(chalk_1.default.green(` ✓ ${change}`));
453
+ }
454
+ }
455
+ if (result.removedPackages.length > 0) {
456
+ console.log(chalk_1.default.cyan('\n--- Removed Packages ---'));
457
+ for (const pkg of result.removedPackages) {
458
+ console.log(chalk_1.default.yellow(` - ${pkg}`));
459
+ }
460
+ }
461
+ if (result.addedPackages.length > 0) {
462
+ console.log(chalk_1.default.cyan('\n--- Added Packages ---'));
463
+ for (const pkg of result.addedPackages) {
464
+ console.log(chalk_1.default.green(` + ${pkg}`));
465
+ }
466
+ }
467
+ if (result.warnings.length > 0) {
468
+ console.log(chalk_1.default.cyan('\n--- Warnings ---'));
469
+ for (const warning of result.warnings) {
470
+ console.log(chalk_1.default.yellow(` ⚠ ${warning}`));
471
+ }
472
+ }
473
+ // Dry run - don't write
474
+ if (options.dryRun) {
475
+ console.log(chalk_1.default.dim('\n(Dry run - no files modified)'));
476
+ console.log(chalk_1.default.cyan('\nPreview of fixed composer.json:'));
477
+ console.log(JSON.stringify(fixed, null, 4));
478
+ process.exit(0);
479
+ }
480
+ // Confirm before writing
481
+ const { confirm } = await inquirer_1.default.prompt([
482
+ {
483
+ type: 'confirm',
484
+ name: 'confirm',
485
+ message: 'Apply these changes?',
486
+ default: true
487
+ }
488
+ ]);
489
+ if (!confirm) {
490
+ console.log(chalk_1.default.dim('Cancelled'));
491
+ process.exit(0);
492
+ }
493
+ // Create backup if requested
494
+ if (options.backup) {
495
+ const backupPath = `${composerPath}.backup.${Date.now()}`;
496
+ fs_1.default.writeFileSync(backupPath, content);
497
+ console.log(chalk_1.default.dim(`Backup created: ${backupPath}`));
498
+ }
499
+ // Write fixed composer.json
500
+ const outputPath = options.output ? path_1.default.resolve(options.output) : composerPath;
501
+ fs_1.default.writeFileSync(outputPath, JSON.stringify(fixed, null, 4) + '\n');
502
+ console.log(chalk_1.default.green(`\n✓ Updated ${outputPath}`));
503
+ // Post-fix instructions
504
+ console.log(chalk_1.default.cyan('\n--- Next Steps ---'));
505
+ console.log(' 1. Review the changes to composer.json');
506
+ console.log(' 2. Run: ' + chalk_1.default.bold('composer install'));
507
+ console.log(' 3. If you have upstream-configuration directory, you can delete it');
508
+ console.log(' 4. Commit your changes to git');
509
+ if (platform === 'pantheon') {
510
+ console.log(chalk_1.default.yellow('\n--- Pantheon-specific cleanup ---'));
511
+ console.log(' • Delete: upstream-configuration/');
512
+ console.log(' • Delete: pantheon.yml (if exists)');
513
+ console.log(' • Delete: pantheon.upstream.yml (if exists)');
514
+ }
515
+ }
516
+ catch (error) {
517
+ if (error instanceof Error) {
518
+ console.error(chalk_1.default.red(`\nError: ${error.message}`));
519
+ }
520
+ process.exit(1);
521
+ }
522
+ });
523
+ exports.composerCommand
524
+ .command('check')
525
+ .description('Check composer.json for FlexSite compatibility')
526
+ .option('-f, --file <path>', 'Path to composer.json', 'composer.json')
527
+ .action(async (options) => {
528
+ try {
529
+ const composerPath = path_1.default.resolve(options.file);
530
+ if (!fs_1.default.existsSync(composerPath)) {
531
+ console.error(chalk_1.default.red(`File not found: ${composerPath}`));
532
+ process.exit(1);
533
+ }
534
+ const content = fs_1.default.readFileSync(composerPath, 'utf-8');
535
+ const composer = JSON.parse(content);
536
+ const platform = detectPlatform(composer);
537
+ const drupalVersion = detectDrupalVersion(composer);
538
+ console.log(chalk_1.default.cyan('=== Composer.json Analysis ===\n'));
539
+ console.log(`Platform: ${chalk_1.default.bold(platform.toUpperCase())}`);
540
+ console.log(`Drupal version: ${chalk_1.default.bold(drupalVersion)}`);
541
+ console.log(`Name: ${chalk_1.default.bold(composer.name || 'Not set')}`);
542
+ // Check FlexSite compatibility
543
+ const issues = [];
544
+ const good = [];
545
+ // Check repositories
546
+ const hasFlexSiteRepo = composer.repositories?.some(r => r.url === 'https://packages.flexsite.io/packages.json');
547
+ if (hasFlexSiteRepo) {
548
+ good.push('FlexSite repository configured');
549
+ }
550
+ else {
551
+ issues.push('Missing FlexSite repository (packages.flexsite.io)');
552
+ }
553
+ // Check performance packages
554
+ const hasPerformancePackage = composer.require?.['flexsite/fs_performance'];
555
+ if (hasPerformancePackage) {
556
+ good.push('FlexSite performance package installed');
557
+ }
558
+ else {
559
+ issues.push('Missing flexsite/fs_performance package');
560
+ }
561
+ // Check Redis
562
+ const hasRedis = composer.require?.['drupal/redis'];
563
+ if (hasRedis) {
564
+ good.push('Redis module configured');
565
+ }
566
+ else {
567
+ issues.push('Missing drupal/redis package');
568
+ }
569
+ // Check recipe path
570
+ const hasRecipePath = composer.extra?.['installer-paths']?.['recipes/{$name}'];
571
+ if (hasRecipePath) {
572
+ good.push('Recipe installer path configured');
573
+ }
574
+ else {
575
+ issues.push('Missing recipe installer path');
576
+ }
577
+ // Check for platform-specific packages
578
+ const platformPackages = [];
579
+ for (const pkg of PLATFORM_PACKAGES) {
580
+ if (composer.require?.[pkg] || composer['require-dev']?.[pkg]) {
581
+ platformPackages.push(pkg);
582
+ }
583
+ }
584
+ if (platformPackages.length > 0) {
585
+ issues.push(`Platform-specific packages found: ${platformPackages.join(', ')}`);
586
+ }
587
+ else {
588
+ good.push('No platform-specific packages');
589
+ }
590
+ // Print results
591
+ if (good.length > 0) {
592
+ console.log(chalk_1.default.green('\n✓ Good:'));
593
+ for (const item of good) {
594
+ console.log(chalk_1.default.green(` • ${item}`));
595
+ }
596
+ }
597
+ if (issues.length > 0) {
598
+ console.log(chalk_1.default.yellow('\n⚠ Issues:'));
599
+ for (const item of issues) {
600
+ console.log(chalk_1.default.yellow(` • ${item}`));
601
+ }
602
+ console.log(chalk_1.default.cyan(`\nRun ${chalk_1.default.bold('flexsite composer fix')} to resolve these issues.`));
603
+ }
604
+ else {
605
+ console.log(chalk_1.default.green('\n✓ composer.json is fully compatible with FlexSite!'));
606
+ }
607
+ }
608
+ catch (error) {
609
+ if (error instanceof Error) {
610
+ console.error(chalk_1.default.red(`\nError: ${error.message}`));
611
+ }
612
+ process.exit(1);
613
+ }
614
+ });
615
+ //# sourceMappingURL=composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/commands/composer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flexsiteio/cli",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "FlexSite CLI - Command-line tool for managing FlexSite projects",
5
5
  "main": "dist/index.js",
6
6
  "bin": {