@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 +45 -0
- package/dist/bin/flexsite.js +5 -1
- package/dist/bin/flexsite.js.map +1 -1
- package/dist/commands/composer.d.ts +7 -0
- package/dist/commands/composer.d.ts.map +1 -0
- package/dist/commands/composer.js +615 -0
- package/dist/commands/composer.js.map +1 -0
- package/package.json +1 -1
- package/db_727aa8c7-dev_xYhn06gTRFNmPbW3uOVKlQ.sql.gz +0 -0
- package/db_faef57dd-dev_3wnRGEk6KwkI_wgvygWf4g.sql.gz +0 -0
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
|
package/dist/bin/flexsite.js
CHANGED
|
@@ -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(
|
|
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
|
package/dist/bin/flexsite.js.map
CHANGED
|
@@ -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;
|
|
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
|
Binary file
|
|
Binary file
|