@tachles/starter 1.0.4 ā 1.1.0
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/api/types.d.ts +1 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +31 -38
- package/dist/commands/install.js.map +1 -1
- package/dist/recipe/executor.d.ts +3 -1
- package/dist/recipe/executor.d.ts.map +1 -1
- package/dist/recipe/executor.js +97 -53
- package/dist/recipe/executor.js.map +1 -1
- package/package.json +1 -1
package/dist/api/types.d.ts
CHANGED
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CAC9C;AAGD,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAiBxD,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,iBAgFxB"}
|
package/dist/commands/install.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import chalk from
|
|
2
|
-
import ora from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { RecipeExecutor } from '../recipe/executor.js';
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
import { TachlesAPIClient } from "../api/client.js";
|
|
4
|
+
import { RecipePrompter } from "../recipe/prompter.js";
|
|
5
|
+
import { RecipeExecutor } from "../recipe/executor.js";
|
|
7
6
|
export async function installTemplate(templateArg, options) {
|
|
8
7
|
// Parse template@version syntax
|
|
9
8
|
const { templateId, version } = parseTemplateArg(templateArg);
|
|
10
|
-
const spinner = ora(
|
|
9
|
+
const spinner = ora("Fetching template...").start();
|
|
11
10
|
try {
|
|
12
11
|
const api = new TachlesAPIClient(undefined, options.verbose);
|
|
13
12
|
// Fetch template with options
|
|
@@ -18,12 +17,16 @@ export async function installTemplate(templateArg, options) {
|
|
|
18
17
|
// Show cache information
|
|
19
18
|
if (response.cacheInfo) {
|
|
20
19
|
const cacheStatus = response.cacheInfo.status;
|
|
21
|
-
const cacheIcon = cacheStatus ===
|
|
22
|
-
const versionStr = response.data.version
|
|
20
|
+
const cacheIcon = cacheStatus === "HIT" ? "ā”" : cacheStatus === "MISS" ? "š¾" : "š”";
|
|
21
|
+
const versionStr = response.data.version
|
|
22
|
+
? `(v${response.data.version})`
|
|
23
|
+
: "";
|
|
23
24
|
spinner.succeed(`${cacheIcon} Fetched template: ${templateId} ${versionStr} [Cache: ${cacheStatus}]`);
|
|
24
25
|
}
|
|
25
26
|
else {
|
|
26
|
-
const versionStr = response.data.version
|
|
27
|
+
const versionStr = response.data.version
|
|
28
|
+
? `(v${response.data.version})`
|
|
29
|
+
: "";
|
|
27
30
|
spinner.succeed(`Fetched template: ${templateId} ${versionStr}`);
|
|
28
31
|
}
|
|
29
32
|
const recipe = response.data.recipe;
|
|
@@ -41,37 +44,26 @@ export async function installTemplate(templateArg, options) {
|
|
|
41
44
|
// Execute recipe
|
|
42
45
|
const executor = new RecipeExecutor(selections, options.yes);
|
|
43
46
|
await executor.execute(recipe);
|
|
44
|
-
|
|
45
|
-
const projectId = createHash('sha256')
|
|
46
|
-
.update(process.cwd())
|
|
47
|
-
.digest('hex');
|
|
48
|
-
await api.reportInstallation({
|
|
49
|
-
templateId,
|
|
50
|
-
templateVersion: response.data.version,
|
|
51
|
-
projectId,
|
|
52
|
-
selections,
|
|
53
|
-
});
|
|
54
|
-
console.log(chalk.green('\\n⨠Template installed successfully!\\n'));
|
|
47
|
+
console.log(chalk.green("\\n⨠Template installed successfully!\\n"));
|
|
55
48
|
// Show next steps
|
|
56
49
|
if (recipe.envKeys && recipe.envKeys.length > 0) {
|
|
57
|
-
console.log(chalk.blue(
|
|
58
|
-
console.log(chalk.dim(
|
|
59
|
-
console.log(chalk.dim(
|
|
50
|
+
console.log(chalk.blue("Next steps:"));
|
|
51
|
+
console.log(chalk.dim("1. Configure your environment variables in .env"));
|
|
52
|
+
console.log(chalk.dim("2. Start your development server"));
|
|
60
53
|
console.log();
|
|
61
54
|
}
|
|
62
55
|
}
|
|
63
56
|
catch (error) {
|
|
64
|
-
spinner.fail(
|
|
57
|
+
spinner.fail("Installation failed");
|
|
65
58
|
if (error.response?.status === 404) {
|
|
66
59
|
console.error(chalk.red(`\nā Template "${templateId}" not found`));
|
|
67
60
|
}
|
|
68
61
|
else if (error.response?.status === 401) {
|
|
69
|
-
console.error(chalk.red(
|
|
62
|
+
console.error(chalk.red("\nā Authentication required for this template"));
|
|
70
63
|
}
|
|
71
64
|
else {
|
|
72
65
|
console.error(chalk.red(`\nā ${error.message}\n`));
|
|
73
66
|
}
|
|
74
|
-
throw error;
|
|
75
67
|
}
|
|
76
68
|
}
|
|
77
69
|
/**
|
|
@@ -79,7 +71,7 @@ export async function installTemplate(templateArg, options) {
|
|
|
79
71
|
* Supports: "template-name" or "template-name@1.2.0"
|
|
80
72
|
*/
|
|
81
73
|
function parseTemplateArg(templateArg) {
|
|
82
|
-
const atIndex = templateArg.lastIndexOf(
|
|
74
|
+
const atIndex = templateArg.lastIndexOf("@");
|
|
83
75
|
// No @ symbol, just template ID
|
|
84
76
|
if (atIndex === -1) {
|
|
85
77
|
return { templateId: templateArg };
|
|
@@ -88,7 +80,7 @@ function parseTemplateArg(templateArg) {
|
|
|
88
80
|
const templateId = templateArg.substring(0, atIndex);
|
|
89
81
|
const version = templateArg.substring(atIndex + 1);
|
|
90
82
|
// Validate version format (basic check)
|
|
91
|
-
if (!version || version.trim() ===
|
|
83
|
+
if (!version || version.trim() === "") {
|
|
92
84
|
return { templateId: templateArg }; // Treat as no version
|
|
93
85
|
}
|
|
94
86
|
return { templateId, version };
|
|
@@ -96,11 +88,12 @@ function parseTemplateArg(templateArg) {
|
|
|
96
88
|
function getDefaultSelections(variables) {
|
|
97
89
|
const selections = {};
|
|
98
90
|
for (const variable of variables) {
|
|
99
|
-
if (variable.type ===
|
|
91
|
+
if (variable.type === "confirm") {
|
|
100
92
|
selections[variable.key] = variable.defaultValue ?? true;
|
|
101
93
|
}
|
|
102
|
-
else if (variable.type ===
|
|
103
|
-
selections[variable.key] =
|
|
94
|
+
else if (variable.type === "select") {
|
|
95
|
+
selections[variable.key] =
|
|
96
|
+
variable.defaultValue || variable.options[0].value;
|
|
104
97
|
}
|
|
105
98
|
}
|
|
106
99
|
return selections;
|
|
@@ -121,26 +114,26 @@ function displayTemplateHelp(templateId, version, metadata, variables) {
|
|
|
121
114
|
}
|
|
122
115
|
console.log();
|
|
123
116
|
}
|
|
124
|
-
console.log(chalk.blue(
|
|
117
|
+
console.log(chalk.blue("Configuration Options:\\n"));
|
|
125
118
|
for (const variable of variables) {
|
|
126
|
-
if (variable.type ===
|
|
119
|
+
if (variable.type === "confirm") {
|
|
127
120
|
console.log(chalk.bold(` ${variable.label}`));
|
|
128
121
|
console.log(chalk.dim(` Type: Yes/No`));
|
|
129
|
-
console.log(chalk.dim(` Default: ${variable.defaultValue ?
|
|
122
|
+
console.log(chalk.dim(` Default: ${variable.defaultValue ? "Yes" : "No"}`));
|
|
130
123
|
console.log();
|
|
131
124
|
}
|
|
132
|
-
else if (variable.type ===
|
|
125
|
+
else if (variable.type === "select") {
|
|
133
126
|
console.log(chalk.bold(` ${variable.label}`));
|
|
134
127
|
console.log(chalk.dim(` Type: Select one`));
|
|
135
128
|
console.log(chalk.dim(` Options:`));
|
|
136
129
|
variable.options.forEach((opt) => {
|
|
137
|
-
const isDefault = opt.value === variable.defaultValue ?
|
|
130
|
+
const isDefault = opt.value === variable.defaultValue ? " (default)" : "";
|
|
138
131
|
console.log(chalk.dim(` - ${opt.label}${isDefault}`));
|
|
139
132
|
});
|
|
140
133
|
console.log();
|
|
141
134
|
}
|
|
142
135
|
}
|
|
143
|
-
console.log(chalk.blue(
|
|
136
|
+
console.log(chalk.blue("Usage:\\n"));
|
|
144
137
|
console.log(chalk.dim(` npx @tachles/starter ${templateId}`));
|
|
145
138
|
console.log(chalk.dim(` npx @tachles/starter ${templateId}@${version}`));
|
|
146
139
|
console.log(chalk.dim(` npx @tachles/starter ${templateId} -y # Use defaults`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,11 @@ export declare class RecipeExecutor {
|
|
|
4
4
|
private skipYes;
|
|
5
5
|
constructor(selections: Record<string, string | boolean>, skipYes?: boolean);
|
|
6
6
|
execute(recipe: Recipe): Promise<void>;
|
|
7
|
+
private calculateTotalSteps;
|
|
8
|
+
private countOperations;
|
|
7
9
|
private executeOperations;
|
|
8
10
|
private installPackages;
|
|
9
11
|
private setupEnvVariables;
|
|
10
|
-
private
|
|
12
|
+
private runCommand;
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/recipe/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAuD,MAAM,iBAAiB,CAAC;AAG9F,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,OAAO,CAAU;gBAEb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,OAAO,UAAQ;IAKnE,OAAO,CAAC,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/recipe/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAuD,MAAM,iBAAiB,CAAC;AAG9F,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,OAAO,CAAU;gBAEb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,OAAO,UAAQ;IAKnE,OAAO,CAAC,MAAM,EAAE,MAAM;IA4B5B,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,eAAe;YAQT,iBAAiB;YA2BjB,eAAe;YAwBf,iBAAiB;YAWjB,UAAU;CAgDzB"}
|
package/dist/recipe/executor.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
import ora from 'ora';
|
|
3
2
|
import chalk from 'chalk';
|
|
4
3
|
import { detectPackageManager } from '../utils/package-manager.js';
|
|
5
4
|
export class RecipeExecutor {
|
|
@@ -10,105 +9,150 @@ export class RecipeExecutor {
|
|
|
10
9
|
this.skipYes = skipYes;
|
|
11
10
|
}
|
|
12
11
|
async execute(recipe) {
|
|
13
|
-
|
|
12
|
+
// Calculate total steps
|
|
13
|
+
const totalSteps = this.calculateTotalSteps(recipe);
|
|
14
|
+
let currentStep = 0;
|
|
15
|
+
console.log(chalk.blue(`\nš Starting installation (${totalSteps} steps)\n`));
|
|
14
16
|
for (const variable of recipe.variables) {
|
|
15
17
|
if (variable.type === 'confirm') {
|
|
16
18
|
const answer = this.selections[variable.key];
|
|
17
19
|
const operations = answer ? variable.onTrue : variable.onFalse;
|
|
18
20
|
if (operations) {
|
|
19
|
-
await this.executeOperations(operations);
|
|
21
|
+
currentStep = await this.executeOperations(operations, currentStep, totalSteps);
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
24
|
else if (variable.type === 'select') {
|
|
23
25
|
const answer = this.selections[variable.key];
|
|
24
26
|
const option = variable.options.find((opt) => opt.value === answer);
|
|
25
27
|
if (option?.operations) {
|
|
26
|
-
await this.executeOperations(option.operations);
|
|
28
|
+
currentStep = await this.executeOperations(option.operations, currentStep, totalSteps);
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
}
|
|
30
|
-
console.log(chalk.green(
|
|
32
|
+
console.log(chalk.green(`\nā
Installation complete! (${totalSteps}/${totalSteps} steps)\n`));
|
|
31
33
|
}
|
|
32
|
-
|
|
34
|
+
calculateTotalSteps(recipe) {
|
|
35
|
+
let steps = 0;
|
|
36
|
+
for (const variable of recipe.variables) {
|
|
37
|
+
if (variable.type === 'confirm') {
|
|
38
|
+
const answer = this.selections[variable.key];
|
|
39
|
+
const operations = answer ? variable.onTrue : variable.onFalse;
|
|
40
|
+
if (operations) {
|
|
41
|
+
steps += this.countOperations(operations);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (variable.type === 'select') {
|
|
45
|
+
const answer = this.selections[variable.key];
|
|
46
|
+
const option = variable.options.find((opt) => opt.value === answer);
|
|
47
|
+
if (option?.operations) {
|
|
48
|
+
steps += this.countOperations(option.operations);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return steps;
|
|
53
|
+
}
|
|
54
|
+
countOperations(operations) {
|
|
55
|
+
let count = 0;
|
|
56
|
+
if (operations.packages && operations.packages.length > 0)
|
|
57
|
+
count++;
|
|
58
|
+
if (operations.envVariables && operations.envVariables.length > 0)
|
|
59
|
+
count++;
|
|
60
|
+
if (operations.commands)
|
|
61
|
+
count += operations.commands.length;
|
|
62
|
+
return count;
|
|
63
|
+
}
|
|
64
|
+
async executeOperations(operations, currentStep, totalSteps) {
|
|
33
65
|
// Install packages
|
|
34
66
|
if (operations.packages && operations.packages.length > 0) {
|
|
67
|
+
currentStep++;
|
|
68
|
+
console.log(chalk.cyan(`\n[${currentStep}/${totalSteps}] Installing packages\n`));
|
|
35
69
|
await this.installPackages(operations.packages);
|
|
36
70
|
}
|
|
37
71
|
// Set env variables
|
|
38
72
|
if (operations.envVariables && operations.envVariables.length > 0) {
|
|
73
|
+
currentStep++;
|
|
74
|
+
console.log(chalk.cyan(`\n[${currentStep}/${totalSteps}] Configuring environment variables\n`));
|
|
39
75
|
await this.setupEnvVariables(operations.envVariables);
|
|
40
76
|
}
|
|
41
77
|
// Run commands
|
|
42
78
|
if (operations.commands && operations.commands.length > 0) {
|
|
43
|
-
|
|
79
|
+
for (const command of operations.commands) {
|
|
80
|
+
currentStep++;
|
|
81
|
+
console.log(chalk.cyan(`\n[${currentStep}/${totalSteps}] ${command.description || 'Running command'}\n`));
|
|
82
|
+
await this.runCommand(command);
|
|
83
|
+
}
|
|
44
84
|
}
|
|
85
|
+
return currentStep;
|
|
45
86
|
}
|
|
46
87
|
async installPackages(packages) {
|
|
47
88
|
const pm = detectPackageManager();
|
|
48
|
-
const
|
|
89
|
+
const packageStrings = packages.map((pkg) => pkg.version === 'latest' ? pkg.name : `${pkg.name}@${pkg.version}`);
|
|
90
|
+
console.log(chalk.dim(` Packages: ${packageStrings.join(', ')}`));
|
|
91
|
+
console.log(chalk.dim(` Using: ${pm}\n`));
|
|
49
92
|
try {
|
|
50
|
-
const packageStrings = packages.map((pkg) => pkg.version === 'latest' ? pkg.name : `${pkg.name}@${pkg.version}`);
|
|
51
93
|
const installCmd = pm === 'npm' ? 'install' : 'add';
|
|
52
94
|
await execa(pm, [installCmd, ...packageStrings], {
|
|
53
95
|
stdio: 'inherit',
|
|
54
96
|
cwd: process.cwd(),
|
|
55
97
|
});
|
|
56
|
-
|
|
98
|
+
console.log(chalk.green(` ā Packages installed successfully`));
|
|
57
99
|
}
|
|
58
100
|
catch (error) {
|
|
59
|
-
|
|
101
|
+
console.log(chalk.red(` ā Package installation failed`));
|
|
60
102
|
throw error;
|
|
61
103
|
}
|
|
62
104
|
}
|
|
63
105
|
async setupEnvVariables(envVars) {
|
|
64
|
-
console.log(chalk.yellow('
|
|
106
|
+
console.log(chalk.yellow(' Environment variables to configure:\n'));
|
|
65
107
|
for (const envVar of envVars) {
|
|
66
|
-
console.log(chalk.dim(
|
|
108
|
+
console.log(chalk.dim(` ⢠${envVar.key}`));
|
|
109
|
+
console.log(chalk.dim(` ${envVar.description}\n`));
|
|
67
110
|
}
|
|
68
|
-
console.log(chalk.dim('
|
|
111
|
+
console.log(chalk.dim(' ā Add these to your .env file\n'));
|
|
69
112
|
}
|
|
70
|
-
async
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
spinner.succeed(cmd.description || 'Command completed');
|
|
113
|
+
async runCommand(cmd) {
|
|
114
|
+
console.log(chalk.dim(` Command: ${cmd.customCommand || `${cmd.packageName} ${cmd.commandArgs}`.trim()}`));
|
|
115
|
+
if (cmd.requiresInteraction) {
|
|
116
|
+
console.log(chalk.yellow(' ā ļø This step requires your input\n'));
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
if (cmd.runner === 'custom' && cmd.customCommand) {
|
|
120
|
+
await execa(cmd.customCommand, {
|
|
121
|
+
shell: true,
|
|
122
|
+
stdio: 'inherit',
|
|
123
|
+
cwd: process.cwd(),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const runner = cmd.runner || 'npx';
|
|
128
|
+
const fullCommand = `${cmd.packageName} ${cmd.commandArgs}`.trim();
|
|
129
|
+
const args = fullCommand.split(' ');
|
|
130
|
+
await execa(runner, args, {
|
|
131
|
+
stdio: 'inherit',
|
|
132
|
+
cwd: process.cwd(),
|
|
133
|
+
});
|
|
93
134
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
135
|
+
console.log(chalk.green(` ā Completed\n`));
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.log(chalk.red(` ā Failed\n`));
|
|
139
|
+
if (!this.skipYes) {
|
|
140
|
+
const inquirer = (await import('inquirer')).default;
|
|
141
|
+
const answer = await inquirer.prompt([
|
|
142
|
+
{
|
|
143
|
+
type: 'confirm',
|
|
144
|
+
name: 'continue',
|
|
145
|
+
message: 'Continue with remaining steps?',
|
|
146
|
+
default: true,
|
|
147
|
+
},
|
|
148
|
+
]);
|
|
149
|
+
if (!answer.continue) {
|
|
150
|
+
throw new Error('Installation aborted by user');
|
|
110
151
|
}
|
|
111
152
|
}
|
|
153
|
+
else {
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
112
156
|
}
|
|
113
157
|
}
|
|
114
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/recipe/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/recipe/executor.ts"],"names":[],"mappings":"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"}
|