shoplazza-cli 1.0.7 → 1.0.8

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 (124) hide show
  1. package/README.md +83 -2
  2. package/bin/shoplazza +8 -15
  3. package/lib/app/api/index.js +96 -0
  4. package/lib/app/commands/build.js +101 -53
  5. package/lib/app/commands/connect.js +73 -0
  6. package/lib/app/commands/create.js +105 -0
  7. package/lib/app/commands/deploy.js +45 -208
  8. package/lib/app/commands/list.js +35 -0
  9. package/lib/app/commands/release.js +59 -0
  10. package/lib/app/commands/serve.js +172 -0
  11. package/lib/app/commands/versions.js +55 -0
  12. package/lib/app/index.js +22 -30
  13. package/lib/app/template/basic-app/README.md +125 -0
  14. package/lib/app/template/basic-app/extension.config.json +4 -0
  15. package/lib/app/template/basic-app/package.json +18 -0
  16. package/lib/app/template/basic-app/theme-app/assets/index.css +4 -0
  17. package/lib/app/template/basic-app/theme-app/assets-manifest.json +1 -0
  18. package/lib/app/template/basic-app/theme-app/blocks/index.liquid +16 -0
  19. package/lib/app/template/basic-app/theme-app/locales/ar-SA.json +1 -0
  20. package/lib/app/template/basic-app/theme-app/locales/de-DE.json +1 -0
  21. package/lib/app/template/basic-app/theme-app/locales/en-US.json +6 -0
  22. package/lib/app/template/basic-app/theme-app/locales/es-ES.json +1 -0
  23. package/lib/app/template/basic-app/theme-app/locales/fr-FR.json +1 -0
  24. package/lib/app/template/basic-app/theme-app/locales/id-ID.json +1 -0
  25. package/lib/app/template/basic-app/theme-app/locales/it-IT.json +1 -0
  26. package/lib/app/template/basic-app/theme-app/locales/ja-JP.json +1 -0
  27. package/lib/app/template/basic-app/theme-app/locales/ko-KR.json +1 -0
  28. package/lib/app/template/basic-app/theme-app/locales/nl-NL.json +1 -0
  29. package/lib/app/template/basic-app/theme-app/locales/pl-PL.json +1 -0
  30. package/lib/app/template/basic-app/theme-app/locales/pt-PT.json +1 -0
  31. package/lib/app/template/basic-app/theme-app/locales/ru-RU.json +1 -0
  32. package/lib/app/template/basic-app/theme-app/locales/th-TH.json +1 -0
  33. package/lib/app/template/basic-app/theme-app/locales/zh-CN.json +6 -0
  34. package/lib/app/template/basic-app/theme-app/locales/zh-TW.json +1 -0
  35. package/lib/app/template/basic-app/theme-app/snippets/index.liquid +8 -0
  36. package/lib/app/template/embed-app/README.md +125 -0
  37. package/lib/app/template/embed-app/extension.config.json +4 -0
  38. package/lib/app/template/embed-app/package.json +18 -0
  39. package/lib/app/template/embed-app/theme-app/assets-manifest.json +1 -0
  40. package/lib/app/template/embed-app/theme-app/blocks/index.liquid +18 -0
  41. package/lib/app/template/embed-app/theme-app/locales/ar-SA.json +1 -0
  42. package/lib/app/template/embed-app/theme-app/locales/de-DE.json +1 -0
  43. package/lib/app/template/embed-app/theme-app/locales/en-US.json +6 -0
  44. package/lib/app/template/embed-app/theme-app/locales/es-ES.json +1 -0
  45. package/lib/app/template/embed-app/theme-app/locales/fr-FR.json +1 -0
  46. package/lib/app/template/embed-app/theme-app/locales/id-ID.json +1 -0
  47. package/lib/app/template/embed-app/theme-app/locales/it-IT.json +1 -0
  48. package/lib/app/template/embed-app/theme-app/locales/ja-JP.json +1 -0
  49. package/lib/app/template/embed-app/theme-app/locales/ko-KR.json +1 -0
  50. package/lib/app/template/embed-app/theme-app/locales/nl-NL.json +1 -0
  51. package/lib/app/template/embed-app/theme-app/locales/pl-PL.json +1 -0
  52. package/lib/app/template/embed-app/theme-app/locales/pt-PT.json +1 -0
  53. package/lib/app/template/embed-app/theme-app/locales/ru-RU.json +1 -0
  54. package/lib/app/template/embed-app/theme-app/locales/th-TH.json +1 -0
  55. package/lib/app/template/embed-app/theme-app/locales/zh-CN.json +6 -0
  56. package/lib/app/template/embed-app/theme-app/locales/zh-TW.json +1 -0
  57. package/lib/app/template/embed-app/theme-app/snippets/index.liquid +8 -0
  58. package/lib/app/template/embed-app/theme-app/snippets/index_css.liquid +6 -0
  59. package/lib/app/utils/config.js +32 -0
  60. package/lib/app/utils/index.js +213 -0
  61. package/lib/auth/getCode.js +2 -2
  62. package/lib/auth/index.js +2 -2
  63. package/lib/check.js +28 -0
  64. package/lib/checkout/api.js +12 -36
  65. package/lib/checkout/build.js +1 -1
  66. package/lib/checkout/create.js +1 -1
  67. package/lib/checkout/deploy.js +1 -1
  68. package/lib/checkout/dev/index.js +1 -1
  69. package/lib/checkout/fields.js +1 -1
  70. package/lib/checkout/preview.js +1 -1
  71. package/lib/checkout/pull.js +1 -0
  72. package/lib/checkout/push.js +1 -1
  73. package/lib/checkout/undeploy.js +1 -1
  74. package/lib/checkout/util.js +1 -1
  75. package/lib/checkout/verify.js +1 -1
  76. package/lib/commands/login.js +1 -1
  77. package/lib/commands/logout.js +1 -1
  78. package/lib/commands/theme/delete.js +1 -1
  79. package/lib/commands/theme/package.js +1 -1
  80. package/lib/commands/theme/publish.js +1 -1
  81. package/lib/commands/theme/pull.js +1 -1
  82. package/lib/commands/theme/push.js +1 -1
  83. package/lib/commands/theme/serve.js +2 -2
  84. package/lib/{app → common}/login.js +1 -1
  85. package/lib/function/bin/index.js +20 -0
  86. package/lib/function/bin/javy/javy-arm-linux-v5.0.1 +0 -0
  87. package/lib/function/bin/javy/javy-arm-macos-v5.0.1 +0 -0
  88. package/lib/function/bin/javy/javy-x86_64-linux-v5.0.1 +0 -0
  89. package/lib/function/bin/javy/javy-x86_64-macos-v5.0.1 +0 -0
  90. package/lib/function/bin/javy/javy-x86_64-windows-v5.0.1 +0 -0
  91. package/lib/function/commands/compile.js +42 -0
  92. package/lib/function/commands/create.js +77 -0
  93. package/lib/function/commands/list.js +18 -0
  94. package/lib/function/commands/release.js +69 -0
  95. package/lib/function/index.js +24 -0
  96. package/lib/function/template/js/README.md +37 -0
  97. package/lib/function/template/js/_gitignore +4 -0
  98. package/lib/function/template/js/extension.config.json +5 -0
  99. package/lib/function/template/js/package.json +17 -0
  100. package/lib/function/template/js/src/index.js +64 -0
  101. package/lib/function/utils.js +29 -0
  102. package/lib/openAPI/api.js +1 -1
  103. package/lib/openAPI/index.js +21 -11
  104. package/lib/oss.js +99 -0
  105. package/lib/partner-api/axios.js +67 -0
  106. package/lib/partner-api/index.js +79 -0
  107. package/lib/{checkout → utils}/console.js +3 -2
  108. package/lib/utils/env.js +17 -0
  109. package/lib/utils/file.js +48 -0
  110. package/lib/utils/platform.js +37 -0
  111. package/lib/{utils.js → utils/utils.js} +52 -0
  112. package/package.json +2 -2
  113. package/lib/app/commands/generate.js +0 -50
  114. package/lib/app/commands/publish.js +0 -52
  115. package/lib/app/extensions/index.js +0 -13
  116. package/lib/app/extensions/theme-app.js +0 -103
  117. package/lib/app/inquirers/version.js +0 -131
  118. /package/lib/{app → common}/constants.js +0 -0
  119. /package/lib/{app → common}/db/partner.js +0 -0
  120. /package/lib/{app → common}/inquirers/choose-app.js +0 -0
  121. /package/lib/{app → common}/inquirers/choose-partner.js +0 -0
  122. /package/lib/{app → common}/log.js +0 -0
  123. /package/lib/{app → common}/logout.js +0 -0
  124. /package/lib/{config.js → utils/config.js} +0 -0
@@ -0,0 +1,17 @@
1
+ function isDebug() {
2
+ return process.argv.indexOf('--debug') >= 0;
3
+ }
4
+
5
+ function isDevDebug() {
6
+ return process.argv.join('').indexOf('--debugdev') >= 0;
7
+ }
8
+ function isStgDebug() {
9
+ return process.argv.join('').indexOf('--debugstg') >= 0;
10
+ }
11
+
12
+ module.exports = {
13
+ isDebug,
14
+ isDevDebug,
15
+ isStgDebug
16
+ };
17
+
@@ -0,0 +1,48 @@
1
+ const path = require('path');
2
+ const fs = require('fs-extra');
3
+ const { getFileJson } = require('../checkout/util');
4
+
5
+ function copyDir(srcDir, destDir) {
6
+ fs.mkdirSync(destDir, { recursive: true });
7
+ for (const file of fs.readdirSync(srcDir)) {
8
+ const srcFile = path.resolve(srcDir, file);
9
+ const destFile = path.resolve(destDir, file);
10
+ copy(srcFile, destFile);
11
+ }
12
+ }
13
+
14
+ function copy(src, dest) {
15
+ const stat = fs.statSync(src);
16
+ if (stat.isDirectory()) {
17
+ copyDir(src, dest);
18
+ } else {
19
+ fs.copyFileSync(src, dest);
20
+ }
21
+ }
22
+
23
+ function getJsonFileContent(file) {
24
+ const content = fs.readFileSync(file, { encoding: 'utf-8' });
25
+ return JSON.parse(content);
26
+ }
27
+
28
+ const CONFIG_FILE = 'extension.config.json';
29
+
30
+ function getConfigJson(name = CONFIG_FILE) {
31
+ const _path = path.join(process.cwd(), name);
32
+ return getJsonFileContent(_path);
33
+ }
34
+
35
+ function updateConfigJson(_config, name = CONFIG_FILE) {
36
+ const config = getConfigJson();
37
+ Object.assign(config, _config);
38
+ const _path = path.join(process.cwd(), name);
39
+ fs.writeFileSync(_path, JSON.stringify(config, null, 2), { encoding: 'utf-8' });
40
+ }
41
+
42
+ module.exports = {
43
+ copy,
44
+ copyDir,
45
+ getFileJson,
46
+ getConfigJson,
47
+ updateConfigJson
48
+ };
@@ -0,0 +1,37 @@
1
+ function getArchPlatform() {
2
+ let platform;
3
+ let arch;
4
+ switch (process.platform.toLowerCase()) {
5
+ case 'darwin':
6
+ platform = 'macos';
7
+ break;
8
+ case 'linux':
9
+ platform = 'linux';
10
+ break;
11
+ case 'win32':
12
+ platform = 'windows';
13
+ break;
14
+ default:
15
+ throw Error(`Unsupported platform ${processPlatform}`);
16
+ }
17
+ switch (process.arch.toLowerCase()) {
18
+ case 'arm':
19
+ case 'arm64':
20
+ arch = 'arm';
21
+ break;
22
+ // A 32 bit arch likely needs that someone has 32bit Node installed on a
23
+ // 64 bit system, and wasmtime doesn't support 32bit anyway.
24
+ case 'ia32':
25
+ case 'x64':
26
+ arch = 'x86_64';
27
+ break;
28
+ default:
29
+ throw Error(`Unsupported architecture ${processArch}`);
30
+ }
31
+
32
+ return `${arch}-${platform}`;
33
+ }
34
+
35
+ module.exports = {
36
+ getArchPlatform
37
+ };
@@ -2,6 +2,8 @@ const path = require('path');
2
2
  const fs = require('fs-extra');
3
3
  const AdmZip = require('adm-zip');
4
4
  const chalk = require('chalk');
5
+ const chokidar = require('chokidar');
6
+ const fsExtra = require('fs-extra');
5
7
 
6
8
  const {
7
9
  SSO_AUTH_URL,
@@ -111,3 +113,53 @@ const SSO_AUTH_URL_MAP = {
111
113
  exports.getSSOAuthUrl = (store) => {
112
114
  return SSO_AUTH_URL_MAP[getEnv(store)];
113
115
  };
116
+
117
+ /**
118
+ * 监听文件夹变化
119
+ * @param {string} workspace - 需要监听的文件夹路径
120
+ * @param {Object} options - 配置项
121
+ * @param {Function} [options.onAdd] - 文件添加时的回调函数,接收文件路径作为参数
122
+ * @param {Function} [options.onChange] - 文件更改时的回调函数,接收文件路径作为参数
123
+ * @param {Function} [options.onDelete] - 文件删除时的回调函数,接收文件路径作为参数
124
+ * @param {any} [options.xxx] - 其他chokidar.watch配置项
125
+ * @returns {Function} - 取消监听的函数
126
+ */
127
+ exports.watchWorkspace = (workspace, options = {}) => {
128
+ if (!fsExtra.pathExistsSync(workspace)) {
129
+ console.error(chalk.red(`[ERROR] "${workspace}" does not exist.`));
130
+ return;
131
+ }
132
+ const defaultOptions = {
133
+ persistent: true,
134
+ ignoreInitial: true
135
+ };
136
+ const { onAdd = () => {}, onChange = () => {}, onDelete = () => {}, ...restOptions } = options;
137
+ const watcherOptions = { ...defaultOptions, ...restOptions };
138
+ const watcher = chokidar.watch(workspace, watcherOptions);
139
+
140
+ watcher.on('add', (filePath) => {
141
+ console.log(chalk.cyan(`[ADD] ${filePath}`));
142
+ onAdd(filePath);
143
+ });
144
+
145
+ watcher.on('change', (filePath) => {
146
+ console.log(chalk.cyan(`[CHANGE] ${filePath}`));
147
+ onChange(filePath);
148
+ });
149
+
150
+ watcher.on('unlink', (filePath) => {
151
+ console.log(chalk.cyan(`[DELETE] ${filePath}`));
152
+ onDelete(filePath);
153
+ });
154
+
155
+ watcher.on('error', (error) => {
156
+ console.error(chalk.red(`[ERROR] ${error}`));
157
+ });
158
+
159
+ const stopWatcher = () => {
160
+ console.log(chalk.green('[INFO] Stopping watcher...'));
161
+ watcher.close();
162
+ };
163
+
164
+ return stopWatcher;
165
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shoplazza-cli",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "",
5
5
  "main": "bin/shoplazza",
6
6
  "engines": {
@@ -26,7 +26,6 @@
26
26
  "@sentry/tracing": "^6.19.7",
27
27
  "adm-zip": "^0.5.9",
28
28
  "ali-oss": "^6.17.1",
29
- "archiver": "^5.3.1",
30
29
  "axios": "^1.6.8",
31
30
  "better-sqlite3": "^11.5.0",
32
31
  "chalk": "^4.1.2",
@@ -64,6 +63,7 @@
64
63
  "semver": "~7.3.5",
65
64
  "serve-static": "^1.15.0",
66
65
  "spark-md5": "^3.0.2",
66
+ "table": "^6.9.0",
67
67
  "uglify-js": "^3.17.4",
68
68
  "update-notifier": "^5.1.0",
69
69
  "vite": "~4.3.1",
@@ -1,50 +0,0 @@
1
- const inquirer = require('inquirer');
2
- const { set, PARTNER_KEYS } = require('../db/partner');
3
- const { themeAppHandler, checkoutUIHandler } = require('../extensions');
4
- const { line } = require('../log');
5
-
6
- const EXTENSION_TYPES = {
7
- CHECKOUT_UI: 'checkout_ui',
8
- THEME_APP: 'theme_app'
9
- };
10
-
11
- const generate = async () => {
12
- line();
13
- const answer = await inquirer.prompt([
14
- {
15
- type: 'list',
16
- name: 'extensionType',
17
- message: 'Choose your extension type ↓',
18
- default: EXTENSION_TYPES.THEME_APP,
19
- prefix: '*',
20
- choices: [
21
- {
22
- name: 'Theme App Extension',
23
- value: EXTENSION_TYPES.THEME_APP
24
- }
25
- ]
26
- },
27
- {
28
- type: 'input',
29
- name: 'extensionName',
30
- message: 'Input your extesion name: ',
31
- default: 'my-extension',
32
- prefix: '*'
33
- }
34
- ]);
35
- line();
36
-
37
- set({ [PARTNER_KEYS.EXTENSION_TYPE]: answer.extensionType });
38
-
39
- if (answer.extensionType === EXTENSION_TYPES.THEME_APP) {
40
- await themeAppHandler(answer.extensionName);
41
- } else if (answer.extensionType === EXTENSION_TYPES.CHECKOUT_UI) {
42
- await checkoutUIHandler(answer.extensionName);
43
- }
44
-
45
- line();
46
- };
47
-
48
- module.exports = {
49
- generate
50
- };
@@ -1,52 +0,0 @@
1
- const { default: axios } = require('axios');
2
- const { selectVersion } = require('../inquirers/version');
3
- const { PARNTER_URL } = require('../constants');
4
- const { get, getValue, PARTNER_KEYS } = require('../db/partner');
5
- const ora = require('ora');
6
- const chalk = require('chalk');
7
- const { getZipName } = require('./build');
8
- const { done, line } = require('../log');
9
-
10
- const publishVersion = async ({ version, appId, versionId, extensionId }) => {
11
- const spinner = ora(chalk.cyan('Waiting publish ...'));
12
-
13
- try {
14
- const partnerId = getValue(PARTNER_KEYS.PARTNER_ID);
15
- if (!partnerId) {
16
- spinner.fail(chalk.red('Please choose a partner first!'));
17
- return;
18
- }
19
-
20
- const url = `${PARNTER_URL}/api/partner/apps/${appId}/theme_extensions/${extensionId}/publications`;
21
- await axios.post(
22
- url,
23
- {
24
- name: getZipName(),
25
- version_id: versionId,
26
- type: 'enable'
27
- },
28
- {
29
- headers: {
30
- cookie: `awesomev2=${getValue(PARTNER_KEYS.SESSION_ID)};`,
31
- 'x-shoplazza-partner-id': partnerId
32
- }
33
- }
34
- );
35
-
36
- spinner.succeed();
37
- return true;
38
- } catch (e) {
39
- spinner.fail(e.message || e);
40
- }
41
- };
42
-
43
- const publish = async () => {
44
- const versionData = await selectVersion();
45
- await publishVersion(versionData);
46
- done();
47
- line();
48
- };
49
-
50
- module.exports = {
51
- publish
52
- };
@@ -1,13 +0,0 @@
1
- const { generateThemeDirectory } = require('./theme-app');
2
- const { done } = require('../log');
3
-
4
- const themeAppHandler = async (dirname = './') => {
5
- (await generateThemeDirectory(dirname)) && done();
6
- };
7
-
8
- const checkoutUIHandler = async () => {};
9
-
10
- module.exports = {
11
- themeAppHandler,
12
- checkoutUIHandler
13
- };
@@ -1,103 +0,0 @@
1
- const chalk = require('chalk');
2
- const ora = require('ora');
3
- const fs = require('fs-extra');
4
- const glob = require('glob');
5
- const repo = require('download-git-repo');
6
- const CleanCSS = require('clean-css');
7
- const UglifyJS = require('uglify-js');
8
-
9
- const crypto = require('crypto');
10
- const path = require('path');
11
- const { line } = require('../log');
12
-
13
- const rev = (input) => crypto.createHash('md5').update(input).digest('hex').slice(0, 8);
14
- const cleanCSS = new CleanCSS({
15
- advanced: false,
16
- aggressiveMerging: false
17
- });
18
-
19
- const generateThemeDirectory = async (dirname = './') => {
20
- const spinner = ora(chalk.cyan(`Waiting generate your theme app project...`)).start();
21
- try {
22
- await new Promise((resolve, reject) => {
23
- repo('Shoplazza/theme-extension-template', dirname, {}, (err) => {
24
- if (err) {
25
- reject(JSON.stringify(err));
26
- } else {
27
- resolve(true);
28
- }
29
- });
30
- });
31
-
32
- spinner.succeed(chalk.cyan(`Generate app successfully`));
33
- return true;
34
- } catch (e) {
35
- spinner.fail();
36
- console.log(chalk.red(e));
37
- }
38
- };
39
-
40
- const buildThemeAssets = async (outputDir = './dist', pathPrefix = '.') => {
41
- line();
42
- ora(chalk.cyan(`Prepare Build assets ...`)).succeed();
43
-
44
- const manifest = {};
45
-
46
- // build assets css
47
- const spinner = ora(chalk.cyan(`Build assets ...`)).start();
48
- try {
49
- const cssPathnames = glob.sync('./assets/*.css');
50
- const jsPathnames = glob.sync('./assets/*.js');
51
-
52
- const pathnames = [...cssPathnames, ...jsPathnames];
53
- for (const pathname of pathnames) {
54
- const filename = path.basename(pathname);
55
- const extname = path.extname(pathname);
56
- const fileContent = fs.readFileSync(pathname, 'utf8');
57
- const hash = rev(fileContent);
58
-
59
- let minified = '';
60
- let filenameWithHash = '';
61
- if (extname.includes('css')) {
62
- minified = cleanCSS.minify(fileContent);
63
- if (minified.errors.length) {
64
- spinner.fail(minified.errors);
65
- process.exit(-1);
66
- }
67
- filenameWithHash = `${filename.split('.')[0]}-${hash}.css`;
68
- const assetsPath = `${outputDir}/${filenameWithHash}`;
69
- fs.ensureFileSync(assetsPath);
70
- fs.writeFileSync(assetsPath, minified.styles);
71
- } else if (extname.includes('js')) {
72
- minified = UglifyJS.minify(fileContent);
73
- if (minified.error) {
74
- log.error(minified.error);
75
- process.exit(-1);
76
- }
77
- filenameWithHash = `${filename.split('.')[0]}-${hash}.js`;
78
- const assetsPath = `${outputDir}/${filenameWithHash}`;
79
- fs.ensureFileSync(assetsPath);
80
- fs.writeFileSync(assetsPath, minified.code);
81
- }
82
-
83
- manifest[filename] = pathPrefix + '/assets/' + filenameWithHash;
84
- }
85
-
86
- fs.writeFileSync(`./assets-manifest.json`, JSON.stringify(manifest));
87
- spinner.succeed(chalk.cyan(`Build assets done`));
88
- return true;
89
- } catch (e) {
90
- spinner.fail(chalk.red(e.message));
91
- }
92
-
93
- // build assets js
94
- const jsSpinner = ora(chalk.cyan(`Build js ...`)).start();
95
- try {
96
- jsSpinner.succeed(chalk.cyan(`Build js done`));
97
- } catch (e) {}
98
- };
99
-
100
- module.exports = {
101
- generateThemeDirectory,
102
- buildThemeAssets
103
- };
@@ -1,131 +0,0 @@
1
- const axios = require('axios');
2
- const chalk = require('chalk');
3
- const inquirer = require('inquirer');
4
-
5
- const { PARNTER_URL } = require('../constants');
6
- const { getApp, getValue, PARTNER_KEYS } = require('../db/partner');
7
- const { line } = require('../log');
8
-
9
- const requestLastVersion = async () => {
10
- try {
11
- const app = getApp();
12
- if (!app) {
13
- return;
14
- }
15
- const extensionId = getValue(PARTNER_KEYS.EXTENSION_ID);
16
- const partnerId = getValue(PARTNER_KEYS.PARTNER_ID);
17
-
18
- const url = `${PARNTER_URL}/api/partner/apps/${app.uid}/theme_extensions/${extensionId}/last_version`;
19
- const res = await axios.get(url, {
20
- headers: {
21
- cookie: `awesomev2=${getValue(PARTNER_KEYS.SESSION_ID)};`,
22
- 'x-shoplazza-partner-id': partnerId
23
- },
24
- validateStatus(status) {
25
- if (status === 404) {
26
- return true;
27
- }
28
- return status >= 200 && status < 299;
29
- }
30
- });
31
-
32
- if (res.data.errors) {
33
- return;
34
- }
35
-
36
- return res.data.version;
37
- } catch (e) {
38
- console.log(chalk.red(e.message || e));
39
- console.log(chalk.red(JSON.stringify(e.response?.data)));
40
- }
41
- };
42
-
43
- const requestVersionsData = async (params = {}) => {
44
- try {
45
- const app = getApp();
46
- if (!app) {
47
- return;
48
- }
49
- const extensionId = getValue(PARTNER_KEYS.EXTENSION_ID);
50
- const partnerId = getValue(PARTNER_KEYS.PARTNER_ID);
51
-
52
- const url = `${PARNTER_URL}/api/partner/apps/${app.uid}/theme_extensions/${extensionId}/versions`;
53
- const res = await axios.get(url, {
54
- params,
55
- headers: {
56
- cookie: `awesomev2=${getValue(PARTNER_KEYS.SESSION_ID)};`,
57
- 'x-shoplazza-partner-id': partnerId
58
- },
59
- validateStatus(status) {
60
- if (status === 404) {
61
- return true;
62
- }
63
- return status >= 200 && status < 299;
64
- }
65
- });
66
-
67
- if (res.data.errors) {
68
- throw new Error(JSON.stringify(res.data.errors));
69
- }
70
-
71
- return res.data.data;
72
- } catch (e) {
73
- console.log(chalk.red(e.message || e));
74
- console.log(chalk.red(JSON.stringify(e.response?.data)));
75
- }
76
- };
77
-
78
- const inputVersion = async () => {
79
- line();
80
- const lastVersionData = await requestLastVersion({ limit: 1 });
81
- const hint = lastVersionData ? chalk.gray(`(last version: ${lastVersionData.version})`) : '';
82
-
83
- const answer = await inquirer.prompt([
84
- {
85
- type: 'input',
86
- name: 'extensionVersion',
87
- message: `${chalk.blue('Input your extension version')} ${hint}:`,
88
- prefix: `${chalk.green('⭐️')}`
89
- }
90
- ]);
91
-
92
- return answer['extensionVersion'];
93
- };
94
-
95
- const selectVersion = async () => {
96
- line();
97
-
98
- const versionDataList = await requestVersionsData();
99
- if (!versionDataList) {
100
- console.log(chalk.red('Please deploy a version first!'));
101
- line();
102
- }
103
-
104
- const answer = await inquirer.prompt([
105
- {
106
- type: 'list',
107
- name: 'versionData',
108
- message: `${chalk.blue('Choose a version to publish:')}`,
109
- default: versionDataList[0].version,
110
- prefix: `${chalk.blue('🐱')}`,
111
- choices: versionDataList.map((v) => {
112
- return {
113
- name: `${v.version} ${v.published ? chalk.green('published') : ''}`,
114
- value: {
115
- version: v.version,
116
- appId: v.app_id,
117
- versionId: v.version_id,
118
- extensionId: v.extension_id
119
- }
120
- };
121
- })
122
- }
123
- ]);
124
-
125
- return answer['versionData'];
126
- };
127
-
128
- module.exports = {
129
- inputVersion,
130
- selectVersion
131
- };
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes