@cparra/apexdocs 3.0.0-alpha.8 → 3.0.0-beta.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/dist/cli/generate.js +430 -288
- package/examples/open-api/config/project-scratch-def.json +13 -0
- package/examples/open-api/docs/openapi.json +582 -0
- package/examples/{force-app → open-api/force-app}/main/default/classes/SampleClass.cls +1 -0
- package/examples/open-api/package-lock.json +724 -0
- package/examples/open-api/package.json +20 -0
- package/examples/open-api/sfdx-project.json +12 -0
- package/package.json +2 -2
- package/src/application/Apexdocs.ts +39 -7
- package/src/application/__tests__/apex-file-reader.spec.ts +0 -17
- package/src/application/file-writer.ts +37 -15
- package/src/application/generators/markdown.ts +10 -39
- package/src/application/generators/openapi.ts +22 -6
- package/src/cli/args.ts +4 -1
- package/src/cli/commands/openapi.ts +36 -0
- package/src/core/markdown/adapters/documentables.ts +0 -1
- package/src/core/markdown/generate-docs.ts +8 -12
- package/src/core/markdown/reflection/reflect-source.ts +109 -31
- package/src/core/openApiSettings.ts +41 -0
- package/src/core/openapi/__tests__/open-api-docs-processor.spec.ts +2 -2
- package/src/core/openapi/open-api-docs-processor.ts +8 -4
- package/src/core/openapi/open-api.ts +5 -1
- package/src/core/openapi/openapi-type-file.ts +1 -1
- package/src/core/openapi/parser.ts +1 -15
- package/src/core/openapi/transpiler.ts +0 -5
- package/src/core/parse-apex-metadata.ts +21 -5
- package/src/core/shared/types.d.ts +4 -1
- package/src/test-helpers/SettingsBuilder.ts +2 -6
- package/dist/defaults-DUwru49Q.js +0 -12
- package/dist/defaults-SH0Rsi5E.js +0 -11
- package/dist/defaults-jLXD2y8-.js +0 -13
- package/examples/force-app/main/default/classes/AnotherInterface.cls +0 -16
- package/examples/force-app/main/default/classes/EscapedAnnotations.cls +0 -5
- package/examples/force-app/main/default/classes/GrandparentClass.cls +0 -5
- package/examples/force-app/main/default/classes/GroupedClass.cls +0 -8
- package/examples/force-app/main/default/classes/InterfaceWithInheritance.cls +0 -1
- package/examples/force-app/main/default/classes/MemberGrouping.cls +0 -17
- package/examples/force-app/main/default/classes/ParentClass.cls +0 -16
- package/examples/force-app/main/default/classes/SampleClass.cls-meta.xml +0 -5
- package/examples/force-app/main/default/classes/SampleClassWithoutModifier.cls +0 -9
- package/examples/force-app/main/default/classes/SampleInterface.cls +0 -16
- package/src/core/markdown/reflection/error-handling.ts +0 -37
- package/src/core/settings.ts +0 -56
- /package/examples/{force-app → open-api/force-app}/main/default/classes/ChildClass.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResource.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResourceToSkip.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResourceWithInnerClass.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResourceWithoutApexDocs.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference1.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference2.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference3.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference4.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference5.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference6.cls +0 -0
- /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference7.cls +0 -0
package/dist/cli/generate.js
CHANGED
|
@@ -2,16 +2,19 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var _function = require('fp-ts/function');
|
|
5
|
-
var E = require('fp-ts/Either');
|
|
6
5
|
var TE = require('fp-ts/TaskEither');
|
|
7
6
|
var yaml = require('js-yaml');
|
|
8
7
|
var path = require('path');
|
|
8
|
+
var E = require('fp-ts/Either');
|
|
9
|
+
var T = require('fp-ts/Task');
|
|
10
|
+
var A = require('fp-ts/lib/Array');
|
|
9
11
|
var apexReflection = require('@cparra/apex-reflection');
|
|
10
12
|
var O = require('fp-ts/Option');
|
|
11
13
|
var fastXmlParser = require('fast-xml-parser');
|
|
12
14
|
var Handlebars = require('handlebars');
|
|
13
15
|
var defaults = require('../defaults-DGKfeZq-.js');
|
|
14
16
|
var fs = require('fs');
|
|
17
|
+
var TE$1 = require('fp-ts/lib/TaskEither');
|
|
15
18
|
var chalk = require('chalk');
|
|
16
19
|
var cosmiconfig = require('cosmiconfig');
|
|
17
20
|
var yargs = require('yargs');
|
|
@@ -34,12 +37,15 @@ function _interopNamespaceDefault(e) {
|
|
|
34
37
|
return Object.freeze(n);
|
|
35
38
|
}
|
|
36
39
|
|
|
37
|
-
var E__namespace = /*#__PURE__*/_interopNamespaceDefault(E);
|
|
38
40
|
var TE__namespace = /*#__PURE__*/_interopNamespaceDefault(TE);
|
|
39
41
|
var yaml__namespace = /*#__PURE__*/_interopNamespaceDefault(yaml);
|
|
40
42
|
var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
|
|
43
|
+
var E__namespace = /*#__PURE__*/_interopNamespaceDefault(E);
|
|
44
|
+
var T__namespace = /*#__PURE__*/_interopNamespaceDefault(T);
|
|
45
|
+
var A__namespace = /*#__PURE__*/_interopNamespaceDefault(A);
|
|
41
46
|
var O__namespace = /*#__PURE__*/_interopNamespaceDefault(O);
|
|
42
47
|
var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
|
|
48
|
+
var TE__namespace$1 = /*#__PURE__*/_interopNamespaceDefault(TE$1);
|
|
43
49
|
var yargs__namespace = /*#__PURE__*/_interopNamespaceDefault(yargs);
|
|
44
50
|
|
|
45
51
|
function apply(fn, ...front) {
|
|
@@ -145,25 +151,25 @@ function isInlineCode(content) {
|
|
|
145
151
|
return Object.keys(content).includes("__type") && content.__type === "inline-code";
|
|
146
152
|
}
|
|
147
153
|
|
|
148
|
-
var __defProp$
|
|
149
|
-
var __defProps$
|
|
150
|
-
var __getOwnPropDescs$
|
|
151
|
-
var __getOwnPropSymbols$
|
|
152
|
-
var __hasOwnProp$
|
|
153
|
-
var __propIsEnum$
|
|
154
|
-
var __defNormalProp$
|
|
155
|
-
var __spreadValues$
|
|
154
|
+
var __defProp$g = Object.defineProperty;
|
|
155
|
+
var __defProps$g = Object.defineProperties;
|
|
156
|
+
var __getOwnPropDescs$g = Object.getOwnPropertyDescriptors;
|
|
157
|
+
var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
|
|
158
|
+
var __hasOwnProp$g = Object.prototype.hasOwnProperty;
|
|
159
|
+
var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
|
|
160
|
+
var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
161
|
+
var __spreadValues$g = (a, b) => {
|
|
156
162
|
for (var prop in b || (b = {}))
|
|
157
|
-
if (__hasOwnProp$
|
|
158
|
-
__defNormalProp$
|
|
159
|
-
if (__getOwnPropSymbols$
|
|
160
|
-
for (var prop of __getOwnPropSymbols$
|
|
161
|
-
if (__propIsEnum$
|
|
162
|
-
__defNormalProp$
|
|
163
|
+
if (__hasOwnProp$g.call(b, prop))
|
|
164
|
+
__defNormalProp$g(a, prop, b[prop]);
|
|
165
|
+
if (__getOwnPropSymbols$g)
|
|
166
|
+
for (var prop of __getOwnPropSymbols$g(b)) {
|
|
167
|
+
if (__propIsEnum$g.call(b, prop))
|
|
168
|
+
__defNormalProp$g(a, prop, b[prop]);
|
|
163
169
|
}
|
|
164
170
|
return a;
|
|
165
171
|
};
|
|
166
|
-
var __spreadProps$
|
|
172
|
+
var __spreadProps$g = (a, b) => __defProps$g(a, __getOwnPropDescs$g(b));
|
|
167
173
|
function adaptDescribable(describable, linkGenerator) {
|
|
168
174
|
return {
|
|
169
175
|
description: describableToRenderableContent(describable, linkGenerator)
|
|
@@ -215,7 +221,7 @@ function adaptDocumentable(documentable, linkGenerator, subHeadingLevel) {
|
|
|
215
221
|
function extractCustomTags(type) {
|
|
216
222
|
var _a2, _b2;
|
|
217
223
|
const baseTags = ["description", "group", "author", "date", "see", "example", "throws", "exception"];
|
|
218
|
-
return (_b2 = (_a2 = type.docComment) == null ? void 0 : _a2.annotations.filter((currentAnnotation) => !baseTags.includes(currentAnnotation.name.toLowerCase())).map((currentAnnotation) => __spreadProps$
|
|
224
|
+
return (_b2 = (_a2 = type.docComment) == null ? void 0 : _a2.annotations.filter((currentAnnotation) => !baseTags.includes(currentAnnotation.name.toLowerCase())).map((currentAnnotation) => __spreadProps$g(__spreadValues$g({}, adaptDescribable(currentAnnotation.bodyLines, linkGenerator)), {
|
|
219
225
|
name: currentAnnotation.name
|
|
220
226
|
}))) != null ? _b2 : [];
|
|
221
227
|
}
|
|
@@ -229,7 +235,7 @@ function adaptDocumentable(documentable, linkGenerator, subHeadingLevel) {
|
|
|
229
235
|
var _a2, _b2;
|
|
230
236
|
return (_b2 = (_a2 = type.docComment) == null ? void 0 : _a2.annotations.filter((currentAnnotation) => currentAnnotation.name.toLowerCase() === "see").map((currentAnnotation) => currentAnnotation.body)) != null ? _b2 : [];
|
|
231
237
|
}
|
|
232
|
-
return __spreadProps$
|
|
238
|
+
return __spreadProps$g(__spreadValues$g({}, adaptDescribable((_a = documentable.docComment) == null ? void 0 : _a.descriptionLines, linkGenerator)), {
|
|
233
239
|
annotations: documentable.annotations.map((annotation) => annotation.type.toUpperCase()),
|
|
234
240
|
customTags: extractCustomTags(documentable),
|
|
235
241
|
example: {
|
|
@@ -244,25 +250,25 @@ function adaptDocumentable(documentable, linkGenerator, subHeadingLevel) {
|
|
|
244
250
|
});
|
|
245
251
|
}
|
|
246
252
|
|
|
247
|
-
var __defProp$
|
|
248
|
-
var __defProps$
|
|
249
|
-
var __getOwnPropDescs$
|
|
250
|
-
var __getOwnPropSymbols$
|
|
251
|
-
var __hasOwnProp$
|
|
252
|
-
var __propIsEnum$
|
|
253
|
-
var __defNormalProp$
|
|
254
|
-
var __spreadValues$
|
|
253
|
+
var __defProp$f = Object.defineProperty;
|
|
254
|
+
var __defProps$f = Object.defineProperties;
|
|
255
|
+
var __getOwnPropDescs$f = Object.getOwnPropertyDescriptors;
|
|
256
|
+
var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
|
|
257
|
+
var __hasOwnProp$f = Object.prototype.hasOwnProperty;
|
|
258
|
+
var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
|
|
259
|
+
var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
260
|
+
var __spreadValues$f = (a, b) => {
|
|
255
261
|
for (var prop in b || (b = {}))
|
|
256
|
-
if (__hasOwnProp$
|
|
257
|
-
__defNormalProp$
|
|
258
|
-
if (__getOwnPropSymbols$
|
|
259
|
-
for (var prop of __getOwnPropSymbols$
|
|
260
|
-
if (__propIsEnum$
|
|
261
|
-
__defNormalProp$
|
|
262
|
+
if (__hasOwnProp$f.call(b, prop))
|
|
263
|
+
__defNormalProp$f(a, prop, b[prop]);
|
|
264
|
+
if (__getOwnPropSymbols$f)
|
|
265
|
+
for (var prop of __getOwnPropSymbols$f(b)) {
|
|
266
|
+
if (__propIsEnum$f.call(b, prop))
|
|
267
|
+
__defNormalProp$f(a, prop, b[prop]);
|
|
262
268
|
}
|
|
263
269
|
return a;
|
|
264
270
|
};
|
|
265
|
-
var __spreadProps$
|
|
271
|
+
var __spreadProps$f = (a, b) => __defProps$f(a, __getOwnPropDescs$f(b));
|
|
266
272
|
function adaptMethod(method, linkGenerator, baseHeadingLevel) {
|
|
267
273
|
var _a, _b, _c;
|
|
268
274
|
function buildTitle(method2) {
|
|
@@ -292,7 +298,7 @@ function adaptMethod(method, linkGenerator, baseHeadingLevel) {
|
|
|
292
298
|
returnType: {
|
|
293
299
|
headingLevel: baseHeadingLevel + 1,
|
|
294
300
|
heading: "Return Type",
|
|
295
|
-
value: __spreadProps$
|
|
301
|
+
value: __spreadProps$f(__spreadValues$f({}, adaptDescribable((_b = (_a = method.docComment) == null ? void 0 : _a.returnAnnotation) == null ? void 0 : _b.bodyLines, linkGenerator)), {
|
|
296
302
|
type: linkGenerator(method.typeReference.rawDeclaration)
|
|
297
303
|
})
|
|
298
304
|
},
|
|
@@ -351,13 +357,13 @@ function mapParameters(documentable, param, linkGenerator) {
|
|
|
351
357
|
const paramAnnotation = (_a = documentable.docComment) == null ? void 0 : _a.paramAnnotations.find(
|
|
352
358
|
(pa) => pa.paramName.toLowerCase() === param.name.toLowerCase()
|
|
353
359
|
);
|
|
354
|
-
return __spreadProps$
|
|
360
|
+
return __spreadProps$f(__spreadValues$f({}, adaptDescribable(paramAnnotation == null ? void 0 : paramAnnotation.bodyLines, linkGenerator)), {
|
|
355
361
|
name: param.name,
|
|
356
362
|
type: linkGenerator(param.typeReference.rawDeclaration)
|
|
357
363
|
});
|
|
358
364
|
}
|
|
359
365
|
function mapThrows(thrown, linkGenerator) {
|
|
360
|
-
return __spreadProps$
|
|
366
|
+
return __spreadProps$f(__spreadValues$f({}, adaptDescribable(thrown.bodyLines, linkGenerator)), {
|
|
361
367
|
type: linkGenerator(thrown.exceptionName)
|
|
362
368
|
});
|
|
363
369
|
}
|
|
@@ -392,25 +398,25 @@ function adaptFieldOrProperty(field, linkGenerator, baseHeadingLevel) {
|
|
|
392
398
|
};
|
|
393
399
|
}
|
|
394
400
|
|
|
395
|
-
var __defProp$
|
|
396
|
-
var __defProps$
|
|
397
|
-
var __getOwnPropDescs$
|
|
398
|
-
var __getOwnPropSymbols$
|
|
399
|
-
var __hasOwnProp$
|
|
400
|
-
var __propIsEnum$
|
|
401
|
-
var __defNormalProp$
|
|
402
|
-
var __spreadValues$
|
|
401
|
+
var __defProp$e = Object.defineProperty;
|
|
402
|
+
var __defProps$e = Object.defineProperties;
|
|
403
|
+
var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
|
|
404
|
+
var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
|
|
405
|
+
var __hasOwnProp$e = Object.prototype.hasOwnProperty;
|
|
406
|
+
var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
|
|
407
|
+
var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
408
|
+
var __spreadValues$e = (a, b) => {
|
|
403
409
|
for (var prop in b || (b = {}))
|
|
404
|
-
if (__hasOwnProp$
|
|
405
|
-
__defNormalProp$
|
|
406
|
-
if (__getOwnPropSymbols$
|
|
407
|
-
for (var prop of __getOwnPropSymbols$
|
|
408
|
-
if (__propIsEnum$
|
|
409
|
-
__defNormalProp$
|
|
410
|
+
if (__hasOwnProp$e.call(b, prop))
|
|
411
|
+
__defNormalProp$e(a, prop, b[prop]);
|
|
412
|
+
if (__getOwnPropSymbols$e)
|
|
413
|
+
for (var prop of __getOwnPropSymbols$e(b)) {
|
|
414
|
+
if (__propIsEnum$e.call(b, prop))
|
|
415
|
+
__defNormalProp$e(a, prop, b[prop]);
|
|
410
416
|
}
|
|
411
417
|
return a;
|
|
412
418
|
};
|
|
413
|
-
var __spreadProps$
|
|
419
|
+
var __spreadProps$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
|
|
414
420
|
function typeToRenderable(parsedFile, linkGenerator, config) {
|
|
415
421
|
function getRenderable() {
|
|
416
422
|
const { type } = parsedFile;
|
|
@@ -423,7 +429,7 @@ function typeToRenderable(parsedFile, linkGenerator, config) {
|
|
|
423
429
|
return classTypeToClassSource(type, linkGenerator);
|
|
424
430
|
}
|
|
425
431
|
}
|
|
426
|
-
return __spreadProps$
|
|
432
|
+
return __spreadProps$e(__spreadValues$e({}, getRenderable()), {
|
|
427
433
|
filePath: parsedFile.source.filePath,
|
|
428
434
|
namespace: config.namespace
|
|
429
435
|
});
|
|
@@ -448,7 +454,7 @@ function baseTypeAdapter(type, linkGenerator, baseHeadingLevel) {
|
|
|
448
454
|
};
|
|
449
455
|
}
|
|
450
456
|
function enumTypeToEnumSource(enumType, linkGenerator, baseHeadingLevel = 1) {
|
|
451
|
-
return __spreadProps$
|
|
457
|
+
return __spreadProps$e(__spreadValues$e({
|
|
452
458
|
type: "enum"
|
|
453
459
|
}, baseTypeAdapter(enumType, linkGenerator, baseHeadingLevel)), {
|
|
454
460
|
values: {
|
|
@@ -456,7 +462,7 @@ function enumTypeToEnumSource(enumType, linkGenerator, baseHeadingLevel = 1) {
|
|
|
456
462
|
heading: "Values",
|
|
457
463
|
value: enumType.values.map((value) => {
|
|
458
464
|
var _a;
|
|
459
|
-
return __spreadProps$
|
|
465
|
+
return __spreadProps$e(__spreadValues$e({}, adaptDescribable((_a = value.docComment) == null ? void 0 : _a.descriptionLines, linkGenerator)), {
|
|
460
466
|
value: value.name
|
|
461
467
|
});
|
|
462
468
|
})
|
|
@@ -464,7 +470,7 @@ function enumTypeToEnumSource(enumType, linkGenerator, baseHeadingLevel = 1) {
|
|
|
464
470
|
});
|
|
465
471
|
}
|
|
466
472
|
function interfaceTypeToInterfaceSource(interfaceType, linkGenerator, baseHeadingLevel = 1) {
|
|
467
|
-
return __spreadProps$
|
|
473
|
+
return __spreadProps$e(__spreadValues$e({
|
|
468
474
|
type: "interface"
|
|
469
475
|
}, baseTypeAdapter(interfaceType, linkGenerator, baseHeadingLevel)), {
|
|
470
476
|
extends: interfaceType.extended_interfaces.map(linkGenerator),
|
|
@@ -476,7 +482,7 @@ function interfaceTypeToInterfaceSource(interfaceType, linkGenerator, baseHeadin
|
|
|
476
482
|
});
|
|
477
483
|
}
|
|
478
484
|
function classTypeToClassSource(classType, linkGenerator, baseHeadingLevel = 1) {
|
|
479
|
-
return __spreadProps$
|
|
485
|
+
return __spreadProps$e(__spreadValues$e({
|
|
480
486
|
type: "class"
|
|
481
487
|
}, baseTypeAdapter(classType, linkGenerator, baseHeadingLevel)), {
|
|
482
488
|
classModifier: classType.classModifier,
|
|
@@ -509,7 +515,7 @@ function classTypeToClassSource(classType, linkGenerator, baseHeadingLevel = 1)
|
|
|
509
515
|
headingLevel: baseHeadingLevel + 1,
|
|
510
516
|
heading: "Classes",
|
|
511
517
|
value: classType.classes.map(
|
|
512
|
-
(innerClass) => classTypeToClassSource(__spreadProps$
|
|
518
|
+
(innerClass) => classTypeToClassSource(__spreadProps$e(__spreadValues$e({}, innerClass), { inheritanceChain: [] }), linkGenerator, baseHeadingLevel + 2)
|
|
513
519
|
)
|
|
514
520
|
},
|
|
515
521
|
innerEnums: {
|
|
@@ -661,16 +667,59 @@ function getTypeGroup$1(type, config) {
|
|
|
661
667
|
}
|
|
662
668
|
|
|
663
669
|
function parseApexMetadata(input) {
|
|
664
|
-
|
|
670
|
+
return _function.pipe(input, parse, E__namespace.map(toMap));
|
|
671
|
+
}
|
|
672
|
+
function parse(input) {
|
|
673
|
+
return E__namespace.tryCatch(() => new fastXmlParser.XMLParser().parse(input), E__namespace.toError);
|
|
674
|
+
}
|
|
675
|
+
function toMap(metadata) {
|
|
665
676
|
const map = /* @__PURE__ */ new Map();
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
map.set("status", xml.ApexClass.status);
|
|
677
|
+
map.set("apiVersion", String(metadata.ApexClass.apiVersion));
|
|
678
|
+
if (metadata.ApexClass.status) {
|
|
679
|
+
map.set("status", String(metadata.ApexClass.status));
|
|
670
680
|
}
|
|
671
681
|
return map;
|
|
672
682
|
}
|
|
673
683
|
|
|
684
|
+
var __defProp$d = Object.defineProperty;
|
|
685
|
+
var __defProps$d = Object.defineProperties;
|
|
686
|
+
var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
|
|
687
|
+
var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
|
|
688
|
+
var __hasOwnProp$d = Object.prototype.hasOwnProperty;
|
|
689
|
+
var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
|
|
690
|
+
var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
691
|
+
var __spreadValues$d = (a, b) => {
|
|
692
|
+
for (var prop in b || (b = {}))
|
|
693
|
+
if (__hasOwnProp$d.call(b, prop))
|
|
694
|
+
__defNormalProp$d(a, prop, b[prop]);
|
|
695
|
+
if (__getOwnPropSymbols$d)
|
|
696
|
+
for (var prop of __getOwnPropSymbols$d(b)) {
|
|
697
|
+
if (__propIsEnum$d.call(b, prop))
|
|
698
|
+
__defNormalProp$d(a, prop, b[prop]);
|
|
699
|
+
}
|
|
700
|
+
return a;
|
|
701
|
+
};
|
|
702
|
+
var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
|
|
703
|
+
var __async$6 = (__this, __arguments, generator) => {
|
|
704
|
+
return new Promise((resolve, reject) => {
|
|
705
|
+
var fulfilled = (value) => {
|
|
706
|
+
try {
|
|
707
|
+
step(generator.next(value));
|
|
708
|
+
} catch (e) {
|
|
709
|
+
reject(e);
|
|
710
|
+
}
|
|
711
|
+
};
|
|
712
|
+
var rejected = (value) => {
|
|
713
|
+
try {
|
|
714
|
+
step(generator.throw(value));
|
|
715
|
+
} catch (e) {
|
|
716
|
+
reject(e);
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
720
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
721
|
+
});
|
|
722
|
+
};
|
|
674
723
|
class ReflectionErrors {
|
|
675
724
|
constructor(errors) {
|
|
676
725
|
this.errors = errors;
|
|
@@ -683,59 +732,88 @@ class ReflectionError {
|
|
|
683
732
|
this.message = message;
|
|
684
733
|
}
|
|
685
734
|
}
|
|
686
|
-
function
|
|
687
|
-
function
|
|
688
|
-
return
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
return
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
735
|
+
function reflectAsync(rawSource) {
|
|
736
|
+
return __async$6(this, null, function* () {
|
|
737
|
+
return new Promise((resolve, reject) => {
|
|
738
|
+
const result = apexReflection.reflect(rawSource);
|
|
739
|
+
if (result.typeMirror) {
|
|
740
|
+
return resolve(result.typeMirror);
|
|
741
|
+
} else if (result.error) {
|
|
742
|
+
return reject(result.error);
|
|
743
|
+
} else {
|
|
744
|
+
return reject(new Error("Unknown error"));
|
|
696
745
|
}
|
|
697
|
-
);
|
|
698
|
-
}
|
|
699
|
-
return _function.pipe(
|
|
700
|
-
reflectionResult,
|
|
701
|
-
reduceReflectionResultIntoSingleEither,
|
|
702
|
-
({ errors, parsedFiles }) => errors.length ? E__namespace.left(new ReflectionErrors(errors)) : E__namespace.right(parsedFiles)
|
|
703
|
-
);
|
|
746
|
+
});
|
|
747
|
+
});
|
|
704
748
|
}
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
749
|
+
function reflectBundles(apexBundles) {
|
|
750
|
+
const semiGroupReflectionError = {
|
|
751
|
+
concat: (x, y) => new ReflectionErrors([...x.errors, ...y.errors])
|
|
752
|
+
};
|
|
753
|
+
const Ap = TE__namespace.getApplicativeTaskValidation(T__namespace.ApplyPar, semiGroupReflectionError);
|
|
754
|
+
return _function.pipe(apexBundles, A__namespace.traverse(Ap)(reflectBundle));
|
|
755
|
+
}
|
|
756
|
+
function reflectBundle(apexBundle) {
|
|
757
|
+
const convertToParsedFile = apply(toParsedFile, apexBundle.filePath);
|
|
758
|
+
const withMetadata = apply(addMetadata, apexBundle.metadataContent);
|
|
759
|
+
return _function.pipe(apexBundle, reflectAsTask, TE__namespace.map(convertToParsedFile), TE__namespace.flatMap(withMetadata));
|
|
760
|
+
}
|
|
761
|
+
function reflectAsTask(apexBundle) {
|
|
762
|
+
return TE__namespace.tryCatch(
|
|
763
|
+
() => reflectAsync(apexBundle.content),
|
|
764
|
+
(error) => new ReflectionErrors([new ReflectionError(apexBundle.filePath, error.message)])
|
|
765
|
+
);
|
|
708
766
|
}
|
|
709
|
-
function
|
|
710
|
-
|
|
711
|
-
const result = apexReflection.reflect(input);
|
|
712
|
-
return result.error ? E__namespace.left(new ReflectionError(filePath, result.error.message)) : E__namespace.right({
|
|
767
|
+
function toParsedFile(filePath, typeMirror) {
|
|
768
|
+
return {
|
|
713
769
|
source: {
|
|
714
770
|
filePath,
|
|
715
|
-
name:
|
|
716
|
-
type:
|
|
771
|
+
name: typeMirror.name,
|
|
772
|
+
type: typeMirror.type_name
|
|
717
773
|
},
|
|
718
|
-
type:
|
|
719
|
-
}
|
|
774
|
+
type: typeMirror
|
|
775
|
+
};
|
|
776
|
+
}
|
|
777
|
+
function addMetadata(rawMetadataContent, parsedFile) {
|
|
778
|
+
return TE__namespace.fromEither(
|
|
779
|
+
_function.pipe(
|
|
780
|
+
parsedFile.type,
|
|
781
|
+
(type) => addFileMetadataToTypeAnnotation(type, rawMetadataContent),
|
|
782
|
+
E__namespace.map((type) => __spreadProps$d(__spreadValues$d({}, parsedFile), { type })),
|
|
783
|
+
E__namespace.mapLeft((error) => errorToReflectionErrors(error, parsedFile.source.filePath))
|
|
784
|
+
)
|
|
785
|
+
);
|
|
786
|
+
}
|
|
787
|
+
function errorToReflectionErrors(error, filePath) {
|
|
788
|
+
return new ReflectionErrors([new ReflectionError(filePath, error.message)]);
|
|
720
789
|
}
|
|
721
790
|
function addFileMetadataToTypeAnnotation(type, metadata) {
|
|
791
|
+
const concatAnnotationToType = apply(concatAnnotations, type);
|
|
722
792
|
return _function.pipe(
|
|
723
793
|
O__namespace.fromNullable(metadata),
|
|
724
|
-
O__namespace.map(
|
|
725
|
-
|
|
726
|
-
metadataParams.forEach((value, key) => {
|
|
727
|
-
const declaration = `${key}: ${value}`;
|
|
728
|
-
type.annotations.push({
|
|
729
|
-
rawDeclaration: declaration,
|
|
730
|
-
name: declaration,
|
|
731
|
-
type: declaration
|
|
732
|
-
});
|
|
733
|
-
});
|
|
734
|
-
return type;
|
|
735
|
-
}),
|
|
736
|
-
O__namespace.getOrElse(() => type)
|
|
794
|
+
O__namespace.map(concatAnnotationToType),
|
|
795
|
+
O__namespace.getOrElse(() => E__namespace.right(type))
|
|
737
796
|
);
|
|
738
797
|
}
|
|
798
|
+
function concatAnnotations(type, metadataInput) {
|
|
799
|
+
return _function.pipe(
|
|
800
|
+
metadataInput,
|
|
801
|
+
parseApexMetadata,
|
|
802
|
+
E__namespace.map((metadataMap) => __spreadProps$d(__spreadValues$d({}, type), {
|
|
803
|
+
annotations: [...type.annotations, ...mapToAnnotations(metadataMap)]
|
|
804
|
+
}))
|
|
805
|
+
);
|
|
806
|
+
}
|
|
807
|
+
function mapToAnnotations(metadata) {
|
|
808
|
+
return Array.from(metadata.entries()).map(([key, value]) => {
|
|
809
|
+
const declaration = `${key}: ${value}`;
|
|
810
|
+
return {
|
|
811
|
+
name: declaration,
|
|
812
|
+
type: declaration,
|
|
813
|
+
rawDeclaration: declaration
|
|
814
|
+
};
|
|
815
|
+
});
|
|
816
|
+
}
|
|
739
817
|
|
|
740
818
|
function createInheritanceChain(repository, classMirror) {
|
|
741
819
|
return _function.pipe(
|
|
@@ -1525,7 +1603,7 @@ var __spreadValues$7 = (a, b) => {
|
|
|
1525
1603
|
return a;
|
|
1526
1604
|
};
|
|
1527
1605
|
var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
|
|
1528
|
-
var __async$
|
|
1606
|
+
var __async$5 = (__this, __arguments, generator) => {
|
|
1529
1607
|
return new Promise((resolve, reject) => {
|
|
1530
1608
|
var fulfilled = (value) => {
|
|
1531
1609
|
try {
|
|
@@ -1559,15 +1637,13 @@ function generateDocs(apexBundles, config) {
|
|
|
1559
1637
|
const sortTypeMembers = apply(sortMembers, config.sortMembersAlphabetically);
|
|
1560
1638
|
return _function.pipe(
|
|
1561
1639
|
apexBundles,
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
E__namespace.bind("references", ({ parsedFiles }) => E__namespace.right(convertToReferences(parsedFiles))),
|
|
1570
|
-
TE__namespace.fromEither,
|
|
1640
|
+
reflectBundles,
|
|
1641
|
+
TE__namespace.map(filterOutOfScope),
|
|
1642
|
+
TE__namespace.map(addInheritedMembersToTypes),
|
|
1643
|
+
TE__namespace.map(addInheritanceChainToTypes),
|
|
1644
|
+
TE__namespace.map(sortTypeMembers),
|
|
1645
|
+
TE__namespace.bindTo("parsedFiles"),
|
|
1646
|
+
TE__namespace.bind("references", ({ parsedFiles }) => TE__namespace.right(convertToReferences(parsedFiles))),
|
|
1571
1647
|
TE__namespace.flatMap(({ parsedFiles, references }) => transformReferenceHook(config)({ references, parsedFiles })),
|
|
1572
1648
|
TE__namespace.map(({ parsedFiles, references }) => convertToRenderableBundle(parsedFiles, references)),
|
|
1573
1649
|
TE__namespace.map(convertToDocumentationBundleForTemplate),
|
|
@@ -1577,7 +1653,7 @@ function generateDocs(apexBundles, config) {
|
|
|
1577
1653
|
}
|
|
1578
1654
|
function transformReferenceHook(config) {
|
|
1579
1655
|
function _execute(references, parsedFiles, transformReference) {
|
|
1580
|
-
return __async$
|
|
1656
|
+
return __async$5(this, null, function* () {
|
|
1581
1657
|
return {
|
|
1582
1658
|
references: yield execTransformReferenceHook(Object.values(references), transformReference),
|
|
1583
1659
|
parsedFiles
|
|
@@ -1598,8 +1674,8 @@ function transformDocumentationBundleHook(config) {
|
|
|
1598
1674
|
function passThroughHook(value) {
|
|
1599
1675
|
return value;
|
|
1600
1676
|
}
|
|
1601
|
-
const execTransformReferenceHook = (_0, ..._1) => __async$
|
|
1602
|
-
const hooked = references.map((reference) => __async$
|
|
1677
|
+
const execTransformReferenceHook = (_0, ..._1) => __async$5(void 0, [_0, ..._1], function* (references, hook = passThroughHook) {
|
|
1678
|
+
const hooked = references.map((reference) => __async$5(void 0, null, function* () {
|
|
1603
1679
|
const hookedResult = yield hook(reference);
|
|
1604
1680
|
return __spreadValues$7(__spreadValues$7({}, reference), hookedResult);
|
|
1605
1681
|
}));
|
|
@@ -1609,24 +1685,24 @@ const execTransformReferenceHook = (_0, ..._1) => __async$4(void 0, [_0, ..._1],
|
|
|
1609
1685
|
return acc;
|
|
1610
1686
|
}, {});
|
|
1611
1687
|
});
|
|
1612
|
-
const documentationBundleHook = (bundle, config) => __async$
|
|
1688
|
+
const documentationBundleHook = (bundle, config) => __async$5(void 0, null, function* () {
|
|
1613
1689
|
return {
|
|
1614
1690
|
referenceGuide: yield transformReferenceGuide(bundle.referenceGuide, config.transformReferenceGuide),
|
|
1615
1691
|
docs: yield transformDocs(bundle.docs, config.transformDocs, config.transformDocPage)
|
|
1616
1692
|
};
|
|
1617
1693
|
});
|
|
1618
|
-
const transformReferenceGuide = (_0, ..._1) => __async$
|
|
1694
|
+
const transformReferenceGuide = (_0, ..._1) => __async$5(void 0, [_0, ..._1], function* (referenceGuide, hook = passThroughHook) {
|
|
1619
1695
|
const result = yield hook(referenceGuide);
|
|
1620
1696
|
if (isSkip(result)) {
|
|
1621
1697
|
return result;
|
|
1622
1698
|
}
|
|
1623
1699
|
return __spreadValues$7(__spreadValues$7({}, referenceGuide), yield hook(referenceGuide));
|
|
1624
1700
|
});
|
|
1625
|
-
const transformDocs = (_0, ..._1) => __async$
|
|
1701
|
+
const transformDocs = (_0, ..._1) => __async$5(void 0, [_0, ..._1], function* (docs, transformDocsHook = passThroughHook, transformDocPageHook = passThroughHook) {
|
|
1626
1702
|
const transformed = yield transformDocsHook(docs);
|
|
1627
1703
|
return Promise.all(transformed.map((doc) => transformDocPage(doc, transformDocPageHook)));
|
|
1628
1704
|
});
|
|
1629
|
-
const transformDocPage = (_0, ..._1) => __async$
|
|
1705
|
+
const transformDocPage = (_0, ..._1) => __async$5(void 0, [_0, ..._1], function* (doc, hook = passThroughHook) {
|
|
1630
1706
|
return __spreadValues$7(__spreadValues$7({}, doc), yield hook(doc));
|
|
1631
1707
|
});
|
|
1632
1708
|
function postHookCompile(bundle) {
|
|
@@ -1664,6 +1740,21 @@ ${yamlString}---
|
|
|
1664
1740
|
`;
|
|
1665
1741
|
}
|
|
1666
1742
|
|
|
1743
|
+
const referenceGuideTemplate = `
|
|
1744
|
+
# Apex Reference Guide
|
|
1745
|
+
|
|
1746
|
+
{{#each this}}
|
|
1747
|
+
## {{@key}}
|
|
1748
|
+
|
|
1749
|
+
{{#each this}}
|
|
1750
|
+
### {{link title}}
|
|
1751
|
+
|
|
1752
|
+
{{{renderContent description}}}
|
|
1753
|
+
|
|
1754
|
+
{{/each}}
|
|
1755
|
+
{{/each}}
|
|
1756
|
+
`.trim();
|
|
1757
|
+
|
|
1667
1758
|
var __defProp$6 = Object.defineProperty;
|
|
1668
1759
|
var __defProps$6 = Object.defineProperties;
|
|
1669
1760
|
var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
|
|
@@ -1683,73 +1774,30 @@ var __spreadValues$6 = (a, b) => {
|
|
|
1683
1774
|
return a;
|
|
1684
1775
|
};
|
|
1685
1776
|
var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
});
|
|
1694
|
-
}
|
|
1695
|
-
static getTargetLocation(file, outputDir) {
|
|
1696
|
-
return __spreadProps$6(__spreadValues$6({}, file), {
|
|
1697
|
-
outputDocPath: path__namespace.join(outputDir, file.outputDocPath)
|
|
1698
|
-
});
|
|
1699
|
-
}
|
|
1777
|
+
const mkdir = TE__namespace$1.taskify(fs__namespace.mkdir);
|
|
1778
|
+
const writeFile = TE__namespace$1.taskify(fs__namespace.writeFile);
|
|
1779
|
+
function writeFiles(files, outputDir, onWriteCallback) {
|
|
1780
|
+
return _function.pipe(
|
|
1781
|
+
files,
|
|
1782
|
+
TE__namespace$1.traverseArray((file) => writeSingle(file, outputDir, onWriteCallback))
|
|
1783
|
+
);
|
|
1700
1784
|
}
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
}
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
* @param message The error message to log.
|
|
1717
|
-
* @param args Optional arguments.
|
|
1718
|
-
*/
|
|
1719
|
-
static error(message, ...args) {
|
|
1720
|
-
this.logSingle(message, "red");
|
|
1721
|
-
args.forEach(() => {
|
|
1722
|
-
this.logSingle(message, "red");
|
|
1723
|
-
});
|
|
1724
|
-
}
|
|
1725
|
-
static logSingle(text, color = "green") {
|
|
1726
|
-
if (this.currentFrame > 9) {
|
|
1727
|
-
this.currentFrame = 0;
|
|
1728
|
-
}
|
|
1729
|
-
const logMessage = `${this.getChalkFn(color)((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
|
|
1730
|
-
`;
|
|
1731
|
-
process.stdout.write(logMessage);
|
|
1732
|
-
}
|
|
1733
|
-
static getChalkFn(color) {
|
|
1734
|
-
return color === "green" ? chalk.green : chalk.red;
|
|
1735
|
-
}
|
|
1785
|
+
function writeSingle(file, outputDir, onWriteCallback) {
|
|
1786
|
+
const ensureDirectoryExists = ({ outputDocPath }) => mkdir(path__namespace.dirname(outputDocPath), { recursive: true });
|
|
1787
|
+
const writeContents = (file2) => writeFile(file2.outputDocPath, file2.content, "utf8");
|
|
1788
|
+
return _function.pipe(
|
|
1789
|
+
resolveTargetLocation(file, outputDir),
|
|
1790
|
+
(file2) => TE__namespace$1.right(file2),
|
|
1791
|
+
TE__namespace$1.tapIO(ensureDirectoryExists),
|
|
1792
|
+
TE__namespace$1.flatMap(writeContents),
|
|
1793
|
+
TE__namespace$1.map(() => onWriteCallback == null ? void 0 : onWriteCallback(file))
|
|
1794
|
+
);
|
|
1795
|
+
}
|
|
1796
|
+
function resolveTargetLocation(file, outputDir) {
|
|
1797
|
+
return __spreadProps$6(__spreadValues$6({}, file), {
|
|
1798
|
+
outputDocPath: path__namespace.join(outputDir, file.outputDocPath)
|
|
1799
|
+
});
|
|
1736
1800
|
}
|
|
1737
|
-
Logger.currentFrame = 0;
|
|
1738
|
-
|
|
1739
|
-
const referenceGuideTemplate = `
|
|
1740
|
-
# Apex Reference Guide
|
|
1741
|
-
|
|
1742
|
-
{{#each this}}
|
|
1743
|
-
## {{@key}}
|
|
1744
|
-
|
|
1745
|
-
{{#each this}}
|
|
1746
|
-
### {{link title}}
|
|
1747
|
-
|
|
1748
|
-
{{{renderContent description}}}
|
|
1749
|
-
|
|
1750
|
-
{{/each}}
|
|
1751
|
-
{{/each}}
|
|
1752
|
-
`.trim();
|
|
1753
1801
|
|
|
1754
1802
|
var __defProp$5 = Object.defineProperty;
|
|
1755
1803
|
var __defProps$5 = Object.defineProperties;
|
|
@@ -1780,25 +1828,8 @@ class FileWritingError {
|
|
|
1780
1828
|
function generate(bundles, config) {
|
|
1781
1829
|
return _function.pipe(
|
|
1782
1830
|
generateDocumentationBundle(bundles, config),
|
|
1783
|
-
TE__namespace.flatMap((files) => writeFilesToSystem(files, config.targetDir))
|
|
1784
|
-
|
|
1785
|
-
if (error._tag === "HookError") {
|
|
1786
|
-
Logger.error("Error(s) occurred while processing hooks. Please review the following issues:");
|
|
1787
|
-
Logger.error(error.error);
|
|
1788
|
-
return;
|
|
1789
|
-
}
|
|
1790
|
-
if (error._tag === "FileWritingError") {
|
|
1791
|
-
Logger.error(error.message);
|
|
1792
|
-
Logger.error(error.error);
|
|
1793
|
-
return;
|
|
1794
|
-
}
|
|
1795
|
-
const errorMessages = [
|
|
1796
|
-
"Error(s) occurred while parsing files. Please review the following issues:",
|
|
1797
|
-
...error.errors.map(formatReflectionError)
|
|
1798
|
-
].join("\n");
|
|
1799
|
-
Logger.error(errorMessages);
|
|
1800
|
-
})
|
|
1801
|
-
)();
|
|
1831
|
+
TE__namespace.flatMap((files) => writeFilesToSystem(files, config.targetDir))
|
|
1832
|
+
);
|
|
1802
1833
|
}
|
|
1803
1834
|
function generateDocumentationBundle(bundles, config) {
|
|
1804
1835
|
return generateDocs(bundles, __spreadProps$5(__spreadValues$5({}, config), {
|
|
@@ -1806,26 +1837,56 @@ function generateDocumentationBundle(bundles, config) {
|
|
|
1806
1837
|
}));
|
|
1807
1838
|
}
|
|
1808
1839
|
function writeFilesToSystem(files, outputDir) {
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
return TE__namespace.left(new FileWritingError("An error occurred while writing files to the system.", error));
|
|
1817
|
-
}
|
|
1818
|
-
}
|
|
1819
|
-
function formatReflectionError(error) {
|
|
1820
|
-
return `Source file: ${error.file}
|
|
1821
|
-
${error.message}
|
|
1822
|
-
`;
|
|
1840
|
+
return _function.pipe(
|
|
1841
|
+
[files.referenceGuide, ...files.docs].filter((file) => !isSkip(file)),
|
|
1842
|
+
(files2) => writeFiles(files2, outputDir),
|
|
1843
|
+
TE__namespace.mapLeft((error) => {
|
|
1844
|
+
return new FileWritingError("An error occurred while writing files to the system.", error);
|
|
1845
|
+
})
|
|
1846
|
+
);
|
|
1823
1847
|
}
|
|
1824
1848
|
|
|
1825
1849
|
function createManifest(typeParser, reflect) {
|
|
1826
1850
|
return new Manifest(typeParser.parse(reflect));
|
|
1827
1851
|
}
|
|
1828
1852
|
|
|
1853
|
+
class Logger {
|
|
1854
|
+
/**
|
|
1855
|
+
* Logs a message with optional arguments.
|
|
1856
|
+
* @param message The message to log.
|
|
1857
|
+
* @param args Optional arguments.
|
|
1858
|
+
*/
|
|
1859
|
+
static log(message, ...args) {
|
|
1860
|
+
this.logSingle(message);
|
|
1861
|
+
args.forEach((arg) => {
|
|
1862
|
+
this.logSingle(arg);
|
|
1863
|
+
});
|
|
1864
|
+
}
|
|
1865
|
+
/**
|
|
1866
|
+
* Logs an error message with optional arguments.
|
|
1867
|
+
* @param message The error message to log.
|
|
1868
|
+
* @param args Optional arguments.
|
|
1869
|
+
*/
|
|
1870
|
+
static error(message, ...args) {
|
|
1871
|
+
this.logSingle(message, "red");
|
|
1872
|
+
args.forEach(() => {
|
|
1873
|
+
this.logSingle(message, "red");
|
|
1874
|
+
});
|
|
1875
|
+
}
|
|
1876
|
+
static logSingle(text, color = "green") {
|
|
1877
|
+
if (this.currentFrame > 9) {
|
|
1878
|
+
this.currentFrame = 0;
|
|
1879
|
+
}
|
|
1880
|
+
const logMessage = `${this.getChalkFn(color)((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
|
|
1881
|
+
`;
|
|
1882
|
+
process.stdout.write(logMessage);
|
|
1883
|
+
}
|
|
1884
|
+
static getChalkFn(color) {
|
|
1885
|
+
return color === "green" ? chalk.green : chalk.red;
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
Logger.currentFrame = 0;
|
|
1889
|
+
|
|
1829
1890
|
var __defProp$4 = Object.defineProperty;
|
|
1830
1891
|
var __defProps$4 = Object.defineProperties;
|
|
1831
1892
|
var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
|
|
@@ -1852,20 +1913,7 @@ class RawBodyParser {
|
|
|
1852
1913
|
parse(reflect) {
|
|
1853
1914
|
const types = this.typeBundles.map((currentBundle) => {
|
|
1854
1915
|
Logger.log(`Parsing file: ${currentBundle.filePath}`);
|
|
1855
|
-
|
|
1856
|
-
if (!!result.typeMirror && !!currentBundle.metadataContent) {
|
|
1857
|
-
const metadataParams = parseApexMetadata(currentBundle.metadataContent);
|
|
1858
|
-
metadataParams.forEach((value, key) => {
|
|
1859
|
-
var _a;
|
|
1860
|
-
const declaration = `${key}: ${value}`;
|
|
1861
|
-
(_a = result.typeMirror) == null ? void 0 : _a.annotations.push({
|
|
1862
|
-
rawDeclaration: declaration,
|
|
1863
|
-
name: declaration,
|
|
1864
|
-
type: declaration
|
|
1865
|
-
});
|
|
1866
|
-
});
|
|
1867
|
-
}
|
|
1868
|
-
return result;
|
|
1916
|
+
return reflect(currentBundle);
|
|
1869
1917
|
}).filter((reflectionResult) => {
|
|
1870
1918
|
return reflectionResult.typeMirror;
|
|
1871
1919
|
}).map((reflectionResult) => reflectionResult.typeMirror);
|
|
@@ -2003,39 +2051,6 @@ class TypesRepository {
|
|
|
2003
2051
|
}
|
|
2004
2052
|
}
|
|
2005
2053
|
|
|
2006
|
-
class Settings {
|
|
2007
|
-
constructor(config) {
|
|
2008
|
-
this.config = config;
|
|
2009
|
-
}
|
|
2010
|
-
static build(config) {
|
|
2011
|
-
Settings.instance = new Settings(config);
|
|
2012
|
-
}
|
|
2013
|
-
static getInstance() {
|
|
2014
|
-
if (!Settings.instance) {
|
|
2015
|
-
throw new Error("Settings has not been initialized");
|
|
2016
|
-
}
|
|
2017
|
-
return Settings.instance;
|
|
2018
|
-
}
|
|
2019
|
-
get scope() {
|
|
2020
|
-
return this.config.scope;
|
|
2021
|
-
}
|
|
2022
|
-
get targetGenerator() {
|
|
2023
|
-
return this.config.targetGenerator;
|
|
2024
|
-
}
|
|
2025
|
-
get indexOnly() {
|
|
2026
|
-
return this.config.indexOnly;
|
|
2027
|
-
}
|
|
2028
|
-
getOpenApiTitle() {
|
|
2029
|
-
return this.config.openApiTitle;
|
|
2030
|
-
}
|
|
2031
|
-
getNamespace() {
|
|
2032
|
-
return this.config.namespace;
|
|
2033
|
-
}
|
|
2034
|
-
openApiFileName() {
|
|
2035
|
-
return this.config.openApiFileName;
|
|
2036
|
-
}
|
|
2037
|
-
}
|
|
2038
|
-
|
|
2039
2054
|
class Transpiler {
|
|
2040
2055
|
static generate(types, processor) {
|
|
2041
2056
|
var _a;
|
|
@@ -2044,9 +2059,6 @@ class Transpiler {
|
|
|
2044
2059
|
if (apexTypeA.name > apexTypeB.name) return 1;
|
|
2045
2060
|
return 0;
|
|
2046
2061
|
});
|
|
2047
|
-
if (Settings.getInstance().indexOnly) {
|
|
2048
|
-
return;
|
|
2049
|
-
}
|
|
2050
2062
|
sortedTypes.forEach((currentType) => {
|
|
2051
2063
|
processor.onProcess(currentType);
|
|
2052
2064
|
});
|
|
@@ -2182,6 +2194,33 @@ class OpenApi {
|
|
|
2182
2194
|
}
|
|
2183
2195
|
}
|
|
2184
2196
|
|
|
2197
|
+
class OpenApiSettings {
|
|
2198
|
+
constructor(config) {
|
|
2199
|
+
this.config = config;
|
|
2200
|
+
}
|
|
2201
|
+
static build(config) {
|
|
2202
|
+
OpenApiSettings.instance = new OpenApiSettings(config);
|
|
2203
|
+
}
|
|
2204
|
+
static getInstance() {
|
|
2205
|
+
if (!OpenApiSettings.instance) {
|
|
2206
|
+
throw new Error("Settings has not been initialized");
|
|
2207
|
+
}
|
|
2208
|
+
return OpenApiSettings.instance;
|
|
2209
|
+
}
|
|
2210
|
+
getOpenApiTitle() {
|
|
2211
|
+
return this.config.openApiTitle;
|
|
2212
|
+
}
|
|
2213
|
+
getNamespace() {
|
|
2214
|
+
return this.config.namespace;
|
|
2215
|
+
}
|
|
2216
|
+
openApiFileName() {
|
|
2217
|
+
return this.config.openApiFileName;
|
|
2218
|
+
}
|
|
2219
|
+
getVersion() {
|
|
2220
|
+
return this.config.version;
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2185
2224
|
class ClassMirrorWrapper {
|
|
2186
2225
|
constructor(classMirror) {
|
|
2187
2226
|
this.classMirror = classMirror;
|
|
@@ -2697,7 +2736,7 @@ var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
|
2697
2736
|
function createOpenApiFile(fileName, openApiModel) {
|
|
2698
2737
|
const content = JSON.stringify(__spreadProps$1(__spreadValues$1({}, openApiModel), { namespace: void 0 }), null, 2);
|
|
2699
2738
|
return {
|
|
2700
|
-
outputDocPath:
|
|
2739
|
+
outputDocPath: `${fileName}.json`,
|
|
2701
2740
|
content,
|
|
2702
2741
|
frontmatter: null,
|
|
2703
2742
|
group: null
|
|
@@ -2707,15 +2746,19 @@ function createOpenApiFile(fileName, openApiModel) {
|
|
|
2707
2746
|
class OpenApiDocsProcessor {
|
|
2708
2747
|
constructor() {
|
|
2709
2748
|
this.onAfterProcess = () => {
|
|
2710
|
-
const page = createOpenApiFile(
|
|
2749
|
+
const page = createOpenApiFile(OpenApiSettings.getInstance().openApiFileName(), this.openApiModel);
|
|
2711
2750
|
this._fileContainer.pushFile(page);
|
|
2712
2751
|
};
|
|
2713
2752
|
this._fileContainer = new FileContainer();
|
|
2714
|
-
const title =
|
|
2753
|
+
const title = OpenApiSettings.getInstance().getOpenApiTitle();
|
|
2715
2754
|
if (!title) {
|
|
2716
2755
|
throw Error("No OpenApi title was provided.");
|
|
2717
2756
|
}
|
|
2718
|
-
this.openApiModel = new OpenApi(
|
|
2757
|
+
this.openApiModel = new OpenApi(
|
|
2758
|
+
title,
|
|
2759
|
+
OpenApiSettings.getInstance().getVersion(),
|
|
2760
|
+
OpenApiSettings.getInstance().getNamespace()
|
|
2761
|
+
);
|
|
2719
2762
|
}
|
|
2720
2763
|
fileBuilder() {
|
|
2721
2764
|
return this._fileContainer;
|
|
@@ -2762,17 +2805,51 @@ class OpenApiDocsProcessor {
|
|
|
2762
2805
|
}
|
|
2763
2806
|
}
|
|
2764
2807
|
|
|
2808
|
+
var __async$4 = (__this, __arguments, generator) => {
|
|
2809
|
+
return new Promise((resolve, reject) => {
|
|
2810
|
+
var fulfilled = (value) => {
|
|
2811
|
+
try {
|
|
2812
|
+
step(generator.next(value));
|
|
2813
|
+
} catch (e) {
|
|
2814
|
+
reject(e);
|
|
2815
|
+
}
|
|
2816
|
+
};
|
|
2817
|
+
var rejected = (value) => {
|
|
2818
|
+
try {
|
|
2819
|
+
step(generator.throw(value));
|
|
2820
|
+
} catch (e) {
|
|
2821
|
+
reject(e);
|
|
2822
|
+
}
|
|
2823
|
+
};
|
|
2824
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
2825
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
2826
|
+
});
|
|
2827
|
+
};
|
|
2765
2828
|
function openApi(fileBodies, config) {
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2829
|
+
return __async$4(this, null, function* () {
|
|
2830
|
+
OpenApiSettings.build({
|
|
2831
|
+
sourceDirectory: config.sourceDir,
|
|
2832
|
+
outputDir: config.targetDir,
|
|
2833
|
+
openApiFileName: config.fileName,
|
|
2834
|
+
openApiTitle: config.title,
|
|
2835
|
+
namespace: config.namespace,
|
|
2836
|
+
version: config.apiVersion
|
|
2837
|
+
});
|
|
2838
|
+
const manifest = createManifest(new RawBodyParser(fileBodies), reflectionWithLogger);
|
|
2839
|
+
TypesRepository.getInstance().populateAll(manifest.types);
|
|
2840
|
+
const filteredTypes = filterByScopes(manifest);
|
|
2841
|
+
const processor = new OpenApiDocsProcessor();
|
|
2842
|
+
Transpiler.generate(filteredTypes, processor);
|
|
2843
|
+
const generatedFiles = processor.fileBuilder().files();
|
|
2844
|
+
yield _function.pipe(
|
|
2845
|
+
writeFiles(generatedFiles, config.targetDir, (file) => {
|
|
2846
|
+
Logger.logSingle(`${file.outputDocPath} processed.`, "green");
|
|
2847
|
+
}),
|
|
2848
|
+
TE__namespace.map(() => Logger.logSingle("\u2714\uFE0F Documentation generated successfully!")),
|
|
2849
|
+
TE__namespace.mapError((error) => Logger.error(error))
|
|
2850
|
+
)();
|
|
2851
|
+
ErrorLogger.logErrors(filteredTypes);
|
|
2774
2852
|
});
|
|
2775
|
-
ErrorLogger.logErrors(filteredTypes);
|
|
2776
2853
|
}
|
|
2777
2854
|
function reflectionWithLogger(apexBundle) {
|
|
2778
2855
|
var _a;
|
|
@@ -2965,23 +3042,50 @@ class Apexdocs {
|
|
|
2965
3042
|
const fileBodies = yield ApexFileReader.processFiles(
|
|
2966
3043
|
new DefaultFileSystem(),
|
|
2967
3044
|
config.sourceDir,
|
|
2968
|
-
config.includeMetadata
|
|
3045
|
+
config.targetGenerator === "markdown" ? config.includeMetadata : false
|
|
2969
3046
|
);
|
|
2970
3047
|
switch (config.targetGenerator) {
|
|
2971
3048
|
case "markdown":
|
|
2972
|
-
yield
|
|
3049
|
+
yield generateMarkdownDocumentation(fileBodies, config)();
|
|
2973
3050
|
break;
|
|
2974
3051
|
case "openapi":
|
|
2975
|
-
openApi(fileBodies, config);
|
|
3052
|
+
yield openApi(fileBodies, config);
|
|
2976
3053
|
break;
|
|
2977
3054
|
}
|
|
2978
|
-
Logger.logSingle("\u2714\uFE0F Documentation generated successfully!");
|
|
2979
3055
|
} catch (error) {
|
|
2980
|
-
Logger.logSingle(
|
|
3056
|
+
Logger.logSingle(`\u274C An error occurred while generating the documentation: ${error}`, "red");
|
|
2981
3057
|
}
|
|
2982
3058
|
});
|
|
2983
3059
|
}
|
|
2984
3060
|
}
|
|
3061
|
+
function generateMarkdownDocumentation(fileBodies, config) {
|
|
3062
|
+
return _function.pipe(
|
|
3063
|
+
generate(fileBodies, config),
|
|
3064
|
+
TE__namespace.map(() => Logger.logSingle("\u2714\uFE0F Documentation generated successfully!")),
|
|
3065
|
+
TE__namespace.mapLeft((error) => {
|
|
3066
|
+
if (error._tag === "HookError") {
|
|
3067
|
+
Logger.error("Error(s) occurred while processing hooks. Please review the following issues:");
|
|
3068
|
+
Logger.error(error.error);
|
|
3069
|
+
return;
|
|
3070
|
+
}
|
|
3071
|
+
if (error._tag === "FileWritingError") {
|
|
3072
|
+
Logger.error(error.message);
|
|
3073
|
+
Logger.error(error.error);
|
|
3074
|
+
return;
|
|
3075
|
+
}
|
|
3076
|
+
const errorMessages = [
|
|
3077
|
+
"Error(s) occurred while parsing files. Please review the following issues:",
|
|
3078
|
+
...error.errors.map(formatReflectionError)
|
|
3079
|
+
].join("\n");
|
|
3080
|
+
Logger.error(errorMessages);
|
|
3081
|
+
})
|
|
3082
|
+
);
|
|
3083
|
+
}
|
|
3084
|
+
function formatReflectionError(error) {
|
|
3085
|
+
return `Source file: ${error.file}
|
|
3086
|
+
${error.message}
|
|
3087
|
+
`;
|
|
3088
|
+
}
|
|
2985
3089
|
|
|
2986
3090
|
const markdownOptions = {
|
|
2987
3091
|
sourceDir: {
|
|
@@ -3030,6 +3134,40 @@ const markdownOptions = {
|
|
|
3030
3134
|
}
|
|
3031
3135
|
};
|
|
3032
3136
|
|
|
3137
|
+
const openApiOptions = {
|
|
3138
|
+
sourceDir: {
|
|
3139
|
+
type: "string",
|
|
3140
|
+
alias: "s",
|
|
3141
|
+
demandOption: true,
|
|
3142
|
+
describe: "The directory location which contains your apex .cls classes."
|
|
3143
|
+
},
|
|
3144
|
+
targetDir: {
|
|
3145
|
+
type: "string",
|
|
3146
|
+
alias: "t",
|
|
3147
|
+
default: defaults.defaults.targetDir,
|
|
3148
|
+
describe: "The directory location where the OpenApi file will be generated."
|
|
3149
|
+
},
|
|
3150
|
+
fileName: {
|
|
3151
|
+
type: "string",
|
|
3152
|
+
default: "openapi",
|
|
3153
|
+
describe: "The name of the OpenApi file to be generated."
|
|
3154
|
+
},
|
|
3155
|
+
namespace: {
|
|
3156
|
+
type: "string",
|
|
3157
|
+
describe: "The package namespace, if any. This will be added to the API file Server Url."
|
|
3158
|
+
},
|
|
3159
|
+
title: {
|
|
3160
|
+
type: "string",
|
|
3161
|
+
default: "Apex REST API",
|
|
3162
|
+
describe: "The title of the OpenApi file."
|
|
3163
|
+
},
|
|
3164
|
+
apiVersion: {
|
|
3165
|
+
type: "string",
|
|
3166
|
+
default: "1.0.0",
|
|
3167
|
+
describe: "The version of the OpenApi file."
|
|
3168
|
+
}
|
|
3169
|
+
};
|
|
3170
|
+
|
|
3033
3171
|
var __defProp = Object.defineProperty;
|
|
3034
3172
|
var __defProps = Object.defineProperties;
|
|
3035
3173
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
@@ -3081,7 +3219,11 @@ function _extractYargs(config) {
|
|
|
3081
3219
|
"markdown",
|
|
3082
3220
|
"Generate documentation from Apex classes as a Markdown site.",
|
|
3083
3221
|
(yargs2) => yargs2.options(markdownOptions)
|
|
3084
|
-
).command(
|
|
3222
|
+
).command(
|
|
3223
|
+
"openapi",
|
|
3224
|
+
"Generate an OpenApi REST specification from Apex classes.",
|
|
3225
|
+
() => yargs__namespace.options(openApiOptions)
|
|
3226
|
+
).demandCommand().parseSync();
|
|
3085
3227
|
}
|
|
3086
3228
|
function extractArgs() {
|
|
3087
3229
|
return __async(this, null, function* () {
|