@cparra/apexdocs 3.0.0-alpha.4 → 3.0.0-alpha.5

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.
@@ -13,7 +13,7 @@ var Handlebars = require('handlebars');
13
13
  var defaults = require('../defaults-DGKfeZq-.js');
14
14
  var fs = require('fs');
15
15
  var chalk = require('chalk');
16
- var logUpdate = require('log-update');
16
+ var ora = require('ora');
17
17
  var cosmiconfig = require('cosmiconfig');
18
18
  var yargs = require('yargs');
19
19
  var cosmiconfigTypescriptLoader = require('cosmiconfig-typescript-loader');
@@ -1718,52 +1718,32 @@ class Logger {
1718
1718
  * @param args Optional arguments.
1719
1719
  */
1720
1720
  static error(message, ...args) {
1721
- this.logSingle(message, false, "red", false);
1721
+ this.logSingle(message, "red");
1722
1722
  args.forEach(() => {
1723
- this.logSingle(message, false, "red", false);
1723
+ this.logSingle(message, "red");
1724
1724
  });
1725
1725
  }
1726
- static logSingle(text, showSpinner = true, color = "green", overrideConsole = true) {
1726
+ static logSingle(text, color = "green") {
1727
1727
  if (this.currentFrame > 9) {
1728
1728
  this.currentFrame = 0;
1729
1729
  }
1730
- const spinner = showSpinner ? `${this.frames[this.currentFrame++]}` : "";
1731
- let logMessage;
1732
- if (color === "green") {
1733
- logMessage = `${chalk.green((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
1730
+ const logMessage = `${this.getChalkFn(color)((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
1734
1731
  `;
1735
- } else {
1736
- logMessage = `${chalk.red((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
1737
- `;
1738
- }
1739
- if (overrideConsole) {
1740
- logUpdate(`${spinner} ${logMessage}`);
1741
- } else {
1742
- process.stdout.write(`${spinner} ${logMessage}`);
1743
- }
1732
+ process.stdout.write(logMessage);
1744
1733
  }
1745
- static clear() {
1746
- logUpdate.clear();
1734
+ static getChalkFn(color) {
1735
+ return color === "green" ? chalk.green : chalk.red;
1747
1736
  }
1748
- static startSpinner() {
1749
- if (this.spinnerInterval) {
1750
- clearInterval(this.spinnerInterval);
1751
- }
1752
- this.spinnerInterval = setInterval(() => {
1753
- this.logSingle("Processing...", true, "green", true);
1754
- }, 80);
1737
+ static startSpinner(text) {
1738
+ this.spinner.text = text;
1739
+ this.spinner.start();
1755
1740
  }
1756
- static stopSpinner() {
1757
- if (this.spinnerInterval) {
1758
- clearInterval(this.spinnerInterval);
1759
- this.spinnerInterval = null;
1760
- this.clear();
1761
- }
1741
+ static succeedSpinner(text) {
1742
+ this.spinner.succeed(text);
1762
1743
  }
1763
1744
  }
1764
1745
  Logger.currentFrame = 0;
1765
- Logger.frames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
1766
- Logger.spinnerInterval = null;
1746
+ Logger.spinner = ora();
1767
1747
 
1768
1748
  const referenceGuideTemplate = `
1769
1749
  # Apex Reference Guide
@@ -1826,8 +1806,7 @@ function writeFilesToSystem(files, outputDir) {
1826
1806
  FileWriter.write(
1827
1807
  [files.referenceGuide, ...files.docs].filter((file) => !isSkip(file)),
1828
1808
  outputDir,
1829
- (file) => {
1830
- Logger.logSingle(`${file.outputDocPath} processed.`, false, "green", false);
1809
+ () => {
1831
1810
  }
1832
1811
  );
1833
1812
  }
@@ -2737,7 +2716,7 @@ class OpenApiDocsProcessor {
2737
2716
  }
2738
2717
  onProcess(type) {
2739
2718
  var _a, _b;
2740
- Logger.logSingle(`Processing ${type.name}`, false, "green", false);
2719
+ Logger.logSingle(`Processing ${type.name}`, "green");
2741
2720
  const endpointPath = this.getEndpointPath(type);
2742
2721
  if (!endpointPath) {
2743
2722
  return;
@@ -2785,7 +2764,7 @@ function openApi(fileBodies, config) {
2785
2764
  Transpiler.generate(filteredTypes, processor);
2786
2765
  const generatedFiles = processor.fileBuilder().files();
2787
2766
  FileWriter.write(generatedFiles, config.targetDir, (file) => {
2788
- Logger.logSingle(`${file.outputDocPath} processed.`, false, "green", false);
2767
+ Logger.logSingle(`${file.outputDocPath} processed.`, "green");
2789
2768
  });
2790
2769
  ErrorLogger.logErrors(filteredTypes);
2791
2770
  }
@@ -2807,9 +2786,8 @@ function filterByScopes(manifest) {
2807
2786
  "httpput"
2808
2787
  ]);
2809
2788
  const filteredLogMessage = `Filtered ${manifest.types.length - filteredTypes.length} file(s), only keeping classes annotated as @RestResource.`;
2810
- Logger.clear();
2811
- Logger.logSingle(filteredLogMessage, false, "green", false);
2812
- Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, "green", false);
2789
+ Logger.logSingle(filteredLogMessage, "green");
2790
+ Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, "green");
2813
2791
  return filteredTypes;
2814
2792
  }
2815
2793
 
@@ -2889,8 +2867,8 @@ class Apexdocs {
2889
2867
  */
2890
2868
  static generate(config) {
2891
2869
  return __async$1(this, null, function* () {
2892
- Logger.logSingle("Initializing...", false);
2893
- Logger.startSpinner();
2870
+ Logger.logSingle("Initializing...");
2871
+ Logger.startSpinner("Processing files...");
2894
2872
  try {
2895
2873
  const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem(), config.sourceDir, config.includeMetadata);
2896
2874
  switch (config.targetGenerator) {
@@ -2902,7 +2880,7 @@ class Apexdocs {
2902
2880
  break;
2903
2881
  }
2904
2882
  } finally {
2905
- Logger.stopSpinner();
2883
+ Logger.succeedSpinner("Files processed.");
2906
2884
  }
2907
2885
  });
2908
2886
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cparra/apexdocs",
3
- "version": "3.0.0-alpha.4",
3
+ "version": "3.0.0-alpha.5",
4
4
  "description": "Library with CLI capabilities to generate documentation for Salesforce Apex classes.",
5
5
  "keywords": [
6
6
  "apex",
@@ -68,7 +68,7 @@
68
68
  "fp-ts": "^2.16.8",
69
69
  "handlebars": "^4.7.8",
70
70
  "js-yaml": "^4.1.0",
71
- "log-update": "4.0.0",
71
+ "ora": "^5.4.1",
72
72
  "type-fest": "^4.23.0",
73
73
  "yargs": "^17.7.2"
74
74
  },
@@ -14,8 +14,8 @@ export class Apexdocs {
14
14
  * Generates documentation out of Apex source files.
15
15
  */
16
16
  static async generate(config: UserDefinedConfig): Promise<void> {
17
- Logger.logSingle('Initializing...', false);
18
- Logger.startSpinner();
17
+ Logger.logSingle('Initializing...');
18
+ Logger.startSpinner('Processing files...');
19
19
 
20
20
  try {
21
21
  const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem(), config.sourceDir, config.includeMetadata);
@@ -29,7 +29,8 @@ export class Apexdocs {
29
29
  break;
30
30
  }
31
31
  } finally {
32
- Logger.stopSpinner();
32
+ // TODO: Allow for failures
33
+ Logger.succeedSpinner('Files processed.');
33
34
  }
34
35
  }
35
36
  }
@@ -47,8 +47,9 @@ function writeFilesToSystem(files: PostHookDocumentationBundle, outputDir: strin
47
47
  // Filter out any files that should be skipped
48
48
  .filter((file) => !isSkip(file)) as PageData[],
49
49
  outputDir,
50
- (file: PageData) => {
51
- Logger.logSingle(`${file.outputDocPath} processed.`, false, 'green', false);
50
+ () => {
51
+ // TODO: Don't do this here, send things back up.
52
+ //Logger.logSingle(`${file.outputDocPath} processed.`, 'green');
52
53
  },
53
54
  );
54
55
  }
@@ -19,7 +19,7 @@ export default function openApi(fileBodies: UnparsedSourceFile[], config: UserDe
19
19
  const generatedFiles = processor.fileBuilder().files();
20
20
 
21
21
  FileWriter.write(generatedFiles, config.targetDir, (file: PageData) => {
22
- Logger.logSingle(`${file.outputDocPath} processed.`, false, 'green', false);
22
+ Logger.logSingle(`${file.outputDocPath} processed.`, 'green');
23
23
  });
24
24
 
25
25
  // Error logging
@@ -48,9 +48,8 @@ function filterByScopes(manifest: Manifest) {
48
48
  const filteredLogMessage = `Filtered ${
49
49
  manifest.types.length - filteredTypes.length
50
50
  } file(s), only keeping classes annotated as @RestResource.`;
51
- Logger.clear();
52
51
 
53
- Logger.logSingle(filteredLogMessage, false, 'green', false);
54
- Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
52
+ Logger.logSingle(filteredLogMessage, 'green');
53
+ Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, 'green');
55
54
  return filteredTypes;
56
55
  }
@@ -25,7 +25,7 @@ export class OpenApiDocsProcessor {
25
25
  }
26
26
 
27
27
  onProcess(type: Type): void {
28
- Logger.logSingle(`Processing ${type.name}`, false, 'green', false);
28
+ Logger.logSingle(`Processing ${type.name}`, 'green');
29
29
 
30
30
  const endpointPath = this.getEndpointPath(type);
31
31
  if (!endpointPath) {
@@ -1,14 +1,11 @@
1
1
  import chalk from 'chalk';
2
- import logUpdate from 'log-update';
3
-
2
+ import ora from 'ora';
4
3
  /**
5
4
  * Logs messages to the console.
6
5
  */
7
6
  export class Logger {
8
7
  static currentFrame = 0;
9
-
10
- static frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
11
- static spinnerInterval: NodeJS.Timeout | null = null;
8
+ static spinner = ora();
12
9
 
13
10
  /**
14
11
  * Logs a message with optional arguments.
@@ -28,48 +25,31 @@ export class Logger {
28
25
  * @param args Optional arguments.
29
26
  */
30
27
  public static error(message: unknown, ...args: string[]) {
31
- this.logSingle(message, false, 'red', false);
28
+ this.logSingle(message, 'red');
32
29
  args.forEach(() => {
33
- this.logSingle(message, false, 'red', false);
30
+ this.logSingle(message, 'red');
34
31
  });
35
32
  }
36
33
 
37
- public static logSingle(text: unknown, showSpinner = true, color: 'green' | 'red' = 'green', overrideConsole = true) {
34
+ public static logSingle(text: unknown, color: 'green' | 'red' = 'green') {
38
35
  if (this.currentFrame > 9) {
39
36
  this.currentFrame = 0;
40
37
  }
41
- const spinner = showSpinner ? `${this.frames[this.currentFrame++]}` : '';
42
- let logMessage;
43
- if (color === 'green') {
44
- logMessage = `${chalk.green(new Date().toLocaleString() + ': ')}${text}\n`;
45
- } else {
46
- logMessage = `${chalk.red(new Date().toLocaleString() + ': ')}${text}\n`;
47
- }
48
- if (overrideConsole) {
49
- logUpdate(`${spinner} ${logMessage}`);
50
- } else {
51
- process.stdout.write(`${spinner} ${logMessage}`);
52
- }
38
+
39
+ const logMessage = `${this.getChalkFn(color)(new Date().toLocaleString() + ': ')}${text}\n`;
40
+ process.stdout.write(logMessage);
53
41
  }
54
42
 
55
- public static clear() {
56
- logUpdate.clear();
43
+ private static getChalkFn(color: 'green' | 'red') {
44
+ return color === 'green' ? chalk.green : chalk.red;
57
45
  }
58
46
 
59
- public static startSpinner() {
60
- if (this.spinnerInterval) {
61
- clearInterval(this.spinnerInterval);
62
- }
63
- this.spinnerInterval = setInterval(() => {
64
- this.logSingle('Processing...', true, 'green', true);
65
- }, 80);
47
+ public static startSpinner(text: string) {
48
+ this.spinner.text = text;
49
+ this.spinner.start();
66
50
  }
67
51
 
68
- public static stopSpinner() {
69
- if (this.spinnerInterval) {
70
- clearInterval(this.spinnerInterval);
71
- this.spinnerInterval = null;
72
- this.clear();
73
- }
52
+ public static succeedSpinner(text: string) {
53
+ this.spinner.succeed(text);
74
54
  }
75
55
  }