fscr 6.2.3 → 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 (98) hide show
  1. package/README.md +48 -30
  2. package/dist/index.js +502 -185
  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 -31
  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 +51 -43
  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 +99 -84
  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 +17 -0
  61. package/dist/lib/test-files/inputSample.js +20 -0
  62. package/dist/lib/test-files/testConsole.js +1 -0
  63. package/dist/lib/test-files/testInput.js +2 -0
  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 +20 -32
  73. package/dist/lib/codemod/arrow.js +0 -13
  74. package/dist/lib/codemod/arrow2.js +0 -67
  75. package/dist/lib/codemod/funcs.js +0 -25
  76. package/dist/lib/codemod/removeConsole.js +0 -12
  77. package/dist/lib/codemod/test.js +0 -8
  78. package/dist/lib/components/App.js +0 -64
  79. package/dist/lib/components/Selector.js +0 -133
  80. package/dist/lib/components/TabChanger.js +0 -113
  81. package/dist/lib/components/Table.js +0 -177
  82. package/dist/lib/components/Tabs.js +0 -221
  83. package/dist/lib/generateFScripts.js +0 -25
  84. package/dist/lib/generateToc.js +0 -30
  85. package/dist/lib/helpers.js +0 -191
  86. package/dist/lib/parseScriptsMd.js +0 -85
  87. package/dist/lib/parseScriptsPackage.js +0 -9
  88. package/dist/lib/release/index.js +0 -4
  89. package/dist/lib/run/lib.js +0 -454
  90. package/dist/lib/run/main-p.js +0 -59
  91. package/dist/lib/run/main-s.js +0 -56
  92. package/dist/lib/run/parse-cli-args.js +0 -222
  93. package/dist/lib/run/run-p.js +0 -30
  94. package/dist/lib/run/run-s.js +0 -57
  95. package/dist/lib/runCLICommand.js +0 -30
  96. package/dist/lib/runParallel.js +0 -20
  97. package/dist/lib/runSequence.js +0 -38
  98. package/dist/lib/taskListAutoComplete.js +0 -15
@@ -6,131 +6,215 @@ import path from "path";
6
6
  import { fileURLToPath } from "url";
7
7
  const __filename = fileURLToPath(import.meta.url);
8
8
  const __dirname = path.dirname(__filename);
9
- const sortOrder = ["name", "version", "description", "keywords", "sideEffects", "main", "umd:main", "unpkg", "module", "workspaces", "scripts", "betterScripts", "fscripts", "source", "jsnext:main", "browser", "homepage", "bugs", "repository", "private", "license", "author", "contributors", "files", "types", "typings", "style", "example", "examplestyle", "assets", "bin", "man", "directories", "husky", "pre-commit", "commitlint", "lint-staged", "config", "nodemonConfig", "browserify", "babel", "browserslist", "xo", "prettier", "eslintConfig", "eslintIgnore", "stylelint", "jest", "dependencies", "devDependencies", "peerDependencies", "bundledDependencies", "bundleDependencies", "optionalDependencies", "flat", "resolutions", "engines", "engineStrict", "os", "cpu", "preferGlobal", "publishConfig"];
9
+
10
+ const sortOrder = [
11
+ "name",
12
+ "version",
13
+ "description",
14
+ "keywords",
15
+ "sideEffects",
16
+ "main",
17
+ "umd:main",
18
+ "unpkg",
19
+ "module",
20
+ "workspaces",
21
+ "scripts",
22
+ "betterScripts",
23
+ "fscripts",
24
+ "source",
25
+ "jsnext:main",
26
+ "browser",
27
+ "homepage",
28
+ "bugs",
29
+ "repository",
30
+ "private",
31
+ "license",
32
+ "author",
33
+ "contributors",
34
+ "files",
35
+ "types",
36
+ "typings",
37
+ "style",
38
+ "example",
39
+ "examplestyle",
40
+ "assets",
41
+ "bin",
42
+ "man",
43
+ "directories",
44
+ "husky",
45
+ "pre-commit",
46
+ "commitlint",
47
+ "lint-staged",
48
+ "config",
49
+ "nodemonConfig",
50
+ "browserify",
51
+ "babel",
52
+ "browserslist",
53
+ "xo",
54
+ "prettier",
55
+ "eslintConfig",
56
+ "eslintIgnore",
57
+ "stylelint",
58
+ "jest",
59
+ "dependencies",
60
+ "devDependencies",
61
+ "peerDependencies",
62
+ "bundledDependencies",
63
+ "bundleDependencies",
64
+ "optionalDependencies",
65
+ "flat",
66
+ "resolutions",
67
+ "engines",
68
+ "engineStrict",
69
+ "os",
70
+ "cpu",
71
+ "preferGlobal",
72
+ "publishConfig"
73
+ ];
10
74
  // See https://docs.npmjs.com/misc/scripts
11
- const defaultNpmScripts = ["install", "pack", "prepare", "publish", "restart", "shrinkwrap", "start", "stop", "test", "uninstall", "version"];
75
+ const defaultNpmScripts = [
76
+ "install",
77
+ "pack",
78
+ "prepare",
79
+ "publish",
80
+ "restart",
81
+ "shrinkwrap",
82
+ "start",
83
+ "stop",
84
+ "test",
85
+ "uninstall",
86
+ "version"
87
+ ];
88
+
12
89
  function sortPackageJson(packageJson, options = {}) {
13
- const determinedSortOrder = options.sortOrder || sortOrder;
14
- let wasString = false;
15
- let hasWindowsNewlines = false;
16
- let endCharacters = "";
17
- let indentLevel = 2;
18
- if (typeof packageJson === "string") {
19
- wasString = true;
20
- indentLevel = detectIndent(packageJson).indent;
21
- if (packageJson.substr(-1) === "\n") {
22
- endCharacters = "\n";
90
+ const determinedSortOrder = options.sortOrder || sortOrder;
91
+ let wasString = false;
92
+ let hasWindowsNewlines = false;
93
+ let endCharacters = "";
94
+ let indentLevel = 2;
95
+ if (typeof packageJson === "string") {
96
+ wasString = true;
97
+ indentLevel = detectIndent(packageJson).indent;
98
+ if (packageJson.substr(-1) === "\n") {
99
+ endCharacters = "\n";
100
+ }
101
+ const newlineMatch = packageJson.match(/(\r?\n)/);
102
+ hasWindowsNewlines = (newlineMatch && newlineMatch[0]) === "\r\n";
103
+ packageJson = JSON.parse(packageJson);
23
104
  }
24
- const newlineMatch = packageJson.match(/(\r?\n)/);
25
- hasWindowsNewlines = (newlineMatch && newlineMatch[0]) === "\r\n";
26
- packageJson = JSON.parse(packageJson);
27
- }
28
- const prefixedScriptRegex = /^(pre|post)(.)/;
29
- const prefixableScripts = defaultNpmScripts.slice();
30
- if (typeof packageJson.scripts === "object") {
31
- Object.keys(packageJson.scripts).forEach(script => {
32
- const prefixOmitted = script.replace(prefixedScriptRegex, "$2");
33
- if (packageJson.scripts[prefixOmitted] && !prefixableScripts.includes(prefixOmitted)) {
34
- prefixableScripts.push(prefixOmitted);
35
- }
36
- });
37
- }
38
- function sortSubKey(key, sortList, unique) {
39
- if (Array.isArray(packageJson[key])) {
40
- packageJson[key] = packageJson[key].sort();
41
- if (unique) {
42
- packageJson[key] = array_unique(packageJson[key]);
43
- }
44
- return;
105
+
106
+ const prefixedScriptRegex = /^(pre|post)(.)/;
107
+ const prefixableScripts = defaultNpmScripts.slice();
108
+ if (typeof packageJson.scripts === "object") {
109
+ Object.keys(packageJson.scripts).forEach(script => {
110
+ const prefixOmitted = script.replace(prefixedScriptRegex, "$2");
111
+ if (packageJson.scripts[prefixOmitted] && !prefixableScripts.includes(prefixOmitted)) {
112
+ prefixableScripts.push(prefixOmitted);
113
+ }
114
+ });
115
+ }
116
+
117
+ function sortSubKey(key, sortList, unique) {
118
+ if (Array.isArray(packageJson[key])) {
119
+ packageJson[key] = packageJson[key].sort();
120
+ if (unique) {
121
+ packageJson[key] = array_unique(packageJson[key]);
122
+ }
123
+ return;
124
+ }
125
+ if (typeof packageJson[key] === "object") {
126
+ packageJson[key] = sortObjectKeys(packageJson[key], sortList);
127
+ }
45
128
  }
46
- if (typeof packageJson[key] === "object") {
47
- packageJson[key] = sortObjectKeys(packageJson[key], sortList);
129
+ function toSortKey(script) {
130
+ const prefixOmitted = script.replace(prefixedScriptRegex, "$2");
131
+ if (prefixableScripts.includes(prefixOmitted)) {
132
+ return prefixOmitted;
133
+ }
134
+ return script;
48
135
  }
49
- }
50
- function toSortKey(script) {
51
- const prefixOmitted = script.replace(prefixedScriptRegex, "$2");
52
- if (prefixableScripts.includes(prefixOmitted)) {
53
- return prefixOmitted;
136
+ /* b
137
+ * pre | * | post
138
+ * pre 0 | - | -
139
+ * a * + | 0 | -
140
+ * post + | + | 0
141
+ */
142
+ function compareScriptKeys(a, b) {
143
+ if (a === b) return 0;
144
+ const aScript = toSortKey(a);
145
+ const bScript = toSortKey(b);
146
+ if (aScript === bScript) {
147
+ // pre* is always smaller; post* is always bigger
148
+ // Covers: pre* vs. *; pre* vs. post*; * vs. post*
149
+ if (a === `pre${aScript}` || b === `post${bScript}`) return -1;
150
+ // The rest is bigger: * vs. *pre; *post vs. *pre; *post vs. *
151
+ return 1;
152
+ }
153
+ return aScript < bScript ? -1 : 1;
54
154
  }
55
- return script;
56
- }
57
- /* b
58
- * pre | * | post
59
- * pre 0 | - | -
60
- * a * + | 0 | -
61
- * post + | + | 0
62
- */
63
- function compareScriptKeys(a, b) {
64
- if (a === b) return 0;
65
- const aScript = toSortKey(a);
66
- const bScript = toSortKey(b);
67
- if (aScript === bScript) {
68
- // pre* is always smaller; post* is always bigger
69
- // Covers: pre* vs. *; pre* vs. post*; * vs. post*
70
- if (a === `pre${aScript}` || b === `post${bScript}`) return -1;
71
- // The rest is bigger: * vs. *pre; *post vs. *pre; *post vs. *
72
- return 1;
155
+ function array_unique(array) {
156
+ return array.filter((el, index, arr) => index == arr.indexOf(el));
73
157
  }
74
- return aScript < bScript ? -1 : 1;
75
- }
76
- function array_unique(array) {
77
- return array.filter((el, index, arr) => index == arr.indexOf(el));
78
- }
79
- sortSubKey("keywords", null, true);
80
- sortSubKey("homepage");
81
- sortSubKey("bugs", ["url", "email"]);
82
- sortSubKey("license", ["type", "url"]);
83
- sortSubKey("author", ["name", "email", "url"]);
84
- sortSubKey("bin");
85
- sortSubKey("man");
86
- sortSubKey("directories", ["lib", "bin", "man", "doc", "example"]);
87
- sortSubKey("repository", ["type", "url"]);
88
- sortSubKey("scripts", compareScriptKeys);
89
- sortSubKey("betterScripts", compareScriptKeys);
90
- sortSubKey("commitlint");
91
- sortSubKey("lint-staged");
92
- sortSubKey("config");
93
- sortSubKey("nodemonConfig");
94
- sortSubKey("browserify");
95
- sortSubKey("babel");
96
- sortSubKey("eslintConfig");
97
- sortSubKey("jest");
98
- sortSubKey("xo");
99
- sortSubKey("prettier");
100
- sortSubKey("dependencies");
101
- sortSubKey("devDependencies");
102
- sortSubKey("peerDependencies");
103
- sortSubKey("bundledDependencies");
104
- sortSubKey("bundleDependencies");
105
- sortSubKey("optionalDependencies");
106
- sortSubKey("resolutions");
107
- sortSubKey("engines");
108
- sortSubKey("engineStrict");
109
- sortSubKey("os");
110
- sortSubKey("cpu");
111
- sortSubKey("preferGlobal");
112
- sortSubKey("private");
113
- sortSubKey("publishConfig");
114
- packageJson = sortObjectKeys(packageJson, determinedSortOrder);
115
- if (wasString) {
116
- let result = JSON.stringify(packageJson, null, indentLevel) + endCharacters;
117
- if (hasWindowsNewlines) {
118
- result = result.replace(/\n/g, "\r\n");
158
+ sortSubKey("keywords", null, true);
159
+ sortSubKey("homepage");
160
+ sortSubKey("bugs", ["url", "email"]);
161
+ sortSubKey("license", ["type", "url"]);
162
+ sortSubKey("author", ["name", "email", "url"]);
163
+ sortSubKey("bin");
164
+ sortSubKey("man");
165
+ sortSubKey("directories", ["lib", "bin", "man", "doc", "example"]);
166
+ sortSubKey("repository", ["type", "url"]);
167
+ sortSubKey("scripts", compareScriptKeys);
168
+ sortSubKey("betterScripts", compareScriptKeys);
169
+ sortSubKey("commitlint");
170
+ sortSubKey("lint-staged");
171
+ sortSubKey("config");
172
+ sortSubKey("nodemonConfig");
173
+ sortSubKey("browserify");
174
+ sortSubKey("babel");
175
+ sortSubKey("eslintConfig");
176
+ sortSubKey("jest");
177
+ sortSubKey("xo");
178
+ sortSubKey("prettier");
179
+ sortSubKey("dependencies");
180
+ sortSubKey("devDependencies");
181
+ sortSubKey("peerDependencies");
182
+ sortSubKey("bundledDependencies");
183
+ sortSubKey("bundleDependencies");
184
+ sortSubKey("optionalDependencies");
185
+ sortSubKey("resolutions");
186
+ sortSubKey("engines");
187
+ sortSubKey("engineStrict");
188
+ sortSubKey("os");
189
+ sortSubKey("cpu");
190
+ sortSubKey("preferGlobal");
191
+ sortSubKey("private");
192
+ sortSubKey("publishConfig");
193
+ packageJson = sortObjectKeys(packageJson, determinedSortOrder);
194
+ if (wasString) {
195
+ let result = JSON.stringify(packageJson, null, indentLevel) + endCharacters;
196
+ if (hasWindowsNewlines) {
197
+ result = result.replace(/\n/g, "\r\n");
198
+ }
199
+ return result;
119
200
  }
120
- return result;
121
- }
122
- return packageJson;
201
+ return packageJson;
123
202
  }
124
203
  export default sortPackageJson;
125
204
  export { sortPackageJson, sortOrder };
205
+
126
206
  if (import.meta.url === `file://${process.argv[1]}`) {
127
- const filesToProcess = process.argv[2] ? process.argv.slice(2) : [`${process.cwd()}/package.json`];
128
- filesToProcess.forEach(filePath => {
129
- const packageJson = fs.readFileSync(filePath, "utf8");
130
- const sorted = sortPackageJson(packageJson);
131
- if (sorted !== packageJson) {
132
- fs.writeFileSync(filePath, sorted, "utf8");
133
- console.log(`${filePath} is sorted!`);
134
- }
135
- });
136
- }
207
+
208
+ const filesToProcess = process.argv[2]
209
+ ? process.argv.slice(2)
210
+ : [`${process.cwd()}/package.json`];
211
+
212
+ filesToProcess.forEach(filePath => {
213
+ const packageJson = fs.readFileSync(filePath, "utf8");
214
+ const sorted = sortPackageJson(packageJson);
215
+ if (sorted !== packageJson) {
216
+ fs.writeFileSync(filePath, sorted, "utf8");
217
+ console.log(`${filePath} is sorted!`);
218
+ }
219
+ });
220
+ }
@@ -1,163 +1,177 @@
1
1
  import chalk from "chalk";
2
+
2
3
  function isFunction(f) {
3
- return Object.prototype.toString.call(f) === "[object Function]";
4
+ return Object.prototype.toString.call(f) === "[object Function]";
4
5
  }
6
+
5
7
  function isRegExp(r) {
6
- return r instanceof RegExp;
8
+ return r instanceof RegExp;
7
9
  }
10
+
8
11
  function isObject(o) {
9
- return !Array.isArray(o) && !isFunction(o) && !isRegExp(o) && o === new Object(o);
12
+ return !Array.isArray(o) && !isFunction(o) && !isRegExp(o) && o === new Object(o);
10
13
  }
14
+
11
15
  let reColorName = /^(black|red|green|yellow|blue|magenta|cyan|white|gray)$/;
12
16
  function coloring(str, color, type) {
13
- str = str + "";
14
- if (typeof color === "function") {
15
- return color(str);
16
- } else if (reColorName.test(color)) {
17
- if (type === "string") {
18
- if (str === "Modified") {
19
- return chalk.green(str);
20
- } else if (str === "Deleted") {
21
- return chalk.red(str);
22
- } else {
23
- return chalk.blue(str);
24
- }
17
+ str = str + "";
18
+ if (typeof color === "function") {
19
+ return color(str);
20
+ } else if (reColorName.test(color)) {
21
+ if (type === "string") {
22
+ if (str === "Modified") {
23
+ return chalk.green(str);
24
+ } else if (str === "Deleted") {
25
+ return chalk.red(str);
26
+ } else {
27
+ return chalk.blue(str);
28
+ }
29
+ } else {
30
+ return chalk[color].bold.underline.white(str); //
31
+ }
25
32
  } else {
26
- return chalk[color].bold.underline.white(str); //
33
+ return str;
27
34
  }
28
- } else {
29
- return str;
30
- }
31
35
  }
36
+
32
37
  let defaultColors = {
33
- string: "yellow",
34
- number: "red",
35
- boolean: "blue",
36
- infinity: "red",
37
- nan: "cyan",
38
- null: "cyan",
39
- undefined: "gray",
40
- regexp: "green",
41
- key: "magenta",
42
- object: "white",
43
- array: "white"
38
+ string: "yellow",
39
+ number: "red",
40
+ boolean: "blue",
41
+ infinity: "red",
42
+ nan: "cyan",
43
+ null: "cyan",
44
+ undefined: "gray",
45
+ regexp: "green",
46
+ key: "magenta",
47
+ object: "white",
48
+ array: "white"
44
49
  };
45
- export default function (json, options) {
46
- options = options || {};
47
- if (options.symbol === undefined) {
48
- options.symbol = true;
49
- }
50
- options.padding = options.padding || 0;
51
- options.markdown = options.markdown || false;
52
- options.highlight = options.highlight || false;
53
- options.colors = options.colors || {};
54
- Object.keys(defaultColors).forEach(function (key) {
55
- options.colors[key] = options.colors[key] || defaultColors[key];
56
- });
57
- let output = "";
58
- let tree = function (o, depth, index, isLast, inArray, type) {
59
- index = [].concat(index || []);
60
- depth = depth || 0;
61
- index[depth] = 0;
62
- if (Array.isArray(o)) {
63
- if (inArray) {
64
- if (options.symbol) {
65
- tree("[]", depth, index, isLast, 0, "array");
66
- index[depth] = isLast ? 0 : 1;
50
+
51
+ export default function(json, options) {
52
+ options = options || {};
53
+ if (options.symbol === undefined) {
54
+ options.symbol = true;
55
+ }
56
+ options.padding = options.padding || 0;
57
+ options.markdown = options.markdown || false;
58
+ options.highlight = options.highlight || false;
59
+ options.colors = options.colors || {};
60
+
61
+ Object.keys(defaultColors).forEach(function(key) {
62
+ options.colors[key] = options.colors[key] || defaultColors[key];
63
+ });
64
+
65
+ let output = "";
66
+ let tree = function(o, depth, index, isLast, inArray, type) {
67
+ index = [].concat(index || []);
68
+ depth = depth || 0;
69
+ index[depth] = 0;
70
+
71
+ if (Array.isArray(o)) {
72
+ if (inArray) {
73
+ if (options.symbol) {
74
+ tree("[]", depth, index, isLast, 0, "array");
75
+ index[depth] = isLast ? 0 : 1;
76
+ } else {
77
+ depth--;
78
+ }
79
+ }
80
+ for (let i = 0, l = o.length; i < l; i++) {
81
+ tree(o[i], depth + 1, index, i === l - 1, 1);
82
+ }
83
+ } else if (isObject(o)) {
84
+ let keys = Object.keys(o);
85
+ if (inArray) {
86
+ // if (options.symbol) {
87
+ // tree("", depth, index, isLast, 0, "object");
88
+ index[depth] = isLast ? 0 : 1;
89
+ depth++;
90
+ // }
91
+ }
92
+ for (let i = 0, l = keys.length; i < l; i++) {
93
+ let lastFlg = inArray && !isLast && !options.symbol ? false : i === l - 1;
94
+
95
+ tree(keys[i], depth, index, lastFlg, 0, "key");
96
+ index[depth] = lastFlg ? 0 : 1;
97
+ tree(o[keys[i]], depth + 1, index, 1, 1);
98
+ }
67
99
  } else {
68
- depth--;
100
+ index[depth] = isLast ? 3 : 2;
101
+ if (isFunction(o)) {
102
+ o = "Function";
103
+ type = "function";
104
+ }
105
+
106
+ if (options.markdown) {
107
+ output += markdownList(depth) + o + "\n";
108
+ } else {
109
+ output += format(index) + highlight(o, type) + "\n";
110
+ }
69
111
  }
70
- }
71
- for (let i = 0, l = o.length; i < l; i++) {
72
- tree(o[i], depth + 1, index, i === l - 1, 1);
73
- }
74
- } else if (isObject(o)) {
75
- let keys = Object.keys(o);
76
- if (inArray) {
77
- // if (options.symbol) {
78
- // tree("", depth, index, isLast, 0, "object");
79
- index[depth] = isLast ? 0 : 1;
80
- depth++;
81
- // }
82
- }
83
- for (let i = 0, l = keys.length; i < l; i++) {
84
- let lastFlg = inArray && !isLast && !options.symbol ? false : i === l - 1;
85
- tree(keys[i], depth, index, lastFlg, 0, "key");
86
- index[depth] = lastFlg ? 0 : 1;
87
- tree(o[keys[i]], depth + 1, index, 1, 1);
88
- }
89
- } else {
90
- index[depth] = isLast ? 3 : 2;
91
- if (isFunction(o)) {
92
- o = "Function";
93
- type = "function";
94
- }
95
- if (options.markdown) {
96
- output += markdownList(depth) + o + "\n";
97
- } else {
98
- output += format(index) + highlight(o, type) + "\n";
99
- }
100
- }
101
- };
102
- let format = function (index) {
103
- let s = "";
104
- let p = new Array(options.padding + 1).join(" ");
105
- for (let i = 0, l = index.length; i < l; i++) {
106
- switch (index[i]) {
107
- case 1:
108
- s += chalk.grey("");
109
- break;
110
- case 2:
111
- s += chalk.grey("┣ ");
112
- break;
113
- case 3:
114
- s += chalk.grey("");
115
- break;
116
- default:
117
- s += chalk.grey("");
118
- }
119
- if (i < l - 1) {
120
- s += chalk.grey(p);
121
- }
122
- }
123
- return s;
124
- };
125
- let markdownList = function (depth) {
126
- return new Array(depth + 1).join(" ") + "+ ";
127
- };
128
- let highlight = function (data, type) {
129
- let hi;
130
- if (!options.highlight) {
131
- return data;
132
- }
133
- if (type === "key") {
134
- hi = "key";
135
- } else if (type === "array") {
136
- hi = "array";
137
- } else if (type === "object") {
138
- hi = "object";
139
- } else if (data !== data) {
140
- hi = "nan";
141
- } else if (data === Infinity) {
142
- hi = "infinity";
143
- } else if (typeof data === "string") {
144
- hi = "string";
145
- } else if (typeof data === "number") {
146
- hi = "number";
147
- } else if (isRegExp(data)) {
148
- hi = "regexp";
149
- } else if (typeof data === "boolean") {
150
- hi = "boolean";
151
- } else if (data === null) {
152
- hi = "null";
153
- } else if (data === void 0) {
154
- hi = "undefined";
155
- } else {
156
- return data;
157
- }
158
- return coloring(data, options.colors[hi], hi);
159
- };
160
- tree(json);
161
- return output;
162
- }
163
- ;
112
+ };
113
+
114
+ let format = function(index) {
115
+ let s = "";
116
+ let p = new Array(options.padding + 1).join(" ");
117
+ for (let i = 0, l = index.length; i < l; i++) {
118
+ switch (index[i]) {
119
+ case 1:
120
+ s += chalk.grey("");
121
+ break;
122
+ case 2:
123
+ s += chalk.grey("┣ ");
124
+ break;
125
+ case 3:
126
+ s += chalk.grey("┗");
127
+ break;
128
+ default:
129
+ s += chalk.grey("⌐");
130
+ }
131
+ if (i < l - 1) {
132
+ s += chalk.grey(p);
133
+ }
134
+ }
135
+ return s;
136
+ };
137
+
138
+ let markdownList = function(depth) {
139
+ return new Array(depth + 1).join(" ") + "+ ";
140
+ };
141
+
142
+ let highlight = function(data, type) {
143
+ let hi;
144
+ if (!options.highlight) {
145
+ return data;
146
+ }
147
+ if (type === "key") {
148
+ hi = "key";
149
+ } else if (type === "array") {
150
+ hi = "array";
151
+ } else if (type === "object") {
152
+ hi = "object";
153
+ } else if (data !== data) {
154
+ hi = "nan";
155
+ } else if (data === Infinity) {
156
+ hi = "infinity";
157
+ } else if (typeof data === "string") {
158
+ hi = "string";
159
+ } else if (typeof data === "number") {
160
+ hi = "number";
161
+ } else if (isRegExp(data)) {
162
+ hi = "regexp";
163
+ } else if (typeof data === "boolean") {
164
+ hi = "boolean";
165
+ } else if (data === null) {
166
+ hi = "null";
167
+ } else if (data === void 0) {
168
+ hi = "undefined";
169
+ } else {
170
+ return data;
171
+ }
172
+ return coloring(data, options.colors[hi], hi);
173
+ };
174
+
175
+ tree(json);
176
+ return output;
177
+ };