@lenne.tech/cli 1.6.7 → 1.6.8
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/build/commands/config/validate.js +15 -1
- package/build/commands/directus/directus.js +27 -0
- package/build/commands/directus/docker-setup.js +471 -0
- package/build/commands/directus/remove.js +131 -0
- package/build/commands/directus/typegen.js +164 -0
- package/build/commands/git/update.js +2 -2
- package/build/commands/qdrant/delete.js +2 -1
- package/build/commands/qdrant/stats.js +2 -1
- package/build/templates/directus/.env.ejs +26 -0
- package/build/templates/directus/README.md.ejs +159 -0
- package/build/templates/directus/docker-compose.yml.ejs +81 -0
- package/docs/commands.md +124 -0
- package/package.json +1 -1
|
@@ -36,6 +36,17 @@ const KNOWN_KEYS = {
|
|
|
36
36
|
prodRunner: 'string',
|
|
37
37
|
testRunner: 'string',
|
|
38
38
|
},
|
|
39
|
+
directus: {
|
|
40
|
+
dockerSetup: {
|
|
41
|
+
database: ['postgres', 'mysql', 'sqlite'],
|
|
42
|
+
name: 'string',
|
|
43
|
+
noConfirm: 'boolean',
|
|
44
|
+
port: 'number',
|
|
45
|
+
version: 'string',
|
|
46
|
+
},
|
|
47
|
+
remove: { noConfirm: 'boolean' },
|
|
48
|
+
typegen: { noConfirm: 'boolean', output: 'string', token: 'string', url: 'string' },
|
|
49
|
+
},
|
|
39
50
|
frontend: {
|
|
40
51
|
angular: { branch: 'string', copy: 'string', link: 'string', localize: 'boolean', noConfirm: 'boolean' },
|
|
41
52
|
nuxt: { branch: 'string', copy: 'string', link: 'string' },
|
|
@@ -146,6 +157,9 @@ function validateConfig(config, knownKeys, path = '') {
|
|
|
146
157
|
else if (expectedType === 'boolean' && typeof value !== 'boolean') {
|
|
147
158
|
result.errors.push(`${currentPath}: expected boolean, got ${typeof value}`);
|
|
148
159
|
}
|
|
160
|
+
else if (expectedType === 'number' && typeof value !== 'number') {
|
|
161
|
+
result.errors.push(`${currentPath}: expected number, got ${typeof value}`);
|
|
162
|
+
}
|
|
149
163
|
else if (expectedType === 'array' && !Array.isArray(value)) {
|
|
150
164
|
result.errors.push(`${currentPath}: expected array, got ${typeof value}`);
|
|
151
165
|
}
|
|
@@ -283,4 +297,4 @@ const ValidateCommand = {
|
|
|
283
297
|
}),
|
|
284
298
|
};
|
|
285
299
|
exports.default = ValidateCommand;
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvY29uZmlnL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsK0JBQTRCO0FBSzVCOzs7R0FHRztBQUNILE1BQU0sVUFBVSxHQUF3QztJQUN0RCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1NBQzlCO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7U0FDcEU7UUFDRCxVQUFVLEVBQUU7WUFDVixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1NBQzlCO1FBQ0QsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtTQUMvQjtRQUNELFVBQVUsRUFBRTtZQUNWLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLFVBQVUsRUFBRSxRQUFRO1NBQ3JCO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1lBQ3hHLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1NBQzNEO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFLFFBQVE7WUFDbkIsT0FBTyxF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
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvY29uZmlnL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsK0JBQTRCO0FBSzVCOzs7R0FHRztBQUNILE1BQU0sVUFBVSxHQUF3QztJQUN0RCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1NBQzlCO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7U0FDcEU7UUFDRCxVQUFVLEVBQUU7WUFDVixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1NBQzlCO1FBQ0QsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtTQUMvQjtRQUNELFVBQVUsRUFBRTtZQUNWLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLFVBQVUsRUFBRSxRQUFRO1NBQ3JCO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsUUFBUTtnQkFDZCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsT0FBTyxFQUFFLFFBQVE7YUFDbEI7WUFDRCxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEs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
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
/**
|
|
13
|
+
* Directus commands
|
|
14
|
+
*/
|
|
15
|
+
const command = {
|
|
16
|
+
alias: ['di'],
|
|
17
|
+
description: 'Directus commands',
|
|
18
|
+
hidden: false,
|
|
19
|
+
name: 'directus',
|
|
20
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
yield toolbox.helper.showMenu('directus', {
|
|
22
|
+
headline: 'Directus Commands',
|
|
23
|
+
});
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
exports.default = command;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZGlyZWN0dXMvZGlyZWN0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQU0sT0FBTyxHQUFHO0lBQ2QsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2IsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxVQUFVO0lBQ2hCLEdBQUcsRUFBRSxDQUFPLE9BQStCLEVBQUUsRUFBRTtRQUM3QyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUN4QyxRQUFRLEVBQUUsbUJBQW1CO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQTtDQUNGLENBQUM7QUFFRixrQkFBZSxPQUFPLENBQUMifQ==
|
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const crypto = require("crypto");
|
|
13
|
+
const net = require("net");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
/**
|
|
16
|
+
* Find next available port starting from a given port
|
|
17
|
+
*/
|
|
18
|
+
function findAvailablePort(startPort_1) {
|
|
19
|
+
return __awaiter(this, arguments, void 0, function* (startPort, maxAttempts = 100) {
|
|
20
|
+
for (let port = startPort; port < startPort + maxAttempts; port++) {
|
|
21
|
+
if (yield isPortAvailable(port)) {
|
|
22
|
+
return port;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`No available port found between ${startPort} and ${startPort + maxAttempts}`);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a port is available
|
|
30
|
+
*/
|
|
31
|
+
function isPortAvailable(port) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
return new Promise((resolve) => {
|
|
34
|
+
const server = net.createServer();
|
|
35
|
+
server.once('error', () => {
|
|
36
|
+
resolve(false);
|
|
37
|
+
});
|
|
38
|
+
server.once('listening', () => {
|
|
39
|
+
server.close();
|
|
40
|
+
resolve(true);
|
|
41
|
+
});
|
|
42
|
+
server.listen(port, '0.0.0.0');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate instance name for Docker compatibility
|
|
48
|
+
* Docker container names must match: ^[a-zA-Z0-9][a-zA-Z0-9_.-]*$
|
|
49
|
+
*/
|
|
50
|
+
function validateInstanceName(name) {
|
|
51
|
+
// Docker container names must start with alphanumeric and can contain alphanumeric, underscore, period, hyphen
|
|
52
|
+
const dockerNamePattern = /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/;
|
|
53
|
+
if (!name || name.length === 0) {
|
|
54
|
+
return { error: 'Instance name cannot be empty', isValid: false };
|
|
55
|
+
}
|
|
56
|
+
if (name.length > 128) {
|
|
57
|
+
return { error: 'Instance name cannot exceed 128 characters', isValid: false };
|
|
58
|
+
}
|
|
59
|
+
if (!dockerNamePattern.test(name)) {
|
|
60
|
+
// Check for common issues to provide helpful error messages
|
|
61
|
+
if (/[äöüÄÖÜß]/.test(name)) {
|
|
62
|
+
return {
|
|
63
|
+
error: `Instance name contains umlauts (${name}). Docker container names only allow: letters (a-z, A-Z), numbers (0-9), underscores (_), periods (.), and hyphens (-)`,
|
|
64
|
+
isValid: false,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (/\s/.test(name)) {
|
|
68
|
+
return { error: 'Instance name cannot contain spaces', isValid: false };
|
|
69
|
+
}
|
|
70
|
+
if (/^[^a-zA-Z0-9]/.test(name)) {
|
|
71
|
+
return { error: 'Instance name must start with a letter or number', isValid: false };
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
error: `Instance name "${name}" contains invalid characters. Only letters (a-z, A-Z), numbers (0-9), underscores (_), periods (.), and hyphens (-) are allowed`,
|
|
75
|
+
isValid: false,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return { isValid: true };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Setup a new local Directus Docker instance
|
|
82
|
+
*/
|
|
83
|
+
const NewCommand = {
|
|
84
|
+
alias: ['ds'],
|
|
85
|
+
description: 'Setup Docker instance',
|
|
86
|
+
hidden: false,
|
|
87
|
+
name: 'docker-setup',
|
|
88
|
+
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
89
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
90
|
+
// Retrieve the tools we need
|
|
91
|
+
const { config, filesystem, parameters, print: { error, info, spin, success, warning }, prompt, system, template, } = toolbox;
|
|
92
|
+
// Check if Docker is installed
|
|
93
|
+
if (!system.which('docker')) {
|
|
94
|
+
error('Docker is not installed. Please install Docker first.');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Load configuration
|
|
98
|
+
const ltConfig = config.loadConfig();
|
|
99
|
+
// Parse CLI arguments
|
|
100
|
+
const cliName = parameters.options.name || parameters.options.n;
|
|
101
|
+
const cliVersion = parameters.options.version || parameters.options.v;
|
|
102
|
+
const cliDatabase = parameters.options.database || parameters.options.db;
|
|
103
|
+
const cliPort = parameters.options.port || parameters.options.p;
|
|
104
|
+
// Determine noConfirm with priority: CLI > command > global > default
|
|
105
|
+
const noConfirm = config.getNoConfirm({
|
|
106
|
+
cliValue: parameters.options.noConfirm,
|
|
107
|
+
commandConfig: (_b = (_a = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _a === void 0 ? void 0 : _a.directus) === null || _b === void 0 ? void 0 : _b.dockerSetup,
|
|
108
|
+
config: ltConfig,
|
|
109
|
+
});
|
|
110
|
+
// Get configuration values
|
|
111
|
+
const configName = (_e = (_d = (_c = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _c === void 0 ? void 0 : _c.directus) === null || _d === void 0 ? void 0 : _d.dockerSetup) === null || _e === void 0 ? void 0 : _e.name;
|
|
112
|
+
const configVersion = (_h = (_g = (_f = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _f === void 0 ? void 0 : _f.directus) === null || _g === void 0 ? void 0 : _g.dockerSetup) === null || _h === void 0 ? void 0 : _h.version;
|
|
113
|
+
const configDatabase = (_l = (_k = (_j = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _j === void 0 ? void 0 : _j.directus) === null || _k === void 0 ? void 0 : _k.dockerSetup) === null || _l === void 0 ? void 0 : _l.database;
|
|
114
|
+
// Determine instance name
|
|
115
|
+
let instanceName;
|
|
116
|
+
if (cliName && typeof cliName === 'string') {
|
|
117
|
+
instanceName = cliName;
|
|
118
|
+
}
|
|
119
|
+
else if (configName) {
|
|
120
|
+
instanceName = configName;
|
|
121
|
+
info(`Using instance name from lt.config: ${instanceName}`);
|
|
122
|
+
}
|
|
123
|
+
else if (noConfirm) {
|
|
124
|
+
instanceName = 'directus';
|
|
125
|
+
info(`Using default instance name: ${instanceName}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const nameResponse = yield prompt.ask({
|
|
129
|
+
initial: 'directus',
|
|
130
|
+
message: 'Enter instance name:',
|
|
131
|
+
name: 'name',
|
|
132
|
+
type: 'input',
|
|
133
|
+
});
|
|
134
|
+
instanceName = nameResponse.name;
|
|
135
|
+
}
|
|
136
|
+
if (!instanceName) {
|
|
137
|
+
error('Instance name is required!');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Validate instance name for Docker compatibility
|
|
141
|
+
const validation = validateInstanceName(instanceName);
|
|
142
|
+
if (!validation.isValid) {
|
|
143
|
+
error(validation.error);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Determine Directus version
|
|
147
|
+
let version;
|
|
148
|
+
if (cliVersion && typeof cliVersion === 'string') {
|
|
149
|
+
version = cliVersion;
|
|
150
|
+
}
|
|
151
|
+
else if (configVersion) {
|
|
152
|
+
version = configVersion;
|
|
153
|
+
info(`Using Directus version from lt.config: ${version}`);
|
|
154
|
+
}
|
|
155
|
+
else if (noConfirm) {
|
|
156
|
+
version = 'latest';
|
|
157
|
+
info(`Using default Directus version: ${version}`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const versionResponse = yield prompt.ask({
|
|
161
|
+
initial: 'latest',
|
|
162
|
+
message: 'Enter Directus version (e.g., latest, 10, 10.8.0):',
|
|
163
|
+
name: 'version',
|
|
164
|
+
type: 'input',
|
|
165
|
+
});
|
|
166
|
+
version = versionResponse.version;
|
|
167
|
+
}
|
|
168
|
+
if (!version) {
|
|
169
|
+
error('Directus version is required!');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Determine database type
|
|
173
|
+
let database;
|
|
174
|
+
const databaseChoices = [
|
|
175
|
+
{ message: 'PostgreSQL (recommended)', name: 'postgres' },
|
|
176
|
+
{ message: 'MySQL', name: 'mysql' },
|
|
177
|
+
{ message: 'SQLite', name: 'sqlite' },
|
|
178
|
+
];
|
|
179
|
+
if (cliDatabase && typeof cliDatabase === 'string') {
|
|
180
|
+
const validDatabases = ['postgres', 'postgresql', 'mysql', 'sqlite'];
|
|
181
|
+
const normalizedDb = cliDatabase.toLowerCase();
|
|
182
|
+
if (!validDatabases.includes(normalizedDb)) {
|
|
183
|
+
error(`Invalid database type: ${cliDatabase}. Valid options: postgres, mysql, sqlite`);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
database = (normalizedDb === 'postgresql' ? 'postgres' : normalizedDb);
|
|
187
|
+
}
|
|
188
|
+
else if (configDatabase) {
|
|
189
|
+
database = configDatabase;
|
|
190
|
+
info(`Using database type from lt.config: ${database}`);
|
|
191
|
+
}
|
|
192
|
+
else if (noConfirm) {
|
|
193
|
+
database = 'postgres';
|
|
194
|
+
info(`Using default database type: ${database}`);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
const result = yield prompt.ask({
|
|
198
|
+
choices: databaseChoices,
|
|
199
|
+
initial: 0,
|
|
200
|
+
message: 'Select database type:',
|
|
201
|
+
name: 'database',
|
|
202
|
+
type: 'select',
|
|
203
|
+
});
|
|
204
|
+
database = result.database;
|
|
205
|
+
}
|
|
206
|
+
if (!database) {
|
|
207
|
+
error('Database type is required!');
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
// Determine instance directory
|
|
211
|
+
const directusDir = (0, path_1.join)(filesystem.homedir(), '.lt', 'directus', instanceName);
|
|
212
|
+
const instanceExists = filesystem.exists(directusDir);
|
|
213
|
+
// Check if instance already exists
|
|
214
|
+
if (instanceExists && !parameters.options.update) {
|
|
215
|
+
if (noConfirm) {
|
|
216
|
+
error(`Instance "${instanceName}" already exists. Use --update to modify it.`);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const shouldUpdate = yield prompt.confirm(`Instance "${instanceName}" already exists. Update it?`);
|
|
220
|
+
if (!shouldUpdate) {
|
|
221
|
+
info('Operation cancelled.');
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (instanceExists) {
|
|
226
|
+
info(`Updating existing instance: ${instanceName}`);
|
|
227
|
+
}
|
|
228
|
+
// Read existing .env if updating to preserve secrets
|
|
229
|
+
const existingEnv = {};
|
|
230
|
+
if (instanceExists) {
|
|
231
|
+
const envPath = (0, path_1.join)(directusDir, '.env');
|
|
232
|
+
if (filesystem.exists(envPath)) {
|
|
233
|
+
const envContent = filesystem.read(envPath);
|
|
234
|
+
if (envContent) {
|
|
235
|
+
// Parse .env file
|
|
236
|
+
envContent.split('\n').forEach((line) => {
|
|
237
|
+
const match = line.match(/^([A-Z_]+)=(.+)$/);
|
|
238
|
+
if (match) {
|
|
239
|
+
existingEnv[match[1]] = match[2].replace(/^['"]|['"]$/g, '');
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Generate random secrets (or use existing ones if updating)
|
|
246
|
+
const generateSecret = () => {
|
|
247
|
+
return crypto.randomBytes(32).toString('hex');
|
|
248
|
+
};
|
|
249
|
+
const keySecret = existingEnv.KEY || generateSecret();
|
|
250
|
+
const adminSecret = existingEnv.SECRET || generateSecret();
|
|
251
|
+
// Database configuration (use existing passwords if updating)
|
|
252
|
+
const dbConfig = {
|
|
253
|
+
mysql: {
|
|
254
|
+
adminPassword: existingEnv.MYSQL_ROOT_PASSWORD || generateSecret(),
|
|
255
|
+
client: 'mysql',
|
|
256
|
+
database: 'directus',
|
|
257
|
+
image: 'mysql:8',
|
|
258
|
+
password: existingEnv.DB_PASSWORD || generateSecret(),
|
|
259
|
+
port: 3306,
|
|
260
|
+
user: 'directus',
|
|
261
|
+
},
|
|
262
|
+
postgres: {
|
|
263
|
+
client: 'pg',
|
|
264
|
+
database: 'directus',
|
|
265
|
+
image: 'postgres:16',
|
|
266
|
+
password: existingEnv.DB_PASSWORD || generateSecret(),
|
|
267
|
+
port: 5432,
|
|
268
|
+
user: 'directus',
|
|
269
|
+
},
|
|
270
|
+
sqlite: {
|
|
271
|
+
client: 'sqlite3',
|
|
272
|
+
database: '/directus/database/data.db',
|
|
273
|
+
image: null, // SQLite doesn't need a separate container
|
|
274
|
+
password: null,
|
|
275
|
+
port: null,
|
|
276
|
+
user: null,
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
const selectedDbConfig = dbConfig[database];
|
|
280
|
+
// Determine port (CLI > existing > config > auto-detect)
|
|
281
|
+
let directusPort;
|
|
282
|
+
const configPort = (_p = (_o = (_m = ltConfig === null || ltConfig === void 0 ? void 0 : ltConfig.commands) === null || _m === void 0 ? void 0 : _m.directus) === null || _o === void 0 ? void 0 : _o.dockerSetup) === null || _p === void 0 ? void 0 : _p.port;
|
|
283
|
+
if (cliPort && typeof cliPort !== 'boolean') {
|
|
284
|
+
directusPort = Number.parseInt(String(cliPort), 10);
|
|
285
|
+
if (Number.isNaN(directusPort) || directusPort < 1 || directusPort > 65535) {
|
|
286
|
+
error(`Invalid port: ${cliPort}. Must be between 1 and 65535.`);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
info(`Using port from CLI: ${directusPort}`);
|
|
290
|
+
}
|
|
291
|
+
else if (existingEnv.DIRECTUS_PORT) {
|
|
292
|
+
directusPort = Number.parseInt(existingEnv.DIRECTUS_PORT, 10);
|
|
293
|
+
info(`Using existing port: ${directusPort}`);
|
|
294
|
+
}
|
|
295
|
+
else if (configPort) {
|
|
296
|
+
directusPort = configPort;
|
|
297
|
+
info(`Using port from lt.config: ${directusPort}`);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
// Auto-detect available port starting from 8055
|
|
301
|
+
const portSpin = spin('Finding available port');
|
|
302
|
+
try {
|
|
303
|
+
directusPort = yield findAvailablePort(8055);
|
|
304
|
+
portSpin.succeed();
|
|
305
|
+
info(`Found available port: ${directusPort}`);
|
|
306
|
+
}
|
|
307
|
+
catch (portError) {
|
|
308
|
+
portSpin.fail('Failed to find available port');
|
|
309
|
+
if (portError instanceof Error) {
|
|
310
|
+
error(portError.message);
|
|
311
|
+
}
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Create instance directory
|
|
316
|
+
const dirSpin = spin('Preparing instance directory');
|
|
317
|
+
try {
|
|
318
|
+
filesystem.dir(directusDir);
|
|
319
|
+
dirSpin.succeed();
|
|
320
|
+
}
|
|
321
|
+
catch (dirError) {
|
|
322
|
+
dirSpin.fail('Failed to create instance directory');
|
|
323
|
+
if (dirError instanceof Error) {
|
|
324
|
+
error(dirError.message);
|
|
325
|
+
}
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
// Generate docker-compose.yml
|
|
329
|
+
const composeSpin = spin('Generating docker-compose.yml');
|
|
330
|
+
try {
|
|
331
|
+
yield template.generate({
|
|
332
|
+
props: {
|
|
333
|
+
dbConfig: selectedDbConfig,
|
|
334
|
+
dbType: database,
|
|
335
|
+
instanceName,
|
|
336
|
+
version,
|
|
337
|
+
},
|
|
338
|
+
target: (0, path_1.join)(directusDir, 'docker-compose.yml'),
|
|
339
|
+
template: 'directus/docker-compose.yml.ejs',
|
|
340
|
+
});
|
|
341
|
+
composeSpin.succeed();
|
|
342
|
+
}
|
|
343
|
+
catch (composeError) {
|
|
344
|
+
composeSpin.fail('Failed to generate docker-compose.yml');
|
|
345
|
+
if (composeError instanceof Error) {
|
|
346
|
+
error(composeError.message);
|
|
347
|
+
}
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
// Generate .env file
|
|
351
|
+
const envSpin = spin('Generating .env file');
|
|
352
|
+
try {
|
|
353
|
+
yield template.generate({
|
|
354
|
+
props: {
|
|
355
|
+
adminEmail: 'admin@example.com',
|
|
356
|
+
adminPassword: 'admin',
|
|
357
|
+
adminSecret,
|
|
358
|
+
dbConfig: selectedDbConfig,
|
|
359
|
+
dbType: database,
|
|
360
|
+
keySecret,
|
|
361
|
+
port: directusPort,
|
|
362
|
+
version,
|
|
363
|
+
},
|
|
364
|
+
target: (0, path_1.join)(directusDir, '.env'),
|
|
365
|
+
template: 'directus/.env.ejs',
|
|
366
|
+
});
|
|
367
|
+
envSpin.succeed();
|
|
368
|
+
}
|
|
369
|
+
catch (envError) {
|
|
370
|
+
envSpin.fail('Failed to generate .env file');
|
|
371
|
+
if (envError instanceof Error) {
|
|
372
|
+
error(envError.message);
|
|
373
|
+
}
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
// Generate README.md
|
|
377
|
+
const readmeSpin = spin('Generating README.md');
|
|
378
|
+
try {
|
|
379
|
+
yield template.generate({
|
|
380
|
+
props: {
|
|
381
|
+
dbType: database,
|
|
382
|
+
instanceName,
|
|
383
|
+
port: directusPort,
|
|
384
|
+
},
|
|
385
|
+
target: (0, path_1.join)(directusDir, 'README.md'),
|
|
386
|
+
template: 'directus/README.md.ejs',
|
|
387
|
+
});
|
|
388
|
+
readmeSpin.succeed();
|
|
389
|
+
}
|
|
390
|
+
catch (readmeError) {
|
|
391
|
+
readmeSpin.fail('Failed to generate README.md');
|
|
392
|
+
if (readmeError instanceof Error) {
|
|
393
|
+
error(readmeError.message);
|
|
394
|
+
}
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
// Stop existing containers if updating
|
|
398
|
+
if (instanceExists) {
|
|
399
|
+
const stopSpin = spin('Stopping existing containers');
|
|
400
|
+
try {
|
|
401
|
+
yield system.run(`cd ${directusDir} && docker-compose down`);
|
|
402
|
+
stopSpin.succeed();
|
|
403
|
+
}
|
|
404
|
+
catch (stopError) {
|
|
405
|
+
stopSpin.fail('Failed to stop existing containers');
|
|
406
|
+
if (stopError instanceof Error) {
|
|
407
|
+
error(stopError.message);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
// Start Directus with docker-compose
|
|
412
|
+
const startSpin = spin('Starting Directus instance');
|
|
413
|
+
try {
|
|
414
|
+
yield system.run(`cd ${directusDir} && docker-compose up -d`);
|
|
415
|
+
startSpin.succeed();
|
|
416
|
+
}
|
|
417
|
+
catch (startError) {
|
|
418
|
+
startSpin.fail('Failed to start Directus');
|
|
419
|
+
if (startError instanceof Error) {
|
|
420
|
+
error(startError.message);
|
|
421
|
+
}
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
// Success message
|
|
425
|
+
success(`Directus Docker setup ${instanceExists ? 'updated' : 'created'} successfully!`);
|
|
426
|
+
info('');
|
|
427
|
+
info('Configuration stored at:');
|
|
428
|
+
info(` ${directusDir}`);
|
|
429
|
+
info('');
|
|
430
|
+
info('Instance details:');
|
|
431
|
+
info(` - Name: ${instanceName}`);
|
|
432
|
+
info(` - Version: ${version}`);
|
|
433
|
+
info(` - Database: ${database}`);
|
|
434
|
+
info(` - Port: ${directusPort}`);
|
|
435
|
+
info('');
|
|
436
|
+
// Only display secrets if this is a new instance (not updating)
|
|
437
|
+
if (!existingEnv.KEY) {
|
|
438
|
+
warning('Generated secrets (SAVE THESE):');
|
|
439
|
+
info(` KEY: ${keySecret}`);
|
|
440
|
+
info(` SECRET: ${adminSecret}`);
|
|
441
|
+
if (selectedDbConfig.password) {
|
|
442
|
+
info(` DB_PASSWORD: ${selectedDbConfig.password}`);
|
|
443
|
+
}
|
|
444
|
+
if (database === 'mysql' && dbConfig.mysql.adminPassword) {
|
|
445
|
+
info(` MYSQL_ROOT_PASSWORD: ${dbConfig.mysql.adminPassword}`);
|
|
446
|
+
}
|
|
447
|
+
info('');
|
|
448
|
+
}
|
|
449
|
+
info('Default admin credentials:');
|
|
450
|
+
info(' Email: admin@example.com');
|
|
451
|
+
info(' Password: admin');
|
|
452
|
+
info(` URL: http://localhost:${directusPort}`);
|
|
453
|
+
info('');
|
|
454
|
+
info('');
|
|
455
|
+
info('Management commands:');
|
|
456
|
+
info(` Start: cd ${directusDir} && docker-compose up -d`);
|
|
457
|
+
info(` Stop: cd ${directusDir} && docker-compose down`);
|
|
458
|
+
info(` Restart: cd ${directusDir} && docker-compose restart`);
|
|
459
|
+
info(` Logs: cd ${directusDir} && docker-compose logs -f`);
|
|
460
|
+
info('');
|
|
461
|
+
info(`Full documentation: ${directusDir}/README.md`);
|
|
462
|
+
// Exit if not running from menu
|
|
463
|
+
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
464
|
+
process.exit();
|
|
465
|
+
}
|
|
466
|
+
// For tests
|
|
467
|
+
return `${instanceExists ? 'updated' : 'created'} directus docker setup ${instanceName}`;
|
|
468
|
+
}),
|
|
469
|
+
};
|
|
470
|
+
exports.default = NewCommand;
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2VyLXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2RpcmVjdHVzL2RvY2tlci1zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLGlDQUFpQztBQUVqQywyQkFBMkI7QUFDM0IsK0JBQTRCO0FBSTVCOztHQUVHO0FBQ0gsU0FBZSxpQkFBaUI7eURBQUMsU0FBaUIsRUFBRSxXQUFXLEdBQUcsR0FBRztRQUNuRSxLQUFLLElBQUksSUFBSSxHQUFHLFNBQVMsRUFBRSxJQUFJLEdBQUcsU0FBUyxHQUFHLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2xFLElBQUksTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLFNBQVMsUUFBUSxTQUFTLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQUE7QUFFRDs7R0FFRztBQUNILFNBQWUsZUFBZSxDQUFDLElBQVk7O1FBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFB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
|