expect(deps && [...deps]).toStrictEqual(Object.keys(files))
})
+ test('relative (default export)', () => {
+ const files = {
+ '/foo.ts': `export default interface P { foo: string }`,
+ '/bar.ts': `type X = { bar: string }; export default X`
+ }
+ const { props, deps } = resolve(
+ `
+ import P from './foo'
+ import X from './bar'
+ defineProps<P & X>()
+ `,
+ files
+ )
+ expect(props).toStrictEqual({
+ foo: ['String'],
+ bar: ['String']
+ })
+ expect(deps && [...deps]).toStrictEqual(Object.keys(files))
+ })
+
+ test('relative (default re-export)', () => {
+ const files = {
+ '/bar.ts': `export { default } from './foo'`,
+ '/foo.ts': `export default interface P { foo: string }; export interface PP { bar: number }`,
+ '/baz.ts': `export { PP as default } from './foo'`
+ }
+ const { props, deps } = resolve(
+ `
+ import P from './bar'
+ import PP from './baz'
+ defineProps<P & PP>()
+ `,
+ files
+ )
+ expect(props).toStrictEqual({
+ foo: ['String'],
+ bar: ['Number']
+ })
+ expect(deps && [...deps]).toStrictEqual(Object.keys(files))
+ })
+
test('relative (dynamic import)', () => {
const files = {
'/foo.ts': `export type P = { foo: string, bar: import('./bar').N }`,
stmt.source.value
)
Object.assign(scope.exportedTypes, sourceScope.exportedTypes)
+ } else if (stmt.type === 'ExportDefaultDeclaration' && stmt.declaration) {
+ if (stmt.declaration.type !== 'Identifier') {
+ recordType(stmt.declaration, types, declares, 'default')
+ recordType(
+ stmt.declaration,
+ exportedTypes,
+ exportedDeclares,
+ 'default'
+ )
+ } else if (types[stmt.declaration.name]) {
+ exportedTypes['default'] = types[stmt.declaration.name]
+ }
}
}
}
function recordType(
node: Node,
types: Record<string, Node>,
- declares: Record<string, Node>
+ declares: Record<string, Node>,
+ overwriteId?: string
) {
switch (node.type) {
case 'TSInterfaceDeclaration':
case 'TSEnumDeclaration':
case 'TSModuleDeclaration': {
- const id = getId(node.id)
+ const id = overwriteId || getId(node.id)
let existing = types[id]
if (existing) {
if (node.type === 'TSModuleDeclaration') {
break
}
case 'ClassDeclaration':
- types[getId(node.id)] = node
+ types[overwriteId || getId(node.id)] = node
break
case 'TSTypeAliasDeclaration':
types[node.id.name] = node.typeAnnotation