fscr 6.2.6 → 7.3.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.
Files changed (72) hide show
  1. package/README.md +48 -30
  2. package/dist/index.js +502 -186
  3. package/dist/lib/auth/auth-conf.js +49 -45
  4. package/dist/lib/cache/README.md +341 -0
  5. package/dist/lib/cache/cli.js +152 -0
  6. package/dist/lib/cache/file-watcher.js +193 -0
  7. package/dist/lib/cache/index.js +422 -0
  8. package/dist/lib/cache/monitor.js +224 -0
  9. package/dist/lib/commands/doctor.js +225 -0
  10. package/dist/lib/completions/completion.js +342 -0
  11. package/dist/lib/completions/generator.js +152 -0
  12. package/dist/lib/completions/scripts/bash.sh +108 -0
  13. package/dist/lib/completions/scripts/fish.sh +105 -0
  14. package/dist/lib/completions/scripts/powershell.ps1 +168 -0
  15. package/dist/lib/completions/scripts/zsh.sh +124 -0
  16. package/dist/lib/diagnostics/cache.js +121 -0
  17. package/dist/lib/diagnostics/fileSystem.js +236 -0
  18. package/dist/lib/diagnostics/gitCheck.js +41 -0
  19. package/dist/lib/diagnostics/nodeVersion.js +68 -0
  20. package/dist/lib/diagnostics/packageManager.js +64 -0
  21. package/dist/lib/diagnostics/performance.js +141 -0
  22. package/dist/lib/encryption/decryptConfig.js +3 -2
  23. package/dist/lib/encryption/encryption.js +153 -113
  24. package/dist/lib/generators/generateFScripts.js +16 -13
  25. package/dist/lib/generators/generateToc.js +23 -14
  26. package/dist/lib/generators/index.js +1 -1
  27. package/dist/lib/git/pub.js +27 -17
  28. package/dist/lib/git/taskRunner.js +79 -69
  29. package/dist/lib/git/validateNotDev.js +65 -54
  30. package/dist/lib/optionList.js +69 -57
  31. package/dist/lib/parsers/parseScriptsMd.cached.js +208 -0
  32. package/dist/lib/parsers/parseScriptsMd.js +88 -79
  33. package/dist/lib/parsers/parseScriptsPackage.js +4 -3
  34. package/dist/lib/performance/cache.js +199 -0
  35. package/dist/lib/performance/lazy-loader.js +189 -0
  36. package/dist/lib/performance/monitor.js +303 -0
  37. package/dist/lib/plugins/deployment/index.js +113 -0
  38. package/dist/lib/plugins/hooks.js +17 -0
  39. package/dist/lib/plugins/loader.js +91 -0
  40. package/dist/lib/plugins/task-notifier/index.js +72 -0
  41. package/dist/lib/release/bump.js +50 -45
  42. package/dist/lib/release/commitWithMessage.js +80 -52
  43. package/dist/lib/release/publish.js +19 -14
  44. package/dist/lib/release/pushToGit.js +40 -31
  45. package/dist/lib/release/releasenotes.js +116 -97
  46. package/dist/lib/release/seeChangedFiles.js +68 -60
  47. package/dist/lib/release/sort.js +200 -116
  48. package/dist/lib/release/tree.js +161 -147
  49. package/dist/lib/release/validateNotDev.js +52 -44
  50. package/dist/lib/running/index.js +1 -1
  51. package/dist/lib/running/runCLICommand.js +41 -31
  52. package/dist/lib/running/runParallel.js +61 -59
  53. package/dist/lib/running/runSequence.js +55 -53
  54. package/dist/lib/startScripts.js +129 -114
  55. package/dist/lib/taskList.js +97 -90
  56. package/dist/lib/test-files/.fscripts.md +113 -0
  57. package/dist/lib/test-files/.fscripts.test.md +103 -0
  58. package/dist/lib/test-files/.fscriptsb.md +107 -0
  59. package/dist/lib/test-files/.mdtest.md +40 -0
  60. package/dist/lib/test-files/consoleSample.js +13 -9
  61. package/dist/lib/test-files/inputSample.js +17 -14
  62. package/dist/lib/test-files/testConsole.js +1 -1
  63. package/dist/lib/test-files/testInput.js +1 -1
  64. package/dist/lib/upgradePackages.js +56 -46
  65. package/dist/lib/utils/clear.js +16 -13
  66. package/dist/lib/utils/console.js +27 -21
  67. package/dist/lib/utils/encryption.js +55 -13
  68. package/dist/lib/utils/hash.js +128 -0
  69. package/dist/lib/utils/helpers.js +153 -142
  70. package/dist/lib/utils/index.js +1 -1
  71. package/dist/lib/utils/prompt.js +24 -29
  72. package/package.json +11 -29
@@ -1,6 +1,8 @@
1
+ import fsOg from "fs";
1
2
  import fs from "fs-extra";
2
3
  import chalk from "chalk";
3
4
  import boxen from "boxen";
5
+
4
6
  const ONE_SIXTH = 1 / 6;
5
7
  const ONE_THIRD = 1 / 3;
6
8
  const TWO_THIRDS = 2 / 3;
@@ -15,30 +17,24 @@ const utils = {};
15
17
  removeFile(file);
16
18
  */
17
19
  utils.emptyDir = async f => {
18
- try {
19
- await fs.emptyDir(f);
20
- // console.log(`${chalk.green.underline("Directory")} ${chalk.bold(f)} emptied!`);
21
- } catch (err) {
22
- console.error(err);
23
- }
20
+ try {
21
+ await fs.emptyDir(f);
22
+ // console.log(`${chalk.green.underline("Directory")} ${chalk.bold(f)} emptied!`);
23
+ } catch (err) {
24
+ console.error(err);
25
+ }
24
26
  };
27
+
25
28
  const desiredMode = 0o2775;
26
29
  const defaultOptions = {
27
- mode: desiredMode
30
+ mode: desiredMode
28
31
  };
29
32
  utils.ensureDir = async (directory, options = defaultOptions) => {
30
- try {
31
- await fs.ensureDir(directory, options);
32
- } catch (err) {
33
- console.error(err);
34
- }
33
+ return await fsOg.existsSync(directory);
35
34
  };
35
+
36
36
  utils.ensureFile = async f => {
37
- try {
38
- await fs.ensureFile(f);
39
- } catch (err) {
40
- console.error(err);
41
- }
37
+ return await fsOg.existsSync(f);
42
38
  };
43
39
 
44
40
  /**
@@ -50,8 +46,7 @@ utils.ensureFile = async f => {
50
46
  pathExists(file);
51
47
  */
52
48
  utils.pathExists = async f => {
53
- const exists = await fs.pathExists(f);
54
- return exists;
49
+ return await fsOs.existsSync(f);
55
50
  };
56
51
 
57
52
  /**
@@ -63,32 +58,34 @@ utils.pathExists = async f => {
63
58
  outputJson(file);
64
59
  */
65
60
  utils.readJson = async f => {
66
- try {
67
- const packageObj = await fs.readJson(f);
68
- // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} read!`);
69
- return packageObj;
70
- } catch (err) {
71
- console.error(err);
72
- return {};
73
- }
61
+ try {
62
+ const packageObj = await fs.readJson(f);
63
+ // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} read!`);
64
+ return packageObj;
65
+ } catch (err) {
66
+ console.error(err);
67
+ return {};
68
+ }
74
69
  };
70
+
75
71
  utils.readFile = async f => {
76
- try {
77
- let fl = await fs.readFileSync(f, "utf8");
78
- return fl;
79
- } catch (err) {
80
- console.error(err);
81
- return {};
82
- }
72
+ try {
73
+ let fl = await fs.readFileSync(f, "utf8");
74
+ return fl;
75
+ } catch (err) {
76
+ console.error(err);
77
+ return {};
78
+ }
83
79
  };
80
+
84
81
  utils.removeFile = async f => {
85
- try {
86
- // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} removed!`);
87
- return await fs.remove(f);
88
- } catch (err) {
89
- console.error(`File ${f} NOT REMOVED! ${err}`);
90
- return false;
91
- }
82
+ try {
83
+ // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} removed!`);
84
+ return await fs.remove(f);
85
+ } catch (err) {
86
+ console.error(`File ${f} NOT REMOVED! ${err}`);
87
+ return false;
88
+ }
92
89
  };
93
90
 
94
91
  /**
@@ -101,90 +98,104 @@ utils.removeFile = async f => {
101
98
  writeFile(file);
102
99
  */
103
100
  utils.writeFile = async (f, contents = "") => {
104
- try {
105
- return fs.writeFileSync(f, contents, "utf-8");
106
- // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} written!`);
107
- } catch (err) {
108
- console.error(err);
109
- }
101
+ try {
102
+ return fs.writeFileSync(f, contents, "utf-8");
103
+ // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} written!`);
104
+ } catch (err) {
105
+ console.error(err);
106
+ }
110
107
  };
108
+
111
109
  utils.writeJson = async (f, json = {}) => {
112
- try {
113
- await fs.writeJson(f, json);
114
- // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} written!`);
115
- } catch (err) {
116
- console.error(err);
117
- }
110
+ try {
111
+ await fs.writeJson(f, json);
112
+ // console.log(`${chalk.green.underline("File")} ${chalk.bold(f)} written!`);
113
+ } catch (err) {
114
+ console.error(err);
115
+ }
118
116
  };
117
+
119
118
  utils.chainAsync = fns => {
120
- let curr = 0;
121
- const last = fns[fns.length - 1];
122
- const next = () => {
123
- const fn = fns[curr++];
124
- fn === last ? fn() : fn(next);
125
- };
126
- next();
119
+ let curr = 0;
120
+ const last = fns[fns.length - 1];
121
+ const next = () => {
122
+ const fn = fns[curr++];
123
+ fn === last ? fn() : fn(next);
124
+ };
125
+ next();
127
126
  };
127
+
128
128
  utils.appendToFile = async (f, contents = "") => {
129
- try {
130
- await fs.appendFileSync(f, contents);
131
- } catch (err) {
132
- console.error(err);
133
- }
134
- };
135
- utils.boxInform = async (msg, secondary = "", padding = 0, margin = {
136
- left: 2,
137
- top: 0,
138
- bottom: 0,
139
- right: 0
140
- }) => {
141
- console.log(boxen(chalk.hex("#717877")(msg) + "\n" + chalk.bold.underline.hex("#438b34")(secondary) + chalk.hex("#717877")(" "), {
142
- padding,
143
- margin,
144
- borderStyle: {
145
- topLeft: chalk.hex("#5a596d")("╔"),
146
- topRight: chalk.hex("#5a596d")("╗"),
147
- bottomLeft: chalk.hex("#5a596d")("╚"),
148
- bottomRight: chalk.hex("#5a596d")("╝"),
149
- horizontal: chalk.hex("#5a596d")("═"),
150
- vertical: chalk.hex("#5a596d")("║")
151
- },
152
- //"round",
153
- align: "center" //,
154
- }));
129
+ try {
130
+ await fs.appendFileSync(f, contents);
131
+ } catch (err) {
132
+ console.error(err);
133
+ }
155
134
  };
135
+
136
+ utils.boxInform = async (
137
+ msg,
138
+ secondary = "",
139
+ padding = 0,
140
+ margin = {left: 2, top: 0, bottom: 0, right: 0}
141
+ ) => {
142
+ console.log(
143
+ boxen(
144
+ chalk.hex("#717877")(msg) +
145
+ "\n" +
146
+ chalk.bold.underline.hex("#438b34")(secondary) +
147
+ chalk.hex("#717877")(" "),
148
+ {
149
+ padding,
150
+ margin,
151
+ borderStyle: {
152
+ topLeft: chalk.hex("#5a596d")("╔"),
153
+ topRight: chalk.hex("#5a596d")("╗"),
154
+ bottomLeft: chalk.hex("#5a596d")("╚"),
155
+ bottomRight: chalk.hex("#5a596d")("╝"),
156
+ horizontal: chalk.hex("#5a596d")("═"),
157
+ vertical: chalk.hex("#5a596d")("║")
158
+ }, //"round",
159
+ align: "center" //,
160
+ }
161
+ )
162
+ );
163
+ };
164
+
156
165
  const hue2rgb = (p, q, t) => {
157
- if (t < 0) {
158
- t += 1;
159
- }
160
- if (t > 1) {
161
- t -= 1;
162
- }
163
- if (t < ONE_SIXTH) {
164
- return p + (q - p) * 6 * t;
165
- }
166
- if (t < 0.5) {
167
- return q;
168
- }
169
- if (t < TWO_THIRDS) {
170
- return p + (q - p) * (TWO_THIRDS - t) * 6;
171
- }
172
- return p;
166
+ if (t < 0) {
167
+ t += 1;
168
+ }
169
+ if (t > 1) {
170
+ t -= 1;
171
+ }
172
+ if (t < ONE_SIXTH) {
173
+ return p + (q - p) * 6 * t;
174
+ }
175
+ if (t < 0.5) {
176
+ return q;
177
+ }
178
+ if (t < TWO_THIRDS) {
179
+ return p + (q - p) * (TWO_THIRDS - t) * 6;
180
+ }
181
+ return p;
173
182
  };
183
+
174
184
  const hsl2rgb = (h, s, l) => {
175
- if (s === 0) {
176
- return new Array(3).fill(l);
177
- }
178
- const q = l < 0.5 ? l * s + l : l + s - l * s;
179
- const p = 2 * l - q;
180
- return [hue2rgb(p, q, h + ONE_THIRD), hue2rgb(p, q, h), hue2rgb(p, q, h - ONE_THIRD)];
185
+ if (s === 0) {
186
+ return new Array(3).fill(l);
187
+ }
188
+ const q = l < 0.5 ? l * s + l : l + s - l * s;
189
+ const p = 2 * l - q;
190
+ return [hue2rgb(p, q, h + ONE_THIRD), hue2rgb(p, q, h), hue2rgb(p, q, h - ONE_THIRD)];
181
191
  };
192
+
182
193
  utils.rainbowGradient = (len, saturation = 1, lightness = 0.5) => {
183
- const gradient = [];
184
- for (let x = 0; x < len; x++) {
185
- gradient.push(hsl2rgb(x / len, saturation, lightness).map(c => Math.round(c * 255)));
186
- }
187
- return gradient;
194
+ const gradient = [];
195
+ for (let x = 0; x < len; x++) {
196
+ gradient.push(hsl2rgb(x / len, saturation, lightness).map(c => Math.round(c * 255)));
197
+ }
198
+ return gradient;
188
199
  };
189
200
 
190
201
  /**
@@ -192,37 +203,37 @@ utils.rainbowGradient = (len, saturation = 1, lightness = 0.5) => {
192
203
  * @type {Date}
193
204
  */
194
205
  utils.timestamp = () => {
195
- // Create a date object with the current time
196
- let now = new Date();
197
-
198
- // Create an array with the current hour, minute and second
199
- let time = [now.getHours(), now.getMinutes(), now.getSeconds()];
200
- time = time.map(e => {
201
- if (e < 10) {
202
- return (e + "").padStart(2, "0");
203
- } else {
204
- return e;
205
- }
206
- });
207
- // Return the formatted string
208
- return time.join(":");
206
+ // Create a date object with the current time
207
+ let now = new Date();
208
+
209
+ // Create an array with the current hour, minute and second
210
+ let time = [now.getHours(), now.getMinutes(), now.getSeconds()];
211
+ time = time.map(e => {
212
+ if (e < 10) {
213
+ return (e + "").padStart(2, "0");
214
+ } else {
215
+ return e;
216
+ }
217
+ });
218
+ // Return the formatted string
219
+ return time.join(":");
209
220
  };
210
221
 
211
222
  // utils.emptyDir = async () => {};
212
223
  export default utils;
213
224
  export const {
214
- emptyDir,
215
- ensureDir,
216
- ensureFile,
217
- pathExists,
218
- readJson,
219
- readFile,
220
- removeFile,
221
- writeFile,
222
- writeJson,
223
- chainAsync,
224
- appendToFile,
225
- boxInform,
226
- rainbowGradient,
227
- timestamp
228
- } = utils;
225
+ emptyDir,
226
+ ensureDir,
227
+ ensureFile,
228
+ pathExists,
229
+ readJson,
230
+ readFile,
231
+ removeFile,
232
+ writeFile,
233
+ writeJson,
234
+ chainAsync,
235
+ appendToFile,
236
+ boxInform,
237
+ rainbowGradient,
238
+ timestamp
239
+ } = utils;
@@ -1,2 +1,2 @@
1
1
  export * from "./helpers.js";
2
- export { default as clear } from "./clear.js";
2
+ export { default as clear } from "./clear.js";
@@ -1,34 +1,29 @@
1
1
  import enquirerPkg from "enquirer";
2
- const {
3
- prompt
4
- } = enquirerPkg;
2
+ const { prompt } = enquirerPkg;
5
3
  import chalk from "chalk";
4
+
6
5
  const promptQuestion = async (extended = {}, message = `name it:`) => {
7
- if (extended.type === "list") {
8
- extended.type = "select";
9
- }
10
- if (extended.message) {
11
- message = extended.message;
12
- }
13
- if (extended.choices && extended.choices[0].value) {
14
- extended.choices = extended.choices.map(e => {
15
- return {
16
- message: e.name,
17
- value: e.value
18
- };
6
+ if (extended.type === "list") {
7
+ extended.type = "select";
8
+ }
9
+ if (extended.message) {
10
+ message = extended.message;
11
+ }
12
+ if (extended.choices && extended.choices[0].value) {
13
+ extended.choices = extended.choices.map(e => {
14
+ return { message: e.name, value: e.value };
15
+ });
16
+ }
17
+ if (extended.pageSize) {
18
+ extended.limit = extended.pageSize;
19
+ }
20
+ const { answer } = await prompt({
21
+ type: "input",
22
+ message: `${chalk.green.bold.underline(message)}`,
23
+ name: `answer`,
24
+ ...extended
19
25
  });
20
- }
21
- if (extended.pageSize) {
22
- extended.limit = extended.pageSize;
23
- }
24
- const {
25
- answer
26
- } = await prompt({
27
- type: "input",
28
- message: `${chalk.green.bold.underline(message)}`,
29
- name: `answer`,
30
- ...extended
31
- });
32
- return answer;
26
+ return answer;
33
27
  };
34
- export default promptQuestion;
28
+
29
+ export default promptQuestion;
package/package.json CHANGED
@@ -1,33 +1,25 @@
1
1
  {
2
2
  "name": "fscr",
3
- "version": "6.2.6",
3
+ "version": "7.3.0",
4
4
  "description": "Runs the fscripts.md file",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "scripts": {
8
- "prebuild": "rimraf dist/*",
9
- "build": "run-p build:index build:lib",
10
- "build:index": "babel index.js --ignore 'node_modules' --out-file dist/index.js",
11
- "build:lib": "babel lib --ignore 'node_modules' --out-dir dist/lib --copy-files",
8
+ "build": "rimraf dist && mkdir -p dist/lib && cp -r lib/. dist/lib && cp index.js dist/index.js",
12
9
  "fsr": "node dist/index.js",
13
- "release": "run-s release:test release:bump release:clean release:build",
14
- "release:test": "vitest run",
15
- "release:build": "run-p build:index build:lib",
16
- "release:bump": "yarn fsr bump",
17
- "release:clean": "rimraf dist",
18
- "release:combined": "np --any-branch",
10
+ "release": "yarn fsr bump && yarn build",
19
11
  "release:publish": "node lib/release/publish.js",
20
12
  "start": "run-s build start:run",
21
- "start:basic": "babel-node index.js",
22
- "start:build": "babel-node index.js --ignore 'node_modules'",
23
13
  "start:run": "node dist/index.js",
24
- "start:watch": "nodemon --watch lib --watch index.js --ext js --exec babel-node index.js --ignore 'node_modules' -I",
14
+ "watch": "nodemon --watch lib --watch index.js --ext js --exec \"mkdir -p dist/lib && cp -r lib/. dist/lib && cp index.js dist/index.js\" --ignore 'node_modules' -I",
25
15
  "test": "vitest run",
26
16
  "test:watch": "vitest",
27
17
  "test:ui": "vitest --ui",
28
- "docs": "npx cli-docs-generator --cli=./bin",
29
- "test1": "echo 'yolo' && sleep 2 && echo 1",
30
- "test2": "echo '2yolo' && sleep 2 && echo 22"
18
+ "test:coverage": "vitest run --coverage",
19
+ "test:unit": "vitest run tests/unit",
20
+ "test:integration": "vitest run tests/integration",
21
+ "test:e2e": "vitest run tests/e2e",
22
+ "test:performance": "vitest run tests/performance"
31
23
  },
32
24
  "fscripts": {
33
25
  "encryptedFiles": [
@@ -51,11 +43,9 @@
51
43
  "bin"
52
44
  ],
53
45
  "bin": {
54
- "fscr": "./bin",
55
46
  "fsr": "./bin"
56
47
  },
57
48
  "dependencies": {
58
- "@babel/runtime": "^7.9.2",
59
49
  "better-md-2-json": "^1.0.6",
60
50
  "boxen": "^8.0.1",
61
51
  "chalk": "^4.1.2",
@@ -91,18 +81,10 @@
91
81
  "term-size": "^4.0.0"
92
82
  },
93
83
  "devDependencies": {
94
- "@babel/cli": "^7.8.4",
95
- "@babel/core": "^7.9.0",
96
- "@babel/node": "^7.8.7",
97
- "@babel/plugin-proposal-decorators": "^7.8.3",
98
- "@babel/plugin-proposal-export-default-from": "^7.8.3",
99
- "@babel/plugin-syntax-class-properties": "^7.8.3",
100
- "@babel/plugin-transform-runtime": "^7.9.0",
101
- "@babel/preset-env": "^7.9.0",
102
- "@babel/preset-react": "^7.9.1",
103
- "babel-plugin-module-resolver": "^5.0.2",
84
+ "@vitest/coverage-v8": "^3.2.4",
104
85
  "execa": "8.0.1",
105
86
  "fancy-log": "^2.0.0",
87
+ "fc-filepick": "^1.3.0",
106
88
  "fkill-cli": "^8.0.0",
107
89
  "ink-tab": "^5.2.0",
108
90
  "ink-table": "^3.1.0",