Files
SnowLuma/.pnpm-store/v11/files/55/26438c0048c628b05707e1b1dfd2430d96feef6c4a9f4c22dd611b580aa26783658ca067a97bfbd2026c6bb744e89b36360f38171a94e9ca78eb9470027dd1
TanTan 2a69b23b47
Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

85 lines
2.9 KiB
Plaintext

import { AnyConfig, ConfigExtension, NoInfer } from './types'
/**
* @param baseConfig Config where other config will be merged into. This object will be mutated.
* @param configExtension Partial config to merge into the `baseConfig`.
*/
export const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(
baseConfig: AnyConfig,
{
cacheSize,
prefix,
experimentalParseClassName,
extend = {},
override = {},
}: ConfigExtension<ClassGroupIds, ThemeGroupIds>,
) => {
overrideProperty(baseConfig, 'cacheSize', cacheSize)
overrideProperty(baseConfig, 'prefix', prefix)
overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)
overrideConfigProperties(baseConfig.theme, override.theme)
overrideConfigProperties(baseConfig.classGroups, override.classGroups)
overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)
overrideConfigProperties(
baseConfig.conflictingClassGroupModifiers,
override.conflictingClassGroupModifiers,
)
overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)
mergeConfigProperties(baseConfig.theme, extend.theme)
mergeConfigProperties(baseConfig.classGroups, extend.classGroups)
mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)
mergeConfigProperties(
baseConfig.conflictingClassGroupModifiers,
extend.conflictingClassGroupModifiers,
)
mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')
return baseConfig
}
const overrideProperty = <T extends object, K extends keyof T>(
baseObject: T,
overrideKey: K,
overrideValue: T[K] | undefined,
) => {
if (overrideValue !== undefined) {
baseObject[overrideKey] = overrideValue
}
}
const overrideConfigProperties = (
baseObject: Partial<Record<string, readonly unknown[]>>,
overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,
) => {
if (overrideObject) {
for (const key in overrideObject) {
overrideProperty(baseObject, key, overrideObject[key])
}
}
}
const mergeConfigProperties = (
baseObject: Partial<Record<string, readonly unknown[]>>,
mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,
) => {
if (mergeObject) {
for (const key in mergeObject) {
mergeArrayProperties(baseObject, mergeObject, key)
}
}
}
const mergeArrayProperties = <Key extends string>(
baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,
mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,
key: Key,
) => {
const mergeValue = mergeObject[key]
if (mergeValue !== undefined) {
baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue
}
}