@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 ADDED
@@ -0,0 +1,61 @@
1
+ # jetshop-cli
2
+
3
+ [![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)
4
+ [![Version](https://img.shields.io/npm/v/jetshop-cli.svg)](https://npmjs.org/package/jetshop-cli)
5
+ [![Downloads/week](https://img.shields.io/npm/dw/jetshop-cli.svg)](https://npmjs.org/package/jetshop-cli)
6
+ [![License](https://img.shields.io/npm/l/jetshop-cli.svg)](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
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ require('@oclif/command').run()
4
+ .then(require('@oclif/command/flush'))
5
+ .catch(require('@oclif/errors/handle'))
package/bin/run.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node "%~dp0\run" %*
@@ -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');