@cparra/apexdocs 3.0.0-rc.0 → 3.1.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/README.md +61 -576
- package/dist/cli/generate.js +73 -3094
- package/dist/defaults-BcE8DTat.js +13 -0
- package/dist/defaults-D07y_bq4.js +40 -0
- package/dist/defaults-gPzwP66p.js +14 -0
- package/dist/index.d.ts +35 -3
- package/dist/index.js +90 -2
- package/dist/logger-BEbUIfqN.js +3282 -0
- package/dist/logger-BGuf1PnL.js +3281 -0
- package/dist/logger-CWBRF2za.js +3284 -0
- package/dist/logger-CdBmDEN1.js +3283 -0
- package/dist/logger-Ce4QqPFR.js +3278 -0
- package/dist/logger-CyEVYaAC.js +3284 -0
- package/dist/logger-D7a83ycP.js +3277 -0
- package/dist/logger-DGaHeBKk.js +3279 -0
- package/dist/logger-Dqhl_lO_.js +3278 -0
- package/dist/logger-aySSWi0G.js +3280 -0
- package/dist/logger-qLCcAtiy.js +3284 -0
- package/package.json +5 -2
- package/.github/workflows/ci.yaml +0 -22
- package/.github/workflows/close_stale.yml +0 -22
- package/.prettierrc.js +0 -7
- package/__mocks__/chalk.js +0 -12
- package/__mocks__/log-update.js +0 -6
- package/eslint.config.mjs +0 -10
- package/examples/markdown/.forceignore +0 -12
- package/examples/markdown/config/project-scratch-def.json +0 -5
- package/examples/markdown/docs/index.md +0 -109
- package/examples/markdown/docs/miscellaneous/BaseClass.md +0 -16
- package/examples/markdown/docs/miscellaneous/MultiInheritanceClass.md +0 -72
- package/examples/markdown/docs/miscellaneous/ParentInterface.md +0 -15
- package/examples/markdown/docs/miscellaneous/ReferencedEnum.md +0 -8
- package/examples/markdown/docs/miscellaneous/SampleException.md +0 -24
- package/examples/markdown/docs/miscellaneous/SampleInterface.md +0 -116
- package/examples/markdown/docs/miscellaneous/Url.md +0 -311
- package/examples/markdown/docs/sample-enums/SampleEnum.md +0 -36
- package/examples/markdown/docs/samplegroup/SampleClass.md +0 -170
- package/examples/markdown/force-app/classes/BaseClass.cls +0 -3
- package/examples/markdown/force-app/classes/MultiInheritanceClass.cls +0 -1
- package/examples/markdown/force-app/classes/ParentInterface.cls +0 -3
- package/examples/markdown/force-app/classes/ReferencedEnum.cls +0 -3
- package/examples/markdown/force-app/classes/SampleClass.cls +0 -72
- package/examples/markdown/force-app/classes/SampleEnum.cls +0 -30
- package/examples/markdown/force-app/classes/SampleException.cls +0 -17
- package/examples/markdown/force-app/classes/SampleInterface.cls +0 -50
- package/examples/markdown/force-app/classes/Url.cls +0 -196
- package/examples/markdown/package-lock.json +0 -665
- package/examples/markdown/package.json +0 -20
- package/examples/markdown/sfdx-project.json +0 -12
- package/examples/markdown-jsconfig/.forceignore +0 -12
- package/examples/markdown-jsconfig/apexdocs.config.mjs +0 -21
- package/examples/markdown-jsconfig/config/project-scratch-def.json +0 -5
- package/examples/markdown-jsconfig/docs/index.md +0 -12
- package/examples/markdown-jsconfig/docs/miscellaneous/Url.md +0 -315
- package/examples/markdown-jsconfig/force-app/classes/Url.cls +0 -196
- package/examples/markdown-jsconfig/package-lock.json +0 -665
- package/examples/markdown-jsconfig/package.json +0 -15
- package/examples/markdown-jsconfig/sfdx-project.json +0 -12
- package/examples/open-api/config/project-scratch-def.json +0 -13
- package/examples/open-api/docs/openapi.json +0 -582
- package/examples/open-api/force-app/main/default/classes/ChildClass.cls +0 -42
- package/examples/open-api/force-app/main/default/classes/SampleClass.cls +0 -167
- package/examples/open-api/force-app/main/default/restapi/SampleRestResource.cls +0 -195
- package/examples/open-api/force-app/main/default/restapi/SampleRestResourceToSkip.cls +0 -35
- package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithInnerClass.cls +0 -24
- package/examples/open-api/force-app/main/default/restapi/SampleRestResourceWithoutApexDocs.cls +0 -15
- package/examples/open-api/force-app/main/default/restapi/references/Reference1.cls +0 -9
- package/examples/open-api/force-app/main/default/restapi/references/Reference2.cls +0 -9
- package/examples/open-api/force-app/main/default/restapi/references/Reference3.cls +0 -3
- package/examples/open-api/force-app/main/default/restapi/references/Reference4.cls +0 -3
- package/examples/open-api/force-app/main/default/restapi/references/Reference5.cls +0 -3
- package/examples/open-api/force-app/main/default/restapi/references/Reference6.cls +0 -6
- package/examples/open-api/force-app/main/default/restapi/references/Reference7.cls +0 -3
- package/examples/open-api/package-lock.json +0 -724
- package/examples/open-api/package.json +0 -20
- package/examples/open-api/sfdx-project.json +0 -12
- package/examples/vitepress/.forceignore +0 -12
- package/examples/vitepress/apexdocs.config.ts +0 -111
- 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/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/docs/miscellaneous/BaseClass.md +0 -20
- package/examples/vitepress/docs/miscellaneous/MultiInheritanceClass.md +0 -76
- package/examples/vitepress/docs/miscellaneous/ParentInterface.md +0 -19
- package/examples/vitepress/docs/miscellaneous/ReferencedEnum.md +0 -15
- package/examples/vitepress/docs/miscellaneous/SampleException.md +0 -28
- package/examples/vitepress/docs/miscellaneous/SampleInterface.md +0 -116
- package/examples/vitepress/docs/miscellaneous/Url.md +0 -317
- package/examples/vitepress/docs/sample-enums/SampleEnum.md +0 -40
- package/examples/vitepress/docs/samplegroup/SampleClass.md +0 -174
- 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.config.js +0 -10
- package/jest.d.ts +0 -7
- package/src/application/Apexdocs.ts +0 -72
- package/src/application/__tests__/apex-file-reader.spec.ts +0 -87
- package/src/application/apex-file-reader.ts +0 -55
- package/src/application/file-system.ts +0 -69
- package/src/application/file-writer.ts +0 -43
- package/src/application/generators/markdown.ts +0 -45
- package/src/application/generators/openapi.ts +0 -71
- package/src/cli/args.ts +0 -46
- package/src/cli/commands/markdown.ts +0 -51
- package/src/cli/commands/openapi.ts +0 -36
- package/src/cli/generate.ts +0 -16
- package/src/core/__test__/manifest.spec.ts +0 -16
- 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 -605
- package/src/core/markdown/__test__/generating-docs.spec.ts +0 -111
- package/src/core/markdown/__test__/generating-enum-docs.spec.ts +0 -321
- package/src/core/markdown/__test__/generating-interface-docs.spec.ts +0 -397
- package/src/core/markdown/__test__/generating-reference-guide.spec.ts +0 -180
- package/src/core/markdown/__test__/inheritance-chain.test.ts +0 -54
- package/src/core/markdown/__test__/test-helpers.ts +0 -23
- package/src/core/markdown/adapters/__tests__/documentables.spec.ts +0 -109
- package/src/core/markdown/adapters/__tests__/interface-adapter.spec.ts +0 -148
- package/src/core/markdown/adapters/__tests__/link-generator.spec.ts +0 -130
- package/src/core/markdown/adapters/__tests__/references.spec.ts +0 -136
- package/src/core/markdown/adapters/apex-types.ts +0 -238
- package/src/core/markdown/adapters/documentables.ts +0 -115
- package/src/core/markdown/adapters/fields-and-properties.ts +0 -45
- package/src/core/markdown/adapters/generate-link.ts +0 -82
- 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/reference-guide.ts +0 -37
- package/src/core/markdown/adapters/renderable-bundle.ts +0 -61
- package/src/core/markdown/adapters/renderable-to-page-data.ts +0 -89
- package/src/core/markdown/adapters/type-utils.ts +0 -13
- package/src/core/markdown/adapters/types.d.ts +0 -180
- package/src/core/markdown/generate-docs.ts +0 -212
- package/src/core/markdown/reflection/__test__/filter-scope.spec.ts +0 -306
- 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 -123
- 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/openApiSettings.ts +0 -41
- package/src/core/openapi/__tests__/manifest-factory.spec.ts +0 -16
- package/src/core/openapi/__tests__/open-api-docs-processor.spec.ts +0 -56
- package/src/core/openapi/__tests__/open-api.spec.ts +0 -22
- package/src/core/openapi/apex-doc-types.ts +0 -26
- package/src/core/openapi/apex-type-wrappers/ClassMirrorWrapper.ts +0 -12
- package/src/core/openapi/apex-type-wrappers/MethodMirrorWrapper.ts +0 -11
- package/src/core/openapi/apex-type-wrappers/__tests__/ClassMirrorWrapper.spec.ts +0 -15
- package/src/core/openapi/file-container.ts +0 -13
- package/src/core/openapi/manifest-factory.ts +0 -16
- package/src/core/openapi/open-api-docs-processor.ts +0 -93
- package/src/core/openapi/open-api-types.ts +0 -119
- package/src/core/openapi/open-api.ts +0 -45
- package/src/core/openapi/openapi-type-file.ts +0 -12
- package/src/core/openapi/parser.ts +0 -160
- package/src/core/openapi/parsers/Builder.ts +0 -40
- package/src/core/openapi/parsers/MethodParser.ts +0 -249
- package/src/core/openapi/parsers/ParameterObjectBuilder.ts +0 -13
- package/src/core/openapi/parsers/ReferenceBuilder.ts +0 -299
- package/src/core/openapi/parsers/RequestBodyBuilder.ts +0 -19
- package/src/core/openapi/parsers/ResponsesBuilder.ts +0 -21
- package/src/core/openapi/parsers/__tests__/MethodParser.spec.ts +0 -44
- package/src/core/openapi/parsers/__tests__/ParameterObjectBuilder.spec.ts +0 -68
- package/src/core/openapi/parsers/__tests__/ReferenceBuilder.spec.ts +0 -751
- package/src/core/openapi/parsers/__tests__/RequestBodyBuilder.spec.ts +0 -64
- package/src/core/openapi/parsers/__tests__/ResponsesBuilder.spec.ts +0 -55
- package/src/core/openapi/transpiler.ts +0 -17
- package/src/core/openapi/types-repository.ts +0 -54
- package/src/core/parse-apex-metadata.ts +0 -30
- package/src/core/shared/types.d.ts +0 -148
- package/src/core/shared/utils.ts +0 -5
- package/src/defaults.ts +0 -9
- package/src/index.ts +0 -49
- package/src/test-helpers/AnnotationBuilder.ts +0 -29
- package/src/test-helpers/ClassMirrorBuilder.ts +0 -69
- package/src/test-helpers/DocCommentAnnotationBuilder.ts +0 -24
- package/src/test-helpers/DocCommentBuilder.ts +0 -36
- package/src/test-helpers/FieldMirrorBuilder.ts +0 -59
- package/src/test-helpers/InterfaceMirrorBuilder.ts +0 -39
- package/src/test-helpers/MethodMirrorBuilder.ts +0 -77
- package/src/test-helpers/SettingsBuilder.ts +0 -17
- package/src/util/error-logger.ts +0 -92
- package/src/util/fp.ts +0 -3
- package/src/util/logger.ts +0 -44
- package/src/util/string-utils.ts +0 -7
- package/tsconfig.json +0 -25
- package/tslint.json +0 -6
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { ParsedFile, UnparsedSourceFile } from '../../shared/types';
|
|
2
|
-
import * as TE from 'fp-ts/TaskEither';
|
|
3
|
-
import * as E from 'fp-ts/Either';
|
|
4
|
-
import * as T from 'fp-ts/Task';
|
|
5
|
-
import * as A from 'fp-ts/lib/Array';
|
|
6
|
-
import { Annotation, reflect as mirrorReflection, Type } from '@cparra/apex-reflection';
|
|
7
|
-
import { pipe } from 'fp-ts/function';
|
|
8
|
-
import * as O from 'fp-ts/Option';
|
|
9
|
-
import { parseApexMetadata } from '../../parse-apex-metadata';
|
|
10
|
-
import { ParsingError } from '@cparra/apex-reflection';
|
|
11
|
-
import { apply } from '#utils/fp';
|
|
12
|
-
import { Semigroup } from 'fp-ts/Semigroup';
|
|
13
|
-
|
|
14
|
-
export class ReflectionErrors {
|
|
15
|
-
readonly _tag = 'ReflectionErrors';
|
|
16
|
-
|
|
17
|
-
constructor(public errors: ReflectionError[]) {}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export class ReflectionError {
|
|
21
|
-
constructor(
|
|
22
|
-
public file: string,
|
|
23
|
-
public message: string,
|
|
24
|
-
) {}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function reflectAsync(rawSource: string): Promise<Type> {
|
|
28
|
-
return new Promise((resolve, reject) => {
|
|
29
|
-
const result = mirrorReflection(rawSource);
|
|
30
|
-
if (result.typeMirror) {
|
|
31
|
-
return resolve(result.typeMirror);
|
|
32
|
-
} else if (result.error) {
|
|
33
|
-
return reject(result.error);
|
|
34
|
-
} else {
|
|
35
|
-
return reject(new Error('Unknown error'));
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function reflectBundles(apexBundles: UnparsedSourceFile[]) {
|
|
41
|
-
const semiGroupReflectionError: Semigroup<ReflectionErrors> = {
|
|
42
|
-
concat: (x, y) => new ReflectionErrors([...x.errors, ...y.errors]),
|
|
43
|
-
};
|
|
44
|
-
const Ap = TE.getApplicativeTaskValidation(T.ApplyPar, semiGroupReflectionError);
|
|
45
|
-
|
|
46
|
-
return pipe(apexBundles, A.traverse(Ap)(reflectBundle));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function reflectBundle(apexBundle: UnparsedSourceFile): TE.TaskEither<ReflectionErrors, ParsedFile> {
|
|
50
|
-
const convertToParsedFile: (typeMirror: Type) => ParsedFile = apply(toParsedFile, apexBundle.filePath);
|
|
51
|
-
const withMetadata = apply(addMetadata, apexBundle.metadataContent);
|
|
52
|
-
|
|
53
|
-
return pipe(apexBundle, reflectAsTask, TE.map(convertToParsedFile), TE.flatMap(withMetadata));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function reflectAsTask(apexBundle: UnparsedSourceFile): TE.TaskEither<ReflectionErrors, Type> {
|
|
57
|
-
return TE.tryCatch(
|
|
58
|
-
() => reflectAsync(apexBundle.content),
|
|
59
|
-
(error) =>
|
|
60
|
-
new ReflectionErrors([new ReflectionError(apexBundle.filePath, (error as ParsingError | Error).message)]),
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function toParsedFile(filePath: string, typeMirror: Type): ParsedFile {
|
|
65
|
-
return {
|
|
66
|
-
source: {
|
|
67
|
-
filePath: filePath,
|
|
68
|
-
name: typeMirror.name,
|
|
69
|
-
type: typeMirror.type_name,
|
|
70
|
-
},
|
|
71
|
-
type: typeMirror,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function addMetadata(
|
|
76
|
-
rawMetadataContent: string | null,
|
|
77
|
-
parsedFile: ParsedFile,
|
|
78
|
-
): TE.TaskEither<ReflectionErrors, ParsedFile> {
|
|
79
|
-
return TE.fromEither(
|
|
80
|
-
pipe(
|
|
81
|
-
parsedFile.type,
|
|
82
|
-
(type) => addFileMetadataToTypeAnnotation(type, rawMetadataContent),
|
|
83
|
-
E.map((type) => ({ ...parsedFile, type })),
|
|
84
|
-
E.mapLeft((error) => errorToReflectionErrors(error, parsedFile.source.filePath)),
|
|
85
|
-
),
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function errorToReflectionErrors(error: Error, filePath: string): ReflectionErrors {
|
|
90
|
-
return new ReflectionErrors([new ReflectionError(filePath, error.message)]);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function addFileMetadataToTypeAnnotation(type: Type, metadata: string | null): E.Either<Error, Type> {
|
|
94
|
-
const concatAnnotationToType = apply(concatAnnotations, type);
|
|
95
|
-
|
|
96
|
-
return pipe(
|
|
97
|
-
O.fromNullable(metadata),
|
|
98
|
-
O.map(concatAnnotationToType),
|
|
99
|
-
O.getOrElse(() => E.right(type)),
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function concatAnnotations(type: Type, metadataInput: string): E.Either<Error, Type> {
|
|
104
|
-
return pipe(
|
|
105
|
-
metadataInput,
|
|
106
|
-
parseApexMetadata,
|
|
107
|
-
E.map((metadataMap) => ({
|
|
108
|
-
...type,
|
|
109
|
-
annotations: [...type.annotations, ...mapToAnnotations(metadataMap)],
|
|
110
|
-
})),
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function mapToAnnotations(metadata: Map<string, string>): Annotation[] {
|
|
115
|
-
return Array.from(metadata.entries()).map(([key, value]) => {
|
|
116
|
-
const declaration = `${key}: ${value}`;
|
|
117
|
-
return {
|
|
118
|
-
name: declaration,
|
|
119
|
-
type: declaration,
|
|
120
|
-
rawDeclaration: declaration,
|
|
121
|
-
};
|
|
122
|
-
});
|
|
123
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { ClassMirror, EnumMirror, InterfaceMirror, Type } from '@cparra/apex-reflection';
|
|
2
|
-
import { ParsedFile } from '../../shared/types';
|
|
3
|
-
|
|
4
|
-
type Named = { name: string };
|
|
5
|
-
|
|
6
|
-
export function sortMembers(shouldSortMembers: boolean, parsedFiles: ParsedFile[]): ParsedFile[] {
|
|
7
|
-
return parsedFiles.map((parsedFile) => ({
|
|
8
|
-
...parsedFile,
|
|
9
|
-
type: sortTypeMember(parsedFile.type, shouldSortMembers),
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function sortByNames<T extends Named>(shouldSort: boolean, a: T, b: T): number {
|
|
14
|
-
if (shouldSort) {
|
|
15
|
-
return a.name.localeCompare(b.name);
|
|
16
|
-
}
|
|
17
|
-
return 0;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function sortNamed<T extends Named>(shouldSort: boolean, items: T[]): T[] {
|
|
21
|
-
return items.sort((a, b) => sortByNames(shouldSort, a, b));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function sortTypeMember(type: Type, shouldSort: boolean): Type {
|
|
25
|
-
switch (type.type_name) {
|
|
26
|
-
case 'enum':
|
|
27
|
-
return sortEnumValues(shouldSort, type as EnumMirror);
|
|
28
|
-
case 'interface':
|
|
29
|
-
return sortInterfaceMethods(shouldSort, type as InterfaceMirror);
|
|
30
|
-
case 'class':
|
|
31
|
-
return sortClassMembers(shouldSort, type as ClassMirror);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function sortEnumValues(shouldSort: boolean, enumType: EnumMirror): EnumMirror {
|
|
36
|
-
return {
|
|
37
|
-
...enumType,
|
|
38
|
-
values: sortNamed(shouldSort, enumType.values),
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function sortInterfaceMethods(shouldSort: boolean, interfaceType: InterfaceMirror): InterfaceMirror {
|
|
43
|
-
return {
|
|
44
|
-
...interfaceType,
|
|
45
|
-
methods: sortNamed(shouldSort, interfaceType.methods),
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function sortClassMembers(shouldSort: boolean, classType: ClassMirror): ClassMirror {
|
|
50
|
-
return {
|
|
51
|
-
...classType,
|
|
52
|
-
fields: sortNamed(shouldSort, classType.fields),
|
|
53
|
-
classes: sortNamed(shouldSort, classType.classes),
|
|
54
|
-
enums: sortNamed(shouldSort, classType.enums),
|
|
55
|
-
interfaces: sortNamed(shouldSort, classType.interfaces),
|
|
56
|
-
methods: sortNamed(shouldSort, classType.methods),
|
|
57
|
-
properties: sortNamed(shouldSort, classType.properties),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
export const classMarkdownTemplate = `
|
|
2
|
-
{{ heading headingLevel heading }}
|
|
3
|
-
{{#if classModifier}}
|
|
4
|
-
\`{{classModifier}}\`
|
|
5
|
-
{{/if}}
|
|
6
|
-
|
|
7
|
-
{{> typeDocumentation}}
|
|
8
|
-
|
|
9
|
-
{{#if extends.length}}
|
|
10
|
-
**Inheritance**
|
|
11
|
-
|
|
12
|
-
{{#each extends}}{{link this}}{{#unless @last}} < {{/unless}}{{/each}}
|
|
13
|
-
{{/if}}
|
|
14
|
-
|
|
15
|
-
{{#if implements}}
|
|
16
|
-
**Implements**
|
|
17
|
-
|
|
18
|
-
{{#each implements}}
|
|
19
|
-
{{link this}}{{#unless @last}}, {{/unless}}
|
|
20
|
-
{{/each}}
|
|
21
|
-
{{/if}}
|
|
22
|
-
|
|
23
|
-
{{#if fields.value}}
|
|
24
|
-
{{#if fields.isGrouped}}
|
|
25
|
-
{{> groupedMembersPartialTemplate fields subTemplate="fieldsPartialTemplate"}}
|
|
26
|
-
{{else}}
|
|
27
|
-
{{> fieldsPartialTemplate fields}}
|
|
28
|
-
{{/if}}
|
|
29
|
-
{{/if}}
|
|
30
|
-
|
|
31
|
-
{{#if properties.value}}
|
|
32
|
-
{{#if properties.isGrouped}}
|
|
33
|
-
{{> groupedMembersPartialTemplate properties subTemplate="fieldsPartialTemplate"}}
|
|
34
|
-
{{else}}
|
|
35
|
-
{{> fieldsPartialTemplate properties}}
|
|
36
|
-
{{/if}}
|
|
37
|
-
{{/if}}
|
|
38
|
-
|
|
39
|
-
{{#if constructors.value}}
|
|
40
|
-
{{#if constructors.isGrouped}}
|
|
41
|
-
{{> groupedMembersPartialTemplate constructors subTemplate="constructorsPartialTemplate"}}
|
|
42
|
-
{{else}}
|
|
43
|
-
{{> constructorsPartialTemplate constructors}}
|
|
44
|
-
{{/if}}
|
|
45
|
-
{{/if}}
|
|
46
|
-
|
|
47
|
-
{{#if methods.value}}
|
|
48
|
-
{{#if methods.isGrouped}}
|
|
49
|
-
{{> groupedMembersPartialTemplate methods subTemplate="methodsPartialTemplate"}}
|
|
50
|
-
{{else}}
|
|
51
|
-
{{> methodsPartialTemplate methods}}
|
|
52
|
-
{{/if}}
|
|
53
|
-
{{/if}}
|
|
54
|
-
|
|
55
|
-
{{#if innerClasses.value}}
|
|
56
|
-
{{ heading innerClasses.headingLevel innerClasses.heading }}
|
|
57
|
-
{{#each innerClasses.value}}
|
|
58
|
-
{{> classTemplate this}}
|
|
59
|
-
{{/each}}
|
|
60
|
-
{{/if}}
|
|
61
|
-
|
|
62
|
-
{{#if innerEnums.value}}
|
|
63
|
-
{{ heading innerEnums.headingLevel innerEnums.heading }}
|
|
64
|
-
{{#each innerEnums.value}}
|
|
65
|
-
{{> enumTemplate this}}
|
|
66
|
-
{{/each}}
|
|
67
|
-
{{/if}}
|
|
68
|
-
|
|
69
|
-
{{#if innerInterfaces.value}}
|
|
70
|
-
{{ heading innerInterfaces.headingLevel innerInterfaces.heading }}
|
|
71
|
-
{{#each innerInterfaces.value}}
|
|
72
|
-
{{> interfaceTemplate this}}
|
|
73
|
-
{{/each}}
|
|
74
|
-
{{/if}}
|
|
75
|
-
`.trim();
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export const constructorsPartialTemplate = `
|
|
2
|
-
{{ heading headingLevel heading }}
|
|
3
|
-
{{#each value}}
|
|
4
|
-
{{{ heading headingLevel (inlineCode heading) }}}
|
|
5
|
-
|
|
6
|
-
{{#> documentablePartialTemplate}}
|
|
7
|
-
|
|
8
|
-
{{ heading signature.headingLevel signature.heading }}
|
|
9
|
-
{{ code signature.value }}
|
|
10
|
-
|
|
11
|
-
{{#if parameters.value}}
|
|
12
|
-
{{ heading parameters.headingLevel parameters.heading }}
|
|
13
|
-
| Name | Type | Description |
|
|
14
|
-
|------|------|-------------|
|
|
15
|
-
{{#each parameters.value}}
|
|
16
|
-
| {{name}} | {{link type}} | {{description}} |
|
|
17
|
-
{{/each}}
|
|
18
|
-
{{/if}}
|
|
19
|
-
|
|
20
|
-
{{#if throws.value}}
|
|
21
|
-
{{ heading throws.headingLevel throws.heading }}
|
|
22
|
-
{{#each throws.value}}
|
|
23
|
-
{{link this.type}}: {{this.description}}
|
|
24
|
-
|
|
25
|
-
{{/each}}
|
|
26
|
-
{{/if}}
|
|
27
|
-
{{/documentablePartialTemplate}}
|
|
28
|
-
|
|
29
|
-
{{#unless @last}}---{{/unless}}
|
|
30
|
-
|
|
31
|
-
{{/each}}
|
|
32
|
-
`.trim();
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export const documentablePartialTemplate = `
|
|
2
|
-
{{#each doc.annotations}}
|
|
3
|
-
\`{{this}}\`
|
|
4
|
-
{{/each}}
|
|
5
|
-
|
|
6
|
-
{{{renderContent doc.description}}}
|
|
7
|
-
|
|
8
|
-
{{#each doc.customTags}}
|
|
9
|
-
**{{splitAndCapitalize name}}**
|
|
10
|
-
|
|
11
|
-
{{{renderContent description}}}
|
|
12
|
-
|
|
13
|
-
{{/each}}
|
|
14
|
-
|
|
15
|
-
{{> @partial-block}}
|
|
16
|
-
|
|
17
|
-
{{#if doc.mermaid.value}}
|
|
18
|
-
{{ heading doc.mermaid.headingLevel doc.mermaid.heading }}
|
|
19
|
-
{{code doc.mermaid.value}}
|
|
20
|
-
{{/if}}
|
|
21
|
-
|
|
22
|
-
{{#if doc.example.value}}
|
|
23
|
-
{{ heading doc.example.headingLevel doc.example.heading }}
|
|
24
|
-
{{{renderContent doc.example.value}}}
|
|
25
|
-
{{/if}}
|
|
26
|
-
`.trim();
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export const enumMarkdownTemplate = `
|
|
2
|
-
{{ heading headingLevel heading }}
|
|
3
|
-
|
|
4
|
-
{{> typeDocumentation }}
|
|
5
|
-
|
|
6
|
-
{{ heading values.headingLevel values.heading }}
|
|
7
|
-
| Value | Description |
|
|
8
|
-
|-------|-------------|
|
|
9
|
-
{{#each values.value}}
|
|
10
|
-
| {{value}} | {{description}} |
|
|
11
|
-
{{/each}}
|
|
12
|
-
`.trim();
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export const fieldsPartialTemplate = `
|
|
2
|
-
{{ heading headingLevel heading }}
|
|
3
|
-
{{#each value}}
|
|
4
|
-
{{{ heading headingLevel (inlineCode heading) }}}
|
|
5
|
-
|
|
6
|
-
{{#if inherited}}
|
|
7
|
-
*Inherited*
|
|
8
|
-
{{/if}}
|
|
9
|
-
|
|
10
|
-
{{#> documentablePartialTemplate }}
|
|
11
|
-
|
|
12
|
-
{{ heading signature.headingLevel signature.heading }}
|
|
13
|
-
{{ code signature.value }}
|
|
14
|
-
|
|
15
|
-
{{ heading type.headingLevel type.heading }}
|
|
16
|
-
{{link type.value}}
|
|
17
|
-
|
|
18
|
-
{{/documentablePartialTemplate}}
|
|
19
|
-
|
|
20
|
-
{{#unless @last}}---{{/unless}}
|
|
21
|
-
|
|
22
|
-
{{/each}}
|
|
23
|
-
`.trim();
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export const interfaceMarkdownTemplate = `
|
|
2
|
-
{{ heading headingLevel heading }}
|
|
3
|
-
|
|
4
|
-
{{> typeDocumentation }}
|
|
5
|
-
|
|
6
|
-
{{#if extends}}
|
|
7
|
-
**Extends**
|
|
8
|
-
{{#each extends}}
|
|
9
|
-
{{link this}}{{#unless @last}}, {{/unless}}
|
|
10
|
-
{{/each}}
|
|
11
|
-
{{/if}}
|
|
12
|
-
|
|
13
|
-
{{#if methods}}
|
|
14
|
-
{{> methodsPartialTemplate methods}}
|
|
15
|
-
{{/if}}
|
|
16
|
-
`.trim();
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export const methodsPartialTemplate = `
|
|
2
|
-
{{ heading headingLevel heading }}
|
|
3
|
-
{{#each value}}
|
|
4
|
-
{{{ heading headingLevel (inlineCode heading) }}}
|
|
5
|
-
|
|
6
|
-
{{#if inherited}}
|
|
7
|
-
*Inherited*
|
|
8
|
-
{{/if}}
|
|
9
|
-
|
|
10
|
-
{{#> documentablePartialTemplate}}
|
|
11
|
-
|
|
12
|
-
{{ heading signature.headingLevel signature.heading }}
|
|
13
|
-
{{ code signature.value }}
|
|
14
|
-
|
|
15
|
-
{{#if parameters.value}}
|
|
16
|
-
{{ heading parameters.headingLevel parameters.heading }}
|
|
17
|
-
| Name | Type | Description |
|
|
18
|
-
|------|------|-------------|
|
|
19
|
-
{{#each parameters.value}}
|
|
20
|
-
| {{name}} | {{link type}} | {{{renderContent description}}} |
|
|
21
|
-
{{/each}}
|
|
22
|
-
{{/if}}
|
|
23
|
-
|
|
24
|
-
{{ heading returnType.headingLevel returnType.heading }}
|
|
25
|
-
**{{link returnType.value.type}}**
|
|
26
|
-
|
|
27
|
-
{{#if returnType.value.description}}
|
|
28
|
-
{{returnType.value.description}}
|
|
29
|
-
{{/if}}
|
|
30
|
-
|
|
31
|
-
{{#if throws.value}}
|
|
32
|
-
{{ heading throws.headingLevel throws.heading }}
|
|
33
|
-
{{#each throws.value}}
|
|
34
|
-
{{link this.type}}: {{this.description}}
|
|
35
|
-
|
|
36
|
-
{{/each}}
|
|
37
|
-
{{/if}}
|
|
38
|
-
{{/documentablePartialTemplate}}
|
|
39
|
-
|
|
40
|
-
{{#unless @last}}---{{/unless}}
|
|
41
|
-
|
|
42
|
-
{{/each}}
|
|
43
|
-
`.trim();
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import Handlebars from 'handlebars';
|
|
2
|
-
import { CodeBlock, RenderableContent, StringOrLink } from '../adapters/types';
|
|
3
|
-
import { isCodeBlock, isEmptyLine, isInlineCode } from '../adapters/type-utils';
|
|
4
|
-
import { typeDocPartial } from './type-doc-partial';
|
|
5
|
-
import { documentablePartialTemplate } from './documentable-partial-template';
|
|
6
|
-
import { methodsPartialTemplate } from './methods-partial-template';
|
|
7
|
-
import { groupedMembersPartialTemplate } from './grouped-members-partial-template';
|
|
8
|
-
import { constructorsPartialTemplate } from './constructors-partial-template';
|
|
9
|
-
import { fieldsPartialTemplate } from './fieldsPartialTemplate';
|
|
10
|
-
import { classMarkdownTemplate } from './class-template';
|
|
11
|
-
import { enumMarkdownTemplate } from './enum-template';
|
|
12
|
-
import { interfaceMarkdownTemplate } from './interface-template';
|
|
13
|
-
|
|
14
|
-
export type CompilationRequest = {
|
|
15
|
-
template: string;
|
|
16
|
-
source: unknown;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export class Template {
|
|
20
|
-
private static instance: Template;
|
|
21
|
-
|
|
22
|
-
private constructor() {
|
|
23
|
-
Handlebars.registerPartial('typeDocumentation', typeDocPartial);
|
|
24
|
-
Handlebars.registerPartial('documentablePartialTemplate', documentablePartialTemplate);
|
|
25
|
-
Handlebars.registerPartial('methodsPartialTemplate', methodsPartialTemplate);
|
|
26
|
-
Handlebars.registerPartial('constructorsPartialTemplate', constructorsPartialTemplate);
|
|
27
|
-
Handlebars.registerPartial('groupedMembersPartialTemplate', groupedMembersPartialTemplate);
|
|
28
|
-
Handlebars.registerPartial('fieldsPartialTemplate', fieldsPartialTemplate);
|
|
29
|
-
Handlebars.registerPartial('classTemplate', classMarkdownTemplate);
|
|
30
|
-
Handlebars.registerPartial('enumTemplate', enumMarkdownTemplate);
|
|
31
|
-
Handlebars.registerPartial('interfaceTemplate', interfaceMarkdownTemplate);
|
|
32
|
-
|
|
33
|
-
Handlebars.registerHelper('link', link);
|
|
34
|
-
Handlebars.registerHelper('code', convertCodeBlock);
|
|
35
|
-
Handlebars.registerHelper('renderContent', resolveRenderableContent);
|
|
36
|
-
Handlebars.registerHelper('heading', heading);
|
|
37
|
-
Handlebars.registerHelper('inlineCode', inlineCode);
|
|
38
|
-
Handlebars.registerHelper('splitAndCapitalize', splitAndCapitalize);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
public static getInstance(): Template {
|
|
42
|
-
if (!Template.instance) {
|
|
43
|
-
Template.instance = new Template();
|
|
44
|
-
}
|
|
45
|
-
return Template.instance;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
compile(request: CompilationRequest): string {
|
|
49
|
-
const compiled = Handlebars.compile(request.template);
|
|
50
|
-
return (
|
|
51
|
-
compiled(request.source)
|
|
52
|
-
.trim()
|
|
53
|
-
// clean up extra newlines
|
|
54
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const splitAndCapitalize = (text: string) => {
|
|
60
|
-
const words = text.split(/[-_]+/);
|
|
61
|
-
const capitalizedWords = [];
|
|
62
|
-
for (const word of words) {
|
|
63
|
-
capitalizedWords.push(word.charAt(0).toUpperCase() + word.slice(1));
|
|
64
|
-
}
|
|
65
|
-
return capitalizedWords.join(' ');
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const heading = (level: number, text: string) => {
|
|
69
|
-
return `${'#'.repeat(level)} ${text}`;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const inlineCode = (text: string) => {
|
|
73
|
-
return new Handlebars.SafeString(`\`${text}\``);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const convertCodeBlock = (codeBlock: CodeBlock): Handlebars.SafeString => {
|
|
77
|
-
return new Handlebars.SafeString(
|
|
78
|
-
`
|
|
79
|
-
\`\`\`${codeBlock.language}
|
|
80
|
-
${codeBlock.content.join('\n')}
|
|
81
|
-
\`\`\`
|
|
82
|
-
`.trim(),
|
|
83
|
-
);
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const resolveRenderableContent = (description?: RenderableContent[]): string => {
|
|
87
|
-
if (!description) {
|
|
88
|
-
return '';
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function reduceDescription(acc: string, curr: RenderableContent) {
|
|
92
|
-
if (isEmptyLine(curr)) {
|
|
93
|
-
return acc + '\n';
|
|
94
|
-
}
|
|
95
|
-
if (isCodeBlock(curr)) {
|
|
96
|
-
return acc + convertCodeBlock(curr) + '\n';
|
|
97
|
-
}
|
|
98
|
-
if (isInlineCode(curr)) {
|
|
99
|
-
return acc + inlineCode(curr.content).toString() + ' ';
|
|
100
|
-
} else {
|
|
101
|
-
return acc + Handlebars.escapeExpression(link(curr)).trim() + ' ';
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return description.reduce(reduceDescription, '').trim();
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
const link = (source: StringOrLink): string => {
|
|
109
|
-
if (typeof source === 'string') {
|
|
110
|
-
return source;
|
|
111
|
-
} else {
|
|
112
|
-
return `[${source.title}](${source.url})`;
|
|
113
|
-
}
|
|
114
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export const typeDocPartial = `
|
|
2
|
-
{{#> documentablePartialTemplate}}
|
|
3
|
-
|
|
4
|
-
{{#if doc.group}}
|
|
5
|
-
**Group** {{doc.group}}
|
|
6
|
-
{{/if}}
|
|
7
|
-
|
|
8
|
-
{{#if doc.author}}
|
|
9
|
-
**Author** {{doc.author}}
|
|
10
|
-
{{/if}}
|
|
11
|
-
|
|
12
|
-
{{#if doc.date}}
|
|
13
|
-
**Date** {{doc.date}}
|
|
14
|
-
{{/if}}
|
|
15
|
-
|
|
16
|
-
{{#each doc.sees}}
|
|
17
|
-
**See** {{link this}}
|
|
18
|
-
|
|
19
|
-
{{/each}}
|
|
20
|
-
|
|
21
|
-
{{#if namespace}}
|
|
22
|
-
## Namespace
|
|
23
|
-
{{namespace}}
|
|
24
|
-
{{/if}}
|
|
25
|
-
|
|
26
|
-
{{/documentablePartialTemplate}}
|
|
27
|
-
`.trim();
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export interface SettingsConfig {
|
|
2
|
-
sourceDirectory: string;
|
|
3
|
-
outputDir: string;
|
|
4
|
-
openApiFileName: string;
|
|
5
|
-
namespace?: string;
|
|
6
|
-
openApiTitle?: string;
|
|
7
|
-
version: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export class OpenApiSettings {
|
|
11
|
-
private static instance: OpenApiSettings;
|
|
12
|
-
|
|
13
|
-
private constructor(public config: SettingsConfig) {}
|
|
14
|
-
|
|
15
|
-
public static build(config: SettingsConfig) {
|
|
16
|
-
OpenApiSettings.instance = new OpenApiSettings(config);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public static getInstance(): OpenApiSettings {
|
|
20
|
-
if (!OpenApiSettings.instance) {
|
|
21
|
-
throw new Error('Settings has not been initialized');
|
|
22
|
-
}
|
|
23
|
-
return OpenApiSettings.instance;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public getOpenApiTitle(): string | undefined {
|
|
27
|
-
return this.config.openApiTitle;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public getNamespace(): string | undefined {
|
|
31
|
-
return this.config.namespace;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
public openApiFileName(): string {
|
|
35
|
-
return this.config.openApiFileName;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
public getVersion(): string {
|
|
39
|
-
return this.config.version;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { createManifest } from '../manifest-factory';
|
|
2
|
-
import { Type } from '@cparra/apex-reflection';
|
|
3
|
-
import { TypeParser } from '../parser';
|
|
4
|
-
|
|
5
|
-
class TestParser implements TypeParser {
|
|
6
|
-
parse(): Type[] {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
it('creates a manifest from the result of a type parser', () => {
|
|
12
|
-
const manifest = createManifest(new TestParser(), () => {
|
|
13
|
-
return {};
|
|
14
|
-
});
|
|
15
|
-
expect(manifest.types.length).toBe(0);
|
|
16
|
-
});
|