gtx-cli 1.2.0-alpha.1 → 1.2.0-alpha.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/dist/cli/base.js +18 -3
- package/dist/console/logging.d.ts +1 -1
- package/dist/setup/wizard.js +12 -31
- package/dist/utils/installPackage.d.ts +1 -1
- package/dist/utils/installPackage.js +4 -1
- package/dist/utils/packageJson.d.ts +1 -1
- package/dist/utils/packageJson.js +4 -2
- package/dist/utils/packageManager.d.ts +3 -1
- package/dist/utils/packageManager.js +34 -2
- package/package.json +1 -1
package/dist/cli/base.js
CHANGED
|
@@ -60,6 +60,8 @@ const supportedFiles_1 = require("../formats/files/supportedFiles");
|
|
|
60
60
|
const wizard_1 = require("../setup/wizard");
|
|
61
61
|
const packageJson_1 = require("../utils/packageJson");
|
|
62
62
|
const userInput_1 = require("../setup/userInput");
|
|
63
|
+
const installPackage_1 = require("../utils/installPackage");
|
|
64
|
+
const packageManager_1 = require("../utils/packageManager");
|
|
63
65
|
class BaseCLI {
|
|
64
66
|
// Constructor is shared amongst all CLI class types
|
|
65
67
|
constructor(library, additionalModules) {
|
|
@@ -112,7 +114,9 @@ class BaseCLI {
|
|
|
112
114
|
if (wrap) {
|
|
113
115
|
(0, console_1.logInfo)(`${chalk_1.default.yellow('[EXPERIMENTAL]')} Running React setup wizard...`);
|
|
114
116
|
yield this.handleSetupReactCommand(options);
|
|
115
|
-
(0, console_1.endCommand)(`Done!
|
|
117
|
+
(0, console_1.endCommand)(`Done! Since this wizard is experimental, please review the changes and make modifications as needed.
|
|
118
|
+
Certain aspects of your app may still need manual setup.
|
|
119
|
+
See the docs for more information: https://generaltranslation.com/docs/react/tutorials/quickstart`);
|
|
116
120
|
ranReactSetup = true;
|
|
117
121
|
}
|
|
118
122
|
}
|
|
@@ -121,7 +125,7 @@ class BaseCLI {
|
|
|
121
125
|
}
|
|
122
126
|
// Configure gt.config.json
|
|
123
127
|
yield this.handleInitCommand(ranReactSetup);
|
|
124
|
-
(0, console_1.endCommand)(
|
|
128
|
+
(0, console_1.endCommand)('Done! Remember to get an API key and project ID from the dashboard! https://dash.generaltranslation.com');
|
|
125
129
|
}));
|
|
126
130
|
}
|
|
127
131
|
setupConfigureCommand() {
|
|
@@ -259,9 +263,20 @@ class BaseCLI {
|
|
|
259
263
|
(0, setupConfig_1.default)(configFilepath, {
|
|
260
264
|
defaultLocale,
|
|
261
265
|
locales,
|
|
262
|
-
files,
|
|
266
|
+
files: Object.keys(files).length > 0 ? files : undefined,
|
|
263
267
|
});
|
|
264
268
|
(0, console_1.logSuccess)(`Feel free to edit ${chalk_1.default.cyan(configFilepath)} to customize your translation setup. Docs: https://generaltranslation.com/docs/cli/reference/config`);
|
|
269
|
+
// Install gtx-cli if not installed
|
|
270
|
+
const isCLIInstalled = packageJson
|
|
271
|
+
? (0, packageJson_1.isPackageInstalled)('gtx-cli', packageJson, true, true)
|
|
272
|
+
: true; // if no package.json, we can't install it
|
|
273
|
+
if (!isCLIInstalled) {
|
|
274
|
+
const packageManager = yield (0, packageManager_1.getPackageManager)();
|
|
275
|
+
const spinner = (0, console_1.createSpinner)();
|
|
276
|
+
spinner.start(`Installing gtx-cli as a dev dependency with ${packageManager.name}...`);
|
|
277
|
+
yield (0, installPackage_1.installPackage)('gtx-cli', packageManager, true);
|
|
278
|
+
spinner.stop(chalk_1.default.green('Installed gtx-cli.'));
|
|
279
|
+
}
|
|
265
280
|
});
|
|
266
281
|
}
|
|
267
282
|
}
|
|
@@ -22,7 +22,7 @@ export declare function promptText({ message, defaultValue, validate, }: {
|
|
|
22
22
|
defaultValue?: string;
|
|
23
23
|
validate?: (value: string) => boolean | string;
|
|
24
24
|
}): Promise<string>;
|
|
25
|
-
export declare function promptSelect<T
|
|
25
|
+
export declare function promptSelect<T>({ message, options, defaultValue, }: {
|
|
26
26
|
message: string;
|
|
27
27
|
options: Array<{
|
|
28
28
|
value: T;
|
package/dist/setup/wizard.js
CHANGED
|
@@ -64,31 +64,19 @@ Please let us know what you would like to see supported at https://github.com/ge
|
|
|
64
64
|
// Check if gt-next or gt-react is installed
|
|
65
65
|
if (frameworkType === 'next-app' &&
|
|
66
66
|
!(0, packageJson_1.isPackageInstalled)('gt-next', packageJson)) {
|
|
67
|
-
const packageManager = (0, packageManager_1.getPackageManager)();
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
spinner.stop(chalk_1.default.green('Automatically installed gt-next.'));
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
(0, console_2.logInfo)('Please first install gt-next as a dependency, then re-run this command.');
|
|
76
|
-
process.exit(0);
|
|
77
|
-
}
|
|
67
|
+
const packageManager = yield (0, packageManager_1.getPackageManager)();
|
|
68
|
+
const spinner = (0, console_1.createSpinner)('timer');
|
|
69
|
+
spinner.start(`Installing gt-next with ${packageManager.name}...`);
|
|
70
|
+
yield (0, installPackage_1.installPackage)('gt-next', packageManager);
|
|
71
|
+
spinner.stop(chalk_1.default.green('Automatically installed gt-next.'));
|
|
78
72
|
}
|
|
79
73
|
else if (['next-pages', 'react', 'redwood', 'vite', 'gatsby'].includes(frameworkType) &&
|
|
80
74
|
!(0, packageJson_1.isPackageInstalled)('gt-react', packageJson)) {
|
|
81
|
-
const packageManager = (0, packageManager_1.getPackageManager)();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
spinner.stop(chalk_1.default.green('Automatically installed gt-react.'));
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
(0, console_2.logInfo)('Please first install gt-react as a dependency, then re-run this command.');
|
|
90
|
-
process.exit(0);
|
|
91
|
-
}
|
|
75
|
+
const packageManager = yield (0, packageManager_1.getPackageManager)();
|
|
76
|
+
const spinner = (0, console_1.createSpinner)('timer');
|
|
77
|
+
spinner.start(`Installing gt-react with ${packageManager.name}...`);
|
|
78
|
+
yield (0, installPackage_1.installPackage)('gt-react', packageManager);
|
|
79
|
+
spinner.stop(chalk_1.default.green('Automatically installed gt-react.'));
|
|
92
80
|
}
|
|
93
81
|
// ----- Create a starter gt.config.json file -----
|
|
94
82
|
(0, generateSettings_1.generateSettings)(options);
|
|
@@ -125,9 +113,7 @@ Please let us know what you would like to see supported at https://github.com/ge
|
|
|
125
113
|
// Wrap all JSX elements in the src directory with a <T> tag, with unique ids
|
|
126
114
|
const { filesUpdated: filesUpdatedNext } = yield (0, scanForContent_2.default)(mergeOptions, 'gt-next', errors, warnings);
|
|
127
115
|
filesUpdated = [...filesUpdated, ...filesUpdatedNext];
|
|
128
|
-
spinner.stop(chalk_1.default.green(
|
|
129
|
-
chalk_1.default.bold.cyan(filesUpdatedNext.length) +
|
|
130
|
-
chalk_1.default.green(' files.'));
|
|
116
|
+
spinner.stop(chalk_1.default.green(`Success! Added <T> tags and updated ${chalk_1.default.bold.cyan(filesUpdated.length)} files:\n`) + filesUpdated.map((file) => `${chalk_1.default.green('-')} ${file}`).join('\n'));
|
|
131
117
|
if (addWithGTConfig) {
|
|
132
118
|
// Add the withGTConfig() function to the next.config.js file
|
|
133
119
|
yield (0, handleInitGT_1.default)(nextConfigPath, errors, warnings, filesUpdated);
|
|
@@ -157,9 +143,7 @@ Please let us know what you would like to see supported at https://github.com/ge
|
|
|
157
143
|
// Wrap all JSX elements in the src directory with a <T> tag, with unique ids
|
|
158
144
|
const { filesUpdated: filesUpdatedReact } = yield (0, scanForContent_1.default)(mergeOptions, 'gt-react', frameworkType, errors, warnings);
|
|
159
145
|
filesUpdated = [...filesUpdated, ...filesUpdatedReact];
|
|
160
|
-
spinner.stop(chalk_1.default.green(
|
|
161
|
-
chalk_1.default.bold.cyan(filesUpdatedReact.length) +
|
|
162
|
-
chalk_1.default.green(' files.'));
|
|
146
|
+
spinner.stop(chalk_1.default.green(`Success! Added <T> tags and updated ${chalk_1.default.bold.cyan(filesUpdated.length)} files:\n`) + filesUpdated.map((file) => `${chalk_1.default.green('-')} ${file}`).join('\n'));
|
|
163
147
|
if (errors.length > 0) {
|
|
164
148
|
(0, console_2.logError)(chalk_1.default.red('Failed to write files:\n') + errors.join('\n'));
|
|
165
149
|
}
|
|
@@ -182,8 +166,5 @@ Please let us know what you would like to see supported at https://github.com/ge
|
|
|
182
166
|
// Format updated files if formatters are available
|
|
183
167
|
if (applyFormatting)
|
|
184
168
|
yield (0, postProcess_2.formatFiles)(filesUpdated, formatter);
|
|
185
|
-
if (filesUpdated.length > 0) {
|
|
186
|
-
(0, console_2.logStep)('Please review the changes before committing.');
|
|
187
|
-
}
|
|
188
169
|
});
|
|
189
170
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { PackageManager } from './packageManager';
|
|
2
|
-
export declare function installPackage(packageName: string, packageManager: PackageManager): Promise<void>;
|
|
2
|
+
export declare function installPackage(packageName: string, packageManager: PackageManager, asDevDependency?: boolean): Promise<void>;
|
|
@@ -16,11 +16,14 @@ exports.installPackage = installPackage;
|
|
|
16
16
|
const chalk_1 = __importDefault(require("chalk"));
|
|
17
17
|
const child_process_1 = require("child_process");
|
|
18
18
|
const console_1 = require("../console");
|
|
19
|
-
function installPackage(packageName, packageManager) {
|
|
19
|
+
function installPackage(packageName, packageManager, asDevDependency) {
|
|
20
20
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
21
|
return new Promise((resolve, reject) => {
|
|
22
22
|
const command = packageManager.name;
|
|
23
23
|
const args = [packageManager.installCommand, packageName];
|
|
24
|
+
if (asDevDependency) {
|
|
25
|
+
args.push(packageManager.devDependencyFlag);
|
|
26
|
+
}
|
|
24
27
|
const childProcess = (0, child_process_1.spawn)(command, args, {
|
|
25
28
|
stdio: ['pipe', 'ignore', 'pipe'],
|
|
26
29
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare function searchForPackageJson(): Record<string, any> | null;
|
|
2
2
|
export declare function getPackageJson(): Record<string, any>;
|
|
3
3
|
export declare function updatePackageJson(packageJson: Record<string, any>): void;
|
|
4
|
-
export declare function isPackageInstalled(packageName: string, packageJson: Record<string, any>, asDevDependency?: boolean): boolean;
|
|
4
|
+
export declare function isPackageInstalled(packageName: string, packageJson: Record<string, any>, asDevDependency?: boolean, checkBoth?: boolean): boolean;
|
|
5
5
|
export declare function getPackageVersion(packageName: string, packageJson: Record<string, any>): string | undefined;
|
|
@@ -54,8 +54,10 @@ function updatePackageJson(packageJson) {
|
|
|
54
54
|
process.exit(1);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// check if a package is installed in the package.json file
|
|
58
|
+
function isPackageInstalled(packageName, packageJson, asDevDependency = false, checkBoth = false) {
|
|
59
|
+
const dependencies = checkBoth
|
|
60
|
+
? Object.assign(Object.assign({}, packageJson.devDependencies), packageJson.dependencies) : asDevDependency
|
|
59
61
|
? packageJson.devDependencies
|
|
60
62
|
: packageJson.dependencies;
|
|
61
63
|
if (!dependencies) {
|
|
@@ -6,6 +6,7 @@ export interface PackageManager {
|
|
|
6
6
|
runScriptCommand: string;
|
|
7
7
|
flags: string;
|
|
8
8
|
forceInstallFlag: string;
|
|
9
|
+
devDependencyFlag: string;
|
|
9
10
|
registry?: string;
|
|
10
11
|
detect: () => boolean;
|
|
11
12
|
addOverride: (pkgName: string, pkgVersion: string) => Promise<void>;
|
|
@@ -18,4 +19,5 @@ export declare const YARN_V2: PackageManager;
|
|
|
18
19
|
export declare const PNPM: PackageManager;
|
|
19
20
|
export declare const NPM: PackageManager;
|
|
20
21
|
export declare const packageManagers: PackageManager[];
|
|
21
|
-
export declare function
|
|
22
|
+
export declare function _detectPackageManger(managers?: PackageManager[]): PackageManager | null;
|
|
23
|
+
export declare function getPackageManager(): Promise<PackageManager>;
|
|
@@ -43,11 +43,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.packageManagers = exports.NPM = exports.PNPM = exports.YARN_V2 = exports.YARN_V1 = exports.DENO = exports.BUN = void 0;
|
|
46
|
+
exports._detectPackageManger = _detectPackageManger;
|
|
46
47
|
exports.getPackageManager = getPackageManager;
|
|
47
|
-
// This file is MIT licensed and was adapted from https://github.com/getsentry/sentry-wizard/blob/master/src/utils/package-manager.ts
|
|
48
|
+
// This file is MIT licensed and was adapted from https://github.com/getsentry/sentry-wizard/blob/master/src/utils/package-manager.ts and https://github.com/getsentry/sentry-wizard/blob/master/src/utils/clack/index.ts
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const path = __importStar(require("path"));
|
|
50
51
|
const packageJson_1 = require("./packageJson");
|
|
52
|
+
const console_1 = require("../console");
|
|
51
53
|
exports.BUN = {
|
|
52
54
|
name: 'bun',
|
|
53
55
|
label: 'Bun',
|
|
@@ -56,6 +58,7 @@ exports.BUN = {
|
|
|
56
58
|
runScriptCommand: 'bun run',
|
|
57
59
|
flags: '',
|
|
58
60
|
forceInstallFlag: '--force',
|
|
61
|
+
devDependencyFlag: '--dev',
|
|
59
62
|
detect: () => ['bun.lockb', 'bun.lock'].some((lockFile) => {
|
|
60
63
|
try {
|
|
61
64
|
return fs.existsSync(path.join(process.cwd(), lockFile));
|
|
@@ -78,6 +81,7 @@ exports.DENO = {
|
|
|
78
81
|
runScriptCommand: 'deno task',
|
|
79
82
|
flags: '',
|
|
80
83
|
forceInstallFlag: '--force',
|
|
84
|
+
devDependencyFlag: '--dev',
|
|
81
85
|
registry: 'npm',
|
|
82
86
|
detect: () => {
|
|
83
87
|
try {
|
|
@@ -101,6 +105,7 @@ exports.YARN_V1 = {
|
|
|
101
105
|
runScriptCommand: 'yarn',
|
|
102
106
|
flags: '--ignore-workspace-root-check',
|
|
103
107
|
forceInstallFlag: '--force',
|
|
108
|
+
devDependencyFlag: '--dev',
|
|
104
109
|
detect: () => {
|
|
105
110
|
try {
|
|
106
111
|
return fs
|
|
@@ -127,6 +132,7 @@ exports.YARN_V2 = {
|
|
|
127
132
|
runScriptCommand: 'yarn',
|
|
128
133
|
flags: '',
|
|
129
134
|
forceInstallFlag: '--force',
|
|
135
|
+
devDependencyFlag: '--dev',
|
|
130
136
|
detect: () => {
|
|
131
137
|
try {
|
|
132
138
|
return fs
|
|
@@ -152,6 +158,7 @@ exports.PNPM = {
|
|
|
152
158
|
runScriptCommand: 'pnpm',
|
|
153
159
|
flags: '--ignore-workspace-root-check',
|
|
154
160
|
forceInstallFlag: '--force',
|
|
161
|
+
devDependencyFlag: '--save-dev',
|
|
155
162
|
detect: () => {
|
|
156
163
|
try {
|
|
157
164
|
return fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml'));
|
|
@@ -175,6 +182,7 @@ exports.NPM = {
|
|
|
175
182
|
runScriptCommand: 'npm run',
|
|
176
183
|
flags: '',
|
|
177
184
|
forceInstallFlag: '--force',
|
|
185
|
+
devDependencyFlag: '--save-dev',
|
|
178
186
|
detect: () => {
|
|
179
187
|
try {
|
|
180
188
|
return fs.existsSync(path.join(process.cwd(), 'package-lock.json'));
|
|
@@ -190,7 +198,7 @@ exports.NPM = {
|
|
|
190
198
|
}),
|
|
191
199
|
};
|
|
192
200
|
exports.packageManagers = [exports.NPM, exports.YARN_V1, exports.YARN_V2, exports.PNPM, exports.BUN, exports.DENO];
|
|
193
|
-
function
|
|
201
|
+
function _detectPackageManger(managers) {
|
|
194
202
|
const foundPackageMangers = (managers !== null && managers !== void 0 ? managers : exports.packageManagers).filter((packageManager) => packageManager.detect());
|
|
195
203
|
// Only consider a package manager detected if we found exactly one.
|
|
196
204
|
// If we find more than one, we should not make any assumptions.
|
|
@@ -199,3 +207,27 @@ function getPackageManager(managers) {
|
|
|
199
207
|
}
|
|
200
208
|
return null;
|
|
201
209
|
}
|
|
210
|
+
// Get the package manager for the current project
|
|
211
|
+
// Uses a global cache to avoid prompting the user multiple times
|
|
212
|
+
function getPackageManager() {
|
|
213
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
+
const globalWizard = global;
|
|
215
|
+
if (globalWizard._gt_wizard_cached_package_manager) {
|
|
216
|
+
return globalWizard._gt_wizard_cached_package_manager;
|
|
217
|
+
}
|
|
218
|
+
const detectedPackageManager = _detectPackageManger();
|
|
219
|
+
if (detectedPackageManager) {
|
|
220
|
+
globalWizard._gt_wizard_cached_package_manager = detectedPackageManager;
|
|
221
|
+
return detectedPackageManager;
|
|
222
|
+
}
|
|
223
|
+
const selectedPackageManager = yield (0, console_1.promptSelect)({
|
|
224
|
+
message: 'Please select your package manager.',
|
|
225
|
+
options: exports.packageManagers.map((packageManager) => ({
|
|
226
|
+
value: packageManager,
|
|
227
|
+
label: packageManager.label,
|
|
228
|
+
})),
|
|
229
|
+
});
|
|
230
|
+
globalWizard._gt_wizard_cached_package_manager = selectedPackageManager;
|
|
231
|
+
return selectedPackageManager;
|
|
232
|
+
});
|
|
233
|
+
}
|