@cparra/apexdocs 2.2.5 → 2.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.
- package/.github/workflows/close_stale.yml +3 -3
- package/README.md +33 -8
- package/docs/Misc/SampleClass.md +168 -0
- package/docs/README.md +1 -6
- package/docs/Sample-Classes/SampleClass.md +1 -1
- package/lib/application/Apexdocs.d.ts +2 -1
- package/lib/application/Apexdocs.js +7 -5
- package/lib/application/Apexdocs.js.map +1 -1
- package/lib/model/apex-bundle.d.ts +2 -1
- package/lib/model/apex-bundle.js +2 -1
- package/lib/model/apex-bundle.js.map +1 -1
- package/lib/model/file.js +5 -2
- package/lib/model/file.js.map +1 -1
- package/lib/model/markdown-file.d.ts +2 -0
- package/lib/model/markdown-file.js +22 -0
- package/lib/model/markdown-file.js.map +1 -1
- package/lib/model/markdown-home-file.d.ts +0 -1
- package/lib/model/markdown-home-file.js +0 -4
- package/lib/model/markdown-home-file.js.map +1 -1
- package/lib/model/markdown-type-file.d.ts +0 -1
- package/lib/model/markdown-type-file.js +0 -4
- package/lib/model/markdown-type-file.js.map +1 -1
- package/lib/service/apex-file-reader.js +4 -4
- package/lib/service/apex-file-reader.js.map +1 -1
- package/lib/service/manifest-factory.d.ts +2 -1
- package/lib/service/manifest-factory.js.map +1 -1
- package/lib/service/parser.d.ts +2 -2
- package/lib/service/parser.js +3 -1
- package/lib/service/parser.js.map +1 -1
- package/lib/transpiler/markdown/class-file-generatorHelper.js +2 -2
- package/lib/transpiler/markdown/class-file-generatorHelper.js.map +1 -1
- package/lib/util/error-logger.js +25 -24
- package/lib/util/error-logger.js.map +1 -1
- package/lib/util/logger.d.ts +4 -1
- package/lib/util/logger.js +28 -3
- package/lib/util/logger.js.map +1 -1
- package/package.json +5 -4
- package/src/application/Apexdocs.ts +8 -5
- package/src/model/apex-bundle.ts +1 -1
- package/src/model/file.ts +6 -2
- package/src/model/markdown-file.ts +26 -0
- package/src/model/markdown-home-file.ts +0 -5
- package/src/model/markdown-type-file.ts +0 -5
- package/src/service/apex-file-reader.ts +4 -4
- package/src/service/manifest-factory.ts +5 -1
- package/src/service/parser.ts +5 -3
- package/src/transpiler/markdown/class-file-generatorHelper.ts +2 -2
- package/src/util/error-logger.ts +25 -24
- package/src/util/logger.ts +29 -3
- package/docs/Some-group/GroupedClass.md +0 -7
- package/docs/index.html +0 -21
- package/examples/force-app/main/default/classes/SampleClassTest.cls +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-file-generatorHelper.js","sourceRoot":"","sources":["../../../src/transpiler/markdown/class-file-generatorHelper.ts"],"names":[],"mappings":";;AACA,mEAA+D;AAE/D,MAAqB,wBAAwB;IACpC,MAAM,CAAC,iBAAiB,CAAC,UAAgB;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,UAAgB;QACxC,OAAO,IAAI,UAAU,CAAC,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,MAAM,CAAC;IAC9F,CAAC;IAEM,MAAM,CAAC,qBAAqB,CAAC,QAAgB;QAClD,MAAM,IAAI,GAAG,kCAAe,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE;YACT,
|
|
1
|
+
{"version":3,"file":"class-file-generatorHelper.js","sourceRoot":"","sources":["../../../src/transpiler/markdown/class-file-generatorHelper.ts"],"names":[],"mappings":";;AACA,mEAA+D;AAE/D,MAAqB,wBAAwB;IACpC,MAAM,CAAC,iBAAiB,CAAC,UAAgB;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,UAAgB;QACxC,OAAO,IAAI,UAAU,CAAC,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,MAAM,CAAC;IAC9F,CAAC;IAEM,MAAM,CAAC,qBAAqB,CAAC,QAAgB;QAClD,MAAM,IAAI,GAAG,kCAAe,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE;YACT,qFAAqF;YACrF,OAAO,IAAI,QAAQ,KAAK,QAAQ,GAAG,CAAC;SACrC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,UAAgB;;QAC3C,MAAM,eAAe,SAAG,UAAU,CAAC,UAAU,0CAAE,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC7G,aAAO,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,mCAAI,MAAM,CAAC;IACzC,CAAC;CACF;AAvBD,2CAuBC"}
|
package/lib/util/error-logger.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const logger_1 = require("./logger");
|
|
3
4
|
class ErrorLogger {
|
|
4
5
|
static logErrors(types) {
|
|
5
6
|
types.forEach((currentType) => {
|
|
@@ -19,10 +20,10 @@ class ErrorLogger {
|
|
|
19
20
|
var _a;
|
|
20
21
|
if ((_a = currentType.docComment) === null || _a === void 0 ? void 0 : _a.error) {
|
|
21
22
|
const typeName = parentType ? `${parentType.name}.${currentType.name}` : currentType.name;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
logger_1.Logger.error(`${typeName} - Doc comment parsing error. Level: Type`);
|
|
24
|
+
logger_1.Logger.error(`Comment:\n ${currentType.docComment.rawDeclaration}`);
|
|
25
|
+
logger_1.Logger.error(currentType.docComment.error);
|
|
26
|
+
logger_1.Logger.error('=================================');
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
static logErrorsForClass(classMirror, parentType) {
|
|
@@ -30,37 +31,37 @@ class ErrorLogger {
|
|
|
30
31
|
classMirror.constructors.forEach((currentConstructor) => {
|
|
31
32
|
var _a;
|
|
32
33
|
if ((_a = currentConstructor.docComment) === null || _a === void 0 ? void 0 : _a.error) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
logger_1.Logger.error(`${typeName} - Doc comment parsing error. Level: Constructor`);
|
|
35
|
+
logger_1.Logger.error(`Comment:\n ${currentConstructor.docComment.rawDeclaration}`);
|
|
36
|
+
logger_1.Logger.error(currentConstructor.docComment.error);
|
|
37
|
+
logger_1.Logger.error('=================================');
|
|
37
38
|
}
|
|
38
39
|
});
|
|
39
40
|
classMirror.fields.forEach((currentField) => {
|
|
40
41
|
var _a;
|
|
41
42
|
if ((_a = currentField.docComment) === null || _a === void 0 ? void 0 : _a.error) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
logger_1.Logger.error(`${typeName} - Doc comment parsing error. Level: Field`);
|
|
44
|
+
logger_1.Logger.error(`Comment:\n ${currentField.docComment.rawDeclaration}`);
|
|
45
|
+
logger_1.Logger.error(currentField.docComment.error);
|
|
46
|
+
logger_1.Logger.error('=================================');
|
|
46
47
|
}
|
|
47
48
|
});
|
|
48
49
|
classMirror.properties.forEach((currentProperty) => {
|
|
49
50
|
var _a;
|
|
50
51
|
if ((_a = currentProperty.docComment) === null || _a === void 0 ? void 0 : _a.error) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
logger_1.Logger.error(`${typeName} - Doc comment parsing error. Level: Property`);
|
|
53
|
+
logger_1.Logger.error(`Comment:\n ${currentProperty.docComment.rawDeclaration}`);
|
|
54
|
+
logger_1.Logger.error(currentProperty.docComment.error);
|
|
55
|
+
logger_1.Logger.error('=================================');
|
|
55
56
|
}
|
|
56
57
|
});
|
|
57
58
|
classMirror.methods.forEach((currentMethod) => {
|
|
58
59
|
var _a;
|
|
59
60
|
if ((_a = currentMethod.docComment) === null || _a === void 0 ? void 0 : _a.error) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
logger_1.Logger.error(`${typeName} - Doc comment parsing error. Level: Method`);
|
|
62
|
+
logger_1.Logger.error(`Comment:\n ${currentMethod.docComment.rawDeclaration}`);
|
|
63
|
+
logger_1.Logger.error(currentMethod.docComment.error);
|
|
64
|
+
logger_1.Logger.error('=================================');
|
|
64
65
|
}
|
|
65
66
|
});
|
|
66
67
|
classMirror.enums.forEach((currentEnum) => {
|
|
@@ -77,10 +78,10 @@ class ErrorLogger {
|
|
|
77
78
|
interfaceMirror.methods.forEach((currentMethod) => {
|
|
78
79
|
var _a;
|
|
79
80
|
if ((_a = currentMethod.docComment) === null || _a === void 0 ? void 0 : _a.error) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
logger_1.Logger.error(`${interfaceMirror.name} - Doc comment parsing error. Level: Method`);
|
|
82
|
+
logger_1.Logger.error(`Comment: ${currentMethod.docComment.rawDeclaration}`);
|
|
83
|
+
logger_1.Logger.error(currentMethod.docComment.error);
|
|
84
|
+
logger_1.Logger.error('=================================');
|
|
84
85
|
}
|
|
85
86
|
});
|
|
86
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-logger.js","sourceRoot":"","sources":["../../src/util/error-logger.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"error-logger.js","sourceRoot":"","sources":["../../src/util/error-logger.ts"],"names":[],"mappings":"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"}
|
package/lib/util/logger.d.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Logs messages to the console.
|
|
3
3
|
*/
|
|
4
4
|
export declare class Logger {
|
|
5
|
+
static currentFrame: number;
|
|
6
|
+
static frames: string[];
|
|
5
7
|
/**
|
|
6
8
|
* Logs a message with optional arguments.
|
|
7
9
|
* @param message The message to log.
|
|
@@ -14,5 +16,6 @@ export declare class Logger {
|
|
|
14
16
|
* @param args Optional arguments.
|
|
15
17
|
*/
|
|
16
18
|
static error(message: string, ...args: string[]): void;
|
|
17
|
-
|
|
19
|
+
static logSingle(text: string, showSpinner?: boolean, color?: 'green' | 'red', overrideConsole?: boolean): void;
|
|
20
|
+
static clear(): void;
|
|
18
21
|
}
|
package/lib/util/logger.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Logger = void 0;
|
|
4
4
|
const chalk = require("chalk");
|
|
5
|
+
const logUpdate = require("log-update");
|
|
5
6
|
/**
|
|
6
7
|
* Logs messages to the console.
|
|
7
8
|
*/
|
|
@@ -23,11 +24,35 @@ class Logger {
|
|
|
23
24
|
* @param args Optional arguments.
|
|
24
25
|
*/
|
|
25
26
|
static error(message, ...args) {
|
|
26
|
-
this.
|
|
27
|
+
this.logSingle(message, false, 'red', false);
|
|
28
|
+
args.forEach((arg) => {
|
|
29
|
+
this.logSingle(message, false, 'red', false);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static logSingle(text, showSpinner = true, color = 'green', overrideConsole = true) {
|
|
33
|
+
if (this.currentFrame > 9) {
|
|
34
|
+
this.currentFrame = 0;
|
|
35
|
+
}
|
|
36
|
+
const spinner = showSpinner ? `${this.frames[this.currentFrame++]}` : '';
|
|
37
|
+
let logMessage;
|
|
38
|
+
if (color === 'green') {
|
|
39
|
+
logMessage = `${chalk.green(new Date().toLocaleString() + ': ')}${text}\n`;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
logMessage = `${chalk.red(new Date().toLocaleString() + ': ')}${text}\n`;
|
|
43
|
+
}
|
|
44
|
+
if (overrideConsole) {
|
|
45
|
+
logUpdate(`${spinner} ${logMessage}`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
process.stdout.write(`${spinner} ${logMessage}`);
|
|
49
|
+
}
|
|
27
50
|
}
|
|
28
|
-
static
|
|
29
|
-
|
|
51
|
+
static clear() {
|
|
52
|
+
logUpdate.clear();
|
|
30
53
|
}
|
|
31
54
|
}
|
|
32
55
|
exports.Logger = Logger;
|
|
56
|
+
Logger.currentFrame = -1;
|
|
57
|
+
Logger.frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
33
58
|
//# sourceMappingURL=logger.js.map
|
package/lib/util/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,wCAAwC;AAExC;;GAEG;AACH,MAAa,MAAM;IAKjB;;;;OAIG;IACI,MAAM,CAAC,GAAG,CAAC,OAAe,EAAE,GAAG,IAAc;QAClD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAc;QACpD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,IAAY,EAAE,WAAW,GAAG,IAAI,EAAE,QAAyB,OAAO,EAAE,eAAe,GAAG,IAAI;QAChH,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;SACvB;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,IAAI,UAAU,CAAC;QACf,IAAI,KAAK,KAAK,OAAO,EAAE;YACrB,UAAU,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;SAC5E;aAAM;YACL,UAAU,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;SAC1E;QACD,IAAI,eAAe,EAAE;YACnB,SAAS,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;SACvC;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;SAClD;IACH,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;;AAjDH,wBAkDC;AAjDQ,mBAAY,GAAG,CAAC,CAAC,CAAC;AAElB,aAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cparra/apexdocs",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Library with CLI capabilities to generate documentation for Salesforce Apex classes.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"apex",
|
|
@@ -64,10 +64,11 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@cparra/apex-reflection": "^1.
|
|
68
|
-
"fast-xml-parser": "^4.0.1",
|
|
67
|
+
"@cparra/apex-reflection": "^1.6.0",
|
|
69
68
|
"chalk": "^4.1.2",
|
|
70
|
-
"
|
|
69
|
+
"fast-xml-parser": "^4.0.1",
|
|
70
|
+
"log-update": "4.0.0",
|
|
71
|
+
"xss": "^1.0.11",
|
|
71
72
|
"yargs": "^16.0.3"
|
|
72
73
|
}
|
|
73
74
|
}
|
|
@@ -9,6 +9,7 @@ import Transpiler from '../transpiler/transpiler';
|
|
|
9
9
|
import { FileWriter } from '../service/file-writer';
|
|
10
10
|
import { TypesRepository } from '../model/types-repository';
|
|
11
11
|
import ErrorLogger from '../util/error-logger';
|
|
12
|
+
import ApexBundle from '../model/apex-bundle';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Application entry-point to generate documentation out of Apex source files.
|
|
@@ -18,28 +19,30 @@ export class Apexdocs {
|
|
|
18
19
|
* Generates documentation out of Apex source files.
|
|
19
20
|
*/
|
|
20
21
|
static generate(): void {
|
|
22
|
+
Logger.log('Initializing...');
|
|
21
23
|
const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem());
|
|
22
24
|
const manifest = createManifest(new RawBodyParser(fileBodies), this._reflectionWithLogger);
|
|
23
25
|
|
|
24
26
|
const filteredTypes: Type[] = manifest.filteredByAccessModifierAndAnnotations(Settings.getInstance().scope);
|
|
25
27
|
TypesRepository.getInstance().populate(filteredTypes);
|
|
28
|
+
Logger.clear();
|
|
26
29
|
|
|
27
|
-
Logger.
|
|
30
|
+
Logger.logSingle(`Parsed ${filteredTypes.length} files`, false, 'green', false);
|
|
28
31
|
const processor = Settings.getInstance().typeTranspiler;
|
|
29
32
|
Transpiler.generate(filteredTypes, processor);
|
|
30
33
|
const generatedFiles = processor.fileBuilder().files();
|
|
31
34
|
FileWriter.write(generatedFiles, (fileName: string) => {
|
|
32
|
-
Logger.
|
|
35
|
+
Logger.logSingle(`${fileName} processed.`, false, 'green', false);
|
|
33
36
|
});
|
|
34
37
|
|
|
35
38
|
// Error logging
|
|
36
39
|
ErrorLogger.logErrors(filteredTypes);
|
|
37
40
|
}
|
|
38
41
|
|
|
39
|
-
static _reflectionWithLogger = (
|
|
40
|
-
const result = reflect(
|
|
42
|
+
static _reflectionWithLogger = (apexBundle: ApexBundle): ReflectionResult => {
|
|
43
|
+
const result = reflect(apexBundle.rawTypeContent);
|
|
41
44
|
if (result.error) {
|
|
42
|
-
Logger.
|
|
45
|
+
Logger.error(`${apexBundle.filePath} - Parsing error ${result.error?.message}`);
|
|
43
46
|
}
|
|
44
47
|
return result;
|
|
45
48
|
};
|
package/src/model/apex-bundle.ts
CHANGED
package/src/model/file.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import xss = require('xss');
|
|
2
|
+
|
|
3
|
+
const xssFilter = new xss.FilterXSS({
|
|
4
|
+
whiteList: { br: [], p: [], ul: [], li: [] },
|
|
5
|
+
});
|
|
2
6
|
|
|
3
7
|
export abstract class File {
|
|
4
8
|
_contents = '';
|
|
@@ -12,7 +16,7 @@ export abstract class File {
|
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
addText(text: string, encodeHtml = true) {
|
|
15
|
-
const textToAdd = encodeHtml ?
|
|
19
|
+
const textToAdd = encodeHtml ? xssFilter.process(text) : text;
|
|
16
20
|
this._contents += textToAdd;
|
|
17
21
|
this.addBlankLine();
|
|
18
22
|
}
|
|
@@ -18,6 +18,12 @@ export class MarkdownFile extends File {
|
|
|
18
18
|
this.addBlankLine();
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
public addText(text: string, encodeHtml = true) {
|
|
22
|
+
text = MarkdownFile.replaceInlineLinks(text);
|
|
23
|
+
text = MarkdownFile.replaceInlineEmails(text);
|
|
24
|
+
super.addText(text, encodeHtml);
|
|
25
|
+
}
|
|
26
|
+
|
|
21
27
|
startCodeBlock() {
|
|
22
28
|
this._contents += '```';
|
|
23
29
|
const sourceLanguage = 'apex';
|
|
@@ -86,4 +92,24 @@ export class MarkdownFile extends File {
|
|
|
86
92
|
}
|
|
87
93
|
return text;
|
|
88
94
|
}
|
|
95
|
+
|
|
96
|
+
protected static replaceInlineEmails(text: string) {
|
|
97
|
+
// Parsing links using {@link ClassName} format
|
|
98
|
+
const linkFormatRegEx = '{@email (.*?)}';
|
|
99
|
+
const expression = new RegExp(linkFormatRegEx, 'gi');
|
|
100
|
+
let match;
|
|
101
|
+
const matches = [];
|
|
102
|
+
|
|
103
|
+
do {
|
|
104
|
+
match = expression.exec(text);
|
|
105
|
+
if (match) {
|
|
106
|
+
matches.push(match);
|
|
107
|
+
}
|
|
108
|
+
} while (match);
|
|
109
|
+
|
|
110
|
+
for (const currentMatch of matches) {
|
|
111
|
+
text = text.replace(currentMatch[0], `[${currentMatch[1]}](mailto:${currentMatch[1]})`);
|
|
112
|
+
}
|
|
113
|
+
return text;
|
|
114
|
+
}
|
|
89
115
|
}
|
|
@@ -12,11 +12,6 @@ export class MarkdownHomeFile extends MarkdownFile {
|
|
|
12
12
|
this.addTypeEntries(types);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
public addText(text: string, encodeHtml = true) {
|
|
16
|
-
text = MarkdownFile.replaceInlineLinks(text);
|
|
17
|
-
super.addText(text, encodeHtml);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
15
|
private addTypeEntries(types: Type[]) {
|
|
21
16
|
const groupedClasses: Map<string, Type[]> = this.group(types);
|
|
22
17
|
groupedClasses.forEach((value: Type[], key: string) => {
|
|
@@ -32,11 +32,6 @@ export class MarkdownTypeFile extends MarkdownFile implements WalkerListener {
|
|
|
32
32
|
walker.walk(this);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
public addText(text: string, encodeHtml = true) {
|
|
36
|
-
text = MarkdownFile.replaceInlineLinks(text);
|
|
37
|
-
super.addText(text, encodeHtml);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
35
|
public onTypeDeclaration(typeMirror: Type): void {
|
|
41
36
|
this.addTitle(typeMirror.name, this.headingLevel);
|
|
42
37
|
declareType(this, typeMirror);
|
|
@@ -12,13 +12,13 @@ export class ApexFileReader {
|
|
|
12
12
|
* Reads from .cls files and returns their raw body.
|
|
13
13
|
*/
|
|
14
14
|
static processFiles(fileSystem: FileSystem, rootPath: string = this.sourceDirectory): ApexBundle[] {
|
|
15
|
-
let
|
|
15
|
+
let bundles: ApexBundle[] = [];
|
|
16
16
|
|
|
17
17
|
const directoryContents = fileSystem.readDirectory(rootPath);
|
|
18
18
|
directoryContents.forEach((currentFilePath) => {
|
|
19
19
|
const currentPath = fileSystem.joinPath(rootPath, currentFilePath);
|
|
20
20
|
if (this.readRecursively && fileSystem.isDirectory(currentPath)) {
|
|
21
|
-
|
|
21
|
+
bundles = bundles.concat(this.processFiles(fileSystem, currentPath));
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
if (!this.isApexFile(currentFilePath)) {
|
|
@@ -28,9 +28,9 @@ export class ApexFileReader {
|
|
|
28
28
|
const rawApexFile = fileSystem.readFile(currentPath);
|
|
29
29
|
const metadataPath = fileSystem.joinPath(rootPath, `${currentFilePath}-meta.xml`);
|
|
30
30
|
const rawMetadataFile = fileSystem.exists(metadataPath) ? fileSystem.readFile(metadataPath) : null;
|
|
31
|
-
|
|
31
|
+
bundles.push(new ApexBundle(currentFilePath, rawApexFile, rawMetadataFile));
|
|
32
32
|
});
|
|
33
|
-
return
|
|
33
|
+
return bundles;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
private static isApexFile(currentFile: string): boolean {
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import Manifest from '../model/manifest';
|
|
2
2
|
import { TypeParser } from './parser';
|
|
3
3
|
import { ReflectionResult } from '@cparra/apex-reflection';
|
|
4
|
+
import ApexBundle from '../model/apex-bundle';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Builds a new Manifest object, sourcing its types from the received TypeParser.
|
|
7
8
|
* @param typeParser In charge of returning the list of reflected types.
|
|
8
9
|
* @param reflect Reflection function.
|
|
9
10
|
*/
|
|
10
|
-
export function createManifest(
|
|
11
|
+
export function createManifest(
|
|
12
|
+
typeParser: TypeParser,
|
|
13
|
+
reflect: (apexBundle: ApexBundle) => ReflectionResult,
|
|
14
|
+
): Manifest {
|
|
11
15
|
return new Manifest(typeParser.parse(reflect));
|
|
12
16
|
}
|
package/src/service/parser.ts
CHANGED
|
@@ -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: (
|
|
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: (
|
|
13
|
+
parse(reflect: (apexBundle: ApexBundle) => ReflectionResult): Type[] {
|
|
13
14
|
return this.typeBundles
|
|
14
15
|
.map((currentBundle) => {
|
|
15
|
-
|
|
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);
|
|
@@ -13,8 +13,8 @@ export default class ClassFileGeneratorHelper {
|
|
|
13
13
|
public static getFileLinkByTypeName(typeName: string) {
|
|
14
14
|
const type = TypesRepository.getInstance().getByName(typeName);
|
|
15
15
|
if (!type) {
|
|
16
|
-
// If the type is not found we
|
|
17
|
-
return typeName
|
|
16
|
+
// If the type is not found we return a Markdown hyperlink with whatever we received.
|
|
17
|
+
return `[${typeName}](${typeName})`;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
return this.getFileLink(type);
|
package/src/util/error-logger.ts
CHANGED
|
@@ -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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
}
|
package/src/util/logger.ts
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
29
|
-
|
|
54
|
+
public static clear() {
|
|
55
|
+
logUpdate.clear();
|
|
30
56
|
}
|
|
31
57
|
}
|
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>
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
@IsTest
|
|
2
|
-
/**
|
|
3
|
-
* @Name StripeRESTService
|
|
4
|
-
* @Date 3/2/2022
|
|
5
|
-
* @group Stripe Integration
|
|
6
|
-
* @See StripeRESTServiceTest
|
|
7
|
-
* @Description Apex class that creates and exposes a REST endpoint by the name of 'Stripe'. [ORG_URL]/services/apexrest/Stripe (case sensitive!)
|
|
8
|
-
*/
|
|
9
|
-
private class SampleTestClass {
|
|
10
|
-
|
|
11
|
-
}
|