Skip to content

Commit

Permalink
feat: create resolver for json files (#237)
Browse files Browse the repository at this point in the history
* feat: create resolver for json files

* chore: clear code
  • Loading branch information
qmhc committed Jul 7, 2023
1 parent 55c96d6 commit 53c58c8
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 13 deletions.
9 changes: 9 additions & 0 deletions examples/ts/src/data.json
@@ -0,0 +1,9 @@
{
"count": 1,
"name": "foo",
"obj": {
"a": false,
"b": ""
},
"arr": [1, 2, 4]
}
4 changes: 4 additions & 0 deletions examples/ts/src/index.ts
@@ -1,3 +1,5 @@
import data from './data.json'

import type { TestBase } from '@/test'

export interface Test extends TestBase {
Expand All @@ -12,4 +14,6 @@ export { manualDts } from './manual-dts'

export { ParametersTest, test, method } from './test'

export { data }

export type { User } from './types'
2 changes: 1 addition & 1 deletion examples/ts/tsconfig.json
Expand Up @@ -23,5 +23,5 @@
},
"lib": ["esnext", "dom"]
},
"include": ["src", "*.d.ts"]
"include": ["src", "*.d.ts", "src/**/*.json"]
}
9 changes: 7 additions & 2 deletions src/plugin.ts
Expand Up @@ -11,7 +11,7 @@ import { createProgram } from 'vue-tsc'
import debug from 'debug'
import { cyan, green, yellow } from 'kolorist'
import { rollupDeclarationFiles } from './rollup'
import { SvelteResolver, VueResolver, parseResolvers } from './resolvers'
import { JsonResolver, SvelteResolver, VueResolver, parseResolvers } from './resolvers'
import {
normalizeGlob,
removePureImport,
Expand Down Expand Up @@ -103,7 +103,12 @@ export function dtsPlugin(options: PluginOptions = {}): import('vite').Plugin {
let bundled = false
let timeRecord = 0

const resolvers = parseResolvers([VueResolver(), SvelteResolver(), ...(options.resolvers || [])])
const resolvers = parseResolvers([
JsonResolver(),
VueResolver(),
SvelteResolver(),
...(options.resolvers || [])
])

const rootFiles = new Set<string>()
const outputFiles = new Map<string, string>()
Expand Down
1 change: 1 addition & 0 deletions src/resolvers/index.ts
@@ -1,5 +1,6 @@
import type { Resolver } from '../types'

export * from './json'
export * from './svelte'
export * from './vue'

Expand Down
24 changes: 24 additions & 0 deletions src/resolvers/json.ts
@@ -0,0 +1,24 @@
import type { Resolver } from '../types'

const jsonRE = /\.json$/

export function JsonResolver(): Resolver {
return {
name: 'json',
supports(id) {
return jsonRE.test(id)
},
transform({ id, program }) {
const sourceFile = program.getSourceFile(id)

if (!sourceFile) return []

return [
{
path: `${id}.d.ts`,
content: `declare const _default: ${sourceFile.text};\n\nexport default _default;\n`
}
]
}
}
}
2 changes: 1 addition & 1 deletion src/resolvers/svelte.ts
Expand Up @@ -12,7 +12,7 @@ export function SvelteResolver(): Resolver {
return [
{
path: `${id}.d.ts`,
content: "export { SvelteComponentTyped as default } from 'svelte';"
content: "export { SvelteComponentTyped as default } from 'svelte';\n"
}
]
}
Expand Down
15 changes: 6 additions & 9 deletions src/resolvers/vue.ts
Expand Up @@ -11,15 +11,12 @@ export function VueResolver(): Resolver {
return vueRE.test(id)
},
transform({ id, root, program, service }) {
let sourceFile = program.getSourceFile(id)

if (!sourceFile && vueRE.test(id)) {
sourceFile =
program.getSourceFile(id + '.ts') ||
program.getSourceFile(id + '.js') ||
program.getSourceFile(id + '.tsx') ||
program.getSourceFile(id + '.jsx')
}
const sourceFile =
program.getSourceFile(id) ||
program.getSourceFile(id + '.ts') ||
program.getSourceFile(id + '.js') ||
program.getSourceFile(id + '.tsx') ||
program.getSourceFile(id + '.jsx')

if (!sourceFile) return []

Expand Down

0 comments on commit 53c58c8

Please sign in to comment.