@bigcommerce/stencil-cli 7.4.2 → 7.5.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/lib/StencilConfigManager.js +2 -3
- package/lib/spinner.js +10 -0
- package/lib/stencil-init.js +55 -1
- package/lib/theme-api-client.js +20 -11
- package/package.json +4 -2
|
@@ -129,10 +129,9 @@ class StencilConfigManager {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
if (!config.apiHost) {
|
|
132
|
-
this._logger.log(
|
|
133
|
-
`No api host found in config file, falling back to ${API_HOST}. You may need to run 'stencil init' again.`,
|
|
134
|
-
);
|
|
135
132
|
config.apiHost = API_HOST;
|
|
133
|
+
} else {
|
|
134
|
+
this._logger.log(`API host set in config file: ${config.apiHost}`);
|
|
136
135
|
}
|
|
137
136
|
|
|
138
137
|
return config;
|
package/lib/spinner.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const spinner = async (action, options) => {
|
|
2
|
+
// eslint-disable-next-line node/no-unsupported-features/es-syntax
|
|
3
|
+
const { oraPromise } = await import('ora');
|
|
4
|
+
return oraPromise(action, {
|
|
5
|
+
spinner: 'triangle',
|
|
6
|
+
...options,
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
module.exports = spinner;
|
package/lib/stencil-init.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
require('colors');
|
|
2
2
|
|
|
3
3
|
const inquirerModule = require('inquirer');
|
|
4
|
+
const nypmModule = require('nypm');
|
|
4
5
|
|
|
6
|
+
const spinnerModule = require('./spinner');
|
|
5
7
|
const serverConfigModule = require('../server/config');
|
|
6
8
|
const StencilConfigManager = require('./StencilConfigManager');
|
|
7
|
-
const { DEFAULT_CUSTOM_LAYOUTS_CONFIG, API_HOST } = require('../constants');
|
|
9
|
+
const { DEFAULT_CUSTOM_LAYOUTS_CONFIG, API_HOST, THEME_PATH } = require('../constants');
|
|
8
10
|
|
|
9
11
|
class StencilInit {
|
|
10
12
|
/**
|
|
@@ -12,17 +14,23 @@ class StencilInit {
|
|
|
12
14
|
* @param stencilConfigManager
|
|
13
15
|
* @param serverConfig
|
|
14
16
|
* @param logger
|
|
17
|
+
* @param nypm
|
|
18
|
+
* @param spinner
|
|
15
19
|
*/
|
|
16
20
|
constructor({
|
|
17
21
|
inquirer = inquirerModule,
|
|
18
22
|
stencilConfigManager = new StencilConfigManager(),
|
|
19
23
|
serverConfig = serverConfigModule,
|
|
20
24
|
logger = console,
|
|
25
|
+
nypm = nypmModule,
|
|
26
|
+
spinner = spinnerModule,
|
|
21
27
|
} = {}) {
|
|
22
28
|
this._inquirer = inquirer;
|
|
23
29
|
this._stencilConfigManager = stencilConfigManager;
|
|
24
30
|
this._serverConfig = serverConfig;
|
|
25
31
|
this._logger = logger;
|
|
32
|
+
this._nypm = nypm;
|
|
33
|
+
this._spinner = spinner;
|
|
26
34
|
}
|
|
27
35
|
|
|
28
36
|
/**
|
|
@@ -39,6 +47,7 @@ class StencilInit {
|
|
|
39
47
|
const answers = await this.askQuestions(questions);
|
|
40
48
|
const updatedStencilConfig = this.applyAnswers(oldStencilConfig, answers, cliOptions);
|
|
41
49
|
await this._stencilConfigManager.save(updatedStencilConfig);
|
|
50
|
+
await this.installDependencies(THEME_PATH, answers.packageManager);
|
|
42
51
|
|
|
43
52
|
this._logger.log(
|
|
44
53
|
'You are now ready to go! To start developing, run $ ' + 'stencil start'.cyan,
|
|
@@ -123,6 +132,16 @@ class StencilInit {
|
|
|
123
132
|
});
|
|
124
133
|
}
|
|
125
134
|
|
|
135
|
+
if (!cliOptions.packageManager) {
|
|
136
|
+
prompts.push({
|
|
137
|
+
type: 'list',
|
|
138
|
+
name: 'packageManager',
|
|
139
|
+
message: 'What is your favourite Package Manager?',
|
|
140
|
+
choices: ['npm', 'yarn', 'pnpm'],
|
|
141
|
+
default: this.getPackageManager(),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
126
145
|
return prompts;
|
|
127
146
|
}
|
|
128
147
|
|
|
@@ -157,6 +176,41 @@ class StencilInit {
|
|
|
157
176
|
...answers,
|
|
158
177
|
};
|
|
159
178
|
}
|
|
179
|
+
|
|
180
|
+
getPackageManager() {
|
|
181
|
+
const userAgent = process.env.npm_config_user_agent || '';
|
|
182
|
+
|
|
183
|
+
if (userAgent.startsWith('yarn')) {
|
|
184
|
+
return 'yarn';
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (userAgent.startsWith('pnpm')) {
|
|
188
|
+
return 'pnpm';
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return 'npm';
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
*
|
|
196
|
+
* @param {string} projectDir
|
|
197
|
+
* @param {object} packageManager
|
|
198
|
+
* @returns
|
|
199
|
+
*/
|
|
200
|
+
installDependencies(projectDir, packageManager) {
|
|
201
|
+
return this._spinner(
|
|
202
|
+
this._nypm.installDependencies({
|
|
203
|
+
cwd: projectDir,
|
|
204
|
+
silent: true,
|
|
205
|
+
packageManager,
|
|
206
|
+
}),
|
|
207
|
+
{
|
|
208
|
+
text: `Installing dependencies. This could take a minute...`,
|
|
209
|
+
successText: `Dependencies installed successfully`,
|
|
210
|
+
failText: (err) => `Failed to install dependencies: ${err.message}`.red,
|
|
211
|
+
},
|
|
212
|
+
);
|
|
213
|
+
}
|
|
160
214
|
}
|
|
161
215
|
|
|
162
216
|
module.exports = StencilInit;
|
package/lib/theme-api-client.js
CHANGED
|
@@ -212,19 +212,28 @@ async function getStoreChannels({ accessToken, apiHost, storeHash }) {
|
|
|
212
212
|
url: `${apiHost}/stores/${storeHash}/v3/sites`,
|
|
213
213
|
accessToken,
|
|
214
214
|
});
|
|
215
|
-
const channelsResponse = await networkUtils
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
215
|
+
const channelsResponse = await networkUtils
|
|
216
|
+
.sendApiRequest({
|
|
217
|
+
url: `${apiHost}/stores/${storeHash}/v3/channels?type:in=storefront`,
|
|
218
|
+
accessToken,
|
|
219
|
+
})
|
|
220
|
+
.catch((error) => {
|
|
221
|
+
if (error.response.status === 403) {
|
|
222
|
+
console.log(
|
|
223
|
+
'WARNING: Version 7.4.2+ of stencil-cli added a request to the Channels resource which requires a permission missing on your current stencil cli auth token. Please generate a new auth token at your convenience which includes the "read-only channels" permission to clear up this warning. You can read more about correcting this issue here: https://github.com/bigcommerce/stencil-cli/issues/1185',
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
219
227
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
228
|
+
if (channelsResponse) {
|
|
229
|
+
return sitesResponse.data.data.filter(
|
|
230
|
+
(site) =>
|
|
231
|
+
channelsResponse.data.data.filter((channel) => channel.id === site.channel_id)
|
|
232
|
+
.length > 0,
|
|
233
|
+
);
|
|
234
|
+
}
|
|
223
235
|
|
|
224
|
-
return sitesResponse.data.data
|
|
225
|
-
(site) =>
|
|
226
|
-
storefrontChannels.filter((channel) => channel.id === site.channel_id).length > 0,
|
|
227
|
-
);
|
|
236
|
+
return sitesResponse.data.data;
|
|
228
237
|
} catch (err) {
|
|
229
238
|
throw new Error(`Could not fetch a list of the store channels: ${err.message}`);
|
|
230
239
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigcommerce/stencil-cli",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.1",
|
|
4
4
|
"description": "CLI tool to run BigCommerce Stores locally for theme development.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"engines": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"ajv": "^6.12.5",
|
|
60
60
|
"archiver": "^5.0.2",
|
|
61
61
|
"async": "^3.2.3",
|
|
62
|
-
"axios": "^0.
|
|
62
|
+
"axios": "^0.28.0",
|
|
63
63
|
"browser-sync": "^2.27.9",
|
|
64
64
|
"cheerio": "^1.0.0-rc.12",
|
|
65
65
|
"colors": "1.4.0",
|
|
@@ -76,7 +76,9 @@
|
|
|
76
76
|
"lodash": "^4.17.20",
|
|
77
77
|
"memory-cache": "^0.2.0",
|
|
78
78
|
"npm-which": "^3.0.1",
|
|
79
|
+
"nypm": "^0.3.8",
|
|
79
80
|
"object-to-spawn-args": "^2.0.0",
|
|
81
|
+
"ora": "^8.0.1",
|
|
80
82
|
"parse-json": "^5.2.0",
|
|
81
83
|
"postcss": "^8.4.21",
|
|
82
84
|
"postcss-safe-parser": "^6.0.0",
|