shoplazza-cli 1.0.6 → 1.0.7
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 +14 -3
- package/lib/app/commands/build.js +53 -74
- package/lib/app/commands/deploy.js +210 -39
- package/lib/app/commands/generate.js +50 -0
- package/lib/app/commands/publish.js +52 -0
- package/lib/app/extensions/index.js +13 -0
- package/lib/app/extensions/theme-app.js +103 -0
- package/lib/app/index.js +29 -17
- package/lib/app/inquirers/version.js +131 -0
- package/lib/checkout/api.js +34 -11
- package/lib/commands/login.js +1 -1
- package/lib/commands/logout.js +1 -1
- package/lib/openAPI/index.js +10 -21
- package/lib/utils.js +0 -52
- package/package.json +2 -2
- package/lib/app/api/api.js +0 -93
- package/lib/app/api/request.js +0 -72
- package/lib/app/commands/create.js +0 -100
- package/lib/app/commands/list.js +0 -31
- package/lib/app/commands/serve.js +0 -118
- package/lib/app/commands/versions.js +0 -44
- package/lib/app/template/basic-app/.ci/k8s.yaml +0 -4
- package/lib/app/template/basic-app/README.md +0 -84
- package/lib/app/template/basic-app/package.json +0 -15
- package/lib/app/template/basic-app/theme-app/assets/index.css +0 -4
- package/lib/app/template/basic-app/theme-app/blocks/index.liquid +0 -14
- package/lib/app/template/basic-app/theme-app/snippets/index.liquid +0 -8
- package/lib/app/template/basic-app/theme-app.config.json +0 -4
- package/lib/app/template/embed-app/.ci/k8s.yaml +0 -4
- package/lib/app/template/embed-app/README.md +0 -84
- package/lib/app/template/embed-app/package.json +0 -15
- package/lib/app/template/embed-app/theme-app/assets/index.css +0 -4
- package/lib/app/template/embed-app/theme-app/blocks/index.liquid +0 -15
- package/lib/app/template/embed-app/theme-app/locales/ar-SA.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/de-DE.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/en-US.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/es-ES.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/fr-FR.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/id-ID.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/it-IT.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/ja-JP.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/ko-KR.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/nl-NL.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/pl-PL.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/pt-PT.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/ru-RU.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/th-TH.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/zh-CN.json +0 -3
- package/lib/app/template/embed-app/theme-app/locales/zh-TW.json +0 -3
- package/lib/app/template/embed-app/theme-app/snippets/index.liquid +0 -8
- package/lib/app/template/embed-app/theme-app.config.json +0 -4
- package/lib/app/utils/config.js +0 -29
- package/lib/app/utils/index.js +0 -220
- package/lib/oss.js +0 -102
- /package/lib/{common → app}/constants.js +0 -0
- /package/lib/{common → app}/db/partner.js +0 -0
- /package/lib/{common → app}/inquirers/choose-app.js +0 -0
- /package/lib/{common → app}/inquirers/choose-partner.js +0 -0
- /package/lib/{common → app}/log.js +0 -0
- /package/lib/{common → app}/login.js +0 -0
- /package/lib/{common → app}/logout.js +0 -0
package/lib/app/commands/list.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
const chalk = require('chalk');
|
|
2
|
-
const ora = require('ora');
|
|
3
|
-
const { getThemeAppConfig, renderTable } = require('../utils');
|
|
4
|
-
const { getThemeAppList } = require('../api/api');
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* 控制台提示
|
|
8
|
-
*/
|
|
9
|
-
function consoleTips(versionList) {
|
|
10
|
-
console.log(chalk.green('\n📜 Available Theme Apps:'));
|
|
11
|
-
console.log(
|
|
12
|
-
renderTable(versionList, [
|
|
13
|
-
{ label: 'Name', filed: 'name' },
|
|
14
|
-
{ label: 'Version', filed: 'version', color: 'yellowBright' },
|
|
15
|
-
{ label: 'Description', filed: 'description' }
|
|
16
|
-
])
|
|
17
|
-
);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async function list() {
|
|
21
|
-
try {
|
|
22
|
-
const themeAppList = await getThemeAppList();
|
|
23
|
-
consoleTips(themeAppList);
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error(chalk.red(`[ERROR IN LIST] ${error.message}`));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
module.exports = {
|
|
30
|
-
list
|
|
31
|
-
};
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const chalk = require('chalk');
|
|
3
|
-
const inquirer = require('inquirer');
|
|
4
|
-
const { STORE_DOMAIN, THEME_APP_PATH, EXCHANGE_TOKEN } = require('../utils/config');
|
|
5
|
-
const { compress, getThemeAppConfig, setThemeAppConfig } = require('../utils');
|
|
6
|
-
const { toCreateThemeApp, toUploadThemeApp, getTaskStatus, getThemeList } = require('../api/api');
|
|
7
|
-
const { initWatcher } = require('../../utils');
|
|
8
|
-
const { useOss } = require('../../oss');
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 模拟上传文件到服务器
|
|
12
|
-
*/
|
|
13
|
-
async function uploadFileToServer(filePath) {
|
|
14
|
-
console.log(chalk.blue(`[UPLOAD] ${filePath} - Uploading to server...`));
|
|
15
|
-
// TODO: 替换为实际的上传逻辑(例如调用后端 API 或 WebSocket 通信)
|
|
16
|
-
await new Promise((resolve) => setTimeout(resolve, 1000)); // 模拟网络延迟
|
|
17
|
-
console.log(chalk.green(`[SUCCESS] ${filePath} - Uploaded successfully.`));
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* 控制台提示信息
|
|
22
|
-
*/
|
|
23
|
-
function consoleTips(selectedThemeId, appId) {
|
|
24
|
-
console.log(`\n======================================PREVIEW URLS======================================`);
|
|
25
|
-
console.log(chalk.cyan.bold('🔗 Admin Preview URL:'));
|
|
26
|
-
console.log(
|
|
27
|
-
chalk.blueBright(` https://${STORE_DOMAIN}/admin/card?theme_id=${selectedThemeId}&ext_debug=${appId}\n`)
|
|
28
|
-
);
|
|
29
|
-
console.log(chalk.cyan.bold('🔗 Storefront Preview URL:'));
|
|
30
|
-
console.log(chalk.blueBright(` https://${STORE_DOMAIN}?preview_theme_id=${selectedThemeId}&ext_debug[]=${appId}\n`));
|
|
31
|
-
console.log(`=====================================WATCHER RUNNING=====================================`);
|
|
32
|
-
console.log(chalk.green(`🎉 File watcher is now running!`));
|
|
33
|
-
console.log(chalk.green(`📂 Watching directory:`), chalk.blue(THEME_APP_PATH));
|
|
34
|
-
console.log(chalk.green(`✨ You can make changes to your files, and they will be processed automatically.`));
|
|
35
|
-
console.log(chalk.green(`🚀 Press Ctrl+C to stop.\n`));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* 同步本地代码到远程服务器
|
|
40
|
-
*/
|
|
41
|
-
async function syncLocalFiles(appId) {
|
|
42
|
-
const { zipPath, zipName } = await compress(THEME_APP_PATH);
|
|
43
|
-
const { uploadOss } = useOss(
|
|
44
|
-
EXCHANGE_TOKEN,
|
|
45
|
-
STORE_DOMAIN,
|
|
46
|
-
`✗ No store found. Please run ${chalk.cyan('shoplazza login')} to login to a specific store.`
|
|
47
|
-
);
|
|
48
|
-
const zipOssUrl = await uploadOss(zipPath, zipName);
|
|
49
|
-
const res = await toUploadThemeApp({
|
|
50
|
-
extension_id: appId,
|
|
51
|
-
resource_url: zipOssUrl
|
|
52
|
-
});
|
|
53
|
-
const taskId = res.data?.task_id;
|
|
54
|
-
// 轮询查看任务是否完成
|
|
55
|
-
while (true) {
|
|
56
|
-
const res = await getTaskStatus({ taskId });
|
|
57
|
-
if (res.data?.task?.state === 1) {
|
|
58
|
-
console.log(chalk.green(`[SUCCESS] Theme app pushed successfully.`));
|
|
59
|
-
break;
|
|
60
|
-
} else if (res.data?.task?.state === 2) {
|
|
61
|
-
console.error(chalk.red(`[ERROR] Theme app push failed: ${res.data?.task?.error_message}`));
|
|
62
|
-
break;
|
|
63
|
-
} else {
|
|
64
|
-
console.log(chalk.yellow(`[WAITING] Theme app push in progress...`));
|
|
65
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* 交互选择预览主题
|
|
72
|
-
*/
|
|
73
|
-
async function usePrompt() {
|
|
74
|
-
const res = await getThemeList();
|
|
75
|
-
const themeList = res.data?.data?.themes || [];
|
|
76
|
-
const { selectedThemeId } = await inquirer.prompt([
|
|
77
|
-
{
|
|
78
|
-
type: 'list',
|
|
79
|
-
name: 'selectedThemeId',
|
|
80
|
-
message: 'Please select a theme to preview:',
|
|
81
|
-
choices: themeList.map((theme) => ({
|
|
82
|
-
name: theme.name,
|
|
83
|
-
value: theme.id
|
|
84
|
-
}))
|
|
85
|
-
}
|
|
86
|
-
]);
|
|
87
|
-
return selectedThemeId;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* 创建主题插件
|
|
92
|
-
*/
|
|
93
|
-
async function createThemeApp(appName) {
|
|
94
|
-
const res = await toCreateThemeApp({
|
|
95
|
-
title: appName
|
|
96
|
-
});
|
|
97
|
-
const appId = res.data?.extension_id;
|
|
98
|
-
// QQQ1
|
|
99
|
-
await setThemeAppConfig({ appId });
|
|
100
|
-
return appId;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
async function serve() {
|
|
104
|
-
try {
|
|
105
|
-
let { appId, appName } = await getThemeAppConfig();
|
|
106
|
-
// if (!appId) {
|
|
107
|
-
// appId = createThemeApp(appName);
|
|
108
|
-
// }
|
|
109
|
-
// await syncLocalFiles(appId);
|
|
110
|
-
const selectedThemeId = await usePrompt();
|
|
111
|
-
initWatcher(THEME_APP_PATH);
|
|
112
|
-
consoleTips(selectedThemeId, appId);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
console.error(chalk.red(`[ERROR IN SERVE] ${error.message}`));
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
module.exports = { serve };
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
const chalk = require('chalk');
|
|
2
|
-
const ora = require('ora');
|
|
3
|
-
const { getThemeAppConfig, renderTable } = require('../utils');
|
|
4
|
-
const { getThemeAppVersionList } = require('../api/api');
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* 控制台提示
|
|
8
|
-
*/
|
|
9
|
-
function consoleTips(versionList) {
|
|
10
|
-
console.log(chalk.green('\n📜 Available Versions:'));
|
|
11
|
-
console.log(
|
|
12
|
-
renderTable(versionList, [
|
|
13
|
-
{
|
|
14
|
-
label: 'Version',
|
|
15
|
-
filed: 'version',
|
|
16
|
-
color: 'yellowBright'
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
label: 'Date',
|
|
20
|
-
filed: 'date',
|
|
21
|
-
color: 'blackBright'
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
label: 'Description',
|
|
25
|
-
filed: 'description',
|
|
26
|
-
color: 'whiteBright'
|
|
27
|
-
}
|
|
28
|
-
])
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async function versions() {
|
|
33
|
-
try {
|
|
34
|
-
const { appId } = await getThemeAppConfig();
|
|
35
|
-
const versionList = await getThemeAppVersionList({ appId });
|
|
36
|
-
consoleTips(versionList);
|
|
37
|
-
} catch (error) {
|
|
38
|
-
console.error(chalk.red(`[ERROR IN VERSIONS] ${error.message}`));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
module.exports = {
|
|
43
|
-
versions
|
|
44
|
-
};
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# Theme Basic App
|
|
2
|
-
|
|
3
|
-
## 概览
|
|
4
|
-
|
|
5
|
-
一个基础的主题插件项目
|
|
6
|
-
|
|
7
|
-
## 安装
|
|
8
|
-
|
|
9
|
-
首先,确保您安装了“Shoplazza CLI”。如果没有,您可以使用以下命令全局安装它:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npm install -g shoplazza-cli
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## 可用的脚本
|
|
16
|
-
|
|
17
|
-
### `create`
|
|
18
|
-
|
|
19
|
-
创建主题插件项目模版
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
shoplazza app create
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
进入项目目录后,即可使用以下命令:
|
|
28
|
-
|
|
29
|
-
### `start`
|
|
30
|
-
|
|
31
|
-
启动开发模式
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npm start
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
或者
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
shoplazza app serve
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### `build`
|
|
44
|
-
|
|
45
|
-
基于当前的草稿生成对应正式版本的主题插件
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npm run build
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
或者
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
shoplazza app build
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### `deploy`
|
|
58
|
-
|
|
59
|
-
部署正式版本的主题插件(部署后插件在店铺的主题编辑器的app列表中可见)
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
npm run deploy
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
或者
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
shoplazza app deploy
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### `versions`
|
|
72
|
-
|
|
73
|
-
查询主题插件的历史正式版本列表
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
npm run versions
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
或者
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
shoplazza app versions
|
|
83
|
-
```
|
|
84
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{projectName}}",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "theme basic app",
|
|
5
|
-
"main": "null",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"start": "shoplazza app serve",
|
|
8
|
-
"build": "shoplazza app build",
|
|
9
|
-
"deploy": "shoplazza app deploy",
|
|
10
|
-
"versions": "shoplazza app versions"
|
|
11
|
-
},
|
|
12
|
-
"keywords": [],
|
|
13
|
-
"author": "",
|
|
14
|
-
"license": "ISC"
|
|
15
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# Theme Embed App
|
|
2
|
-
|
|
3
|
-
## 概览
|
|
4
|
-
|
|
5
|
-
一个 embed 的主题插件项目
|
|
6
|
-
|
|
7
|
-
## 安装
|
|
8
|
-
|
|
9
|
-
首先,确保您安装了“Shoplazza CLI”。如果没有,您可以使用以下命令全局安装它:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npm install -g shoplazza-cli
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## 可用的脚本
|
|
16
|
-
|
|
17
|
-
### `create`
|
|
18
|
-
|
|
19
|
-
创建主题插件项目模版
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
shoplazza app create
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
进入项目目录后,即可使用以下命令:
|
|
28
|
-
|
|
29
|
-
### `start`
|
|
30
|
-
|
|
31
|
-
启动开发模式
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npm start
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
或者
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
shoplazza app serve
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### `build`
|
|
44
|
-
|
|
45
|
-
基于当前的草稿生成对应正式版本的主题插件
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npm run build
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
或者
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
shoplazza app build
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### `deploy`
|
|
58
|
-
|
|
59
|
-
部署正式版本的主题插件(部署后插件在店铺的主题编辑器的app列表中可见)
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
npm run deploy
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
或者
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
shoplazza app deploy
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### `versions`
|
|
72
|
-
|
|
73
|
-
查询主题插件的历史正式版本列表
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
npm run versions
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
或者
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
shoplazza app versions
|
|
83
|
-
```
|
|
84
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{projectName}}",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "theme embed app",
|
|
5
|
-
"main": "null",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"start": "shoplazza app serve",
|
|
8
|
-
"build": "shoplazza app build",
|
|
9
|
-
"deploy": "shoplazza app deploy",
|
|
10
|
-
"versions": "shoplazza app versions"
|
|
11
|
-
},
|
|
12
|
-
"keywords": [],
|
|
13
|
-
"author": "",
|
|
14
|
-
"license": "ISC"
|
|
15
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<div id="{{projectName}}" class="container">
|
|
2
|
-
<p>Hello world</p>
|
|
3
|
-
</div>
|
|
4
|
-
{% include "{{projectName}}_snippet" %}
|
|
5
|
-
|
|
6
|
-
{% schema %}
|
|
7
|
-
{
|
|
8
|
-
"name": {
|
|
9
|
-
"en-US": "default name",
|
|
10
|
-
"zh-CN": "默认名称"
|
|
11
|
-
},
|
|
12
|
-
"target":"body",
|
|
13
|
-
"settings": []
|
|
14
|
-
}
|
|
15
|
-
{% endschema %}
|
package/lib/app/utils/config.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const { get } = require('../../db/user');
|
|
3
|
-
|
|
4
|
-
const WORKSPACE_PATH = process.cwd();
|
|
5
|
-
|
|
6
|
-
const THEME_APP_PATH = path.resolve(WORKSPACE_PATH, 'theme-app');
|
|
7
|
-
|
|
8
|
-
const STORE_DOMAIN = get('store_domain');
|
|
9
|
-
|
|
10
|
-
const EXCHANGE_TOKEN = get('exchange_token');
|
|
11
|
-
|
|
12
|
-
const THEME_APP_TYPE = {
|
|
13
|
-
BASIC_APP: {
|
|
14
|
-
description: 'basic app(just an basic app)',
|
|
15
|
-
templatePath: path.resolve(__dirname, '../template/basic-app')
|
|
16
|
-
},
|
|
17
|
-
EMBEDS_APP: {
|
|
18
|
-
description: 'embed app(embed in a theme)',
|
|
19
|
-
templatePath: path.resolve(__dirname, '../template/embed-app')
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
module.exports = {
|
|
24
|
-
WORKSPACE_PATH,
|
|
25
|
-
THEME_APP_PATH,
|
|
26
|
-
STORE_DOMAIN,
|
|
27
|
-
EXCHANGE_TOKEN,
|
|
28
|
-
THEME_APP_TYPE,
|
|
29
|
-
};
|