@terafina/tffa-sfdx-plugin 0.1.0 → 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.
Files changed (123) hide show
  1. package/README.md +27 -58
  2. package/assets/favicon.png +0 -0
  3. package/assets/highlight.css +68 -0
  4. package/assets/highlight.js +2801 -0
  5. package/assets/icon.png +0 -0
  6. package/assets/index.css +447 -0
  7. package/assets/index.js +411 -0
  8. package/assets/logo.png +0 -0
  9. package/assets/lunr.js +3471 -0
  10. package/assets/mark.js +13 -0
  11. package/assets/menu.js +34 -0
  12. package/assets/search.js +98 -0
  13. package/lib/apexdoc/common/apex-docs-error.d.ts +23 -0
  14. package/lib/apexdoc/common/apex-docs-error.js +28 -0
  15. package/lib/apexdoc/common/apex-docs-error.js.map +1 -0
  16. package/lib/apexdoc/common/array-utils.d.ts +9 -0
  17. package/lib/apexdoc/common/array-utils.js +36 -0
  18. package/lib/apexdoc/common/array-utils.js.map +1 -0
  19. package/lib/apexdoc/common/line-reader.d.ts +40 -0
  20. package/lib/apexdoc/common/line-reader.js +92 -0
  21. package/lib/apexdoc/common/line-reader.js.map +1 -0
  22. package/lib/apexdoc/common/models/apex-model.d.ts +51 -0
  23. package/lib/apexdoc/common/models/apex-model.js +264 -0
  24. package/lib/apexdoc/common/models/apex-model.js.map +1 -0
  25. package/lib/apexdoc/common/models/class-group.d.ts +10 -0
  26. package/lib/apexdoc/common/models/class-group.js +32 -0
  27. package/lib/apexdoc/common/models/class-group.js.map +1 -0
  28. package/lib/apexdoc/common/models/class-model.d.ts +38 -0
  29. package/lib/apexdoc/common/models/class-model.js +216 -0
  30. package/lib/apexdoc/common/models/class-model.js.map +1 -0
  31. package/lib/apexdoc/common/models/engine-config.d.ts +21 -0
  32. package/lib/apexdoc/common/models/engine-config.js +29 -0
  33. package/lib/apexdoc/common/models/engine-config.js.map +1 -0
  34. package/lib/apexdoc/common/models/enum-model.d.ts +15 -0
  35. package/lib/apexdoc/common/models/enum-model.js +47 -0
  36. package/lib/apexdoc/common/models/enum-model.js.map +1 -0
  37. package/lib/apexdoc/common/models/index.d.ts +10 -0
  38. package/lib/apexdoc/common/models/index.js +14 -0
  39. package/lib/apexdoc/common/models/index.js.map +1 -0
  40. package/lib/apexdoc/common/models/method-model.d.ts +26 -0
  41. package/lib/apexdoc/common/models/method-model.js +309 -0
  42. package/lib/apexdoc/common/models/method-model.js.map +1 -0
  43. package/lib/apexdoc/common/models/property-model.d.ts +12 -0
  44. package/lib/apexdoc/common/models/property-model.js +47 -0
  45. package/lib/apexdoc/common/models/property-model.js.map +1 -0
  46. package/lib/apexdoc/common/models/top-level-model.d.ts +19 -0
  47. package/lib/apexdoc/common/models/top-level-model.js +32 -0
  48. package/lib/apexdoc/common/models/top-level-model.js.map +1 -0
  49. package/lib/apexdoc/common/settings.d.ts +55 -0
  50. package/lib/apexdoc/common/settings.js +124 -0
  51. package/lib/apexdoc/common/settings.js.map +1 -0
  52. package/lib/apexdoc/common/tags.d.ts +22 -0
  53. package/lib/apexdoc/common/tags.js +168 -0
  54. package/lib/apexdoc/common/tags.js.map +1 -0
  55. package/lib/apexdoc/common/utils.d.ts +38 -0
  56. package/lib/apexdoc/common/utils.js +198 -0
  57. package/lib/apexdoc/common/utils.js.map +1 -0
  58. package/lib/apexdoc/common/validator-engine.d.ts +24 -0
  59. package/lib/apexdoc/common/validator-engine.js +162 -0
  60. package/lib/apexdoc/common/validator-engine.js.map +1 -0
  61. package/lib/apexdoc/common/validator.d.ts +16 -0
  62. package/lib/apexdoc/common/validator.js +35 -0
  63. package/lib/apexdoc/common/validator.js.map +1 -0
  64. package/lib/apexdoc/engine/file-manager.d.ts +52 -0
  65. package/lib/apexdoc/engine/file-manager.js +390 -0
  66. package/lib/apexdoc/engine/file-manager.js.map +1 -0
  67. package/lib/apexdoc/engine/generators/generator-utils.d.ts +12 -0
  68. package/lib/apexdoc/engine/generators/generator-utils.js +100 -0
  69. package/lib/apexdoc/engine/generators/generator-utils.js.map +1 -0
  70. package/lib/apexdoc/engine/generators/menu-generator.d.ts +9 -0
  71. package/lib/apexdoc/engine/generators/menu-generator.js +81 -0
  72. package/lib/apexdoc/engine/generators/menu-generator.js.map +1 -0
  73. package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.d.ts +10 -0
  74. package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.js +65 -0
  75. package/lib/apexdoc/engine/generators/models/child-enum-markup-generator.js.map +1 -0
  76. package/lib/apexdoc/engine/generators/models/class-markup-generator.d.ts +8 -0
  77. package/lib/apexdoc/engine/generators/models/class-markup-generator.js +49 -0
  78. package/lib/apexdoc/engine/generators/models/class-markup-generator.js.map +1 -0
  79. package/lib/apexdoc/engine/generators/models/enum-markup-generator.d.ts +9 -0
  80. package/lib/apexdoc/engine/generators/models/enum-markup-generator.js +40 -0
  81. package/lib/apexdoc/engine/generators/models/enum-markup-generator.js.map +1 -0
  82. package/lib/apexdoc/engine/generators/models/markup-generator.d.ts +27 -0
  83. package/lib/apexdoc/engine/generators/models/markup-generator.js +148 -0
  84. package/lib/apexdoc/engine/generators/models/markup-generator.js.map +1 -0
  85. package/lib/apexdoc/engine/generators/models/method-markup-generator.d.ts +22 -0
  86. package/lib/apexdoc/engine/generators/models/method-markup-generator.js +224 -0
  87. package/lib/apexdoc/engine/generators/models/method-markup-generator.js.map +1 -0
  88. package/lib/apexdoc/engine/generators/models/property-markup-generator.d.ts +11 -0
  89. package/lib/apexdoc/engine/generators/models/property-markup-generator.js +66 -0
  90. package/lib/apexdoc/engine/generators/models/property-markup-generator.js.map +1 -0
  91. package/lib/apexdoc/engine/generators/models/source-markup-generator.d.ts +10 -0
  92. package/lib/apexdoc/engine/generators/models/source-markup-generator.js +39 -0
  93. package/lib/apexdoc/engine/generators/models/source-markup-generator.js.map +1 -0
  94. package/lib/apexdoc/engine/generators/models/top-level-markup-generator.d.ts +10 -0
  95. package/lib/apexdoc/engine/generators/models/top-level-markup-generator.js +49 -0
  96. package/lib/apexdoc/engine/generators/models/top-level-markup-generator.js.map +1 -0
  97. package/lib/apexdoc/engine/generators/see-link-generator.d.ts +20 -0
  98. package/lib/apexdoc/engine/generators/see-link-generator.js +183 -0
  99. package/lib/apexdoc/engine/generators/see-link-generator.js.map +1 -0
  100. package/lib/commands/tffa/apexdoc.d.ts +29 -0
  101. package/lib/commands/tffa/apexdoc.js +272 -0
  102. package/lib/commands/tffa/apexdoc.js.map +1 -0
  103. package/lib/commands/tffa/ping.d.ts +3 -0
  104. package/lib/commands/tffa/ping.js +3 -0
  105. package/lib/commands/tffa/ping.js.map +1 -1
  106. package/lib/commands/tffa/scan.d.ts +52 -0
  107. package/lib/commands/tffa/scan.js +362 -0
  108. package/lib/commands/tffa/scan.js.map +1 -0
  109. package/lib/index.d.ts +3 -0
  110. package/lib/index.js +3 -0
  111. package/lib/index.js.map +1 -1
  112. package/lib/shared/model.d.ts +30 -0
  113. package/lib/shared/model.js +17 -0
  114. package/lib/shared/model.js.map +1 -0
  115. package/lib/shared/parser.d.ts +3 -0
  116. package/lib/shared/parser.js +101 -0
  117. package/lib/shared/parser.js.map +1 -0
  118. package/lib/shared/rules.d.ts +3 -0
  119. package/lib/shared/rules.js +5 -0
  120. package/lib/shared/rules.js.map +1 -0
  121. package/oclif.manifest.json +1 -1
  122. package/package.json +47 -25
  123. package/CHANGELOG.md +0 -10
@@ -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,3 +1,6 @@
1
+ /**
2
+ * Copyright (c) NCR Terafina
3
+ **/
1
4
  import { SfdxCommand } from '@salesforce/command';
2
5
  import { AnyJson } from '@salesforce/ts-types';
3
6
  export default class Ping extends SfdxCommand {
@@ -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
+ }