|
1 | | -import type { ContentOptions, FilterPattern, Preset, PresetFactory, PresetFactoryAwaitable, PresetOrFactoryAwaitable, ResolvedConfig, Rule, Shortcut, ToArray, UserConfig, UserConfigDefaults, UserShortcuts } from './types' |
| 1 | +import type { ContentOptions, DynamicRule, FilterPattern, Preset, PresetFactory, PresetFactoryAwaitable, PresetOrFactoryAwaitable, ResolvedConfig, Rule, Shortcut, ToArray, UserConfig, UserConfigDefaults, UserShortcuts } from './types' |
2 | 2 | import { DEFAULT_LAYERS } from './constants' |
3 | 3 | import { extractorSplit } from './extractors' |
4 | 4 | import { clone, isStaticRule, mergeDeep, normalizeVariant, toArray, uniq, uniqueBy } from './utils' |
@@ -155,22 +155,25 @@ export async function resolveConfig<Theme extends object = object>( |
155 | 155 | extractors.sort((a, b) => (a.order || 0) - (b.order || 0)) |
156 | 156 |
|
157 | 157 | const rules = getMerged('rules') |
| 158 | + const rulesSize = rules.length |
158 | 159 | const rulesStaticMap: ResolvedConfig<Theme>['rulesStaticMap'] = {} |
| 160 | + const rulesDynamic: ResolvedConfig<Theme>['rulesDynamic'] = [] |
159 | 161 |
|
160 | | - const rulesSize = rules.length |
| 162 | + for (const [index, rule] of rules.entries()) { |
| 163 | + const meta = rule[2] ?? (rule[2] = {}) |
| 164 | + meta.__index = index |
161 | 165 |
|
162 | | - const rulesDynamic = rules |
163 | | - .filter((rule) => { |
164 | | - if (!isStaticRule(rule)) |
165 | | - return true |
| 166 | + if (isStaticRule(rule)) { |
166 | 167 | // Put static rules into the map for faster lookup |
167 | | - const prefixes = toArray(rule[2]?.prefix || '') |
| 168 | + const prefixes = toArray(meta.prefix ?? '') |
168 | 169 | prefixes.forEach((prefix) => { |
169 | 170 | rulesStaticMap[prefix + rule[0]] = rule |
170 | 171 | }) |
171 | | - return false |
172 | | - }) |
173 | | - .reverse() as ResolvedConfig<Theme>['rulesDynamic'] |
| 172 | + } |
| 173 | + else { |
| 174 | + (rulesDynamic as DynamicRule<Theme>[]).unshift(rule) |
| 175 | + } |
| 176 | + } |
174 | 177 |
|
175 | 178 | const autocomplete = { |
176 | 179 | templates: uniq(sources.flatMap(p => toArray(p.autocomplete?.templates))), |
|
0 commit comments