@cparra/apexdocs 2.2.4 → 2.4.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 (63) hide show
  1. package/.github/workflows/close_stale.yml +3 -3
  2. package/README.md +74 -114
  3. package/docs/{Misc → API}/SampleClassWithoutModifier.md +0 -0
  4. package/docs/README.md +2 -2
  5. package/docs/Sample-Classes/SampleClass.md +7 -1
  6. package/docs/Sample-Interfaces/SampleInterface.md +0 -3
  7. package/docs/Utils/GroupedClass.md +10 -10
  8. package/examples/force-app/main/default/classes/SampleClass.cls +1 -1
  9. package/lib/application/Apexdocs.d.ts +2 -1
  10. package/lib/application/Apexdocs.js +7 -5
  11. package/lib/application/Apexdocs.js.map +1 -1
  12. package/lib/cli/generate.js +6 -0
  13. package/lib/cli/generate.js.map +1 -1
  14. package/lib/model/apex-bundle.d.ts +2 -1
  15. package/lib/model/apex-bundle.js +2 -1
  16. package/lib/model/apex-bundle.js.map +1 -1
  17. package/lib/model/file.js +5 -2
  18. package/lib/model/file.js.map +1 -1
  19. package/lib/model/markdown-file.d.ts +2 -0
  20. package/lib/model/markdown-file.js +22 -0
  21. package/lib/model/markdown-file.js.map +1 -1
  22. package/lib/model/markdown-home-file.d.ts +0 -1
  23. package/lib/model/markdown-home-file.js +0 -4
  24. package/lib/model/markdown-home-file.js.map +1 -1
  25. package/lib/model/markdown-type-file.d.ts +0 -1
  26. package/lib/model/markdown-type-file.js +0 -4
  27. package/lib/model/markdown-type-file.js.map +1 -1
  28. package/lib/service/apex-file-reader.js +4 -4
  29. package/lib/service/apex-file-reader.js.map +1 -1
  30. package/lib/service/manifest-factory.d.ts +2 -1
  31. package/lib/service/manifest-factory.js.map +1 -1
  32. package/lib/service/parser.d.ts +2 -2
  33. package/lib/service/parser.js +3 -1
  34. package/lib/service/parser.js.map +1 -1
  35. package/lib/settings.d.ts +2 -0
  36. package/lib/settings.js +3 -0
  37. package/lib/settings.js.map +1 -1
  38. package/lib/transpiler/markdown/class-file-generatorHelper.js +4 -3
  39. package/lib/transpiler/markdown/class-file-generatorHelper.js.map +1 -1
  40. package/lib/util/error-logger.js +25 -24
  41. package/lib/util/error-logger.js.map +1 -1
  42. package/lib/util/logger.d.ts +4 -1
  43. package/lib/util/logger.js +28 -3
  44. package/lib/util/logger.js.map +1 -1
  45. package/package.json +6 -5
  46. package/src/application/Apexdocs.ts +8 -5
  47. package/src/cli/generate.ts +6 -0
  48. package/src/model/apex-bundle.ts +1 -1
  49. package/src/model/file.ts +6 -2
  50. package/src/model/markdown-file.ts +26 -0
  51. package/src/model/markdown-home-file.ts +0 -5
  52. package/src/model/markdown-type-file.ts +0 -5
  53. package/src/service/apex-file-reader.ts +4 -4
  54. package/src/service/manifest-factory.ts +5 -1
  55. package/src/service/parser.ts +5 -3
  56. package/src/settings.ts +5 -0
  57. package/src/transpiler/markdown/class-file-generatorHelper.ts +4 -3
  58. package/src/util/error-logger.ts +25 -24
  59. package/src/util/logger.ts +29 -3
  60. package/docs/.nojekyll +0 -0
  61. package/docs/Some-group/GroupedClass.md +0 -7
  62. package/docs/index.html +0 -21
  63. package/docs/index.md +0 -9
@@ -1,18 +1,20 @@
1
1
  import { Type, ReflectionResult } from '@cparra/apex-reflection';
2
2
  import ApexBundle from '../model/apex-bundle';
3
3
  import MetadataProcessor from './metadata-processor';
4
+ import { Logger } from '../util/logger';
4
5
 
5
6
  export interface TypeParser {
6
- parse(reflect: (typeBody: string) => ReflectionResult): Type[];
7
+ parse(reflect: (apexBundle: ApexBundle) => ReflectionResult): Type[];
7
8
  }
8
9
 
9
10
  export class RawBodyParser implements TypeParser {
10
11
  constructor(public typeBundles: ApexBundle[]) {}
11
12
 
12
- parse(reflect: (typeBody: string) => ReflectionResult): Type[] {
13
+ parse(reflect: (apexBundle: ApexBundle) => ReflectionResult): Type[] {
13
14
  return this.typeBundles
14
15
  .map((currentBundle) => {
15
- const result = reflect(currentBundle.rawTypeContent);
16
+ Logger.log(`Parsing file: ${currentBundle.filePath}`);
17
+ const result = reflect(currentBundle);
16
18
  if (!!result.typeMirror && !!currentBundle.rawMetadataContent) {
17
19
  // If successful and there is a metadata file
18
20
  const metadataParams = MetadataProcessor.process(currentBundle.rawMetadataContent);
package/src/settings.ts CHANGED
@@ -11,6 +11,7 @@ export interface SettingsConfig {
11
11
  outputDir: string;
12
12
  targetGenerator: GeneratorChoices;
13
13
  indexOnly: boolean;
14
+ defaultGroupName: string;
14
15
  }
15
16
 
16
17
  export class Settings {
@@ -59,4 +60,8 @@ export class Settings {
59
60
  get indexOnly(): boolean {
60
61
  return this.config.indexOnly;
61
62
  }
63
+
64
+ public getDefaultGroupName(): string {
65
+ return this.config.defaultGroupName;
66
+ }
62
67
  }
@@ -1,5 +1,6 @@
1
1
  import { Type } from '@cparra/apex-reflection';
2
2
  import { TypesRepository } from '../../model/types-repository';
3
+ import { Settings } from '../../settings';
3
4
 
4
5
  export default class ClassFileGeneratorHelper {
5
6
  public static getSanitizedGroup(classModel: Type) {
@@ -13,8 +14,8 @@ export default class ClassFileGeneratorHelper {
13
14
  public static getFileLinkByTypeName(typeName: string) {
14
15
  const type = TypesRepository.getInstance().getByName(typeName);
15
16
  if (!type) {
16
- // If the type is not found we simply return the file name we received
17
- return typeName;
17
+ // If the type is not found we return a Markdown hyperlink with whatever we received.
18
+ return `[${typeName}](${typeName})`;
18
19
  }
19
20
 
20
21
  return this.getFileLink(type);
@@ -22,6 +23,6 @@ export default class ClassFileGeneratorHelper {
22
23
 
23
24
  private static getClassGroup(classModel: Type): string {
24
25
  const groupAnnotation = classModel.docComment?.annotations.find((annotation) => annotation.name === 'group');
25
- return groupAnnotation?.body ?? 'Misc';
26
+ return groupAnnotation?.body ?? Settings.getInstance().getDefaultGroupName();
26
27
  }
27
28
  }
@@ -1,4 +1,5 @@
1
1
  import { ClassMirror, InterfaceMirror, Type } from '@cparra/apex-reflection';
2
+ import { Logger } from './logger';
2
3
 
3
4
  export default class ErrorLogger {
4
5
  public static logErrors(types: Type[]): void {
@@ -20,10 +21,10 @@ export default class ErrorLogger {
20
21
  private static logTypeErrors(currentType: Type, parentType?: Type) {
21
22
  if (currentType.docComment?.error) {
22
23
  const typeName = parentType ? `${parentType!.name}.${currentType.name}` : currentType.name;
23
- console.log(`${typeName} - Doc comment parsing error. Level: Type`);
24
- console.log(`Comment:\n ${currentType.docComment.rawDeclaration}`);
25
- console.log(currentType.docComment.error);
26
- console.log('=================================');
24
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Type`);
25
+ Logger.error(`Comment:\n ${currentType.docComment.rawDeclaration}`);
26
+ Logger.error(currentType.docComment.error);
27
+ Logger.error('=================================');
27
28
  }
28
29
  }
29
30
 
@@ -31,37 +32,37 @@ export default class ErrorLogger {
31
32
  const typeName = parentType ? `${parentType!.name}.${classMirror.name}` : classMirror.name;
32
33
  classMirror.constructors.forEach((currentConstructor) => {
33
34
  if (currentConstructor.docComment?.error) {
34
- console.log(`${typeName} - Doc comment parsing error. Level: Constructor`);
35
- console.log(`Comment:\n ${currentConstructor.docComment.rawDeclaration}`);
36
- console.log(currentConstructor.docComment.error);
37
- console.log('=================================');
35
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Constructor`);
36
+ Logger.error(`Comment:\n ${currentConstructor.docComment.rawDeclaration}`);
37
+ Logger.error(currentConstructor.docComment.error);
38
+ Logger.error('=================================');
38
39
  }
39
40
  });
40
41
 
41
42
  classMirror.fields.forEach((currentField) => {
42
43
  if (currentField.docComment?.error) {
43
- console.log(`${typeName} - Doc comment parsing error. Level: Field`);
44
- console.log(`Comment:\n ${currentField.docComment.rawDeclaration}`);
45
- console.log(currentField.docComment.error);
46
- console.log('=================================');
44
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Field`);
45
+ Logger.error(`Comment:\n ${currentField.docComment.rawDeclaration}`);
46
+ Logger.error(currentField.docComment.error);
47
+ Logger.error('=================================');
47
48
  }
48
49
  });
49
50
 
50
51
  classMirror.properties.forEach((currentProperty) => {
51
52
  if (currentProperty.docComment?.error) {
52
- console.log(`${typeName} - Doc comment parsing error. Level: Property`);
53
- console.log(`Comment:\n ${currentProperty.docComment.rawDeclaration}`);
54
- console.log(currentProperty.docComment.error);
55
- console.log('=================================');
53
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Property`);
54
+ Logger.error(`Comment:\n ${currentProperty.docComment.rawDeclaration}`);
55
+ Logger.error(currentProperty.docComment.error);
56
+ Logger.error('=================================');
56
57
  }
57
58
  });
58
59
 
59
60
  classMirror.methods.forEach((currentMethod) => {
60
61
  if (currentMethod.docComment?.error) {
61
- console.log(`${typeName} - Doc comment parsing error. Level: Method`);
62
- console.log(`Comment:\n ${currentMethod.docComment.rawDeclaration}`);
63
- console.log(currentMethod.docComment.error);
64
- console.log('=================================');
62
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Method`);
63
+ Logger.error(`Comment:\n ${currentMethod.docComment.rawDeclaration}`);
64
+ Logger.error(currentMethod.docComment.error);
65
+ Logger.error('=================================');
65
66
  }
66
67
  });
67
68
 
@@ -81,10 +82,10 @@ export default class ErrorLogger {
81
82
  private static logErrorsForInterface(interfaceMirror: InterfaceMirror): void {
82
83
  interfaceMirror.methods.forEach((currentMethod) => {
83
84
  if (currentMethod.docComment?.error) {
84
- console.log(`${interfaceMirror.name} - Doc comment parsing error. Level: Method`);
85
- console.log(`Comment: ${currentMethod.docComment.rawDeclaration}`);
86
- console.log(currentMethod.docComment.error);
87
- console.log('=================================');
85
+ Logger.error(`${interfaceMirror.name} - Doc comment parsing error. Level: Method`);
86
+ Logger.error(`Comment: ${currentMethod.docComment.rawDeclaration}`);
87
+ Logger.error(currentMethod.docComment.error);
88
+ Logger.error('=================================');
88
89
  }
89
90
  });
90
91
  }
@@ -1,9 +1,14 @@
1
1
  import * as chalk from 'chalk';
2
+ import * as logUpdate from 'log-update';
2
3
 
3
4
  /**
4
5
  * Logs messages to the console.
5
6
  */
6
7
  export class Logger {
8
+ static currentFrame = -1;
9
+
10
+ static frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
11
+
7
12
  /**
8
13
  * Logs a message with optional arguments.
9
14
  * @param message The message to log.
@@ -22,10 +27,31 @@ export class Logger {
22
27
  * @param args Optional arguments.
23
28
  */
24
29
  public static error(message: string, ...args: string[]) {
25
- this.log(`${chalk.red(message)}`, ...args);
30
+ this.logSingle(message, false, 'red', false);
31
+ args.forEach((arg) => {
32
+ this.logSingle(message, false, 'red', false);
33
+ });
34
+ }
35
+
36
+ public static logSingle(text: string, showSpinner = true, color: 'green' | 'red' = 'green', overrideConsole = true) {
37
+ if (this.currentFrame > 9) {
38
+ this.currentFrame = 0;
39
+ }
40
+ const spinner = showSpinner ? `${this.frames[this.currentFrame++]}` : '';
41
+ let logMessage;
42
+ if (color === 'green') {
43
+ logMessage = `${chalk.green(new Date().toLocaleString() + ': ')}${text}\n`;
44
+ } else {
45
+ logMessage = `${chalk.red(new Date().toLocaleString() + ': ')}${text}\n`;
46
+ }
47
+ if (overrideConsole) {
48
+ logUpdate(`${spinner} ${logMessage}`);
49
+ } else {
50
+ process.stdout.write(`${spinner} ${logMessage}`);
51
+ }
26
52
  }
27
53
 
28
- private static logSingle(message: string) {
29
- process.stdout.write(`${chalk.green(new Date().toLocaleString() + ': ')}${message}\n`);
54
+ public static clear() {
55
+ logUpdate.clear();
30
56
  }
31
57
  }
package/docs/.nojekyll DELETED
File without changes
@@ -1,7 +0,0 @@
1
- # GroupedClass
2
-
3
- Some desc
4
-
5
-
6
- **Group** Some group
7
-
package/docs/index.html DELETED
@@ -1,21 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>Document</title>
6
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
7
- <meta name="description" content="Description">
8
- <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
9
- <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/lib/themes/vue.css">
10
- </head>
11
- <body>
12
- <div id="app"></div>
13
- <script>
14
- window.$docsify = {
15
- name: '',
16
- repo: ''
17
- }
18
- </script>
19
- <script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
20
- </body>
21
- </html>
package/docs/index.md DELETED
@@ -1,9 +0,0 @@
1
- ---
2
- layout: default
3
- ---
4
- # Classes
5
- ## Sample Interfaces
6
-
7
- ### [SampleInterface](/Sample-Interfaces/SampleInterface.md)
8
-
9
- This is an interface description.