diff options
| author | ST-DDT <[email protected]> | 2024-10-21 14:48:28 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-10-21 12:48:28 +0000 |
| commit | f917f4fd348d2cce7883dc2b0d46c4dda72ec442 (patch) | |
| tree | 657fc5e73ddbec4b259b9a54a815aa29d7fde44a /scripts | |
| parent | 18e59aa8805b3413b6f8058b1a00ff5bcbfbc935 (diff) | |
| download | faker-f917f4fd348d2cce7883dc2b0d46c4dda72ec442.tar.xz faker-f917f4fd348d2cce7883dc2b0d46c4dda72ec442.zip | |
docs: add jsdocs to the pre-built instances (#3193)
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/generate-locales.ts | 72 |
1 files changed, 63 insertions, 9 deletions
diff --git a/scripts/generate-locales.ts b/scripts/generate-locales.ts index e18bdb71..13fe70fd 100644 --- a/scripts/generate-locales.ts +++ b/scripts/generate-locales.ts @@ -112,6 +112,21 @@ function escapeField(parent: string, module: string): string { return module; } +async function loadMetadata(locale: string): Promise<MetadataDefinition> { + const imported = await import( + `file:${resolve(pathLocales, locale, 'metadata.ts')}` + ); + return imported.default as MetadataDefinition; +} + +async function tryLoadMetadata(locale: string): Promise<MetadataDefinition> { + try { + return await loadMetadata(locale); + } catch { + return {}; + } +} + async function generateLocaleFile(locale: string): Promise<void> { const parts = locale.split('_'); const locales = [locale]; @@ -135,14 +150,33 @@ async function generateLocaleFile(locale: string): Promise<void> { locales.push('base'); } - let content = ` + const metadata = await tryLoadMetadata(locale); + + const imports = `import { Faker } from '../faker'; +${locales.map((imp) => `import ${imp} from '../locales/${imp}';`).join('\n')}`; + + const jsdoc = + locale === 'base' + ? `The faker instance for the \`base\` locale. + +The base locale contains data that is shared across all locales such as ISO codes, time zones, and more.` + : `The faker instance for the \`${locale}\` locale. + +- Language: ${metadata.title} +- Endonym: ${metadata.endonym} + +This instance uses the following locales internally (in descending precedence): + +${locales.map((locale) => `- \`${locale}\``).join('\n')}`; + + const content = ` ${autoGeneratedCommentHeader} - import { Faker } from '../faker'; - ${locales - .map((imp) => `import ${imp} from '../locales/${imp}';`) - .join('\n')} + ${imports} + /** + * ${jsdoc.replaceAll('\n', '\n * ')} + */ export const faker = new Faker({ locale: ${ locales.length === 1 ? locales[0] : `[${locales.join(', ')}]` @@ -150,8 +184,10 @@ async function generateLocaleFile(locale: string): Promise<void> { }); `; - content = await formatTypescript(content); - return writeFile(resolve(pathLocale, `${locale}.ts`), content); + return writeFile( + resolve(pathLocale, `${locale}.ts`), + await formatTypescript(content) + ); } async function generateLocalesIndexFile( @@ -166,6 +202,24 @@ async function generateLocalesIndexFile( modules = removeTsSuffix(modules); modules.sort(); + const metadata = depth === 1 ? await tryLoadMetadata(name) : {}; + + const jsdoc = + depth === 1 + ? name === 'base' + ? `/** + * The locale data for the \`base\` locale. + * + * The base locale contains data that is shared across all locales such as ISO codes, time zones, and more. + */` + : `/** + * The locale data for the \`${name}\` locale. + * + * - Language: ${metadata.title} + * - Endonym: ${metadata.endonym} + */` + : ''; + const content = [autoGeneratedCommentHeader]; let fieldType = ''; if (type !== 'any') { @@ -182,6 +236,7 @@ async function generateLocalesIndexFile( (module) => `import ${escapeImport(name, module)} from './${module}';` ), '', + jsdoc, `const ${name}${fieldType} = { ${modules.map((module) => `${escapeField(name, module)},`).join('\n')} };`, @@ -385,8 +440,7 @@ for (const locale of locales) { const pathMetadata = resolve(pathModules, 'metadata.ts'); let localeTitle = 'No title found'; try { - const metadataImport = await import(`file:${pathMetadata}`); - const metadata: MetadataDefinition = metadataImport.default; + const metadata: MetadataDefinition = await loadMetadata(locale); const { title } = metadata; if (!title) { throw new Error(`No title property found on ${JSON.stringify(metadata)}`); |
