@terafina/tffa-sfdx-plugin 0.1.2 → 1.0.1
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/README.md +5 -0
- package/assets/favicon.png +0 -0
- package/assets/highlight.css +68 -0
- package/assets/highlight.js +2801 -0
- package/assets/icon.png +0 -0
- package/assets/index.css +447 -0
- package/assets/index.js +411 -0
- package/assets/logo.png +0 -0
- package/assets/lunr.js +3471 -0
- package/assets/mark.js +13 -0
- package/assets/menu.js +34 -0
- package/assets/search.js +98 -0
- package/lib/apexdoc/common/apex-docs-error.d.ts +23 -0
- package/lib/apexdoc/common/apex-docs-error.js +28 -0
- package/lib/apexdoc/common/apex-docs-error.js.map +1 -0
- package/lib/apexdoc/common/array-utils.d.ts +9 -0
- package/lib/apexdoc/common/array-utils.js +36 -0
- package/lib/apexdoc/common/array-utils.js.map +1 -0
- package/lib/apexdoc/common/line-reader.d.ts +40 -0
- package/lib/apexdoc/common/line-reader.js +92 -0
- package/lib/apexdoc/common/line-reader.js.map +1 -0
- package/lib/apexdoc/common/models/apex-model.d.ts +51 -0
- package/lib/apexdoc/common/models/apex-model.js +264 -0
- package/lib/apexdoc/common/models/apex-model.js.map +1 -0
- package/lib/apexdoc/common/models/class-group.d.ts +10 -0
- package/lib/apexdoc/common/models/class-group.js +32 -0
- package/lib/apexdoc/common/models/class-group.js.map +1 -0
- package/lib/apexdoc/common/models/class-model.d.ts +38 -0
- package/lib/apexdoc/common/models/class-model.js +216 -0
- package/lib/apexdoc/common/models/class-model.js.map +1 -0
- package/lib/apexdoc/common/models/engine-config.d.ts +21 -0
- package/lib/apexdoc/common/models/engine-config.js +29 -0
- package/lib/apexdoc/common/models/engine-config.js.map +1 -0
- package/lib/apexdoc/common/models/enum-model.d.ts +15 -0
- package/lib/apexdoc/common/models/enum-model.js +47 -0
- package/lib/apexdoc/common/models/enum-model.js.map +1 -0
- package/lib/apexdoc/common/models/index.d.ts +10 -0
- package/lib/apexdoc/common/models/index.js +14 -0
- package/lib/apexdoc/common/models/index.js.map +1 -0
- package/lib/apexdoc/common/models/method-model.d.ts +26 -0
- package/lib/apexdoc/common/models/method-model.js +309 -0
- package/lib/apexdoc/common/models/method-model.js.map +1 -0
- package/lib/apexdoc/common/models/property-model.d.ts +12 -0
- package/lib/apexdoc/common/models/property-model.js +47 -0
- package/lib/apexdoc/common/models/property-model.js.map +1 -0
- package/lib/apexdoc/common/models/top-level-model.d.ts +19 -0
- package/lib/apexdoc/common/models/top-level-model.js +32 -0
- package/lib/apexdoc/common/models/top-level-model.js.map +1 -0
- package/lib/apexdoc/common/settings.d.ts +55 -0
- package/lib/apexdoc/common/settings.js +124 -0
- package/lib/apexdoc/common/settings.js.map +1 -0
- package/lib/apexdoc/common/tags.d.ts +22 -0
- package/lib/apexdoc/common/tags.js +168 -0
- package/lib/apexdoc/common/tags.js.map +1 -0
- package/lib/apexdoc/common/utils.d.ts +38 -0
- package/lib/apexdoc/common/utils.js +198 -0
- package/lib/apexdoc/common/utils.js.map +1 -0
- package/lib/apexdoc/common/validator-engine.d.ts +24 -0
- package/lib/apexdoc/common/validator-engine.js +162 -0
- package/lib/apexdoc/common/validator-engine.js.map +1 -0
- package/lib/apexdoc/common/validator.d.ts +16 -0
- package/lib/apexdoc/common/validator.js +35 -0
- package/lib/apexdoc/common/validator.js.map +1 -0
- package/lib/apexdoc/engine/file-manager.d.ts +52 -0
- package/lib/apexdoc/engine/file-manager.js +390 -0
- package/lib/apexdoc/engine/file-manager.js.map +1 -0
- package/lib/apexdoc/engine/generators/generator-utils.d.ts +12 -0
- package/lib/apexdoc/engine/generators/generator-utils.js +100 -0
- package/lib/apexdoc/engine/generators/generator-utils.js.map +1 -0
- package/lib/apexdoc/engine/generators/menu-generator.d.ts +9 -0
- package/lib/apexdoc/engine/generators/menu-generator.js +81 -0
- package/lib/apexdoc/engine/generators/menu-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.d.ts +10 -0
- package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.js +65 -0
- package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/class-markup-generator.d.ts +8 -0
- package/lib/apexdoc/engine/generators/models/class-markup-generator.js +49 -0
- package/lib/apexdoc/engine/generators/models/class-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/enum-markup-generator.d.ts +9 -0
- package/lib/apexdoc/engine/generators/models/enum-markup-generator.js +40 -0
- package/lib/apexdoc/engine/generators/models/enum-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/markup-generator.d.ts +27 -0
- package/lib/apexdoc/engine/generators/models/markup-generator.js +148 -0
- package/lib/apexdoc/engine/generators/models/markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/method-markup-generator.d.ts +22 -0
- package/lib/apexdoc/engine/generators/models/method-markup-generator.js +224 -0
- package/lib/apexdoc/engine/generators/models/method-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/property-markup-generator.d.ts +11 -0
- package/lib/apexdoc/engine/generators/models/property-markup-generator.js +66 -0
- package/lib/apexdoc/engine/generators/models/property-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/source-markup-generator.d.ts +10 -0
- package/lib/apexdoc/engine/generators/models/source-markup-generator.js +39 -0
- package/lib/apexdoc/engine/generators/models/source-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/models/top-level-markup-generator.d.ts +10 -0
- package/lib/apexdoc/engine/generators/models/top-level-markup-generator.js +49 -0
- package/lib/apexdoc/engine/generators/models/top-level-markup-generator.js.map +1 -0
- package/lib/apexdoc/engine/generators/see-link-generator.d.ts +20 -0
- package/lib/apexdoc/engine/generators/see-link-generator.js +183 -0
- package/lib/apexdoc/engine/generators/see-link-generator.js.map +1 -0
- package/lib/commands/tffa/apexdoc.d.ts +29 -0
- package/lib/commands/tffa/apexdoc.js +272 -0
- package/lib/commands/tffa/apexdoc.js.map +1 -0
- package/lib/commands/tffa/ping.d.ts +3 -0
- package/lib/commands/tffa/ping.js +3 -0
- package/lib/commands/tffa/ping.js.map +1 -1
- package/lib/commands/tffa/scan.d.ts +52 -0
- package/lib/commands/tffa/scan.js +362 -0
- package/lib/commands/tffa/scan.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/shared/model.d.ts +30 -0
- package/lib/shared/model.js +17 -0
- package/lib/shared/model.js.map +1 -0
- package/lib/shared/parser.d.ts +3 -0
- package/lib/shared/parser.js +101 -0
- package/lib/shared/parser.js.map +1 -0
- package/lib/shared/rules.d.ts +3 -0
- package/lib/shared/rules.js +5 -0
- package/lib/shared/rules.js.map +1 -0
- package/oclif.manifest.json +1 -1
- package/package.json +43 -21
- package/CHANGELOG.md +0 -14
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
/**
|
|
5
|
+
* Copyright (c) NCR Terafina
|
|
6
|
+
**/
|
|
7
|
+
const Models = tslib_1.__importStar(require("../../common/models"));
|
|
8
|
+
const apex_docs_error_1 = tslib_1.__importDefault(require("../../common/apex-docs-error"));
|
|
9
|
+
const utils_1 = tslib_1.__importDefault(require("../../common/utils"));
|
|
10
|
+
class SeeLinkGenerator {
|
|
11
|
+
static isMarkdownURL(str) {
|
|
12
|
+
return /^\[.*\]\(.*\)$/.test(str.trim());
|
|
13
|
+
}
|
|
14
|
+
static markdownUrlToLink(str) {
|
|
15
|
+
str = str.trim();
|
|
16
|
+
const linkName = str.substring(1, str.indexOf(']'));
|
|
17
|
+
const url = str.substring(str.indexOf('](') + 2, str.length - 1);
|
|
18
|
+
return utils_1.default.isURL(url)
|
|
19
|
+
? `<a target="_blank" rel="noopener noreferrer" href="${url}">${linkName}</a>`
|
|
20
|
+
: `<span title="URL is invalid!">${linkName}</span>`;
|
|
21
|
+
}
|
|
22
|
+
static makeLinks(models, qualifiers) {
|
|
23
|
+
// initialize list to store created links
|
|
24
|
+
const links = new Array();
|
|
25
|
+
// iterate over each qualifier and process
|
|
26
|
+
// we could just take the users qualifiers and assume its a valid path
|
|
27
|
+
// but this could easily result in dead links. This algorithm doesn't
|
|
28
|
+
// exactly scream efficiency, but its still fast on moderate codebases
|
|
29
|
+
// and its better than the alternative of dead links all over the place.
|
|
30
|
+
for (let qualifier of qualifiers) {
|
|
31
|
+
qualifier = qualifier.trim();
|
|
32
|
+
// 1) continue if empty
|
|
33
|
+
if (!qualifier) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// 2) check if URL, add to links and continue with loop if so
|
|
37
|
+
if (utils_1.default.isURL(qualifier)) {
|
|
38
|
+
links.push(`<a target="_blank" rel="noopener noreferrer" href="${qualifier}">${qualifier}</a>`);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// 3) check if markdown-formatted URL. add to links and continue.
|
|
42
|
+
// markdown parsing function will detect if URL is valid and return
|
|
43
|
+
// a span with tooltip indicating invalid link if not
|
|
44
|
+
if (this.isMarkdownURL(qualifier)) {
|
|
45
|
+
links.push(this.markdownUrlToLink(qualifier));
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// 4) if not URL or empty, must be a qualified class or method name.
|
|
49
|
+
// First prepare the qualifier by stripping away and saving any method
|
|
50
|
+
// overload selector for later. E.g. SomeClass.SomeMethod[4] means: link
|
|
51
|
+
// to the 4th overload (zero-based) of that method. This syntax is only required
|
|
52
|
+
// to specify a method other than the 1st. Otherwise SomeClass.SomeMethod is fine
|
|
53
|
+
let overloadSelector = 0;
|
|
54
|
+
if (/.*\[\d+\]$/.test(qualifier)) {
|
|
55
|
+
const i = qualifier.lastIndexOf('[');
|
|
56
|
+
// isolate the number inside the brackets
|
|
57
|
+
const selector = qualifier.substring(i + 1, qualifier.length - 1);
|
|
58
|
+
overloadSelector = Number(selector);
|
|
59
|
+
// strip away the suffix from the qualifier
|
|
60
|
+
qualifier = qualifier.substring(0, i);
|
|
61
|
+
}
|
|
62
|
+
const parts = qualifier.split('.').map(p => p.toLowerCase());
|
|
63
|
+
if (!parts.length || parts.length > 3) {
|
|
64
|
+
throw new apex_docs_error_1.default(`Qualifier '${qualifier}' is invalid. ${apex_docs_error_1.default.INVALID_SEE_QUALIFIER}`);
|
|
65
|
+
}
|
|
66
|
+
let href = '';
|
|
67
|
+
let foundMatch = false;
|
|
68
|
+
// 4.A) if first qualifier matches class name, begin search: We've
|
|
69
|
+
// made the model map in all lowercase to avoid case mis-matching
|
|
70
|
+
const model = models.get(parts[0]);
|
|
71
|
+
if (model) {
|
|
72
|
+
// if only a single qualifier, stop here
|
|
73
|
+
if (parts.length === 1) {
|
|
74
|
+
href = model.name + '.html';
|
|
75
|
+
qualifier = model.name;
|
|
76
|
+
foundMatch = true;
|
|
77
|
+
}
|
|
78
|
+
// 4.B) otherwise keep searching for a match for the second qualifier as long as
|
|
79
|
+
// model is not an enum model, in which case there is no searching left to do
|
|
80
|
+
else if (parts.length >= 2 && model.modelType !== Models.ModelType.ENUM) {
|
|
81
|
+
const Class = model;
|
|
82
|
+
const methods = Class.methods;
|
|
83
|
+
const childClasses = Class.childClassMap;
|
|
84
|
+
// attempt to match method, and select correct overload if required
|
|
85
|
+
const matchResults = this.methodMatcher(methods, parts[1], overloadSelector);
|
|
86
|
+
if (matchResults.foundMatch) {
|
|
87
|
+
qualifier = `${Class.name}.${matchResults.methodName}`;
|
|
88
|
+
href = `${Class.name}.html#${Class.name}.${matchResults.methodName}`;
|
|
89
|
+
href += matchResults.selector; // append overload selector
|
|
90
|
+
foundMatch = true;
|
|
91
|
+
}
|
|
92
|
+
// 4.C) if after searching methods a match hasn't been found
|
|
93
|
+
// yet see if child class name matches the second qualifier.
|
|
94
|
+
if (!foundMatch) {
|
|
95
|
+
// ApexDox stores child class name as 'OuterClass.InnerClass'
|
|
96
|
+
// recreate that format below to try to make the match with
|
|
97
|
+
const maybeChildClassName = parts[0] + '.' + parts[1];
|
|
98
|
+
const childClass = childClasses.get(maybeChildClassName);
|
|
99
|
+
if (childClass) {
|
|
100
|
+
const [parentClassName, childClassName] = childClass.name.split('.');
|
|
101
|
+
// 4.D) If match, and only 2 parts, stop here.
|
|
102
|
+
if (parts.length === 2) {
|
|
103
|
+
// to ensure the link works, use model names rather than user provided
|
|
104
|
+
// qualifiers in case casing doesn't match. Label will match user's
|
|
105
|
+
// qualifier, but by using model names, we ensure proper casing.
|
|
106
|
+
href = `${parentClassName}.html#${parentClassName}.${childClassName}`;
|
|
107
|
+
qualifier = `${parentClassName}.${childClassName}`;
|
|
108
|
+
foundMatch = true;
|
|
109
|
+
}
|
|
110
|
+
// 4.E) Otherwise, there must be 3 parts
|
|
111
|
+
// attempt to match on child class method.
|
|
112
|
+
else {
|
|
113
|
+
const matchResults = this.methodMatcher(childClass.methods, parts[2], overloadSelector);
|
|
114
|
+
if (matchResults.foundMatch) {
|
|
115
|
+
qualifier = `${childClass.name}.${matchResults.methodName}`;
|
|
116
|
+
href = `${parentClassName}.html#${childClass.name}.${matchResults.methodName}`;
|
|
117
|
+
href += matchResults.selector; // append overload selector
|
|
118
|
+
foundMatch = true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// 5) if match made, create link with goToLocation function onclick
|
|
126
|
+
// Otherwise, add span with Tooltip indicating no link could be made
|
|
127
|
+
let link;
|
|
128
|
+
if (foundMatch) {
|
|
129
|
+
link = `<a href="javascript:void(0)" onclick="goToLocation('${href}')">${qualifier}</a>`;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
link = `<span title="A valid link could not be created with this identifier.">${qualifier}</span>`;
|
|
133
|
+
}
|
|
134
|
+
links.push(link);
|
|
135
|
+
}
|
|
136
|
+
// 6) collect links / spans and return
|
|
137
|
+
return links;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Search through methods for a match to the provided qualifier. If a match is made
|
|
141
|
+
* and an overload selector is provided, continue iterating to see if that overload
|
|
142
|
+
* exists, and match on it if it does. If it does not, report that no match is made.
|
|
143
|
+
*
|
|
144
|
+
* @param methods The methods to search for a match through
|
|
145
|
+
* @param matcher The user provided qualifier to match against a method name
|
|
146
|
+
* @param overloadSelector The user provided indicator of the method overload number
|
|
147
|
+
*/
|
|
148
|
+
static methodMatcher(methods, matcher, overloadSelector) {
|
|
149
|
+
let methodNum = 0;
|
|
150
|
+
let foundMatch = false;
|
|
151
|
+
let selector = '', methodName = '';
|
|
152
|
+
for (const method of methods) {
|
|
153
|
+
if (method.name.toLowerCase() === matcher) {
|
|
154
|
+
methodName = method.name;
|
|
155
|
+
// no overload selector, we've made a match!
|
|
156
|
+
if (overloadSelector === 0) {
|
|
157
|
+
foundMatch = true;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
// If there's an overload suffix to take into account
|
|
161
|
+
// ensure that many overloads of the method actually
|
|
162
|
+
// exist before committing to the method link.
|
|
163
|
+
else if (overloadSelector > 0 && methodNum !== overloadSelector) {
|
|
164
|
+
methodNum++;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
// confirmed overload exists. Match!!
|
|
168
|
+
else if (methodNum === overloadSelector) {
|
|
169
|
+
selector = '_' + overloadSelector;
|
|
170
|
+
foundMatch = true;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
foundMatch,
|
|
177
|
+
methodName,
|
|
178
|
+
selector
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.default = SeeLinkGenerator;
|
|
183
|
+
//# sourceMappingURL=see-link-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"see-link-generator.js","sourceRoot":"","sources":["../../../../src/apexdoc/engine/generators/see-link-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) NCR Terafina
|
|
3
|
+
**/
|
|
4
|
+
import { flags, SfdxCommand } from '@salesforce/command';
|
|
5
|
+
export default class ApexDoc extends SfdxCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
private currentFile;
|
|
9
|
+
protected static flagsConfig: {
|
|
10
|
+
sourcefolder: flags.Discriminated<flags.Option<string>>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Entry point for the program. Called by SFDX on extension activation.
|
|
15
|
+
*
|
|
16
|
+
* @param config The configuration collected from the users config,
|
|
17
|
+
* supplemented with any defaults if user did not include them.
|
|
18
|
+
*/
|
|
19
|
+
private generateDocs;
|
|
20
|
+
private createClassGroupMap;
|
|
21
|
+
/**
|
|
22
|
+
* The main routine for parsing our Apex files. Here we collect ApexDox comments, and create
|
|
23
|
+
* models of our top-level types (Classes and Enums) and their members (Enum values, Methods,
|
|
24
|
+
* Properties, Inner Classes, etc.).
|
|
25
|
+
*
|
|
26
|
+
* @param filePath The path of the file being parsed
|
|
27
|
+
*/
|
|
28
|
+
private parseFileContents;
|
|
29
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) NCR Terafina
|
|
4
|
+
**/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
const command_1 = require("@salesforce/command");
|
|
8
|
+
const Models = tslib_1.__importStar(require("../../apexdoc/common/models"));
|
|
9
|
+
const core_1 = require("@salesforce/core");
|
|
10
|
+
const settings_1 = tslib_1.__importStar(require("../../apexdoc/common/settings"));
|
|
11
|
+
const file_manager_1 = tslib_1.__importDefault(require("../../apexdoc/engine/file-manager"));
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const perf_hooks_1 = require("perf_hooks");
|
|
14
|
+
const line_reader_1 = tslib_1.__importDefault(require("../../apexdoc/common/line-reader"));
|
|
15
|
+
const utils_1 = tslib_1.__importDefault(require("../../apexdoc/common/utils"));
|
|
16
|
+
const array_utils_1 = require("../../apexdoc/common/array-utils");
|
|
17
|
+
class ApexDoc extends command_1.SfdxCommand {
|
|
18
|
+
async run() {
|
|
19
|
+
const project = await core_1.SfdxProject.resolve(this.flags.sourcefolder);
|
|
20
|
+
try {
|
|
21
|
+
settings_1.default.config = settings_1.default.getConfig(settings_1.Feature.ENGINE);
|
|
22
|
+
this.generateDocs(settings_1.default.config);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
console.log(e);
|
|
26
|
+
throw new core_1.SfdxError(e.message, 'XMLNotFoundError');
|
|
27
|
+
}
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Entry point for the program. Called by SFDX on extension activation.
|
|
32
|
+
*
|
|
33
|
+
* @param config The configuration collected from the users config,
|
|
34
|
+
* supplemented with any defaults if user did not include them.
|
|
35
|
+
*/
|
|
36
|
+
generateDocs(config) {
|
|
37
|
+
const beginElapsed = perf_hooks_1.performance.now();
|
|
38
|
+
const fileManager = new file_manager_1.default(config.targetDirectory, config.title, config.assets);
|
|
39
|
+
const files = fileManager.getFiles(config.source, config.includes, config.excludes);
|
|
40
|
+
const models = new Map();
|
|
41
|
+
// track the number of files we've processed
|
|
42
|
+
let numProcessed = 0;
|
|
43
|
+
// parse our top-level class files
|
|
44
|
+
files.forEach(entry => {
|
|
45
|
+
this.currentFile = path_1.basename(entry.path);
|
|
46
|
+
const model = this.parseFileContents(entry.path, entry.sourceUrl);
|
|
47
|
+
if (model) {
|
|
48
|
+
models.set(model.name.toLowerCase(), model);
|
|
49
|
+
numProcessed++;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// load up optional templates and create class groups for menu
|
|
53
|
+
const supplementaryPages = [config.homePagePath, ...config.pages];
|
|
54
|
+
const classGroupMap = this.createClassGroupMap(models);
|
|
55
|
+
// run our documentation engine and create set of HTML files
|
|
56
|
+
fileManager.createDocs(classGroupMap, models, supplementaryPages);
|
|
57
|
+
// we are done!
|
|
58
|
+
const endElapsed = perf_hooks_1.performance.now();
|
|
59
|
+
const elapsed = ((endElapsed - beginElapsed) / 1000).toFixed(2);
|
|
60
|
+
console.info(`Apex API Docs Generation Complete! ${numProcessed} files documented in ${elapsed}s.`);
|
|
61
|
+
}
|
|
62
|
+
createClassGroupMap(models) {
|
|
63
|
+
const classGroupMap = new Map();
|
|
64
|
+
models.forEach(model => {
|
|
65
|
+
// if group name is falsy, default to this misc bucket
|
|
66
|
+
// un-grouped classes will be placed under this menu
|
|
67
|
+
const group = model.groupName || 'Miscellaneous', contentPath = model.groupContentPath;
|
|
68
|
+
let classGroup = classGroupMap.get(group);
|
|
69
|
+
if (!classGroup) {
|
|
70
|
+
classGroup = new Models.ClassGroup(group, contentPath);
|
|
71
|
+
}
|
|
72
|
+
else if (!classGroup.contentSource) {
|
|
73
|
+
classGroup.contentSource = contentPath;
|
|
74
|
+
}
|
|
75
|
+
classGroupMap.set(group, classGroup);
|
|
76
|
+
});
|
|
77
|
+
return classGroupMap;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The main routine for parsing our Apex files. Here we collect ApexDox comments, and create
|
|
81
|
+
* models of our top-level types (Classes and Enums) and their members (Enum values, Methods,
|
|
82
|
+
* Properties, Inner Classes, etc.).
|
|
83
|
+
*
|
|
84
|
+
* @param filePath The path of the file being parsed
|
|
85
|
+
*/
|
|
86
|
+
parseFileContents(filePath, sourceUrl) {
|
|
87
|
+
const reader = new line_reader_1.default(filePath);
|
|
88
|
+
const cModels = new Array();
|
|
89
|
+
let line;
|
|
90
|
+
let comments = new Array();
|
|
91
|
+
let lineNum = 0, nestedCurlyBraceDepth = 0;
|
|
92
|
+
let commentsStarted = false, docBlockStarted = false;
|
|
93
|
+
let cModel, cModelParent;
|
|
94
|
+
if (filePath.endsWith('.cls')) {
|
|
95
|
+
// if (filePath.includes('ReferralRESTService')) {
|
|
96
|
+
// console.log(filePath);
|
|
97
|
+
// }
|
|
98
|
+
while ((line = reader.readLine()) !== null) {
|
|
99
|
+
line = line.trim();
|
|
100
|
+
lineNum++;
|
|
101
|
+
// skip empty lines
|
|
102
|
+
if (!line.trim()) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// ignore anything after // style comments. this allows hiding
|
|
106
|
+
// of tags from ApexDox. However, don't ignore when line
|
|
107
|
+
// doesn't start with //, we want to preserve comments within
|
|
108
|
+
// @example code examples
|
|
109
|
+
let offset = line.indexOf('//');
|
|
110
|
+
if (offset === 0) {
|
|
111
|
+
line = line.substring(0, offset);
|
|
112
|
+
if (!line.trim()) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// gather up our comments
|
|
117
|
+
if (line.startsWith('/*')) {
|
|
118
|
+
commentsStarted = true;
|
|
119
|
+
let commentEnded = false;
|
|
120
|
+
if (line.startsWith(settings_1.default.COMMENT_OPEN)) {
|
|
121
|
+
if (line.endsWith(settings_1.default.COMMENT_CLOSE)) {
|
|
122
|
+
line = line.replace(settings_1.default.COMMENT_CLOSE, settings_1.default.DOC_BLOCK_BREAK);
|
|
123
|
+
commentEnded = true;
|
|
124
|
+
}
|
|
125
|
+
comments.push(line);
|
|
126
|
+
docBlockStarted = true;
|
|
127
|
+
}
|
|
128
|
+
if (line.endsWith(settings_1.default.COMMENT_CLOSE) || commentEnded) {
|
|
129
|
+
commentsStarted = false;
|
|
130
|
+
docBlockStarted = false;
|
|
131
|
+
}
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (commentsStarted && line.endsWith(settings_1.default.COMMENT_CLOSE)) {
|
|
135
|
+
line = line.replace(settings_1.default.COMMENT_CLOSE, settings_1.default.DOC_BLOCK_BREAK);
|
|
136
|
+
if (docBlockStarted) {
|
|
137
|
+
comments.push(line);
|
|
138
|
+
docBlockStarted = false;
|
|
139
|
+
}
|
|
140
|
+
commentsStarted = false;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (commentsStarted) {
|
|
144
|
+
if (docBlockStarted) {
|
|
145
|
+
comments.push(line);
|
|
146
|
+
}
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// keep track of our nesting so we know which class we are in
|
|
150
|
+
const openCurlies = utils_1.default.countChars(line, '{');
|
|
151
|
+
const closeCurlies = utils_1.default.countChars(line, '}');
|
|
152
|
+
nestedCurlyBraceDepth += openCurlies;
|
|
153
|
+
nestedCurlyBraceDepth -= closeCurlies;
|
|
154
|
+
// if we are in a nested class, and we just got back to nesting level 1,
|
|
155
|
+
// then we are done with the nested class, and should set its props and methods.
|
|
156
|
+
if (nestedCurlyBraceDepth === 1 && openCurlies !== closeCurlies && cModels.length > 1 && cModel) {
|
|
157
|
+
cModels.pop();
|
|
158
|
+
cModel = array_utils_1.last(cModels);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
// ignore anything after an =. this avoids confusing properties with methods.
|
|
162
|
+
offset = line.indexOf('=');
|
|
163
|
+
if (offset > -1) {
|
|
164
|
+
line = line.substring(0, offset);
|
|
165
|
+
}
|
|
166
|
+
// ignore anything after an '{' (if we're not dealing with an enum)
|
|
167
|
+
// this avoids confusing properties with methods.
|
|
168
|
+
offset = !utils_1.default.isEnum(line) ? line.indexOf('{') : -1;
|
|
169
|
+
if (offset > -1) {
|
|
170
|
+
line = line.substring(0, offset);
|
|
171
|
+
}
|
|
172
|
+
// skip lines not dealing with scope that are not inner
|
|
173
|
+
// classes, interface methods, or (assumed to be) @isTest
|
|
174
|
+
if (utils_1.default.shouldSkipLine(line, cModel)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// look for a class.
|
|
178
|
+
if (utils_1.default.isClassOrInterface(line)) {
|
|
179
|
+
// create the new class
|
|
180
|
+
const cModelNew = new Models.ClassModel(cModelParent, comments, line, lineNum, sourceUrl);
|
|
181
|
+
cModelNew.setSource(reader.toContent());
|
|
182
|
+
cModelNew.parseAnnotations(line, reader.peekPrevLine());
|
|
183
|
+
comments = [];
|
|
184
|
+
// keep track of the new class, as long as it wasn't a single liner {}
|
|
185
|
+
// but handle not having any curlies on the class line!
|
|
186
|
+
if (openCurlies === 0 || openCurlies !== closeCurlies) {
|
|
187
|
+
cModels.push(cModelNew);
|
|
188
|
+
cModel = cModelNew;
|
|
189
|
+
}
|
|
190
|
+
// add it to its parent (or track the parent)
|
|
191
|
+
if (cModelParent) {
|
|
192
|
+
cModelParent.addChildClass(cModelNew);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
cModelParent = cModelNew;
|
|
196
|
+
}
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
// look for an enum
|
|
200
|
+
if (utils_1.default.isEnum(line)) {
|
|
201
|
+
const startingLine = lineNum;
|
|
202
|
+
// handle enums over multiple lines
|
|
203
|
+
while (!line.includes('}')) {
|
|
204
|
+
line += reader.readLine();
|
|
205
|
+
lineNum++;
|
|
206
|
+
}
|
|
207
|
+
const eModel = new Models.EnumModel(comments, line, startingLine, sourceUrl);
|
|
208
|
+
eModel.parseAnnotations(line, reader.peekPrevLine());
|
|
209
|
+
// if no class models have been created, and we see an
|
|
210
|
+
// enum, we must be dealing with a class level enum and
|
|
211
|
+
// should return early, otherwise we're dealing with
|
|
212
|
+
// an inner enum and should add to our class model.
|
|
213
|
+
if (!cModel && cModels.length === 0) {
|
|
214
|
+
return eModel;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
cModel && cModel.enums.push(eModel);
|
|
218
|
+
comments = [];
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// look for a method
|
|
223
|
+
if (line.includes('(')) {
|
|
224
|
+
const startingLine = lineNum;
|
|
225
|
+
// handle methods over multiple lines.
|
|
226
|
+
while (!line.includes(')')) {
|
|
227
|
+
line += reader.readLine();
|
|
228
|
+
lineNum++;
|
|
229
|
+
}
|
|
230
|
+
const className = cModel ? cModel.name : '';
|
|
231
|
+
const mModel = new Models.MethodModel(comments, line, startingLine, className, sourceUrl);
|
|
232
|
+
mModel.parseAnnotations(line, reader.peekPrevLine());
|
|
233
|
+
cModel && cModel.methods.push(mModel);
|
|
234
|
+
comments = [];
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
// must be a property
|
|
238
|
+
const pModel = new Models.PropertyModel(comments, line, lineNum, sourceUrl);
|
|
239
|
+
pModel.parseAnnotations(line, reader.peekPrevLine());
|
|
240
|
+
cModel && cModel.properties.push(pModel);
|
|
241
|
+
comments = [];
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else if (filePath.endsWith('.page') || filePath.endsWith('.component')) {
|
|
246
|
+
let name = filePath.split(/.*[/|\\]/)[1];
|
|
247
|
+
name = name.split('.')[0];
|
|
248
|
+
comments.push('/**');
|
|
249
|
+
comments.push('*');
|
|
250
|
+
comments.push('* @group Pages');
|
|
251
|
+
comments.push('@@BREAK@@');
|
|
252
|
+
lineNum = 1;
|
|
253
|
+
line = 'global class ' + name;
|
|
254
|
+
const cModelNew = new Models.ClassModel(cModelParent, comments, line, lineNum, sourceUrl);
|
|
255
|
+
cModelNew.setSource(reader.toContent());
|
|
256
|
+
cModelNew.parseAnnotations(line, reader.peekPrevLine());
|
|
257
|
+
cModelParent = cModelNew;
|
|
258
|
+
}
|
|
259
|
+
return cModelParent;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.default = ApexDoc;
|
|
263
|
+
ApexDoc.description = 'Generate Apex API Documentation';
|
|
264
|
+
ApexDoc.examples = [`Generate Apex API Documentation :\t$sfdx tffa:apexdoc `];
|
|
265
|
+
ApexDoc.flagsConfig = {
|
|
266
|
+
sourcefolder: command_1.flags.directory({
|
|
267
|
+
char: 'd',
|
|
268
|
+
description: 'directory containing package metadata',
|
|
269
|
+
default: '.'
|
|
270
|
+
})
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=apexdoc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apexdoc.js","sourceRoot":"","sources":["../../../src/commands/tffa/apexdoc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) NCR Terafina
|
|
5
|
+
**/
|
|
3
6
|
const command_1 = require("@salesforce/command");
|
|
4
7
|
const core_1 = require("@salesforce/core");
|
|
5
8
|
// Initialize Messages with the current plugin directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../../../src/commands/tffa/ping.ts"],"names":[],"mappings":";;AAAA,iDAAkD;AAClD,2CAA4C;AAG5C,wDAAwD;AACxD,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAE5C,iGAAiG;AACjG,mFAAmF;AACnF,MAAM,QAAQ,GAAG,eAAQ,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;AAE7E,MAAqB,IAAK,SAAQ,qBAAW;IASpC,KAAK,CAAC,GAAG;QACd,MAAM,YAAY,GAAG,MAAM,CAAC;QAE5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,+CAA+C;QAC/C,OAAO,EAAE,YAAY,EAAE,CAAC;IAC1B,CAAC;;AAhBH,uBAiBC;AAhBe,gBAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAExD,aAAQ,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEjC,SAAI,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvB,gBAAW,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../../../src/commands/tffa/ping.ts"],"names":[],"mappings":";;AAAA;;IAEI;AACJ,iDAAkD;AAClD,2CAA4C;AAG5C,wDAAwD;AACxD,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAE5C,iGAAiG;AACjG,mFAAmF;AACnF,MAAM,QAAQ,GAAG,eAAQ,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;AAE7E,MAAqB,IAAK,SAAQ,qBAAW;IASpC,KAAK,CAAC,GAAG;QACd,MAAM,YAAY,GAAG,MAAM,CAAC;QAE5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,+CAA+C;QAC/C,OAAO,EAAE,YAAY,EAAE,CAAC;IAC1B,CAAC;;AAhBH,uBAiBC;AAhBe,gBAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAExD,aAAQ,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEjC,SAAI,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAEvB,gBAAW,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) NCR Terafina
|
|
3
|
+
**/
|
|
4
|
+
import { flags, SfdxCommand } from '@salesforce/command';
|
|
5
|
+
export default class Scan extends SfdxCommand {
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
minapi: number;
|
|
9
|
+
dir: string;
|
|
10
|
+
allowedListEnd: string[];
|
|
11
|
+
allowedISVTEViolations: string[];
|
|
12
|
+
classFiles: any[];
|
|
13
|
+
violations: any[];
|
|
14
|
+
allowedListStart: string[];
|
|
15
|
+
ignoreFiles: string[];
|
|
16
|
+
ignoreCZFiles: any[];
|
|
17
|
+
protected static flagsConfig: {
|
|
18
|
+
sourcefolder: flags.Discriminated<flags.Option<string>>;
|
|
19
|
+
mdoutfolder: flags.Discriminated<flags.Option<string>>;
|
|
20
|
+
format: flags.Discriminated<flags.Option<string>>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<any>;
|
|
23
|
+
/**
|
|
24
|
+
* test file names as per conventions
|
|
25
|
+
*/
|
|
26
|
+
private checkFileNameConvention;
|
|
27
|
+
/**
|
|
28
|
+
* test class files for filter
|
|
29
|
+
* @param {*} keywords
|
|
30
|
+
* @param {*} hint
|
|
31
|
+
*/
|
|
32
|
+
private checkClassesForKeywords;
|
|
33
|
+
/**
|
|
34
|
+
* Using recursion, we find every file with the desired extention, even if its deeply nested in subfolders.
|
|
35
|
+
* @param {*} dir
|
|
36
|
+
* @param {*} ext
|
|
37
|
+
*/
|
|
38
|
+
private getFilesInDirectory;
|
|
39
|
+
/**
|
|
40
|
+
* scan json files
|
|
41
|
+
*/
|
|
42
|
+
private scanJSONFiles;
|
|
43
|
+
/**
|
|
44
|
+
* scan ISVTE plugin for quality rules
|
|
45
|
+
* @param {} convertedPath
|
|
46
|
+
*/
|
|
47
|
+
private scanISVTEQuality;
|
|
48
|
+
/**
|
|
49
|
+
* print output
|
|
50
|
+
*/
|
|
51
|
+
private printViolations;
|
|
52
|
+
}
|