@cparra/apexdocs 2.25.0-alpha.8 → 2.25.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.
- package/.eslintrc.js +12 -0
- package/README.md +12 -73
- package/apexdocs.config.ts +13 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +1 -0
- package/docs/index.html +22 -0
- package/docs/restapi.json +589 -0
- package/docs/types/Classes/nspc.AnotherInterface.md +22 -0
- package/docs/types/Classes/nspc.ChildClass.md +97 -0
- package/docs/types/Main/nspc.GroupedClass.md +10 -0
- package/docs/types/Main/nspc.SampleClass.md +190 -0
- package/docs/types/Misc-Group/nspc.EscapedAnnotations.md +4 -0
- package/docs/types/Misc-Group/nspc.GrandparentClass.md +13 -0
- package/docs/types/Misc-Group/nspc.InterfaceWithInheritance.md +29 -0
- package/docs/types/Misc-Group/nspc.MemberGrouping.md +13 -0
- package/docs/types/Misc-Group/nspc.ParentClass.md +37 -0
- package/docs/types/Misc-Group/nspc.Reference1.md +18 -0
- package/docs/types/Misc-Group/nspc.Reference2.md +12 -0
- package/docs/types/Misc-Group/nspc.Reference3.md +7 -0
- package/docs/types/Misc-Group/nspc.Reference4.md +7 -0
- package/docs/types/Misc-Group/nspc.Reference5.md +7 -0
- package/docs/types/Misc-Group/nspc.Reference6.md +9 -0
- package/docs/types/Misc-Group/nspc.Reference7.md +7 -0
- package/docs/types/Misc-Group/nspc.SampleClassWithoutModifier.md +11 -0
- package/docs/types/Misc-Group/nspc.SampleRestResource.md +211 -0
- package/docs/types/Misc-Group/nspc.SampleRestResourceWithInnerClass.md +34 -0
- package/docs/types/Misc-Group/nspc.SampleRestResourceWithoutApexDocs.md +14 -0
- package/docs/types/README.md +97 -0
- package/docs/types/Sample-Interfaces/nspc.SampleInterface.md +23 -0
- package/examples/includes/header.md +3 -0
- package/jest.config.js +1 -6
- package/lib/application/Apexdocs.d.ts +13 -0
- package/lib/application/Apexdocs.js +77 -0
- package/lib/application/Apexdocs.js.map +1 -0
- package/lib/cli/generate.d.ts +2 -0
- package/lib/cli/generate.js +131 -0
- package/lib/cli/generate.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/model/apex-bundle.d.ts +6 -0
- package/lib/model/apex-bundle.js +11 -0
- package/lib/model/apex-bundle.js.map +1 -0
- package/lib/model/apex-type-wrappers/ClassMirrorWrapper.d.ts +7 -0
- package/lib/model/apex-type-wrappers/ClassMirrorWrapper.js +14 -0
- package/lib/model/apex-type-wrappers/ClassMirrorWrapper.js.map +1 -0
- package/lib/model/apex-type-wrappers/MethodMirrorWrapper.d.ts +7 -0
- package/lib/model/apex-type-wrappers/MethodMirrorWrapper.js +12 -0
- package/lib/model/apex-type-wrappers/MethodMirrorWrapper.js.map +1 -0
- package/lib/model/inheritance.d.ts +8 -0
- package/lib/model/inheritance.js +3 -0
- package/lib/model/inheritance.js.map +1 -0
- package/lib/model/manifest-diff.d.ts +27 -0
- package/lib/model/manifest-diff.js +69 -0
- package/lib/model/manifest-diff.js.map +1 -0
- package/lib/model/manifest.d.ts +22 -0
- package/lib/model/manifest.js +47 -0
- package/lib/model/manifest.js.map +1 -0
- package/lib/model/markdown-file.d.ts +16 -0
- package/lib/model/markdown-file.js +107 -0
- package/lib/model/markdown-file.js.map +1 -0
- package/lib/model/markdown-generation-util/doc-comment-annotation-util.d.ts +8 -0
- package/lib/model/markdown-generation-util/doc-comment-annotation-util.js +44 -0
- package/lib/model/markdown-generation-util/doc-comment-annotation-util.js.map +1 -0
- package/lib/model/markdown-generation-util/field-declaration-util.d.ts +3 -0
- package/lib/model/markdown-generation-util/field-declaration-util.js +55 -0
- package/lib/model/markdown-generation-util/field-declaration-util.js.map +1 -0
- package/lib/model/markdown-generation-util/index.d.ts +3 -0
- package/lib/model/markdown-generation-util/index.js +20 -0
- package/lib/model/markdown-generation-util/index.js.map +1 -0
- package/lib/model/markdown-generation-util/method-declaration-util.d.ts +4 -0
- package/lib/model/markdown-generation-util/method-declaration-util.js +115 -0
- package/lib/model/markdown-generation-util/method-declaration-util.js.map +1 -0
- package/lib/model/markdown-generation-util/type-declaration-util.d.ts +3 -0
- package/lib/model/markdown-generation-util/type-declaration-util.js +82 -0
- package/lib/model/markdown-generation-util/type-declaration-util.js.map +1 -0
- package/lib/model/markdown-home-file.d.ts +11 -0
- package/lib/model/markdown-home-file.js +54 -0
- package/lib/model/markdown-home-file.js.map +1 -0
- package/lib/model/markdown-type-file.d.ts +26 -0
- package/lib/model/markdown-type-file.js +134 -0
- package/lib/model/markdown-type-file.js.map +1 -0
- package/lib/model/openapi/apex-doc-types.d.ts +19 -0
- package/lib/model/openapi/apex-doc-types.js +5 -0
- package/lib/model/openapi/apex-doc-types.js.map +1 -0
- package/lib/model/openapi/open-api-types.d.ts +93 -0
- package/lib/model/openapi/open-api-types.js +3 -0
- package/lib/model/openapi/open-api-types.js.map +1 -0
- package/lib/model/openapi/open-api.d.ts +16 -0
- package/lib/model/openapi/open-api.js +34 -0
- package/lib/model/openapi/open-api.js.map +1 -0
- package/lib/model/openapi/openapi-type-file.d.ts +7 -0
- package/lib/model/openapi/openapi-type-file.js +17 -0
- package/lib/model/openapi/openapi-type-file.js.map +1 -0
- package/lib/model/outputFile.d.ts +10 -0
- package/lib/model/outputFile.js +29 -0
- package/lib/model/outputFile.js.map +1 -0
- package/lib/model/types-repository.d.ts +16 -0
- package/lib/model/types-repository.js +54 -0
- package/lib/model/types-repository.js.map +1 -0
- package/lib/service/apex-file-reader.d.ts +14 -0
- package/lib/service/apex-file-reader.js +46 -0
- package/lib/service/apex-file-reader.js.map +1 -0
- package/lib/service/file-system.d.ts +14 -0
- package/lib/service/file-system.js +25 -0
- package/lib/service/file-system.js.map +1 -0
- package/lib/service/file-writer.d.ts +6 -0
- package/lib/service/file-writer.js +34 -0
- package/lib/service/file-writer.js.map +1 -0
- package/lib/service/manifest-factory.d.ts +10 -0
- package/lib/service/manifest-factory.js +14 -0
- package/lib/service/manifest-factory.js.map +1 -0
- package/lib/service/metadata-processor.d.ts +3 -0
- package/lib/service/metadata-processor.js +17 -0
- package/lib/service/metadata-processor.js.map +1 -0
- package/lib/service/parser.d.ts +21 -0
- package/lib/service/parser.js +135 -0
- package/lib/service/parser.js.map +1 -0
- package/lib/service/state.d.ts +9 -0
- package/lib/service/state.js +20 -0
- package/lib/service/state.js.map +1 -0
- package/lib/service/walkers/class-walker.d.ts +4 -0
- package/lib/service/walkers/class-walker.js +33 -0
- package/lib/service/walkers/class-walker.js.map +1 -0
- package/lib/service/walkers/enum-walker.d.ts +4 -0
- package/lib/service/walkers/enum-walker.js +11 -0
- package/lib/service/walkers/enum-walker.js.map +1 -0
- package/lib/service/walkers/interface-walker.d.ts +4 -0
- package/lib/service/walkers/interface-walker.js +15 -0
- package/lib/service/walkers/interface-walker.js.map +1 -0
- package/lib/service/walkers/walker-factory.d.ts +5 -0
- package/lib/service/walkers/walker-factory.js +21 -0
- package/lib/service/walkers/walker-factory.js.map +1 -0
- package/lib/service/walkers/walker.d.ts +19 -0
- package/lib/service/walkers/walker.js +17 -0
- package/lib/service/walkers/walker.js.map +1 -0
- package/lib/settings.d.ts +64 -0
- package/lib/settings.js +89 -0
- package/lib/settings.js.map +1 -0
- package/lib/test-helpers/AnnotationBuilder.d.ts +12 -0
- package/lib/test-helpers/AnnotationBuilder.js +31 -0
- package/lib/test-helpers/AnnotationBuilder.js.map +1 -0
- package/lib/test-helpers/ClassMirrorBuilder.d.ts +18 -0
- package/lib/test-helpers/ClassMirrorBuilder.js +54 -0
- package/lib/test-helpers/ClassMirrorBuilder.js.map +1 -0
- package/lib/test-helpers/DocCommentAnnotationBuilder.d.ts +8 -0
- package/lib/test-helpers/DocCommentAnnotationBuilder.js +26 -0
- package/lib/test-helpers/DocCommentAnnotationBuilder.js.map +1 -0
- package/lib/test-helpers/DocCommentBuilder.d.ts +12 -0
- package/lib/test-helpers/DocCommentBuilder.js +38 -0
- package/lib/test-helpers/DocCommentBuilder.js.map +1 -0
- package/lib/test-helpers/FieldMirrorBuilder.d.ts +18 -0
- package/lib/test-helpers/FieldMirrorBuilder.js +54 -0
- package/lib/test-helpers/FieldMirrorBuilder.js.map +1 -0
- package/lib/test-helpers/MethodMirrorBuilder.d.ts +10 -0
- package/lib/test-helpers/MethodMirrorBuilder.js +37 -0
- package/lib/test-helpers/MethodMirrorBuilder.js.map +1 -0
- package/lib/test-helpers/SettingsBuilder.d.ts +8 -0
- package/lib/test-helpers/SettingsBuilder.js +27 -0
- package/lib/test-helpers/SettingsBuilder.js.map +1 -0
- package/lib/transpiler/factory.d.ts +6 -0
- package/lib/transpiler/factory.js +32 -0
- package/lib/transpiler/factory.js.map +1 -0
- package/lib/transpiler/file-container.d.ts +6 -0
- package/lib/transpiler/file-container.js +16 -0
- package/lib/transpiler/file-container.js.map +1 -0
- package/lib/transpiler/generator-choices.d.ts +1 -0
- package/lib/transpiler/generator-choices.js +3 -0
- package/lib/transpiler/generator-choices.js.map +1 -0
- package/lib/transpiler/markdown/class-file-generatorHelper.d.ts +8 -0
- package/lib/transpiler/markdown/class-file-generatorHelper.js +56 -0
- package/lib/transpiler/markdown/class-file-generatorHelper.js.map +1 -0
- package/lib/transpiler/markdown/docsify/docsify-docs-processor.d.ts +6 -0
- package/lib/transpiler/markdown/docsify/docsify-docs-processor.js +13 -0
- package/lib/transpiler/markdown/docsify/docsify-docs-processor.js.map +1 -0
- package/lib/transpiler/markdown/jekyll/jekyll-docsProcessor.d.ts +11 -0
- package/lib/transpiler/markdown/jekyll/jekyll-docsProcessor.js +51 -0
- package/lib/transpiler/markdown/jekyll/jekyll-docsProcessor.js.map +1 -0
- package/lib/transpiler/markdown/markdown-transpiler-base.d.ts +11 -0
- package/lib/transpiler/markdown/markdown-transpiler-base.js +24 -0
- package/lib/transpiler/markdown/markdown-transpiler-base.js.map +1 -0
- package/lib/transpiler/markdown/plain-markdown/plain-docsProcessor.d.ts +6 -0
- package/lib/transpiler/markdown/plain-markdown/plain-docsProcessor.js +14 -0
- package/lib/transpiler/markdown/plain-markdown/plain-docsProcessor.js.map +1 -0
- package/lib/transpiler/openapi/open-api-docs-processor.d.ts +13 -0
- package/lib/transpiler/openapi/open-api-docs-processor.js +75 -0
- package/lib/transpiler/openapi/open-api-docs-processor.js.map +1 -0
- package/lib/transpiler/openapi/parsers/Builder.d.ts +16 -0
- package/lib/transpiler/openapi/parsers/Builder.js +30 -0
- package/lib/transpiler/openapi/parsers/Builder.js.map +1 -0
- package/lib/transpiler/openapi/parsers/MethodParser.d.ts +20 -0
- package/lib/transpiler/openapi/parsers/MethodParser.js +167 -0
- package/lib/transpiler/openapi/parsers/MethodParser.js.map +1 -0
- package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.d.ts +7 -0
- package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.js +11 -0
- package/lib/transpiler/openapi/parsers/ParameterObjectBuilder.js.map +1 -0
- package/lib/transpiler/openapi/parsers/ReferenceBuilder.d.ts +39 -0
- package/lib/transpiler/openapi/parsers/ReferenceBuilder.js +226 -0
- package/lib/transpiler/openapi/parsers/ReferenceBuilder.js.map +1 -0
- package/lib/transpiler/openapi/parsers/RequestBodyBuilder.d.ts +10 -0
- package/lib/transpiler/openapi/parsers/RequestBodyBuilder.js +20 -0
- package/lib/transpiler/openapi/parsers/RequestBodyBuilder.js.map +1 -0
- package/lib/transpiler/openapi/parsers/ResponsesBuilder.d.ts +7 -0
- package/lib/transpiler/openapi/parsers/ResponsesBuilder.js +22 -0
- package/lib/transpiler/openapi/parsers/ResponsesBuilder.js.map +1 -0
- package/lib/transpiler/processor-type-transpiler.d.ts +10 -0
- package/lib/transpiler/processor-type-transpiler.js +9 -0
- package/lib/transpiler/processor-type-transpiler.js.map +1 -0
- package/lib/transpiler/transpiler.d.ts +5 -0
- package/lib/transpiler/transpiler.js +27 -0
- package/lib/transpiler/transpiler.js.map +1 -0
- package/lib/util/error-logger.d.ts +8 -0
- package/lib/util/error-logger.js +90 -0
- package/lib/util/error-logger.js.map +1 -0
- package/lib/util/logger.d.ts +21 -0
- package/lib/util/logger.js +58 -0
- package/lib/util/logger.js.map +1 -0
- package/lib/util/string-utils.d.ts +2 -0
- package/lib/util/string-utils.js +15 -0
- package/lib/util/string-utils.js.map +1 -0
- package/package.json +36 -35
- package/src/application/Apexdocs.ts +70 -17
- package/src/cli/generate.ts +131 -10
- package/src/index.ts +1 -35
- package/src/model/__tests__/manifest-diff.spec.ts +147 -0
- package/src/model/apex-bundle.ts +3 -0
- package/src/{core/openapi → model}/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +3 -3
- package/src/model/inheritance.ts +7 -0
- package/src/model/manifest-diff.ts +94 -0
- package/src/model/manifest.ts +74 -0
- package/src/model/markdown-file.ts +121 -0
- package/src/model/markdown-generation-util/doc-comment-annotation-util.ts +50 -0
- package/src/model/markdown-generation-util/field-declaration-util.ts +71 -0
- package/src/model/markdown-generation-util/index.ts +3 -0
- package/src/model/markdown-generation-util/method-declaration-util.ts +166 -0
- package/src/model/markdown-generation-util/type-declaration-util.ts +91 -0
- package/src/model/markdown-home-file.ts +58 -0
- package/src/model/markdown-type-file.ts +165 -0
- package/src/{core → model}/openapi/open-api-types.ts +2 -2
- package/src/model/openapi/openapi-type-file.ts +14 -0
- package/src/model/outputFile.ts +29 -0
- package/src/{core/openapi → model}/types-repository.ts +9 -0
- package/src/service/__tests__/apex-file-reader.spec.ts +92 -0
- package/src/{core/openapi → service}/__tests__/manifest-factory.spec.ts +2 -1
- package/src/service/apex-file-reader.ts +51 -0
- package/src/service/file-writer.ts +34 -0
- package/src/{core/openapi → service}/manifest-factory.ts +3 -3
- package/src/service/metadata-processor.ts +16 -0
- package/src/{core/openapi → service}/parser.ts +9 -9
- package/src/service/state.ts +24 -0
- package/src/service/walkers/class-walker.ts +30 -0
- package/src/service/walkers/enum-walker.ts +7 -0
- package/src/service/walkers/interface-walker.ts +12 -0
- package/src/service/walkers/walker-factory.ts +19 -0
- package/src/service/walkers/walker.ts +42 -0
- package/src/settings.ts +147 -0
- package/src/test-helpers/ClassMirrorBuilder.ts +1 -14
- package/src/test-helpers/FieldMirrorBuilder.ts +1 -1
- package/src/test-helpers/MethodMirrorBuilder.ts +6 -46
- package/src/test-helpers/SettingsBuilder.ts +4 -1
- package/src/transpiler/factory.ts +33 -0
- package/src/transpiler/file-container.ts +13 -0
- package/src/transpiler/generator-choices.ts +1 -0
- package/src/transpiler/markdown/class-file-generatorHelper.ts +58 -0
- package/src/transpiler/markdown/docsify/docsify-docs-processor.ts +12 -0
- package/src/transpiler/markdown/jekyll/jekyll-docsProcessor.ts +50 -0
- package/src/transpiler/markdown/markdown-transpiler-base.ts +28 -0
- package/src/transpiler/markdown/plain-markdown/plain-docsProcessor.ts +12 -0
- package/src/{core → transpiler}/openapi/__tests__/open-api-docs-processor.spec.ts +1 -1
- package/src/{core → transpiler}/openapi/open-api-docs-processor.ts +10 -9
- package/src/{core → transpiler}/openapi/parsers/Builder.ts +3 -3
- package/src/{core → transpiler}/openapi/parsers/MethodParser.ts +6 -6
- package/src/{core → transpiler}/openapi/parsers/ParameterObjectBuilder.ts +2 -2
- package/src/{core → transpiler}/openapi/parsers/ReferenceBuilder.ts +6 -7
- package/src/{core → transpiler}/openapi/parsers/RequestBodyBuilder.ts +2 -2
- package/src/{core → transpiler}/openapi/parsers/ResponsesBuilder.ts +2 -2
- package/src/{core → transpiler}/openapi/parsers/__tests__/MethodParser.spec.ts +1 -1
- package/src/{core → transpiler}/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +2 -2
- package/src/{core → transpiler}/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +2 -2
- package/src/{core → transpiler}/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +2 -2
- package/src/{core → transpiler}/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +1 -1
- package/src/transpiler/processor-type-transpiler.ts +18 -0
- package/src/{core/openapi → transpiler}/transpiler.ts +6 -2
- package/src/util/error-logger.ts +4 -4
- package/src/util/logger.ts +6 -6
- package/src/util/string-utils.ts +4 -0
- package/tsconfig.json +3 -8
- package/.github/workflows/ci.yaml +0 -22
- package/__mocks__/chalk.js +0 -12
- package/__mocks__/log-update.js +0 -6
- package/dist/cli/generate.js +0 -2976
- package/dist/defaults-DUwru49Q.js +0 -12
- package/dist/defaults-SH0Rsi5E.js +0 -11
- package/dist/index.d.ts +0 -62
- package/dist/index.js +0 -36
- package/eslint.config.mjs +0 -10
- package/examples/plain-markdown/.forceignore +0 -12
- package/examples/plain-markdown/config/project-scratch-def.json +0 -5
- package/examples/plain-markdown/docs/Miscellaneous/ns.BaseClass.md +0 -16
- package/examples/plain-markdown/docs/Miscellaneous/ns.MultiInheritanceClass.md +0 -73
- package/examples/plain-markdown/docs/Miscellaneous/ns.ParentInterface.md +0 -15
- package/examples/plain-markdown/docs/Miscellaneous/ns.ReferencedEnum.md +0 -8
- package/examples/plain-markdown/docs/Miscellaneous/ns.SampleException.md +0 -25
- package/examples/plain-markdown/docs/Miscellaneous/ns.SampleInterface.md +0 -119
- package/examples/plain-markdown/docs/Miscellaneous/ns.Url.md +0 -320
- package/examples/plain-markdown/docs/Sample-Enums/ns.SampleEnum.md +0 -38
- package/examples/plain-markdown/docs/SampleGroup/ns.SampleClass.md +0 -173
- package/examples/plain-markdown/docs/index.md +0 -117
- package/examples/plain-markdown/force-app/classes/BaseClass.cls +0 -3
- package/examples/plain-markdown/force-app/classes/MultiInheritanceClass.cls +0 -1
- package/examples/plain-markdown/force-app/classes/ParentInterface.cls +0 -3
- package/examples/plain-markdown/force-app/classes/ReferencedEnum.cls +0 -3
- package/examples/plain-markdown/force-app/classes/SampleClass.cls +0 -72
- package/examples/plain-markdown/force-app/classes/SampleEnum.cls +0 -30
- package/examples/plain-markdown/force-app/classes/SampleException.cls +0 -17
- package/examples/plain-markdown/force-app/classes/SampleInterface.cls +0 -46
- package/examples/plain-markdown/force-app/classes/Url.cls +0 -194
- package/examples/plain-markdown/package-lock.json +0 -665
- package/examples/plain-markdown/package.json +0 -20
- package/examples/plain-markdown/sfdx-project.json +0 -12
- package/examples/vitepress/.forceignore +0 -12
- package/examples/vitepress/apexdocs.config.ts +0 -108
- package/examples/vitepress/config/project-scratch-def.json +0 -13
- package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js +0 -259
- package/examples/vitepress/docs/.vitepress/cache/deps/@theme_index.js.map +0 -7
- package/examples/vitepress/docs/.vitepress/cache/deps/_metadata.json +0 -40
- package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js +0 -11474
- package/examples/vitepress/docs/.vitepress/cache/deps/chunk-574YRH25.js.map +0 -7
- package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js +0 -9172
- package/examples/vitepress/docs/.vitepress/cache/deps/chunk-E5DZZB2I.js.map +0 -7
- package/examples/vitepress/docs/.vitepress/cache/deps/package.json +0 -3
- package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4339
- package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
- package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -567
- package/examples/vitepress/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
- package/examples/vitepress/docs/.vitepress/cache/deps/vue.js +0 -323
- package/examples/vitepress/docs/.vitepress/cache/deps/vue.js.map +0 -7
- package/examples/vitepress/docs/.vitepress/config.mts +0 -21
- package/examples/vitepress/docs/.vitepress/sidebar.json +0 -119
- package/examples/vitepress/docs/Miscellaneous/apexdocs.BaseClass.md +0 -20
- package/examples/vitepress/docs/Miscellaneous/apexdocs.MultiInheritanceClass.md +0 -76
- package/examples/vitepress/docs/Miscellaneous/apexdocs.ParentInterface.md +0 -19
- package/examples/vitepress/docs/Miscellaneous/apexdocs.ReferencedEnum.md +0 -15
- package/examples/vitepress/docs/Miscellaneous/apexdocs.SampleException.md +0 -28
- package/examples/vitepress/docs/Miscellaneous/apexdocs.SampleInterface.md +0 -116
- package/examples/vitepress/docs/Miscellaneous/apexdocs.Url.md +0 -317
- package/examples/vitepress/docs/Sample-Enums/apexdocs.SampleEnum.md +0 -40
- package/examples/vitepress/docs/SampleGroup/apexdocs.SampleClass.md +0 -174
- package/examples/vitepress/docs/api-examples.md +0 -49
- package/examples/vitepress/docs/index-frontmatter.md +0 -16
- package/examples/vitepress/docs/index.md +0 -56
- package/examples/vitepress/docs/markdown-examples.md +0 -85
- package/examples/vitepress/force-app/main/default/classes/BaseClass.cls +0 -3
- package/examples/vitepress/force-app/main/default/classes/MultiInheritanceClass.cls +0 -1
- package/examples/vitepress/force-app/main/default/classes/ParentInterface.cls +0 -3
- package/examples/vitepress/force-app/main/default/classes/ReferencedEnum.cls +0 -5
- package/examples/vitepress/force-app/main/default/classes/SampleClass.cls +0 -72
- package/examples/vitepress/force-app/main/default/classes/SampleEnum.cls +0 -30
- package/examples/vitepress/force-app/main/default/classes/SampleException.cls +0 -17
- package/examples/vitepress/force-app/main/default/classes/SampleInterface.cls +0 -46
- package/examples/vitepress/force-app/main/default/classes/Url.cls +0 -198
- package/examples/vitepress/package-lock.json +0 -2574
- package/examples/vitepress/package.json +0 -18
- package/examples/vitepress/sfdx-project.json +0 -12
- package/jest.d.ts +0 -7
- package/src/application/__tests__/apex-file-reader.spec.ts +0 -104
- package/src/application/apex-file-reader.ts +0 -42
- package/src/application/file-writer.ts +0 -25
- package/src/application/generators/markdown.ts +0 -53
- package/src/application/generators/openapi.ts +0 -56
- package/src/cli/args.ts +0 -43
- package/src/cli/commands/markdown.ts +0 -58
- package/src/core/manifest.ts +0 -90
- package/src/core/markdown/__test__/expect-extensions.ts +0 -32
- package/src/core/markdown/__test__/generating-class-docs.spec.ts +0 -733
- package/src/core/markdown/__test__/generating-enum-docs.spec.ts +0 -385
- package/src/core/markdown/__test__/generating-interface-docs.spec.ts +0 -459
- package/src/core/markdown/__test__/generating-reference-guide.spec.ts +0 -184
- package/src/core/markdown/__test__/inheritance-chain.test.ts +0 -54
- package/src/core/markdown/__test__/test-helpers.ts +0 -22
- package/src/core/markdown/adapters/__tests__/documentables.spec.ts +0 -109
- package/src/core/markdown/adapters/__tests__/interface-adapter.spec.ts +0 -112
- package/src/core/markdown/adapters/__tests__/references.spec.ts +0 -136
- package/src/core/markdown/adapters/apex-types.ts +0 -237
- package/src/core/markdown/adapters/documentables.ts +0 -116
- package/src/core/markdown/adapters/fields-and-properties.ts +0 -45
- package/src/core/markdown/adapters/inline.ts +0 -143
- package/src/core/markdown/adapters/methods-and-constructors.ts +0 -133
- package/src/core/markdown/adapters/renderable-bundle.ts +0 -144
- package/src/core/markdown/adapters/renderable-to-page-data.ts +0 -92
- package/src/core/markdown/adapters/type-utils.ts +0 -13
- package/src/core/markdown/adapters/types.d.ts +0 -182
- package/src/core/markdown/generate-docs.ts +0 -158
- package/src/core/markdown/reflection/error-handling.ts +0 -37
- package/src/core/markdown/reflection/filter-scope.ts +0 -13
- package/src/core/markdown/reflection/inheritance-chain-expanion.ts +0 -22
- package/src/core/markdown/reflection/inheritance-chain.ts +0 -23
- package/src/core/markdown/reflection/inherited-member-expansion.ts +0 -105
- package/src/core/markdown/reflection/reflect-source.ts +0 -41
- package/src/core/markdown/reflection/sort-members.ts +0 -59
- package/src/core/markdown/templates/class-template.ts +0 -75
- package/src/core/markdown/templates/constructors-partial-template.ts +0 -32
- package/src/core/markdown/templates/documentable-partial-template.ts +0 -26
- package/src/core/markdown/templates/enum-template.ts +0 -12
- package/src/core/markdown/templates/fieldsPartialTemplate.ts +0 -23
- package/src/core/markdown/templates/grouped-members-partial-template.ts +0 -6
- package/src/core/markdown/templates/hookable.ts +0 -7
- package/src/core/markdown/templates/interface-template.ts +0 -16
- package/src/core/markdown/templates/methods-partial-template.ts +0 -43
- package/src/core/markdown/templates/reference-guide.ts +0 -14
- package/src/core/markdown/templates/template.ts +0 -114
- package/src/core/markdown/templates/type-doc-partial.ts +0 -27
- package/src/core/markdown/utils.ts +0 -3
- package/src/core/openapi/file-container.ts +0 -13
- package/src/core/openapi/openapi-type-file.ts +0 -14
- package/src/core/parse-apex-metadata.ts +0 -14
- package/src/core/settings.ts +0 -56
- package/src/core/shared/types.d.ts +0 -92
- package/src/core/shared/utils.ts +0 -5
- package/src/defaults.ts +0 -8
- package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -39
- package/src/util/fp.ts +0 -3
- /package/src/{core/__test__ → model/__tests__}/manifest.spec.ts +0 -0
- /package/src/{core/openapi → model}/apex-type-wrappers/ClassMirrorWrapper.ts +0 -0
- /package/src/{core/openapi → model}/apex-type-wrappers/MethodMirrorWrapper.ts +0 -0
- /package/src/{core → model}/openapi/__tests__/open-api.spec.ts +0 -0
- /package/src/{core → model}/openapi/apex-doc-types.ts +0 -0
- /package/src/{core → model}/openapi/open-api.ts +0 -0
- /package/src/{application → service}/file-system.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cparra/apexdocs",
|
|
3
|
-
"version": "2.25.0
|
|
3
|
+
"version": "2.25.0",
|
|
4
4
|
"description": "Library with CLI capabilities to generate documentation for Salesforce Apex classes.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"apex",
|
|
@@ -10,18 +10,23 @@
|
|
|
10
10
|
"apex-docs",
|
|
11
11
|
"docs"
|
|
12
12
|
],
|
|
13
|
-
"
|
|
14
|
-
"types": "./dist/index.d.ts",
|
|
13
|
+
"main": "lib/index.js",
|
|
15
14
|
"bin": {
|
|
16
|
-
"apexdocs": "
|
|
15
|
+
"apexdocs-generate": "lib/cli/generate.js"
|
|
17
16
|
},
|
|
17
|
+
"types": "lib/index.d.ts",
|
|
18
18
|
"scripts": {
|
|
19
|
-
"test": "
|
|
20
|
-
"build": "rimraf ./lib && npm run lint && tsc --
|
|
19
|
+
"test": "jest --coverage",
|
|
20
|
+
"build": "rimraf ./lib && npm run lint && tsc --declaration",
|
|
21
21
|
"lint": "eslint \"./src/**/*.{js,ts}\" --quiet --fix",
|
|
22
22
|
"prepare": "npm run build",
|
|
23
23
|
"version": "npm run format && git add -A src",
|
|
24
|
-
"postversion": "git push && git push --tags"
|
|
24
|
+
"postversion": "git push && git push --tags",
|
|
25
|
+
"docs:init": "docsify init docs",
|
|
26
|
+
"docs:serve": "docsify serve docs",
|
|
27
|
+
"execute:example": "rimraf ./docs/types && node lib/cli/generate.js -s examples/force-app -t docs/types --scope global public private protected -g docsify --defaultGroupName \"Misc Group\" --namespace nspc --title \"Sample Documentation\" --documentationRootDir types",
|
|
28
|
+
"execute:example:index:only": "node lib/cli/generate.js -s examples/force-app -t docs --scope global public private -g docsify --indexOnly",
|
|
29
|
+
"execute:example:openapi": "node lib/cli/generate.js -s examples/force-app -t docs -g openapi --openApiTitle \"Sample REST Api\" --namespace nspc --openApiFileName restapi"
|
|
25
30
|
},
|
|
26
31
|
"author": "Cesar Parra",
|
|
27
32
|
"license": "MIT",
|
|
@@ -30,22 +35,26 @@
|
|
|
30
35
|
"url": "https://github.com/cesarParra/apexdocs"
|
|
31
36
|
},
|
|
32
37
|
"devDependencies": {
|
|
33
|
-
"@
|
|
34
|
-
"@types/
|
|
35
|
-
"@types/
|
|
36
|
-
"@types/node": "^
|
|
37
|
-
"@types/shelljs": "^0.8.
|
|
38
|
-
"
|
|
39
|
-
"eslint-
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"prettier": "^
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
38
|
+
"@types/html-entities": "^1.3.4",
|
|
39
|
+
"@types/jest": "^27.4.1",
|
|
40
|
+
"@types/js-yaml": "^4.0.5",
|
|
41
|
+
"@types/node": "^13.7.4",
|
|
42
|
+
"@types/shelljs": "^0.8.6",
|
|
43
|
+
"@types/yargs": "^15.0.3",
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^5.41.0",
|
|
45
|
+
"@typescript-eslint/parser": "^5.41.0",
|
|
46
|
+
"docsify": "^4.13.1",
|
|
47
|
+
"docsify-cli": "^4.4.4",
|
|
48
|
+
"eslint": "^8.0.1",
|
|
49
|
+
"eslint-config-prettier": "^8.3.0",
|
|
50
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
51
|
+
"husky": "^8.0.3",
|
|
52
|
+
"jest": "^27.5.1",
|
|
53
|
+
"lint-staged": "^13.2.1",
|
|
54
|
+
"prettier": "^2.4.1",
|
|
55
|
+
"rimraf": "^3.0.2",
|
|
56
|
+
"ts-jest": "^27.1.3",
|
|
57
|
+
"typescript": "^4.8.4"
|
|
49
58
|
},
|
|
50
59
|
"husky": {
|
|
51
60
|
"hooks": {
|
|
@@ -58,21 +67,13 @@
|
|
|
58
67
|
]
|
|
59
68
|
},
|
|
60
69
|
"dependencies": {
|
|
61
|
-
"@cparra/apex-reflection": "2.
|
|
62
|
-
"@types/js-yaml": "^4.0.9",
|
|
63
|
-
"@types/yargs": "^17.0.32",
|
|
70
|
+
"@cparra/apex-reflection": "2.12.1",
|
|
64
71
|
"chalk": "^4.1.2",
|
|
65
72
|
"cosmiconfig": "^9.0.0",
|
|
66
|
-
"
|
|
67
|
-
"fast-xml-parser": "^4.4.0",
|
|
68
|
-
"fp-ts": "^2.16.8",
|
|
69
|
-
"handlebars": "^4.7.8",
|
|
73
|
+
"fast-xml-parser": "^4.0.1",
|
|
70
74
|
"js-yaml": "^4.1.0",
|
|
71
75
|
"log-update": "4.0.0",
|
|
72
|
-
"
|
|
73
|
-
"yargs": "^
|
|
74
|
-
},
|
|
75
|
-
"imports": {
|
|
76
|
-
"#utils/*": "./src/util/*.ts"
|
|
76
|
+
"xss": "^1.0.11",
|
|
77
|
+
"yargs": "^16.0.3"
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { ApexFileReader } from '../service/apex-file-reader';
|
|
2
|
+
import { DefaultFileSystem } from '../service/file-system';
|
|
3
|
+
import { ReflectionResult, reflect, Type } from '@cparra/apex-reflection';
|
|
4
|
+
import { Logger } from '../util/logger';
|
|
5
|
+
import { createManifest } from '../service/manifest-factory';
|
|
6
|
+
import { RawBodyParser } from '../service/parser';
|
|
7
|
+
import { Settings, TargetFile } from '../settings';
|
|
8
|
+
import Transpiler from '../transpiler/transpiler';
|
|
9
|
+
import { FileWriter } from '../service/file-writer';
|
|
10
|
+
import ErrorLogger from '../util/error-logger';
|
|
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';
|
|
8
15
|
|
|
9
16
|
/**
|
|
10
17
|
* Application entry-point to generate documentation out of Apex source files.
|
|
@@ -13,18 +20,64 @@ export class Apexdocs {
|
|
|
13
20
|
/**
|
|
14
21
|
* Generates documentation out of Apex source files.
|
|
15
22
|
*/
|
|
16
|
-
static
|
|
17
|
-
Logger.
|
|
23
|
+
static generate(): void {
|
|
24
|
+
Logger.log('Initializing...');
|
|
25
|
+
const fileBodies = ApexFileReader.processFiles(new DefaultFileSystem());
|
|
26
|
+
const manifest = createManifest(new RawBodyParser(fileBodies), this._reflectionWithLogger);
|
|
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);
|
|
31
|
+
Transpiler.generate(filteredTypes, processor);
|
|
32
|
+
const generatedFiles = processor.fileBuilder().files();
|
|
33
|
+
|
|
34
|
+
const files: TargetFile[] = [];
|
|
35
|
+
FileWriter.write(generatedFiles, (file: TargetFile) => {
|
|
36
|
+
Logger.logSingle(`${file.name} processed.`, false, 'green', false);
|
|
37
|
+
files.push(file);
|
|
38
|
+
});
|
|
18
39
|
|
|
19
|
-
|
|
40
|
+
Settings.getInstance().onAfterProcess(files);
|
|
41
|
+
|
|
42
|
+
// Error logging
|
|
43
|
+
ErrorLogger.logErrors(filteredTypes);
|
|
44
|
+
}
|
|
20
45
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
46
|
+
private static filterByScopes(manifest: Manifest) {
|
|
47
|
+
let filteredTypes: Type[];
|
|
48
|
+
let filteredLogMessage;
|
|
49
|
+
if (Settings.getInstance().config.targetGenerator !== 'openapi') {
|
|
50
|
+
filteredTypes = manifest.filteredByAccessModifierAndAnnotations(Settings.getInstance().scope);
|
|
51
|
+
filteredLogMessage = `Filtered ${manifest.types.length - filteredTypes.length} file(s) based on scope: ${
|
|
52
|
+
Settings.getInstance().scope
|
|
53
|
+
}`;
|
|
54
|
+
} else {
|
|
55
|
+
// If we are dealing with an OpenApi generator, we ignore the passed in access modifiers, and instead
|
|
56
|
+
// we only keep classes annotated as @RestResource
|
|
57
|
+
filteredTypes = manifest.filteredByAccessModifierAndAnnotations([
|
|
58
|
+
'restresource',
|
|
59
|
+
'httpdelete',
|
|
60
|
+
'httpget',
|
|
61
|
+
'httppatch',
|
|
62
|
+
'httppost',
|
|
63
|
+
'httpput',
|
|
64
|
+
]);
|
|
65
|
+
filteredLogMessage = `Filtered ${
|
|
66
|
+
manifest.types.length - filteredTypes.length
|
|
67
|
+
} file(s), only keeping classes annotated as @RestResource.`;
|
|
28
68
|
}
|
|
69
|
+
Logger.clear();
|
|
70
|
+
|
|
71
|
+
Logger.logSingle(filteredLogMessage, false, 'green', false);
|
|
72
|
+
Logger.logSingle(`Creating documentation for ${filteredTypes.length} file(s)`, false, 'green', false);
|
|
73
|
+
return filteredTypes;
|
|
29
74
|
}
|
|
75
|
+
|
|
76
|
+
static _reflectionWithLogger = (apexBundle: ApexBundle): ReflectionResult => {
|
|
77
|
+
const result = reflect(apexBundle.rawTypeContent);
|
|
78
|
+
if (result.error) {
|
|
79
|
+
Logger.error(`${apexBundle.filePath} - Parsing error ${result.error?.message}`);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
};
|
|
30
83
|
}
|
package/src/cli/generate.ts
CHANGED
|
@@ -1,16 +1,137 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import * as yargs from 'yargs';
|
|
3
|
+
|
|
4
|
+
import { Settings } from '../settings';
|
|
2
5
|
import { Apexdocs } from '../application/Apexdocs';
|
|
3
|
-
import {
|
|
6
|
+
import { GeneratorChoices } from '../transpiler/generator-choices';
|
|
7
|
+
import { cosmiconfig } from 'cosmiconfig';
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
const result = cosmiconfig('apexdocs').search();
|
|
10
|
+
result.then((config) => {
|
|
11
|
+
yargs.config(config?.config);
|
|
12
|
+
let argv = yargs.options({
|
|
13
|
+
sourceDir: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
alias: 's',
|
|
16
|
+
demandOption: true,
|
|
17
|
+
describe: 'The directory location which contains your apex .cls classes.',
|
|
18
|
+
},
|
|
19
|
+
targetDir: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
alias: 't',
|
|
22
|
+
default: './docs/',
|
|
23
|
+
describe: 'The directory location where documentation will be generated to.',
|
|
24
|
+
},
|
|
25
|
+
recursive: {
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
alias: 'r',
|
|
28
|
+
default: true,
|
|
29
|
+
describe: 'Whether .cls classes will be searched for recursively in the directory provided.',
|
|
30
|
+
},
|
|
31
|
+
scope: {
|
|
32
|
+
type: 'array',
|
|
33
|
+
alias: 'p',
|
|
34
|
+
default: ['global'],
|
|
35
|
+
describe:
|
|
36
|
+
'A list of scopes to document. Values should be separated by a space, e.g --scope global public namespaceaccessible. ' +
|
|
37
|
+
'Annotations are supported and should be passed lowercased and without the @ symbol, e.g. namespaceaccessible auraenabled. ' +
|
|
38
|
+
'Note that this setting is ignored if generating an OpenApi REST specification since that looks for classes annotated with @RestResource.',
|
|
39
|
+
},
|
|
40
|
+
targetGenerator: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
alias: 'g',
|
|
43
|
+
default: 'jekyll',
|
|
44
|
+
choices: ['jekyll', 'docsify', 'plain-markdown', 'openapi'],
|
|
45
|
+
describe:
|
|
46
|
+
'Define the static file generator for which the documents will be created. ' +
|
|
47
|
+
'Currently supports jekyll, docsify, plain markdown, and OpenAPI v3.1.0.',
|
|
48
|
+
},
|
|
49
|
+
indexOnly: {
|
|
50
|
+
type: 'boolean',
|
|
51
|
+
default: false,
|
|
52
|
+
describe: 'Defines whether only the index file should be generated.',
|
|
53
|
+
},
|
|
54
|
+
defaultGroupName: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
default: 'Miscellaneous',
|
|
57
|
+
describe: 'Defines the @group name to be used when a file does not specify it.',
|
|
58
|
+
},
|
|
59
|
+
sanitizeHtml: {
|
|
60
|
+
type: 'boolean',
|
|
61
|
+
default: true,
|
|
62
|
+
describe:
|
|
63
|
+
'When on, any special character within your ApexDocs is converted into its HTML code representation. ' +
|
|
64
|
+
'This is specially useful when generic objects are described within the docs, e.g. "List< Foo>", "Map<Foo, Bar>" ' +
|
|
65
|
+
'because otherwise the content within < and > would be treated as HTML tags and not shown in the output. ' +
|
|
66
|
+
'Content in @example blocks are never sanitized.',
|
|
67
|
+
},
|
|
68
|
+
openApiTitle: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
default: 'Apex REST Api',
|
|
71
|
+
describe: 'If using "openapi" as the target generator, this allows you to specify the OpenApi title value.',
|
|
72
|
+
},
|
|
73
|
+
title: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
describe: "If this allows you to specify the title of the generated documentation's home file.",
|
|
76
|
+
default: 'Classes',
|
|
77
|
+
},
|
|
78
|
+
namespace: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
describe:
|
|
81
|
+
'The package namespace, if any. If this value is provided the namespace will be added as a prefix to all of the parsed files. ' +
|
|
82
|
+
"If generating an OpenApi definition, it will be added to the file's Server Url.",
|
|
83
|
+
},
|
|
84
|
+
openApiFileName: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
describe: 'If using "openapi" as the target generator, this allows you to specify the name of the output file.',
|
|
87
|
+
default: 'openapi',
|
|
88
|
+
},
|
|
89
|
+
sortMembersAlphabetically: {
|
|
90
|
+
type: 'boolean',
|
|
91
|
+
describe: 'Whether to sort members alphabetically.',
|
|
92
|
+
default: false,
|
|
93
|
+
},
|
|
94
|
+
includeMetadata: {
|
|
95
|
+
type: 'boolean',
|
|
96
|
+
describe: "Whether to include the file's meta.xml information: Whether it is active and and the API version",
|
|
97
|
+
default: false,
|
|
98
|
+
},
|
|
99
|
+
documentationRootDir: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
describe:
|
|
102
|
+
'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.',
|
|
103
|
+
},
|
|
104
|
+
}).argv;
|
|
105
|
+
|
|
106
|
+
if (config) {
|
|
107
|
+
argv = { ...config.config, ...argv };
|
|
9
108
|
}
|
|
10
109
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.
|
|
14
|
-
|
|
110
|
+
Settings.build({
|
|
111
|
+
sourceDirectory: argv.sourceDir,
|
|
112
|
+
recursive: argv.recursive,
|
|
113
|
+
scope: argv.scope,
|
|
114
|
+
outputDir: argv.targetDir,
|
|
115
|
+
targetGenerator: argv.targetGenerator as GeneratorChoices,
|
|
116
|
+
indexOnly: argv.indexOnly,
|
|
117
|
+
defaultGroupName: argv.defaultGroupName,
|
|
118
|
+
sanitizeHtml: argv.sanitizeHtml,
|
|
119
|
+
openApiTitle: argv.openApiTitle,
|
|
120
|
+
title: argv.title,
|
|
121
|
+
namespace: argv.namespace,
|
|
122
|
+
openApiFileName: argv.openApiFileName,
|
|
123
|
+
sortMembersAlphabetically: argv.sortMembersAlphabetically,
|
|
124
|
+
includeMetadata: argv.includeMetadata,
|
|
125
|
+
rootDir: argv.documentationRootDir,
|
|
126
|
+
onAfterProcess: config?.config?.onAfterProcess,
|
|
127
|
+
onBeforeFileWrite: config?.config?.onBeforeFileWrite,
|
|
128
|
+
frontMatterHeader: config?.config?.frontMatterHeader,
|
|
129
|
+
});
|
|
15
130
|
|
|
16
|
-
|
|
131
|
+
try {
|
|
132
|
+
Apexdocs.generate();
|
|
133
|
+
} catch (error) {
|
|
134
|
+
console.error(error);
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -1,35 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import type {
|
|
3
|
-
ConfigurableHooks,
|
|
4
|
-
Skip,
|
|
5
|
-
UserDefinedMarkdownConfig,
|
|
6
|
-
ReferenceGuidePageData,
|
|
7
|
-
DocPageData,
|
|
8
|
-
} from './core/shared/types';
|
|
9
|
-
import { defaults } from './defaults';
|
|
10
|
-
|
|
11
|
-
type ConfigurableMarkdownConfig = Omit<
|
|
12
|
-
SetOptional<
|
|
13
|
-
UserDefinedMarkdownConfig,
|
|
14
|
-
'targetDir' | 'scope' | 'defaultGroupName' | 'includeMetadata' | 'sortMembersAlphabetically'
|
|
15
|
-
>,
|
|
16
|
-
'targetGenerator'
|
|
17
|
-
>;
|
|
18
|
-
|
|
19
|
-
function defineMarkdownConfig(config: ConfigurableMarkdownConfig): UserDefinedMarkdownConfig {
|
|
20
|
-
return {
|
|
21
|
-
...defaults,
|
|
22
|
-
...config,
|
|
23
|
-
targetGenerator: 'markdown',
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function skip(): Skip {
|
|
28
|
-
return {
|
|
29
|
-
_tag: 'Skip',
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Exports
|
|
34
|
-
|
|
35
|
-
export { defineMarkdownConfig, skip, ConfigurableHooks, ReferenceGuidePageData, DocPageData };
|
|
1
|
+
export * from './service/manifest-factory';
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import Manifest from '../manifest';
|
|
2
|
+
import { EnumMirror } from '@cparra/apex-reflection';
|
|
3
|
+
import { ManifestDiff } from '../manifest-diff';
|
|
4
|
+
import { Annotation } from '@cparra/apex-reflection/index';
|
|
5
|
+
|
|
6
|
+
const deprecatedAnnotation: Annotation = {
|
|
7
|
+
rawDeclaration: '@deprecated',
|
|
8
|
+
name: 'deprecated',
|
|
9
|
+
type: 'deprecated',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const namespaceAccessibleAnnotation: Annotation = {
|
|
13
|
+
rawDeclaration: '@NamespaceAccessible',
|
|
14
|
+
name: 'namespaceaccessible',
|
|
15
|
+
type: 'namespaceaccessible',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
it('detects when new types are added', () => {
|
|
19
|
+
const commonType = {
|
|
20
|
+
annotations: [],
|
|
21
|
+
name: 'CommonEnum',
|
|
22
|
+
type_name: 'enum',
|
|
23
|
+
access_modifier: 'public',
|
|
24
|
+
values: [],
|
|
25
|
+
} as EnumMirror;
|
|
26
|
+
|
|
27
|
+
const originalManifest = new Manifest([commonType]);
|
|
28
|
+
|
|
29
|
+
const addedType = {
|
|
30
|
+
annotations: [],
|
|
31
|
+
name: 'NewEnum',
|
|
32
|
+
type_name: 'enum',
|
|
33
|
+
access_modifier: 'public',
|
|
34
|
+
values: [],
|
|
35
|
+
} as EnumMirror;
|
|
36
|
+
const newManifest = new Manifest([addedType, commonType]);
|
|
37
|
+
|
|
38
|
+
const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
|
|
39
|
+
expect(manifestDiff.added.length).toBe(1);
|
|
40
|
+
expect(manifestDiff.added[0].name).toBe('NewEnum');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('detects when types are deleted', () => {
|
|
44
|
+
const commonType = {
|
|
45
|
+
annotations: [],
|
|
46
|
+
name: 'CommonEnum',
|
|
47
|
+
type_name: 'enum',
|
|
48
|
+
access_modifier: 'public',
|
|
49
|
+
values: [],
|
|
50
|
+
} as EnumMirror;
|
|
51
|
+
|
|
52
|
+
const deletedType = {
|
|
53
|
+
annotations: [],
|
|
54
|
+
name: 'OldEnum',
|
|
55
|
+
type_name: 'enum',
|
|
56
|
+
access_modifier: 'public',
|
|
57
|
+
values: [],
|
|
58
|
+
} as EnumMirror;
|
|
59
|
+
const originalManifest = new Manifest([commonType, deletedType]);
|
|
60
|
+
const newManifest = new Manifest([commonType]);
|
|
61
|
+
|
|
62
|
+
const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
|
|
63
|
+
expect(manifestDiff.deleted.length).toBe(1);
|
|
64
|
+
expect(manifestDiff.deleted[0].name).toBe('OldEnum');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('does not add enums that have no changes', () => {
|
|
68
|
+
const originalEnum = {
|
|
69
|
+
annotations: [],
|
|
70
|
+
name: 'CommonEnum',
|
|
71
|
+
type_name: 'enum',
|
|
72
|
+
access_modifier: 'public',
|
|
73
|
+
values: [],
|
|
74
|
+
} as EnumMirror;
|
|
75
|
+
|
|
76
|
+
const modifiedEnum = {
|
|
77
|
+
annotations: [],
|
|
78
|
+
name: 'CommonEnum',
|
|
79
|
+
type_name: 'enum',
|
|
80
|
+
access_modifier: 'public',
|
|
81
|
+
values: [],
|
|
82
|
+
} as EnumMirror;
|
|
83
|
+
|
|
84
|
+
const originalManifest = new Manifest([originalEnum]);
|
|
85
|
+
const newManifest = new Manifest([modifiedEnum]);
|
|
86
|
+
|
|
87
|
+
const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
|
|
88
|
+
expect(manifestDiff.changes.length).toBe(0);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('detects changes to access modifiers within an enum', () => {
|
|
92
|
+
const originalEnum = {
|
|
93
|
+
annotations: [],
|
|
94
|
+
name: 'CommonEnum',
|
|
95
|
+
type_name: 'enum',
|
|
96
|
+
access_modifier: 'public',
|
|
97
|
+
values: [],
|
|
98
|
+
} as EnumMirror;
|
|
99
|
+
|
|
100
|
+
const modifiedEnum = {
|
|
101
|
+
annotations: [],
|
|
102
|
+
name: 'CommonEnum',
|
|
103
|
+
type_name: 'enum',
|
|
104
|
+
access_modifier: 'private',
|
|
105
|
+
values: [],
|
|
106
|
+
} as EnumMirror;
|
|
107
|
+
|
|
108
|
+
const originalManifest = new Manifest([originalEnum]);
|
|
109
|
+
const newManifest = new Manifest([modifiedEnum]);
|
|
110
|
+
|
|
111
|
+
const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
|
|
112
|
+
expect(manifestDiff.changes.length).toBe(1);
|
|
113
|
+
expect(manifestDiff.changes[0].originalType).toBe(originalEnum);
|
|
114
|
+
expect(manifestDiff.changes[0].newType).toBe(modifiedEnum);
|
|
115
|
+
expect(manifestDiff.changes[0].accessModifierChange).not.toBeNull();
|
|
116
|
+
expect(manifestDiff.changes[0].accessModifierChange?.oldAccessModifier).toBe('public');
|
|
117
|
+
expect(manifestDiff.changes[0].accessModifierChange?.newAccessModifier).toBe('private');
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('detects changes to annotations within an enum', () => {
|
|
121
|
+
const originalEnum = {
|
|
122
|
+
annotations: [deprecatedAnnotation],
|
|
123
|
+
name: 'CommonEnum',
|
|
124
|
+
type_name: 'enum',
|
|
125
|
+
access_modifier: 'public',
|
|
126
|
+
} as EnumMirror;
|
|
127
|
+
|
|
128
|
+
const modifiedEnum = {
|
|
129
|
+
annotations: [namespaceAccessibleAnnotation],
|
|
130
|
+
name: 'CommonEnum',
|
|
131
|
+
type_name: 'enum',
|
|
132
|
+
access_modifier: 'private',
|
|
133
|
+
} as EnumMirror;
|
|
134
|
+
|
|
135
|
+
const originalManifest = new Manifest([originalEnum]);
|
|
136
|
+
const newManifest = new Manifest([modifiedEnum]);
|
|
137
|
+
|
|
138
|
+
const manifestDiff = ManifestDiff.build(originalManifest, newManifest);
|
|
139
|
+
expect(manifestDiff.changes.length).toBe(1);
|
|
140
|
+
expect(manifestDiff.changes[0].annotationChanges.length).toBe(2);
|
|
141
|
+
expect(manifestDiff.changes[0].annotationChanges.find((change) => change.type === 'added')?.annotation.name).toBe(
|
|
142
|
+
namespaceAccessibleAnnotation.name,
|
|
143
|
+
);
|
|
144
|
+
expect(manifestDiff.changes[0].annotationChanges.find((change) => change.type === 'removed')?.annotation.name).toBe(
|
|
145
|
+
deprecatedAnnotation.name,
|
|
146
|
+
);
|
|
147
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { ClassMirrorBuilder } from '../../../test-helpers/ClassMirrorBuilder';
|
|
1
2
|
import { ClassMirrorWrapper } from '../ClassMirrorWrapper';
|
|
2
|
-
import {
|
|
3
|
-
import { MethodMirrorBuilder } from '
|
|
4
|
-
import { AnnotationBuilder } from '../../../../test-helpers/AnnotationBuilder';
|
|
3
|
+
import { AnnotationBuilder } from '../../../test-helpers/AnnotationBuilder';
|
|
4
|
+
import { MethodMirrorBuilder } from '../../../test-helpers/MethodMirrorBuilder';
|
|
5
5
|
|
|
6
6
|
it('should return methods by annotation when they exist', function () {
|
|
7
7
|
const classMirror = new ClassMirrorBuilder()
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FieldMirror, MethodMirror, PropertyMirror } from '@cparra/apex-reflection';
|
|
2
|
+
|
|
3
|
+
export type InheritanceSupport = { inherited: boolean };
|
|
4
|
+
export type FieldMirrorWithInheritance = FieldMirror & InheritanceSupport;
|
|
5
|
+
export type PropertyMirrorWithInheritance = PropertyMirror & InheritanceSupport;
|
|
6
|
+
export type MethodMirrorWithInheritance = MethodMirror & InheritanceSupport;
|
|
7
|
+
export type FieldOrProperty = FieldMirrorWithInheritance | PropertyMirrorWithInheritance;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import Manifest from './manifest';
|
|
2
|
+
import { Type } from '@cparra/apex-reflection';
|
|
3
|
+
import { Annotation } from '@cparra/apex-reflection/index';
|
|
4
|
+
|
|
5
|
+
export class ManifestDiff {
|
|
6
|
+
added: Type[] = [];
|
|
7
|
+
deleted: Type[] = [];
|
|
8
|
+
changes: DiffChange[] = [];
|
|
9
|
+
|
|
10
|
+
static build(originalManifest: Manifest, newManifest: Manifest) {
|
|
11
|
+
const addedTypes = newManifest.types.filter(
|
|
12
|
+
(currentType) => !originalManifest.types.find((originalType) => currentType.name === originalType.name),
|
|
13
|
+
);
|
|
14
|
+
const deletedTypes = originalManifest.types.filter(
|
|
15
|
+
(currentType) => !newManifest.types.find((newType) => currentType.name === newType.name),
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
const changes: DiffChange[] = [];
|
|
19
|
+
for (const newType of newManifest.types) {
|
|
20
|
+
const oldType = originalManifest.types.find((oldType) => oldType.name === newType.name);
|
|
21
|
+
if (!oldType) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const change = new DiffChange(oldType, newType);
|
|
26
|
+
if (change.hasChanges()) {
|
|
27
|
+
changes.push(change);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const diff = new ManifestDiff();
|
|
32
|
+
diff.added = addedTypes;
|
|
33
|
+
diff.deleted = deletedTypes;
|
|
34
|
+
diff.changes = changes;
|
|
35
|
+
return diff;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
class DiffChange {
|
|
40
|
+
accessModifierChange?: AccessModifierChange;
|
|
41
|
+
annotationChanges: AnnotationChange[] = [];
|
|
42
|
+
|
|
43
|
+
constructor(public originalType: Type, public newType: Type) {
|
|
44
|
+
this.parse();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public hasChanges(): boolean {
|
|
48
|
+
return !!this.accessModifierChange || this.annotationChanges.length > 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private parse() {
|
|
52
|
+
// Access modifier changes
|
|
53
|
+
if (this.originalType.access_modifier !== this.newType.access_modifier) {
|
|
54
|
+
this.accessModifierChange = {
|
|
55
|
+
oldAccessModifier: this.originalType.access_modifier,
|
|
56
|
+
newAccessModifier: this.newType.access_modifier,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Annotation changes
|
|
61
|
+
const addedAnnotations = this.newType.annotations.filter(
|
|
62
|
+
(currentAnnotation) =>
|
|
63
|
+
!this.originalType.annotations.find((originalAnnotation) => currentAnnotation.name === originalAnnotation.name),
|
|
64
|
+
);
|
|
65
|
+
const removedAnnotations = this.originalType.annotations.filter(
|
|
66
|
+
(currentAnnotation) =>
|
|
67
|
+
!this.newType.annotations.find((newAnnotation) => currentAnnotation.name === newAnnotation.name),
|
|
68
|
+
);
|
|
69
|
+
const annotationChangeMapper = (annotation: Annotation, changeType: 'added' | 'removed') => {
|
|
70
|
+
return {
|
|
71
|
+
annotation: annotation,
|
|
72
|
+
type: changeType,
|
|
73
|
+
} as AnnotationChange;
|
|
74
|
+
};
|
|
75
|
+
this.annotationChanges = [
|
|
76
|
+
...addedAnnotations.map((annotation) => {
|
|
77
|
+
return annotationChangeMapper(annotation, 'added');
|
|
78
|
+
}),
|
|
79
|
+
...removedAnnotations.map((annotation) => {
|
|
80
|
+
return annotationChangeMapper(annotation, 'removed');
|
|
81
|
+
}),
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
interface AccessModifierChange {
|
|
87
|
+
oldAccessModifier: string;
|
|
88
|
+
newAccessModifier: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
interface AnnotationChange {
|
|
92
|
+
annotation: Annotation;
|
|
93
|
+
type: 'added' | 'removed';
|
|
94
|
+
}
|