diff --git a/packages/svelte2tsx/src/svelte2tsx/nodes/handleImportDeclaration.ts b/packages/svelte2tsx/src/svelte2tsx/nodes/handleImportDeclaration.ts
index e82f0a2f9..91767a3c9 100644
--- a/packages/svelte2tsx/src/svelte2tsx/nodes/handleImportDeclaration.ts
+++ b/packages/svelte2tsx/src/svelte2tsx/nodes/handleImportDeclaration.ts
@@ -68,3 +68,32 @@ function isNewGroup(
return false;
}
+
+/**
+ * ensure it's in a newline.
+ * if file has module script ensure an empty line to separate imports
+ */
+export function handleFirstInstanceImport(
+ tsAst: ts.SourceFile,
+ astOffset: number,
+ hasModuleScript: boolean,
+ str: MagicString
+) {
+ const firstImport = tsAst.statements
+ .filter(ts.isImportDeclaration)
+ .sort((a, b) => a.end - b.end)[0];
+ if (!firstImport) {
+ return;
+ }
+
+ const firstComment = Array.from(
+ ts.getLeadingCommentRanges(firstImport.getFullText(), 0) ?? []
+ ).sort((a, b) => a.pos - b.pos)[0];
+
+ const start =
+ firstComment && firstComment.kind === ts.SyntaxKind.MultiLineCommentTrivia
+ ? firstComment.pos + firstImport.getFullStart()
+ : firstImport.getStart();
+
+ str.appendRight(start + astOffset, '\n' + (hasModuleScript ? '\n' : ''));
+}
diff --git a/packages/svelte2tsx/src/svelte2tsx/processInstanceScriptContent.ts b/packages/svelte2tsx/src/svelte2tsx/processInstanceScriptContent.ts
index e5861fdaa..f3d677213 100644
--- a/packages/svelte2tsx/src/svelte2tsx/processInstanceScriptContent.ts
+++ b/packages/svelte2tsx/src/svelte2tsx/processInstanceScriptContent.ts
@@ -11,7 +11,10 @@ import { ImplicitStoreValues } from './nodes/ImplicitStoreValues';
import { Generics } from './nodes/Generics';
import { is$$SlotsDeclaration } from './nodes/slot';
import { preprendStr } from '../utils/magic-string';
-import { handleImportDeclaration } from './nodes/handleImportDeclaration';
+import {
+ handleFirstInstanceImport,
+ handleImportDeclaration
+} from './nodes/handleImportDeclaration';
export interface InstanceScriptProcessResult {
exportedNames: ExportedNames;
@@ -259,14 +262,7 @@ export function processInstanceScriptContent(
implicitTopLevelNames.modifyCode(rootScope.declared);
implicitStoreValues.modifyCode(astOffset, str);
- const firstImport = tsAst.statements
- .filter(ts.isImportDeclaration)
- .sort((a, b) => a.end - b.end)[0];
- if (firstImport) {
- // ensure it's in a newline.
- // if file has module script ensure an empty line to separate imports
- str.appendRight(firstImport.getStart() + astOffset, '\n' + (hasModuleScript ? '\n' : ''));
- }
+ handleFirstInstanceImport(tsAst, astOffset, hasModuleScript, str);
if (mode === 'dts') {
// Transform interface declarations to type declarations because indirectly
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/expected.tsx
new file mode 100644
index 000000000..af30243a1
--- /dev/null
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/expected.tsx
@@ -0,0 +1,17 @@
+///
+<>>;// non-leading comment
+/**@typedef {{ a: string }} Foo */
+
+import ''
+function render() {
+
+
+
+
+
+;
+() => (<>>);
+return { props: {}, slots: {}, getters: {}, events: {} }}
+
+export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
+}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/expectedv2.ts
new file mode 100644
index 000000000..dc7df4291
--- /dev/null
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/expectedv2.ts
@@ -0,0 +1,17 @@
+///
+;// non-leading comment
+/**@typedef {{ a: string }} Foo */
+
+import ''
+function render() {
+
+
+
+
+
+;
+async () => {};
+return { props: {}, slots: {}, getters: {}, events: {} }}
+
+export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) {
+}
\ No newline at end of file
diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/input.svelte b/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/input.svelte
new file mode 100644
index 000000000..85157c0e9
--- /dev/null
+++ b/packages/svelte2tsx/test/svelte2tsx/samples/jsdoc-before-first-import/input.svelte
@@ -0,0 +1,6 @@
+
\ No newline at end of file