aboutsummaryrefslogtreecommitdiff
path: root/scripts/apidoc/module-methods.ts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/apidoc/module-methods.ts')
-rw-r--r--scripts/apidoc/module-methods.ts121
1 files changed, 121 insertions, 0 deletions
diff --git a/scripts/apidoc/module-methods.ts b/scripts/apidoc/module-methods.ts
new file mode 100644
index 00000000..772a7236
--- /dev/null
+++ b/scripts/apidoc/module-methods.ts
@@ -0,0 +1,121 @@
+import type {
+ DeclarationReflection,
+ ProjectReflection,
+ SignatureReflection,
+} from 'typedoc';
+import type { Method } from '../../docs/.vitepress/components/api-docs/method';
+import { codeToHtml } from './markdown';
+import { analyzeSignature } from './signature';
+import {
+ extractDeprecated,
+ extractDescription,
+ extractJoinedRawExamples,
+ extractModuleFieldName,
+ extractModuleName,
+ selectApiMethodSignatures,
+ selectApiModules,
+} from './typedoc';
+import type { ModuleSummary } from './utils';
+import { adjustUrls } from './utils';
+import { writeApiDocsModule } from './writer';
+
+/**
+ * Analyzes and writes the documentation for modules and their methods such as `faker.animal.cat()`.
+ *
+ * @param project The project used to extract the modules.
+ *
+ * @returns The generated pages.
+ */
+export async function processModules(
+ project: ProjectReflection
+): Promise<ModuleSummary[]> {
+ return Promise.all(selectApiModules(project).map(processModule));
+}
+
+/**
+ * Analyzes and writes the documentation for a module and its methods such as `faker.animal.cat()`.
+ *
+ * @param module The module to process.
+ *
+ * @returns The generated pages.
+ */
+async function processModule(
+ module: DeclarationReflection
+): Promise<ModuleSummary> {
+ const moduleName = extractModuleName(module);
+ console.log(`Processing Module ${moduleName}`);
+ const moduleFieldName = extractModuleFieldName(module);
+ const { comment, deprecated, examples } = analyzeModule(module);
+ const methods = await processModuleMethods(
+ module,
+ `faker.${moduleFieldName}.`
+ );
+
+ return writeApiDocsModule(
+ moduleName,
+ moduleFieldName,
+ comment,
+ examples,
+ deprecated,
+ methods
+ );
+}
+
+/**
+ * Analyzes the documentation for a class.
+ *
+ * @param module The class to process.
+ *
+ * @returns The class information.
+ */
+export function analyzeModule(module: DeclarationReflection): {
+ comment: string;
+ deprecated: string | undefined;
+ examples: string | undefined;
+} {
+ const examplesRaw = extractJoinedRawExamples(module);
+ const examples = examplesRaw ? codeToHtml(examplesRaw) : undefined;
+
+ return {
+ comment: adjustUrls(extractDescription(module)),
+ deprecated: extractDeprecated(module),
+ examples,
+ };
+}
+
+/**
+ * Processes all api methods of the given class. This does not include the constructor.
+ *
+ * @param module The module to process.
+ * @param accessor The code used to access the methods within the module.
+ *
+ * @returns A list containing the documentation for the api methods in the given module.
+ */
+export async function processModuleMethods(
+ module: DeclarationReflection,
+ accessor: string
+): Promise<Method[]> {
+ return processMethods(selectApiMethodSignatures(module), accessor);
+}
+
+/**
+ * Processes all api methods.
+ *
+ * @param signatures The signatures to process.
+ * @param accessor The code used to access the methods.
+ *
+ * @returns A list containing the documentation for the api methods.
+ */
+export async function processMethods(
+ signatures: Record<string, SignatureReflection>,
+ accessor: string = ''
+): Promise<Method[]> {
+ const methods: Method[] = [];
+
+ for (const [methodName, signature] of Object.entries(signatures)) {
+ console.debug(`- ${methodName}`);
+ methods.push(await analyzeSignature(signature, accessor, methodName));
+ }
+
+ return methods;
+}