@cparra/apexdocs 2.25.0-alpha.4 → 2.25.0-alpha.5

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 (189) hide show
  1. package/dist/cli/generate.js +2745 -39
  2. package/dist/defaults-DUwru49Q.js +12 -0
  3. package/dist/defaults-SH0Rsi5E.js +11 -0
  4. package/dist/index.d.ts +62 -2
  5. package/dist/index.js +36 -1
  6. package/examples/plain-markdown/docs/Miscellaneous/ns.BaseClass.md +1 -1
  7. package/examples/plain-markdown/docs/Miscellaneous/ns.MultiInheritanceClass.md +1 -1
  8. package/examples/plain-markdown/docs/Miscellaneous/ns.ParentInterface.md +1 -1
  9. package/examples/plain-markdown/docs/Miscellaneous/ns.ReferencedEnum.md +1 -1
  10. package/examples/plain-markdown/docs/Miscellaneous/ns.SampleException.md +1 -1
  11. package/examples/plain-markdown/docs/Miscellaneous/ns.SampleInterface.md +1 -1
  12. package/examples/plain-markdown/docs/Miscellaneous/ns.Url.md +1 -1
  13. package/examples/plain-markdown/docs/Sample-Enums/ns.SampleEnum.md +1 -1
  14. package/examples/plain-markdown/docs/SampleGroup/ns.SampleClass.md +1 -1
  15. package/examples/plain-markdown/docs/index.md +1 -1
  16. package/examples/plain-markdown/package.json +3 -4
  17. package/examples/vitepress/.forceignore +12 -0
  18. package/examples/vitepress/apexdocs.config.ts +108 -0
  19. package/examples/vitepress/config/project-scratch-def.json +13 -0
  20. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +259 -0
  21. package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +7 -0
  22. package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +40 -0
  23. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +11474 -0
  24. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +7 -0
  25. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +9172 -0
  26. package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +7 -0
  27. package/examples/vitepress/docs/.vitepress/cache/deps/package.json +3 -0
  28. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4339 -0
  29. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  30. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +567 -0
  31. package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  32. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +323 -0
  33. package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +7 -0
  34. package/examples/vitepress/docs/.vitepress/config.mts +21 -0
  35. package/examples/vitepress/docs/.vitepress/sidebar.json +119 -0
  36. package/examples/vitepress/docs/Miscellaneous/apexdocs.BaseClass.md +20 -0
  37. package/examples/vitepress/docs/Miscellaneous/apexdocs.MultiInheritanceClass.md +78 -0
  38. package/examples/vitepress/docs/Miscellaneous/apexdocs.ParentInterface.md +19 -0
  39. package/examples/vitepress/docs/Miscellaneous/apexdocs.ReferencedEnum.md +15 -0
  40. package/examples/vitepress/docs/Miscellaneous/apexdocs.SampleException.md +28 -0
  41. package/examples/vitepress/docs/Miscellaneous/apexdocs.SampleInterface.md +122 -0
  42. package/examples/vitepress/docs/Miscellaneous/apexdocs.Url.md +318 -0
  43. package/examples/vitepress/docs/Sample-Enums/apexdocs.SampleEnum.md +41 -0
  44. package/examples/vitepress/docs/SampleGroup/apexdocs.SampleClass.md +178 -0
  45. package/examples/vitepress/docs/api-examples.md +49 -0
  46. package/examples/vitepress/docs/index-frontmatter.md +16 -0
  47. package/examples/vitepress/docs/index.md +127 -0
  48. package/examples/vitepress/docs/markdown-examples.md +85 -0
  49. package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +3 -0
  50. package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +1 -0
  51. package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +3 -0
  52. package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +5 -0
  53. package/examples/vitepress/force-app/main/default/classes/SampleClass.cls +72 -0
  54. package/examples/vitepress/force-app/main/default/classes/SampleEnum.cls +30 -0
  55. package/examples/vitepress/force-app/main/default/classes/SampleException.cls +17 -0
  56. package/examples/vitepress/force-app/main/default/classes/SampleInterface.cls +46 -0
  57. package/examples/vitepress/force-app/main/default/classes/Url.cls +195 -0
  58. package/examples/vitepress/package-lock.json +2574 -0
  59. package/examples/vitepress/package.json +18 -0
  60. package/examples/vitepress/sfdx-project.json +12 -0
  61. package/jest.config.js +1 -0
  62. package/package.json +10 -6
  63. package/src/application/Apexdocs.ts +16 -104
  64. package/src/application/__tests__/apex-file-reader.spec.ts +104 -0
  65. package/src/application/apex-file-reader.ts +42 -0
  66. package/src/application/file-writer.ts +25 -0
  67. package/src/application/generators/markdown.ts +53 -0
  68. package/src/application/generators/openapi.ts +56 -0
  69. package/src/cli/args.ts +17 -112
  70. package/src/cli/commands/markdown.ts +58 -0
  71. package/src/cli/generate.ts +7 -5
  72. package/src/{model/__tests__ → core/__test__}/manifest.spec.ts +1 -1
  73. package/src/core/manifest.ts +57 -51
  74. package/src/{__spec__/core → core/markdown/__test__}/expect-extensions.ts +5 -5
  75. package/src/core/markdown/__test__/generating-class-docs.spec.ts +727 -0
  76. package/src/{__spec__/core → core/markdown/__test__}/generating-enum-docs.spec.ts +82 -59
  77. package/src/{__spec__/core → core/markdown/__test__}/generating-interface-docs.spec.ts +94 -75
  78. package/src/core/markdown/__test__/generating-reference-guide.spec.ts +184 -0
  79. package/src/core/{__test__ → markdown/__test__}/inheritance-chain.test.ts +2 -2
  80. package/src/core/markdown/__test__/test-helpers.ts +22 -0
  81. package/src/core/{adapters → markdown/adapters}/__tests__/interface-adapter.spec.ts +38 -8
  82. package/src/core/{adapters → markdown/adapters}/apex-types.ts +7 -4
  83. package/src/core/{adapters → markdown/adapters}/inline.ts +1 -1
  84. package/src/core/markdown/adapters/renderable-bundle.ts +144 -0
  85. package/src/core/markdown/adapters/renderable-to-page-data.ts +92 -0
  86. package/src/core/{adapters → markdown/adapters}/types.d.ts +16 -2
  87. package/src/core/markdown/generate-docs.ts +158 -0
  88. package/src/core/markdown/reflection/error-handling.ts +37 -0
  89. package/src/core/markdown/reflection/filter-scope.ts +13 -0
  90. package/src/core/markdown/reflection/inheritance-chain-expanion.ts +22 -0
  91. package/src/core/markdown/reflection/inherited-member-expansion.ts +105 -0
  92. package/src/core/markdown/reflection/reflect-source.ts +41 -0
  93. package/src/core/markdown/reflection/sort-members.ts +59 -0
  94. package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/class-template.ts +2 -0
  95. package/src/core/markdown/templates/hookable.ts +7 -0
  96. package/src/core/{template.ts → markdown/templates/template.ts} +12 -12
  97. package/src/core/markdown/utils.ts +3 -0
  98. package/src/{transpiler → core}/openapi/__tests__/open-api-docs-processor.spec.ts +1 -1
  99. package/src/{model → core/openapi}/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +3 -3
  100. package/src/core/openapi/file-container.ts +13 -0
  101. package/src/{service → core/openapi}/manifest-factory.ts +3 -3
  102. package/src/{transpiler → core}/openapi/open-api-docs-processor.ts +9 -10
  103. package/src/core/openapi/openapi-type-file.ts +14 -0
  104. package/src/{service → core/openapi}/parser.ts +8 -8
  105. package/src/{transpiler → core}/openapi/parsers/Builder.ts +2 -2
  106. package/src/{transpiler → core}/openapi/parsers/MethodParser.ts +5 -5
  107. package/src/{transpiler → core}/openapi/parsers/ParameterObjectBuilder.ts +2 -2
  108. package/src/{transpiler → core}/openapi/parsers/ReferenceBuilder.ts +3 -3
  109. package/src/{transpiler → core}/openapi/parsers/RequestBodyBuilder.ts +2 -2
  110. package/src/{transpiler → core}/openapi/parsers/ResponsesBuilder.ts +2 -2
  111. package/src/{transpiler → core}/openapi/parsers/__tests__/MethodParser.spec.ts +1 -1
  112. package/src/{transpiler → core}/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +2 -2
  113. package/src/{transpiler → core}/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +2 -2
  114. package/src/{transpiler → core}/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +2 -2
  115. package/src/{transpiler → core}/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +1 -1
  116. package/src/{transpiler → core/openapi}/transpiler.ts +2 -6
  117. package/src/{model → core/openapi}/types-repository.ts +0 -9
  118. package/src/core/parse-apex-metadata.ts +14 -0
  119. package/src/core/settings.ts +56 -0
  120. package/src/core/shared/types.d.ts +92 -0
  121. package/src/core/shared/utils.ts +5 -0
  122. package/src/defaults.ts +8 -0
  123. package/src/index.ts +34 -2
  124. package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -5
  125. package/src/test-helpers/SettingsBuilder.ts +1 -3
  126. package/src/util/logger.ts +2 -2
  127. package/src/util/string-utils.ts +0 -4
  128. package/tsconfig.json +5 -1
  129. package/apexdocs.config.ts +0 -13
  130. package/examples/plain-markdown/template.md +0 -3
  131. package/src/__spec__/core/generating-class-docs.spec.ts +0 -531
  132. package/src/__spec__/core/generating-reference-guide.spec.ts +0 -164
  133. package/src/__spec__/core/test-helpers.ts +0 -9
  134. package/src/application/generators/generate-markdown-files.ts +0 -53
  135. package/src/core/apex-bundle.ts +0 -3
  136. package/src/core/generate-docs.ts +0 -432
  137. package/src/model/markdown-file.ts +0 -122
  138. package/src/model/markdown-generation-util/doc-comment-annotation-util.ts +0 -50
  139. package/src/model/markdown-generation-util/field-declaration-util.ts +0 -71
  140. package/src/model/markdown-generation-util/index.ts +0 -3
  141. package/src/model/markdown-generation-util/method-declaration-util.ts +0 -166
  142. package/src/model/markdown-generation-util/type-declaration-util.ts +0 -91
  143. package/src/model/markdown-home-file.ts +0 -58
  144. package/src/model/markdown-type-file.ts +0 -169
  145. package/src/model/openapi/openapi-type-file.ts +0 -14
  146. package/src/model/outputFile.ts +0 -20
  147. package/src/service/__tests__/apex-file-reader.spec.ts +0 -93
  148. package/src/service/apex-file-reader.ts +0 -47
  149. package/src/service/file-writer.ts +0 -34
  150. package/src/service/metadata-processor.ts +0 -16
  151. package/src/service/state.ts +0 -24
  152. package/src/service/walkers/class-walker.ts +0 -30
  153. package/src/service/walkers/enum-walker.ts +0 -7
  154. package/src/service/walkers/interface-walker.ts +0 -12
  155. package/src/service/walkers/walker-factory.ts +0 -19
  156. package/src/service/walkers/walker.ts +0 -42
  157. package/src/settings.ts +0 -143
  158. package/src/transpiler/factory.ts +0 -31
  159. package/src/transpiler/file-container.ts +0 -13
  160. package/src/transpiler/generator-choices.ts +0 -1
  161. package/src/transpiler/markdown/class-file-generatorHelper.ts +0 -61
  162. package/src/transpiler/markdown/docsify/docsify-docs-processor.ts +0 -12
  163. package/src/transpiler/markdown/jekyll/jekyll-docsProcessor.ts +0 -50
  164. package/src/transpiler/markdown/markdown-transpiler-base.ts +0 -28
  165. package/src/transpiler/processor-type-transpiler.ts +0 -18
  166. /package/src/{service → application}/file-system.ts +0 -0
  167. /package/src/core/{adapters → markdown/adapters}/__tests__/documentables.spec.ts +0 -0
  168. /package/src/core/{adapters → markdown/adapters}/__tests__/references.spec.ts +0 -0
  169. /package/src/core/{adapters → markdown/adapters}/documentables.ts +0 -0
  170. /package/src/core/{adapters → markdown/adapters}/fields-and-properties.ts +0 -0
  171. /package/src/core/{adapters → markdown/adapters}/methods-and-constructors.ts +0 -0
  172. /package/src/core/{adapters → markdown/adapters}/type-utils.ts +0 -0
  173. /package/src/core/{inheritance-chain.ts → markdown/reflection/inheritance-chain.ts} +0 -0
  174. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/constructors-partial-template.ts +0 -0
  175. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/documentable-partial-template.ts +0 -0
  176. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/enum-template.ts +0 -0
  177. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/fieldsPartialTemplate.ts +0 -0
  178. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/grouped-members-partial-template.ts +0 -0
  179. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/interface-template.ts +0 -0
  180. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/methods-partial-template.ts +0 -0
  181. /package/src/core/{templates → markdown/templates}/reference-guide.ts +0 -0
  182. /package/src/{transpiler/markdown/plain-markdown → core/markdown/templates}/type-doc-partial.ts +0 -0
  183. /package/src/{service → core/openapi}/__tests__/manifest-factory.spec.ts +0 -0
  184. /package/src/{model → core}/openapi/__tests__/open-api.spec.ts +0 -0
  185. /package/src/{model → core}/openapi/apex-doc-types.ts +0 -0
  186. /package/src/{model → core/openapi}/apex-type-wrappers/ClassMirrorWrapper.ts +0 -0
  187. /package/src/{model → core/openapi}/apex-type-wrappers/MethodMirrorWrapper.ts +0 -0
  188. /package/src/{model → core}/openapi/open-api-types.ts +0 -0
  189. /package/src/{model → core}/openapi/open-api.ts +0 -0
@@ -1,19 +1,928 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var On=Object.defineProperty;var a=(n,e)=>On(n,"name",{value:e,configurable:!0});var An=require("fs"),xn=require("path"),Lt=require("@cparra/apex-reflection"),Ot=require("chalk"),At=require("log-update"),In=require("fast-xml-parser"),En=require("js-yaml"),Dn=require("fp-ts/Option"),b=require("fp-ts/function"),Sn=require("fp-ts/Either"),g=require("handlebars"),Rn=require("cosmiconfig"),jn=require("yargs");function D(n){var e=Object.create(null);return n&&Object.keys(n).forEach(function(t){if(t!=="default"){var r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:function(){return n[t]}})}}),e.default=n,Object.freeze(e)}a(D,"_interopNamespaceDefault");var P=D(An),oe=D(xn),xt=D(En),w=D(Dn),y=D(Sn),Bn=D(jn);const A=class A{constructor(e){this.config=e}static build(e){A.instance=new A(e)}static getInstance(){if(!A.instance)throw new Error("Settings has not been initialized");return A.instance}get sourceDirectory(){return this.config.sourceDirectory}get scope(){return this.config.scope}get outputDir(){return this.config.outputDir}get targetGenerator(){return this.config.targetGenerator}get indexOnly(){return this.config.indexOnly}getDefaultGroupName(){return this.config.defaultGroupName}getOpenApiTitle(){var e;return(e=this.config.openApiTitle)!=null?e:this.config.title}getTitle(){return this.config.title}getNamespace(){return this.config.namespace}getNamespacePrefix(){return this.config.namespace?`${this.config.namespace}.`:""}openApiFileName(){return this.config.openApiFileName}includeMetadata(){return this.config.includeMetadata}sortMembersAlphabetically(){var e;return(e=this.config.sortMembersAlphabetically)!=null?e:!1}getRootDir(){return this.config.rootDir}onAfterProcess(e){this.config.onAfterProcess&&this.config.onAfterProcess(e)}onBeforeFileWrite(e){return this.config.onBeforeFileWrite?this.config.onBeforeFileWrite(e):e}frontMatterHeader(e){return this.config.frontMatterHeader?this.config.frontMatterHeader(e):[]}getLinkingStrategy(){return this.config.linkingStrategy}};a(A,"Settings");let u=A;const We=class We{constructor(e,t,r){this.filePath=e,this.rawTypeContent=t,this.rawMetadataContent=r}};a(We,"ApexBundle");let ce=We;const Nn=".cls",Ve=class Ve{static processFiles(e,t=this.sourceDirectory){let r=[];return e.readDirectory(t).forEach(s=>{const o=e.joinPath(t,s);if(e.isDirectory(o)&&(r=r.concat(this.processFiles(e,o))),!this.isApexFile(s))return;const c=e.readFile(o),l=e.joinPath(t,`${s}-meta.xml`);let d=null;u.getInstance().includeMetadata()&&(d=e.exists(l)?e.readFile(l):null),r.push(new ce(s,c,d))}),r}static isApexFile(e){return e.endsWith(Nn)}static get sourceDirectory(){return u.getInstance().sourceDirectory}};a(Ve,"ApexFileReader");let le=Ve;const Ue=class Ue{isDirectory(e){return P.statSync(e).isDirectory()}readDirectory(e){return P.readdirSync(e)}readFile(e){return P.readFileSync(e).toString()}joinPath(...e){return oe.join(...e)}exists(e){return P.existsSync(e)}};a(Ue,"DefaultFileSystem");let de=Ue;const Xe=class Xe{static log(e,...t){this.logSingle(e),t.forEach(r=>{this.logSingle(r)})}static error(e,...t){this.logSingle(e,!1,"red",!1),t.forEach(()=>{this.logSingle(e,!1,"red",!1)})}static logSingle(e,t=!0,r="green",i=!0){this.currentFrame>9&&(this.currentFrame=0);const s=t?`${this.frames[this.currentFrame++]}`:"";let o;r==="green"?o=`${Ot.green(new Date().toLocaleString()+": ")}${e}
3
- `:o=`${Ot.red(new Date().toLocaleString()+": ")}${e}
4
- `,i?At(`${s} ${o}`):process.stdout.write(`${s} ${o}`)}static clear(){At.clear()}};a(Xe,"Logger");let p=Xe;p.currentFrame=0,p.frames=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];var Mn=Object.defineProperty,Fn=Object.defineProperties,Gn=Object.getOwnPropertyDescriptors,It=Object.getOwnPropertySymbols,zn=Object.prototype.hasOwnProperty,kn=Object.prototype.propertyIsEnumerable,Et=a((n,e,t)=>e in n?Mn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$9"),pe=a((n,e)=>{for(var t in e||(e={}))zn.call(e,t)&&Et(n,t,e[t]);if(It)for(var t of It(e))kn.call(e,t)&&Et(n,t,e[t]);return n},"__spreadValues$9"),ue=a((n,e)=>Fn(n,Gn(e)),"__spreadProps$8");const ie=class ie{constructor(e,t=!1){this.types=e,this.isForInnerTypes=t}filteredByAccessModifierAndAnnotations(e){const t=this.filterAccessibleModifier(this.types,e),r=[];for(const i of t){const s=i;if(s.type_name==="enum"){r.push(s);continue}if(s.type_name==="interface"){const l=s;r.push(ue(pe({},s),{methods:this.filterAccessibleModifier(l.methods,e)}));continue}const o=s;let c=ue(pe({},s),{methods:this.filterAccessibleModifier(o.methods,e),properties:this.filterAccessibleModifier(o.properties,e),fields:this.filterAccessibleModifier(o.fields,e),constructors:this.filterAccessibleModifier(o.constructors,e)});this.isForInnerTypes||(c=ue(pe({},c),{enums:this.filterAccessibleModifier(o.enums,e),interfaces:this.filterAccessibleModifier(o.interfaces,e),classes:new ie(o.classes,!0).filteredByAccessModifierAndAnnotations(e)})),r.push(c)}return r}filterAccessibleModifier(e,t){return e.filter(r=>{var i;return((i=r.docComment)==null?void 0:i.annotations.some(o=>o.name.toLowerCase()==="ignore"))?!1:t.includes(r.access_modifier)||r.annotations.some(o=>t.includes(o.type.toLowerCase()))})}};a(ie,"Manifest");let z=ie;function qn(n,e){return new z(n.parse(e))}a(qn,"createManifest");const Ye=class Ye{static process(e){var t;const r=new Map,i=new In.XMLParser().parse(e);return r.set("apiVersion",(t=i.ApexClass.apiVersion)!=null?t:""),i.ApexClass.status&&r.set("status",i.ApexClass.status),r}};a(Ye,"MetadataProcessor");let k=Ye;var Wn=Object.defineProperty,Vn=Object.defineProperties,Un=Object.getOwnPropertyDescriptors,Dt=Object.getOwnPropertySymbols,Xn=Object.prototype.hasOwnProperty,Yn=Object.prototype.propertyIsEnumerable,St=a((n,e,t)=>e in n?Wn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$8"),fe=a((n,e)=>{for(var t in e||(e={}))Xn.call(e,t)&&St(n,t,e[t]);if(Dt)for(var t of Dt(e))Yn.call(e,t)&&St(n,t,e[t]);return n},"__spreadValues$8"),he=a((n,e)=>Vn(n,Un(e)),"__spreadProps$7");const Ze=class Ze{constructor(e){this.typeBundles=e}parse(e){const t=this.typeBundles.map(r=>{p.log(`Parsing file: ${r.filePath}`);const i=e(r);return i.typeMirror&&r.rawMetadataContent&&k.process(r.rawMetadataContent).forEach((o,c)=>{var l;const d=`${c}: ${o}`;(l=i.typeMirror)==null||l.annotations.push({rawDeclaration:d,name:d,type:d})}),i}).filter(r=>r.typeMirror).map(r=>r.typeMirror);return this.addFieldsFromParent(t)}addFieldsFromParent(e){const t=[];for(const r of e){if(r.type_name!=="class"&&r.type_name!=="interface"){t.push(r);continue}if(r.type_name==="class"){let s=r;if(!s.extended_class){t.push(r);continue}s=this.addMembersFromParent(s,e),t.push(s);continue}let i=r;if(!i.extended_interfaces.length){t.push(r);continue}i=this.addMethodsFromParent(i,e),t.push(i)}return t}addMembersFromParent(e,t){if(!e.extended_class)return e;const r=t.find(s=>s.name===e.extended_class);if(!r||r.type_name!=="class")return e;let i=r;return i.extended_class&&(i=this.addMembersFromParent(i,t)),e.fields=[...e.fields,...this.getInheritedFields(i,e)],e.properties=[...e.properties,...this.getInheritedProperties(i,e)],e.methods=[...e.methods,...this.getInheritedMethods(i,e)],e}addMethodsFromParent(e,t){if(!e.extended_interfaces.length)return e;const r=[];for(const i of e.extended_interfaces){const s=t.find(o=>o.name===i);s&&r.push(s)}for(const i of r){let s=i;s.extended_interfaces.length&&(s=this.addMethodsFromParent(s,t)),e.methods=[...e.methods,...this.getInheritedMethods(s,e)]}return e}getInheritedFields(e,t){return e.fields.filter(r=>r.access_modifier.toLowerCase()!=="private").filter(r=>!this.memberExists(t.fields,r.name)).map(r=>he(fe({},r),{inherited:!0}))}getInheritedProperties(e,t){return e.properties.filter(r=>r.access_modifier.toLowerCase()!=="private").filter(r=>!this.memberExists(t.properties,r.name)).map(r=>he(fe({},r),{inherited:!0}))}getInheritedMethods(e,t){return e.methods.filter(r=>r.access_modifier.toLowerCase()!=="private").filter(r=>!this.memberExists(t.methods,r.name)).map(r=>he(fe({},r),{inherited:!0}))}memberExists(e,t){return e.map(i=>i.name).includes(t)}};a(Ze,"RawBodyParser");let me=Ze;const x=class x{constructor(){}static getInstance(){return x.instance||(x.instance=new x),x.instance}setTypeBeingProcessed(e){this.typeBeingProcessed=e}getTypeBeingProcessed(){return this.typeBeingProcessed}};a(x,"State");let q=x;const Je=class Je{static generate(e,t){var r,i;const s=e.sort((o,c)=>o.name<c.name?-1:o.name>c.name?1:0);(r=t.onBeforeProcess)==null||r.call(t,s),!u.getInstance().indexOnly&&(s.forEach(o=>{q.getInstance().setTypeBeingProcessed(o),t.onProcess(o)}),(i=t.onAfterProcess)==null||i.call(t,s))}};a(Je,"Transpiler");let ge=Je;const Qe=class Qe{static write(e,t){const r=a(i=>u.getInstance().onBeforeFileWrite(i),"onBeforeFileWrite");e.forEach(i=>{const s=this.getTargetLocation(i,r),o=oe.join(s.dir.baseDir,s.dir.fileDir);P.existsSync(o)||P.mkdirSync(o,{recursive:!0});const c=oe.join(o,`${s.name}${s.extension}`);P.writeFileSync(c,i.body,"utf8"),t(s)})}static getTargetLocation(e,t){const r={name:e.fileName,extension:e.fileExtension(),dir:{baseDir:u.getInstance().outputDir,fileDir:e.dir}};return t(r)}};a(Qe,"FileWriter");let W=Qe;const He=class He{static logErrors(e){e.forEach(t=>{this.logErrorsForSingleType(t)})}static logErrorsForSingleType(e){this.logTypeErrors(e),e.type_name==="class"?this.logErrorsForClass(e):e.type_name==="interface"&&this.logErrorsForInterface(e)}static logTypeErrors(e,t){var r;if((r=e.docComment)!=null&&r.error){const i=t?`${t.name}.${e.name}`:e.name;p.error(`${i} - Doc comment parsing error. Level: Type`),p.error(`Comment:
5
- ${e.docComment.rawDeclaration}`),p.error(e.docComment.error),p.error("=================================")}}static logErrorsForClass(e,t){const r=t?`${t.name}.${e.name}`:e.name;e.constructors.forEach(i=>{var s;(s=i.docComment)!=null&&s.error&&(p.error(`${r} - Doc comment parsing error. Level: Constructor`),p.error(`Comment:
6
- ${i.docComment.rawDeclaration}`),p.error(i.docComment.error),p.error("================================="))}),e.fields.forEach(i=>{var s;(s=i.docComment)!=null&&s.error&&(p.error(`${r} - Doc comment parsing error. Level: Field`),p.error(`Comment:
7
- ${i.docComment.rawDeclaration}`),p.error(i.docComment.error),p.error("================================="))}),e.properties.forEach(i=>{var s;(s=i.docComment)!=null&&s.error&&(p.error(`${r} - Doc comment parsing error. Level: Property`),p.error(`Comment:
8
- ${i.docComment.rawDeclaration}`),p.error(i.docComment.error),p.error("================================="))}),e.methods.forEach(i=>{var s;(s=i.docComment)!=null&&s.error&&(p.error(`${r} - Doc comment parsing error. Level: Method`),p.error(`Comment:
9
- ${i.docComment.rawDeclaration}`),p.error(i.docComment.error),p.error("================================="))}),e.enums.forEach(i=>{this.logErrorsForSingleType(i)}),e.interfaces.forEach(i=>{this.logErrorsForSingleType(i)}),e.classes.forEach(i=>{this.logErrorsForSingleType(i)})}static logErrorsForInterface(e){e.methods.forEach(t=>{var r;(r=t.docComment)!=null&&r.error&&(p.error(`${e.name} - Doc comment parsing error. Level: Method`),p.error(`Comment: ${t.docComment.rawDeclaration}`),p.error(t.docComment.error),p.error("================================="))})}};a(He,"ErrorLogger");let ye=He;const I=class I{constructor(){this.scopedTypes=[],this.allTypes=[]}static getInstance(){return I.instance||(I.instance=new I),I.instance}populateAll(e){this.allTypes=e}getFromAllByName(e){if(e.includes(".")){const[r,i]=e.split("."),s=this.allTypes.find(d=>d.name.toLowerCase()===r.toLowerCase());if(!s||s.type_name!=="class")return;const o=s,l=[...o.classes,...o.interfaces,...o.enums].find(d=>d.name.toLowerCase()===i);return l?{type:l,isChild:!0,parentType:s}:void 0}const t=this.allTypes.find(r=>r.name.toLowerCase()===e.toLowerCase());if(t)return{type:t,isChild:!1}}populateScoped(e){this.scopedTypes=e}getFromScopedByName(e){return this.scopedTypes.find(t=>t.name===e)}};a(I,"TypesRepository");let $=I;const Ke=class Ke{getLinkingStrategy(){return"root-relative"}};a(Ke,"ProcessorTypeTranspiler");let V=Ke;const et=class et{constructor(){this._files=[]}files(){return this._files}pushFile(e){this._files.push(e)}};a(et,"FileContainer");let U=et;const se=class se{static getSanitizedGroup(e){return this.getClassGroup(e).replace(/ /g,"-").replace(".","")}static getFileLink(e){const[t,r]=se.getFileLinkTuple(e);return`[${t}](${r})`}static getFileLinkTuple(e){var t;const i=`${(t=u.getInstance().getRootDir())!=null?t:""}${this.getDirectoryRoot(e)}`,s=`${u.getInstance().getNamespacePrefix()}${e.name}`;return[s,`${i}${s}.md`]}static getFileLinkByTypeName(e){const t=$.getInstance().getFromScopedByName(e);return t?this.getFileLink(t):`[${e}](${e})`}static getDirectoryRoot(e){if(u.getInstance().getLinkingStrategy()==="root-relative")return`/${this.getSanitizedGroup(e)}/`;const t=q.getInstance().getTypeBeingProcessed();return t?this.getClassGroup(t)===this.getClassGroup(e)?"./":`../${this.getSanitizedGroup(e)}/`:`./${this.getSanitizedGroup(e)}/`}static getClassGroup(e){var t,r;const i=(t=e.docComment)==null?void 0:t.annotations.find(s=>s.name.toLowerCase()==="group");return(r=i==null?void 0:i.body)!=null?r:u.getInstance().getDefaultGroupName()}};a(se,"ClassFileGeneratorHelper");let T=se;const tt=class tt{constructor(e,t){this.fileName=e,this.dir=t,this._contents=""}get body(){return this._contents}addText(e){this._contents+=e,this.addBlankLine()}addBlankLine(){this._contents+=`
10
- `}};a(tt,"OutputFile");let X=tt;const G=class G extends X{fileExtension(){return".md"}addTitle(e,t=1){let r="";for(let i=0;i<t;i++)r+="#";r+=" ",r+=e,this._contents+=r,this.addBlankLine()}addText(e){return super.addText(e),this}addLink(e){this.addText(`{@link ${e}}`)}startCodeBlock(e="apex"){this.addText(`\`\`\`${e}`)}endCodeBlock(){this.addText("```"),this.addBlankLine()}addHorizontalRule(){this._contents+="---",this.addBlankLine()}initializeTable(...e){this.addBlankLine(),this._contents+="|",e.forEach(t=>{this._contents+=t+"|"}),this.addBlankLine(),this._contents+="|",e.forEach(()=>{this._contents+="---|"}),this.addBlankLine()}addTableRow(...e){this._contents+="|",e.forEach(t=>{this._contents+=this._replaceInlineReferences(t)+"|"}),this.addBlankLine()}addListItem(e){this._contents+=`* ${e}`}static replaceInlineLinks(e){const t=e.match(/<<.*?>>/g);t==null||t.forEach(c=>{const l=c.replace("<<","").replace(">>","");e=e.replace(c,T.getFileLinkByTypeName(l))});const r="{@link (.*?)}",i=new RegExp(r,"gi");let s;const o=[];do s=i.exec(e),s&&o.push(s);while(s);for(const c of o)e=e.replace(c[0],T.getFileLinkByTypeName(c[1]));return e}static replaceInlineEmails(e){const t="{@email (.*?)}",r=new RegExp(t,"gi");let i;const s=[];do i=r.exec(e),i&&s.push(i);while(i);for(const o of s)e=e.replace(o[0],`[${o[1]}](mailto:${o[1]})`);return e}_replaceInlineReferences(e){return e=G.replaceInlineLinks(e),e=G.replaceInlineEmails(e),e}};a(G,"MarkdownFile");let S=G;function Zn(n,e){return n.length>e?n.substr(0,e-1)+"&hellip;":n}a(Zn,"truncate");const Jn=a(n=>n.replace(/\//g," ").replace(/([A-Z])/g,e=>` ${e}`).replace(/\b\w/g,e=>e.toUpperCase()).replace(/^./,e=>e.toUpperCase()).trim(),"camel2title"),nt=class nt extends S{constructor(e,t,r){super(e,""),this.fileName=e,this.types=t,r&&this.addText(r),this.addTitle(u.getInstance().getTitle()),this.addTypeEntries(t)}addTypeEntries(e){this.group(e).forEach((r,i)=>{this.addTitle(i,2),r.forEach(s=>{this.addTypeEntry(s)})})}addTypeEntry(e){var t;if(this.addBlankLine(),this.addTitle(T.getFileLink(e),3),this.addBlankLine(),(t=e.docComment)!=null&&t.descriptionLines){const r=e.docComment.descriptionLines.reduce((i,s)=>i+s+`
11
- `,"");this.addText(Zn(r,300)),this.addBlankLine()}}group(e){return e.reduce((t,r)=>{const i=this.getClassGroup(r),s=t.get(i)||[];return s.push(r),t.set(i,s),t},new Map)}getClassGroup(e){var t,r,i;return(i=(r=(t=e.docComment)==null?void 0:t.annotations.find(s=>s.name==="group"))==null?void 0:r.body)!=null?i:u.getInstance().getDefaultGroupName()}};a(nt,"MarkdownHomeFile");let Y=nt;const rt=class rt{constructor(e){this.type=e}sortType(e){return u.getInstance().sortMembersAlphabetically()?e.sort((t,r)=>t.name.localeCompare(r.name)):e}};a(rt,"Walker");let B=rt;const it=class it extends B{walk(e){e.onTypeDeclaration(this.type);const t=this.type;t.constructors.length&&e.onConstructorDeclaration(this.type.name,t.constructors),t.fields.length&&e.onFieldsDeclaration(this.sortType(t.fields)),t.properties.length&&e.onPropertiesDeclaration(this.sortType(t.properties)),t.methods.length&&e.onMethodsDeclaration(this.sortType(t.methods)),t.enums.length&&e.onInnerEnumsDeclaration(this.sortType(t.enums)),t.classes.length&&e.onInnerClassesDeclaration(this.sortType(t.classes)),t.interfaces.length&&e.onInnerInterfacesDeclaration(this.sortType(t.interfaces))}};a(it,"ClassWalker");let ve=it;const st=class st extends B{walk(e){e.onTypeDeclaration(this.type)}};a(st,"EnumWalker");let _e=st;const at=class at extends B{walk(e){e.onTypeDeclaration(this.type);const t=this.type;t.methods.length&&e.onMethodsDeclaration(this.sortType(t.methods))}};a(at,"InterfaceWalker");let Ce=at;const ot=class ot{static get(e){switch(e.type_name){case"class":return new ve(e);case"enum":return new _e(e);case"interface":return new Ce(e)}throw Error("Walker not found for type.")}};a(ot,"WalkerFactory");let be=ot;function Rt(n,e){var t;const r=(t=e.docComment)==null?void 0:t.annotations.find(i=>i.name==="mermaid");r&&(n.addBlankLine(),n.startCodeBlock("mermaid"),r.bodyLines.forEach(i=>{n.addText(i)}),n.endCodeBlock(),n.addBlankLine())}a(Rt,"addMermaid");function jt(n,e){var t;(t=e.docComment)==null||t.annotations.filter(s=>s.name!=="description").filter(s=>s.name!=="mermaid").forEach(s=>{n.addBlankLine(),n.addText(i(s)),n.addBlankLine()});function r(s){const o=s.split(/[-_]+/),c=[];for(const l of o)c.push(l.charAt(0).toUpperCase()+l.slice(1));return c.join(" ")}a(r,"splitAndCapitalize");function i(s){let o=s.body;return s.name.toLowerCase()==="see"&&(o=T.getFileLinkByTypeName(s.body)),`**${r(s.name)}** ${o}`}a(i,"buildDocAnnotationText")}a(jt,"addCustomDocCommentAnnotations");function Qn(n,e){var t;if(e.annotations.forEach(r=>{n.addBlankLine(),n.addText(`\`${r.type.toUpperCase()}\``)}),(t=e.docComment)!=null&&t.descriptionLines){n.addBlankLine();for(const r of e.docComment.descriptionLines)n.addText(r);n.addBlankLine()}e.type_name==="class"&&Hn(e,n),e.type_name==="interface"&&Kn(e,n),jt(n,e),Rt(n,e)}a(Qn,"declareType");function Hn(n,e){const t=n;if(t.extended_class&&(e.addBlankLine(),e.addText("**Inheritance**"),e.addBlankLine(),Bt(e,t),e.addText(n.name),e.addBlankLine()),t.implemented_interfaces.length){e.addBlankLine(),e.addText("**Implemented types**"),e.addBlankLine();for(let r=0;r<t.implemented_interfaces.length;r++){const i=t.implemented_interfaces[r];e.addLink(i),r<t.implemented_interfaces.length-1&&e.addText(", ")}e.addBlankLine()}}a(Hn,"addInheritanceSectionForClass");function Kn(n,e){const t=n;if(t.extended_interfaces.length){e.addBlankLine(),e.addText("**Extended types**"),e.addBlankLine();for(let r=0;r<t.extended_interfaces.length;r++){const i=t.extended_interfaces[r];e.addLink(i),r<t.extended_interfaces.length-1&&e.addText(", ")}}}a(Kn,"addInheritanceSectionForInterface");function Bt(n,e){if(!e.extended_class)return;const t=$.getInstance().getFromScopedByName(e.extended_class);t&&(t.type_name==="class"&&Bt(n,t),n.addLink(t.name),n.addText(" > "))}a(Bt,"addParent");function Nt(n,e,t,r=""){e.forEach(i=>{var s,o;const c=Z(i)?`${i.typeReference.rawDeclaration} ${i.name}`:r;n.addTitle(`\`${er(i.access_modifier,c,i)}\``,t+2),Z(i)&&i.inherited&&(n.addBlankLine(),n.addText("*Inherited*"),n.addBlankLine()),i.annotations.forEach(l=>{n.addBlankLine(),n.addText(`\`${l.type.toUpperCase()}\``)}),(s=i.docComment)!=null&&s.description&&(n.addBlankLine(),n.addText(i.docComment.description),n.addBlankLine()),i.parameters.length&&tr(n,i,t),Z(i)&&nr(n,i,t),rr(n,i,t),jt(n,i),Rt(n,i),(o=i.docComment)!=null&&o.exampleAnnotation&&ir(n,i,t)}),n.addHorizontalRule()}a(Nt,"declareMethod");function er(n,e,t){let r=`${e}(`;Z(t)&&t.memberModifiers.length?r=n+" "+t.memberModifiers.join(" ")+" "+r:r=n+" "+r;const i=t.parameters.map(s=>`${s.typeReference.rawDeclaration} ${s.name}`);return r+=i.join(", "),`${r})`}a(er,"buildSignature");function tr(n,e,t){var r,i;(r=e.docComment)!=null&&r.paramAnnotations.length&&(n.addTitle("Parameters",t+3),n.initializeTable("Param","Description"),(i=e.docComment)==null||i.paramAnnotations.forEach(s=>{const o=s.paramName,c=s.bodyLines.join(" ");n.addTableRow(`\`${o}\``,c)}),n.addBlankLine())}a(tr,"addParameters");function nr(n,e,t){var r,i;(r=e.docComment)!=null&&r.returnAnnotation&&(n.addTitle("Returns",t+3),n.initializeTable("Type","Description"),n.addTableRow(`\`${e.typeReference.rawDeclaration}\``,(i=e.docComment)==null?void 0:i.returnAnnotation.bodyLines.join(" ")),n.addBlankLine())}a(nr,"addReturns");function rr(n,e,t){var r,i;(r=e.docComment)!=null&&r.throwsAnnotations.length&&(n.addTitle("Throws",t+3),n.initializeTable("Exception","Description"),(i=e.docComment)==null||i.throwsAnnotations.forEach(s=>{const o=s.exceptionName,c=s.bodyLines.join(" ");n.addTableRow(`\`${o}\``,c)}),n.addBlankLine())}a(rr,"addThrowsBlock");function ir(n,e,t){var r;n.addTitle("Example",t+3),n.startCodeBlock(),(r=e.docComment)==null||r.exampleAnnotation.bodyLines.forEach(i=>{n.addText(i)}),n.endCodeBlock(),n.addBlankLine()}a(ir,"addExample");function Z(n){return n.typeReference!==void 0}a(Z,"isMethod");function Mt(n,e,t,r=!1){n.addBlankLine(),e.forEach(i=>{sr(n,i,t,r)}),n.addHorizontalRule()}a(Mt,"declareField");function sr(n,e,t,r){var i,s,o;if(!r)n.addTitle(`\`${e.access_modifier} ${e.name}\` \u2192 \`${e.typeReference.rawDeclaration}\``,t+2),n.addBlankLine(),e.inherited&&n.addText("*Inherited*"),e.annotations.forEach(c=>{n.addText(`\`${c.type.toUpperCase()}\` `)}),(i=e.docComment)!=null&&i.description&&(n.addBlankLine(),n.addText(e.docComment.description)),n.addBlankLine();else{let c="";const l=!!e.annotations.length;l&&(c+=" ["),e.annotations.forEach(h=>{c+=`\`${h.type.toUpperCase()}\` `}),l&&(c+="]");let d="";(s=e.docComment)!=null&&s.description&&(d=` - ${(o=e.docComment)==null?void 0:o.description}`);let f=`\`${e.access_modifier} ${e.name}\` \u2192 \`${e.typeReference.rawDeclaration}\``;e.inherited&&(f+="(*Inherited*)"),f+=`${c} ${d}`,n.addListItem(f),n.addBlankLine()}}a(sr,"addFieldSection");const ae=class ae extends S{constructor(e,t=1,r,i=!1){super(`${u.getInstance().getNamespacePrefix()}${e.name}`,T.getSanitizedGroup(e)),this.type=e,this.headingLevel=t,this.isInner=i,r&&this.addText(r),be.get(e).walk(this)}onTypeDeclaration(e){let t;this.isInner?t=e.name:this.isClass(e)&&e.classModifier?t=`${e.classModifier} ${u.getInstance().getNamespacePrefix()}${e.name}`:t=`${u.getInstance().getNamespacePrefix()}${e.name}`,this.addTitle(t,this.headingLevel),Qn(this,e)}isClass(e){return e.type_name==="class"}onConstructorDeclaration(e,t){this.addTitle("Constructors",this.headingLevel+1),this.declareMethodWithGroupings(t,e)}onFieldsDeclaration(e){this.addTitle("Fields",this.headingLevel+1),this.declareFieldOrProperty(e)}onPropertiesDeclaration(e){this.addTitle("Properties",this.headingLevel+1),this.declareFieldOrProperty(e)}onMethodsDeclaration(e){this.addTitle("Methods",this.headingLevel+1),this.declareMethodWithGroupings(e)}onInnerEnumsDeclaration(e){this.addInnerTypes("Enums",e)}onInnerClassesDeclaration(e){this.addInnerTypes("Classes",e)}onInnerInterfacesDeclaration(e){this.addInnerTypes("Interfaces",e,!1)}addInnerTypes(e,t,r=!0){this.addTitle(e,this.headingLevel+1),t.forEach(i=>{const s=new ae(i,this.headingLevel+2,void 0,!0);this.addText(s._contents)}),r&&this.addHorizontalRule()}hasGroupings(e){return!!e.find(t=>!!t.group)}declareMethodWithGroupings(e,t=""){if(!this.hasGroupings(e))Nt(this,e,this.headingLevel,t);else{const i=this.group(e);for(const s in i){this.startGroup(s,i[s][0].groupDescription);const o=i[s];Nt(this,o,this.headingLevel,t),this.endGroup()}}}declareFieldOrProperty(e){if(!this.hasGroupings(e))Mt(this,e,this.headingLevel,!1);else{const r=this.group(e);for(const i in r){this.startGroup(i,r[i][0].groupDescription);const s=r[i];Mt(this,s,this.headingLevel,!0),this.endGroup()}}}startGroup(e,t){this.headingLevel=this.headingLevel+2,this.addTitle(e,this.headingLevel),t&&this.addText(t)}endGroup(){this.headingLevel=this.headingLevel-2}group(e){return e.reduce((t,r)=>{var i;const s=(i=r.group)!=null?i:"Other",o=t[s]||[];return o.push(r),t[s]=o,t},{})}};a(ae,"MarkdownTypeFile");let J=ae;const ct=class ct extends V{constructor(){super(),this.onBeforeProcess=e=>{this._fileContainer.pushFile(new Y(this.homeFileName(),e))},this._fileContainer=new U}fileBuilder(){return this._fileContainer}onProcess(e){this._fileContainer.pushFile(new J(e))}};a(ct,"MarkdownTranspilerBase");let Q=ct;const lt=class lt extends Q{constructor(){super(...arguments),this.onBeforeProcess=e=>{this._fileContainer.pushFile(new Y(this.homeFileName(),e,this.frontMatterForHomeFile))}}homeFileName(){return"index"}onProcess(e){this._fileContainer.pushFile(new J(e,1,this.getFrontMatterHeader(e)))}get frontMatterForHomeFile(){return`---
12
- layout: default
13
- ---`}getFrontMatterHeader(e){var t;const r=["---"];r.push("layout: default");const i={name:e.name,typeName:e.type_name,accessModifier:e.access_modifier,group:e.group,description:(t=e.docComment)==null?void 0:t.description},s=u.getInstance().frontMatterHeader(i);return s&&s.forEach(o=>{r.push(o)}),r.push("---"),r.join(`
14
- `)}getLinkingStrategy(){return"path-relative"}};a(lt,"JekyllDocsProcessor");let $e=lt;const dt=class dt extends Q{homeFileName(){return"README"}getLinkingStrategy(){return"root-relative"}};a(dt,"DocsifyDocsProcessor");let Pe=dt;var ar=Object.defineProperty,or=Object.defineProperties,cr=Object.getOwnPropertyDescriptors,Ft=Object.getOwnPropertySymbols,lr=Object.prototype.hasOwnProperty,dr=Object.prototype.propertyIsEnumerable,Gt=a((n,e,t)=>e in n?ar(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$7"),pr=a((n,e)=>{for(var t in e||(e={}))lr.call(e,t)&&Gt(n,t,e[t]);if(Ft)for(var t of Ft(e))dr.call(e,t)&&Gt(n,t,e[t]);return n},"__spreadValues$7"),ur=a((n,e)=>or(n,cr(e)),"__spreadProps$6");const pt=class pt extends X{constructor(e){super(u.getInstance().openApiFileName(),""),this.openApiModel=e,this.addText(JSON.stringify(ur(pr({},e),{namespace:void 0}),null,2))}fileExtension(){return".json"}};a(pt,"OpenapiTypeFile");let we=pt;const fr="3.1.0",zt="/services/apexrest/",ut=class ut{constructor(e,t,r){this.namespace=r,this.openapi=fr,this.info={title:e,version:t},this.servers=[{url:this.getServerUrl()}],this.paths={},this.tags=[]}getServerUrl(){return this.namespace?`${zt}${this.namespace}/`:zt}};a(ut,"OpenApi");let Te=ut;const ft=class ft{constructor(e){this.classMirror=e,this.hasAnnotation=(t,r)=>t.annotations.some(i=>i.name.toLowerCase()===r)}getMethodsByAnnotation(e){return this.classMirror.methods.filter(t=>this.hasAnnotation(t,e))}};a(ft,"ClassMirrorWrapper");let Le=ft;var hr=Object.defineProperty,mr=Object.defineProperties,gr=Object.getOwnPropertyDescriptors,kt=Object.getOwnPropertySymbols,yr=Object.prototype.hasOwnProperty,vr=Object.prototype.propertyIsEnumerable,qt=a((n,e,t)=>e in n?hr(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$6"),Oe=a((n,e)=>{for(var t in e||(e={}))yr.call(e,t)&&qt(n,t,e[t]);if(kt)for(var t of kt(e))vr.call(e,t)&&qt(n,t,e[t]);return n},"__spreadValues$6"),Ae=a((n,e)=>mr(n,gr(e)),"__spreadProps$5");const ht=class ht{constructor(){this.isReferenceString=e=>typeof e=="string"||e instanceof String}build(e){const t=e,r=/\[(.*?)]/g,i=e.match(r);let s=[];i&&i.length>0&&(s=xe.build(i[0]),e=e.replace(r,""));const[o,c]=this.handlePossibleCollectionReference(e),l=$.getInstance().getFromAllByName(o);if(!l)throw new Error(`The referenced type ${e} was not found.`);if(l.type.type_name!=="class")throw new Error(`Expected the referenced type to be a class, but found a ${l.type.type_name}.`);const d=Ae(Oe({},l),{originalTypeName:t,isCollection:c,referenceOverrides:s});return this.buildReferenceFromType(d)}handlePossibleCollectionReference(e){return e=e.toLowerCase(),e.startsWith("list<")&&e.endsWith(">")?(e=e.replace("list<",""),e=e.replace(">",""),[e,!0]):e.startsWith("set<")&&e.endsWith(">")?(e=e.replace("set<",""),e=e.replace(">",""),[e,!0]):[e,!1]}buildReferenceFromType(e){const t=[...e.type.properties,...e.type.fields].filter(o=>!o.memberModifiers.includes("static")).filter(o=>!o.memberModifiers.includes("transient")),r={};let i=[];return t.forEach(o=>{var c,l;const d=e.referenceOverrides.find(f=>f.propertyName.toLowerCase()===o.name.toLowerCase());if(d){const f=this.build(d.referenceName);r[o.name]=f.entrypointReferenceObject,f.referenceComponents.forEach(h=>i.push(h))}else{const f=(c=o.docComment)==null?void 0:c.annotations.find(h=>h.name.toLowerCase()==="http-schema");if(f)this.handleOverriddenSchema(f,r,o,i);else{const h=this.getReferenceType(o.typeReference);r[o.name]=h.schema,i.push(...h.referenceComponents)}}r[o.name].description=(l=o.docComment)==null?void 0:l.description}),i=[...this.buildMainReferenceComponent(e,r),...i],{entrypointReferenceObject:{$ref:`#/components/schemas/${this.getReferenceName(e)}`},referenceComponents:i}}handleOverriddenSchema(e,t,r,i){const s=e==null?void 0:e.bodyLines.reduce((l,d)=>l+`
15
- `+d),o=xt.load(s);if(this.isReferenceString(o)){const l=this.build(o);t[r.name]=l.entrypointReferenceObject,l.referenceComponents.forEach(d=>i.push(d))}else t[r.name]=o}getReferenceName(e){var t;let r=e.type.name;return e.isChild&&(r=`${(t=e.parentType)==null?void 0:t.name}.${e.type.name}`),e.isCollection&&(r=`${r}_array`),e.referenceOverrides.length&&(r=`${r}_${e.originalTypeName}`),r}buildMainReferenceComponent(e,t){const r=this.getReferenceName(Ae(Oe({},e),{isCollection:!1})),s=[{referencedClass:r,schema:{type:"object",properties:t}}];return e.isCollection?[{referencedClass:this.getReferenceName(e),schema:{type:"array",items:{$ref:`#/components/schemas/${r}`}}},...s]:s}getReferenceType(e){const t=e.type.toLowerCase();switch(t){case"boolean":return{schema:{type:"boolean"},referenceComponents:[]};case"date":return{schema:{type:"string",format:"date"},referenceComponents:[]};case"datetime":return{schema:{type:"string",format:"date-time"},referenceComponents:[]};case"decimal":return{schema:{type:"number"},referenceComponents:[]};case"double":return{schema:{type:"number"},referenceComponents:[]};case"id":return{schema:{type:"string"},referenceComponents:[]};case"integer":return{schema:{type:"integer"},referenceComponents:[]};case"long":return{schema:{type:"integer",format:"int64"},referenceComponents:[]};case"string":return{schema:{type:"string"},referenceComponents:[]};case"time":return{schema:{type:"string",format:"time"},referenceComponents:[]};case"list":return this.buildCollectionPair(e);case"set":return this.buildCollectionPair(e);case"map":return{schema:{type:"object"},referenceComponents:[]};case"object":return{schema:{type:"object"},referenceComponents:[]};default:{const r=$.getInstance().getFromAllByName(t);if(!r)return{schema:{type:"object"},referenceComponents:[]};const i=this.buildReferenceFromType(Ae(Oe({},r),{isCollection:!1,referenceOverrides:[],originalTypeName:t}));return{schema:i.entrypointReferenceObject,referenceComponents:[...i.referenceComponents]}}}}buildCollectionPair(e){const t=this.getReferenceType(e.ofType);return{schema:{type:"array",items:t.schema},referenceComponents:[...t.referenceComponents]}}};a(ht,"ReferenceBuilder");let N=ht;const mt=class mt{static build(e){return e.replace(/[[\]]/g,"").split(",").map(i=>i.replace(/\s/g,"")).map(i=>{const[s,o]=i.split(":");return{propertyName:s,referenceName:o}})}};a(mt,"ReferenceOverrides");let xe=mt;const gt=class gt{constructor(){this.isReferenceString=e=>typeof e=="string"||e instanceof String}build(e){let t;return this.isReferenceString(e.schema)&&(t=new N().build(e.schema)),{reference:t,body:this.buildBody(e,t)}}getOpenApiSchemaFromApexDocSchema(e,t){return this.isReferenceString(e.schema)?t.entrypointReferenceObject:e.schema}};a(gt,"Builder");let M=gt;var _r=Object.defineProperty,Cr=Object.defineProperties,br=Object.getOwnPropertyDescriptors,Wt=Object.getOwnPropertySymbols,$r=Object.prototype.hasOwnProperty,Pr=Object.prototype.propertyIsEnumerable,Vt=a((n,e,t)=>e in n?_r(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$5"),wr=a((n,e)=>{for(var t in e||(e={}))$r.call(e,t)&&Vt(n,t,e[t]);if(Wt)for(var t of Wt(e))Pr.call(e,t)&&Vt(n,t,e[t]);return n},"__spreadValues$5"),Tr=a((n,e)=>Cr(n,br(e)),"__spreadProps$4");const yt=class yt extends M{buildBody(e,t){return Tr(wr({},e),{schema:this.getOpenApiSchemaFromApexDocSchema(e,t)})}};a(yt,"ParameterObjectBuilder");let Ie=yt;const vt=class vt extends M{buildBody(e,t){let r=`Status code ${e.statusCode}`;return e.description&&(r=e.description),{description:r,content:{"application/json":{schema:this.getOpenApiSchemaFromApexDocSchema(e,t)}}}}};a(vt,"ResponsesBuilder");let Ee=vt;const _t=class _t extends M{buildBody(e,t){return{description:e.description,content:{"application/json":{schema:this.getOpenApiSchemaFromApexDocSchema(e,t)}},required:e.required}}};a(_t,"RequestBodyBuilder");let H=_t;const Ct=class Ct{constructor(e){this.methodMirror=e,this.hasDocCommentAnnotation=t=>{var r;return(r=this.methodMirror.docComment)==null?void 0:r.annotations.some(i=>i.name.toLowerCase()===t)},this.getDocCommentAnnotation=t=>{var r;return(r=this.methodMirror.docComment)==null?void 0:r.annotations.find(i=>i.name.toLowerCase()===t)}}};a(Ct,"MethodMirrorWrapper");let De=Ct;const bt=class bt{constructor(e){this.openApiModel=e}parseMethod(e,t,r,i){var s,o;const l=new Le(e).getMethodsByAnnotation(`http${r}`);if(!l.length)return;const d=l[0];this.openApiModel.paths[t][r]={},this.openApiModel.paths[t][r].tags=[i],(s=d.docComment)!=null&&s.description&&(this.openApiModel.paths[t][r].description=d.docComment.description);const f=new De(d);f.hasDocCommentAnnotation("summary")&&(this.openApiModel.paths[t][r].summary=(o=f.getDocCommentAnnotation("summary"))==null?void 0:o.body),this.parseHttpAnnotation(d,t,r,"http-request-body",this.addRequestBodyToOpenApi.bind(this),this.fallbackHttpRequestBodyParser(t,r)),this.parseHttpAnnotation(d,t,r,"http-parameter",this.addParametersToOpenApi.bind(this)),this.parseHttpAnnotation(d,t,r,"http-response",this.addHttpResponsesToOpenApi.bind(this),this.getFallbackHttpResponseParser(t,r))}parseHttpAnnotation(e,t,r,i,s,o){var c;const l=(c=e.docComment)==null?void 0:c.annotations.filter(d=>d.name===i);if(!(l!=null&&l.length)){o&&o(e);return}for(const d of l){const f=d==null?void 0:d.bodyLines.reduce((h,m)=>h+`
16
- `+m);if(!f)return;this.addToOpenApiStrategy(f,t,r,s)}}addToOpenApiStrategy(e,t,r,i){const s=xt.load(e),o=new H().build(s);i(s,t,r),this.addReference(o)}addRequestBodyToOpenApi(e,t,r){const i=new H().build(e);this.openApiModel.paths[t][r].requestBody=i.body}addParametersToOpenApi(e,t,r){const i=new Ie().build(e);this.openApiModel.paths[t][r].parameters===void 0&&(this.openApiModel.paths[t][r].parameters=[]),this.openApiModel.paths[t][r].parameters.push(i.body)}addHttpResponsesToOpenApi(e,t,r){const i=new Ee().build(e);this.openApiModel.paths[t][r].responses===void 0&&(this.openApiModel.paths[t][r].responses={}),this.openApiModel.paths[t][r].responses[e.statusCode]=i.body}fallbackHttpRequestBodyParser(e,t){return r=>{const i=r.parameters;if(!i.length)return;const s={};i.forEach(o=>{const c=o.name,l=new N().getReferenceType(o.typeReference);s[c]=l.schema,this.addReference({reference:{entrypointReferenceObject:l.schema,referenceComponents:l.referenceComponents}})}),this.openApiModel.paths[e][t].requestBody={content:{"application/json":{schema:{type:"object",properties:s}}}}}}getFallbackHttpResponseParser(e,t){return r=>{var i,s;const o=r.typeReference;if(o.type.toLowerCase()==="void")return;const c=new N().getReferenceType(o);this.addReference({reference:{entrypointReferenceObject:c.schema,referenceComponents:c.referenceComponents}}),this.openApiModel.paths[e][t].responses===void 0&&(this.openApiModel.paths[e][t].responses={}),this.openApiModel.paths[e][t].responses[200]={description:(s=(i=r.docComment)==null?void 0:i.description)!=null?s:"Status code 200",content:{"application/json":{schema:c.schema}}}}}addReference(e){if(e.reference){if(this.openApiModel.components===void 0&&(this.openApiModel.components={schemas:{}}),!e.reference.referenceComponents.length)return;e.reference.referenceComponents.forEach(t=>{this.openApiModel.components.schemas[t.referencedClass]=t.schema})}}};a(bt,"MethodParser");let Se=bt;const $t=class $t extends V{constructor(){super(),this.onAfterProcess=()=>{this._fileContainer.pushFile(new we(this.openApiModel))},this._fileContainer=new U;const e=u.getInstance().getOpenApiTitle();if(!e)throw Error("No OpenApi title was provided.");this.openApiModel=new Te(e,"1.0.0",u.getInstance().getNamespace())}fileBuilder(){return this._fileContainer}onProcess(e){var t,r;p.logSingle(`Processing ${e.name}`,!1,"green",!1);const i=this.getEndpointPath(e);if(!i)return;this.openApiModel.paths[i]={},(t=e.docComment)!=null&&t.description&&(this.openApiModel.paths[i].description=e.docComment.description);const s=e,o=Jn(i);this.openApiModel.tags.push({name:o,description:(r=e.docComment)==null?void 0:r.description});const c=new Se(this.openApiModel);c.parseMethod(s,i,"get",o),c.parseMethod(s,i,"patch",o),c.parseMethod(s,i,"post",o),c.parseMethod(s,i,"put",o),c.parseMethod(s,i,"delete",o)}getEndpointPath(e){var t;const r=e.annotations.find(o=>o.name.toLowerCase()==="restresource"),i=(t=r==null?void 0:r.elementValues)==null?void 0:t.find(o=>o.key.toLowerCase()==="urlmapping");if(!i)return p.error(`Type does not contain urlMapping annotation ${e.name}`),null;let s=i.value.replaceAll('"',"").replaceAll("'","").replaceAll("/*","/");return s.startsWith("/")&&(s=s.substring(1)),s}};a($t,"OpenApiDocsProcessor");let Re=$t;const Pt=class Pt{static get(e){if(this.typeTranspilerCache)return this.typeTranspilerCache;switch(e){case"jekyll":return this.typeTranspilerCache=new $e,this.typeTranspilerCache;case"docsify":return this.typeTranspilerCache=new Pe,this.typeTranspilerCache;case"openapi":return this.typeTranspilerCache=new Re,this.typeTranspilerCache;case"plain-markdown":throw Error("Plain Markdown processor is not supported through this factory anymore.");default:throw Error("Invalid target generator")}}};a(Pt,"TypeTranspilerFactory");let K=Pt;function Ut(n,...e){return(...t)=>n(...e,...t)}a(Ut,"apply");function Lr(n){return{__type:"link",title:n,url:`mailto:${n}`}}a(Lr,"defaultGetEmailByReference");function Or(n,e,t=Lr){const r=Ut(Ir,e),i=Ut(Dr,t);return b.pipe(Ar([n]),r,i)}a(Or,"replaceInlineReferences");function Ar(n){return n.flatMap(e=>xr(e))}a(Ar,"inlineCode$1");function xr(n){if(typeof n!="string")return[n];function e(s){return{__type:"inline-code",content:s}}a(e,"inlineCodeLink");const t=n,i=je("`([^`]*)`",t);return Be(i,t,e)}a(xr,"inlineCodeContent");function Ir(n,e){return e.flatMap(t=>Er(t,n))}a(Ir,"replaceInlineLinks");function Er(n,e){if(typeof n!="string")return[n];const t=n,i=je("{@link (.*?)}|<<([^>]+)>>",t);return Be(i,t,e)}a(Er,"inlineLinkContent");function Dr(n,e){return e.flatMap(t=>Sr(t,n))}a(Dr,"replaceInlineEmails");function Sr(n,e){if(typeof n!="string")return[n];const t=n,i=je("{@email (.*?)}",t);return Be(i,t,e)}a(Sr,"inlineEmailContent");function je(n,e){const t=new RegExp(n,"gi");let r;const i=[];do r=t.exec(e),r&&i.push(r);while(r);return i}a(je,"match");function Be(n,e,t){if(n.length===0)return[e];const r=[];let i=0;for(const s of n){const o=s.index,c=s[0].length,l=s.slice(1).find(d=>d);l&&(r.push(e.slice(i,o)),r.push(t(l)),i=o+c)}return i<e.length&&r.push(e.slice(i)),r}a(Be,"createRenderableContents");function Xt(n){return Object.keys(n).includes("__type")&&n.__type==="empty-line"}a(Xt,"isEmptyLine");function Rr(n){return Object.keys(n).includes("__type")&&n.__type==="code-block"}a(Rr,"isCodeBlock");function jr(n){return Object.keys(n).includes("__type")&&n.__type==="inline-code"}a(jr,"isInlineCode");var Br=Object.defineProperty,Nr=Object.defineProperties,Mr=Object.getOwnPropertyDescriptors,Yt=Object.getOwnPropertySymbols,Fr=Object.prototype.hasOwnProperty,Gr=Object.prototype.propertyIsEnumerable,Zt=a((n,e,t)=>e in n?Br(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$4"),Jt=a((n,e)=>{for(var t in e||(e={}))Fr.call(e,t)&&Zt(n,t,e[t]);if(Yt)for(var t of Yt(e))Gr.call(e,t)&&Zt(n,t,e[t]);return n},"__spreadValues$4"),Qt=a((n,e)=>Nr(n,Mr(e)),"__spreadProps$3");function L(n,e){function t(r){if(!r)return;let i=[];for(let s=0;s<r.length;s++){const o=r[s],c=o.match(/^```([a-zA-Z]*)$/);if(c){const l=c[1]||"apex",d=[];for(s++;s<r.length;){const f=r[s];if(f.trim()==="```")break;d.push(f),s++}i=[...i,{__type:"code-block",language:l,content:d},{__type:"empty-line"}];continue}i=[...i,...Or(o,e),{__type:"empty-line"}]}return i.filter((s,o,c)=>!(Xt(s)&&o===c.length-1))}return a(t,"describableToRenderableContent"),{description:t(n)}}a(L,"adaptDescribable");function ee(n,e,t){var r,i,s;function o(h){var m,v;const _=["description","group","author","date","see","example","mermaid","throws","exception"];return(v=(m=h.docComment)==null?void 0:m.annotations.filter(C=>!_.includes(C.name.toLowerCase())).map(C=>Qt(Jt({},L(C.bodyLines,e)),{name:C.name})))!=null?v:[]}a(o,"extractCustomTags");function c(h,m){var v,_;return(_=(v=h.docComment)==null?void 0:v.annotations.find(C=>C.name.toLowerCase()===m))==null?void 0:_.bodyLines}a(c,"extractAnnotationBodyLines");function l(h,m){var v,_;return(_=(v=h.docComment)==null?void 0:v.annotations.find(C=>C.name.toLowerCase()===m))==null?void 0:_.body}a(l,"extractAnnotationBody");function d(h){var m,v;return(v=(m=h.docComment)==null?void 0:m.annotations.filter(_=>_.name.toLowerCase()==="see").map(_=>_.body))!=null?v:[]}a(d,"extractSeeAnnotations");function f(h,m){if(m)return{__type:"code-block",language:h,content:m}}return a(f,"bodyLinesToCodeBlock"),Qt(Jt({},L((r=n.docComment)==null?void 0:r.descriptionLines,e)),{annotations:n.annotations.map(h=>h.type.toUpperCase()),customTags:o(n),mermaid:{headingLevel:t,heading:"Diagram",value:f("mermaid",c(n,"mermaid"))},example:{headingLevel:t,heading:"Example",value:f("apex",(s=(i=n.docComment)==null?void 0:i.exampleAnnotation)==null?void 0:s.bodyLines)},group:l(n,"group"),author:l(n,"author"),date:l(n,"date"),sees:d(n).map(e)})}a(ee,"adaptDocumentable");var zr=Object.defineProperty,kr=Object.defineProperties,qr=Object.getOwnPropertyDescriptors,Ht=Object.getOwnPropertySymbols,Wr=Object.prototype.hasOwnProperty,Vr=Object.prototype.propertyIsEnumerable,Kt=a((n,e,t)=>e in n?zr(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$3"),Ne=a((n,e)=>{for(var t in e||(e={}))Wr.call(e,t)&&Kt(n,t,e[t]);if(Ht)for(var t of Ht(e))Vr.call(e,t)&&Kt(n,t,e[t]);return n},"__spreadValues$3"),Me=a((n,e)=>kr(n,qr(e)),"__spreadProps$2");function en(n,e,t){var r,i,s;function o(l){const{name:d,parameters:f}=l,h=f.map(m=>m.name).join(", ");return`${d}(${h})`}a(o,"buildTitle");function c(l){const{access_modifier:d,typeReference:f,name:h,memberModifiers:m}=l,v=l.parameters.map(C=>`${C.typeReference.rawDeclaration} ${C.name}`).join(", "),_=m.length>0?`${m.join(" ")} `:"";return{__type:"code-block",language:"apex",content:[`${d} ${_}${f.rawDeclaration} ${h}(${v})`]}}return a(c,"buildSignature"),{headingLevel:t,doc:ee(n,e,t+1),heading:o(n),signature:{headingLevel:t+1,heading:"Signature",value:c(n)},returnType:{headingLevel:t+1,heading:"Return Type",value:Me(Ne({},L((i=(r=n.docComment)==null?void 0:r.returnAnnotation)==null?void 0:i.bodyLines,e)),{type:e(n.typeReference.rawDeclaration)})},throws:{headingLevel:t+1,heading:"Throws",value:(s=n.docComment)==null?void 0:s.throwsAnnotations.map(l=>nn(l,e))},parameters:{headingLevel:t+1,heading:"Parameters",value:n.parameters.map(l=>tn(n,l,e))},inherited:n.inherited}}a(en,"adaptMethod");function Ur(n,e,t,r){var i;function s(c,l){const{parameters:d}=l,f=d.map(h=>h.name).join(", ");return`${c}(${f})`}a(s,"buildTitle");function o(c,l){const{access_modifier:d}=l,f=l.parameters.map(h=>`${h.typeReference.rawDeclaration} ${h.name}`).join(", ");return{__type:"code-block",language:"apex",content:[`${d} ${c}(${f})`]}}return a(o,"buildSignature"),{doc:ee(e,t,r+1),headingLevel:r,heading:s(n,e),signature:{headingLevel:r+1,heading:"Signature",value:o(n,e)},parameters:{headingLevel:r+1,heading:"Parameters",value:e.parameters.map(c=>tn(e,c,t))},throws:{headingLevel:r+1,heading:"Throws",value:(i=e.docComment)==null?void 0:i.throwsAnnotations.map(c=>nn(c,t))}}}a(Ur,"adaptConstructor");function tn(n,e,t){var r;const i=(r=n.docComment)==null?void 0:r.paramAnnotations.find(s=>s.paramName.toLowerCase()===e.name.toLowerCase());return Me(Ne({},L(i==null?void 0:i.bodyLines,t)),{name:e.name,type:t(e.typeReference.rawDeclaration)})}a(tn,"mapParameters");function nn(n,e){return Me(Ne({},L(n.bodyLines,e)),{type:e(n.exceptionName)})}a(nn,"mapThrows");function rn(n,e,t){function r(){const{access_modifier:i,name:s}=n,o=n.memberModifiers.join(" ");return{__type:"code-block",language:"apex",content:[`${i} ${o} ${s}`.replace(/ {2}/g," ")]}}return a(r,"buildSignature"),{headingLevel:t,doc:ee(n,e,t+1),heading:n.name,type:{headingLevel:t+1,heading:"Type",value:e(n.typeReference.rawDeclaration)},inherited:n.inherited,accessModifier:n.access_modifier,signature:{headingLevel:t+1,heading:"Signature",value:r()}}}a(rn,"adaptFieldOrProperty");var Xr=Object.defineProperty,Yr=Object.defineProperties,Zr=Object.getOwnPropertyDescriptors,sn=Object.getOwnPropertySymbols,Jr=Object.prototype.hasOwnProperty,Qr=Object.prototype.propertyIsEnumerable,an=a((n,e,t)=>e in n?Xr(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$2"),R=a((n,e)=>{for(var t in e||(e={}))Jr.call(e,t)&&an(n,t,e[t]);if(sn)for(var t of sn(e))Qr.call(e,t)&&an(n,t,e[t]);return n},"__spreadValues$2"),j=a((n,e)=>Yr(n,Zr(e)),"__spreadProps$1");function Hr(n,e,t){function r(){switch(n.type_name){case"enum":return on(n,e);case"interface":return cn(n,e);case"class":return ln(n,e)}}return a(r,"getRenderable"),j(R({},r()),{namespace:t})}a(Hr,"typeToRenderable");function Fe(n,e,t){function r(i){const s={class:"Class",interface:"Interface",enum:"Enum"};return`${i.name} ${s[i.type_name]}`}return a(r,"getHeading"),{headingLevel:t,heading:r(n),doc:ee(n,e,t+1),name:n.name,meta:{accessModifier:n.access_modifier}}}a(Fe,"baseTypeAdapter");function on(n,e,t=1){return j(R({type:"enum"},Fe(n,e,t)),{values:{headingLevel:t+1,heading:"Values",value:n.values.map(r=>{var i;return j(R({},L((i=r.docComment)==null?void 0:i.descriptionLines,e)),{value:r.name})})}})}a(on,"enumTypeToEnumSource");function cn(n,e,t=1){return j(R({type:"interface"},Fe(n,e,t)),{extends:n.extended_interfaces.map(e),methods:{headingLevel:t+1,heading:"Methods",value:n.methods.map(r=>en(r,e,t+2))}})}a(cn,"interfaceTypeToInterfaceSource");function ln(n,e,t=1){return j(R({type:"class"},Fe(n,e,t)),{classModifier:n.classModifier,sharingModifier:n.sharingModifier,implements:n.implemented_interfaces.map(e),extends:n.inheritanceChain.map(e),methods:te("Methods",n.methods,en,e,t+1),constructors:te("Constructors",n.constructors,(r,i,s)=>Ur(n.name,r,i,s),e,t+1),fields:te("Fields",n.fields,rn,e,t+1),properties:te("Properties",n.properties,rn,e,t+1),innerClasses:{headingLevel:t+1,heading:"Classes",value:n.classes.map(r=>ln(j(R({},r),{inheritanceChain:[]}),e,t+2))},innerEnums:{headingLevel:t+1,heading:"Enums",value:n.enums.map(r=>on(r,e,t+2))},innerInterfaces:{headingLevel:t+1,heading:"Interfaces",value:n.interfaces.map(r=>cn(r,e,t+2))}})}a(ln,"classTypeToClassSource");function te(n,e,t,r,i){return{headingLevel:i,heading:n,isGrouped:dn(e),value:dn(e)?Kr(e,t,r,i+1):pn(e,t,r,i+1)}}a(te,"adaptMembers");function dn(n){return n.some(e=>e.group)}a(dn,"hasGroup");function pn(n,e,t,r){return n.map(i=>e(i,t,r))}a(pn,"toFlat");function Kr(n,e,t,r){const i=ei(n);return Object.entries(i).map(([s,o])=>ti(r,s,e,o,t))}a(Kr,"toGroupedMembers");function ei(n){return n.reduce((e,t)=>{var r,i;const s=(r=t.group)!=null?r:"Other";return e[s]=(i=e[s])!=null?i:[],e[s].push(t),e},{})}a(ei,"groupByGroupName");function ti(n,e,t,r,i){return{headingLevel:n,heading:e,groupDescription:r[0].groupDescription,value:pn(r,t,i,n+1)}}a(ti,"singleGroup");const ni=`
2
+ 'use strict';
3
+
4
+ var _function = require('fp-ts/function');
5
+ var E = require('fp-ts/Either');
6
+ var TE = require('fp-ts/TaskEither');
7
+ var yaml = require('js-yaml');
8
+ var apexReflection = require('@cparra/apex-reflection');
9
+ var O = require('fp-ts/Option');
10
+ var fastXmlParser = require('fast-xml-parser');
11
+ var Handlebars = require('handlebars');
12
+ var fs = require('fs');
13
+ var path = require('path');
14
+ var chalk = require('chalk');
15
+ var logUpdate = require('log-update');
16
+ var cosmiconfig = require('cosmiconfig');
17
+ var yargs = require('yargs');
18
+ var cosmiconfigTypescriptLoader = require('cosmiconfig-typescript-loader');
19
+ var defaults = require('../defaults-DUwru49Q.js');
20
+
21
+ function _interopNamespaceDefault(e) {
22
+ var n = Object.create(null);
23
+ if (e) {
24
+ Object.keys(e).forEach(function (k) {
25
+ if (k !== 'default') {
26
+ var d = Object.getOwnPropertyDescriptor(e, k);
27
+ Object.defineProperty(n, k, d.get ? d : {
28
+ enumerable: true,
29
+ get: function () { return e[k]; }
30
+ });
31
+ }
32
+ });
33
+ }
34
+ n.default = e;
35
+ return Object.freeze(n);
36
+ }
37
+
38
+ var E__namespace = /*#__PURE__*/_interopNamespaceDefault(E);
39
+ var TE__namespace = /*#__PURE__*/_interopNamespaceDefault(TE);
40
+ var yaml__namespace = /*#__PURE__*/_interopNamespaceDefault(yaml);
41
+ var O__namespace = /*#__PURE__*/_interopNamespaceDefault(O);
42
+ var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
43
+ var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
44
+ var yargs__namespace = /*#__PURE__*/_interopNamespaceDefault(yargs);
45
+
46
+ function apply(fn, ...front) {
47
+ return (...tailArgs) => fn(...front, ...tailArgs);
48
+ }
49
+
50
+ function defaultGetEmailByReference(email) {
51
+ return {
52
+ __type: "link",
53
+ title: email,
54
+ url: `mailto:${email}`
55
+ };
56
+ }
57
+ function replaceInlineReferences(text, linkReplacer, emailReplacer = defaultGetEmailByReference) {
58
+ const inlineLinks = apply(replaceInlineLinks, linkReplacer);
59
+ const inlineEmails = apply(replaceInlineEmails, emailReplacer);
60
+ return _function.pipe(inlineCode$1([text]), inlineLinks, inlineEmails);
61
+ }
62
+ function inlineCode$1(renderableContents) {
63
+ return renderableContents.flatMap((renderableContent) => inlineCodeContent(renderableContent));
64
+ }
65
+ function inlineCodeContent(renderableContent) {
66
+ if (typeof renderableContent !== "string") {
67
+ return [renderableContent];
68
+ }
69
+ function inlineCodeLink(text2) {
70
+ return {
71
+ __type: "inline-code",
72
+ content: text2
73
+ };
74
+ }
75
+ const text = renderableContent;
76
+ const codeFormatRegEx = "`([^`]*)`";
77
+ const matches = match(codeFormatRegEx, text);
78
+ return createRenderableContents(matches, text, inlineCodeLink);
79
+ }
80
+ function replaceInlineLinks(getLinkByTypeName, renderableContents) {
81
+ return renderableContents.flatMap((renderableContent) => inlineLinkContent(renderableContent, getLinkByTypeName));
82
+ }
83
+ function inlineLinkContent(renderableContent, getLinkByTypeName) {
84
+ if (typeof renderableContent !== "string") {
85
+ return [renderableContent];
86
+ }
87
+ const text = renderableContent;
88
+ const linkFormatRegEx = "{@link (.*?)}|<<([^>]+)>>";
89
+ const matches = match(linkFormatRegEx, text);
90
+ return createRenderableContents(matches, text, getLinkByTypeName);
91
+ }
92
+ function replaceInlineEmails(getLinkByTypeName, renderableContents) {
93
+ return renderableContents.flatMap((renderableContent) => inlineEmailContent(renderableContent, getLinkByTypeName));
94
+ }
95
+ function inlineEmailContent(renderableContent, getLinkByTypeName) {
96
+ if (typeof renderableContent !== "string") {
97
+ return [renderableContent];
98
+ }
99
+ const text = renderableContent;
100
+ const linkFormatRegEx = "{@email (.*?)}";
101
+ const matches = match(linkFormatRegEx, text);
102
+ return createRenderableContents(matches, text, getLinkByTypeName);
103
+ }
104
+ function match(regex, text) {
105
+ const expression = new RegExp(regex, "gi");
106
+ let match2;
107
+ const matches = [];
108
+ do {
109
+ match2 = expression.exec(text);
110
+ if (match2) {
111
+ matches.push(match2);
112
+ }
113
+ } while (match2);
114
+ return matches;
115
+ }
116
+ function createRenderableContents(matches, text, linker) {
117
+ if (matches.length === 0) {
118
+ return [text];
119
+ }
120
+ const result = [];
121
+ let lastIndex = 0;
122
+ for (const match2 of matches) {
123
+ const index = match2.index;
124
+ const length = match2[0].length;
125
+ const capturedGroup = match2.slice(1).find((group) => group);
126
+ if (!capturedGroup) {
127
+ continue;
128
+ }
129
+ result.push(text.slice(lastIndex, index));
130
+ result.push(linker(capturedGroup));
131
+ lastIndex = index + length;
132
+ }
133
+ if (lastIndex < text.length) {
134
+ result.push(text.slice(lastIndex));
135
+ }
136
+ return result;
137
+ }
138
+
139
+ function isEmptyLine(content) {
140
+ return Object.keys(content).includes("__type") && content.__type === "empty-line";
141
+ }
142
+ function isCodeBlock(content) {
143
+ return Object.keys(content).includes("__type") && content.__type === "code-block";
144
+ }
145
+ function isInlineCode(content) {
146
+ return Object.keys(content).includes("__type") && content.__type === "inline-code";
147
+ }
148
+
149
+ var __defProp$f = Object.defineProperty;
150
+ var __defProps$f = Object.defineProperties;
151
+ var __getOwnPropDescs$f = Object.getOwnPropertyDescriptors;
152
+ var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
153
+ var __hasOwnProp$f = Object.prototype.hasOwnProperty;
154
+ var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
155
+ var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
156
+ var __spreadValues$f = (a, b) => {
157
+ for (var prop in b || (b = {}))
158
+ if (__hasOwnProp$f.call(b, prop))
159
+ __defNormalProp$f(a, prop, b[prop]);
160
+ if (__getOwnPropSymbols$f)
161
+ for (var prop of __getOwnPropSymbols$f(b)) {
162
+ if (__propIsEnum$f.call(b, prop))
163
+ __defNormalProp$f(a, prop, b[prop]);
164
+ }
165
+ return a;
166
+ };
167
+ var __spreadProps$f = (a, b) => __defProps$f(a, __getOwnPropDescs$f(b));
168
+ function adaptDescribable(describable, linkGenerator) {
169
+ function describableToRenderableContent(describable2) {
170
+ if (!describable2) {
171
+ return;
172
+ }
173
+ let content = [];
174
+ for (let i = 0; i < describable2.length; i++) {
175
+ const line = describable2[i];
176
+ const codeBlockMatch = line.match(/^```([a-zA-Z]*)$/);
177
+ if (codeBlockMatch) {
178
+ const language = codeBlockMatch[1] || "apex";
179
+ const codeBlockLines = [];
180
+ i++;
181
+ while (i < describable2.length) {
182
+ const currentLine = describable2[i];
183
+ if (currentLine.trim() === "```") {
184
+ break;
185
+ }
186
+ codeBlockLines.push(currentLine);
187
+ i++;
188
+ }
189
+ content = [
190
+ ...content,
191
+ {
192
+ __type: "code-block",
193
+ language,
194
+ content: codeBlockLines
195
+ },
196
+ { __type: "empty-line" }
197
+ ];
198
+ continue;
199
+ }
200
+ content = [
201
+ ...content,
202
+ ...replaceInlineReferences(line, linkGenerator),
203
+ {
204
+ __type: "empty-line"
205
+ }
206
+ ];
207
+ }
208
+ return content.filter((line, index, lines) => !(isEmptyLine(line) && index === lines.length - 1));
209
+ }
210
+ return {
211
+ description: describableToRenderableContent(describable)
212
+ };
213
+ }
214
+ function adaptDocumentable(documentable, linkGenerator, subHeadingLevel) {
215
+ var _a, _b, _c;
216
+ function extractCustomTags(type) {
217
+ var _a2, _b2;
218
+ const baseTags = ["description", "group", "author", "date", "see", "example", "mermaid", "throws", "exception"];
219
+ 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)), {
220
+ name: currentAnnotation.name
221
+ }))) != null ? _b2 : [];
222
+ }
223
+ function extractAnnotationBodyLines(type, annotationName) {
224
+ var _a2, _b2;
225
+ return (_b2 = (_a2 = type.docComment) == null ? void 0 : _a2.annotations.find(
226
+ (currentAnnotation) => currentAnnotation.name.toLowerCase() === annotationName
227
+ )) == null ? void 0 : _b2.bodyLines;
228
+ }
229
+ function extractAnnotationBody(type, annotationName) {
230
+ var _a2, _b2;
231
+ return (_b2 = (_a2 = type.docComment) == null ? void 0 : _a2.annotations.find(
232
+ (currentAnnotation) => currentAnnotation.name.toLowerCase() === annotationName
233
+ )) == null ? void 0 : _b2.body;
234
+ }
235
+ function extractSeeAnnotations(type) {
236
+ var _a2, _b2;
237
+ return (_b2 = (_a2 = type.docComment) == null ? void 0 : _a2.annotations.filter((currentAnnotation) => currentAnnotation.name.toLowerCase() === "see").map((currentAnnotation) => currentAnnotation.body)) != null ? _b2 : [];
238
+ }
239
+ function bodyLinesToCodeBlock(language, bodyLines) {
240
+ if (!bodyLines) {
241
+ return;
242
+ }
243
+ return {
244
+ __type: "code-block",
245
+ language,
246
+ content: bodyLines
247
+ };
248
+ }
249
+ return __spreadProps$f(__spreadValues$f({}, adaptDescribable((_a = documentable.docComment) == null ? void 0 : _a.descriptionLines, linkGenerator)), {
250
+ annotations: documentable.annotations.map((annotation) => annotation.type.toUpperCase()),
251
+ customTags: extractCustomTags(documentable),
252
+ mermaid: {
253
+ headingLevel: subHeadingLevel,
254
+ heading: "Diagram",
255
+ value: bodyLinesToCodeBlock("mermaid", extractAnnotationBodyLines(documentable, "mermaid"))
256
+ },
257
+ example: {
258
+ headingLevel: subHeadingLevel,
259
+ heading: "Example",
260
+ value: bodyLinesToCodeBlock("apex", (_c = (_b = documentable.docComment) == null ? void 0 : _b.exampleAnnotation) == null ? void 0 : _c.bodyLines)
261
+ },
262
+ group: extractAnnotationBody(documentable, "group"),
263
+ author: extractAnnotationBody(documentable, "author"),
264
+ date: extractAnnotationBody(documentable, "date"),
265
+ sees: extractSeeAnnotations(documentable).map(linkGenerator)
266
+ });
267
+ }
268
+
269
+ var __defProp$e = Object.defineProperty;
270
+ var __defProps$e = Object.defineProperties;
271
+ var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
272
+ var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
273
+ var __hasOwnProp$e = Object.prototype.hasOwnProperty;
274
+ var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
275
+ var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
276
+ var __spreadValues$e = (a, b) => {
277
+ for (var prop in b || (b = {}))
278
+ if (__hasOwnProp$e.call(b, prop))
279
+ __defNormalProp$e(a, prop, b[prop]);
280
+ if (__getOwnPropSymbols$e)
281
+ for (var prop of __getOwnPropSymbols$e(b)) {
282
+ if (__propIsEnum$e.call(b, prop))
283
+ __defNormalProp$e(a, prop, b[prop]);
284
+ }
285
+ return a;
286
+ };
287
+ var __spreadProps$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
288
+ function adaptMethod(method, linkGenerator, baseHeadingLevel) {
289
+ var _a, _b, _c;
290
+ function buildTitle(method2) {
291
+ const { name, parameters } = method2;
292
+ const parametersString = parameters.map((param) => param.name).join(", ");
293
+ return `${name}(${parametersString})`;
294
+ }
295
+ function buildSignature(method2) {
296
+ const { access_modifier, typeReference, name, memberModifiers } = method2;
297
+ const parameters = method2.parameters.map((param) => `${param.typeReference.rawDeclaration} ${param.name}`).join(", ");
298
+ const members = memberModifiers.length > 0 ? `${memberModifiers.join(" ")} ` : "";
299
+ return {
300
+ __type: "code-block",
301
+ language: "apex",
302
+ content: [`${access_modifier} ${members}${typeReference.rawDeclaration} ${name}(${parameters})`]
303
+ };
304
+ }
305
+ return {
306
+ headingLevel: baseHeadingLevel,
307
+ doc: adaptDocumentable(method, linkGenerator, baseHeadingLevel + 1),
308
+ heading: buildTitle(method),
309
+ signature: {
310
+ headingLevel: baseHeadingLevel + 1,
311
+ heading: "Signature",
312
+ value: buildSignature(method)
313
+ },
314
+ returnType: {
315
+ headingLevel: baseHeadingLevel + 1,
316
+ heading: "Return Type",
317
+ value: __spreadProps$e(__spreadValues$e({}, adaptDescribable((_b = (_a = method.docComment) == null ? void 0 : _a.returnAnnotation) == null ? void 0 : _b.bodyLines, linkGenerator)), {
318
+ type: linkGenerator(method.typeReference.rawDeclaration)
319
+ })
320
+ },
321
+ throws: {
322
+ headingLevel: baseHeadingLevel + 1,
323
+ heading: "Throws",
324
+ value: (_c = method.docComment) == null ? void 0 : _c.throwsAnnotations.map((thrown) => mapThrows(thrown, linkGenerator))
325
+ },
326
+ parameters: {
327
+ headingLevel: baseHeadingLevel + 1,
328
+ heading: "Parameters",
329
+ value: method.parameters.map((param) => mapParameters(method, param, linkGenerator))
330
+ },
331
+ inherited: method.inherited
332
+ };
333
+ }
334
+ function adaptConstructor(typeName, constructor, linkGenerator, baseHeadingLevel) {
335
+ var _a;
336
+ function buildTitle(name, constructor2) {
337
+ const { parameters } = constructor2;
338
+ const parametersString = parameters.map((param) => param.name).join(", ");
339
+ return `${name}(${parametersString})`;
340
+ }
341
+ function buildSignature(name, constructor2) {
342
+ const { access_modifier } = constructor2;
343
+ const parameters = constructor2.parameters.map((param) => `${param.typeReference.rawDeclaration} ${param.name}`).join(", ");
344
+ return {
345
+ __type: "code-block",
346
+ language: "apex",
347
+ content: [`${access_modifier} ${name}(${parameters})`]
348
+ };
349
+ }
350
+ return {
351
+ doc: adaptDocumentable(constructor, linkGenerator, baseHeadingLevel + 1),
352
+ headingLevel: baseHeadingLevel,
353
+ heading: buildTitle(typeName, constructor),
354
+ signature: {
355
+ headingLevel: baseHeadingLevel + 1,
356
+ heading: "Signature",
357
+ value: buildSignature(typeName, constructor)
358
+ },
359
+ parameters: {
360
+ headingLevel: baseHeadingLevel + 1,
361
+ heading: "Parameters",
362
+ value: constructor.parameters.map((param) => mapParameters(constructor, param, linkGenerator))
363
+ },
364
+ throws: {
365
+ headingLevel: baseHeadingLevel + 1,
366
+ heading: "Throws",
367
+ value: (_a = constructor.docComment) == null ? void 0 : _a.throwsAnnotations.map((thrown) => mapThrows(thrown, linkGenerator))
368
+ }
369
+ };
370
+ }
371
+ function mapParameters(documentable, param, linkGenerator) {
372
+ var _a;
373
+ const paramAnnotation = (_a = documentable.docComment) == null ? void 0 : _a.paramAnnotations.find(
374
+ (pa) => pa.paramName.toLowerCase() === param.name.toLowerCase()
375
+ );
376
+ return __spreadProps$e(__spreadValues$e({}, adaptDescribable(paramAnnotation == null ? void 0 : paramAnnotation.bodyLines, linkGenerator)), {
377
+ name: param.name,
378
+ type: linkGenerator(param.typeReference.rawDeclaration)
379
+ });
380
+ }
381
+ function mapThrows(thrown, linkGenerator) {
382
+ return __spreadProps$e(__spreadValues$e({}, adaptDescribable(thrown.bodyLines, linkGenerator)), {
383
+ type: linkGenerator(thrown.exceptionName)
384
+ });
385
+ }
386
+
387
+ function adaptFieldOrProperty(field, linkGenerator, baseHeadingLevel) {
388
+ function buildSignature() {
389
+ const { access_modifier, name } = field;
390
+ const memberModifiers = field.memberModifiers.join(" ");
391
+ const codeContents = `${access_modifier} ${memberModifiers} ${name}`.replace(/ {2}/g, " ");
392
+ return {
393
+ __type: "code-block",
394
+ language: "apex",
395
+ content: [codeContents]
396
+ };
397
+ }
398
+ return {
399
+ headingLevel: baseHeadingLevel,
400
+ doc: adaptDocumentable(field, linkGenerator, baseHeadingLevel + 1),
401
+ heading: field.name,
402
+ type: {
403
+ headingLevel: baseHeadingLevel + 1,
404
+ heading: "Type",
405
+ value: linkGenerator(field.typeReference.rawDeclaration)
406
+ },
407
+ inherited: field.inherited,
408
+ accessModifier: field.access_modifier,
409
+ signature: {
410
+ headingLevel: baseHeadingLevel + 1,
411
+ heading: "Signature",
412
+ value: buildSignature()
413
+ }
414
+ };
415
+ }
416
+
417
+ var __defProp$d = Object.defineProperty;
418
+ var __defProps$d = Object.defineProperties;
419
+ var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
420
+ var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
421
+ var __hasOwnProp$d = Object.prototype.hasOwnProperty;
422
+ var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
423
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
424
+ var __spreadValues$d = (a, b) => {
425
+ for (var prop in b || (b = {}))
426
+ if (__hasOwnProp$d.call(b, prop))
427
+ __defNormalProp$d(a, prop, b[prop]);
428
+ if (__getOwnPropSymbols$d)
429
+ for (var prop of __getOwnPropSymbols$d(b)) {
430
+ if (__propIsEnum$d.call(b, prop))
431
+ __defNormalProp$d(a, prop, b[prop]);
432
+ }
433
+ return a;
434
+ };
435
+ var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
436
+ function typeToRenderable(parsedFile, linkGenerator, config) {
437
+ function getRenderable() {
438
+ const { type } = parsedFile;
439
+ switch (type.type_name) {
440
+ case "enum":
441
+ return enumTypeToEnumSource(type, linkGenerator);
442
+ case "interface":
443
+ return interfaceTypeToInterfaceSource(type, linkGenerator);
444
+ case "class":
445
+ return classTypeToClassSource(type, linkGenerator);
446
+ }
447
+ }
448
+ return __spreadProps$d(__spreadValues$d({}, getRenderable()), {
449
+ filePath: parsedFile.filePath,
450
+ namespace: config.namespace
451
+ });
452
+ }
453
+ function baseTypeAdapter(type, linkGenerator, baseHeadingLevel) {
454
+ function getHeading(type2) {
455
+ const suffixMap = {
456
+ class: "Class",
457
+ interface: "Interface",
458
+ enum: "Enum"
459
+ };
460
+ return `${type2.name} ${suffixMap[type2.type_name]}`;
461
+ }
462
+ return {
463
+ headingLevel: baseHeadingLevel,
464
+ heading: getHeading(type),
465
+ doc: adaptDocumentable(type, linkGenerator, baseHeadingLevel + 1),
466
+ name: type.name,
467
+ meta: {
468
+ accessModifier: type.access_modifier
469
+ }
470
+ };
471
+ }
472
+ function enumTypeToEnumSource(enumType, linkGenerator, baseHeadingLevel = 1) {
473
+ return __spreadProps$d(__spreadValues$d({
474
+ type: "enum"
475
+ }, baseTypeAdapter(enumType, linkGenerator, baseHeadingLevel)), {
476
+ values: {
477
+ headingLevel: baseHeadingLevel + 1,
478
+ heading: "Values",
479
+ value: enumType.values.map((value) => {
480
+ var _a;
481
+ return __spreadProps$d(__spreadValues$d({}, adaptDescribable((_a = value.docComment) == null ? void 0 : _a.descriptionLines, linkGenerator)), {
482
+ value: value.name
483
+ });
484
+ })
485
+ }
486
+ });
487
+ }
488
+ function interfaceTypeToInterfaceSource(interfaceType, linkGenerator, baseHeadingLevel = 1) {
489
+ return __spreadProps$d(__spreadValues$d({
490
+ type: "interface"
491
+ }, baseTypeAdapter(interfaceType, linkGenerator, baseHeadingLevel)), {
492
+ extends: interfaceType.extended_interfaces.map(linkGenerator),
493
+ methods: {
494
+ headingLevel: baseHeadingLevel + 1,
495
+ heading: "Methods",
496
+ value: interfaceType.methods.map((method) => adaptMethod(method, linkGenerator, baseHeadingLevel + 2))
497
+ }
498
+ });
499
+ }
500
+ function classTypeToClassSource(classType, linkGenerator, baseHeadingLevel = 1) {
501
+ return __spreadProps$d(__spreadValues$d({
502
+ type: "class"
503
+ }, baseTypeAdapter(classType, linkGenerator, baseHeadingLevel)), {
504
+ classModifier: classType.classModifier,
505
+ sharingModifier: classType.sharingModifier,
506
+ implements: classType.implemented_interfaces.map(linkGenerator),
507
+ extends: classType.inheritanceChain.map(linkGenerator),
508
+ methods: adaptMembers("Methods", classType.methods, adaptMethod, linkGenerator, baseHeadingLevel + 1),
509
+ constructors: adaptMembers(
510
+ "Constructors",
511
+ classType.constructors,
512
+ (constructor, linkGenerator2, baseHeadingLevel2) => adaptConstructor(classType.name, constructor, linkGenerator2, baseHeadingLevel2),
513
+ linkGenerator,
514
+ baseHeadingLevel + 1
515
+ ),
516
+ fields: adaptMembers(
517
+ "Fields",
518
+ classType.fields,
519
+ adaptFieldOrProperty,
520
+ linkGenerator,
521
+ baseHeadingLevel + 1
522
+ ),
523
+ properties: adaptMembers(
524
+ "Properties",
525
+ classType.properties,
526
+ adaptFieldOrProperty,
527
+ linkGenerator,
528
+ baseHeadingLevel + 1
529
+ ),
530
+ innerClasses: {
531
+ headingLevel: baseHeadingLevel + 1,
532
+ heading: "Classes",
533
+ value: classType.classes.map(
534
+ (innerClass) => classTypeToClassSource(__spreadProps$d(__spreadValues$d({}, innerClass), { inheritanceChain: [] }), linkGenerator, baseHeadingLevel + 2)
535
+ )
536
+ },
537
+ innerEnums: {
538
+ headingLevel: baseHeadingLevel + 1,
539
+ heading: "Enums",
540
+ value: classType.enums.map((innerEnum) => enumTypeToEnumSource(innerEnum, linkGenerator, baseHeadingLevel + 2))
541
+ },
542
+ innerInterfaces: {
543
+ headingLevel: baseHeadingLevel + 1,
544
+ heading: "Interfaces",
545
+ value: classType.interfaces.map(
546
+ (innerInterface) => interfaceTypeToInterfaceSource(innerInterface, linkGenerator, baseHeadingLevel + 2)
547
+ )
548
+ }
549
+ });
550
+ }
551
+ function adaptMembers(heading, members, adapter, linkFromTypeNameGenerator, headingLevel) {
552
+ return {
553
+ headingLevel,
554
+ heading,
555
+ isGrouped: hasGroup(members),
556
+ value: hasGroup(members) ? toGroupedMembers(members, adapter, linkFromTypeNameGenerator, headingLevel + 1) : toFlat(members, adapter, linkFromTypeNameGenerator, headingLevel + 1)
557
+ };
558
+ }
559
+ function hasGroup(members) {
560
+ return members.some((member) => member.group);
561
+ }
562
+ function toFlat(members, adapter, linkGenerator, baseHeadingLevel) {
563
+ return members.map((member) => adapter(member, linkGenerator, baseHeadingLevel));
564
+ }
565
+ function toGroupedMembers(members, adapter, linkGenerator, baseHeadingLevel) {
566
+ const groupedMembers = groupByGroupName(members);
567
+ return Object.entries(groupedMembers).map(
568
+ ([groupName, members2]) => singleGroup(baseHeadingLevel, groupName, adapter, members2, linkGenerator)
569
+ );
570
+ }
571
+ function groupByGroupName(members) {
572
+ return members.reduce(
573
+ (acc, member) => {
574
+ var _a, _b;
575
+ const groupName = (_a = member.group) != null ? _a : "Other";
576
+ acc[groupName] = (_b = acc[groupName]) != null ? _b : [];
577
+ acc[groupName].push(member);
578
+ return acc;
579
+ },
580
+ {}
581
+ );
582
+ }
583
+ function singleGroup(headingLevel, groupName, adapter, members, linkGenerator) {
584
+ return {
585
+ headingLevel,
586
+ heading: groupName,
587
+ groupDescription: members[0].groupDescription,
588
+ // All fields in the group have the same description
589
+ value: toFlat(members, adapter, linkGenerator, headingLevel + 1)
590
+ };
591
+ }
592
+
593
+ function parsedFilesToRenderableBundle(config, parsedFiles) {
594
+ return parsedFiles.reduce(
595
+ (acc, parsedFile) => {
596
+ var _a;
597
+ const renderable = typeToRenderable(
598
+ parsedFile,
599
+ (referenceName) => {
600
+ return linkFromTypeNameGenerator(
601
+ parsedFile.type,
602
+ parsedFiles.map((file) => file.type),
603
+ referenceName,
604
+ config
605
+ );
606
+ },
607
+ config
608
+ );
609
+ acc.renderables.push(renderable);
610
+ const descriptionLines = (_a = parsedFile.type.docComment) == null ? void 0 : _a.descriptionLines;
611
+ const reference = {
612
+ typeName: parsedFile.type.name,
613
+ directory: getDirectoryFromRoot(config, parsedFile.type),
614
+ title: getLinkFromRoot(config, parsedFile.type),
615
+ description: adaptDescribable(
616
+ descriptionLines,
617
+ (referenceName) => getPossibleLinkFromRoot(
618
+ config,
619
+ referenceName,
620
+ findType(
621
+ parsedFiles.map((file) => file.type),
622
+ referenceName
623
+ )
624
+ )
625
+ ).description
626
+ };
627
+ const group = getTypeGroup(parsedFile.type, config);
628
+ if (!acc.references[group]) {
629
+ acc.references[group] = [];
630
+ }
631
+ acc.references[group].push(reference);
632
+ return acc;
633
+ },
634
+ {
635
+ references: {},
636
+ renderables: []
637
+ }
638
+ );
639
+ }
640
+ function linkFromTypeNameGenerator(typeBeingDocumented, repository, referenceName, config) {
641
+ const type = findType(repository, referenceName);
642
+ if (!type) {
643
+ return referenceName;
644
+ }
645
+ const [fullClassName, fileLink] = getFileLinkTuple(typeBeingDocumented, type, config);
646
+ return {
647
+ __type: "link",
648
+ title: fullClassName,
649
+ url: fileLink
650
+ };
651
+ }
652
+ function getPossibleLinkFromRoot(config, fallback, type) {
653
+ if (!type) {
654
+ return fallback;
655
+ }
656
+ const namespacePrefix = config.namespace ? `${config.namespace}.` : "";
657
+ const title = `${namespacePrefix}${type.name}`;
658
+ return {
659
+ __type: "link",
660
+ title,
661
+ url: `${getDirectoryFromRoot(config, type)}/${title}.md`
662
+ };
663
+ }
664
+ function getDirectoryFromRoot(config, type) {
665
+ if (!type) {
666
+ return "";
667
+ }
668
+ return `./${getSanitizedGroup(type, config)}`;
669
+ }
670
+ function findType(repository, referenceName) {
671
+ return repository.find((currentType) => currentType.name.toLowerCase() === referenceName.toLowerCase());
672
+ }
673
+ function getFileLinkTuple(typeBeingDocumented, referencedType, config) {
674
+ const namespacePrefix = config.namespace ? `${config.namespace}.` : "";
675
+ const directoryRoot = `${getDirectoryRoot(typeBeingDocumented, referencedType, config)}`;
676
+ const fullClassName = `${namespacePrefix}${referencedType.name}`;
677
+ return [fullClassName, `${directoryRoot}${fullClassName}.md`];
678
+ }
679
+ function getDirectoryRoot(typeBeingDocumented, referencedType, config) {
680
+ if (getTypeGroup(typeBeingDocumented, config) === getTypeGroup(referencedType, config)) {
681
+ return "./";
682
+ } else {
683
+ return `../${getSanitizedGroup(referencedType, config)}/`;
684
+ }
685
+ }
686
+ function getTypeGroup(type, config) {
687
+ var _a, _b;
688
+ const groupAnnotation = (_a = type.docComment) == null ? void 0 : _a.annotations.find((annotation) => annotation.name.toLowerCase() === "group");
689
+ return (_b = groupAnnotation == null ? void 0 : groupAnnotation.body) != null ? _b : config.defaultGroupName;
690
+ }
691
+ function getSanitizedGroup(classModel, config) {
692
+ return getTypeGroup(classModel, config).replace(/ /g, "-").replace(".", "");
693
+ }
694
+ function getLinkFromRoot(config, type) {
695
+ const namespacePrefix = config.namespace ? `${config.namespace}.` : "";
696
+ const title = `${namespacePrefix}${type.name}`;
697
+ return {
698
+ __type: "link",
699
+ title,
700
+ url: `${getDirectoryFromRoot(config, type)}/${title}.md`
701
+ };
702
+ }
703
+
704
+ function parseApexMetadata(input) {
705
+ var _a;
706
+ const map = /* @__PURE__ */ new Map();
707
+ const xml = new fastXmlParser.XMLParser().parse(input);
708
+ map.set("apiVersion", (_a = xml.ApexClass.apiVersion) != null ? _a : "");
709
+ if (xml.ApexClass.status) {
710
+ map.set("status", xml.ApexClass.status);
711
+ }
712
+ return map;
713
+ }
714
+
715
+ class ReflectionErrors {
716
+ constructor(errors) {
717
+ this.errors = errors;
718
+ this._tag = "ReflectionErrors";
719
+ }
720
+ }
721
+ class ReflectionError {
722
+ constructor(file, message) {
723
+ this.file = file;
724
+ this.message = message;
725
+ }
726
+ }
727
+ function checkForReflectionErrors(reflectionResult) {
728
+ function reduceReflectionResultIntoSingleEither(results) {
729
+ return results.reduce(
730
+ (acc, result) => {
731
+ E__namespace.isLeft(result) ? acc.errors.push(result.left) : acc.parsedFiles.push(result.right);
732
+ return acc;
733
+ },
734
+ {
735
+ errors: [],
736
+ parsedFiles: []
737
+ }
738
+ );
739
+ }
740
+ return _function.pipe(
741
+ reflectionResult,
742
+ reduceReflectionResultIntoSingleEither,
743
+ ({ errors, parsedFiles }) => errors.length ? E__namespace.left(new ReflectionErrors(errors)) : E__namespace.right(parsedFiles)
744
+ );
745
+ }
746
+
747
+ function reflectSourceCode(apexBundles) {
748
+ return apexBundles.map(reflectSourceBody);
749
+ }
750
+ function reflectSourceBody(apexBundle) {
751
+ const { filePath, content: input, metadataContent: metadata } = apexBundle;
752
+ const result = apexReflection.reflect(input);
753
+ return result.error ? E__namespace.left(new ReflectionError(filePath, result.error.message)) : E__namespace.right({
754
+ filePath,
755
+ type: addFileMetadataToTypeAnnotation(result.typeMirror, metadata)
756
+ });
757
+ }
758
+ function addFileMetadataToTypeAnnotation(type, metadata) {
759
+ return _function.pipe(
760
+ O__namespace.fromNullable(metadata),
761
+ O__namespace.map((metadata2) => {
762
+ const metadataParams = parseApexMetadata(metadata2);
763
+ metadataParams.forEach((value, key) => {
764
+ const declaration = `${key}: ${value}`;
765
+ type.annotations.push({
766
+ rawDeclaration: declaration,
767
+ name: declaration,
768
+ type: declaration
769
+ });
770
+ });
771
+ return type;
772
+ }),
773
+ O__namespace.getOrElse(() => type)
774
+ );
775
+ }
776
+
777
+ function createInheritanceChain(repository, classMirror) {
778
+ return _function.pipe(
779
+ O__namespace.fromNullable(classMirror.extended_class),
780
+ O__namespace.match(
781
+ () => [],
782
+ (extendedClassName) => inheritanceChainFromParentClassName(repository, extendedClassName)
783
+ )
784
+ );
785
+ }
786
+ function inheritanceChainFromParentClassName(repository, className) {
787
+ return _function.pipe(
788
+ O__namespace.fromNullable(repository.find((type) => type.name.toLowerCase() === className.toLowerCase())),
789
+ O__namespace.match(
790
+ () => [className],
791
+ (extendedClass) => [className, ...createInheritanceChain(repository, extendedClass)]
792
+ )
793
+ );
794
+ }
795
+
796
+ const parsedFilesToTypes = (parsedFiles) => parsedFiles.map((parsedFile) => parsedFile.type);
797
+
798
+ var __defProp$c = Object.defineProperty;
799
+ var __defProps$c = Object.defineProperties;
800
+ var __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;
801
+ var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
802
+ var __hasOwnProp$c = Object.prototype.hasOwnProperty;
803
+ var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
804
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
805
+ var __spreadValues$c = (a, b) => {
806
+ for (var prop in b || (b = {}))
807
+ if (__hasOwnProp$c.call(b, prop))
808
+ __defNormalProp$c(a, prop, b[prop]);
809
+ if (__getOwnPropSymbols$c)
810
+ for (var prop of __getOwnPropSymbols$c(b)) {
811
+ if (__propIsEnum$c.call(b, prop))
812
+ __defNormalProp$c(a, prop, b[prop]);
813
+ }
814
+ return a;
815
+ };
816
+ var __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));
817
+ const addInheritanceChainToTypes = (parsedFiles) => parsedFiles.map((parsedFile) => __spreadProps$c(__spreadValues$c({}, parsedFile), {
818
+ type: addInheritanceChain(parsedFile.type, parsedFilesToTypes(parsedFiles))
819
+ }));
820
+ function addInheritanceChain(current, repository) {
821
+ if (current.type_name === "enum" || current.type_name === "interface") {
822
+ return current;
823
+ } else {
824
+ const inheritanceChain = createInheritanceChain(repository, current);
825
+ return __spreadProps$c(__spreadValues$c({}, current), {
826
+ inheritanceChain
827
+ });
828
+ }
829
+ }
830
+
831
+ var __defProp$b = Object.defineProperty;
832
+ var __defProps$b = Object.defineProperties;
833
+ var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
834
+ var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
835
+ var __hasOwnProp$b = Object.prototype.hasOwnProperty;
836
+ var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
837
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
838
+ var __spreadValues$b = (a, b) => {
839
+ for (var prop in b || (b = {}))
840
+ if (__hasOwnProp$b.call(b, prop))
841
+ __defNormalProp$b(a, prop, b[prop]);
842
+ if (__getOwnPropSymbols$b)
843
+ for (var prop of __getOwnPropSymbols$b(b)) {
844
+ if (__propIsEnum$b.call(b, prop))
845
+ __defNormalProp$b(a, prop, b[prop]);
846
+ }
847
+ return a;
848
+ };
849
+ var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
850
+ const addInheritedMembersToTypes = (parsedFiles) => parsedFiles.map((parsedFile) => addInheritedMembers(parsedFilesToTypes(parsedFiles), parsedFile));
851
+ function addInheritedMembers(repository, parsedFile) {
852
+ function addInheritedMembersToType(repository2, current) {
853
+ if (current.type_name === "enum") {
854
+ return current;
855
+ } else if (current.type_name === "interface") {
856
+ return addInheritedInterfaceMethods(current, repository2);
857
+ } else {
858
+ return addInheritedClassMembers(current, repository2);
859
+ }
860
+ }
861
+ return __spreadProps$b(__spreadValues$b({}, parsedFile), {
862
+ type: addInheritedMembersToType(repository, parsedFile.type)
863
+ });
864
+ }
865
+ function addInheritedInterfaceMethods(interfaceMirror, repository) {
866
+ function methodAlreadyExists(memberName, members) {
867
+ return members.some((member) => member.name.toLowerCase() === memberName.toLowerCase());
868
+ }
869
+ function parentExtractor(interfaceMirror2) {
870
+ return interfaceMirror2.extended_interfaces;
871
+ }
872
+ const parents = getParents(parentExtractor, interfaceMirror, repository);
873
+ return __spreadProps$b(__spreadValues$b({}, interfaceMirror), {
874
+ methods: parents.reduce(
875
+ (acc, currentValue) => [
876
+ ...acc,
877
+ ...currentValue.methods.filter((method) => !methodAlreadyExists(method.name, acc)).map((method) => __spreadProps$b(__spreadValues$b({}, method), {
878
+ inherited: true
879
+ }))
880
+ ],
881
+ interfaceMirror.methods
882
+ )
883
+ });
884
+ }
885
+ function addInheritedClassMembers(classMirror, repository) {
886
+ function memberAlreadyExists(memberName, members) {
887
+ return members.some((member) => member.name.toLowerCase() === memberName.toLowerCase());
888
+ }
889
+ function parentExtractor(classMirror2) {
890
+ return classMirror2.extended_class ? [classMirror2.extended_class] : [];
891
+ }
892
+ function filterMember(members, existing) {
893
+ return members.filter((member) => member.access_modifier.toLowerCase() !== "private").filter((member) => !memberAlreadyExists(member.name, existing)).map((member) => __spreadProps$b(__spreadValues$b({}, member), {
894
+ inherited: true
895
+ }));
896
+ }
897
+ const parents = getParents(parentExtractor, classMirror, repository);
898
+ return __spreadProps$b(__spreadValues$b({}, classMirror), {
899
+ fields: parents.reduce(
900
+ (acc, currentValue) => [...acc, ...filterMember(currentValue.fields, acc)],
901
+ classMirror.fields
902
+ ),
903
+ properties: parents.reduce(
904
+ (acc, currentValue) => [...acc, ...filterMember(currentValue.properties, acc)],
905
+ classMirror.properties
906
+ ),
907
+ methods: parents.reduce(
908
+ (acc, currentValue) => [...acc, ...filterMember(currentValue.methods, acc)],
909
+ classMirror.methods
910
+ )
911
+ });
912
+ }
913
+ function getParents(extendedNamesExtractor, current, repository) {
914
+ return _function.pipe(
915
+ extendedNamesExtractor(current),
916
+ (interfaces) => interfaces.map((interfaceName) => repository.find((type) => type.name === interfaceName)),
917
+ (interfaces = []) => interfaces.filter((type) => type !== void 0),
918
+ (interfaces) => interfaces.reduce(
919
+ (acc, current2) => [...acc, ...getParents(extendedNamesExtractor, current2, repository)],
920
+ interfaces
921
+ )
922
+ );
923
+ }
924
+
925
+ const typeDocPartial = `
17
926
  {{#> documentablePartialTemplate}}
18
927
 
19
928
  {{#if doc.group}}
@@ -39,7 +948,9 @@ layout: default
39
948
  {{/if}}
40
949
 
41
950
  {{/documentablePartialTemplate}}
42
- `.trim(),ri=`
951
+ `.trim();
952
+
953
+ const documentablePartialTemplate = `
43
954
  {{#each doc.annotations}}
44
955
  \`{{this}}\`
45
956
  {{/each}}
@@ -64,7 +975,9 @@ layout: default
64
975
  {{ heading doc.example.headingLevel doc.example.heading }}
65
976
  {{code doc.example.value}}
66
977
  {{/if}}
67
- `.trim(),ii=`
978
+ `.trim();
979
+
980
+ const methodsPartialTemplate = `
68
981
  {{ heading headingLevel heading }}
69
982
  {{#each value}}
70
983
  {{{ heading headingLevel (inlineCode heading) }}}
@@ -106,7 +1019,16 @@ layout: default
106
1019
  {{#unless @last}}---{{/unless}}
107
1020
 
108
1021
  {{/each}}
109
- `.trim(),si=`
1022
+ `.trim();
1023
+
1024
+ const groupedMembersPartialTemplate = `
1025
+ {{ heading headingLevel heading }}
1026
+ {{#each value}}
1027
+ {{> (lookup .. "subTemplate") this}}
1028
+ {{/each}}
1029
+ `.trim();
1030
+
1031
+ const constructorsPartialTemplate = `
110
1032
  {{ heading headingLevel heading }}
111
1033
  {{#each value}}
112
1034
  {{{ heading headingLevel (inlineCode heading) }}}
@@ -137,7 +1059,9 @@ layout: default
137
1059
  {{#unless @last}}---{{/unless}}
138
1060
 
139
1061
  {{/each}}
140
- `.trim(),ai=`
1062
+ `.trim();
1063
+
1064
+ const fieldsPartialTemplate = `
141
1065
  {{ heading headingLevel heading }}
142
1066
  {{#each value}}
143
1067
  {{{ heading headingLevel (inlineCode heading) }}}
@@ -159,7 +1083,9 @@ layout: default
159
1083
  {{#unless @last}}---{{/unless}}
160
1084
 
161
1085
  {{/each}}
162
- `.trim(),un=`
1086
+ `.trim();
1087
+
1088
+ const classMarkdownTemplate = `
163
1089
  {{ heading headingLevel heading }}
164
1090
  {{#if classModifier}}
165
1091
  \`{{classModifier}}\`
@@ -169,11 +1095,13 @@ layout: default
169
1095
 
170
1096
  {{#if extends.length}}
171
1097
  **Inheritance**
1098
+
172
1099
  {{#each extends}}{{link this}}{{#unless @last}} < {{/unless}}{{/each}}
173
1100
  {{/if}}
174
1101
 
175
1102
  {{#if implements}}
176
1103
  **Implements**
1104
+
177
1105
  {{#each implements}}
178
1106
  {{link this}}{{#unless @last}}, {{/unless}}
179
1107
  {{/each}}
@@ -231,7 +1159,9 @@ layout: default
231
1159
  {{> interfaceTemplate this}}
232
1160
  {{/each}}
233
1161
  {{/if}}
234
- `.trim(),fn=`
1162
+ `.trim();
1163
+
1164
+ const enumMarkdownTemplate = `
235
1165
  {{ heading headingLevel heading }}
236
1166
 
237
1167
  {{> typeDocumentation }}
@@ -242,7 +1172,9 @@ layout: default
242
1172
  {{#each values.value}}
243
1173
  | {{value}} | {{description}} |
244
1174
  {{/each}}
245
- `.trim(),hn=`
1175
+ `.trim();
1176
+
1177
+ const interfaceMarkdownTemplate = `
246
1178
  {{ heading headingLevel heading }}
247
1179
 
248
1180
  {{> typeDocumentation }}
@@ -257,22 +1189,552 @@ layout: default
257
1189
  {{#if methods}}
258
1190
  {{> methodsPartialTemplate methods}}
259
1191
  {{/if}}
260
- `.trim(),oi=`
261
- {{ heading headingLevel heading }}
262
- {{#each value}}
263
- {{> (lookup .. "subTemplate") this}}
264
- {{/each}}
265
- `.trim(),E=class E{constructor(){g.registerPartial("typeDocumentation",ni),g.registerPartial("documentablePartialTemplate",ri),g.registerPartial("methodsPartialTemplate",ii),g.registerPartial("constructorsPartialTemplate",si),g.registerPartial("groupedMembersPartialTemplate",oi),g.registerPartial("fieldsPartialTemplate",ai),g.registerPartial("classTemplate",un),g.registerPartial("enumTemplate",fn),g.registerPartial("interfaceTemplate",hn),g.registerHelper("link",yn),g.registerHelper("code",gn),g.registerHelper("renderContent",di),g.registerHelper("heading",li),g.registerHelper("inlineCode",mn),g.registerHelper("splitAndCapitalize",ci)}static getInstance(){return E.instance||(E.instance=new E),E.instance}compile(e){return g.compile(e.template)(e.source).trim().replace(/\n{3,}/g,`
1192
+ `.trim();
266
1193
 
267
- `)}};a(E,"Template");let Ge=E;const ci=a(n=>{const e=n.split(/[-_]+/),t=[];for(const r of e)t.push(r.charAt(0).toUpperCase()+r.slice(1));return t.join(" ")},"splitAndCapitalize"),li=a((n,e)=>`${"#".repeat(n)} ${e}`,"heading"),mn=a(n=>new g.SafeString(`\`${n}\``),"inlineCode"),gn=a(n=>new g.SafeString(`
268
- \`\`\`${n.language}
269
- ${n.content.join(`
270
- `)}
1194
+ class Template {
1195
+ constructor() {
1196
+ Handlebars.registerPartial("typeDocumentation", typeDocPartial);
1197
+ Handlebars.registerPartial("documentablePartialTemplate", documentablePartialTemplate);
1198
+ Handlebars.registerPartial("methodsPartialTemplate", methodsPartialTemplate);
1199
+ Handlebars.registerPartial("constructorsPartialTemplate", constructorsPartialTemplate);
1200
+ Handlebars.registerPartial("groupedMembersPartialTemplate", groupedMembersPartialTemplate);
1201
+ Handlebars.registerPartial("fieldsPartialTemplate", fieldsPartialTemplate);
1202
+ Handlebars.registerPartial("classTemplate", classMarkdownTemplate);
1203
+ Handlebars.registerPartial("enumTemplate", enumMarkdownTemplate);
1204
+ Handlebars.registerPartial("interfaceTemplate", interfaceMarkdownTemplate);
1205
+ Handlebars.registerHelper("link", link);
1206
+ Handlebars.registerHelper("code", convertCodeBlock);
1207
+ Handlebars.registerHelper("renderContent", resolveRenderableContent);
1208
+ Handlebars.registerHelper("heading", heading);
1209
+ Handlebars.registerHelper("inlineCode", inlineCode);
1210
+ Handlebars.registerHelper("splitAndCapitalize", splitAndCapitalize);
1211
+ }
1212
+ static getInstance() {
1213
+ if (!Template.instance) {
1214
+ Template.instance = new Template();
1215
+ }
1216
+ return Template.instance;
1217
+ }
1218
+ compile(request) {
1219
+ const compiled = Handlebars.compile(request.template);
1220
+ return compiled(request.source).trim().replace(/\n{3,}/g, "\n\n");
1221
+ }
1222
+ }
1223
+ const splitAndCapitalize = (text) => {
1224
+ const words = text.split(/[-_]+/);
1225
+ const capitalizedWords = [];
1226
+ for (const word of words) {
1227
+ capitalizedWords.push(word.charAt(0).toUpperCase() + word.slice(1));
1228
+ }
1229
+ return capitalizedWords.join(" ");
1230
+ };
1231
+ const heading = (level, text) => {
1232
+ return `${"#".repeat(level)} ${text}`;
1233
+ };
1234
+ const inlineCode = (text) => {
1235
+ return new Handlebars.SafeString(`\`${text}\``);
1236
+ };
1237
+ const convertCodeBlock = (codeBlock) => {
1238
+ return new Handlebars.SafeString(
1239
+ `
1240
+ \`\`\`${codeBlock.language}
1241
+ ${codeBlock.content.join("\n")}
271
1242
  \`\`\`
272
- `.trim()),"convertCodeBlock"),di=a(n=>{if(!n)return"";function e(t,r){return Xt(r)?t+`
1243
+ `.trim()
1244
+ );
1245
+ };
1246
+ const resolveRenderableContent = (description) => {
1247
+ if (!description) {
1248
+ return "";
1249
+ }
1250
+ function reduceDescription(acc, curr) {
1251
+ if (isEmptyLine(curr)) {
1252
+ return acc + "\n";
1253
+ }
1254
+ if (isCodeBlock(curr)) {
1255
+ return acc + convertCodeBlock(curr) + "\n";
1256
+ }
1257
+ if (isInlineCode(curr)) {
1258
+ return acc + inlineCode(curr.content).toString() + " ";
1259
+ } else {
1260
+ return acc + Handlebars.escapeExpression(link(curr)).trim() + " ";
1261
+ }
1262
+ }
1263
+ return description.reduce(reduceDescription, "").trim();
1264
+ };
1265
+ const link = (source) => {
1266
+ if (typeof source === "string") {
1267
+ return source;
1268
+ } else {
1269
+ return `[${source.title}](${source.url})`;
1270
+ }
1271
+ };
1272
+
1273
+ const convertToDocumentationBundle = (referenceGuideTemplate, { references, renderables }) => ({
1274
+ referenceGuide: {
1275
+ directory: "",
1276
+ frontmatter: null,
1277
+ content: referencesToReferenceGuideContent(references, referenceGuideTemplate),
1278
+ fileExtension: "md",
1279
+ fileName: "index"
1280
+ },
1281
+ docs: renderables.map((renderable) => renderableToPageData(Object.values(references).flat(), renderable))
1282
+ });
1283
+ function referencesToReferenceGuideContent(references, template) {
1284
+ function alphabetizeReferences(references2) {
1285
+ return Object.keys(references2).sort((a, b) => a.localeCompare(b)).reduce((acc, key) => {
1286
+ acc[key] = references2[key].sort((a, b) => a.title.toString().localeCompare(b.title.toString()));
1287
+ return acc;
1288
+ }, {});
1289
+ }
1290
+ return _function.pipe(
1291
+ references,
1292
+ alphabetizeReferences,
1293
+ (references2) => compile({
1294
+ template,
1295
+ source: references2
1296
+ })
1297
+ );
1298
+ }
1299
+ function renderableToPageData(referenceGuideReference, renderable) {
1300
+ function buildDocOutput(renderable2, docContents) {
1301
+ var _a;
1302
+ const reference = referenceGuideReference.find(
1303
+ (ref) => ref.typeName.toLowerCase() === renderable2.name.toLowerCase()
1304
+ );
1305
+ const namespacePrefix = renderable2.namespace ? `${renderable2.namespace}.` : "";
1306
+ return {
1307
+ source: {
1308
+ filePath: renderable2.filePath,
1309
+ name: renderable2.name,
1310
+ type: renderable2.type
1311
+ },
1312
+ fileName: `${namespacePrefix}${renderable2.name}`,
1313
+ fileExtension: "md",
1314
+ directory: `${reference == null ? void 0 : reference.directory}`,
1315
+ frontmatter: null,
1316
+ content: docContents,
1317
+ group: (_a = renderable2.doc.group) != null ? _a : "Miscellaneous"
1318
+ };
1319
+ }
1320
+ return _function.pipe(renderable, resolveApexTypeTemplate, compile, (docContents) => buildDocOutput(renderable, docContents));
1321
+ }
1322
+ function resolveApexTypeTemplate(renderable) {
1323
+ function getTemplate(renderable2) {
1324
+ switch (renderable2.type) {
1325
+ case "enum":
1326
+ return enumMarkdownTemplate;
1327
+ case "interface":
1328
+ return interfaceMarkdownTemplate;
1329
+ case "class":
1330
+ return classMarkdownTemplate;
1331
+ }
1332
+ }
1333
+ return {
1334
+ template: getTemplate(renderable),
1335
+ source: renderable
1336
+ };
1337
+ }
1338
+ function compile(request) {
1339
+ return Template.getInstance().compile(request);
1340
+ }
273
1341
 
274
- `:Rr(r)?t+gn(r)+`
275
- `:jr(r)?t+mn(r.content).toString()+" ":t+g.escapeExpression(yn(r)).trim()+" "}return a(e,"reduceDescription"),n.reduce(e,"").trim()},"resolveRenderableContent"),yn=a(n=>typeof n=="string"?n:`[${n.title}](${n.url})`,"link"),pi=`
1342
+ var __defProp$a = Object.defineProperty;
1343
+ var __defProps$a = Object.defineProperties;
1344
+ var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
1345
+ var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
1346
+ var __hasOwnProp$a = Object.prototype.hasOwnProperty;
1347
+ var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
1348
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1349
+ var __spreadValues$a = (a, b) => {
1350
+ for (var prop in b || (b = {}))
1351
+ if (__hasOwnProp$a.call(b, prop))
1352
+ __defNormalProp$a(a, prop, b[prop]);
1353
+ if (__getOwnPropSymbols$a)
1354
+ for (var prop of __getOwnPropSymbols$a(b)) {
1355
+ if (__propIsEnum$a.call(b, prop))
1356
+ __defNormalProp$a(a, prop, b[prop]);
1357
+ }
1358
+ return a;
1359
+ };
1360
+ var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
1361
+ class Manifest {
1362
+ /**
1363
+ * Constructs a new Manifest object.
1364
+ * @param types List of types to be wrapped by this object.
1365
+ * @param isForInnerTypes Whether this manifest represent an inner type or not.
1366
+ */
1367
+ constructor(types, isForInnerTypes = false) {
1368
+ this.types = types;
1369
+ this.isForInnerTypes = isForInnerTypes;
1370
+ }
1371
+ filteredByAccessModifierAndAnnotations(modifiers) {
1372
+ const filteredTypes = Manifest.filterAccessibleModifier(this.types, modifiers);
1373
+ const typesToReturn = [];
1374
+ for (const filteredType of filteredTypes) {
1375
+ typesToReturn.push(Manifest.filterSingleType(filteredType, modifiers, this.isForInnerTypes));
1376
+ }
1377
+ return typesToReturn;
1378
+ }
1379
+ static filterSingleType(currentType, modifiers, isForInnerTypes) {
1380
+ if (currentType.type_name === "enum") {
1381
+ return currentType;
1382
+ }
1383
+ if (currentType.type_name === "interface") {
1384
+ const currentInterface = currentType;
1385
+ return __spreadProps$a(__spreadValues$a({}, currentType), {
1386
+ methods: this.filterAccessibleModifier(currentInterface.methods, modifiers)
1387
+ });
1388
+ }
1389
+ const currentClass = currentType;
1390
+ const filteredClass = __spreadProps$a(__spreadValues$a({}, currentType), {
1391
+ methods: this.filterAccessibleModifier(currentClass.methods, modifiers),
1392
+ properties: this.filterAccessibleModifier(currentClass.properties, modifiers),
1393
+ fields: this.filterAccessibleModifier(currentClass.fields, modifiers),
1394
+ constructors: this.filterAccessibleModifier(currentClass.constructors, modifiers)
1395
+ });
1396
+ if (!isForInnerTypes) {
1397
+ return __spreadProps$a(__spreadValues$a({}, filteredClass), {
1398
+ enums: this.filterAccessibleModifier(currentClass.enums, modifiers),
1399
+ interfaces: this.filterAccessibleModifier(currentClass.interfaces, modifiers),
1400
+ classes: new Manifest(currentClass.classes, true).filteredByAccessModifierAndAnnotations(
1401
+ modifiers
1402
+ )
1403
+ });
1404
+ }
1405
+ return filteredClass;
1406
+ }
1407
+ static filterAccessibleModifier(accessAndDocAware, modifiers) {
1408
+ return accessAndDocAware.filter((type) => this.shouldFilterType(type, modifiers));
1409
+ }
1410
+ static shouldFilterType(accessAndDocAware, modifiers) {
1411
+ var _a;
1412
+ const hasIgnoreDocAnnotation = (_a = accessAndDocAware.docComment) == null ? void 0 : _a.annotations.some(
1413
+ (annotation) => annotation.name.toLowerCase() === "ignore"
1414
+ );
1415
+ if (hasIgnoreDocAnnotation) {
1416
+ return false;
1417
+ }
1418
+ return modifiers.includes(accessAndDocAware.access_modifier) || accessAndDocAware.annotations.some((annotation) => modifiers.includes(annotation.type.toLowerCase()));
1419
+ }
1420
+ }
1421
+
1422
+ var __defProp$9 = Object.defineProperty;
1423
+ var __defProps$9 = Object.defineProperties;
1424
+ var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
1425
+ var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
1426
+ var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
1427
+ var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
1428
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1429
+ var __spreadValues$9 = (a, b) => {
1430
+ for (var prop in b || (b = {}))
1431
+ if (__hasOwnProp$9.call(b, prop))
1432
+ __defNormalProp$9(a, prop, b[prop]);
1433
+ if (__getOwnPropSymbols$9)
1434
+ for (var prop of __getOwnPropSymbols$9(b)) {
1435
+ if (__propIsEnum$9.call(b, prop))
1436
+ __defNormalProp$9(a, prop, b[prop]);
1437
+ }
1438
+ return a;
1439
+ };
1440
+ var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
1441
+ function filterScope(scopes, parsedFiles) {
1442
+ return parsedFiles.filter(({ type }) => Manifest.shouldFilterType(type, scopes)).map((parsedFile) => {
1443
+ return __spreadProps$9(__spreadValues$9({}, parsedFile), {
1444
+ type: Manifest.filterSingleType(parsedFile.type, scopes, false)
1445
+ });
1446
+ });
1447
+ }
1448
+
1449
+ const hookableTemplate = `
1450
+ {{#if frontmatter}}
1451
+ {{{frontmatter}}}
1452
+ {{/if}}
1453
+
1454
+ {{{content}}}
1455
+ `.trim();
1456
+
1457
+ var __defProp$8 = Object.defineProperty;
1458
+ var __defProps$8 = Object.defineProperties;
1459
+ var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
1460
+ var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
1461
+ var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
1462
+ var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
1463
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1464
+ var __spreadValues$8 = (a, b) => {
1465
+ for (var prop in b || (b = {}))
1466
+ if (__hasOwnProp$8.call(b, prop))
1467
+ __defNormalProp$8(a, prop, b[prop]);
1468
+ if (__getOwnPropSymbols$8)
1469
+ for (var prop of __getOwnPropSymbols$8(b)) {
1470
+ if (__propIsEnum$8.call(b, prop))
1471
+ __defNormalProp$8(a, prop, b[prop]);
1472
+ }
1473
+ return a;
1474
+ };
1475
+ var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
1476
+ function sortMembers(shouldSortMembers, parsedFiles) {
1477
+ return parsedFiles.map((parsedFile) => __spreadProps$8(__spreadValues$8({}, parsedFile), {
1478
+ type: sortTypeMember(parsedFile.type, shouldSortMembers)
1479
+ }));
1480
+ }
1481
+ function sortByNames(shouldSort, a, b) {
1482
+ if (shouldSort) {
1483
+ return a.name.localeCompare(b.name);
1484
+ }
1485
+ return 0;
1486
+ }
1487
+ function sortNamed(shouldSort, items) {
1488
+ return items.sort((a, b) => sortByNames(shouldSort, a, b));
1489
+ }
1490
+ function sortTypeMember(type, shouldSort) {
1491
+ switch (type.type_name) {
1492
+ case "enum":
1493
+ return sortEnumValues(shouldSort, type);
1494
+ case "interface":
1495
+ return sortInterfaceMethods(shouldSort, type);
1496
+ case "class":
1497
+ return sortClassMembers(shouldSort, type);
1498
+ }
1499
+ }
1500
+ function sortEnumValues(shouldSort, enumType) {
1501
+ return __spreadProps$8(__spreadValues$8({}, enumType), {
1502
+ values: sortNamed(shouldSort, enumType.values)
1503
+ });
1504
+ }
1505
+ function sortInterfaceMethods(shouldSort, interfaceType) {
1506
+ return __spreadProps$8(__spreadValues$8({}, interfaceType), {
1507
+ methods: sortNamed(shouldSort, interfaceType.methods)
1508
+ });
1509
+ }
1510
+ function sortClassMembers(shouldSort, classType) {
1511
+ return __spreadProps$8(__spreadValues$8({}, classType), {
1512
+ fields: sortNamed(shouldSort, classType.fields),
1513
+ classes: sortNamed(shouldSort, classType.classes),
1514
+ enums: sortNamed(shouldSort, classType.enums),
1515
+ interfaces: sortNamed(shouldSort, classType.interfaces),
1516
+ methods: sortNamed(shouldSort, classType.methods),
1517
+ properties: sortNamed(shouldSort, classType.properties)
1518
+ });
1519
+ }
1520
+
1521
+ function isSkip(value) {
1522
+ return Object.prototype.hasOwnProperty.call(value, "_tag") && value._tag === "Skip";
1523
+ }
1524
+
1525
+ var __defProp$7 = Object.defineProperty;
1526
+ var __defProps$7 = Object.defineProperties;
1527
+ var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
1528
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
1529
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
1530
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
1531
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1532
+ var __spreadValues$7 = (a, b) => {
1533
+ for (var prop in b || (b = {}))
1534
+ if (__hasOwnProp$7.call(b, prop))
1535
+ __defNormalProp$7(a, prop, b[prop]);
1536
+ if (__getOwnPropSymbols$7)
1537
+ for (var prop of __getOwnPropSymbols$7(b)) {
1538
+ if (__propIsEnum$7.call(b, prop))
1539
+ __defNormalProp$7(a, prop, b[prop]);
1540
+ }
1541
+ return a;
1542
+ };
1543
+ var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
1544
+ var __async$2 = (__this, __arguments, generator) => {
1545
+ return new Promise((resolve, reject) => {
1546
+ var fulfilled = (value) => {
1547
+ try {
1548
+ step(generator.next(value));
1549
+ } catch (e) {
1550
+ reject(e);
1551
+ }
1552
+ };
1553
+ var rejected = (value) => {
1554
+ try {
1555
+ step(generator.throw(value));
1556
+ } catch (e) {
1557
+ reject(e);
1558
+ }
1559
+ };
1560
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
1561
+ step((generator = generator.apply(__this, __arguments)).next());
1562
+ });
1563
+ };
1564
+ class HookError {
1565
+ constructor(error) {
1566
+ this.error = error;
1567
+ this._tag = "HookError";
1568
+ }
1569
+ }
1570
+ function generateDocs(apexBundles, config) {
1571
+ const filterOutOfScope = apply(filterScope, config.scope);
1572
+ const convertToRenderableBundle = apply(parsedFilesToRenderableBundle, config);
1573
+ const convertToDocumentationBundleForTemplate = apply(convertToDocumentationBundle, config.referenceGuideTemplate);
1574
+ const sortTypeMembers = apply(sortMembers, config.sortMembersAlphabetically);
1575
+ return _function.pipe(
1576
+ apexBundles,
1577
+ reflectSourceCode,
1578
+ checkForReflectionErrors,
1579
+ E__namespace.map(filterOutOfScope),
1580
+ E__namespace.map(addInheritedMembersToTypes),
1581
+ E__namespace.map(addInheritanceChainToTypes),
1582
+ E__namespace.map(sortTypeMembers),
1583
+ E__namespace.map(convertToRenderableBundle),
1584
+ E__namespace.map(convertToDocumentationBundleForTemplate),
1585
+ TE__namespace.fromEither,
1586
+ TE__namespace.flatMap(
1587
+ (bundle) => TE__namespace.tryCatch(
1588
+ () => documentationBundleHook(bundle, config),
1589
+ (error) => new HookError(error)
1590
+ )
1591
+ ),
1592
+ TE__namespace.map((bundle) => ({
1593
+ referenceGuide: isSkip(bundle.referenceGuide) ? bundle.referenceGuide : __spreadProps$7(__spreadValues$7({}, bundle.referenceGuide), {
1594
+ content: Template.getInstance().compile({
1595
+ source: {
1596
+ frontmatter: toFrontmatterString(bundle.referenceGuide.frontmatter),
1597
+ content: bundle.referenceGuide.content
1598
+ },
1599
+ template: hookableTemplate
1600
+ })
1601
+ }),
1602
+ docs: bundle.docs.map((doc) => __spreadProps$7(__spreadValues$7({}, doc), {
1603
+ content: Template.getInstance().compile({
1604
+ source: {
1605
+ frontmatter: toFrontmatterString(doc.frontmatter),
1606
+ content: doc.content
1607
+ },
1608
+ template: hookableTemplate
1609
+ })
1610
+ }))
1611
+ }))
1612
+ );
1613
+ }
1614
+ function toFrontmatterString(frontmatter) {
1615
+ if (typeof frontmatter === "string") {
1616
+ return frontmatter;
1617
+ }
1618
+ if (!frontmatter) {
1619
+ return "";
1620
+ }
1621
+ const yamlString = yaml.dump(frontmatter);
1622
+ return `---
1623
+ ${yamlString}---
1624
+ `;
1625
+ }
1626
+ function passThroughHook(value) {
1627
+ return value;
1628
+ }
1629
+ const documentationBundleHook = (bundle, config) => __async$2(void 0, null, function* () {
1630
+ return {
1631
+ referenceGuide: yield transformReferenceGuide(bundle.referenceGuide, config.transformReferenceGuide),
1632
+ docs: yield transformDocs(bundle.docs, config.transformDocs, config.transformDocPage)
1633
+ };
1634
+ });
1635
+ const transformReferenceGuide = (_0, ..._1) => __async$2(void 0, [_0, ..._1], function* (referenceGuide, hook = passThroughHook) {
1636
+ const result = yield hook(referenceGuide);
1637
+ if (isSkip(result)) {
1638
+ return result;
1639
+ }
1640
+ return __spreadValues$7(__spreadValues$7({}, referenceGuide), yield hook(referenceGuide));
1641
+ });
1642
+ const transformDocs = (_0, ..._1) => __async$2(void 0, [_0, ..._1], function* (docs, transformDocsHook = passThroughHook, transformDocPageHook = passThroughHook) {
1643
+ const transformed = yield transformDocsHook(docs);
1644
+ return Promise.all(transformed.map((doc) => transformDocPage(doc, transformDocPageHook)));
1645
+ });
1646
+ const transformDocPage = (_0, ..._1) => __async$2(void 0, [_0, ..._1], function* (doc, hook = passThroughHook) {
1647
+ return __spreadValues$7(__spreadValues$7({}, doc), yield hook(doc));
1648
+ });
1649
+
1650
+ var __defProp$6 = Object.defineProperty;
1651
+ var __defProps$6 = Object.defineProperties;
1652
+ var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
1653
+ var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
1654
+ var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
1655
+ var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
1656
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1657
+ var __spreadValues$6 = (a, b) => {
1658
+ for (var prop in b || (b = {}))
1659
+ if (__hasOwnProp$6.call(b, prop))
1660
+ __defNormalProp$6(a, prop, b[prop]);
1661
+ if (__getOwnPropSymbols$6)
1662
+ for (var prop of __getOwnPropSymbols$6(b)) {
1663
+ if (__propIsEnum$6.call(b, prop))
1664
+ __defNormalProp$6(a, prop, b[prop]);
1665
+ }
1666
+ return a;
1667
+ };
1668
+ var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
1669
+ class FileWriter {
1670
+ static write(files, outputDir, onWriteCallback) {
1671
+ files.forEach((file) => {
1672
+ const resolvedFile = this.getTargetLocation(file, outputDir);
1673
+ if (!fs__namespace.existsSync(resolvedFile.directory)) {
1674
+ fs__namespace.mkdirSync(resolvedFile.directory, { recursive: true });
1675
+ }
1676
+ const filePath = path__namespace.join(resolvedFile.directory, `${resolvedFile.fileName}.${resolvedFile.fileExtension}`);
1677
+ fs__namespace.writeFileSync(filePath, resolvedFile.content, "utf8");
1678
+ onWriteCallback(resolvedFile);
1679
+ });
1680
+ }
1681
+ static getTargetLocation(file, outputDir) {
1682
+ return __spreadProps$6(__spreadValues$6({}, file), {
1683
+ directory: path__namespace.join(outputDir, file.directory)
1684
+ });
1685
+ }
1686
+ }
1687
+
1688
+ class Logger {
1689
+ /**
1690
+ * Logs a message with optional arguments.
1691
+ * @param message The message to log.
1692
+ * @param args Optional arguments.
1693
+ */
1694
+ static log(message, ...args) {
1695
+ this.logSingle(message);
1696
+ args.forEach((arg) => {
1697
+ this.logSingle(arg);
1698
+ });
1699
+ }
1700
+ /**
1701
+ * Logs an error message with optional arguments.
1702
+ * @param message The error message to log.
1703
+ * @param args Optional arguments.
1704
+ */
1705
+ static error(message, ...args) {
1706
+ this.logSingle(message, false, "red", false);
1707
+ args.forEach(() => {
1708
+ this.logSingle(message, false, "red", false);
1709
+ });
1710
+ }
1711
+ static logSingle(text, showSpinner = true, color = "green", overrideConsole = true) {
1712
+ if (this.currentFrame > 9) {
1713
+ this.currentFrame = 0;
1714
+ }
1715
+ const spinner = showSpinner ? `${this.frames[this.currentFrame++]}` : "";
1716
+ let logMessage;
1717
+ if (color === "green") {
1718
+ logMessage = `${chalk.green((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
1719
+ `;
1720
+ } else {
1721
+ logMessage = `${chalk.red((/* @__PURE__ */ new Date()).toLocaleString() + ": ")}${text}
1722
+ `;
1723
+ }
1724
+ if (overrideConsole) {
1725
+ logUpdate(`${spinner} ${logMessage}`);
1726
+ } else {
1727
+ process.stdout.write(`${spinner} ${logMessage}`);
1728
+ }
1729
+ }
1730
+ static clear() {
1731
+ logUpdate.clear();
1732
+ }
1733
+ }
1734
+ Logger.currentFrame = 0;
1735
+ Logger.frames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
1736
+
1737
+ const referenceGuideTemplate = `
276
1738
  # Apex Reference Guide
277
1739
 
278
1740
  {{#each this}}
@@ -285,7 +1747,1251 @@ ${n.content.join(`
285
1747
 
286
1748
  {{/each}}
287
1749
  {{/each}}
288
- `.trim();function vn(n,e){return b.pipe(w.fromNullable(e.extended_class),w.match(()=>[],t=>ui(n,t)))}a(vn,"createInheritanceChain");function ui(n,e){return b.pipe(w.fromNullable(n.find(t=>t.name.toLowerCase()===e.toLowerCase())),w.match(()=>[e],t=>[e,...vn(n,t)]))}a(ui,"inheritanceChainFromParentClassName");var fi=Object.defineProperty,hi=Object.defineProperties,mi=Object.getOwnPropertyDescriptors,_n=Object.getOwnPropertySymbols,gi=Object.prototype.hasOwnProperty,yi=Object.prototype.propertyIsEnumerable,Cn=a((n,e,t)=>e in n?fi(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp$1"),O=a((n,e)=>{for(var t in e||(e={}))gi.call(e,t)&&Cn(n,t,e[t]);if(_n)for(var t of _n(e))yi.call(e,t)&&Cn(n,t,e[t]);return n},"__spreadValues$1"),F=a((n,e)=>hi(n,mi(e)),"__spreadProps");const vi={scope:["public"],outputDir:"docs",defaultGroupName:"Miscellaneous",referenceGuideTemplate:pi};function _i(n,e){const t=O(O({},vi),e);return b.pipe(n,r=>r.map(i=>Li(i)),wi,y.map(r=>Pi(r,t.scope)),y.map(r=>r.map(i=>Ai(i,r))),y.map(r=>r.map(i=>xi(i,r))),y.map(r=>Ci(r,t)),y.map(({references:r,renderables:i})=>({referenceGuide:b.pipe($i(r,t.referenceGuideTemplate)),docs:i.map(s=>bi(Object.values(r).flat(),s))})),y.map(({referenceGuide:r,docs:i})=>({format:"markdown",referenceGuide:r,docs:i})))}a(_i,"generateDocs");function Ci(n,e){return n.reduce((t,r)=>{var i;const s=Hr(r,d=>Di(r,n,d,e),e.namespace);t.renderables.push(s);const o=(i=r.docComment)==null?void 0:i.descriptionLines,c={typeName:r.name,directory:qe(e,r),title:ji(e,r),description:L(o,d=>Ri(e,d,$n(n,d))).description},l=ne(r,e);return t.references[l]||(t.references[l]=[]),t.references[l].push(c),t},{references:{},renderables:[]})}a(Ci,"typesToRenderableBundle");function bi(n,e){function t(r,i){return{directory:n.find(o=>o.typeName.toLowerCase()===r.name.toLowerCase()).directory,docContents:i,typeName:r.name,type:r.type}}return a(t,"buildDocOutput"),b.pipe(e,Oi,bn,r=>t(e,r))}a(bi,"renderableToOutputDoc");function $i(n,e){function t(r){return Object.keys(r).sort((i,s)=>i.localeCompare(s)).reduce((i,s)=>(i[s]=r[s].sort((o,c)=>o.title.toString().localeCompare(c.title.toString())),i),{})}return a(t,"alphabetizeReferences"),b.pipe(n,t,r=>bn({template:e,source:r}))}a($i,"referencesToReferenceGuide");function Pi(n,e){return new z(n).filteredByAccessModifierAndAnnotations(e)}a(Pi,"filterTypesOutOfScope");function wi(n){function e(t){return t.reduce((r,i)=>(y.isLeft(i)?r.errors.push(i.left):r.types.push(i.right),r),{errors:[],types:[]})}return a(e,"reduceReflectionResultIntoSingleEither"),b.pipe(n,e,({errors:t,types:r})=>t.length?y.left(t):y.right(r))}a(wi,"checkForReflectionErrors");function Ti(n,e){return b.pipe(w.fromNullable(e),w.map(t=>(k.process(t).forEach((i,s)=>{const o=`${s}: ${i}`;n.annotations.push({rawDeclaration:o,name:o,type:o})}),n)),w.getOrElse(()=>n))}a(Ti,"addFileMetadataToTypeAnnotation");const wt=class wt{constructor(e,t){this.file=e,this.message=t}};a(wt,"ReflectionError");let ze=wt;function Li(n){const{filePath:e,rawTypeContent:t,rawMetadataContent:r}=n,i=Lt.reflect(t);return i.error?y.left(new ze(e,i.error.message)):y.right(Ti(i.typeMirror,r))}a(Li,"reflectSourceBody");function Oi(n){function e(t){switch(t.type){case"enum":return fn;case"interface":return hn;case"class":return un}}return a(e,"getTemplate"),{template:e(n),source:n}}a(Oi,"resolveApexTypeTemplate");function bn(n){return Ge.getInstance().compile(n)}a(bn,"compile");function $n(n,e){return n.find(t=>t.name.toLowerCase()===e.toLowerCase())}a($n,"findType");function Ai(n,e){return n.type_name==="enum"?n:n.type_name==="interface"?Ii(n,e):Ei(n,e)}a(Ai,"addInheritedMembers");function xi(n,e){if(n.type_name==="enum"||n.type_name==="interface")return n;{const t=vn(e,n);return F(O({},n),{inheritanceChain:t})}}a(xi,"addInheritanceChain");function ke(n,e,t){return b.pipe(n(e),r=>r.map(i=>t.find(s=>s.name===i)),(r=[])=>r.filter(i=>i!==void 0),r=>r.reduce((i,s)=>[...i,...ke(n,s,t)],r))}a(ke,"getParents");function Ii(n,e){function t(s,o){return o.some(c=>c.name.toLowerCase()===s.toLowerCase())}a(t,"methodAlreadyExists");function r(s){return s.extended_interfaces}a(r,"parentExtractor");const i=ke(r,n,e);return F(O({},n),{methods:i.reduce((s,o)=>[...s,...o.methods.filter(c=>!t(c.name,s)).map(c=>F(O({},c),{inherited:!0}))],n.methods)})}a(Ii,"addInheritedInterfaceMethods");function Ei(n,e){function t(o,c){return c.some(l=>l.name.toLowerCase()===o.toLowerCase())}a(t,"memberAlreadyExists");function r(o){return o.extended_class?[o.extended_class]:[]}a(r,"parentExtractor");function i(o,c){return o.filter(l=>l.access_modifier.toLowerCase()!=="private").filter(l=>!t(l.name,c)).map(l=>F(O({},l),{inherited:!0}))}a(i,"filterMember");const s=ke(r,n,e);return F(O({},n),{fields:s.reduce((o,c)=>[...o,...i(c.fields,o)],n.fields),properties:s.reduce((o,c)=>[...o,...i(c.properties,o)],n.properties),methods:s.reduce((o,c)=>[...o,...i(c.methods,o)],n.methods)})}a(Ei,"addInheritedClassMembers");function Di(n,e,t,r){const i=$n(e,t);if(!i)return t;const[s,o]=Si(n,i,r);return{__type:"link",title:s,url:o}}a(Di,"linkFromTypeNameGenerator");function Si(n,e,t){const r=t.namespace?`${t.namespace}.`:"",i=`${Bi(n,e,t)}`,s=`${r}${e.name}`;return[s,`${i}${s}.md`]}a(Si,"getFileLinkTuple");function qe(n,e){return e?`./${Pn(e,n)}`:""}a(qe,"getDirectoryFromRoot");function Ri(n,e,t){if(!t)return e;const i=`${n.namespace?`${n.namespace}.`:""}${t.name}`;return{__type:"link",title:i,url:`${qe(n,t)}/${i}.md`}}a(Ri,"getPossibleLinkFromRoot");function ji(n,e){const r=`${n.namespace?`${n.namespace}.`:""}${e.name}`;return{__type:"link",title:r,url:`${qe(n,e)}/${r}.md`}}a(ji,"getLinkFromRoot");function Bi(n,e,t){return ne(n,t)===ne(e,t)?"./":`../${Pn(e,t)}/`}a(Bi,"getDirectoryRoot");function ne(n,e){var t,r;const i=(t=n.docComment)==null?void 0:t.annotations.find(s=>s.name.toLowerCase()==="group");return(r=i==null?void 0:i.body)!=null?r:e.defaultGroupName}a(ne,"getTypeGroup");function Pn(n,e){return ne(n,e).replace(/ /g,"-").replace(".","")}a(Pn,"getSanitizedGroup");const Ni=b.flow(Mi,y.map(Fi),y.map(Gi),y.mapLeft(n=>{const e=["Error(s) occurred while parsing files. Please review the following issues:",...n.map(zi)].join(`
289
- `);p.error(e)}));function Mi(n){return _i(n,{scope:u.getInstance().scope,outputDir:u.getInstance().outputDir,namespace:u.getInstance().getNamespace(),sortMembersAlphabetically:u.getInstance().sortMembersAlphabetically(),defaultGroupName:u.getInstance().getDefaultGroupName()})}a(Mi,"generateDocumentationBundle");function Fi(n){return[new S("index","").addText(n.referenceGuide),...n.docs.map(e=>new S(`${u.getInstance().getNamespacePrefix()}${e.typeName}`,e.directory).addText(e.docContents))]}a(Fi,"convertToMarkdownFiles");function Gi(n){W.write(n,e=>{p.logSingle(`${e.name} processed.`,!1,"green",!1)})}a(Gi,"writeFilesToSystem");function zi(n){return`Source file: ${n.file}
290
- ${n.message}
291
- `}a(zi,"formatReflectionError");const Tt=class Tt{static generate(e){p.logSingle("Initializing...",!1),this.initializeSettings(e);const t=le.processFiles(new de);if(u.getInstance().targetGenerator==="plain-markdown")Ni(t);else{const r=qn(new me(t),this._reflectionWithLogger);$.getInstance().populateAll(r.types);const i=this.filterByScopes(r);$.getInstance().populateScoped(i);const s=K.get(u.getInstance().targetGenerator);ge.generate(i,s);const o=s.fileBuilder().files(),c=[];W.write(o,l=>{p.logSingle(`${l.name} processed.`,!1,"green",!1),c.push(l)}),u.getInstance().onAfterProcess(c),ye.logErrors(i)}}static initializeSettings(e){const t=e.targetGenerator;u.build({sourceDirectory:e.sourceDir,scope:e.scope,outputDir:e.targetDir,targetGenerator:t,indexOnly:e.indexOnly,defaultGroupName:e.defaultGroupName,openApiTitle:e.openApiTitle,title:e.title,namespace:e.namespace,openApiFileName:e.openApiFileName,sortMembersAlphabetically:e.sortMembersAlphabetically,includeMetadata:e.includeMetadata,rootDir:e.documentationRootDir,onAfterProcess:e.onAfterProcess,onBeforeFileWrite:e.onBeforeFileWrite,frontMatterHeader:e.frontMatterHeader,linkingStrategy:t==="plain-markdown"?"path-relative":K.get(t).getLinkingStrategy()})}static filterByScopes(e){let t,r;return u.getInstance().config.targetGenerator!=="openapi"?(t=e.filteredByAccessModifierAndAnnotations(u.getInstance().scope),r=`Filtered ${e.types.length-t.length} file(s) based on scope: ${u.getInstance().scope}`):(t=e.filteredByAccessModifierAndAnnotations(["restresource","httpdelete","httpget","httppatch","httppost","httpput"]),r=`Filtered ${e.types.length-t.length} file(s), only keeping classes annotated as @RestResource.`),p.clear(),p.logSingle(r,!1,"green",!1),p.logSingle(`Creating documentation for ${t.length} file(s)`,!1,"green",!1),t}};a(Tt,"Apexdocs");let re=Tt;re._reflectionWithLogger=n=>{var e;const t=Lt.reflect(n.rawTypeContent);return t.error&&p.error(`${n.filePath} - Parsing error ${(e=t.error)==null?void 0:e.message}`),t};var ki=Object.defineProperty,wn=Object.getOwnPropertySymbols,qi=Object.prototype.hasOwnProperty,Wi=Object.prototype.propertyIsEnumerable,Tn=a((n,e,t)=>e in n?ki(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,"__defNormalProp"),Ln=a((n,e)=>{for(var t in e||(e={}))qi.call(e,t)&&Tn(n,t,e[t]);if(wn)for(var t of wn(e))Wi.call(e,t)&&Tn(n,t,e[t]);return n},"__spreadValues"),Vi=a((n,e,t)=>new Promise((r,i)=>{var s=a(l=>{try{c(t.next(l))}catch(d){i(d)}},"fulfilled"),o=a(l=>{try{c(t.throw(l))}catch(d){i(d)}},"rejected"),c=a(l=>l.done?r(l.value):Promise.resolve(l.value).then(s,o),"step");c((t=t.apply(n,e)).next())}),"__async");function Ui(){return Rn.cosmiconfig("apexdocs").search()}a(Ui,"_extractConfig");function Xi(n){return Bn.config(n==null?void 0:n.config).options({sourceDir:{type:"string",alias:"s",demandOption:!0,describe:"The directory location which contains your apex .cls classes."},targetDir:{type:"string",alias:"t",default:"./docs/",describe:"The directory location where documentation will be generated to."},recursive:{type:"boolean",alias:"r",default:!0,deprecated:"This option is no longer needed as the recursive search is always on.",describe:"Whether .cls classes will be searched for recursively in the directory provided."},scope:{type:"string",array:!0,alias:"p",default:["global"],describe:"A list of scopes to document. Values should be separated by a space, e.g --scope global public namespaceaccessible. Annotations are supported and should be passed lowercased and without the @ symbol, e.g. namespaceaccessible auraenabled. Note that this setting is ignored if generating an OpenApi REST specification since that looks for classes annotated with @RestResource."},targetGenerator:{type:"string",alias:"g",default:"jekyll",choices:["jekyll","docsify","plain-markdown","openapi"],describe:"Define the static file generator for which the documents will be created. Currently supports jekyll, docsify, plain markdown, and OpenAPI v3.1.0."},indexOnly:{type:"boolean",default:!1,describe:"Defines whether only the index file should be generated."},defaultGroupName:{type:"string",default:"Miscellaneous",describe:"Defines the @group name to be used when a file does not specify it."},sanitizeHtml:{type:"boolean",default:!0,deprecated:"This option is no longer needed as the sanitization is always on.",describe:'When on, any special character within your ApexDocs is converted into its HTML code representation. This is specially useful when generic objects are described within the docs, e.g. "List< Foo>", "Map<Foo, Bar>" because otherwise the content within < and > would be treated as HTML tags and not shown in the output. Content in @example blocks are never sanitized.'},openApiTitle:{type:"string",default:"Apex REST Api",describe:'If using "openapi" as the target generator, this allows you to specify the OpenApi title value.'},title:{type:"string",describe:"Allows you to specify the title of the generated documentation's home file.",default:"Classes"},namespace:{type:"string",describe:"The package namespace, if any. If this value is provided the namespace will be added as a prefix to all of the parsed files. If generating an OpenApi definition, it will be added to the file's Server Url."},openApiFileName:{type:"string",describe:'If using "openapi" as the target generator, this allows you to specify the name of the output file.',default:"openapi"},sortMembersAlphabetically:{type:"boolean",describe:"Whether to sort members alphabetically.",default:!1},includeMetadata:{type:"boolean",describe:"Whether to include the file's meta.xml information: Whether it is active and and the API version",default:!1},documentationRootDir:{type:"string",describe:"Allows you to specify the root documentation directory where the files are being generated. This can be helpful when embedding the generated docs into an existing site so that the links are generated correctly."}}).parseSync()}a(Xi,"_extractYargs");function Yi(){return Vi(this,null,function*(){const n=yield Ui(),e=Xi(n);return Ln(Ln({},n==null?void 0:n.config),e)})}a(Yi,"extractArgs");function Zi(){Yi().then(n=>re.generate(n)).catch(n=>{console.error(n),process.exit(1)})}a(Zi,"main"),Zi();
1750
+ `.trim();
1751
+
1752
+ var __defProp$5 = Object.defineProperty;
1753
+ var __defProps$5 = Object.defineProperties;
1754
+ var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
1755
+ var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
1756
+ var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
1757
+ var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
1758
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1759
+ var __spreadValues$5 = (a, b) => {
1760
+ for (var prop in b || (b = {}))
1761
+ if (__hasOwnProp$5.call(b, prop))
1762
+ __defNormalProp$5(a, prop, b[prop]);
1763
+ if (__getOwnPropSymbols$5)
1764
+ for (var prop of __getOwnPropSymbols$5(b)) {
1765
+ if (__propIsEnum$5.call(b, prop))
1766
+ __defNormalProp$5(a, prop, b[prop]);
1767
+ }
1768
+ return a;
1769
+ };
1770
+ var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
1771
+ function generate(bundles, config) {
1772
+ return _function.pipe(
1773
+ generateDocumentationBundle(bundles, config),
1774
+ TE__namespace.map((files) => writeFilesToSystem(files, config.targetDir)),
1775
+ TE__namespace.mapLeft((error) => {
1776
+ if (error._tag === "HookError") {
1777
+ Logger.error("Error(s) occurred while processing hooks. Please review the following issues:");
1778
+ Logger.error(error.error);
1779
+ return;
1780
+ }
1781
+ const errorMessages = [
1782
+ "Error(s) occurred while parsing files. Please review the following issues:",
1783
+ ...error.errors.map(formatReflectionError)
1784
+ ].join("\n");
1785
+ Logger.error(errorMessages);
1786
+ })
1787
+ )();
1788
+ }
1789
+ function generateDocumentationBundle(bundles, config) {
1790
+ return generateDocs(bundles, __spreadProps$5(__spreadValues$5({}, config), {
1791
+ referenceGuideTemplate
1792
+ }));
1793
+ }
1794
+ function writeFilesToSystem(files, outputDir) {
1795
+ FileWriter.write(
1796
+ [files.referenceGuide, ...files.docs].filter((file) => !isSkip(file)),
1797
+ outputDir,
1798
+ (file) => {
1799
+ Logger.logSingle(`${file.fileName} processed.`, false, "green", false);
1800
+ }
1801
+ );
1802
+ }
1803
+ function formatReflectionError(error) {
1804
+ return `Source file: ${error.file}
1805
+ ${error.message}
1806
+ `;
1807
+ }
1808
+
1809
+ function createManifest(typeParser, reflect) {
1810
+ return new Manifest(typeParser.parse(reflect));
1811
+ }
1812
+
1813
+ var __defProp$4 = Object.defineProperty;
1814
+ var __defProps$4 = Object.defineProperties;
1815
+ var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
1816
+ var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
1817
+ var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
1818
+ var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
1819
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1820
+ var __spreadValues$4 = (a, b) => {
1821
+ for (var prop in b || (b = {}))
1822
+ if (__hasOwnProp$4.call(b, prop))
1823
+ __defNormalProp$4(a, prop, b[prop]);
1824
+ if (__getOwnPropSymbols$4)
1825
+ for (var prop of __getOwnPropSymbols$4(b)) {
1826
+ if (__propIsEnum$4.call(b, prop))
1827
+ __defNormalProp$4(a, prop, b[prop]);
1828
+ }
1829
+ return a;
1830
+ };
1831
+ var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
1832
+ class RawBodyParser {
1833
+ constructor(typeBundles) {
1834
+ this.typeBundles = typeBundles;
1835
+ }
1836
+ parse(reflect) {
1837
+ const types = this.typeBundles.map((currentBundle) => {
1838
+ Logger.log(`Parsing file: ${currentBundle.filePath}`);
1839
+ const result = reflect(currentBundle);
1840
+ if (!!result.typeMirror && !!currentBundle.metadataContent) {
1841
+ const metadataParams = parseApexMetadata(currentBundle.metadataContent);
1842
+ metadataParams.forEach((value, key) => {
1843
+ var _a;
1844
+ const declaration = `${key}: ${value}`;
1845
+ (_a = result.typeMirror) == null ? void 0 : _a.annotations.push({
1846
+ rawDeclaration: declaration,
1847
+ name: declaration,
1848
+ type: declaration
1849
+ });
1850
+ });
1851
+ }
1852
+ return result;
1853
+ }).filter((reflectionResult) => {
1854
+ return reflectionResult.typeMirror;
1855
+ }).map((reflectionResult) => reflectionResult.typeMirror);
1856
+ return this.addFieldsFromParent(types);
1857
+ }
1858
+ addFieldsFromParent(types) {
1859
+ const typesWithFields = [];
1860
+ for (const currentType of types) {
1861
+ if (currentType.type_name !== "class" && currentType.type_name !== "interface") {
1862
+ typesWithFields.push(currentType);
1863
+ continue;
1864
+ }
1865
+ if (currentType.type_name === "class") {
1866
+ let typeAsClass = currentType;
1867
+ if (!typeAsClass.extended_class) {
1868
+ typesWithFields.push(currentType);
1869
+ continue;
1870
+ }
1871
+ typeAsClass = this.addMembersFromParent(typeAsClass, types);
1872
+ typesWithFields.push(typeAsClass);
1873
+ continue;
1874
+ }
1875
+ let typeAsInterface = currentType;
1876
+ if (!typeAsInterface.extended_interfaces.length) {
1877
+ typesWithFields.push(currentType);
1878
+ continue;
1879
+ }
1880
+ typeAsInterface = this.addMethodsFromParent(typeAsInterface, types);
1881
+ typesWithFields.push(typeAsInterface);
1882
+ }
1883
+ return typesWithFields;
1884
+ }
1885
+ addMembersFromParent(currentClass, allTypes) {
1886
+ if (!currentClass.extended_class) {
1887
+ return currentClass;
1888
+ }
1889
+ const parent = allTypes.find((currentType) => currentType.name === currentClass.extended_class);
1890
+ if (!parent || parent.type_name !== "class") {
1891
+ return currentClass;
1892
+ }
1893
+ let parentAsClass = parent;
1894
+ if (parentAsClass.extended_class) {
1895
+ parentAsClass = this.addMembersFromParent(parentAsClass, allTypes);
1896
+ }
1897
+ currentClass.fields = [...currentClass.fields, ...this.getInheritedFields(parentAsClass, currentClass)];
1898
+ currentClass.properties = [...currentClass.properties, ...this.getInheritedProperties(parentAsClass, currentClass)];
1899
+ currentClass.methods = [...currentClass.methods, ...this.getInheritedMethods(parentAsClass, currentClass)];
1900
+ return currentClass;
1901
+ }
1902
+ addMethodsFromParent(currentInterface, allTypes) {
1903
+ if (!currentInterface.extended_interfaces.length) {
1904
+ return currentInterface;
1905
+ }
1906
+ const parents = [];
1907
+ for (const currentInterfaceName of currentInterface.extended_interfaces) {
1908
+ const parent = allTypes.find((currentType) => currentType.name === currentInterfaceName);
1909
+ if (parent) {
1910
+ parents.push(parent);
1911
+ }
1912
+ }
1913
+ for (const parent of parents) {
1914
+ let parentAsInterface = parent;
1915
+ if (parentAsInterface.extended_interfaces.length) {
1916
+ parentAsInterface = this.addMethodsFromParent(parentAsInterface, allTypes);
1917
+ }
1918
+ currentInterface.methods = [
1919
+ ...currentInterface.methods,
1920
+ ...this.getInheritedMethods(parentAsInterface, currentInterface)
1921
+ ];
1922
+ }
1923
+ return currentInterface;
1924
+ }
1925
+ getInheritedFields(parentAsClass, currentClass) {
1926
+ return parentAsClass.fields.filter((currentField) => currentField.access_modifier.toLowerCase() !== "private").filter((currentField) => !this.memberExists(currentClass.fields, currentField.name)).map((currentField) => __spreadProps$4(__spreadValues$4({}, currentField), {
1927
+ inherited: true
1928
+ }));
1929
+ }
1930
+ getInheritedProperties(parentAsClass, currentClass) {
1931
+ return parentAsClass.properties.filter((currentProperty) => currentProperty.access_modifier.toLowerCase() !== "private").filter((currentProperty) => !this.memberExists(currentClass.properties, currentProperty.name)).map((currentProperty) => __spreadProps$4(__spreadValues$4({}, currentProperty), {
1932
+ inherited: true
1933
+ }));
1934
+ }
1935
+ getInheritedMethods(parentAsClass, currentClass) {
1936
+ return parentAsClass.methods.filter((currentMethod) => currentMethod.access_modifier.toLowerCase() !== "private").filter((currentMethod) => !this.memberExists(currentClass.methods, currentMethod.name)).map((currentMethod) => __spreadProps$4(__spreadValues$4({}, currentMethod), {
1937
+ inherited: true
1938
+ }));
1939
+ }
1940
+ memberExists(members, fieldName) {
1941
+ const fieldNames = members.map((currentMember) => currentMember.name);
1942
+ return fieldNames.includes(fieldName);
1943
+ }
1944
+ }
1945
+
1946
+ class TypesRepository {
1947
+ constructor() {
1948
+ this.allTypes = [];
1949
+ }
1950
+ static getInstance() {
1951
+ if (!TypesRepository.instance) {
1952
+ TypesRepository.instance = new TypesRepository();
1953
+ }
1954
+ return TypesRepository.instance;
1955
+ }
1956
+ populateAll(types) {
1957
+ this.allTypes = types;
1958
+ }
1959
+ getFromAllByName(typeName) {
1960
+ if (typeName.includes(".")) {
1961
+ const [parentTypeName, childTypeName] = typeName.split(".");
1962
+ const parentReference = this.allTypes.find(
1963
+ (currentType) => currentType.name.toLowerCase() === parentTypeName.toLowerCase()
1964
+ );
1965
+ if (!parentReference || parentReference.type_name !== "class") {
1966
+ return void 0;
1967
+ }
1968
+ const parentReferenceAsClass = parentReference;
1969
+ const childTypes = [
1970
+ ...parentReferenceAsClass.classes,
1971
+ ...parentReferenceAsClass.interfaces,
1972
+ ...parentReferenceAsClass.enums
1973
+ ];
1974
+ const foundType2 = childTypes.find((currentType) => currentType.name.toLowerCase() === childTypeName);
1975
+ if (!foundType2) {
1976
+ return void 0;
1977
+ }
1978
+ return { type: foundType2, isChild: true, parentType: parentReference };
1979
+ }
1980
+ const foundType = this.allTypes.find(
1981
+ (currentType) => currentType.name.toLowerCase() === typeName.toLowerCase()
1982
+ );
1983
+ if (!foundType) {
1984
+ return void 0;
1985
+ }
1986
+ return { type: foundType, isChild: false };
1987
+ }
1988
+ }
1989
+
1990
+ class Settings {
1991
+ constructor(config) {
1992
+ this.config = config;
1993
+ }
1994
+ static build(config) {
1995
+ Settings.instance = new Settings(config);
1996
+ }
1997
+ static getInstance() {
1998
+ if (!Settings.instance) {
1999
+ throw new Error("Settings has not been initialized");
2000
+ }
2001
+ return Settings.instance;
2002
+ }
2003
+ get scope() {
2004
+ return this.config.scope;
2005
+ }
2006
+ get targetGenerator() {
2007
+ return this.config.targetGenerator;
2008
+ }
2009
+ get indexOnly() {
2010
+ return this.config.indexOnly;
2011
+ }
2012
+ getOpenApiTitle() {
2013
+ return this.config.openApiTitle;
2014
+ }
2015
+ getNamespace() {
2016
+ return this.config.namespace;
2017
+ }
2018
+ openApiFileName() {
2019
+ return this.config.openApiFileName;
2020
+ }
2021
+ }
2022
+
2023
+ class Transpiler {
2024
+ static generate(types, processor) {
2025
+ var _a;
2026
+ const sortedTypes = types.sort((apexTypeA, apexTypeB) => {
2027
+ if (apexTypeA.name < apexTypeB.name) return -1;
2028
+ if (apexTypeA.name > apexTypeB.name) return 1;
2029
+ return 0;
2030
+ });
2031
+ if (Settings.getInstance().indexOnly) {
2032
+ return;
2033
+ }
2034
+ sortedTypes.forEach((currentType) => {
2035
+ processor.onProcess(currentType);
2036
+ });
2037
+ (_a = processor.onAfterProcess) == null ? void 0 : _a.call(processor, sortedTypes);
2038
+ }
2039
+ }
2040
+
2041
+ class ErrorLogger {
2042
+ static logErrors(types) {
2043
+ types.forEach((currentType) => {
2044
+ this.logErrorsForSingleType(currentType);
2045
+ });
2046
+ }
2047
+ static logErrorsForSingleType(currentType) {
2048
+ this.logTypeErrors(currentType);
2049
+ if (currentType.type_name === "class") {
2050
+ this.logErrorsForClass(currentType);
2051
+ } else if (currentType.type_name === "interface") {
2052
+ this.logErrorsForInterface(currentType);
2053
+ }
2054
+ }
2055
+ static logTypeErrors(currentType, parentType) {
2056
+ var _a;
2057
+ if ((_a = currentType.docComment) == null ? void 0 : _a.error) {
2058
+ const typeName = parentType ? `${parentType.name}.${currentType.name}` : currentType.name;
2059
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Type`);
2060
+ Logger.error(`Comment:
2061
+ ${currentType.docComment.rawDeclaration}`);
2062
+ Logger.error(currentType.docComment.error);
2063
+ Logger.error("=================================");
2064
+ }
2065
+ }
2066
+ static logErrorsForClass(classMirror, parentType) {
2067
+ const typeName = parentType ? `${parentType.name}.${classMirror.name}` : classMirror.name;
2068
+ classMirror.constructors.forEach((currentConstructor) => {
2069
+ var _a;
2070
+ if ((_a = currentConstructor.docComment) == null ? void 0 : _a.error) {
2071
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Constructor`);
2072
+ Logger.error(`Comment:
2073
+ ${currentConstructor.docComment.rawDeclaration}`);
2074
+ Logger.error(currentConstructor.docComment.error);
2075
+ Logger.error("=================================");
2076
+ }
2077
+ });
2078
+ classMirror.fields.forEach((currentField) => {
2079
+ var _a;
2080
+ if ((_a = currentField.docComment) == null ? void 0 : _a.error) {
2081
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Field`);
2082
+ Logger.error(`Comment:
2083
+ ${currentField.docComment.rawDeclaration}`);
2084
+ Logger.error(currentField.docComment.error);
2085
+ Logger.error("=================================");
2086
+ }
2087
+ });
2088
+ classMirror.properties.forEach((currentProperty) => {
2089
+ var _a;
2090
+ if ((_a = currentProperty.docComment) == null ? void 0 : _a.error) {
2091
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Property`);
2092
+ Logger.error(`Comment:
2093
+ ${currentProperty.docComment.rawDeclaration}`);
2094
+ Logger.error(currentProperty.docComment.error);
2095
+ Logger.error("=================================");
2096
+ }
2097
+ });
2098
+ classMirror.methods.forEach((currentMethod) => {
2099
+ var _a;
2100
+ if ((_a = currentMethod.docComment) == null ? void 0 : _a.error) {
2101
+ Logger.error(`${typeName} - Doc comment parsing error. Level: Method`);
2102
+ Logger.error(`Comment:
2103
+ ${currentMethod.docComment.rawDeclaration}`);
2104
+ Logger.error(currentMethod.docComment.error);
2105
+ Logger.error("=================================");
2106
+ }
2107
+ });
2108
+ classMirror.enums.forEach((currentEnum) => {
2109
+ this.logErrorsForSingleType(currentEnum);
2110
+ });
2111
+ classMirror.interfaces.forEach((currentInterface) => {
2112
+ this.logErrorsForSingleType(currentInterface);
2113
+ });
2114
+ classMirror.classes.forEach((currentClass) => {
2115
+ this.logErrorsForSingleType(currentClass);
2116
+ });
2117
+ }
2118
+ static logErrorsForInterface(interfaceMirror) {
2119
+ interfaceMirror.methods.forEach((currentMethod) => {
2120
+ var _a;
2121
+ if ((_a = currentMethod.docComment) == null ? void 0 : _a.error) {
2122
+ Logger.error(`${interfaceMirror.name} - Doc comment parsing error. Level: Method`);
2123
+ Logger.error(`Comment: ${currentMethod.docComment.rawDeclaration}`);
2124
+ Logger.error(currentMethod.docComment.error);
2125
+ Logger.error("=================================");
2126
+ }
2127
+ });
2128
+ }
2129
+ }
2130
+
2131
+ class FileContainer {
2132
+ constructor() {
2133
+ this._files = [];
2134
+ }
2135
+ files() {
2136
+ return this._files;
2137
+ }
2138
+ pushFile(file) {
2139
+ this._files.push(file);
2140
+ }
2141
+ }
2142
+
2143
+ const OPEN_API_VERSION = "3.1.0";
2144
+ const SERVER_URL = "/services/apexrest/";
2145
+ class OpenApi {
2146
+ constructor(title, version, namespace) {
2147
+ this.namespace = namespace;
2148
+ this.openapi = OPEN_API_VERSION;
2149
+ this.info = {
2150
+ title,
2151
+ version
2152
+ };
2153
+ this.servers = [
2154
+ {
2155
+ url: this.getServerUrl()
2156
+ }
2157
+ ];
2158
+ this.paths = {};
2159
+ this.tags = [];
2160
+ }
2161
+ getServerUrl() {
2162
+ if (!this.namespace) {
2163
+ return SERVER_URL;
2164
+ }
2165
+ return `${SERVER_URL}${this.namespace}/`;
2166
+ }
2167
+ }
2168
+
2169
+ class ClassMirrorWrapper {
2170
+ constructor(classMirror) {
2171
+ this.classMirror = classMirror;
2172
+ this.hasAnnotation = (method, annotationName) => method.annotations.some((annotation) => annotation.name.toLowerCase() === annotationName);
2173
+ }
2174
+ getMethodsByAnnotation(annotation) {
2175
+ return this.classMirror.methods.filter((method) => this.hasAnnotation(method, annotation));
2176
+ }
2177
+ }
2178
+
2179
+ var __defProp$3 = Object.defineProperty;
2180
+ var __defProps$3 = Object.defineProperties;
2181
+ var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
2182
+ var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
2183
+ var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
2184
+ var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
2185
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2186
+ var __spreadValues$3 = (a, b) => {
2187
+ for (var prop in b || (b = {}))
2188
+ if (__hasOwnProp$3.call(b, prop))
2189
+ __defNormalProp$3(a, prop, b[prop]);
2190
+ if (__getOwnPropSymbols$3)
2191
+ for (var prop of __getOwnPropSymbols$3(b)) {
2192
+ if (__propIsEnum$3.call(b, prop))
2193
+ __defNormalProp$3(a, prop, b[prop]);
2194
+ }
2195
+ return a;
2196
+ };
2197
+ var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
2198
+ class ReferenceBuilder {
2199
+ constructor() {
2200
+ this.isReferenceString = (targetObject) => {
2201
+ return typeof targetObject === "string" || targetObject instanceof String;
2202
+ };
2203
+ }
2204
+ build(referencedTypeName) {
2205
+ const originalTypeName = referencedTypeName;
2206
+ const regexForSchemaOverrides = /\[(.*?)]/g;
2207
+ const schemaOverrides = referencedTypeName.match(regexForSchemaOverrides);
2208
+ let referenceOverrides = [];
2209
+ if (schemaOverrides && schemaOverrides.length > 0) {
2210
+ referenceOverrides = ReferenceOverrides.build(schemaOverrides[0]);
2211
+ referencedTypeName = referencedTypeName.replace(regexForSchemaOverrides, "");
2212
+ }
2213
+ const [parsedReferencedType, isCollection] = this.handlePossibleCollectionReference(referencedTypeName);
2214
+ const referencedTypeBundle = TypesRepository.getInstance().getFromAllByName(parsedReferencedType);
2215
+ if (!referencedTypeBundle) {
2216
+ throw new Error(`The referenced type ${referencedTypeName} was not found.`);
2217
+ }
2218
+ if (referencedTypeBundle.type.type_name !== "class") {
2219
+ throw new Error(
2220
+ `Expected the referenced type to be a class, but found a ${referencedTypeBundle.type.type_name}.`
2221
+ );
2222
+ }
2223
+ const typeBundleWithIsCollection = __spreadProps$3(__spreadValues$3({}, referencedTypeBundle), {
2224
+ originalTypeName,
2225
+ isCollection,
2226
+ referenceOverrides
2227
+ });
2228
+ return this.buildReferenceFromType(typeBundleWithIsCollection);
2229
+ }
2230
+ /**
2231
+ * Returns a tuple where the first value is the name of the reference without any collection related values
2232
+ * and the second is a boolean representing if we are dealing with a collection or not.
2233
+ * @param referencedTypeName The received raw type name.
2234
+ * @private
2235
+ */
2236
+ handlePossibleCollectionReference(referencedTypeName) {
2237
+ referencedTypeName = referencedTypeName.toLowerCase();
2238
+ if (referencedTypeName.startsWith("list<") && referencedTypeName.endsWith(">")) {
2239
+ referencedTypeName = referencedTypeName.replace("list<", "");
2240
+ referencedTypeName = referencedTypeName.replace(">", "");
2241
+ return [referencedTypeName, true];
2242
+ }
2243
+ if (referencedTypeName.startsWith("set<") && referencedTypeName.endsWith(">")) {
2244
+ referencedTypeName = referencedTypeName.replace("set<", "");
2245
+ referencedTypeName = referencedTypeName.replace(">", "");
2246
+ return [referencedTypeName, true];
2247
+ }
2248
+ return [referencedTypeName, false];
2249
+ }
2250
+ buildReferenceFromType(typeBundle) {
2251
+ const propertiesAndFields = [
2252
+ ...typeBundle.type.properties,
2253
+ ...typeBundle.type.fields
2254
+ ].filter((current) => !current.memberModifiers.includes("static")).filter((current) => !current.memberModifiers.includes("transient"));
2255
+ const properties = {};
2256
+ let referencedComponents = [];
2257
+ propertiesAndFields.forEach((current) => {
2258
+ var _a, _b;
2259
+ const referenceOverride = typeBundle.referenceOverrides.find((currentOverride) => {
2260
+ return currentOverride.propertyName.toLowerCase() === current.name.toLowerCase();
2261
+ });
2262
+ if (referenceOverride) {
2263
+ const reference = this.build(referenceOverride.referenceName);
2264
+ properties[current.name] = reference.entrypointReferenceObject;
2265
+ reference.referenceComponents.forEach((current2) => referencedComponents.push(current2));
2266
+ } else {
2267
+ const manuallyDefinedHttpSchema = (_a = current.docComment) == null ? void 0 : _a.annotations.find(
2268
+ (annotation) => annotation.name.toLowerCase() === "http-schema"
2269
+ );
2270
+ if (manuallyDefinedHttpSchema) {
2271
+ this.handleOverriddenSchema(manuallyDefinedHttpSchema, properties, current, referencedComponents);
2272
+ } else {
2273
+ const pair = this.getReferenceType(current.typeReference);
2274
+ properties[current.name] = pair.schema;
2275
+ referencedComponents.push(...pair.referenceComponents);
2276
+ }
2277
+ }
2278
+ properties[current.name].description = (_b = current.docComment) == null ? void 0 : _b.description;
2279
+ });
2280
+ const mainReferenceComponents = this.buildMainReferenceComponent(typeBundle, properties);
2281
+ referencedComponents = [...mainReferenceComponents, ...referencedComponents];
2282
+ return {
2283
+ entrypointReferenceObject: {
2284
+ $ref: `#/components/schemas/${this.getReferenceName(typeBundle)}`
2285
+ },
2286
+ referenceComponents: referencedComponents
2287
+ };
2288
+ }
2289
+ handleOverriddenSchema(manuallyDefinedHttpSchema, properties, current, referencedComponents) {
2290
+ const inYaml = manuallyDefinedHttpSchema == null ? void 0 : manuallyDefinedHttpSchema.bodyLines.reduce((prev, current2) => prev + "\n" + current2);
2291
+ const asJson = yaml__namespace.load(inYaml);
2292
+ const isReferenceString = this.isReferenceString(asJson);
2293
+ if (isReferenceString) {
2294
+ const reference = this.build(asJson);
2295
+ properties[current.name] = reference.entrypointReferenceObject;
2296
+ reference.referenceComponents.forEach((current2) => referencedComponents.push(current2));
2297
+ } else {
2298
+ properties[current.name] = asJson;
2299
+ }
2300
+ }
2301
+ getReferenceName(typeBundle) {
2302
+ var _a;
2303
+ let referenceName = typeBundle.type.name;
2304
+ if (typeBundle.isChild) {
2305
+ referenceName = `${(_a = typeBundle.parentType) == null ? void 0 : _a.name}.${typeBundle.type.name}`;
2306
+ }
2307
+ if (typeBundle.isCollection) {
2308
+ referenceName = `${referenceName}_array`;
2309
+ }
2310
+ if (typeBundle.referenceOverrides.length) {
2311
+ referenceName = `${referenceName}_${typeBundle.originalTypeName}`;
2312
+ }
2313
+ return referenceName;
2314
+ }
2315
+ buildMainReferenceComponent(typeBundle, properties) {
2316
+ const mainReferenceName = this.getReferenceName(__spreadProps$3(__spreadValues$3({}, typeBundle), { isCollection: false }));
2317
+ const mainReference = {
2318
+ referencedClass: mainReferenceName,
2319
+ schema: {
2320
+ type: "object",
2321
+ properties
2322
+ }
2323
+ };
2324
+ const referencedComponents = [mainReference];
2325
+ if (!typeBundle.isCollection) {
2326
+ return referencedComponents;
2327
+ }
2328
+ return [
2329
+ {
2330
+ referencedClass: this.getReferenceName(typeBundle),
2331
+ schema: {
2332
+ type: "array",
2333
+ items: {
2334
+ $ref: `#/components/schemas/${mainReferenceName}`
2335
+ }
2336
+ }
2337
+ },
2338
+ ...referencedComponents
2339
+ ];
2340
+ }
2341
+ getReferenceType(typeInMirror) {
2342
+ const typeName = typeInMirror.type.toLowerCase();
2343
+ switch (typeName) {
2344
+ case "boolean":
2345
+ return { schema: { type: "boolean" }, referenceComponents: [] };
2346
+ case "date":
2347
+ return { schema: { type: "string", format: "date" }, referenceComponents: [] };
2348
+ case "datetime":
2349
+ return { schema: { type: "string", format: "date-time" }, referenceComponents: [] };
2350
+ case "decimal":
2351
+ return { schema: { type: "number" }, referenceComponents: [] };
2352
+ case "double":
2353
+ return { schema: { type: "number" }, referenceComponents: [] };
2354
+ case "id":
2355
+ return { schema: { type: "string" }, referenceComponents: [] };
2356
+ case "integer":
2357
+ return { schema: { type: "integer" }, referenceComponents: [] };
2358
+ case "long":
2359
+ return { schema: { type: "integer", format: "int64" }, referenceComponents: [] };
2360
+ case "string":
2361
+ return { schema: { type: "string" }, referenceComponents: [] };
2362
+ case "time":
2363
+ return { schema: { type: "string", format: "time" }, referenceComponents: [] };
2364
+ case "list":
2365
+ return this.buildCollectionPair(typeInMirror);
2366
+ case "set":
2367
+ return this.buildCollectionPair(typeInMirror);
2368
+ case "map":
2369
+ return { schema: { type: "object" }, referenceComponents: [] };
2370
+ case "object":
2371
+ return { schema: { type: "object" }, referenceComponents: [] };
2372
+ default: {
2373
+ const referencedType = TypesRepository.getInstance().getFromAllByName(typeName);
2374
+ if (!referencedType) {
2375
+ return { schema: { type: "object" }, referenceComponents: [] };
2376
+ }
2377
+ const reference = this.buildReferenceFromType(__spreadProps$3(__spreadValues$3({}, referencedType), {
2378
+ isCollection: false,
2379
+ referenceOverrides: [],
2380
+ originalTypeName: typeName
2381
+ }));
2382
+ return {
2383
+ schema: reference.entrypointReferenceObject,
2384
+ referenceComponents: [...reference.referenceComponents]
2385
+ };
2386
+ }
2387
+ }
2388
+ }
2389
+ buildCollectionPair(typeInMirror) {
2390
+ const innerReference = this.getReferenceType(typeInMirror.ofType);
2391
+ return {
2392
+ schema: { type: "array", items: innerReference.schema },
2393
+ referenceComponents: [...innerReference.referenceComponents]
2394
+ };
2395
+ }
2396
+ }
2397
+ class ReferenceOverrides {
2398
+ static build(referenceAsString) {
2399
+ const cleanedUpReference = referenceAsString.replace(/[[\]]/g, "");
2400
+ const referenceStrings = cleanedUpReference.split(",").map((item) => item.replace(/\s/g, ""));
2401
+ return referenceStrings.map((item) => {
2402
+ const [propertyName, referenceName] = item.split(":");
2403
+ return { propertyName, referenceName };
2404
+ });
2405
+ }
2406
+ }
2407
+
2408
+ class Builder {
2409
+ constructor() {
2410
+ this.isReferenceString = (targetObject) => {
2411
+ return typeof targetObject === "string" || targetObject instanceof String;
2412
+ };
2413
+ }
2414
+ build(schemaAware) {
2415
+ let reference;
2416
+ if (this.isReferenceString(schemaAware.schema)) {
2417
+ reference = new ReferenceBuilder().build(schemaAware.schema);
2418
+ }
2419
+ return {
2420
+ reference,
2421
+ body: this.buildBody(schemaAware, reference)
2422
+ };
2423
+ }
2424
+ getOpenApiSchemaFromApexDocSchema(schemaAware, reference) {
2425
+ if (this.isReferenceString(schemaAware.schema)) {
2426
+ return reference.entrypointReferenceObject;
2427
+ }
2428
+ return schemaAware.schema;
2429
+ }
2430
+ }
2431
+
2432
+ var __defProp$2 = Object.defineProperty;
2433
+ var __defProps$2 = Object.defineProperties;
2434
+ var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
2435
+ var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
2436
+ var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
2437
+ var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
2438
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2439
+ var __spreadValues$2 = (a, b) => {
2440
+ for (var prop in b || (b = {}))
2441
+ if (__hasOwnProp$2.call(b, prop))
2442
+ __defNormalProp$2(a, prop, b[prop]);
2443
+ if (__getOwnPropSymbols$2)
2444
+ for (var prop of __getOwnPropSymbols$2(b)) {
2445
+ if (__propIsEnum$2.call(b, prop))
2446
+ __defNormalProp$2(a, prop, b[prop]);
2447
+ }
2448
+ return a;
2449
+ };
2450
+ var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
2451
+ class ParameterObjectBuilder extends Builder {
2452
+ buildBody(apexDocObject, reference) {
2453
+ return __spreadProps$2(__spreadValues$2({}, apexDocObject), {
2454
+ schema: this.getOpenApiSchemaFromApexDocSchema(apexDocObject, reference)
2455
+ });
2456
+ }
2457
+ }
2458
+
2459
+ class ResponsesBuilder extends Builder {
2460
+ buildBody(apexDocResponseDefinition, reference) {
2461
+ let description = `Status code ${apexDocResponseDefinition.statusCode}`;
2462
+ if (apexDocResponseDefinition.description) {
2463
+ description = apexDocResponseDefinition.description;
2464
+ }
2465
+ return {
2466
+ description,
2467
+ content: {
2468
+ "application/json": {
2469
+ schema: this.getOpenApiSchemaFromApexDocSchema(apexDocResponseDefinition, reference)
2470
+ }
2471
+ }
2472
+ };
2473
+ }
2474
+ }
2475
+
2476
+ class RequestBodyBuilder extends Builder {
2477
+ buildBody(apexRequestBody, reference) {
2478
+ return {
2479
+ description: apexRequestBody.description,
2480
+ content: {
2481
+ "application/json": { schema: this.getOpenApiSchemaFromApexDocSchema(apexRequestBody, reference) }
2482
+ },
2483
+ required: apexRequestBody.required
2484
+ };
2485
+ }
2486
+ }
2487
+
2488
+ class MethodMirrorWrapper {
2489
+ constructor(methodMirror) {
2490
+ this.methodMirror = methodMirror;
2491
+ this.hasDocCommentAnnotation = (annotationName) => {
2492
+ var _a;
2493
+ return (_a = this.methodMirror.docComment) == null ? void 0 : _a.annotations.some((annotation) => annotation.name.toLowerCase() === annotationName);
2494
+ };
2495
+ this.getDocCommentAnnotation = (annotationName) => {
2496
+ var _a;
2497
+ return (_a = this.methodMirror.docComment) == null ? void 0 : _a.annotations.find((annotation) => annotation.name.toLowerCase() === annotationName);
2498
+ };
2499
+ }
2500
+ }
2501
+
2502
+ class MethodParser {
2503
+ constructor(openApiModel) {
2504
+ this.openApiModel = openApiModel;
2505
+ }
2506
+ parseMethod(classMirror, httpUrlEndpoint, httpMethodKey, tag) {
2507
+ var _a, _b;
2508
+ const classMirrorWrapper = new ClassMirrorWrapper(classMirror);
2509
+ const httpMethods = classMirrorWrapper.getMethodsByAnnotation(`http${httpMethodKey}`);
2510
+ if (!httpMethods.length) {
2511
+ return;
2512
+ }
2513
+ const httpMethod = httpMethods[0];
2514
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey] = {};
2515
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].tags = [tag];
2516
+ if ((_a = httpMethod.docComment) == null ? void 0 : _a.description) {
2517
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].description = httpMethod.docComment.description;
2518
+ }
2519
+ const methodMirrorWrapper = new MethodMirrorWrapper(httpMethod);
2520
+ if (methodMirrorWrapper.hasDocCommentAnnotation("summary")) {
2521
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].summary = (_b = methodMirrorWrapper.getDocCommentAnnotation("summary")) == null ? void 0 : _b.body;
2522
+ }
2523
+ this.parseHttpAnnotation(
2524
+ httpMethod,
2525
+ httpUrlEndpoint,
2526
+ httpMethodKey,
2527
+ "http-request-body",
2528
+ this.addRequestBodyToOpenApi.bind(this),
2529
+ this.fallbackHttpRequestBodyParser(httpUrlEndpoint, httpMethodKey)
2530
+ );
2531
+ this.parseHttpAnnotation(
2532
+ httpMethod,
2533
+ httpUrlEndpoint,
2534
+ httpMethodKey,
2535
+ "http-parameter",
2536
+ this.addParametersToOpenApi.bind(this)
2537
+ );
2538
+ this.parseHttpAnnotation(
2539
+ httpMethod,
2540
+ httpUrlEndpoint,
2541
+ httpMethodKey,
2542
+ "http-response",
2543
+ this.addHttpResponsesToOpenApi.bind(this),
2544
+ this.getFallbackHttpResponseParser(httpUrlEndpoint, httpMethodKey)
2545
+ );
2546
+ }
2547
+ parseHttpAnnotation(httpMethod, urlValue, httpMethodKey, annotationName, addToOpenApi, fallbackParser) {
2548
+ var _a;
2549
+ const annotations = (_a = httpMethod.docComment) == null ? void 0 : _a.annotations.filter((annotation) => annotation.name === annotationName);
2550
+ if (!(annotations == null ? void 0 : annotations.length)) {
2551
+ if (fallbackParser) {
2552
+ fallbackParser(httpMethod);
2553
+ }
2554
+ return;
2555
+ }
2556
+ for (const annotation of annotations) {
2557
+ const inYaml = annotation == null ? void 0 : annotation.bodyLines.reduce((prev, current) => prev + "\n" + current);
2558
+ if (!inYaml) {
2559
+ return;
2560
+ }
2561
+ this.addToOpenApiStrategy(inYaml, urlValue, httpMethodKey, addToOpenApi);
2562
+ }
2563
+ }
2564
+ addToOpenApiStrategy(inYaml, urlValue, httpMethodKey, addToOpenApi) {
2565
+ const inJson = yaml__namespace.load(inYaml);
2566
+ const requestBodyResponse = new RequestBodyBuilder().build(inJson);
2567
+ addToOpenApi(inJson, urlValue, httpMethodKey);
2568
+ this.addReference(requestBodyResponse);
2569
+ }
2570
+ addRequestBodyToOpenApi(input, urlValue, httpMethodKey) {
2571
+ const requestBodyResponse = new RequestBodyBuilder().build(input);
2572
+ this.openApiModel.paths[urlValue][httpMethodKey].requestBody = requestBodyResponse.body;
2573
+ }
2574
+ addParametersToOpenApi(input, urlValue, httpMethodKey) {
2575
+ const parameterObjectResponse = new ParameterObjectBuilder().build(input);
2576
+ if (this.openApiModel.paths[urlValue][httpMethodKey].parameters === void 0) {
2577
+ this.openApiModel.paths[urlValue][httpMethodKey].parameters = [];
2578
+ }
2579
+ this.openApiModel.paths[urlValue][httpMethodKey].parameters.push(parameterObjectResponse.body);
2580
+ }
2581
+ addHttpResponsesToOpenApi(input, urlValue, httpMethodKey) {
2582
+ const responseObjectResponse = new ResponsesBuilder().build(input);
2583
+ if (this.openApiModel.paths[urlValue][httpMethodKey].responses === void 0) {
2584
+ this.openApiModel.paths[urlValue][httpMethodKey].responses = {};
2585
+ }
2586
+ this.openApiModel.paths[urlValue][httpMethodKey].responses[input.statusCode] = responseObjectResponse.body;
2587
+ }
2588
+ fallbackHttpRequestBodyParser(httpUrlEndpoint, httpMethodKey) {
2589
+ return (methodMirror) => {
2590
+ const parameters = methodMirror.parameters;
2591
+ if (!parameters.length) {
2592
+ return;
2593
+ }
2594
+ const propertiesObject = {};
2595
+ parameters.forEach((currentParameter) => {
2596
+ const propertyKey = currentParameter.name;
2597
+ const propertyReference = new ReferenceBuilder().getReferenceType(currentParameter.typeReference);
2598
+ propertiesObject[propertyKey] = propertyReference.schema;
2599
+ this.addReference({
2600
+ reference: {
2601
+ entrypointReferenceObject: propertyReference.schema,
2602
+ referenceComponents: propertyReference.referenceComponents
2603
+ }
2604
+ });
2605
+ });
2606
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].requestBody = {
2607
+ content: {
2608
+ "application/json": {
2609
+ schema: {
2610
+ type: "object",
2611
+ properties: propertiesObject
2612
+ }
2613
+ }
2614
+ }
2615
+ };
2616
+ };
2617
+ }
2618
+ getFallbackHttpResponseParser(httpUrlEndpoint, httpMethodKey) {
2619
+ return (methodMirror) => {
2620
+ var _a, _b;
2621
+ const returnType = methodMirror.typeReference;
2622
+ if (returnType.type.toLowerCase() === "void") {
2623
+ return;
2624
+ }
2625
+ const reference = new ReferenceBuilder().getReferenceType(returnType);
2626
+ this.addReference({
2627
+ reference: {
2628
+ entrypointReferenceObject: reference.schema,
2629
+ referenceComponents: reference.referenceComponents
2630
+ }
2631
+ });
2632
+ if (this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].responses === void 0) {
2633
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].responses = {};
2634
+ }
2635
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].responses["200"] = {
2636
+ description: (_b = (_a = methodMirror.docComment) == null ? void 0 : _a.description) != null ? _b : "Status code 200",
2637
+ content: {
2638
+ "application/json": { schema: reference.schema }
2639
+ }
2640
+ };
2641
+ };
2642
+ }
2643
+ addReference(referenceHolder) {
2644
+ if (referenceHolder.reference) {
2645
+ if (this.openApiModel.components === void 0) {
2646
+ this.openApiModel.components = {
2647
+ schemas: {}
2648
+ };
2649
+ }
2650
+ if (!referenceHolder.reference.referenceComponents.length) {
2651
+ return;
2652
+ }
2653
+ referenceHolder.reference.referenceComponents.forEach((current) => {
2654
+ this.openApiModel.components.schemas[current.referencedClass] = current.schema;
2655
+ });
2656
+ }
2657
+ }
2658
+ }
2659
+
2660
+ const camel2title = (camelCase) => camelCase.replace(/\//g, " ").replace(/([A-Z])/g, (match) => ` ${match}`).replace(/\b\w/g, (match) => match.toUpperCase()).replace(/^./, (match) => match.toUpperCase()).trim();
2661
+
2662
+ var __defProp$1 = Object.defineProperty;
2663
+ var __defProps$1 = Object.defineProperties;
2664
+ var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
2665
+ var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
2666
+ var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
2667
+ var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
2668
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2669
+ var __spreadValues$1 = (a, b) => {
2670
+ for (var prop in b || (b = {}))
2671
+ if (__hasOwnProp$1.call(b, prop))
2672
+ __defNormalProp$1(a, prop, b[prop]);
2673
+ if (__getOwnPropSymbols$1)
2674
+ for (var prop of __getOwnPropSymbols$1(b)) {
2675
+ if (__propIsEnum$1.call(b, prop))
2676
+ __defNormalProp$1(a, prop, b[prop]);
2677
+ }
2678
+ return a;
2679
+ };
2680
+ var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
2681
+ function createOpenApiFile(fileName, openApiModel) {
2682
+ const content = JSON.stringify(__spreadProps$1(__spreadValues$1({}, openApiModel), { namespace: void 0 }), null, 2);
2683
+ return {
2684
+ fileExtension: "json",
2685
+ fileName,
2686
+ directory: "",
2687
+ content,
2688
+ frontmatter: null,
2689
+ group: null
2690
+ };
2691
+ }
2692
+
2693
+ class OpenApiDocsProcessor {
2694
+ constructor() {
2695
+ this.onAfterProcess = () => {
2696
+ const page = createOpenApiFile(Settings.getInstance().openApiFileName(), this.openApiModel);
2697
+ this._fileContainer.pushFile(page);
2698
+ };
2699
+ this._fileContainer = new FileContainer();
2700
+ const title = Settings.getInstance().getOpenApiTitle();
2701
+ if (!title) {
2702
+ throw Error("No OpenApi title was provided.");
2703
+ }
2704
+ this.openApiModel = new OpenApi(title, "1.0.0", Settings.getInstance().getNamespace());
2705
+ }
2706
+ fileBuilder() {
2707
+ return this._fileContainer;
2708
+ }
2709
+ onProcess(type) {
2710
+ var _a, _b;
2711
+ Logger.logSingle(`Processing ${type.name}`, false, "green", false);
2712
+ const endpointPath = this.getEndpointPath(type);
2713
+ if (!endpointPath) {
2714
+ return;
2715
+ }
2716
+ this.openApiModel.paths[endpointPath] = {};
2717
+ if ((_a = type.docComment) == null ? void 0 : _a.description) {
2718
+ this.openApiModel.paths[endpointPath].description = type.docComment.description;
2719
+ }
2720
+ const typeAsClass = type;
2721
+ const tagName = camel2title(endpointPath);
2722
+ this.openApiModel.tags.push({
2723
+ name: tagName,
2724
+ description: (_b = type.docComment) == null ? void 0 : _b.description
2725
+ });
2726
+ const parser = new MethodParser(this.openApiModel);
2727
+ parser.parseMethod(typeAsClass, endpointPath, "get", tagName);
2728
+ parser.parseMethod(typeAsClass, endpointPath, "patch", tagName);
2729
+ parser.parseMethod(typeAsClass, endpointPath, "post", tagName);
2730
+ parser.parseMethod(typeAsClass, endpointPath, "put", tagName);
2731
+ parser.parseMethod(typeAsClass, endpointPath, "delete", tagName);
2732
+ }
2733
+ getEndpointPath(type) {
2734
+ var _a;
2735
+ const restResourceAnnotation = type.annotations.find((element) => element.name.toLowerCase() === "restresource");
2736
+ const urlMapping = (_a = restResourceAnnotation == null ? void 0 : restResourceAnnotation.elementValues) == null ? void 0 : _a.find(
2737
+ (element) => element.key.toLowerCase() === "urlmapping"
2738
+ );
2739
+ if (!urlMapping) {
2740
+ Logger.error(`Type does not contain urlMapping annotation ${type.name}`);
2741
+ return null;
2742
+ }
2743
+ let endpointPath = urlMapping.value.replaceAll('"', "").replaceAll("'", "").replaceAll("/*", "/");
2744
+ if (endpointPath.startsWith("/")) {
2745
+ endpointPath = endpointPath.substring(1);
2746
+ }
2747
+ return endpointPath;
2748
+ }
2749
+ }
2750
+
2751
+ function openApi(fileBodies, config) {
2752
+ const manifest = createManifest(new RawBodyParser(fileBodies), reflectionWithLogger);
2753
+ TypesRepository.getInstance().populateAll(manifest.types);
2754
+ const filteredTypes = filterByScopes(manifest);
2755
+ const processor = new OpenApiDocsProcessor();
2756
+ Transpiler.generate(filteredTypes, processor);
2757
+ const generatedFiles = processor.fileBuilder().files();
2758
+ FileWriter.write(generatedFiles, config.targetDir, (file) => {
2759
+ Logger.logSingle(`${file.fileName} processed.`, false, "green", false);
2760
+ });
2761
+ ErrorLogger.logErrors(filteredTypes);
2762
+ }
2763
+ function reflectionWithLogger(apexBundle) {
2764
+ var _a;
2765
+ const result = apexReflection.reflect(apexBundle.content);
2766
+ if (result.error) {
2767
+ Logger.error(`${apexBundle.filePath} - Parsing error ${(_a = result.error) == null ? void 0 : _a.message}`);
2768
+ }
2769
+ return result;
2770
+ }
2771
+ function filterByScopes(manifest) {
2772
+ const filteredTypes = manifest.filteredByAccessModifierAndAnnotations([
2773
+ "restresource",
2774
+ "httpdelete",
2775
+ "httpget",
2776
+ "httppatch",
2777
+ "httppost",
2778
+ "httpput"
2779
+ ]);
2780
+ const filteredLogMessage = `Filtered ${manifest.types.length - filteredTypes.length} file(s), only keeping classes annotated as @RestResource.`;
2781
+ Logger.clear();
2782
+ Logger.logSingle(filteredLogMessage, false, "green", false);
2783
+ Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, "green", false);
2784
+ return filteredTypes;
2785
+ }
2786
+
2787
+ const APEX_FILE_EXTENSION = ".cls";
2788
+ class ApexFileReader {
2789
+ /**
2790
+ * Reads from .cls files and returns their raw body.
2791
+ */
2792
+ static processFiles(fileSystem, rootPath, includeMetadata) {
2793
+ let bundles = [];
2794
+ const directoryContents = fileSystem.readDirectory(rootPath);
2795
+ directoryContents.forEach((filePath) => {
2796
+ const currentPath = fileSystem.joinPath(rootPath, filePath);
2797
+ if (fileSystem.isDirectory(currentPath)) {
2798
+ bundles = bundles.concat(this.processFiles(fileSystem, currentPath, includeMetadata));
2799
+ }
2800
+ if (!this.isApexFile(filePath)) {
2801
+ return;
2802
+ }
2803
+ const rawTypeContent = fileSystem.readFile(currentPath);
2804
+ const metadataPath = fileSystem.joinPath(rootPath, `${filePath}-meta.xml`);
2805
+ let rawMetadataContent = null;
2806
+ if (includeMetadata) {
2807
+ rawMetadataContent = fileSystem.exists(metadataPath) ? fileSystem.readFile(metadataPath) : null;
2808
+ }
2809
+ bundles.push({ filePath: currentPath, content: rawTypeContent, metadataContent: rawMetadataContent });
2810
+ });
2811
+ return bundles;
2812
+ }
2813
+ static isApexFile(currentFile) {
2814
+ return currentFile.endsWith(APEX_FILE_EXTENSION);
2815
+ }
2816
+ }
2817
+
2818
+ class DefaultFileSystem {
2819
+ isDirectory(pathToRead) {
2820
+ return fs__namespace.statSync(pathToRead).isDirectory();
2821
+ }
2822
+ readDirectory(sourceDirectory) {
2823
+ return fs__namespace.readdirSync(sourceDirectory);
2824
+ }
2825
+ readFile(pathToRead) {
2826
+ const rawFile = fs__namespace.readFileSync(pathToRead);
2827
+ return rawFile.toString();
2828
+ }
2829
+ joinPath(...paths) {
2830
+ return path__namespace.join(...paths);
2831
+ }
2832
+ exists(path2) {
2833
+ return fs__namespace.existsSync(path2);
2834
+ }
2835
+ }
2836
+
2837
+ var __async$1 = (__this, __arguments, generator) => {
2838
+ return new Promise((resolve, reject) => {
2839
+ var fulfilled = (value) => {
2840
+ try {
2841
+ step(generator.next(value));
2842
+ } catch (e) {
2843
+ reject(e);
2844
+ }
2845
+ };
2846
+ var rejected = (value) => {
2847
+ try {
2848
+ step(generator.throw(value));
2849
+ } catch (e) {
2850
+ reject(e);
2851
+ }
2852
+ };
2853
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
2854
+ step((generator = generator.apply(__this, __arguments)).next());
2855
+ });
2856
+ };
2857
+ class Apexdocs {
2858
+ /**
2859
+ * Generates documentation out of Apex source files.
2860
+ */
2861
+ static generate(config) {
2862
+ return __async$1(this, null, function* () {
2863
+ Logger.logSingle("Initializing...", false);
2864
+ const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem(), config.sourceDir, config.includeMetadata);
2865
+ switch (config.targetGenerator) {
2866
+ case "markdown":
2867
+ yield generate(fileBodies, config);
2868
+ break;
2869
+ case "openapi":
2870
+ openApi(fileBodies, config);
2871
+ break;
2872
+ }
2873
+ });
2874
+ }
2875
+ }
2876
+
2877
+ const markdownOptions = {
2878
+ sourceDir: {
2879
+ type: "string",
2880
+ alias: "s",
2881
+ demandOption: true,
2882
+ describe: "The directory location which contains your apex .cls classes."
2883
+ },
2884
+ targetDir: {
2885
+ type: "string",
2886
+ alias: "t",
2887
+ default: defaults.defaults.targetDir,
2888
+ describe: "The directory location where documentation will be generated to."
2889
+ },
2890
+ scope: {
2891
+ type: "string",
2892
+ array: true,
2893
+ alias: "p",
2894
+ default: defaults.defaults.scope,
2895
+ describe: "A list of scopes to document. Values should be separated by a space, e.g --scope global public namespaceaccessible. Annotations are supported and should be passed lowercased and without the @ symbol, e.g. namespaceaccessible auraenabled. Note that this setting is ignored if generating an OpenApi REST specification since that looks for classes annotated with @RestResource."
2896
+ },
2897
+ defaultGroupName: {
2898
+ type: "string",
2899
+ default: defaults.defaults.defaultGroupName,
2900
+ describe: "Defines the @group name to be used when a file does not specify it."
2901
+ },
2902
+ openApiTitle: {
2903
+ type: "string",
2904
+ default: "Apex REST Api",
2905
+ describe: 'If using "openapi" as the target generator, this allows you to specify the OpenApi title value.'
2906
+ },
2907
+ namespace: {
2908
+ type: "string",
2909
+ describe: "The package namespace, if any. If this value is provided the namespace will be added as a prefix to all of the parsed files. If generating an OpenApi definition, it will be added to the file's Server Url."
2910
+ },
2911
+ openApiFileName: {
2912
+ type: "string",
2913
+ describe: 'If using "openapi" as the target generator, this allows you to specify the name of the output file.',
2914
+ default: "openapi"
2915
+ },
2916
+ sortMembersAlphabetically: {
2917
+ type: "boolean",
2918
+ describe: "Whether to sort members alphabetically.",
2919
+ default: defaults.defaults.sortMembersAlphabetically
2920
+ },
2921
+ includeMetadata: {
2922
+ type: "boolean",
2923
+ describe: "Whether to include the file's meta.xml information: Whether it is active and and the API version",
2924
+ default: defaults.defaults.includeMetadata
2925
+ }
2926
+ };
2927
+
2928
+ var __defProp = Object.defineProperty;
2929
+ var __defProps = Object.defineProperties;
2930
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
2931
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
2932
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
2933
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
2934
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2935
+ var __spreadValues = (a, b) => {
2936
+ for (var prop in b || (b = {}))
2937
+ if (__hasOwnProp.call(b, prop))
2938
+ __defNormalProp(a, prop, b[prop]);
2939
+ if (__getOwnPropSymbols)
2940
+ for (var prop of __getOwnPropSymbols(b)) {
2941
+ if (__propIsEnum.call(b, prop))
2942
+ __defNormalProp(a, prop, b[prop]);
2943
+ }
2944
+ return a;
2945
+ };
2946
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
2947
+ var __async = (__this, __arguments, generator) => {
2948
+ return new Promise((resolve, reject) => {
2949
+ var fulfilled = (value) => {
2950
+ try {
2951
+ step(generator.next(value));
2952
+ } catch (e) {
2953
+ reject(e);
2954
+ }
2955
+ };
2956
+ var rejected = (value) => {
2957
+ try {
2958
+ step(generator.throw(value));
2959
+ } catch (e) {
2960
+ reject(e);
2961
+ }
2962
+ };
2963
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
2964
+ step((generator = generator.apply(__this, __arguments)).next());
2965
+ });
2966
+ };
2967
+ function _extractConfig() {
2968
+ return cosmiconfig.cosmiconfig("apexdocs", {
2969
+ loaders: {
2970
+ ".ts": cosmiconfigTypescriptLoader.TypeScriptLoader()
2971
+ }
2972
+ }).search();
2973
+ }
2974
+ function _extractYargs(config) {
2975
+ return yargs__namespace.config(config == null ? void 0 : config.config).command(
2976
+ "markdown",
2977
+ "Generate documentation from Apex classes as a Markdown site.",
2978
+ (yargs2) => yargs2.options(markdownOptions)
2979
+ ).command("openapi", "Generate an OpenApi REST specification from Apex classes.").demandCommand().parseSync();
2980
+ }
2981
+ function extractArgs() {
2982
+ return __async(this, null, function* () {
2983
+ const config = yield _extractConfig();
2984
+ const cliArgs = _extractYargs(config);
2985
+ const commandName = cliArgs._[0];
2986
+ return __spreadProps(__spreadValues(__spreadValues({}, config == null ? void 0 : config.config), cliArgs), { targetGenerator: commandName });
2987
+ });
2988
+ }
2989
+
2990
+ function main() {
2991
+ function cathError(error) {
2992
+ console.error(error);
2993
+ process.exit(1);
2994
+ }
2995
+ extractArgs().then((config) => Apexdocs.generate(config).catch(cathError)).catch(cathError);
2996
+ }
2997
+ main();