svelte icon indicating copy to clipboard operation
svelte copied to clipboard

Missing type in Svelte compiler AST

Open Ice-mourne opened this issue 1 year ago • 4 comments
trafficstars

Describe the bug

The script part of AST specifically imports are missing importKind type

Reproduction

import { parse } from 'svelte/compiler';

const ast = parse(`
<script lang="ts">
  import type { Snippet } from 'svelte'
  import { mount } from 'svelte'
</script>
`, { modern: true })

// narrow down type to import declarations
if (ast.instance?.content.body[0].type === 'ImportDeclaration') {
  // this gives error // Property 'importKind' does not exist on type 'ImportDeclaration'.
  ast.instance?.content.body[0].importKind
  
  // But if we log it we can see it dose have them
  console.log(ast.instance?.content.body[0].importKind) // type
  console.log(ast.instance?.content.body[1].importKind) // value
}

Logs

No response

System Info

Not important

Severity

annoyance

Ice-mourne avatar Nov 10 '24 10:11 Ice-mourne

This part is somewhat private API/ part of the acorn TS plugin, which may change . I'm not sure there are typings for it, and I'm not sure if we want to expose them

dummdidumm avatar Nov 10 '24 13:11 dummdidumm

It's not something I'm importing from somewhere I shouldn't it's part or parse function and it even has documentation https://svelte.dev/docs/svelte/svelte-compiler#parse

I feel like something like that should have proper types I have seen svelte already adding extra types but was not able to figure out how I can do that too

Ice-mourne avatar Nov 10 '24 14:11 Ice-mourne

As a temporary workaround, you could use types from @typescript-eslint/typescript-estree.

Credits goes to @manuel3108 via his work on the https://github.com/Rich-Harris/esrap/pull/13

xeho91 avatar Nov 11 '24 08:11 xeho91

As a temporary workaround, you could use types from @typescript-eslint/typescript-estree.

Although, this shouldn't go without saying that these types are not fully compatible. Those are just the closest types we have available right now.

manuel3108 avatar Nov 11 '24 09:11 manuel3108