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.
Files changed (61) hide show
  1. package/bin/shoplazza +14 -3
  2. package/lib/app/commands/build.js +53 -74
  3. package/lib/app/commands/deploy.js +210 -39
  4. package/lib/app/commands/generate.js +50 -0
  5. package/lib/app/commands/publish.js +52 -0
  6. package/lib/app/extensions/index.js +13 -0
  7. package/lib/app/extensions/theme-app.js +103 -0
  8. package/lib/app/index.js +29 -17
  9. package/lib/app/inquirers/version.js +131 -0
  10. package/lib/checkout/api.js +34 -11
  11. package/lib/commands/login.js +1 -1
  12. package/lib/commands/logout.js +1 -1
  13. package/lib/openAPI/index.js +10 -21
  14. package/lib/utils.js +0 -52
  15. package/package.json +2 -2
  16. package/lib/app/api/api.js +0 -93
  17. package/lib/app/api/request.js +0 -72
  18. package/lib/app/commands/create.js +0 -100
  19. package/lib/app/commands/list.js +0 -31
  20. package/lib/app/commands/serve.js +0 -118
  21. package/lib/app/commands/versions.js +0 -44
  22. package/lib/app/template/basic-app/.ci/k8s.yaml +0 -4
  23. package/lib/app/template/basic-app/README.md +0 -84
  24. package/lib/app/template/basic-app/package.json +0 -15
  25. package/lib/app/template/basic-app/theme-app/assets/index.css +0 -4
  26. package/lib/app/template/basic-app/theme-app/blocks/index.liquid +0 -14
  27. package/lib/app/template/basic-app/theme-app/snippets/index.liquid +0 -8
  28. package/lib/app/template/basic-app/theme-app.config.json +0 -4
  29. package/lib/app/template/embed-app/.ci/k8s.yaml +0 -4
  30. package/lib/app/template/embed-app/README.md +0 -84
  31. package/lib/app/template/embed-app/package.json +0 -15
  32. package/lib/app/template/embed-app/theme-app/assets/index.css +0 -4
  33. package/lib/app/template/embed-app/theme-app/blocks/index.liquid +0 -15
  34. package/lib/app/template/embed-app/theme-app/locales/ar-SA.json +0 -3
  35. package/lib/app/template/embed-app/theme-app/locales/de-DE.json +0 -3
  36. package/lib/app/template/embed-app/theme-app/locales/en-US.json +0 -3
  37. package/lib/app/template/embed-app/theme-app/locales/es-ES.json +0 -3
  38. package/lib/app/template/embed-app/theme-app/locales/fr-FR.json +0 -3
  39. package/lib/app/template/embed-app/theme-app/locales/id-ID.json +0 -3
  40. package/lib/app/template/embed-app/theme-app/locales/it-IT.json +0 -3
  41. package/lib/app/template/embed-app/theme-app/locales/ja-JP.json +0 -3
  42. package/lib/app/template/embed-app/theme-app/locales/ko-KR.json +0 -3
  43. package/lib/app/template/embed-app/theme-app/locales/nl-NL.json +0 -3
  44. package/lib/app/template/embed-app/theme-app/locales/pl-PL.json +0 -3
  45. package/lib/app/template/embed-app/theme-app/locales/pt-PT.json +0 -3
  46. package/lib/app/template/embed-app/theme-app/locales/ru-RU.json +0 -3
  47. package/lib/app/template/embed-app/theme-app/locales/th-TH.json +0 -3
  48. package/lib/app/template/embed-app/theme-app/locales/zh-CN.json +0 -3
  49. package/lib/app/template/embed-app/theme-app/locales/zh-TW.json +0 -3
  50. package/lib/app/template/embed-app/theme-app/snippets/index.liquid +0 -8
  51. package/lib/app/template/embed-app/theme-app.config.json +0 -4
  52. package/lib/app/utils/config.js +0 -29
  53. package/lib/app/utils/index.js +0 -220
  54. package/lib/oss.js +0 -102
  55. /package/lib/{common → app}/constants.js +0 -0
  56. /package/lib/{common → app}/db/partner.js +0 -0
  57. /package/lib/{common → app}/inquirers/choose-app.js +0 -0
  58. /package/lib/{common → app}/inquirers/choose-partner.js +0 -0
  59. /package/lib/{common → app}/log.js +0 -0
  60. /package/lib/{common → app}/login.js +0 -0
  61. /package/lib/{common → app}/logout.js +0 -0
@@ -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,4 +0,0 @@
1
- deployJob:
2
- name: {{projectName}}-deployjob
3
- alarmHandler:
4
- group: none
@@ -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,4 +0,0 @@
1
- /* css code */
2
- .container {
3
- color: red;
4
- }
@@ -1,14 +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
- "settings": []
13
- }
14
- {% endschema %}
@@ -1,8 +0,0 @@
1
- <div>
2
- Shoplazza theme APP
3
- </div>
4
-
5
-
6
-
7
-
8
-
@@ -1,4 +0,0 @@
1
- {
2
- "appId": "",
3
- "appName": "{{projectName}}"
4
- }
@@ -1,4 +0,0 @@
1
- deployJob:
2
- name: {{projectName}}-deployjob
3
- alarmHandler:
4
- group: none
@@ -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,4 +0,0 @@
1
- /* css code */
2
- .container {
3
- color: red;
4
- }
@@ -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 %}
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,3 +0,0 @@
1
- {
2
- "general": {}
3
- }
@@ -1,8 +0,0 @@
1
- <div>
2
- Shoplazza theme APP
3
- </div>
4
-
5
-
6
-
7
-
8
-
@@ -1,4 +0,0 @@
1
- {
2
- "appId": "",
3
- "appName": ""
4
- }
@@ -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
- };