@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.
Files changed (123) hide show
  1. package/README.md +5 -0
  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 +43 -21
  123. package/CHANGELOG.md +0 -14
@@ -0,0 +1,411 @@
1
+ // ==================================================================
2
+ // #region Constants / DOM lifecycle hooks
3
+ // ==================================================================
4
+
5
+ const
6
+ SCOPES = ['global', 'public', 'private', 'protected', 'testMethod', 'webService'],
7
+ MENU_STATE_KEY = 'APEXDOX_MENU',
8
+ ACTIVE_EL_STATE_KEY = 'APEXDOX_ACTIVE_EL',
9
+ SCOPE_STATE_KEY = 'APEXDOX_SCOPE',
10
+ SEARCH_STATE_KEY = 'APEXDOX_SEARCH_RESULTS';
11
+
12
+ const highlightJsSelectors = [
13
+ 'pre code',
14
+ '.method-annotations',
15
+ '.class-signature',
16
+ '.attribute-signature',
17
+ '.method-signature',
18
+ '.class-annotations',
19
+ '.prop-annotations'
20
+ ];
21
+
22
+ const initializers = [
23
+ initMenu,
24
+ initHighlightJs,
25
+ renderMenuFromState,
26
+ setActiveElement,
27
+ renderSearchFromState,
28
+ readScope,
29
+ hideAllScopes,
30
+ showScopes
31
+ ];
32
+
33
+ const persisters = [
34
+ persistMenuState,
35
+ persistActiveElement,
36
+ persistSearchState
37
+ ];
38
+
39
+ const executeAll = funcs => funcs.forEach(func => func());
40
+
41
+ document.addEventListener('DOMContentLoaded', () => {
42
+ executeAll(initializers);
43
+ });
44
+
45
+ window.onbeforeunload = () => {
46
+ executeAll(persisters);
47
+ }
48
+
49
+ // #endregion
50
+ // ==================================================================
51
+
52
+
53
+ // ==================================================================
54
+ // #region Initialization & Menu Utils, local state
55
+ // ==================================================================
56
+
57
+ function initHighlightJs() {
58
+ // initialize highlighting for code examples and
59
+ // signatures for methods, classes, props and enums
60
+ highlightJsSelectors.forEach(selector => {
61
+ document.querySelectorAll(selector).forEach(block => {
62
+ hljs.highlightElement(block);
63
+ });
64
+ });
65
+ }
66
+
67
+ // create session storage object for menu state
68
+ // and/or update state with any new menu items
69
+ function initMenu() {
70
+ const hasState = sessionStorage.getItem(MENU_STATE_KEY);
71
+ let items = document.querySelectorAll('.group-name');
72
+ let state = !hasState ? {} : JSON.parse(hasState);
73
+
74
+ if (!hasState) {
75
+ // initialize menu state
76
+ console.log('ApexDox: initializing menu state');
77
+ items.forEach(item => state[item.id] = false);
78
+ } else {
79
+ // If already init, add any new class groups since last load.
80
+ // should really only happen when docs are under development
81
+ updateMenuModel(items, state);
82
+ }
83
+
84
+ // finally, update sessionStorage with latest state
85
+ sessionStorage.setItem(MENU_STATE_KEY, JSON.stringify(state));
86
+ }
87
+
88
+ function updateMenuModel(items, state) {
89
+ // 1) get keys currently in state object
90
+ let keys = Object.keys(state);
91
+
92
+ // 2) get ids from each .group-name <details> element
93
+ let groups = Array.prototype.map.call(items, item => ({
94
+ id: item.id,
95
+ isOpen: item.getAttribute('open')
96
+ }));
97
+
98
+ // 3) perform diff to get Ids not yet captured in storage
99
+ let deletedKeys = keys.filter(key =>
100
+ groups.findIndex(group => group.id === key) === -1);
101
+
102
+ let newKeys = groups.filter(item => keys.indexOf(item.id) === -1);
103
+
104
+ // 4) add/delete keys to/from state
105
+ if (deletedKeys.length > 0) {
106
+ deletedKeys.forEach(key => {
107
+ delete state[key];
108
+ });
109
+ console.log('ApexDox: Stale menu keys found, deleting from session storage:');
110
+ console.log(deletedKeys);
111
+ }
112
+
113
+ if (newKeys.length > 0) {
114
+ newKeys.forEach(item => state[item.id] = item.isOpen === '' && true);
115
+ console.log('ApexDox: New menu keys found, adding to session storage:');
116
+ console.log(newKeys.map(function(g) { return g.id }));
117
+ }
118
+ }
119
+
120
+ function renderMenuFromState() {
121
+ let state = JSON.parse(sessionStorage.getItem(MENU_STATE_KEY));
122
+ if (state) {
123
+ for (let group in state) {
124
+ let item = document.getElementById(group);
125
+ if (state[group]) {
126
+ console.log('ApexDox: Opening ' + group + ' section');
127
+ item.setAttribute('open', '');
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ // save menu state before each unload so that state is
134
+ // preserved when changing files or when reloading the page.
135
+ function persistMenuState() {
136
+ let items = document.querySelectorAll('.group-name');
137
+ let state = JSON.parse(sessionStorage.getItem(MENU_STATE_KEY));
138
+
139
+ items.forEach(item => {
140
+ let isOpen = item.getAttribute('open');
141
+ console.log(isOpen);
142
+ state[item.id] = isOpen === '' && true;
143
+ });
144
+
145
+ sessionStorage.setItem(MENU_STATE_KEY, JSON.stringify(state));
146
+ }
147
+
148
+ // preserve active menu item across loads
149
+ function persistActiveElement() {
150
+ let active = document.querySelector('.active');
151
+ if (active) {
152
+ sessionStorage.setItem(ACTIVE_EL_STATE_KEY, active.id);
153
+ } else {
154
+ sessionStorage.removeItem(ACTIVE_EL_STATE_KEY);
155
+ }
156
+ }
157
+
158
+ // set active element from storage
159
+ function setActiveElement() {
160
+ const id = sessionStorage.getItem(ACTIVE_EL_STATE_KEY);
161
+ if (id) {
162
+ var item = document.getElementById(id);
163
+ item.classList.add('active');
164
+ // focus element as well so tab
165
+ // navigation can pick up where it left off
166
+ if (item.firstElementChild && item.firstElementChild.tagName === 'A') {
167
+ item.firstElementChild.focus();
168
+ } else {
169
+ item.focus();
170
+ }
171
+ }
172
+ }
173
+
174
+ // persist any search results across loads
175
+ function persistSearchState() {
176
+ const searchTerm = document.querySelector('#search-input').value;
177
+ const resultsMarkup = document.querySelector('#search-results').innerHTML
178
+
179
+ if (searchTerm.length > 1) {
180
+ const searchState = JSON.stringify({
181
+ searchTerm,
182
+ resultsMarkup
183
+ });
184
+
185
+ sessionStorage.setItem(SEARCH_STATE_KEY, searchState);
186
+ } else {
187
+ sessionStorage.removeItem(SEARCH_STATE_KEY);
188
+ }
189
+ }
190
+
191
+ // preserve active menu item across loads
192
+ function renderSearchFromState() {
193
+ const state = JSON.parse(sessionStorage.getItem(SEARCH_STATE_KEY));
194
+
195
+ if (state) {
196
+ const searchResults = document.querySelector('#search-results');
197
+ const searchInput = document.querySelector('#search-input');
198
+
199
+ searchInput.value = state.searchTerm;
200
+ searchResults.classList.add('visible');
201
+ searchResults.classList.add('no-transition');
202
+ searchResults.innerHTML = state.resultsMarkup;
203
+
204
+ // remove class which prevents transition on page move
205
+ setTimeout(() => searchResults.classList.remove('no-transition'), 100);
206
+ }
207
+ }
208
+
209
+ // #endregion
210
+ // ==================================================================
211
+
212
+
213
+ // ==================================================================
214
+ // #region Scope Utils
215
+ // ==================================================================
216
+
217
+ function getListScope() {
218
+ let list = [];
219
+ let checkboxes = document.querySelectorAll('input[type=checkbox]');
220
+ checkboxes.forEach(checkbox => {
221
+ if (checkbox.checked && checkbox.id !== 'cbx-all') {
222
+ let str = checkbox.id;
223
+ str = str.replace('cbx-', '');
224
+ list.push(str);
225
+ }
226
+ });
227
+ return list;
228
+ }
229
+
230
+ function showScopes() {
231
+ let list = getListScope();
232
+ for (let i = 0; i < list.length; i++) {
233
+ toggleScope(list[i], true);
234
+ }
235
+ }
236
+
237
+ function showAllScopes() {
238
+ for (let i = 0; i < SCOPES.length; i++) {
239
+ toggleScope(SCOPES[i], true);
240
+ }
241
+ }
242
+
243
+ function hideAllScopes() {
244
+ for (let i = 0; i < SCOPES.length; i++) {
245
+ toggleScope(SCOPES[i], false);
246
+ }
247
+ }
248
+
249
+ function setScope() {
250
+ const list = getListScope();
251
+ const scopes = list.join(',');
252
+ sessionStorage.setItem(SCOPE_STATE_KEY, scopes);
253
+ shouldCheckAll(list);
254
+ }
255
+
256
+ function readScope() {
257
+ const strScope = getScope();
258
+ if (strScope != null && strScope != '') {
259
+
260
+ // first clear all the scope checkboxes
261
+ let checkboxes = document.querySelectorAll('input[type=checkbox]');
262
+ checkboxes.forEach(checkbox => checkbox.removeAttribute('checked'));
263
+
264
+ // now check the appropriate scope checkboxes
265
+ let list = strScope.split(',');
266
+ for (let i = 0; i < list.length; i++) {
267
+ let id = 'cbx-' + list[i];
268
+ let checkbox = document.getElementById(id);
269
+ checkbox.setAttribute('checked', true);
270
+ }
271
+
272
+ // check the all box if all scopes have are active
273
+ shouldCheckAll(list);
274
+ } else {
275
+ showAllScopes();
276
+ }
277
+ }
278
+
279
+ function getScope() {
280
+ const scope = sessionStorage.getItem(SCOPE_STATE_KEY);
281
+ return scope ? scope : '';
282
+ }
283
+
284
+ function shouldCheckAll(list) {
285
+ const checkboxes = document.querySelectorAll('input[type=checkbox]');
286
+
287
+ let allBox = document.getElementById('cbx-all');
288
+
289
+ if (checkboxes.length - 1 === list.length) {
290
+ allBox.setAttribute('checked', true);
291
+ } else {
292
+ allBox.removeAttribute('checked');
293
+ }
294
+ }
295
+
296
+ function toggleScope(scope, isShow) {
297
+ setScope();
298
+ toggleTypeScope(scope, '.properties', '.property', isShow);
299
+ toggleTypeScope(scope, '.enums', '.enum', isShow);
300
+ toggleTypeScope(scope, '.methods', '.method', isShow);
301
+ toggleTypeScope(scope, null, '.class', isShow);
302
+ }
303
+
304
+ function toggleTypeScope(scope, tableSelector, itemSelector, isShow) {
305
+ const tables = tableSelector ? document.querySelectorAll(tableSelector) : null;
306
+ const items = document.querySelectorAll(`${itemSelector}.${scope}`);
307
+
308
+ if (isShow === true) {
309
+ if (tables && items.length) { // show tables if they've been hidden
310
+ toggleVisibility(tables, true);
311
+ }
312
+ toggleVisibility(items, true);
313
+ } else {
314
+ toggleVisibility(items, false);
315
+ maybeHideElement(tableSelector, itemSelector); // hide tables if all its rows have been hidden
316
+ }
317
+ }
318
+
319
+ function toggleVisibility(elements, isShow) {
320
+ for (let elem of elements) {
321
+ if (isShow) {
322
+ elem.classList.remove('hide');
323
+ } else {
324
+ elem.classList.add('hide');
325
+ }
326
+ }
327
+ }
328
+
329
+ function maybeHideElement(toHide, itemSelector) {
330
+ let elements, container = document.querySelectorAll(toHide);
331
+ if (elements = document.querySelectorAll(itemSelector)) {
332
+ for (let element of elements) {
333
+ if (!element.classList.contains('hide')) {
334
+ return;
335
+ }
336
+ }
337
+ toggleVisibility(container, false);
338
+ }
339
+ }
340
+
341
+ function toggleActiveClass(elem) {
342
+ // remove isActive from current active element
343
+ let item = document.querySelector('.active');
344
+ item && item.classList.remove('active');
345
+
346
+ // add to new active element
347
+ elem && elem.classList.add('active');
348
+ }
349
+
350
+ // #endregion
351
+ // ==================================================================
352
+
353
+
354
+ // ==================================================================
355
+ // #region Global Functions
356
+ // ==================================================================
357
+
358
+ window.goToLocation = (url) => {
359
+ // prevent collapsing / expanding menu
360
+ // when clicking on Class Group link
361
+ event.preventDefault();
362
+
363
+ // handle menu navigation
364
+ if (event.currentTarget.classList.contains('nav-item')) {
365
+ toggleActiveClass(event.currentTarget);
366
+ } else {
367
+ const target = document.querySelector(`#item-${url.replace('.html', '')}`);
368
+ if (target) {
369
+ toggleActiveClass(target);
370
+ const details = document.querySelectorAll('details');
371
+ const parentDetail = target.parentNode.previousElementSibling.parentNode;
372
+
373
+ // when navigating from search, open target
374
+ // details element and close all the others.
375
+ for (let detail of details) {
376
+ if (detail !== parentDetail) {
377
+ detail.removeAttribute('open');
378
+ } else {
379
+ parentDetail.setAttribute('open', ''); // same as true
380
+ }
381
+ }
382
+ } else {
383
+ toggleActiveClass();
384
+ }
385
+ }
386
+
387
+ document.location.href = url;
388
+ }
389
+
390
+ window.toggleAllScopes = (isShow) => {
391
+ const checkboxes = document.querySelectorAll('input[type=checkbox]');
392
+ // NOTE: for some reason, just checking or un-checking the checkboxes
393
+ // via attribute and then using hideAllScopes or showAllScopes wasn't
394
+ // working as expected, use click() to trigger the onclick funcs instead.
395
+ checkboxes.forEach(checkbox => {
396
+ if (checkbox.id !== 'cbx-all') {
397
+ if (isShow && !checkbox.checked) {
398
+ checkbox.click();
399
+ } else if (!isShow && checkbox.checked) {
400
+ checkbox.click();
401
+ }
402
+ }
403
+ });
404
+ }
405
+
406
+ window.toggleScope = (scope, isShow) => {
407
+ toggleScope(scope, isShow);
408
+ }
409
+
410
+ // #endregion
411
+ // ==================================================================
Binary file