aliaset
Version:
twind monorepo
43 lines (37 loc) • 1.13 kB
text/typescript
import type { Class, Nested } from './types'
import { format } from './internal/format'
import { parse } from './parse'
import { interpolate } from './internal/interpolate'
/**
* @group Class Name Generators
*/
export const apply = /* #__PURE__ */ alias('@')
/**
* @group Class Name Generators
*/
export const shortcut = /* #__PURE__ */ alias('~')
function alias(marker: string): Nested {
return new Proxy(
function alias(strings: TemplateStringsArray | Class, ...interpolations: Class[]): string {
return alias$('', strings, interpolations)
} as Nested,
{
get(target, name) {
if (name in target) return target[name as string]
return function namedAlias(
strings: TemplateStringsArray | Class,
...interpolations: Class[]
): string {
return alias$(name as string, strings, interpolations)
}
},
},
)
function alias$(
name: string,
strings: TemplateStringsArray | Class,
interpolations: Class[],
): string {
return format(parse(name + marker + '(' + interpolate(strings, interpolations) + ')'))
}
}