@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.
Files changed (55) hide show
  1. package/dist/cli/generate.js +430 -288
  2. package/examples/open-api/config/project-scratch-def.json +13 -0
  3. package/examples/open-api/docs/openapi.json +582 -0
  4. package/examples/{force-app → open-api/force-app}/main/default/classes/SampleClass.cls +1 -0
  5. package/examples/open-api/package-lock.json +724 -0
  6. package/examples/open-api/package.json +20 -0
  7. package/examples/open-api/sfdx-project.json +12 -0
  8. package/package.json +2 -2
  9. package/src/application/Apexdocs.ts +39 -7
  10. package/src/application/__tests__/apex-file-reader.spec.ts +0 -17
  11. package/src/application/file-writer.ts +37 -15
  12. package/src/application/generators/markdown.ts +10 -39
  13. package/src/application/generators/openapi.ts +22 -6
  14. package/src/cli/args.ts +4 -1
  15. package/src/cli/commands/openapi.ts +36 -0
  16. package/src/core/markdown/adapters/documentables.ts +0 -1
  17. package/src/core/markdown/generate-docs.ts +8 -12
  18. package/src/core/markdown/reflection/reflect-source.ts +109 -31
  19. package/src/core/openApiSettings.ts +41 -0
  20. package/src/core/openapi/__tests__/open-api-docs-processor.spec.ts +2 -2
  21. package/src/core/openapi/open-api-docs-processor.ts +8 -4
  22. package/src/core/openapi/open-api.ts +5 -1
  23. package/src/core/openapi/openapi-type-file.ts +1 -1
  24. package/src/core/openapi/parser.ts +1 -15
  25. package/src/core/openapi/transpiler.ts +0 -5
  26. package/src/core/parse-apex-metadata.ts +21 -5
  27. package/src/core/shared/types.d.ts +4 -1
  28. package/src/test-helpers/SettingsBuilder.ts +2 -6
  29. package/dist/defaults-DUwru49Q.js +0 -12
  30. package/dist/defaults-SH0Rsi5E.js +0 -11
  31. package/dist/defaults-jLXD2y8-.js +0 -13
  32. package/examples/force-app/main/default/classes/AnotherInterface.cls +0 -16
  33. package/examples/force-app/main/default/classes/EscapedAnnotations.cls +0 -5
  34. package/examples/force-app/main/default/classes/GrandparentClass.cls +0 -5
  35. package/examples/force-app/main/default/classes/GroupedClass.cls +0 -8
  36. package/examples/force-app/main/default/classes/InterfaceWithInheritance.cls +0 -1
  37. package/examples/force-app/main/default/classes/MemberGrouping.cls +0 -17
  38. package/examples/force-app/main/default/classes/ParentClass.cls +0 -16
  39. package/examples/force-app/main/default/classes/SampleClass.cls-meta.xml +0 -5
  40. package/examples/force-app/main/default/classes/SampleClassWithoutModifier.cls +0 -9
  41. package/examples/force-app/main/default/classes/SampleInterface.cls +0 -16
  42. package/src/core/markdown/reflection/error-handling.ts +0 -37
  43. package/src/core/settings.ts +0 -56
  44. /package/examples/{force-app → open-api/force-app}/main/default/classes/ChildClass.cls +0 -0
  45. /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResource.cls +0 -0
  46. /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResourceToSkip.cls +0 -0
  47. /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResourceWithInnerClass.cls +0 -0
  48. /package/examples/{force-app → open-api/force-app}/main/default/restapi/SampleRestResourceWithoutApexDocs.cls +0 -0
  49. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference1.cls +0 -0
  50. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference2.cls +0 -0
  51. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference3.cls +0 -0
  52. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference4.cls +0 -0
  53. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference5.cls +0 -0
  54. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference6.cls +0 -0
  55. /package/examples/{force-app → open-api/force-app}/main/default/restapi/references/Reference7.cls +0 -0
@@ -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$f = Object.defineProperty;
149
- var __defProps$f = Object.defineProperties;
150
- var __getOwnPropDescs$f = Object.getOwnPropertyDescriptors;
151
- var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
152
- var __hasOwnProp$f = Object.prototype.hasOwnProperty;
153
- var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
154
- var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
155
- var __spreadValues$f = (a, b) => {
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$f.call(b, prop))
158
- __defNormalProp$f(a, prop, b[prop]);
159
- if (__getOwnPropSymbols$f)
160
- for (var prop of __getOwnPropSymbols$f(b)) {
161
- if (__propIsEnum$f.call(b, prop))
162
- __defNormalProp$f(a, prop, b[prop]);
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$f = (a, b) => __defProps$f(a, __getOwnPropDescs$f(b));
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$f(__spreadValues$f({}, adaptDescribable(currentAnnotation.bodyLines, linkGenerator)), {
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$f(__spreadValues$f({}, adaptDescribable((_a = documentable.docComment) == null ? void 0 : _a.descriptionLines, linkGenerator)), {
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$e = Object.defineProperty;
248
- var __defProps$e = Object.defineProperties;
249
- var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
250
- var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
251
- var __hasOwnProp$e = Object.prototype.hasOwnProperty;
252
- var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
253
- var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
254
- var __spreadValues$e = (a, b) => {
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$e.call(b, prop))
257
- __defNormalProp$e(a, prop, b[prop]);
258
- if (__getOwnPropSymbols$e)
259
- for (var prop of __getOwnPropSymbols$e(b)) {
260
- if (__propIsEnum$e.call(b, prop))
261
- __defNormalProp$e(a, prop, b[prop]);
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$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
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$e(__spreadValues$e({}, adaptDescribable((_b = (_a = method.docComment) == null ? void 0 : _a.returnAnnotation) == null ? void 0 : _b.bodyLines, linkGenerator)), {
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$e(__spreadValues$e({}, adaptDescribable(paramAnnotation == null ? void 0 : paramAnnotation.bodyLines, linkGenerator)), {
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$e(__spreadValues$e({}, adaptDescribable(thrown.bodyLines, linkGenerator)), {
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$d = Object.defineProperty;
396
- var __defProps$d = Object.defineProperties;
397
- var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
398
- var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
399
- var __hasOwnProp$d = Object.prototype.hasOwnProperty;
400
- var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
401
- var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
402
- var __spreadValues$d = (a, b) => {
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$d.call(b, prop))
405
- __defNormalProp$d(a, prop, b[prop]);
406
- if (__getOwnPropSymbols$d)
407
- for (var prop of __getOwnPropSymbols$d(b)) {
408
- if (__propIsEnum$d.call(b, prop))
409
- __defNormalProp$d(a, prop, b[prop]);
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$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
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$d(__spreadValues$d({}, getRenderable()), {
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$d(__spreadValues$d({
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$d(__spreadValues$d({}, adaptDescribable((_a = value.docComment) == null ? void 0 : _a.descriptionLines, linkGenerator)), {
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$d(__spreadValues$d({
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$d(__spreadValues$d({
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$d(__spreadValues$d({}, innerClass), { inheritanceChain: [] }), linkGenerator, baseHeadingLevel + 2)
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
- var _a;
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
- const xml = new fastXmlParser.XMLParser().parse(input);
667
- map.set("apiVersion", (_a = xml.ApexClass.apiVersion) != null ? _a : "");
668
- if (xml.ApexClass.status) {
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 checkForReflectionErrors(reflectionResult) {
687
- function reduceReflectionResultIntoSingleEither(results) {
688
- return results.reduce(
689
- (acc, result) => {
690
- E__namespace.isLeft(result) ? acc.errors.push(result.left) : acc.parsedFiles.push(result.right);
691
- return acc;
692
- },
693
- {
694
- errors: [],
695
- parsedFiles: []
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
- function reflectSourceCode(apexBundles) {
707
- return apexBundles.map(reflectSourceBody);
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 reflectSourceBody(apexBundle) {
710
- const { filePath, content: input, metadataContent: metadata } = apexBundle;
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: result.typeMirror.name,
716
- type: result.typeMirror.type_name
771
+ name: typeMirror.name,
772
+ type: typeMirror.type_name
717
773
  },
718
- type: addFileMetadataToTypeAnnotation(result.typeMirror, metadata)
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((metadata2) => {
725
- const metadataParams = parseApexMetadata(metadata2);
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$4 = (__this, __arguments, generator) => {
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
- reflectSourceCode,
1563
- checkForReflectionErrors,
1564
- E__namespace.map(filterOutOfScope),
1565
- E__namespace.map(addInheritedMembersToTypes),
1566
- E__namespace.map(addInheritanceChainToTypes),
1567
- E__namespace.map(sortTypeMembers),
1568
- E__namespace.bindTo("parsedFiles"),
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$4(this, null, function* () {
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$4(void 0, [_0, ..._1], function* (references, hook = passThroughHook) {
1602
- const hooked = references.map((reference) => __async$4(void 0, null, function* () {
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$4(void 0, null, function* () {
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$4(void 0, [_0, ..._1], function* (referenceGuide, hook = passThroughHook) {
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$4(void 0, [_0, ..._1], function* (docs, transformDocsHook = passThroughHook, transformDocPageHook = passThroughHook) {
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$4(void 0, [_0, ..._1], function* (doc, hook = passThroughHook) {
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
- class FileWriter {
1687
- static write(files, outputDir, onWriteCallback) {
1688
- files.forEach((file) => {
1689
- const { outputDocPath, content } = this.getTargetLocation(file, outputDir);
1690
- fs__namespace.mkdirSync(path__namespace.dirname(outputDocPath), { recursive: true });
1691
- fs__namespace.writeFileSync(outputDocPath, content, "utf8");
1692
- onWriteCallback == null ? void 0 : onWriteCallback(file);
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
- class Logger {
1703
- /**
1704
- * Logs a message with optional arguments.
1705
- * @param message The message to log.
1706
- * @param args Optional arguments.
1707
- */
1708
- static log(message, ...args) {
1709
- this.logSingle(message);
1710
- args.forEach((arg) => {
1711
- this.logSingle(arg);
1712
- });
1713
- }
1714
- /**
1715
- * Logs an error message with optional arguments.
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
- TE__namespace.mapLeft((error) => {
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
- try {
1810
- FileWriter.write(
1811
- [files.referenceGuide, ...files.docs].filter((file) => !isSkip(file)),
1812
- outputDir
1813
- );
1814
- return TE__namespace.right(void 0);
1815
- } catch (error) {
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
- const result = reflect(currentBundle);
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(Settings.getInstance().openApiFileName(), this.openApiModel);
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 = Settings.getInstance().getOpenApiTitle();
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(title, "1.0.0", Settings.getInstance().getNamespace());
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
- const manifest = createManifest(new RawBodyParser(fileBodies), reflectionWithLogger);
2767
- TypesRepository.getInstance().populateAll(manifest.types);
2768
- const filteredTypes = filterByScopes(manifest);
2769
- const processor = new OpenApiDocsProcessor();
2770
- Transpiler.generate(filteredTypes, processor);
2771
- const generatedFiles = processor.fileBuilder().files();
2772
- FileWriter.write(generatedFiles, config.targetDir, (file) => {
2773
- Logger.logSingle(`${file.outputDocPath} processed.`, "green");
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 generate(fileBodies, config);
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("\u274C An error occurred while generating the documentation.", "red");
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("openapi", "Generate an OpenApi REST specification from Apex classes.").demandCommand().parseSync();
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* () {