@jetshop/cli 5.7.0
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/README.md +61 -0
- package/bin/run +5 -0
- package/bin/run.cmd +3 -0
- package/npm-shrinkwrap.json +182 -0
- package/oclif.manifest.json +1 -0
- package/package.json +64 -0
- package/src/commands/init.js +176 -0
- package/src/index.js +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# jetshop-cli
|
|
2
|
+
|
|
3
|
+
[](https://oclif.io)
|
|
4
|
+
[](https://npmjs.org/package/jetshop-cli)
|
|
5
|
+
[](https://npmjs.org/package/jetshop-cli)
|
|
6
|
+
[](https://github.com/git/jetshop-cli/blob/master/package.json)
|
|
7
|
+
|
|
8
|
+
<!-- toc -->
|
|
9
|
+
* [jetshop-cli](#jetshop-cli)
|
|
10
|
+
* [Usage](#usage)
|
|
11
|
+
* [Commands](#commands)
|
|
12
|
+
<!-- tocstop -->
|
|
13
|
+
|
|
14
|
+
# Usage
|
|
15
|
+
|
|
16
|
+
<!-- usage -->
|
|
17
|
+
```sh-session
|
|
18
|
+
$ npm install -g @jetshop/cli
|
|
19
|
+
$ jetshop COMMAND
|
|
20
|
+
running command...
|
|
21
|
+
$ jetshop (-v|--version|version)
|
|
22
|
+
@jetshop/cli/5.7.0 darwin-x64 node-v14.17.0
|
|
23
|
+
$ jetshop --help [COMMAND]
|
|
24
|
+
USAGE
|
|
25
|
+
$ jetshop COMMAND
|
|
26
|
+
...
|
|
27
|
+
```
|
|
28
|
+
<!-- usagestop -->
|
|
29
|
+
|
|
30
|
+
# Commands
|
|
31
|
+
|
|
32
|
+
<!-- commands -->
|
|
33
|
+
* [`jetshop help [COMMAND]`](#jetshop-help-command)
|
|
34
|
+
* [`jetshop init [REPONAME] [SHOPID]`](#jetshop-init-reponame-shopid)
|
|
35
|
+
|
|
36
|
+
## `jetshop help [COMMAND]`
|
|
37
|
+
|
|
38
|
+
display help for jetshop
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
USAGE
|
|
42
|
+
$ jetshop help [COMMAND]
|
|
43
|
+
|
|
44
|
+
ARGUMENTS
|
|
45
|
+
COMMAND command to show help for
|
|
46
|
+
|
|
47
|
+
OPTIONS
|
|
48
|
+
--all see all commands in CLI
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v2.2.0/src/commands/help.ts)_
|
|
52
|
+
|
|
53
|
+
## `jetshop init [REPONAME] [SHOPID]`
|
|
54
|
+
|
|
55
|
+
Setup of base project for jetshop e-commerce
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
USAGE
|
|
59
|
+
$ jetshop init [REPONAME] [SHOPID]
|
|
60
|
+
```
|
|
61
|
+
<!-- commandsstop -->
|
package/bin/run
ADDED
package/bin/run.cmd
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jetshop/cli",
|
|
3
|
+
"version": "5.7.0",
|
|
4
|
+
"lockfileVersion": 1,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"acorn": {
|
|
8
|
+
"version": "7.1.0",
|
|
9
|
+
"dev": true
|
|
10
|
+
},
|
|
11
|
+
"acorn-jsx": {
|
|
12
|
+
"version": "5.1.0",
|
|
13
|
+
"dev": true
|
|
14
|
+
},
|
|
15
|
+
"ansi-escapes": {
|
|
16
|
+
"version": "4.3.0",
|
|
17
|
+
"dev": true
|
|
18
|
+
},
|
|
19
|
+
"ansi-regex": {
|
|
20
|
+
"version": "5.0.0",
|
|
21
|
+
"dev": true
|
|
22
|
+
},
|
|
23
|
+
"cli-cursor": {
|
|
24
|
+
"version": "3.1.0",
|
|
25
|
+
"dev": true,
|
|
26
|
+
"requires": {
|
|
27
|
+
"restore-cursor": "^3.1.0"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"dir-glob": {
|
|
31
|
+
"version": "2.2.2",
|
|
32
|
+
"dev": true
|
|
33
|
+
},
|
|
34
|
+
"emoji-regex": {
|
|
35
|
+
"version": "7.0.3",
|
|
36
|
+
"dev": true
|
|
37
|
+
},
|
|
38
|
+
"eslint": {
|
|
39
|
+
"version": "6.6.0",
|
|
40
|
+
"dev": true,
|
|
41
|
+
"requires": {
|
|
42
|
+
"espree": "^6.1.2",
|
|
43
|
+
"file-entry-cache": "^5.0.1",
|
|
44
|
+
"inquirer": "^7.0.0",
|
|
45
|
+
"semver": "^6.1.2",
|
|
46
|
+
"strip-json-comments": "^3.0.1",
|
|
47
|
+
"table": "^5.2.3"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"espree": {
|
|
51
|
+
"version": "6.1.2",
|
|
52
|
+
"dev": true,
|
|
53
|
+
"requires": {
|
|
54
|
+
"acorn": "^7.1.0",
|
|
55
|
+
"acorn-jsx": "^5.1.0"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"figures": {
|
|
59
|
+
"version": "3.1.0",
|
|
60
|
+
"dev": true
|
|
61
|
+
},
|
|
62
|
+
"file-entry-cache": {
|
|
63
|
+
"version": "5.0.1",
|
|
64
|
+
"dev": true,
|
|
65
|
+
"requires": {
|
|
66
|
+
"flat-cache": "^2.0.1"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"flat-cache": {
|
|
70
|
+
"version": "2.0.1",
|
|
71
|
+
"dev": true,
|
|
72
|
+
"requires": {
|
|
73
|
+
"flatted": "^2.0.0",
|
|
74
|
+
"rimraf": "2.6.3"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"flatted": {
|
|
78
|
+
"version": "2.0.1",
|
|
79
|
+
"dev": true
|
|
80
|
+
},
|
|
81
|
+
"fs-extra": {
|
|
82
|
+
"version": "8.1.0"
|
|
83
|
+
},
|
|
84
|
+
"globby": {
|
|
85
|
+
"version": "9.2.0",
|
|
86
|
+
"dev": true,
|
|
87
|
+
"requires": {
|
|
88
|
+
"dir-glob": "^2.2.2",
|
|
89
|
+
"pify": "^4.0.1"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"inquirer": {
|
|
93
|
+
"version": "7.0.0",
|
|
94
|
+
"dev": true,
|
|
95
|
+
"requires": {
|
|
96
|
+
"ansi-escapes": "^4.2.1",
|
|
97
|
+
"cli-cursor": "^3.1.0",
|
|
98
|
+
"figures": "^3.0.0",
|
|
99
|
+
"mute-stream": "0.0.8",
|
|
100
|
+
"string-width": "^4.1.0"
|
|
101
|
+
},
|
|
102
|
+
"dependencies": {
|
|
103
|
+
"emoji-regex": {
|
|
104
|
+
"version": "8.0.0",
|
|
105
|
+
"dev": true
|
|
106
|
+
},
|
|
107
|
+
"is-fullwidth-code-point": {
|
|
108
|
+
"version": "3.0.0",
|
|
109
|
+
"dev": true
|
|
110
|
+
},
|
|
111
|
+
"string-width": {
|
|
112
|
+
"version": "4.2.0",
|
|
113
|
+
"dev": true,
|
|
114
|
+
"requires": {
|
|
115
|
+
"emoji-regex": "^8.0.0",
|
|
116
|
+
"is-fullwidth-code-point": "^3.0.0",
|
|
117
|
+
"strip-ansi": "^6.0.0"
|
|
118
|
+
},
|
|
119
|
+
"dependencies": {
|
|
120
|
+
"strip-ansi": {
|
|
121
|
+
"version": "6.0.0",
|
|
122
|
+
"dev": true,
|
|
123
|
+
"requires": {
|
|
124
|
+
"ansi-regex": "^5.0.0"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"mute-stream": {
|
|
132
|
+
"version": "0.0.8",
|
|
133
|
+
"dev": true
|
|
134
|
+
},
|
|
135
|
+
"onetime": {
|
|
136
|
+
"version": "5.1.0",
|
|
137
|
+
"dev": true
|
|
138
|
+
},
|
|
139
|
+
"pify": {
|
|
140
|
+
"version": "4.0.1",
|
|
141
|
+
"dev": true
|
|
142
|
+
},
|
|
143
|
+
"restore-cursor": {
|
|
144
|
+
"version": "3.1.0",
|
|
145
|
+
"dev": true,
|
|
146
|
+
"requires": {
|
|
147
|
+
"onetime": "^5.1.0"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"rimraf": {
|
|
151
|
+
"version": "2.6.3",
|
|
152
|
+
"dev": true
|
|
153
|
+
},
|
|
154
|
+
"semver": {
|
|
155
|
+
"version": "6.3.0",
|
|
156
|
+
"dev": true
|
|
157
|
+
},
|
|
158
|
+
"slice-ansi": {
|
|
159
|
+
"version": "2.1.0",
|
|
160
|
+
"dev": true
|
|
161
|
+
},
|
|
162
|
+
"string-width": {
|
|
163
|
+
"version": "3.1.0",
|
|
164
|
+
"dev": true,
|
|
165
|
+
"requires": {
|
|
166
|
+
"emoji-regex": "^7.0.1"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
"strip-json-comments": {
|
|
170
|
+
"version": "3.0.1",
|
|
171
|
+
"dev": true
|
|
172
|
+
},
|
|
173
|
+
"table": {
|
|
174
|
+
"version": "5.4.6",
|
|
175
|
+
"dev": true,
|
|
176
|
+
"requires": {
|
|
177
|
+
"slice-ansi": "^2.1.0",
|
|
178
|
+
"string-width": "^3.0.0"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"5.7.0","commands":{"init":{"id":"init","description":"Setup of base project for jetshop e-commerce","pluginName":"@jetshop/cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"repoName"},{"name":"shopid"}]}}}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jetshop/cli",
|
|
3
|
+
"version": "5.7.0",
|
|
4
|
+
"main": "src/index.js",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"bin": {
|
|
7
|
+
"jetshop": "./bin/run"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"postpack": "rm -f oclif.manifest.json npm-shrinkwrap.json",
|
|
11
|
+
"posttest": "eslint .",
|
|
12
|
+
"prepack": "oclif-dev manifest && oclif-dev readme && npm shrinkwrap",
|
|
13
|
+
"test": "echo NO TESTS",
|
|
14
|
+
"version": "oclif-dev readme && git add README.md",
|
|
15
|
+
"precommit": "lint-staged"
|
|
16
|
+
},
|
|
17
|
+
"lint-staged": {
|
|
18
|
+
"*.{js,jsx,ts,tsx,json}": [
|
|
19
|
+
"prettier --single-quote --write",
|
|
20
|
+
"git add"
|
|
21
|
+
],
|
|
22
|
+
"*.{js,jsx,ts,tsx}": [
|
|
23
|
+
"eslint --fix",
|
|
24
|
+
"git add"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@oclif/command": "^1.5.6",
|
|
29
|
+
"@oclif/config": "^1.9.0",
|
|
30
|
+
"@oclif/plugin-help": "^2.1.0",
|
|
31
|
+
"chalk": "^2.4.1",
|
|
32
|
+
"child-process-promise": "^2.2.1",
|
|
33
|
+
"cli-ux": "^4.8.1",
|
|
34
|
+
"fs-extra": "^8.0.0",
|
|
35
|
+
"object-assign-deep": "^0.4.0",
|
|
36
|
+
"replace": "^1.1.0",
|
|
37
|
+
"sort-package-json": "1.41.0",
|
|
38
|
+
"tar-pack": "^3.4.1",
|
|
39
|
+
"validate-npm-package-name": "^3.0.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@oclif/dev-cli": "^1.19.4",
|
|
43
|
+
"eslint": "^6.6.0",
|
|
44
|
+
"globby": "^9.0.0",
|
|
45
|
+
"lint-staged": "^8.1.5",
|
|
46
|
+
"prettier": "^1.19.1"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=12.0.0"
|
|
50
|
+
},
|
|
51
|
+
"files": [
|
|
52
|
+
"/bin",
|
|
53
|
+
"/npm-shrinkwrap.json",
|
|
54
|
+
"/oclif.manifest.json",
|
|
55
|
+
"/src"
|
|
56
|
+
],
|
|
57
|
+
"oclif": {
|
|
58
|
+
"commands": "./src/commands",
|
|
59
|
+
"bin": "jetshop",
|
|
60
|
+
"plugins": [
|
|
61
|
+
"@oclif/plugin-help"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
const validateName = require('validate-npm-package-name');
|
|
2
|
+
const { Command, flags } = require('@oclif/command');
|
|
3
|
+
const sortPackageJson = require('sort-package-json');
|
|
4
|
+
const { exec } = require('child-process-promise');
|
|
5
|
+
const assignDeep = require('object-assign-deep');
|
|
6
|
+
const { unpack } = require('tar-pack');
|
|
7
|
+
const { cli } = require('cli-ux');
|
|
8
|
+
const chalk = require('chalk');
|
|
9
|
+
const fs = require('fs-extra');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const replace = require('replace');
|
|
12
|
+
|
|
13
|
+
const description = `Setup of base project for jetshop e-commerce`;
|
|
14
|
+
|
|
15
|
+
const log = console.log;
|
|
16
|
+
|
|
17
|
+
const packageJsonOverride = {
|
|
18
|
+
version: '1.0.0',
|
|
19
|
+
private: true,
|
|
20
|
+
scripts: { precommit: 'lint-staged' },
|
|
21
|
+
prettier: {
|
|
22
|
+
singleQuote: true,
|
|
23
|
+
overrides: [
|
|
24
|
+
{
|
|
25
|
+
files: '*.md',
|
|
26
|
+
options: {
|
|
27
|
+
semi: false
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
devDependencies: {
|
|
33
|
+
husky: '^0.14.3',
|
|
34
|
+
'lint-staged': '^6.0.0',
|
|
35
|
+
prettier: '^1.19.1'
|
|
36
|
+
},
|
|
37
|
+
'lint-staged': {
|
|
38
|
+
'*.{js,jsx,ts,tsx}': ['prettier --single-quote --write', 'git add']
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const confirm = (message, defaultAnswer = false) =>
|
|
43
|
+
new Promise(async resolve => {
|
|
44
|
+
while (true) {
|
|
45
|
+
const resp = await cli.prompt(message, {
|
|
46
|
+
require: false,
|
|
47
|
+
default: defaultAnswer ? `Y/n` : `y/N`
|
|
48
|
+
});
|
|
49
|
+
if (['Y/n', 'y', 'Y'].includes(resp.trim())) return resolve(true);
|
|
50
|
+
if (['y/N', 'n', 'N'].includes(resp.trim())) return resolve(false);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const getValidRepoName = async () => {
|
|
55
|
+
const repoName = await cli.prompt(chalk.bold.white('Repo name'));
|
|
56
|
+
const { validForNewPackages, errors = [], warnings = [] } = validateName(
|
|
57
|
+
repoName
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (validForNewPackages) {
|
|
61
|
+
return repoName;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
warnings.map(warn => log(chalk.bold.yellow(warn)));
|
|
65
|
+
errors.map(err => log(chalk.bold.red(err)));
|
|
66
|
+
|
|
67
|
+
return getValidRepoName();
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// will download the package as a .tgz and store it in current PWD
|
|
71
|
+
// if the package does not exists, it will throw an exception
|
|
72
|
+
const downloadNpmPackage = packageName =>
|
|
73
|
+
exec(`npm pack ${packageName}`, {
|
|
74
|
+
stdio: ['ignore', 'pipe', 'ignore']
|
|
75
|
+
}).then(({ stdout }) => stdout.toString().trim());
|
|
76
|
+
|
|
77
|
+
const unpackNpmPackage = (file, out_path) =>
|
|
78
|
+
new Promise(resolve =>
|
|
79
|
+
fs
|
|
80
|
+
.createReadStream(`./${file}`)
|
|
81
|
+
.pipe(unpack(`./${out_path}`, { strip: 1 }))
|
|
82
|
+
.on('close', () => resolve())
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
class InitCmd extends Command {
|
|
86
|
+
async run() {
|
|
87
|
+
const { args } = this.parse(InitCmd);
|
|
88
|
+
let repoName = 'temp';
|
|
89
|
+
if (args && args.repoName) {
|
|
90
|
+
repoName = args.repoName;
|
|
91
|
+
} else {
|
|
92
|
+
repoName = await getValidRepoName();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let shopid = 'demostore';
|
|
96
|
+
if (args && args.shopid) {
|
|
97
|
+
shopid = args.shopid;
|
|
98
|
+
} else {
|
|
99
|
+
shopid = await cli.prompt(chalk.bold.white('Shop id'), {
|
|
100
|
+
required: false,
|
|
101
|
+
default: 'demostore'
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (fs.existsSync(repoName)) {
|
|
106
|
+
const replace = await confirm(
|
|
107
|
+
`'${chalk.bold.green(repoName)}' already exists\n${chalk.bold.yellow(
|
|
108
|
+
'Continue'
|
|
109
|
+
)}?`
|
|
110
|
+
);
|
|
111
|
+
if (replace === false) {
|
|
112
|
+
log(chalk.bold.yellow('aborting...'));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
fs.removeSync(repoName);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
cli.action.start('fetching base');
|
|
120
|
+
const packName = await downloadNpmPackage('@jetshop/template-trend');
|
|
121
|
+
cli.action.stop();
|
|
122
|
+
|
|
123
|
+
cli.action.start('unpacking');
|
|
124
|
+
await unpackNpmPackage(packName, repoName);
|
|
125
|
+
await fs.removeSync(packName);
|
|
126
|
+
cli.action.stop();
|
|
127
|
+
|
|
128
|
+
// MOVING THE CWD INTO THE NEW REPO
|
|
129
|
+
process.chdir(repoName);
|
|
130
|
+
|
|
131
|
+
/* package.json update */
|
|
132
|
+
const packageJsonPath = 'package.json';
|
|
133
|
+
const pkgJson = await fs.readJson(packageJsonPath);
|
|
134
|
+
|
|
135
|
+
await fs.writeJson(
|
|
136
|
+
packageJsonPath,
|
|
137
|
+
sortPackageJson(
|
|
138
|
+
assignDeep({}, pkgJson, packageJsonOverride, { name: repoName })
|
|
139
|
+
),
|
|
140
|
+
{ spaces: 2 }
|
|
141
|
+
);
|
|
142
|
+
/** shop.config override */
|
|
143
|
+
const shopConfigPath = 'src/shop.config.js';
|
|
144
|
+
|
|
145
|
+
replace({
|
|
146
|
+
regex: 'demostore',
|
|
147
|
+
replacement: shopid,
|
|
148
|
+
paths: [shopConfigPath],
|
|
149
|
+
silent: true
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
cli.action.start('fetching NPM packages');
|
|
153
|
+
|
|
154
|
+
await exec('yarn');
|
|
155
|
+
|
|
156
|
+
// copy gitlab-ci.yml from core
|
|
157
|
+
// TODO: here we need a way to force update users ci
|
|
158
|
+
await fs.copy(
|
|
159
|
+
'./node_modules/@jetshop/core/ci/.gitlab-ci.yml',
|
|
160
|
+
'./.gitlab-ci.yml'
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
cli.action.stop();
|
|
164
|
+
|
|
165
|
+
cli.action.start('git init');
|
|
166
|
+
await exec('git init');
|
|
167
|
+
cli.action.stop();
|
|
168
|
+
|
|
169
|
+
// update shop.config.json
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
InitCmd.description = description;
|
|
174
|
+
InitCmd.args = [{ name: 'repoName' }, { name: 'shopid' }];
|
|
175
|
+
|
|
176
|
+
module.exports = InitCmd;
|
package/src/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('@oclif/command');
|