import { ResolvedStyleSheet, StyleSheet, StylerSheetResolveContext, StylerFunction, StylerResultType, StyleSheetScalarValue, } from './types'; export type RawStylerFunction = ( propName: string, value: StyleSheetScalarValue, ctx: StylerSheetResolveContext, ) => TResult; export function createStyler( type: StylerResultType, styler: RawStylerFunction, ): StylerFunction { return (...args) => ({ type, styles: styler(...args) as any, }); } export function inPlaceStyler(styler: RawStylerFunction) { return createStyler(StylerResultType.inPlace, styler); } export function inPlaceFinalStyler( styler: RawStylerFunction, ) { return createStyler(StylerResultType.inPlaceFinal, styler); } export function preStyler(styler: RawStylerFunction) { return createStyler(StylerResultType.pre, styler); } export function preFinalStyler(styler: RawStylerFunction) { return createStyler(StylerResultType.preFinal, styler); } export function postStyler(styler: RawStylerFunction) { return createStyler(StylerResultType.post, styler); } export function postFinalStyler(styler: RawStylerFunction) { return createStyler(StylerResultType.postFinal, styler); }