@cparra/apexdocs 2.8.0 → 2.9.0-alpha.0

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 (155) hide show
  1. package/docs/Main/SampleClass.md +188 -188
  2. package/docs/openapi.json +351 -0
  3. package/examples/force-app/main/default/classes/ChildClass.cls +3 -1
  4. package/examples/force-app/main/default/classes/ParentClass.cls +4 -4
  5. package/examples/force-app/main/default/restapi/SampleRestResource.cls +189 -0
  6. package/lib/application/Apexdocs.d.ts +1 -0
  7. package/lib/application/Apexdocs.js +33 -9
  8. package/lib/application/Apexdocs.js.map +1 -1
  9. package/lib/cli/generate.js +11 -3
  10. package/lib/cli/generate.js.map +1 -1
  11. package/lib/index.js +6 -2
  12. package/lib/index.js.map +1 -1
  13. package/lib/model/apex-type-wrappers/ClassMirrorWrapper.d.ts +7 -0
  14. package/lib/model/apex-type-wrappers/ClassMirrorWrapper.js +14 -0
  15. package/lib/model/apex-type-wrappers/ClassMirrorWrapper.js.map +1 -0
  16. package/lib/model/inheritance.d.ts +5 -5
  17. package/lib/model/manifest.d.ts +1 -1
  18. package/lib/model/markdown-file.d.ts +2 -2
  19. package/lib/model/markdown-file.js +2 -2
  20. package/lib/model/markdown-file.js.map +1 -1
  21. package/lib/model/markdown-generation-util/doc-comment-annotation-util.js.map +1 -1
  22. package/lib/model/markdown-generation-util/field-declaration-util.js.map +1 -1
  23. package/lib/model/markdown-generation-util/index.js +6 -2
  24. package/lib/model/markdown-generation-util/index.js.map +1 -1
  25. package/lib/model/markdown-generation-util/method-declaration-util.js +1 -1
  26. package/lib/model/markdown-generation-util/method-declaration-util.js.map +1 -1
  27. package/lib/model/markdown-generation-util/type-declaration-util.js +2 -2
  28. package/lib/model/markdown-generation-util/type-declaration-util.js.map +1 -1
  29. package/lib/model/markdown-home-file.js +1 -1
  30. package/lib/model/markdown-home-file.js.map +1 -1
  31. package/lib/model/markdown-type-file.js +5 -5
  32. package/lib/model/markdown-type-file.js.map +1 -1
  33. package/lib/model/openapi/apex-doc-types.d.ts +18 -0
  34. package/lib/model/openapi/apex-doc-types.js +5 -0
  35. package/lib/model/openapi/apex-doc-types.js.map +1 -0
  36. package/lib/model/openapi/open-api-types.d.ts +87 -0
  37. package/lib/model/openapi/open-api-types.js +3 -0
  38. package/lib/model/openapi/open-api-types.js.map +1 -0
  39. package/lib/model/openapi/open-api.d.ts +15 -0
  40. package/lib/model/openapi/open-api.js +33 -0
  41. package/lib/model/openapi/open-api.js.map +1 -0
  42. package/lib/model/openapi/openapi-type-file.d.ts +7 -0
  43. package/lib/model/openapi/openapi-type-file.js +16 -0
  44. package/lib/model/openapi/openapi-type-file.js.map +1 -0
  45. package/lib/model/{file.d.ts → outputFile.d.ts} +1 -1
  46. package/lib/model/{file.js → outputFile.js} +4 -4
  47. package/lib/model/outputFile.js.map +1 -0
  48. package/lib/model/types-repository.d.ts +6 -3
  49. package/lib/model/types-repository.js +12 -5
  50. package/lib/model/types-repository.js.map +1 -1
  51. package/lib/service/file-writer.d.ts +2 -2
  52. package/lib/service/file-writer.js.map +1 -1
  53. package/lib/service/metadata-processor.js.map +1 -1
  54. package/lib/service/parser.d.ts +1 -1
  55. package/lib/settings.d.ts +4 -5
  56. package/lib/settings.js +5 -23
  57. package/lib/settings.js.map +1 -1
  58. package/lib/test-helpers/AnnotationBuilder.d.ts +12 -0
  59. package/lib/test-helpers/AnnotationBuilder.js +31 -0
  60. package/lib/test-helpers/AnnotationBuilder.js.map +1 -0
  61. package/lib/test-helpers/ClassMirrorBuilder.d.ts +14 -0
  62. package/lib/test-helpers/ClassMirrorBuilder.js +44 -0
  63. package/lib/test-helpers/ClassMirrorBuilder.js.map +1 -0
  64. package/lib/test-helpers/DocCommentAnnotationBuilder.d.ts +6 -0
  65. package/lib/test-helpers/DocCommentAnnotationBuilder.js +21 -0
  66. package/lib/test-helpers/DocCommentAnnotationBuilder.js.map +1 -0
  67. package/lib/test-helpers/DocCommentBuilder.d.ts +12 -0
  68. package/lib/test-helpers/DocCommentBuilder.js +38 -0
  69. package/lib/test-helpers/DocCommentBuilder.js.map +1 -0
  70. package/lib/test-helpers/MethodMirrorBuilder.d.ts +10 -0
  71. package/lib/test-helpers/MethodMirrorBuilder.js +34 -0
  72. package/lib/test-helpers/MethodMirrorBuilder.js.map +1 -0
  73. package/lib/test-helpers/SettingsBuilder.d.ts +8 -0
  74. package/lib/test-helpers/SettingsBuilder.js +24 -0
  75. package/lib/test-helpers/SettingsBuilder.js.map +1 -0
  76. package/lib/transpiler/factory.d.ts +6 -0
  77. package/lib/transpiler/factory.js +32 -0
  78. package/lib/transpiler/factory.js.map +1 -0
  79. package/lib/transpiler/file-container.d.ts +4 -4
  80. package/lib/transpiler/file-container.js.map +1 -1
  81. package/lib/transpiler/generator-choices.d.ts +1 -0
  82. package/lib/transpiler/generator-choices.js +3 -0
  83. package/lib/transpiler/generator-choices.js.map +1 -0
  84. package/lib/transpiler/markdown/class-file-generatorHelper.js +4 -2
  85. package/lib/transpiler/markdown/class-file-generatorHelper.js.map +1 -1
  86. package/lib/transpiler/openapi/open-api-docs-processor.d.ts +12 -0
  87. package/lib/transpiler/openapi/open-api-docs-processor.js +62 -0
  88. package/lib/transpiler/openapi/open-api-docs-processor.js.map +1 -0
  89. package/lib/transpiler/openapi/parsers/Builder.d.ts +16 -0
  90. package/lib/transpiler/openapi/parsers/Builder.js +30 -0
  91. package/lib/transpiler/openapi/parsers/Builder.js.map +1 -0
  92. package/lib/transpiler/openapi/parsers/MethodParser.d.ts +17 -0
  93. package/lib/transpiler/openapi/parsers/MethodParser.js +104 -0
  94. package/lib/transpiler/openapi/parsers/MethodParser.js.map +1 -0
  95. package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.d.ts +7 -0
  96. package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.js +11 -0
  97. package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.js.map +1 -0
  98. package/lib/transpiler/openapi/parsers/ReferenceBuilder.d.ts +16 -0
  99. package/lib/transpiler/openapi/parsers/ReferenceBuilder.js +65 -0
  100. package/lib/transpiler/openapi/parsers/ReferenceBuilder.js.map +1 -0
  101. package/lib/transpiler/openapi/parsers/RequestBodyBuilder.d.ts +10 -0
  102. package/lib/transpiler/openapi/parsers/RequestBodyBuilder.js +20 -0
  103. package/lib/transpiler/openapi/parsers/RequestBodyBuilder.js.map +1 -0
  104. package/lib/transpiler/openapi/parsers/ResponsesBuilder.d.ts +7 -0
  105. package/lib/transpiler/openapi/parsers/ResponsesBuilder.js +18 -0
  106. package/lib/transpiler/openapi/parsers/ResponsesBuilder.js.map +1 -0
  107. package/lib/transpiler/processor-type-transpiler.d.ts +2 -2
  108. package/lib/transpiler/processor-type-transpiler.js +3 -0
  109. package/lib/transpiler/processor-type-transpiler.js.map +1 -1
  110. package/lib/transpiler/transpiler.js.map +1 -1
  111. package/lib/util/error-logger.js.map +1 -1
  112. package/package.json +8 -5
  113. package/src/application/Apexdocs.ts +37 -16
  114. package/src/cli/generate.ts +13 -4
  115. package/src/model/apex-type-wrappers/ClassMirrorWrapper.ts +12 -0
  116. package/src/model/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +15 -0
  117. package/src/model/markdown-file.ts +2 -2
  118. package/src/model/markdown-generation-util/type-declaration-util.ts +1 -1
  119. package/src/model/openapi/__tests__/open-api.spec.ts +22 -0
  120. package/src/model/openapi/apex-doc-types.ts +25 -0
  121. package/src/model/openapi/open-api-types.ts +112 -0
  122. package/src/model/openapi/open-api.ts +39 -0
  123. package/src/model/openapi/openapi-type-file.ts +13 -0
  124. package/src/model/{file.ts → outputFile.ts} +1 -1
  125. package/src/model/types-repository.ts +14 -5
  126. package/src/service/__tests__/apex-file-reader.spec.ts +4 -4
  127. package/src/service/__tests__/manifest-factory.spec.ts +2 -1
  128. package/src/service/file-writer.ts +2 -2
  129. package/src/settings.ts +8 -29
  130. package/src/test-helpers/AnnotationBuilder.ts +29 -0
  131. package/src/test-helpers/ClassMirrorBuilder.ts +44 -0
  132. package/src/test-helpers/DocCommentAnnotationBuilder.ts +18 -0
  133. package/src/test-helpers/DocCommentBuilder.ts +36 -0
  134. package/src/test-helpers/MethodMirrorBuilder.ts +34 -0
  135. package/src/test-helpers/SettingsBuilder.ts +21 -0
  136. package/src/transpiler/factory.ts +33 -0
  137. package/src/transpiler/file-container.ts +4 -4
  138. package/src/transpiler/generator-choices.ts +1 -0
  139. package/src/transpiler/markdown/class-file-generatorHelper.ts +4 -2
  140. package/src/transpiler/openapi/__tests__/open-api-docs-processor.spec.ts +41 -0
  141. package/src/transpiler/openapi/open-api-docs-processor.ts +76 -0
  142. package/src/transpiler/openapi/parsers/Builder.ts +40 -0
  143. package/src/transpiler/openapi/parsers/MethodParser.ts +140 -0
  144. package/src/transpiler/openapi/parsers/ParameterObjectBuilder.ts +13 -0
  145. package/src/transpiler/openapi/parsers/ReferenceBuilder.ts +80 -0
  146. package/src/transpiler/openapi/parsers/RequestBodyBuilder.ts +19 -0
  147. package/src/transpiler/openapi/parsers/ResponsesBuilder.ts +17 -0
  148. package/src/transpiler/openapi/parsers/__tests__/MethodParser.spec.ts +44 -0
  149. package/src/transpiler/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +64 -0
  150. package/src/transpiler/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +14 -0
  151. package/src/transpiler/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +60 -0
  152. package/src/transpiler/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +51 -0
  153. package/src/transpiler/processor-type-transpiler.ts +3 -1
  154. package/tsconfig.json +4 -1
  155. package/lib/model/file.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenApiDocsProcessor = void 0;
4
+ const processor_type_transpiler_1 = require("../processor-type-transpiler");
5
+ const file_container_1 = require("../file-container");
6
+ const openapi_type_file_1 = require("../../model/openapi/openapi-type-file");
7
+ const logger_1 = require("../../util/logger");
8
+ const open_api_1 = require("../../model/openapi/open-api");
9
+ const settings_1 = require("../../settings");
10
+ const MethodParser_1 = require("./parsers/MethodParser");
11
+ class OpenApiDocsProcessor extends processor_type_transpiler_1.default {
12
+ constructor() {
13
+ super();
14
+ this._fileContainer = new file_container_1.FileContainer();
15
+ const title = settings_1.Settings.getInstance().getOpenApiTitle();
16
+ if (!title) {
17
+ throw Error('No OpenApi title was provided.');
18
+ }
19
+ this.openApiModel = new open_api_1.OpenApi(title, '1.0.0');
20
+ }
21
+ fileBuilder() {
22
+ return this._fileContainer;
23
+ }
24
+ onProcess(type) {
25
+ var _a;
26
+ logger_1.Logger.logSingle(`Processing ${type.name}`, false, 'green', false);
27
+ const endpointPath = this.getEndpointPath(type);
28
+ if (!endpointPath) {
29
+ return;
30
+ }
31
+ this.openApiModel.paths[endpointPath] = {};
32
+ if ((_a = type.docComment) === null || _a === void 0 ? void 0 : _a.description) {
33
+ this.openApiModel.paths[endpointPath].description = type.docComment.description;
34
+ }
35
+ // We can safely cast to a ClassMirror, since only these support the @RestResource annotation
36
+ const typeAsClass = type;
37
+ const parser = new MethodParser_1.MethodParser(this.openApiModel);
38
+ // GET
39
+ parser.parseMethod(typeAsClass, endpointPath, 'get');
40
+ // PATCH
41
+ parser.parseMethod(typeAsClass, endpointPath, 'patch');
42
+ // POST
43
+ parser.parseMethod(typeAsClass, endpointPath, 'post');
44
+ // PUT
45
+ parser.parseMethod(typeAsClass, endpointPath, 'put');
46
+ // DELETE
47
+ parser.parseMethod(typeAsClass, endpointPath, 'delete');
48
+ this._fileContainer.pushFile(new openapi_type_file_1.OpenapiTypeFile(this.openApiModel));
49
+ }
50
+ getEndpointPath(type) {
51
+ var _a;
52
+ const restResourceAnnotation = type.annotations.find((element) => element.name.toLowerCase() === 'restresource');
53
+ const urlMapping = (_a = restResourceAnnotation === null || restResourceAnnotation === void 0 ? void 0 : restResourceAnnotation.elementValues) === null || _a === void 0 ? void 0 : _a.find((element) => element.key.toLowerCase() === 'urlmapping');
54
+ if (!urlMapping) {
55
+ logger_1.Logger.error(`Type does not contain urlMapping annotation ${type.name}`);
56
+ return null;
57
+ }
58
+ return urlMapping.value.replaceAll('"', '').replaceAll("'", '');
59
+ }
60
+ }
61
+ exports.OpenApiDocsProcessor = OpenApiDocsProcessor;
62
+ //# sourceMappingURL=open-api-docs-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-api-docs-processor.js","sourceRoot":"","sources":["../../../src/transpiler/openapi/open-api-docs-processor.ts"],"names":[],"mappings":";;;AAAA,4EAAmE;AACnE,sDAAkD;AAElD,6EAAwE;AACxE,8CAA2C;AAC3C,2DAAuD;AACvD,6CAA0C;AAC1C,yDAAsD;AAEtD,MAAa,oBAAqB,SAAQ,mCAAuB;IAI/D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,IAAI,8BAAa,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC,eAAe,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,IAAU;;QAClB,eAAM,CAAC,SAAS,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAEnE,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;SACR;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAC3C,IAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE;YAChC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;SACjF;QAED,6FAA6F;QAC7F,MAAM,WAAW,GAAG,IAAmB,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM;QACN,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAErD,QAAQ;QACR,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAEvD,OAAO;QACP,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM;QACN,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAErD,SAAS;QACT,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,mCAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,CAAC;IAEO,eAAe,CAAC,IAAU;;QAChC,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,CAAC;QACjH,MAAM,UAAU,GAAG,MAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,aAAa,0CAAE,IAAI,CAC5D,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,YAAY,CACxD,CAAC;QACF,IAAI,CAAC,UAAU,EAAE;YACf,eAAM,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;SACb;QAED,OAAO,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;CACF;AAlED,oDAkEC"}
@@ -0,0 +1,16 @@
1
+ import { Reference } from './ReferenceBuilder';
2
+ import { ApexDocSchemaObject } from '../../../model/openapi/apex-doc-types';
3
+ import { SchemaObject } from '../../../model/openapi/open-api-types';
4
+ export type ApexDocSchemaAware = {
5
+ schema: ApexDocSchemaObject;
6
+ };
7
+ export declare abstract class Builder<T, K> {
8
+ build(schemaAware: ApexDocSchemaAware): Response<T>;
9
+ abstract buildBody(apexDocObject: K, reference?: Reference): T;
10
+ protected getOpenApiSchemaFromApexDocSchema(schemaAware: ApexDocSchemaAware, reference?: Reference): SchemaObject;
11
+ private isReferenceString;
12
+ }
13
+ export interface Response<T> {
14
+ reference?: Reference;
15
+ body: T;
16
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Builder = void 0;
4
+ const ReferenceBuilder_1 = require("./ReferenceBuilder");
5
+ class Builder {
6
+ constructor() {
7
+ this.isReferenceString = (targetObject) => {
8
+ return typeof targetObject === 'string' || targetObject instanceof String;
9
+ };
10
+ }
11
+ build(schemaAware) {
12
+ let reference;
13
+ if (this.isReferenceString(schemaAware.schema)) {
14
+ reference = new ReferenceBuilder_1.ReferenceBuilder().build(schemaAware.schema);
15
+ }
16
+ return {
17
+ reference: reference,
18
+ body: this.buildBody(schemaAware, reference),
19
+ };
20
+ }
21
+ getOpenApiSchemaFromApexDocSchema(schemaAware, reference) {
22
+ if (this.isReferenceString(schemaAware.schema)) {
23
+ // We are dealing with a reference
24
+ return reference.referenceObject;
25
+ }
26
+ return schemaAware.schema;
27
+ }
28
+ }
29
+ exports.Builder = Builder;
30
+ //# sourceMappingURL=Builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Builder.js","sourceRoot":"","sources":["../../../../src/transpiler/openapi/parsers/Builder.ts"],"names":[],"mappings":";;;AAAA,yDAAiE;AAQjE,MAAsB,OAAO;IAA7B;QAuBU,sBAAiB,GAAG,CAAC,YAAiB,EAA0B,EAAE;YACxE,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,YAAY,MAAM,CAAC;QAC5E,CAAC,CAAC;IACJ,CAAC;IAzBC,KAAK,CAAC,WAA+B;QACnC,IAAI,SAAgC,CAAC;QACrC,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YAC9C,SAAS,GAAG,IAAI,mCAAgB,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAC9D;QAED,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAgB,EAAE,SAAS,CAAC;SAClD,CAAC;IACJ,CAAC;IAIS,iCAAiC,CAAC,WAA+B,EAAE,SAAqB;QAChG,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YAC9C,kCAAkC;YAClC,OAAO,SAAU,CAAC,eAAe,CAAC;SACnC;QACD,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;CAKF;AA1BD,0BA0BC"}
@@ -0,0 +1,17 @@
1
+ import { ClassMirror } from '@cparra/apex-reflection';
2
+ import { OpenApi } from '../../../model/openapi/open-api';
3
+ type HttpOperations = 'get' | 'put' | 'post' | 'delete' | 'patch';
4
+ /**
5
+ * Parses ApexDocs with HTTP REST annotations and turns them into an OpenApi specification.
6
+ */
7
+ export declare class MethodParser {
8
+ openApiModel: OpenApi;
9
+ constructor(openApiModel: OpenApi);
10
+ parseMethod(classMirror: ClassMirror, httpUrlEndpoint: string, httpMethodKey: HttpOperations): void;
11
+ private parseHttpAnnotation;
12
+ private addRequestBodyToOpenApi;
13
+ private addParametersToOpenApi;
14
+ private addHttpResponsesToOpenApi;
15
+ private addReference;
16
+ }
17
+ export {};
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MethodParser = void 0;
4
+ const yaml = require("js-yaml");
5
+ const ClassMirrorWrapper_1 = require("../../../model/apex-type-wrappers/ClassMirrorWrapper");
6
+ const ParameterObjectBuilder_1 = require("./ParameterObjectBuilder");
7
+ const ResponsesBuilder_1 = require("./ResponsesBuilder");
8
+ const RequestBodyBuilder_1 = require("./RequestBodyBuilder");
9
+ /**
10
+ * Parses ApexDocs with HTTP REST annotations and turns them into an OpenApi specification.
11
+ */
12
+ class MethodParser {
13
+ constructor(openApiModel) {
14
+ this.openApiModel = openApiModel;
15
+ }
16
+ parseMethod(classMirror, httpUrlEndpoint, httpMethodKey) {
17
+ var _a;
18
+ const classMirrorWrapper = new ClassMirrorWrapper_1.ClassMirrorWrapper(classMirror);
19
+ // Apex supports HttpGet, HttpPut, HttpPost, HttpDelete, and HttpPatch, so we search for a method
20
+ // that has one of those annotations.
21
+ const httpMethods = classMirrorWrapper.getMethodsByAnnotation(`http${httpMethodKey}`);
22
+ if (!httpMethods.length) {
23
+ return;
24
+ }
25
+ // We can assume there is at most one method per annotation, as this is an Apex rule.
26
+ const httpMethod = httpMethods[0];
27
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey] = {};
28
+ if ((_a = httpMethod.docComment) === null || _a === void 0 ? void 0 : _a.description) {
29
+ this.openApiModel.paths[httpUrlEndpoint][httpMethodKey].description = httpMethod.docComment.description;
30
+ }
31
+ this.parseHttpAnnotation(httpMethod, httpUrlEndpoint, 'http-request-body', (inYaml, urlValue) => this.addRequestBodyToOpenApi(inYaml, urlValue, httpMethodKey));
32
+ this.parseHttpAnnotation(httpMethod, httpUrlEndpoint, 'http-parameter', (inYaml, urlValue) => this.addParametersToOpenApi(inYaml, urlValue, httpMethodKey));
33
+ this.parseHttpAnnotation(httpMethod, httpUrlEndpoint, 'http-response', (inYaml, urlValue) => this.addHttpResponsesToOpenApi(inYaml, urlValue, httpMethodKey));
34
+ }
35
+ parseHttpAnnotation(httpGetMethod, urlValue, annotationName, addToOpenApi) {
36
+ var _a;
37
+ const annotations = (_a = httpGetMethod.docComment) === null || _a === void 0 ? void 0 : _a.annotations.filter((annotation) => annotation.name === annotationName);
38
+ if (!(annotations === null || annotations === void 0 ? void 0 : annotations.length)) {
39
+ return;
40
+ }
41
+ for (const annotation of annotations) {
42
+ // We expect the ApexDoc data representing this to be in YAML format.
43
+ const inYaml = annotation === null || annotation === void 0 ? void 0 : annotation.bodyLines.reduce((prev, current, _) => prev + '\n' + current);
44
+ if (!inYaml) {
45
+ return;
46
+ }
47
+ addToOpenApi(inYaml, urlValue);
48
+ }
49
+ }
50
+ addRequestBodyToOpenApi(inYaml, urlValue, httpMethodKey) {
51
+ // Convert the YAML into a JSON object.
52
+ const inJson = yaml.load(inYaml);
53
+ const requestBodyResponse = new RequestBodyBuilder_1.RequestBodyBuilder().build(inJson);
54
+ this.openApiModel.paths[urlValue][httpMethodKey].requestBody = requestBodyResponse.body;
55
+ if (requestBodyResponse.reference) {
56
+ // If a reference is returned, we want to make sure to add it to the OpenApi object as well
57
+ this.addReference(requestBodyResponse.reference);
58
+ }
59
+ }
60
+ addParametersToOpenApi(inYaml, urlValue, httpMethodKey) {
61
+ // Convert the YAML into a JSON object.
62
+ const inJson = yaml.load(inYaml);
63
+ const parameterObjectResponse = new ParameterObjectBuilder_1.ParameterObjectBuilder().build(inJson);
64
+ if (this.openApiModel.paths[urlValue][httpMethodKey].parameters === undefined) {
65
+ // If no parameters have been defined yet, initialize the list.
66
+ this.openApiModel.paths[urlValue][httpMethodKey].parameters = [];
67
+ }
68
+ this.openApiModel.paths[urlValue][httpMethodKey].parameters.push(parameterObjectResponse.body);
69
+ if (parameterObjectResponse.reference) {
70
+ // If a reference is returned, we want to make sure to add it to the OpenApi object as well
71
+ this.addReference(parameterObjectResponse.reference);
72
+ }
73
+ }
74
+ addHttpResponsesToOpenApi(inYaml, urlValue, httpMethodKey) {
75
+ // Convert the YAML into a JSON object.
76
+ const inJson = yaml.load(inYaml);
77
+ const responseObjectResponse = new ResponsesBuilder_1.ResponsesBuilder().build(inJson);
78
+ if (this.openApiModel.paths[urlValue][httpMethodKey].responses === undefined) {
79
+ this.openApiModel.paths[urlValue][httpMethodKey].responses = {};
80
+ }
81
+ this.openApiModel.paths[urlValue][httpMethodKey].responses[inJson.statusCode] = responseObjectResponse.body;
82
+ // TODO: There's some duplication with the next 3 lines, because we do the same in all 3 places
83
+ if (responseObjectResponse.reference) {
84
+ // If a reference is returned, we want to make sure to add it to the OpenApi object as well
85
+ this.addReference(responseObjectResponse.reference);
86
+ }
87
+ }
88
+ addReference(reference) {
89
+ // Add to "component" section if it hasn't been already
90
+ if (this.openApiModel.components === undefined) {
91
+ this.openApiModel.components = {
92
+ schemas: {},
93
+ };
94
+ }
95
+ // Check if the referenced object is already part of the OpenApi object
96
+ if (this.openApiModel.components.schemas[reference.referencedClass]) {
97
+ return;
98
+ }
99
+ // If it isn't, then add it
100
+ this.openApiModel.components.schemas[reference.referencedClass] = reference.schema;
101
+ }
102
+ }
103
+ exports.MethodParser = MethodParser;
104
+ //# sourceMappingURL=MethodParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodParser.js","sourceRoot":"","sources":["../../../../src/transpiler/openapi/parsers/MethodParser.ts"],"names":[],"mappings":";;;AAEA,gCAAgC;AAChC,6FAA0F;AAE1F,qEAAkE;AAClE,yDAAsD;AAMtD,6DAA0D;AAM1D;;GAEG;AACH,MAAa,YAAY;IACvB,YAAmB,YAAqB;QAArB,iBAAY,GAAZ,YAAY,CAAS;IAAG,CAAC;IAErC,WAAW,CAAC,WAAwB,EAAE,eAAuB,EAAE,aAA6B;;QACjG,MAAM,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,WAAW,CAAC,CAAC;QAC/D,iGAAiG;QACjG,qCAAqC;QACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACvB,OAAO;SACR;QAED,qFAAqF;QACrF,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QAC7D,IAAI,MAAA,UAAU,CAAC,UAAU,0CAAE,WAAW,EAAE;YACtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,aAAa,CAAE,CAAC,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;SAC1G;QAED,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAC9F,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAC9D,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAC3F,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAC7D,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAC1F,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAChE,CAAC;IACJ,CAAC;IAEO,mBAAmB,CACzB,aAA2B,EAC3B,QAAgB,EAChB,cAAsB,EACtB,YAA0B;;QAE1B,MAAM,WAAW,GAAG,MAAA,aAAa,CAAC,UAAU,0CAAE,WAAW,CAAC,MAAM,CAC9D,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CACnD,CAAC;QAEF,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA,EAAE;YACxB,OAAO;SACR;QAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,qEAAqE;YACrE,MAAM,MAAM,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC;YAEzF,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YAED,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAChC;IACH,CAAC;IAEO,uBAAuB,CAAC,MAAc,EAAE,QAAgB,EAAE,aAA6B;QAC7F,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAA2B,CAAC;QAC3D,MAAM,mBAAmB,GAAG,IAAI,uCAAkB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACzF,IAAI,mBAAmB,CAAC,SAAS,EAAE;YACjC,2FAA2F;YAC3F,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;SAClD;IACH,CAAC;IAEO,sBAAsB,CAAC,MAAc,EAAE,QAAgB,EAAE,aAA6B;QAC5F,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAA2B,CAAC;QAC3D,MAAM,uBAAuB,GAAG,IAAI,+CAAsB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3E,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,UAAU,KAAK,SAAS,EAAE;YAC9E,+DAA+D;YAC/D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,UAAU,GAAG,EAAE,CAAC;SACnE;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,UAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACjG,IAAI,uBAAuB,CAAC,SAAS,EAAE;YACrC,2FAA2F;YAC3F,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;SACtD;IACH,CAAC;IAEO,yBAAyB,CAAC,MAAc,EAAE,QAAgB,EAAE,aAA6B;QAC/F,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAwB,CAAC;QACxD,MAAM,sBAAsB,GAAG,IAAI,mCAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,SAAS,KAAK,SAAS,EAAE;YAC7E,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,SAAS,GAAG,EAAE,CAAC;SAClE;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAE,CAAC,SAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC;QAC9G,+FAA+F;QAC/F,IAAI,sBAAsB,CAAC,SAAS,EAAE;YACpC,2FAA2F;YAC3F,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;SACrD;IACH,CAAC;IAEO,YAAY,CAAC,SAAoB;QACvC,uDAAuD;QACvD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG;gBAC7B,OAAO,EAAE,EAAE;aACZ,CAAC;SACH;QAED,uEAAuE;QACvE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE;YACpE,OAAO;SACR;QAED,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;IACtF,CAAC;CACF;AAtHD,oCAsHC"}
@@ -0,0 +1,7 @@
1
+ import { ParameterObject } from '../../../model/openapi/open-api-types';
2
+ import { Reference } from './ReferenceBuilder';
3
+ import { ApexDocParameterObject } from '../../../model/openapi/apex-doc-types';
4
+ import { Builder } from './Builder';
5
+ export declare class ParameterObjectBuilder extends Builder<ParameterObject, ApexDocParameterObject> {
6
+ buildBody(apexDocObject: ApexDocParameterObject, reference?: Reference): ParameterObject;
7
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParameterObjectBuilder = void 0;
4
+ const Builder_1 = require("./Builder");
5
+ class ParameterObjectBuilder extends Builder_1.Builder {
6
+ buildBody(apexDocObject, reference) {
7
+ return Object.assign(Object.assign({}, apexDocObject), { schema: this.getOpenApiSchemaFromApexDocSchema(apexDocObject, reference) });
8
+ }
9
+ }
10
+ exports.ParameterObjectBuilder = ParameterObjectBuilder;
11
+ //# sourceMappingURL=ParameterObjectBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParameterObjectBuilder.js","sourceRoot":"","sources":["../../../../src/transpiler/openapi/parsers/ParameterObjectBuilder.ts"],"names":[],"mappings":";;;AAGA,uCAAoC;AAEpC,MAAa,sBAAuB,SAAQ,iBAAgD;IAC1F,SAAS,CAAC,aAAqC,EAAE,SAAqB;QACpE,uCACK,aAAa,KAChB,MAAM,EAAE,IAAI,CAAC,iCAAiC,CAAC,aAAa,EAAE,SAAS,CAAC,IACxE;IACJ,CAAC;CACF;AAPD,wDAOC"}
@@ -0,0 +1,16 @@
1
+ import { ReferenceObject, SchemaObjectObject } from '../../../model/openapi/open-api-types';
2
+ export declare class ReferenceBuilder {
3
+ build(referencedTypeName: string): Reference;
4
+ private getReferenceType;
5
+ }
6
+ /**
7
+ * In case where the Request Body contains a reference, this contains information about the handled reference
8
+ */
9
+ export type Reference = {
10
+ /** Name of the class being referenced */
11
+ referencedClass: string;
12
+ /** OpenApi style reference object */
13
+ referenceObject: ReferenceObject;
14
+ /** Parsed representation of the referenced object as an OpenApi Schema object */
15
+ schema: SchemaObjectObject;
16
+ };
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReferenceBuilder = void 0;
4
+ const types_repository_1 = require("../../../model/types-repository");
5
+ // TODO: Unit tests
6
+ class ReferenceBuilder {
7
+ build(referencedTypeName) {
8
+ // TODO: We also need to support inner classes
9
+ const referencedType = types_repository_1.TypesRepository.getInstance().getFromAllByName(referencedTypeName);
10
+ if (!referencedType) {
11
+ throw new Error(`The referenced class "${referencedTypeName}" was not found.`);
12
+ }
13
+ // Generate properties object from type
14
+ const properties = {};
15
+ // Filtering based on Salesforce's documentation: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_methods.htm#ApexRESTUserDefinedTypes
16
+ // Note that we assume that the class only contains object types allowed by Apex Rest:
17
+ // "Note that the public, private, or global class member variables must be types allowed by Apex REST"
18
+ const propertiesAndFields = [
19
+ ...referencedType.properties,
20
+ ...referencedType.fields,
21
+ ]
22
+ .filter((current) => !current.memberModifiers.includes('static'))
23
+ .filter((current) => !current.memberModifiers.includes('transient'));
24
+ propertiesAndFields.forEach((current) => {
25
+ properties[current.name] = {
26
+ type: this.getReferenceType(current.type),
27
+ };
28
+ });
29
+ return {
30
+ referencedClass: referencedTypeName,
31
+ referenceObject: {
32
+ $ref: `#/components/schemas/${referencedTypeName}`,
33
+ },
34
+ schema: {
35
+ type: 'object',
36
+ properties: properties,
37
+ },
38
+ };
39
+ }
40
+ getReferenceType(typeInMirror) {
41
+ // TODO: Better support for list and maps, instead of it just returning object
42
+ // Returns a valid type supported by OpenApi from a received Apex type.
43
+ typeInMirror = typeInMirror.toLowerCase();
44
+ switch (typeInMirror) {
45
+ case 'boolean':
46
+ return 'boolean';
47
+ case 'decimal':
48
+ return 'number';
49
+ case 'double':
50
+ return 'number';
51
+ case 'id':
52
+ return 'string';
53
+ case 'integer':
54
+ return 'integer';
55
+ case 'long':
56
+ return 'number';
57
+ case 'string':
58
+ return 'string';
59
+ default:
60
+ return 'object';
61
+ }
62
+ }
63
+ }
64
+ exports.ReferenceBuilder = ReferenceBuilder;
65
+ //# sourceMappingURL=ReferenceBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceBuilder.js","sourceRoot":"","sources":["../../../../src/transpiler/openapi/parsers/ReferenceBuilder.ts"],"names":[],"mappings":";;;AACA,sEAAkE;AAGlE,mBAAmB;AACnB,MAAa,gBAAgB;IAC3B,KAAK,CAAC,kBAA0B;QAC9B,8CAA8C;QAC9C,MAAM,cAAc,GAAG,kCAAe,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAC1F,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,kBAAkB,kBAAkB,CAAC,CAAC;SAChF;QAED,uCAAuC;QACvC,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,yKAAyK;QACzK,sFAAsF;QACtF,uGAAuG;QACvG,MAAM,mBAAmB,GAAG;YAC1B,GAAI,cAA8B,CAAC,UAAU;YAC7C,GAAI,cAA8B,CAAC,MAAM;SAC1C;aACE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aAChE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAEvE,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;gBACzB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;aAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,eAAe,EAAE,kBAAkB;YACnC,eAAe,EAAE;gBACf,IAAI,EAAE,wBAAwB,kBAAkB,EAAE;aACnD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,UAAU;aACvB;SACF,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,YAAoB;QAC3C,8EAA8E;QAC9E,uEAAuE;QACvE,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC1C,QAAQ,YAAY,EAAE;YACpB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB,KAAK,SAAS;gBACZ,OAAO,QAAQ,CAAC;YAClB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,IAAI;gBACP,OAAO,QAAQ,CAAC;YAClB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB,KAAK,MAAM;gBACT,OAAO,QAAQ,CAAC;YAClB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,QAAQ,CAAC;SACnB;IACH,CAAC;CACF;AA9DD,4CA8DC"}
@@ -0,0 +1,10 @@
1
+ import { RequestBody } from '../../../model/openapi/open-api-types';
2
+ import { Reference } from './ReferenceBuilder';
3
+ import { ApexDocHttpRequestBody } from '../../../model/openapi/apex-doc-types';
4
+ import { Builder } from './Builder';
5
+ /**
6
+ * Parses and builds OpenApi Request Body objects.
7
+ */
8
+ export declare class RequestBodyBuilder extends Builder<RequestBody, ApexDocHttpRequestBody> {
9
+ buildBody(apexRequestBody: ApexDocHttpRequestBody, reference?: Reference): RequestBody;
10
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestBodyBuilder = void 0;
4
+ const Builder_1 = require("./Builder");
5
+ /**
6
+ * Parses and builds OpenApi Request Body objects.
7
+ */
8
+ class RequestBodyBuilder extends Builder_1.Builder {
9
+ buildBody(apexRequestBody, reference) {
10
+ return {
11
+ description: apexRequestBody.description,
12
+ content: {
13
+ 'application/json': { schema: this.getOpenApiSchemaFromApexDocSchema(apexRequestBody, reference) },
14
+ },
15
+ required: apexRequestBody.required,
16
+ };
17
+ }
18
+ }
19
+ exports.RequestBodyBuilder = RequestBodyBuilder;
20
+ //# sourceMappingURL=RequestBodyBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestBodyBuilder.js","sourceRoot":"","sources":["../../../../src/transpiler/openapi/parsers/RequestBodyBuilder.ts"],"names":[],"mappings":";;;AAGA,uCAAoC;AAEpC;;GAEG;AACH,MAAa,kBAAmB,SAAQ,iBAA4C;IAClF,SAAS,CAAC,eAAuC,EAAE,SAAqB;QACtE,OAAO;YACL,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,OAAO,EAAE;gBACP,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,iCAAiC,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;aACnG;YACD,QAAQ,EAAE,eAAe,CAAC,QAAQ;SACnC,CAAC;IACJ,CAAC;CACF;AAVD,gDAUC"}
@@ -0,0 +1,7 @@
1
+ import { ResponseObject } from '../../../model/openapi/open-api-types';
2
+ import { Reference } from './ReferenceBuilder';
3
+ import { ApexDocHttpResponse } from '../../../model/openapi/apex-doc-types';
4
+ import { Builder } from './Builder';
5
+ export declare class ResponsesBuilder extends Builder<ResponseObject, ApexDocHttpResponse> {
6
+ buildBody(apexDocResponseDefinition: ApexDocHttpResponse, reference?: Reference): ResponseObject;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponsesBuilder = void 0;
4
+ const Builder_1 = require("./Builder");
5
+ class ResponsesBuilder extends Builder_1.Builder {
6
+ buildBody(apexDocResponseDefinition, reference) {
7
+ return {
8
+ description: `Status code ${apexDocResponseDefinition.statusCode}`,
9
+ content: {
10
+ 'application/json': {
11
+ schema: this.getOpenApiSchemaFromApexDocSchema(apexDocResponseDefinition, reference),
12
+ },
13
+ },
14
+ };
15
+ }
16
+ }
17
+ exports.ResponsesBuilder = ResponsesBuilder;
18
+ //# sourceMappingURL=ResponsesBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponsesBuilder.js","sourceRoot":"","sources":["../../../../src/transpiler/openapi/parsers/ResponsesBuilder.ts"],"names":[],"mappings":";;;AAGA,uCAAoC;AAEpC,MAAa,gBAAiB,SAAQ,iBAA4C;IAChF,SAAS,CAAC,yBAA8C,EAAE,SAAqB;QAC7E,OAAO;YACL,WAAW,EAAE,eAAe,yBAAyB,CAAC,UAAU,EAAE;YAClE,OAAO,EAAE;gBACP,kBAAkB,EAAE;oBAClB,MAAM,EAAE,IAAI,CAAC,iCAAiC,CAAC,yBAAyB,EAAE,SAAS,CAAC;iBACrF;aACF;SACF,CAAC;IACJ,CAAC;CACF;AAXD,4CAWC"}
@@ -1,10 +1,10 @@
1
1
  import { Type } from '@cparra/apex-reflection';
2
2
  import { FileContainer } from './file-container';
3
- export declare type LinkingStrategy = 'root-relative' | 'path-relative';
3
+ export type LinkingStrategy = 'root-relative' | 'path-relative';
4
4
  export default abstract class ProcessorTypeTranspiler {
5
5
  onBeforeProcess: ((types: Type[]) => void) | undefined;
6
6
  abstract onProcess(type: Type): void;
7
7
  onAfterProcess: ((types: Type[]) => void) | undefined;
8
8
  abstract fileBuilder(): FileContainer;
9
- abstract getLinkingStrategy(): LinkingStrategy;
9
+ getLinkingStrategy(): LinkingStrategy;
10
10
  }
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class ProcessorTypeTranspiler {
4
+ getLinkingStrategy() {
5
+ return 'root-relative';
6
+ }
4
7
  }
5
8
  exports.default = ProcessorTypeTranspiler;
6
9
  //# sourceMappingURL=processor-type-transpiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processor-type-transpiler.js","sourceRoot":"","sources":["../../src/transpiler/processor-type-transpiler.ts"],"names":[],"mappings":";;AAKA,MAA8B,uBAAuB;CAUpD;AAVD,0CAUC"}
1
+ {"version":3,"file":"processor-type-transpiler.js","sourceRoot":"","sources":["../../src/transpiler/processor-type-transpiler.ts"],"names":[],"mappings":";;AAKA,MAA8B,uBAAuB;IASnD,kBAAkB;QAChB,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAZD,0CAYC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../src/transpiler/transpiler.ts"],"names":[],"mappings":";;AAEA,0CAAuC;AACvC,4CAAqC;AAErC,MAAqB,UAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,KAAa,EAAE,SAAkC;;QAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;YACtD,IAAI,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,MAAA,SAAS,CAAC,eAAe,+CAAzB,SAAS,EAAmB,WAAW,EAAE;QAEzC,IAAI,mBAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,KAAK,IAAI,EAAE;YAC7C,OAAO;SACR;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAClC,eAAK,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;YACvD,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,MAAA,SAAS,CAAC,cAAc,+CAAxB,SAAS,EAAkB,WAAW,EAAE;IAC1C,CAAC;CACF;AApBD,6BAoBC"}
1
+ {"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../src/transpiler/transpiler.ts"],"names":[],"mappings":";;AAEA,0CAAuC;AACvC,4CAAqC;AAErC,MAAqB,UAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,KAAa,EAAE,SAAkC;;QAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;YACtD,IAAI,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,MAAA,SAAS,CAAC,eAAe,0DAAG,WAAW,CAAC,CAAC;QAEzC,IAAI,mBAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,KAAK,IAAI,EAAE;YAC7C,OAAO;SACR;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAClC,eAAK,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;YACvD,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,MAAA,SAAS,CAAC,cAAc,0DAAG,WAAW,CAAC,CAAC;IAC1C,CAAC;CACF;AApBD,6BAoBC"}
@@ -1 +1 @@
1
- {"version":3,"file":"error-logger.js","sourceRoot":"","sources":["../../src/util/error-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-logger.js","sourceRoot":"","sources":["../../src/util/error-logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cparra/apexdocs",
3
- "version": "2.8.0",
3
+ "version": "2.9.0-alpha.0",
4
4
  "description": "Library with CLI capabilities to generate documentation for Salesforce Apex classes.",
5
5
  "keywords": [
6
6
  "apex",
@@ -25,6 +25,7 @@
25
25
  "docs:init": "docsify init docs",
26
26
  "docs:serve": "docsify serve docs",
27
27
  "execute:example": "node lib/cli/generate.js -s examples/force-app -t docs --scope global public private protected -g docsify --defaultGroupName \"Misc Group\"",
28
+ "execute:example:openapi": "node lib/cli/generate.js -s examples/force-app -t docs protected -g openapi --openApiTitle \"My REST Api 2\"",
28
29
  "execute:example:index:only": "node lib/cli/generate.js -s examples/force-app -t docs --scope global public private -g docsify --indexOnly"
29
30
  },
30
31
  "author": "Cesar Parra",
@@ -39,8 +40,8 @@
39
40
  "@types/node": "^13.7.4",
40
41
  "@types/shelljs": "^0.8.6",
41
42
  "@types/yargs": "^15.0.3",
42
- "@typescript-eslint/eslint-plugin": "^5.1.0",
43
- "@typescript-eslint/parser": "^5.1.0",
43
+ "@typescript-eslint/eslint-plugin": "^5.41.0",
44
+ "@typescript-eslint/parser": "^5.41.0",
44
45
  "docsify": "^4.12.2",
45
46
  "eslint": "^8.0.1",
46
47
  "eslint-config-prettier": "^8.3.0",
@@ -51,7 +52,7 @@
51
52
  "prettier": "^2.4.1",
52
53
  "rimraf": "^3.0.2",
53
54
  "ts-jest": "^27.1.3",
54
- "typescript": "^3.8.2"
55
+ "typescript": "^4.8.4"
55
56
  },
56
57
  "husky": {
57
58
  "hooks": {
@@ -64,9 +65,11 @@
64
65
  ]
65
66
  },
66
67
  "dependencies": {
67
- "@cparra/apex-reflection": "1.7.0",
68
+ "@cparra/apex-reflection": "1.10.3",
69
+ "@types/js-yaml": "^4.0.5",
68
70
  "chalk": "^4.1.2",
69
71
  "fast-xml-parser": "^4.0.1",
72
+ "js-yaml": "^4.1.0",
70
73
  "log-update": "4.0.0",
71
74
  "xss": "^1.0.11",
72
75
  "yargs": "^16.0.3"
@@ -7,9 +7,11 @@ import { RawBodyParser } from '../service/parser';
7
7
  import { Settings } from '../settings';
8
8
  import Transpiler from '../transpiler/transpiler';
9
9
  import { FileWriter } from '../service/file-writer';
10
- import { TypesRepository } from '../model/types-repository';
11
10
  import ErrorLogger from '../util/error-logger';
12
11
  import ApexBundle from '../model/apex-bundle';
12
+ import Manifest from '../model/manifest';
13
+ import { TypesRepository } from '../model/types-repository';
14
+ import { TypeTranspilerFactory } from '../transpiler/factory';
13
15
 
14
16
  /**
15
17
  * Application entry-point to generate documentation out of Apex source files.
@@ -22,21 +24,10 @@ export class Apexdocs {
22
24
  Logger.log('Initializing...');
23
25
  const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem());
24
26
  const manifest = createManifest(new RawBodyParser(fileBodies), this._reflectionWithLogger);
25
-
26
- const filteredTypes: Type[] = manifest.filteredByAccessModifierAndAnnotations(Settings.getInstance().scope);
27
- TypesRepository.getInstance().populate(filteredTypes);
28
- Logger.clear();
29
-
30
- Logger.logSingle(
31
- `Filtered ${manifest.types.length - filteredTypes.length} file(s) based on scope: ${
32
- Settings.getInstance().scope
33
- }`,
34
- false,
35
- 'green',
36
- false,
37
- );
38
- Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
39
- const processor = Settings.getInstance().typeTranspiler;
27
+ TypesRepository.getInstance().populateAll(manifest.types);
28
+ const filteredTypes = this.filterByScopes(manifest);
29
+ TypesRepository.getInstance().populateScoped(filteredTypes);
30
+ const processor = TypeTranspilerFactory.get(Settings.getInstance().targetGenerator);
40
31
  Transpiler.generate(filteredTypes, processor);
41
32
  const generatedFiles = processor.fileBuilder().files();
42
33
  FileWriter.write(generatedFiles, (fileName: string) => {
@@ -47,6 +38,36 @@ export class Apexdocs {
47
38
  ErrorLogger.logErrors(filteredTypes);
48
39
  }
49
40
 
41
+ private static filterByScopes(manifest: Manifest) {
42
+ let filteredTypes: Type[];
43
+ let filteredLogMessage;
44
+ if (Settings.getInstance().config.targetGenerator !== 'openapi') {
45
+ filteredTypes = manifest.filteredByAccessModifierAndAnnotations(Settings.getInstance().scope);
46
+ filteredLogMessage = `Filtered ${manifest.types.length - filteredTypes.length} file(s) based on scope: ${
47
+ Settings.getInstance().scope
48
+ }`;
49
+ } else {
50
+ // If we are dealing with an OpenApi generator, we ignore the passed in access modifiers, and instead
51
+ // we only keep classes annotated as @RestResource
52
+ filteredTypes = manifest.filteredByAccessModifierAndAnnotations([
53
+ 'restresource',
54
+ 'httpdelete',
55
+ 'httpget',
56
+ 'httppatch',
57
+ 'httppost',
58
+ 'httpput',
59
+ ]);
60
+ filteredLogMessage = `Filtered ${
61
+ manifest.types.length - filteredTypes.length
62
+ } file(s), only keeping classes annotated as @RestResource.`;
63
+ }
64
+ Logger.clear();
65
+
66
+ Logger.logSingle(filteredLogMessage, false, 'green', false);
67
+ Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
68
+ return filteredTypes;
69
+ }
70
+
50
71
  static _reflectionWithLogger = (apexBundle: ApexBundle): ReflectionResult => {
51
72
  const result = reflect(apexBundle.rawTypeContent);
52
73
  if (result.error) {