Skip to content

Commit

Permalink
feat: dynamic query svelte version
Browse files Browse the repository at this point in the history
fix #299
  • Loading branch information
qmhc committed Jul 18, 2024
1 parent c54c22e commit 1769133
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 15 deletions.
6 changes: 6 additions & 0 deletions examples/vue/components/BothScripts.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ defineExpose({ inc })
<script lang="ts">
// do not use defineComponent
export interface BothScriptsProps {
/** comment */
tag: string
count: number
}
export default {
name: 'BothScripts',
customOptions: {}
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,10 @@
"@rollup/pluginutils": "^5.1.0",
"@volar/typescript": "^2.3.4",
"@vue/language-core": "2.0.19",
"compare-versions": "^6.1.1",
"debug": "^4.3.5",
"kolorist": "^1.8.0",
"local-pkg": "^0.5.0",
"magic-string": "^0.30.10",
"vue-tsc": "2.0.19"
},
Expand Down
70 changes: 56 additions & 14 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 21 additions & 1 deletion src/resolvers/svelte.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,40 @@
import { relative } from 'node:path'

import { getPackageInfoSync, resolveModule } from 'local-pkg'
import { compare } from 'compare-versions'

import type { Resolver } from '../types'

const svelteRE = /\.svelte$/

let lowerVersion: boolean

function querySvelteVersion() {
if (typeof lowerVersion === 'boolean') return

try {
const version =
getPackageInfoSync('svelte')?.version ??
getPackageInfoSync('svelte', { paths: [resolveModule('svelte') || process.cwd()] })?.version
lowerVersion = version ? compare(version, '4.0.0', '<') : false
} catch {
lowerVersion = false
}
}

export function SvelteResolver(): Resolver {
return {
name: 'svelte',
supports(id) {
return svelteRE.test(id)
},
transform({ id, root }) {
querySvelteVersion()

return [
{
path: relative(root, `${id}.d.ts`),
content: "export { SvelteComponentTyped as default } from 'svelte';\n"
content: `export { ${lowerVersion ? 'SvelteComponentTyped' : 'SvelteComponent'} as default } from 'svelte';\n`
}
]
}
Expand Down

0 comments on commit 1769133

Please sign in to comment.