Skip to content

Commit 4c7c9ef

Browse files
authored
fix: load configuration correctly (#219)
* fix: load configuration properly * chore: extract dedupe icons to a function
1 parent 8536dc1 commit 4c7c9ef

File tree

1 file changed

+38
-5
lines changed

1 file changed

+38
-5
lines changed

src/utils/layers.ts

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Nuxt } from '@nuxt/schema'
22
import defu from 'defu'
3-
import type { InlineModuleOptions, VuetifyModuleOptions } from '../types'
3+
import type { FontIconSet, IconFontName, InlineModuleOptions, VuetifyModuleOptions } from '../types'
44
import { loadVuetifyConfiguration } from './config'
55

66
/**
@@ -54,19 +54,52 @@ export async function mergeVuetifyModules(options: VuetifyModuleOptions, nuxt: N
5454
})
5555

5656
if (moduleOptions.length > 1) {
57-
const [base, ...rest] = moduleOptions
57+
// reverse to allow override configuration from app: fix #218
58+
const [base, ...rest] = moduleOptions.reverse()
59+
// modules are reversed, so the last one has the highest priority (app)
60+
const configuration = <InlineModuleOptions>defu(base, ...rest)
61+
// dedupe icons sets: fix #217
62+
dedupeIcons(configuration, moduleOptions)
5863
return {
59-
configuration: <InlineModuleOptions>defu(base, ...rest),
64+
configuration,
6065
vuetifyConfigurationFilesToWatch,
6166
}
6267
}
6368
else {
6469
return {
65-
configuration: <InlineModuleOptions>{
70+
configuration: {
6671
moduleOptions: options.moduleOptions,
6772
vuetifyOptions: resolvedOptions.config,
68-
},
73+
} satisfies InlineModuleOptions,
6974
vuetifyConfigurationFilesToWatch,
7075
}
7176
}
7277
}
78+
79+
// dedupe icons sets: fix #217
80+
function dedupeIcons(configuration: InlineModuleOptions, moduleOptions: InlineModuleOptions[]) {
81+
const vuetifyOptions = configuration.vuetifyOptions
82+
if (vuetifyOptions.icons) {
83+
if (vuetifyOptions.icons.sets) {
84+
const sets = new Map<string, FontIconSet>()
85+
// modules are reversed, so the last one has the highest priority (app)
86+
for (const { vuetifyOptions } of moduleOptions) {
87+
if (vuetifyOptions.icons && vuetifyOptions.icons.sets) {
88+
const mSets = vuetifyOptions.icons.sets
89+
if (typeof mSets === 'string') {
90+
sets.set(mSets, { name: mSets as IconFontName })
91+
}
92+
else {
93+
for (const set of mSets) {
94+
if (typeof set === 'string')
95+
sets.set(set, { name: set as IconFontName })
96+
else
97+
sets.set(set.name, set)
98+
}
99+
}
100+
}
101+
}
102+
vuetifyOptions.icons.sets = Array.from(sets.values())
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)