Skip to content

Commit bb97b79

Browse files
docs: apply generics to typescript example (#8801)
* docs: apply generics to typescript example * fix: same line non-json generics Co-authored-by: Simon H <[email protected]> --------- Co-authored-by: Simon H <[email protected]>
1 parent 33a8fad commit bb97b79

File tree

1 file changed

+14
-7
lines changed
  • sites/kit.svelte.dev/src/lib/docs/server

1 file changed

+14
-7
lines changed

sites/kit.svelte.dev/src/lib/docs/server/index.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ function convert_to_ts(js_code, indent = '', offset = '') {
478478

479479
for (const tag of comment.tags ?? []) {
480480
if (ts.isJSDocTypeTag(tag)) {
481-
const name = get_type_name(tag);
481+
const [name, generics] = get_type_info(tag);
482482

483483
if (ts.isFunctionDeclaration(node)) {
484484
const is_export = node.modifiers?.some(
@@ -497,7 +497,8 @@ function convert_to_ts(js_code, indent = '', offset = '') {
497497
}`
498498
);
499499
code.appendLeft(node.body.getStart(), '=> ');
500-
code.appendLeft(node.body.getEnd(), `) satisfies ${name};`);
500+
const type = generics !== undefined ? `${name}${generics}` : name;
501+
code.appendLeft(node.body.getEnd(), `) satisfies ${type};`);
501502

502503
modified = true;
503504
} else if (
@@ -522,7 +523,7 @@ function convert_to_ts(js_code, indent = '', offset = '') {
522523
'Unhandled @type JsDoc->TS conversion; needs more params logic: ' + node.getText()
523524
);
524525
}
525-
const name = get_type_name(tag);
526+
const [name] = get_type_info(tag);
526527
code.appendLeft(node.parameters[0].getEnd(), `: ${name}`);
527528

528529
modified = true;
@@ -565,21 +566,27 @@ function convert_to_ts(js_code, indent = '', offset = '') {
565566
return transformed === js_code ? undefined : transformed.replace(/\n\s*\n\s*\n/g, '\n\n');
566567

567568
/** @param {ts.JSDocTypeTag | ts.JSDocParameterTag} tag */
568-
function get_type_name(tag) {
569+
function get_type_info(tag) {
569570
const type_text = tag.typeExpression.getText();
570571
let name = type_text.slice(1, -1); // remove { }
571572

572-
const import_match = /import\('(.+?)'\)\.(\w+)/.exec(type_text);
573+
const import_match = /import\('(.+?)'\)\.(\w+)(<{?[\n\* \w:;,]+}?>)?/.exec(type_text);
573574
if (import_match) {
574-
const [, from, _name] = import_match;
575+
const [, from, _name, generics] = import_match;
575576
name = _name;
576577
const existing = imports.get(from);
577578
if (existing) {
578579
existing.add(name);
579580
} else {
580581
imports.set(from, new Set([name]));
581582
}
583+
if (generics !== undefined) {
584+
return [name, generics
585+
.replaceAll("*", "") // get rid of JSDoc asterisks
586+
.replace(" }>", "}>") // unindent closing brace
587+
];
588+
}
582589
}
583-
return name;
590+
return [name];
584591
}
585592
}

0 commit comments

Comments
 (0)