shoplazza-cli 1.0.7-beta.1 → 1.0.7-beta.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/bin/shoplazza +5 -1
- package/lib/app/api/index.js +2 -2
- package/lib/app/commands/build.js +4 -4
- package/lib/app/commands/connect.js +73 -0
- package/lib/app/commands/create.js +1 -1
- package/lib/app/commands/deploy.js +4 -3
- package/lib/app/commands/release.js +59 -0
- package/lib/app/commands/serve.js +12 -11
- package/lib/app/commands/versions.js +10 -7
- package/lib/app/index.js +3 -0
- package/lib/app/template/basic-app/theme-app/blocks/index.liquid +3 -3
- package/lib/app/template/basic-app/theme-app/locales/ar-SA.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/de-DE.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/en-US.json +6 -0
- package/lib/app/template/basic-app/theme-app/locales/es-ES.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/fr-FR.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/id-ID.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/it-IT.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/ja-JP.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/ko-KR.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/nl-NL.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/pl-PL.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/pt-PT.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/ru-RU.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/th-TH.json +1 -0
- package/lib/app/template/basic-app/theme-app/locales/zh-CN.json +6 -0
- package/lib/app/template/basic-app/theme-app/locales/zh-TW.json +1 -0
- package/lib/app/template/basic-app/theme-app/snippets/index.liquid +1 -1
- package/lib/app/template/embed-app/theme-app/blocks/index.liquid +4 -4
- package/lib/app/template/embed-app/theme-app/locales/ar-SA.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/de-DE.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/en-US.json +4 -1
- package/lib/app/template/embed-app/theme-app/locales/es-ES.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/fr-FR.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/id-ID.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/it-IT.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/ja-JP.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/ko-KR.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/nl-NL.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/pl-PL.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/pt-PT.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/ru-RU.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/th-TH.json +1 -3
- package/lib/app/template/embed-app/theme-app/locales/zh-CN.json +4 -1
- package/lib/app/template/embed-app/theme-app/locales/zh-TW.json +1 -3
- package/lib/app/template/embed-app/theme-app/snippets/index.liquid +1 -1
- package/lib/app/utils/config.js +3 -3
- package/lib/app/utils/index.js +8 -8
- package/lib/auth/getCode.js +2 -2
- package/lib/auth/index.js +2 -2
- package/lib/check.js +28 -0
- package/lib/checkout/api.js +1 -2
- package/lib/checkout/build.js +1 -1
- package/lib/checkout/create.js +1 -1
- package/lib/checkout/deploy.js +1 -1
- package/lib/checkout/dev/index.js +1 -1
- package/lib/checkout/fields.js +1 -1
- package/lib/checkout/preview.js +1 -1
- package/lib/checkout/push.js +1 -1
- package/lib/checkout/undeploy.js +1 -1
- package/lib/checkout/util.js +1 -1
- package/lib/checkout/verify.js +1 -1
- package/lib/commands/theme/delete.js +1 -1
- package/lib/commands/theme/package.js +1 -1
- package/lib/commands/theme/publish.js +1 -1
- package/lib/commands/theme/pull.js +1 -1
- package/lib/commands/theme/push.js +1 -1
- package/lib/commands/theme/serve.js +2 -2
- package/lib/common/login.js +1 -1
- package/lib/function/bin/index.js +20 -0
- package/lib/function/bin/javy/javy-arm-linux-v5.0.1 +0 -0
- package/lib/function/bin/javy/javy-arm-macos-v5.0.1 +0 -0
- package/lib/function/bin/javy/javy-x86_64-linux-v5.0.1 +0 -0
- package/lib/function/bin/javy/javy-x86_64-macos-v5.0.1 +0 -0
- package/lib/function/bin/javy/javy-x86_64-windows-v5.0.1 +0 -0
- package/lib/function/commands/compile.js +42 -0
- package/lib/function/commands/create.js +77 -0
- package/lib/function/commands/list.js +18 -0
- package/lib/function/commands/release.js +69 -0
- package/lib/function/index.js +24 -0
- package/lib/function/template/js/README.md +37 -0
- package/lib/function/template/js/_gitignore +4 -0
- package/lib/function/template/js/extension.config.json +5 -0
- package/lib/function/template/js/package.json +17 -0
- package/lib/function/template/js/src/index.js +64 -0
- package/lib/function/utils.js +29 -0
- package/lib/openAPI/api.js +1 -1
- package/lib/openAPI/index.js +0 -1
- package/lib/partner-api/axios.js +67 -0
- package/lib/partner-api/index.js +79 -0
- package/lib/{checkout → utils}/console.js +3 -2
- package/lib/utils/env.js +17 -0
- package/lib/utils/file.js +48 -0
- package/lib/utils/platform.js +37 -0
- package/lib/{utils.js → utils/utils.js} +2 -2
- package/package.json +1 -1
- /package/lib/app/template/basic-app/{theme-extension.config.json → extension.config.json} +0 -0
- /package/lib/app/template/embed-app/{theme-extension.config.json → extension.config.json} +0 -0
- /package/lib/{config.js → utils/config.js} +0 -0
package/bin/shoplazza
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
process.noDeprecation = true; // 全局禁用废弃警告
|
|
4
|
+
require('../lib/check');
|
|
4
5
|
const { program } = require('commander');
|
|
5
6
|
const updateNotifier = require('update-notifier');
|
|
6
7
|
const Sentry = require('@sentry/node');
|
|
@@ -11,6 +12,7 @@ require('../lib/tracing');
|
|
|
11
12
|
|
|
12
13
|
const { makeCheckoutCommand } = require('../lib/checkout');
|
|
13
14
|
const { initThemeAppCommand } = require('../lib/app');
|
|
15
|
+
const { makeFunctionCommand } = require('../lib/function');
|
|
14
16
|
|
|
15
17
|
Sentry.init({
|
|
16
18
|
dsn: 'https://89964605acaf4db8839f2d5237396d6c@sentry.shoplazza.com/730',
|
|
@@ -29,6 +31,7 @@ updateNotifier({ pkg }).notify({
|
|
|
29
31
|
isGlobal: true
|
|
30
32
|
});
|
|
31
33
|
program.usage('[command] [options]');
|
|
34
|
+
program.option('--debug <ent>', 'debug mode')
|
|
32
35
|
|
|
33
36
|
program.command('version').description('Welcome to the Shoplazza CLI').action(require('../lib/commands/version'));
|
|
34
37
|
program.description('Welcome to the Shoplazza CLI').option('-v --version').action(require('../lib/commands/version'));
|
|
@@ -112,11 +115,12 @@ theme
|
|
|
112
115
|
.option('-t, --theme <theme>', 'The ID of the theme that you want to delete.')
|
|
113
116
|
.action(require('../lib/commands/theme/delete'));
|
|
114
117
|
|
|
115
|
-
|
|
116
118
|
// checkout cli
|
|
117
119
|
makeCheckoutCommand(program);
|
|
118
120
|
// theme app cli
|
|
119
121
|
initThemeAppCommand(program);
|
|
122
|
+
// function cli
|
|
123
|
+
makeFunctionCommand(program);
|
|
120
124
|
|
|
121
125
|
program.parse(process.argv);
|
|
122
126
|
!program.args.length && program.help();
|
package/lib/app/api/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const instance = require('../../openAPI/index');
|
|
2
|
-
|
|
2
|
+
const request = require('../../partner-api/axios');
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 获取主题列表
|
|
@@ -92,5 +92,5 @@ module.exports = {
|
|
|
92
92
|
getThemeAppVersionList,
|
|
93
93
|
toCreateThemeAppVersion,
|
|
94
94
|
toDeployThemeApp,
|
|
95
|
-
getTaskStatus
|
|
95
|
+
getTaskStatus,
|
|
96
96
|
};
|
|
@@ -2,7 +2,7 @@ const chalk = require('chalk');
|
|
|
2
2
|
const inquirer = require('inquirer');
|
|
3
3
|
const ora = require('ora');
|
|
4
4
|
const fsExtra = require('fs-extra');
|
|
5
|
-
const {
|
|
5
|
+
const { getThemeExtensionConfig, compareVersions, compress } = require('../utils');
|
|
6
6
|
const { THEME_APP_DIR_PATH, EXCHANGE_TOKEN, STORE_DOMAIN } = require('../utils/config');
|
|
7
7
|
const { getThemeAppVersionList, toCreateThemeAppVersion, getTaskStatus } = require('../api');
|
|
8
8
|
const { useOss } = require('../../oss');
|
|
@@ -35,7 +35,7 @@ async function createNewVersion(extensionId, version, description) {
|
|
|
35
35
|
const res = await getTaskStatus({ taskId });
|
|
36
36
|
if (res.data?.state === 1) {
|
|
37
37
|
clearInterval(timer);
|
|
38
|
-
spinner.succeed(chalk.green(`Successfully
|
|
38
|
+
spinner.succeed(chalk.green(`Successfully build a new version(v${version})!`));
|
|
39
39
|
resolve();
|
|
40
40
|
} else if (res.data?.state === 2) {
|
|
41
41
|
clearInterval(timer);
|
|
@@ -69,7 +69,7 @@ async function usePrompt(extensionId) {
|
|
|
69
69
|
{
|
|
70
70
|
type: 'input',
|
|
71
71
|
name: 'newVersion',
|
|
72
|
-
message: 'Enter the new version number:',
|
|
72
|
+
message: 'Enter the new version number(e.g., 1.0.0):',
|
|
73
73
|
validate: (newVersion) => {
|
|
74
74
|
if (!/^[0-9]+\.[0-9]+\.[0-9]+$/.test(newVersion)) {
|
|
75
75
|
return chalk.red('❌ Version must follow the format X.Y.Z (e.g., 1.0.0).');
|
|
@@ -98,7 +98,7 @@ async function usePrompt(extensionId) {
|
|
|
98
98
|
|
|
99
99
|
async function build() {
|
|
100
100
|
try {
|
|
101
|
-
const { extensionId } = await
|
|
101
|
+
const { extensionId } = await getThemeExtensionConfig();
|
|
102
102
|
if (!extensionId) {
|
|
103
103
|
throw new Error('ExtensionId is empty, please use `serve` command first.');
|
|
104
104
|
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const inquirer = require('inquirer');
|
|
3
|
+
const { getThemeExtensionConfig, setThemeExtensionConfig } = require('../utils');
|
|
4
|
+
const { toConnectApp } = require('../../partner-api/index');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 交互式命令行
|
|
8
|
+
*/
|
|
9
|
+
async function usePrompt() {
|
|
10
|
+
return await inquirer.prompt([
|
|
11
|
+
{
|
|
12
|
+
type: 'input',
|
|
13
|
+
name: 'clientId',
|
|
14
|
+
message: 'Please enter the shoplazza app Client ID:',
|
|
15
|
+
prefix: '*',
|
|
16
|
+
validate: (clientId) => {
|
|
17
|
+
if (!clientId.trim()) {
|
|
18
|
+
return 'Client ID cannot be empty';
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: 'input',
|
|
25
|
+
name: 'clientSecret',
|
|
26
|
+
message: 'Please enter the shoplazza app Client Secret:',
|
|
27
|
+
prefix: '*',
|
|
28
|
+
validate: (clientSecret) => {
|
|
29
|
+
if (!clientSecret.trim()) {
|
|
30
|
+
return 'Client Secret cannot be empty';
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function connectToApp() {
|
|
39
|
+
try {
|
|
40
|
+
let { extensionId, appId, accessToken } = await getThemeExtensionConfig();
|
|
41
|
+
if (!extensionId) {
|
|
42
|
+
throw new Error('ExtensionId is empty, please use `serve` command first.');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (!accessToken) {
|
|
46
|
+
const result = await usePrompt();
|
|
47
|
+
appId = result.clientId;
|
|
48
|
+
appSecret = result.clientSecret;
|
|
49
|
+
await setThemeExtensionConfig({
|
|
50
|
+
appId,
|
|
51
|
+
appSecret
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const res = await toConnectApp({
|
|
56
|
+
extensionId,
|
|
57
|
+
appId
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (+res.data?.code === 200) {
|
|
61
|
+
console.log(chalk.green('Connected to the Shoplazza app successfully!'));
|
|
62
|
+
console.log(chalk.cyan('You can use the `release` command to release a specific version to the Shoplazza app.'));
|
|
63
|
+
} else if (+res.data?.code === 400) {
|
|
64
|
+
console.log(chalk.green(res.data?.message));
|
|
65
|
+
}
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error(chalk.red(`[ERROR IN CONNECT] ${error.message}`));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
module.exports = {
|
|
72
|
+
connect: connectToApp
|
|
73
|
+
};
|
|
@@ -40,7 +40,7 @@ async function initProj(projectPath, projectName, isBasicApp = false) {
|
|
|
40
40
|
const replacementConfig = {
|
|
41
41
|
'package.json': { projectName },
|
|
42
42
|
'theme-app/blocks/index.liquid': { projectName },
|
|
43
|
-
'
|
|
43
|
+
'extension.config.json': { projectName }
|
|
44
44
|
};
|
|
45
45
|
for (const [filePath, replacements] of Object.entries(replacementConfig)) {
|
|
46
46
|
const fullPath = path.resolve(projectPath, filePath);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const inquirer = require('inquirer');
|
|
2
2
|
const chalk = require('chalk');
|
|
3
3
|
const ora = require('ora');
|
|
4
|
-
const {
|
|
4
|
+
const { getThemeExtensionConfig } = require('../utils');
|
|
5
5
|
const { getThemeAppVersionList, toDeployThemeApp } = require('../api');
|
|
6
6
|
|
|
7
7
|
async function deployVersion(extensionId, versionInfo) {
|
|
@@ -23,14 +23,15 @@ async function usePrompt(versionList) {
|
|
|
23
23
|
type: 'list',
|
|
24
24
|
name: 'selectedVersion',
|
|
25
25
|
message: 'Select a version to deploy:',
|
|
26
|
-
choices
|
|
26
|
+
choices,
|
|
27
|
+
loop: false
|
|
27
28
|
}
|
|
28
29
|
]);
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
async function deploy() {
|
|
32
33
|
try {
|
|
33
|
-
const { extensionId } = await
|
|
34
|
+
const { extensionId } = await getThemeExtensionConfig();
|
|
34
35
|
if (!extensionId) {
|
|
35
36
|
throw new Error('ExtensionId is empty, please use `serve` command first.');
|
|
36
37
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const inquirer = require('inquirer');
|
|
2
|
+
const chalk = require('chalk');
|
|
3
|
+
const ora = require('ora');
|
|
4
|
+
const { getThemeExtensionConfig } = require('../utils');
|
|
5
|
+
const { getThemeAppVersionList } = require('../api');
|
|
6
|
+
const { toReleaseApp } = require('../../partner-api/index');
|
|
7
|
+
|
|
8
|
+
async function releaseVersion(extensionId, versionInfo) {
|
|
9
|
+
const res = await toReleaseApp({
|
|
10
|
+
extensionId,
|
|
11
|
+
versionId: versionInfo.version_id
|
|
12
|
+
});
|
|
13
|
+
console.log(chalk.green(`Version ${versionInfo.version} has been released successfully.`));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function usePrompt(versionList) {
|
|
17
|
+
const choices = versionList.map((v) => ({
|
|
18
|
+
name: `${v.version} (${v.exts}) - ${v.created_at}`,
|
|
19
|
+
value: v.version_id
|
|
20
|
+
}));
|
|
21
|
+
return inquirer.prompt([
|
|
22
|
+
{
|
|
23
|
+
type: 'list',
|
|
24
|
+
name: 'selectedVersion',
|
|
25
|
+
message: 'Select a version to release:',
|
|
26
|
+
choices,
|
|
27
|
+
loop: false
|
|
28
|
+
}
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function releaseToApp() {
|
|
33
|
+
try {
|
|
34
|
+
const { extensionId, appId } = await getThemeExtensionConfig();
|
|
35
|
+
if (!extensionId) {
|
|
36
|
+
throw new Error('ExtensionId is empty, please use `serve` command first.');
|
|
37
|
+
}
|
|
38
|
+
if (!appId) {
|
|
39
|
+
throw new Error('Missing appId, please use `connect` command first.');
|
|
40
|
+
}
|
|
41
|
+
const spinner = ora('Fetching version list...').start();
|
|
42
|
+
const res = await getThemeAppVersionList(extensionId);
|
|
43
|
+
const versionList = res.data?.data || [];
|
|
44
|
+
if (!versionList.length) {
|
|
45
|
+
spinner.succeed('Version list loaded.');
|
|
46
|
+
throw new Error('No version found, please use `build` command to upload a version first.');
|
|
47
|
+
}
|
|
48
|
+
spinner.succeed('Version list loaded.');
|
|
49
|
+
const { selectedVersion } = await usePrompt(versionList);
|
|
50
|
+
const versionInfo = versionList.find((v) => v.version_id === selectedVersion);
|
|
51
|
+
await releaseVersion(extensionId, versionInfo);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error(chalk.red(`[ERROR IN DEPLOY] ${error.message}`));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
module.exports = {
|
|
58
|
+
release: releaseToApp
|
|
59
|
+
};
|
|
@@ -3,7 +3,7 @@ const inquirer = require('inquirer');
|
|
|
3
3
|
const fsExtra = require('fs-extra');
|
|
4
4
|
const ora = require('ora');
|
|
5
5
|
const { STORE_DOMAIN, THEME_APP_DIR_PATH, EXCHANGE_TOKEN } = require('../utils/config');
|
|
6
|
-
const { compress,
|
|
6
|
+
const { compress, getThemeExtensionConfig, setThemeExtensionConfig, getFileInfo } = require('../utils');
|
|
7
7
|
const {
|
|
8
8
|
toCreateThemeApp,
|
|
9
9
|
toUploadThemeApp,
|
|
@@ -13,7 +13,7 @@ const {
|
|
|
13
13
|
toUpdateFile,
|
|
14
14
|
toDeleteFile
|
|
15
15
|
} = require('../api');
|
|
16
|
-
const { watchWorkspace } = require('../../utils');
|
|
16
|
+
const { watchWorkspace } = require('../../utils/utils');
|
|
17
17
|
const { useOss } = require('../../oss');
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -89,7 +89,8 @@ async function usePrompt() {
|
|
|
89
89
|
choices: themeList.map((theme) => ({
|
|
90
90
|
name: theme.name,
|
|
91
91
|
value: theme.id
|
|
92
|
-
}))
|
|
92
|
+
})),
|
|
93
|
+
loop: false
|
|
93
94
|
}
|
|
94
95
|
]);
|
|
95
96
|
return selectedThemeId;
|
|
@@ -98,16 +99,16 @@ async function usePrompt() {
|
|
|
98
99
|
/**
|
|
99
100
|
* 创建主题插件
|
|
100
101
|
*/
|
|
101
|
-
async function createThemeApp(
|
|
102
|
+
async function createThemeApp(themeExtensionConfig) {
|
|
102
103
|
const data = {
|
|
103
|
-
title:
|
|
104
|
+
title: themeExtensionConfig.extensionName || '' // 插件显示名称
|
|
104
105
|
};
|
|
105
|
-
if (
|
|
106
|
-
data.extension_id =
|
|
106
|
+
if (themeExtensionConfig.extensionId) {
|
|
107
|
+
data.extension_id = themeExtensionConfig.extensionId;
|
|
107
108
|
}
|
|
108
109
|
const res = await toCreateThemeApp(data);
|
|
109
110
|
const extensionId = res.data?.extension_id;
|
|
110
|
-
await
|
|
111
|
+
await setThemeExtensionConfig({ extensionId });
|
|
111
112
|
return extensionId;
|
|
112
113
|
}
|
|
113
114
|
|
|
@@ -154,10 +155,10 @@ function startWatcher(extensionId) {
|
|
|
154
155
|
|
|
155
156
|
async function serve() {
|
|
156
157
|
try {
|
|
157
|
-
const
|
|
158
|
-
let extensionId =
|
|
158
|
+
const themeExtensionConfig = await getThemeExtensionConfig();
|
|
159
|
+
let extensionId = themeExtensionConfig.extensionId;
|
|
159
160
|
if (!extensionId) {
|
|
160
|
-
extensionId = await createThemeApp(
|
|
161
|
+
extensionId = await createThemeApp(themeExtensionConfig);
|
|
161
162
|
}
|
|
162
163
|
await syncLocalFiles(extensionId);
|
|
163
164
|
const selectedThemeId = await usePrompt();
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const chalk = require('chalk');
|
|
2
|
-
const
|
|
3
|
-
const { getThemeAppConfig, renderTable } = require('../utils');
|
|
2
|
+
const { getThemeExtensionConfig, renderTable } = require('../utils');
|
|
4
3
|
const { getThemeAppVersionList } = require('../api');
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -8,12 +7,16 @@ const { getThemeAppVersionList } = require('../api');
|
|
|
8
7
|
*/
|
|
9
8
|
function consoleTips(versionList) {
|
|
10
9
|
if (versionList.length) {
|
|
10
|
+
const tempVersionList = versionList.map((item) => ({
|
|
11
|
+
...item,
|
|
12
|
+
composeVersion: item.published === 1 ? `${item.version}(published)` : item.version
|
|
13
|
+
}));
|
|
11
14
|
console.log(chalk.green('\n📜 Available Versions:'));
|
|
12
15
|
console.log(
|
|
13
|
-
renderTable(
|
|
16
|
+
renderTable(tempVersionList, [
|
|
14
17
|
{
|
|
15
18
|
label: 'Version',
|
|
16
|
-
filed: '
|
|
19
|
+
filed: 'composeVersion',
|
|
17
20
|
color: 'yellowBright'
|
|
18
21
|
},
|
|
19
22
|
{
|
|
@@ -35,9 +38,9 @@ function consoleTips(versionList) {
|
|
|
35
38
|
|
|
36
39
|
async function versions() {
|
|
37
40
|
try {
|
|
38
|
-
const { extensionId } = await
|
|
39
|
-
if(!extensionId) {
|
|
40
|
-
throw new Error('ExtensionId is empty, please use `serve` command first.')
|
|
41
|
+
const { extensionId } = await getThemeExtensionConfig();
|
|
42
|
+
if (!extensionId) {
|
|
43
|
+
throw new Error('ExtensionId is empty, please use `serve` command first.');
|
|
41
44
|
}
|
|
42
45
|
const res = await getThemeAppVersionList(extensionId);
|
|
43
46
|
const versionList = res.data?.data || [];
|
package/lib/app/index.js
CHANGED
|
@@ -19,6 +19,9 @@ function initThemeAppCommand(_program) {
|
|
|
19
19
|
|
|
20
20
|
program.command('list').description('List all theme extensions').action(require('./commands/list').list);
|
|
21
21
|
|
|
22
|
+
program.command('connect').description('Establish a connection between the theme extension and the shoplazza app').action(require('./commands/connect').connect);
|
|
23
|
+
|
|
24
|
+
program.command('release').description('Release a theme extension version to be applied in the shoplazza app').action(require('./commands/release').release);
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
module.exports = {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{% use "{{projectName}}.css" %}
|
|
2
2
|
|
|
3
3
|
<div id="{{projectName}}" class="container">
|
|
4
|
-
<h1>
|
|
4
|
+
<h1>{{ 'i18n.initial.title' | t }}</h1>
|
|
5
5
|
{% include "{{projectName}}" %}
|
|
6
6
|
</div>
|
|
7
7
|
|
|
8
8
|
{% schema %}
|
|
9
9
|
{
|
|
10
10
|
"name": {
|
|
11
|
-
"en-US": "{{projectName}}
|
|
12
|
-
"zh-CN": "{{projectName}}
|
|
11
|
+
"en-US": "{{projectName}}(dev)",
|
|
12
|
+
"zh-CN": "{{projectName}}(开发)"
|
|
13
13
|
},
|
|
14
14
|
"settings": []
|
|
15
15
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{% include "{{projectName}}_css" %}
|
|
2
2
|
|
|
3
3
|
<div id="{{projectName}}" class="container">
|
|
4
|
-
<h1>
|
|
4
|
+
<h1>{{ 'i18n.initial.title' | t }}</h1>
|
|
5
5
|
{% include "{{projectName}}" %}
|
|
6
6
|
</div>
|
|
7
7
|
|
|
8
8
|
{% schema %}
|
|
9
9
|
{
|
|
10
10
|
"name": {
|
|
11
|
-
"en-US": "{{projectName}}
|
|
12
|
-
"zh-CN": "{{projectName}}
|
|
11
|
+
"en-US": "{{projectName}}(dev)",
|
|
12
|
+
"zh-CN": "{{projectName}}(开发)"
|
|
13
13
|
},
|
|
14
|
+
"icon":"https://assets.shoplazza.com/oss/operation/a425c6e10e32f87a1e7271c9ed9347d8.svg",
|
|
14
15
|
"target":"body",
|
|
15
|
-
"icon":"https://cdn.shoplazza.com/oss/operation/0aee0d0cff21440e95a08ec4c560c691.svg",
|
|
16
16
|
"settings": []
|
|
17
17
|
}
|
|
18
18
|
{% endschema %}
|
package/lib/app/utils/config.js
CHANGED
|
@@ -5,7 +5,7 @@ const WORKSPACE_PATH = process.cwd();
|
|
|
5
5
|
|
|
6
6
|
const THEME_APP_DIR_PATH = path.resolve(WORKSPACE_PATH, 'theme-app');
|
|
7
7
|
|
|
8
|
-
const THEME_APP_CONFIG_PATH = path.resolve(WORKSPACE_PATH, '
|
|
8
|
+
const THEME_APP_CONFIG_PATH = path.resolve(WORKSPACE_PATH, 'extension.config.json')
|
|
9
9
|
|
|
10
10
|
const STORE_DOMAIN = get('store_domain');
|
|
11
11
|
|
|
@@ -13,11 +13,11 @@ const EXCHANGE_TOKEN = get('exchange_token');
|
|
|
13
13
|
|
|
14
14
|
const THEME_APP_TYPE = {
|
|
15
15
|
BASIC_APP: {
|
|
16
|
-
description: '
|
|
16
|
+
description: 'Basic Extension(a card storekeeper decide where it add)',
|
|
17
17
|
templatePath: path.resolve(__dirname, '../template/basic-app')
|
|
18
18
|
},
|
|
19
19
|
EMBEDS_APP: {
|
|
20
|
-
description: '
|
|
20
|
+
description: 'Embed Extension(a card not need add)',
|
|
21
21
|
templatePath: path.resolve(__dirname, '../template/embed-app')
|
|
22
22
|
}
|
|
23
23
|
};
|