Skip to content

Commit

Permalink
fix: deduplicate destructuring import statement
Browse files Browse the repository at this point in the history
  • Loading branch information
chilingling committed Feb 5, 2025
1 parent d685aef commit a1e8832
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 30 deletions.
13 changes: 1 addition & 12 deletions packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,18 +270,7 @@ export const genSFCWithDefaultPlugin = (schema, componentsMap, config = {}, next
}

// 兼容单独调用的场景,单独调用时,这里会默认加上 builtInComponents
const compsMapWithBuiltIn = [...componentsMap]

for (const builtInComp of BUILTIN_COMPONENTS_MAP) {
if (
!compsMapWithBuiltIn.find(
({ componentName, package: packageName }) =>
componentName === builtInComp.componentName && packageName === builtInComp.package
)
) {
compsMapWithBuiltIn.push(builtInComp)
}
}
const compsMapWithBuiltIn = [...componentsMap, ...BUILTIN_COMPONENTS_MAP]

return generateSFCFile(schema, compsMapWithBuiltIn, newConfig, nextPage)
}
Expand Down
11 changes: 1 addition & 10 deletions packages/vue-generator/src/plugins/parseSchemaPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,7 @@ function parseSchema() {
const pagesMap = {}
const resPageTree = []

for (const builtInComp of BUILTIN_COMPONENTS_MAP) {
if (
!schema.componentsMap.find(
({ componentName, package: packageName }) =>
componentName === builtInComp.componentName && packageName === builtInComp.package
)
) {
schema.componentsMap.push(builtInComp)
}
}
schema.componentsMap = [...schema.componentsMap, ...BUILTIN_COMPONENTS_MAP]

for (const componentItem of pageSchema) {
pagesMap[componentItem.meta.id] = componentItem
Expand Down
21 changes: 18 additions & 3 deletions packages/vue-generator/src/utils/generateImportStatement.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,31 @@ export function generateImportStatement(config) {

export function generateImportByPkgName(config) {
const { pkgName, imports } = config

const seen = new Set()
const importStatements = imports
.filter(({ destructuring }) => destructuring)
.map(({ componentName, exportName }) => {
if (componentName === exportName) {
return componentName
if (!seen.has(componentName)) {
seen.add(componentName)

return componentName
}

return ''
}

const alias = `${exportName} as ${componentName}`

if (!seen.has(alias)) {
seen.add(alias)

return alias
}

return `${exportName} as ${componentName}`
return ''
})
.filter((item) => Boolean(item))

// 默认导出如果存在,应该只有一个
let defaultImports = imports.find(({ destructuring }) => !destructuring)
Expand Down
6 changes: 1 addition & 5 deletions packages/vue-generator/test/testcases/generator/mockData.js
Original file line number Diff line number Diff line change
Expand Up @@ -2043,11 +2043,7 @@ export const appSchemaDemo01 = {
isDefault: false,
occupier: {
id: 86,
username: '开发者',
email: '[email protected]',
resetPasswordToken: 'developer',
confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998',
is_admin: true
username: '开发者'
},
isHome: false
}
Expand Down

0 comments on commit a1e8832

Please sign in to comment.