diff --git a/packages/kit/src/core/sync/write_types.js b/packages/kit/src/core/sync/write_types.js index 9731b82bd7a4..fe0f2dabf8d4 100644 --- a/packages/kit/src/core/sync/write_types.js +++ b/packages/kit/src/core/sync/write_types.js @@ -1,5 +1,21 @@ import { write_if_changed } from './utils.js'; +/** @param {string} imports */ +const header = (imports) => ` +// this file is auto-generated +import type { ${imports} } from '@sveltejs/kit';`; + +/** @param {string} arg */ +const endpoint = (arg) => ` +export type RequestHandler = GenericRequestHandler<${arg}, Output>;`; + +/** @param {string} arg */ +const page = (arg) => ` +export type Load< + InputProps extends Record = Record, + OutputProps extends Record = InputProps +> = GenericLoad<${arg}, InputProps, OutputProps>;`; + /** * @param {import('types').ValidatedConfig} config * @param {import('types').ManifestData} manifest_data @@ -53,29 +69,24 @@ export function write_types(config, manifest_data) { const arg = params.length > 0 ? `{ ${params.map((param) => `${param}: string`).join('; ')} }` : '{}'; - const imports = [ - type !== 'page' && 'RequestHandler as GenericRequestHandler', - type !== 'endpoint' && 'Load as GenericLoad' - ] - .filter(Boolean) - .join(', '); - - const file = `${config.kit.outDir}/types/${key || 'index'}.d.ts`; - const content = [ - '// this file is auto-generated', - `import type { ${imports} } from '@sveltejs/kit';`, - type !== 'endpoint' && "import type { ResponseBody } from '@sveltejs/kit';", - type !== 'page' && - `export type RequestHandler = GenericRequestHandler<${arg}, Output>;`, - type !== 'endpoint' && - `export type Load< - InputProps extends Record = Record, - OutputProps extends Record = InputProps -> = GenericLoad<${arg}, InputProps, OutputProps>;` - ] - .filter(Boolean) - .join('\n'); + const imports = []; + const content = []; + + if (type !== 'page') { + imports.push('RequestHandler as GenericRequestHandler, ResponseBody'); + content.push(endpoint(arg)); + } + + if (type !== 'endpoint') { + imports.push('Load as GenericLoad'); + content.push(page(arg)); + } + + content.unshift(header(imports.join(', '))); - write_if_changed(file, content); + write_if_changed( + `${config.kit.outDir}/types/${key || 'index'}.d.ts`, + content.join('\n').trim() + ); }); }