@flexsiteio/cli 1.0.1
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/.github/workflows/publish.yml +28 -0
- package/.nvmrc +1 -0
- package/README.md +166 -0
- package/db_727aa8c7-dev_xYhn06gTRFNmPbW3uOVKlQ.sql.gz +0 -0
- package/db_faef57dd-dev_3wnRGEk6KwkI_wgvygWf4g.sql.gz +0 -0
- package/dist/bin/flexsite.d.ts +7 -0
- package/dist/bin/flexsite.d.ts.map +1 -0
- package/dist/bin/flexsite.js +31 -0
- package/dist/bin/flexsite.js.map +1 -0
- package/dist/commands/auth.d.ts +6 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +325 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +56 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/db.d.ts +6 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +274 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/files.d.ts +6 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +272 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +202 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +47 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +203 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +54 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +150 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detector.d.ts +26 -0
- package/dist/lib/detector.d.ts.map +1 -0
- package/dist/lib/detector.js +305 -0
- package/dist/lib/detector.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration management for FlexSite CLI.
|
|
4
|
+
* Stores tokens and preferences in ~/.flexsite/config.json
|
|
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.getConfig = getConfig;
|
|
11
|
+
exports.saveToken = saveToken;
|
|
12
|
+
exports.getToken = getToken;
|
|
13
|
+
exports.removeToken = removeToken;
|
|
14
|
+
exports.getAllTokens = getAllTokens;
|
|
15
|
+
exports.setDefaultOrganization = setDefaultOrganization;
|
|
16
|
+
exports.setDefaultProject = setDefaultProject;
|
|
17
|
+
exports.setDefaultEnvironment = setDefaultEnvironment;
|
|
18
|
+
exports.getDefaults = getDefaults;
|
|
19
|
+
exports.clearConfig = clearConfig;
|
|
20
|
+
exports.clearDefaults = clearDefaults;
|
|
21
|
+
exports.getConfigPath = getConfigPath;
|
|
22
|
+
const conf_1 = __importDefault(require("conf"));
|
|
23
|
+
const CONFIG_VERSION = 1;
|
|
24
|
+
// Initialize configuration store
|
|
25
|
+
const store = new conf_1.default({
|
|
26
|
+
projectName: 'flexsite',
|
|
27
|
+
projectVersion: '1.0.0',
|
|
28
|
+
defaults: {
|
|
29
|
+
version: CONFIG_VERSION,
|
|
30
|
+
tokens: {},
|
|
31
|
+
defaults: {}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Get the entire configuration
|
|
36
|
+
*/
|
|
37
|
+
function getConfig() {
|
|
38
|
+
return store.store;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Save a token for an organization
|
|
42
|
+
*/
|
|
43
|
+
function saveToken(orgPrefix, tokenConfig) {
|
|
44
|
+
const tokens = store.get('tokens', {});
|
|
45
|
+
tokens[orgPrefix] = tokenConfig;
|
|
46
|
+
store.set('tokens', tokens);
|
|
47
|
+
// Set as default organization if it's the first token
|
|
48
|
+
if (Object.keys(tokens).length === 1) {
|
|
49
|
+
store.set('defaults.organizationId', tokenConfig.organizationId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get token for an organization (by prefix or full ID)
|
|
54
|
+
*/
|
|
55
|
+
function getToken(orgId) {
|
|
56
|
+
const tokens = store.get('tokens', {});
|
|
57
|
+
let searchId = orgId;
|
|
58
|
+
if (!searchId) {
|
|
59
|
+
// Use default organization
|
|
60
|
+
const defaultOrgId = store.get('defaults.organizationId');
|
|
61
|
+
if (!defaultOrgId) {
|
|
62
|
+
// Return first available token
|
|
63
|
+
const firstKey = Object.keys(tokens)[0];
|
|
64
|
+
return firstKey ? tokens[firstKey] : null;
|
|
65
|
+
}
|
|
66
|
+
searchId = defaultOrgId;
|
|
67
|
+
}
|
|
68
|
+
// Try to find by prefix or full ID
|
|
69
|
+
const orgPrefix = searchId.substring(0, 8);
|
|
70
|
+
if (tokens[orgPrefix]) {
|
|
71
|
+
return tokens[orgPrefix];
|
|
72
|
+
}
|
|
73
|
+
// Search by full organization ID
|
|
74
|
+
for (const [, config] of Object.entries(tokens)) {
|
|
75
|
+
if (config.organizationId === searchId) {
|
|
76
|
+
return config;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Remove a token
|
|
83
|
+
*/
|
|
84
|
+
function removeToken(orgId) {
|
|
85
|
+
const tokens = store.get('tokens', {});
|
|
86
|
+
const orgPrefix = orgId.substring(0, 8);
|
|
87
|
+
if (tokens[orgPrefix]) {
|
|
88
|
+
delete tokens[orgPrefix];
|
|
89
|
+
store.set('tokens', tokens);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
// Search by full organization ID
|
|
93
|
+
for (const [prefix, config] of Object.entries(tokens)) {
|
|
94
|
+
if (config.organizationId === orgId) {
|
|
95
|
+
delete tokens[prefix];
|
|
96
|
+
store.set('tokens', tokens);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get all stored tokens
|
|
104
|
+
*/
|
|
105
|
+
function getAllTokens() {
|
|
106
|
+
return store.get('tokens', {});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Set default organization
|
|
110
|
+
*/
|
|
111
|
+
function setDefaultOrganization(orgId) {
|
|
112
|
+
store.set('defaults.organizationId', orgId);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Set default project
|
|
116
|
+
*/
|
|
117
|
+
function setDefaultProject(projectId) {
|
|
118
|
+
store.set('defaults.projectId', projectId);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Set default environment
|
|
122
|
+
*/
|
|
123
|
+
function setDefaultEnvironment(envId) {
|
|
124
|
+
store.set('defaults.environmentId', envId);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get defaults
|
|
128
|
+
*/
|
|
129
|
+
function getDefaults() {
|
|
130
|
+
return store.get('defaults', {});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Clear all configuration
|
|
134
|
+
*/
|
|
135
|
+
function clearConfig() {
|
|
136
|
+
store.clear();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Clear only defaults (keep tokens)
|
|
140
|
+
*/
|
|
141
|
+
function clearDefaults() {
|
|
142
|
+
store.set('defaults', {});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get the config file path
|
|
146
|
+
*/
|
|
147
|
+
function getConfigPath() {
|
|
148
|
+
return store.path;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local environment detection and import utilities.
|
|
3
|
+
* Detects Lando and DDEV environments and provides import functionality.
|
|
4
|
+
*/
|
|
5
|
+
import type { LocalEnvType } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detect if running in a Lando or DDEV environment
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectLocalEnvironment(): LocalEnvType;
|
|
10
|
+
/**
|
|
11
|
+
* Import a database backup using Lando or DDEV
|
|
12
|
+
*/
|
|
13
|
+
export declare function importDatabase(filePath: string, env: LocalEnvType): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Import/extract a files backup
|
|
16
|
+
*/
|
|
17
|
+
export declare function importFiles(filePath: string, env: LocalEnvType): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Clear cache in the local environment
|
|
20
|
+
*/
|
|
21
|
+
export declare function clearCache(env: LocalEnvType): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Get a login URL for the local environment
|
|
24
|
+
*/
|
|
25
|
+
export declare function getLoginUrl(env: LocalEnvType): Promise<string | null>;
|
|
26
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAuBrD;AA2CD;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEvF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DpF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCjE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwC3E"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local environment detection and import utilities.
|
|
4
|
+
* Detects Lando and DDEV environments and provides import functionality.
|
|
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.detectLocalEnvironment = detectLocalEnvironment;
|
|
11
|
+
exports.importDatabase = importDatabase;
|
|
12
|
+
exports.importFiles = importFiles;
|
|
13
|
+
exports.clearCache = clearCache;
|
|
14
|
+
exports.getLoginUrl = getLoginUrl;
|
|
15
|
+
const fs_1 = __importDefault(require("fs"));
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const child_process_1 = require("child_process");
|
|
18
|
+
const util_1 = require("util");
|
|
19
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
20
|
+
/**
|
|
21
|
+
* Detect if running in a Lando or DDEV environment
|
|
22
|
+
*/
|
|
23
|
+
function detectLocalEnvironment() {
|
|
24
|
+
// Check environment variables first (when running inside container)
|
|
25
|
+
if (process.env.LANDO === 'ON') {
|
|
26
|
+
return 'lando';
|
|
27
|
+
}
|
|
28
|
+
if (process.env.IS_DDEV_PROJECT === 'true') {
|
|
29
|
+
return 'ddev';
|
|
30
|
+
}
|
|
31
|
+
// Check for configuration files (when running on host)
|
|
32
|
+
const cwd = process.cwd();
|
|
33
|
+
if (fs_1.default.existsSync(path_1.default.join(cwd, '.lando.yml')) ||
|
|
34
|
+
fs_1.default.existsSync(path_1.default.join(cwd, '.lando.local.yml'))) {
|
|
35
|
+
return 'lando';
|
|
36
|
+
}
|
|
37
|
+
if (fs_1.default.existsSync(path_1.default.join(cwd, '.ddev', 'config.yaml'))) {
|
|
38
|
+
return 'ddev';
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if a command is available
|
|
44
|
+
*/
|
|
45
|
+
async function commandExists(command) {
|
|
46
|
+
try {
|
|
47
|
+
await execAsync(`which ${command}`);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get the files directory path based on CMS type
|
|
56
|
+
*/
|
|
57
|
+
function getFilesDirectory() {
|
|
58
|
+
const cwd = process.cwd();
|
|
59
|
+
// Check for Drupal 10/11 structure (web/sites/default/files)
|
|
60
|
+
if (fs_1.default.existsSync(path_1.default.join(cwd, 'web', 'sites', 'default', 'files'))) {
|
|
61
|
+
return path_1.default.join(cwd, 'web', 'sites', 'default', 'files');
|
|
62
|
+
}
|
|
63
|
+
// Check for Drupal 7 structure (sites/default/files)
|
|
64
|
+
if (fs_1.default.existsSync(path_1.default.join(cwd, 'sites', 'default', 'files'))) {
|
|
65
|
+
return path_1.default.join(cwd, 'sites', 'default', 'files');
|
|
66
|
+
}
|
|
67
|
+
// Check for WordPress structure (wp-content/uploads)
|
|
68
|
+
if (fs_1.default.existsSync(path_1.default.join(cwd, 'wp-content', 'uploads'))) {
|
|
69
|
+
return path_1.default.join(cwd, 'wp-content', 'uploads');
|
|
70
|
+
}
|
|
71
|
+
// Default to web/sites/default/files for modern Drupal
|
|
72
|
+
const defaultDir = path_1.default.join(cwd, 'web', 'sites', 'default', 'files');
|
|
73
|
+
if (!fs_1.default.existsSync(defaultDir)) {
|
|
74
|
+
fs_1.default.mkdirSync(defaultDir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
return defaultDir;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Import a database backup using Lando or DDEV
|
|
80
|
+
*/
|
|
81
|
+
async function importDatabase(filePath, env) {
|
|
82
|
+
if (!env) {
|
|
83
|
+
throw new Error('No local environment detected');
|
|
84
|
+
}
|
|
85
|
+
const absolutePath = path_1.default.resolve(filePath);
|
|
86
|
+
const cwd = process.cwd();
|
|
87
|
+
if (!fs_1.default.existsSync(absolutePath)) {
|
|
88
|
+
throw new Error(`Database file not found: ${absolutePath}`);
|
|
89
|
+
}
|
|
90
|
+
if (env === 'lando') {
|
|
91
|
+
// Check if lando is available
|
|
92
|
+
if (!(await commandExists('lando'))) {
|
|
93
|
+
throw new Error('Lando command not found. Please install Lando: https://lando.dev/download/');
|
|
94
|
+
}
|
|
95
|
+
// Lando needs a relative path from the project root
|
|
96
|
+
// because it maps the project directory to /app inside the container
|
|
97
|
+
let importPath;
|
|
98
|
+
if (absolutePath.startsWith(cwd)) {
|
|
99
|
+
// File is inside the project directory, use relative path
|
|
100
|
+
importPath = path_1.default.relative(cwd, absolutePath);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// File is outside project directory - copy it to project root first
|
|
104
|
+
const fileName = path_1.default.basename(absolutePath);
|
|
105
|
+
const tempPath = path_1.default.join(cwd, fileName);
|
|
106
|
+
fs_1.default.copyFileSync(absolutePath, tempPath);
|
|
107
|
+
importPath = fileName;
|
|
108
|
+
}
|
|
109
|
+
// Use lando db-import with relative path
|
|
110
|
+
try {
|
|
111
|
+
const { stdout, stderr } = await execAsync(`lando db-import "${importPath}"`, {
|
|
112
|
+
cwd: cwd,
|
|
113
|
+
timeout: 300000 // 5 minutes
|
|
114
|
+
});
|
|
115
|
+
if (stderr && !stderr.includes('SUCCESS')) {
|
|
116
|
+
console.warn(`Warning: ${stderr}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// Lando db-import may exit with error even on success, check message
|
|
121
|
+
if (error.message && error.message.includes('SUCCESS')) {
|
|
122
|
+
return; // Actually successful
|
|
123
|
+
}
|
|
124
|
+
throw new Error(`Lando import failed: ${error.message || error}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else if (env === 'ddev') {
|
|
128
|
+
// Check if ddev is available
|
|
129
|
+
if (!(await commandExists('ddev'))) {
|
|
130
|
+
throw new Error('DDEV command not found. Please install DDEV: https://ddev.readthedocs.io/en/stable/users/install/');
|
|
131
|
+
}
|
|
132
|
+
// Use ddev import-db
|
|
133
|
+
try {
|
|
134
|
+
const { stdout, stderr } = await execAsync(`ddev import-db --file="${absolutePath}"`, {
|
|
135
|
+
cwd: process.cwd(),
|
|
136
|
+
timeout: 300000 // 5 minutes
|
|
137
|
+
});
|
|
138
|
+
if (stderr && !stderr.includes('SUCCESS') && !stderr.includes('Successfully')) {
|
|
139
|
+
console.warn(`Warning: ${stderr}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
throw new Error(`DDEV import failed: ${error.message || error}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Import/extract a files backup
|
|
149
|
+
*/
|
|
150
|
+
async function importFiles(filePath, env) {
|
|
151
|
+
if (!env) {
|
|
152
|
+
throw new Error('No local environment detected');
|
|
153
|
+
}
|
|
154
|
+
const absolutePath = path_1.default.resolve(filePath);
|
|
155
|
+
if (!fs_1.default.existsSync(absolutePath)) {
|
|
156
|
+
throw new Error(`Files archive not found: ${absolutePath}`);
|
|
157
|
+
}
|
|
158
|
+
const filesDir = getFilesDirectory();
|
|
159
|
+
// Ensure files directory exists
|
|
160
|
+
if (!fs_1.default.existsSync(filesDir)) {
|
|
161
|
+
fs_1.default.mkdirSync(filesDir, { recursive: true });
|
|
162
|
+
}
|
|
163
|
+
// Extract the archive
|
|
164
|
+
try {
|
|
165
|
+
// Determine extraction command based on file extension
|
|
166
|
+
let extractCmd;
|
|
167
|
+
if (absolutePath.endsWith('.tar.gz') || absolutePath.endsWith('.tgz')) {
|
|
168
|
+
extractCmd = `tar -xzf "${absolutePath}" -C "${filesDir}" --strip-components=0`;
|
|
169
|
+
}
|
|
170
|
+
else if (absolutePath.endsWith('.zip')) {
|
|
171
|
+
extractCmd = `unzip -o "${absolutePath}" -d "${filesDir}"`;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
throw new Error('Unsupported archive format. Expected .tar.gz, .tgz, or .zip');
|
|
175
|
+
}
|
|
176
|
+
await execAsync(extractCmd, {
|
|
177
|
+
cwd: process.cwd(),
|
|
178
|
+
timeout: 600000 // 10 minutes for large file archives
|
|
179
|
+
});
|
|
180
|
+
// Fix permissions if needed (common issue with restored files)
|
|
181
|
+
if (env === 'lando') {
|
|
182
|
+
// Lando runs as user 'www-data' in container
|
|
183
|
+
try {
|
|
184
|
+
await execAsync(`lando ssh -c "chmod -R 775 ${filesDir.replace(process.cwd(), '/app')}"`, {
|
|
185
|
+
cwd: process.cwd()
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Permission fix is optional, don't fail if it doesn't work
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else if (env === 'ddev') {
|
|
193
|
+
// DDEV handles permissions automatically in most cases
|
|
194
|
+
try {
|
|
195
|
+
await execAsync(`ddev exec chmod -R 775 /var/www/html/web/sites/default/files`, {
|
|
196
|
+
cwd: process.cwd()
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Permission fix is optional
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
throw new Error(`Files extraction failed: ${error.message || error}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Clear cache in the local environment
|
|
210
|
+
*/
|
|
211
|
+
async function clearCache(env) {
|
|
212
|
+
if (!env) {
|
|
213
|
+
throw new Error('No local environment detected');
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
if (env === 'lando') {
|
|
217
|
+
// Try Drupal cache rebuild
|
|
218
|
+
try {
|
|
219
|
+
await execAsync('lando drush cr', { cwd: process.cwd(), timeout: 60000 });
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Maybe it's WordPress
|
|
224
|
+
try {
|
|
225
|
+
await execAsync('lando wp cache flush', { cwd: process.cwd(), timeout: 60000 });
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Neither worked
|
|
230
|
+
console.warn('Could not clear cache automatically');
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else if (env === 'ddev') {
|
|
235
|
+
// Try Drupal cache rebuild
|
|
236
|
+
try {
|
|
237
|
+
await execAsync('ddev drush cr', { cwd: process.cwd(), timeout: 60000 });
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Maybe it's WordPress
|
|
242
|
+
try {
|
|
243
|
+
await execAsync('ddev wp cache flush', { cwd: process.cwd(), timeout: 60000 });
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// Neither worked
|
|
248
|
+
console.warn('Could not clear cache automatically');
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
console.warn(`Cache clear warning: ${error.message || error}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get a login URL for the local environment
|
|
259
|
+
*/
|
|
260
|
+
async function getLoginUrl(env) {
|
|
261
|
+
if (!env) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
if (env === 'lando') {
|
|
266
|
+
// Try Drupal
|
|
267
|
+
try {
|
|
268
|
+
const { stdout } = await execAsync('lando drush uli', { cwd: process.cwd() });
|
|
269
|
+
return stdout.trim();
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// Maybe it's WordPress
|
|
273
|
+
try {
|
|
274
|
+
const { stdout } = await execAsync('lando wp login create 1 --url-only', { cwd: process.cwd() });
|
|
275
|
+
return stdout.trim();
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (env === 'ddev') {
|
|
283
|
+
// Try Drupal
|
|
284
|
+
try {
|
|
285
|
+
const { stdout } = await execAsync('ddev drush uli', { cwd: process.cwd() });
|
|
286
|
+
return stdout.trim();
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// Maybe it's WordPress
|
|
290
|
+
try {
|
|
291
|
+
const { stdout } = await execAsync('ddev wp login create 1 --url-only', { cwd: process.cwd() });
|
|
292
|
+
return stdout.trim();
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlexSite CLI Types
|
|
3
|
+
*/
|
|
4
|
+
export interface TokenConfig {
|
|
5
|
+
token: string;
|
|
6
|
+
userId: string;
|
|
7
|
+
organizationId: string;
|
|
8
|
+
organizationName: string;
|
|
9
|
+
expiresAt?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface Config {
|
|
12
|
+
version: number;
|
|
13
|
+
tokens: Record<string, TokenConfig>;
|
|
14
|
+
defaults: {
|
|
15
|
+
organizationId?: string;
|
|
16
|
+
projectId?: string;
|
|
17
|
+
environmentId?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface Project {
|
|
21
|
+
id: string;
|
|
22
|
+
title: string;
|
|
23
|
+
container?: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
flexlab?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface Environment {
|
|
28
|
+
id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
url?: string;
|
|
31
|
+
status?: string;
|
|
32
|
+
branch?: string;
|
|
33
|
+
container?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface Backup {
|
|
36
|
+
id: string;
|
|
37
|
+
fileName?: string;
|
|
38
|
+
createdAt?: string;
|
|
39
|
+
sizeBytes?: number;
|
|
40
|
+
type?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface BackupDownload {
|
|
43
|
+
url: string;
|
|
44
|
+
fileName: string;
|
|
45
|
+
createdAt?: string;
|
|
46
|
+
sizeBytes?: number;
|
|
47
|
+
expiresIn: number;
|
|
48
|
+
}
|
|
49
|
+
export interface AuthVerifyResponse {
|
|
50
|
+
authenticated: boolean;
|
|
51
|
+
userId: string;
|
|
52
|
+
organizationId: string;
|
|
53
|
+
organizationName?: string;
|
|
54
|
+
scopes: string[];
|
|
55
|
+
tokenName?: string;
|
|
56
|
+
}
|
|
57
|
+
export type LocalEnvType = 'lando' | 'ddev' | null;
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,QAAQ,EAAE;QACR,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flexsiteio/cli",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "FlexSite CLI - Command-line tool for managing FlexSite projects",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"flexsite": "./dist/bin/flexsite.js"
|
|
8
|
+
},
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public",
|
|
11
|
+
"registry": "https://registry.npmjs.org/"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "ts-node src/bin/flexsite.ts",
|
|
16
|
+
"prepublishOnly": "npm run build",
|
|
17
|
+
"test": "jest"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"flexsite",
|
|
21
|
+
"drupal",
|
|
22
|
+
"wordpress",
|
|
23
|
+
"cms",
|
|
24
|
+
"cli",
|
|
25
|
+
"lando",
|
|
26
|
+
"ddev"
|
|
27
|
+
],
|
|
28
|
+
"author": "FlexSite Team",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "https://github.com/flexsite/cli.git"
|
|
33
|
+
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=22.0.0"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"axios": "^1.6.0",
|
|
39
|
+
"chalk": "^5.3.0",
|
|
40
|
+
"commander": "^11.1.0",
|
|
41
|
+
"conf": "^12.0.0",
|
|
42
|
+
"inquirer": "^9.2.0",
|
|
43
|
+
"ora": "^7.0.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/inquirer": "^9.0.7",
|
|
47
|
+
"@types/node": "^20.10.0",
|
|
48
|
+
"typescript": "^5.3.0"
|
|
49
|
+
}
|
|
50
|
+
}
|