shoplazza-cli 1.0.5 → 1.0.7-beta.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/bin/shoplazza +3 -14
- package/lib/app/api/index.js +96 -0
- package/lib/app/commands/build.js +101 -53
- package/lib/app/commands/create.js +101 -0
- package/lib/app/commands/deploy.js +44 -208
- package/lib/app/commands/list.js +35 -0
- package/lib/app/commands/serve.js +171 -0
- package/lib/app/commands/versions.js +52 -0
- package/lib/app/index.js +19 -30
- package/lib/app/template/basic-app/README.md +98 -0
- package/lib/app/template/basic-app/package.json +16 -0
- package/lib/app/template/basic-app/theme-app/assets/index.css +4 -0
- package/lib/app/template/basic-app/theme-app/assets-manifest.json +1 -0
- package/lib/app/template/basic-app/theme-app/blocks/index.liquid +16 -0
- package/lib/app/template/basic-app/theme-app/snippets/index.liquid +8 -0
- package/lib/app/template/basic-app/theme-extension.config.json +4 -0
- package/lib/app/template/embed-app/README.md +97 -0
- package/lib/app/template/embed-app/package.json +16 -0
- package/lib/app/template/embed-app/theme-app/assets-manifest.json +1 -0
- package/lib/app/template/embed-app/theme-app/blocks/index.liquid +18 -0
- package/lib/app/template/embed-app/theme-app/locales/ar-SA.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/de-DE.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/en-US.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/es-ES.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/fr-FR.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/id-ID.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/it-IT.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/ja-JP.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/ko-KR.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/nl-NL.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/pl-PL.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/pt-PT.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/ru-RU.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/th-TH.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/zh-CN.json +3 -0
- package/lib/app/template/embed-app/theme-app/locales/zh-TW.json +3 -0
- package/lib/app/template/embed-app/theme-app/snippets/index.liquid +8 -0
- package/lib/app/template/embed-app/theme-app/snippets/index_css.liquid +6 -0
- package/lib/app/template/embed-app/theme-extension.config.json +4 -0
- package/lib/app/utils/config.js +32 -0
- package/lib/app/utils/index.js +213 -0
- package/lib/checkout/api.js +11 -34
- package/lib/checkout/build/plugin/vite-plugin-transform-extension-html.js +1 -1
- package/lib/checkout/dev/index.js +2 -1
- package/lib/commands/login.js +1 -1
- package/lib/commands/logout.js +1 -1
- package/lib/openAPI/index.js +21 -10
- package/lib/oss.js +99 -0
- package/lib/utils.js +52 -0
- package/package.json +2 -2
- package/lib/app/commands/generate.js +0 -50
- package/lib/app/commands/publish.js +0 -52
- package/lib/app/extensions/index.js +0 -13
- package/lib/app/extensions/theme-app.js +0 -103
- package/lib/app/inquirers/version.js +0 -131
- /package/lib/{app → common}/constants.js +0 -0
- /package/lib/{app → common}/db/partner.js +0 -0
- /package/lib/{app → common}/inquirers/choose-app.js +0 -0
- /package/lib/{app → common}/inquirers/choose-partner.js +0 -0
- /package/lib/{app → common}/log.js +0 -0
- /package/lib/{app → common}/login.js +0 -0
- /package/lib/{app → common}/logout.js +0 -0
|
@@ -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
|