{"version":3,"sources":["../src/processors/css.ts"],"names":[],"mappings":"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","file":"css.mjs","sourcesContent":["import type { Expression } from '@babel/types';\nimport { validateParams } from '@wyw-in-js/processor-utils';\nimport type {\n  CallParam,\n  TemplateParam,\n  Params,\n  TailProcessorParams,\n  ValueCache,\n} from '@wyw-in-js/processor-utils';\nimport type { Replacements, Rules } from '@wyw-in-js/shared';\nimport { ValueType } from '@wyw-in-js/shared';\nimport type { CSSInterpolation } from '@emotion/serialize';\nimport deepMerge from 'lodash/merge';\nimport BaseProcessor from './base-processor';\nimport type { IOptions } from './styled';\nimport { cache, css } from '../utils/emotion';\nimport type { Primitive, TemplateCallback } from './keyframes';\n\n/**\n * @description Scope css class generation similar to css from emotion.\n *\n * @example\n * ```ts\n * import { css } from '@pigment-css/react';\n *\n * const class1 = css(({theme}) => ({\n *  color: (theme.vars || theme).palette.primary.main,\n * }))\n * ```\n *\n * <html className={class1} />\n */\nexport class CssProcessor extends BaseProcessor {\n  callParam: CallParam | TemplateParam;\n\n  constructor(params: Params, ...args: TailProcessorParams) {\n    if (params.length < 2) {\n      throw BaseProcessor.SKIP;\n    }\n    super([params[0]], ...args);\n    validateParams(\n      params,\n      ['callee', ['call', 'template']],\n      `Invalid use of ${this.tagSource.imported} tag.`,\n    );\n\n    const [, callParams] = params;\n    if (callParams[0] === 'call') {\n      const [, ...callArgs] = callParams;\n      this.dependencies.push(...callArgs);\n    } else if (callParams[0] === 'template') {\n      callParams[1].forEach((element) => {\n        if ('kind' in element && element.kind !== ValueType.CONST) {\n          this.dependencies.push(element);\n        }\n      });\n    }\n    this.callParam = callParams;\n  }\n\n  build(values: ValueCache) {\n    if (this.artifacts.length > 0) {\n      throw new Error(`MUI: \"${this.tagSource.imported}\" is already built`);\n    }\n\n    const [callType] = this.callParam;\n\n    if (callType === 'template') {\n      this.handleTemplate(this.callParam, values);\n    } else {\n      this.handleCall(this.callParam, values);\n    }\n  }\n\n  private handleTemplate([, callArgs]: TemplateParam, values: ValueCache) {\n    const templateStrs: string[] = [];\n    // @ts-ignore @TODO - Fix this. No idea how to initialize a Tagged String array.\n    templateStrs.raw = [];\n    const templateExpressions: Primitive[] = [];\n    const { themeArgs } = this.options as IOptions;\n\n    callArgs.forEach((item) => {\n      if ('kind' in item) {\n        switch (item.kind) {\n          case ValueType.FUNCTION: {\n            const value = values.get(item.ex.name) as TemplateCallback;\n            templateExpressions.push(value(themeArgs));\n            break;\n          }\n          case ValueType.CONST:\n            templateExpressions.push(item.value);\n            break;\n          case ValueType.LAZY: {\n            const evaluatedValue = values.get(item.ex.name);\n            if (typeof evaluatedValue === 'function') {\n              templateExpressions.push(evaluatedValue(themeArgs));\n            } else {\n              templateExpressions.push(evaluatedValue as Primitive);\n            }\n            break;\n          }\n          default:\n            break;\n        }\n      } else if (item.type === 'TemplateElement') {\n        templateStrs.push(item.value.cooked as string);\n        // @ts-ignore\n        templateStrs.raw.push(item.value.raw);\n      }\n    });\n    this.generateArtifacts(templateStrs, ...templateExpressions);\n  }\n\n  generateArtifacts(styleObjOrTaggged: CSSInterpolation | string[], ...args: Primitive[]) {\n    const cssClassName = css(styleObjOrTaggged, ...args);\n    const cssText = cache.registered[cssClassName] as string;\n\n    const rules: Rules = {\n      [this.asSelector]: {\n        className: this.className,\n        cssText,\n        displayName: this.displayName,\n        start: this.location?.start ?? null,\n      },\n    };\n    const sourceMapReplacements: Replacements = [\n      {\n        length: cssText.length,\n        original: {\n          start: {\n            column: this.location?.start.column ?? 0,\n            line: this.location?.start.line ?? 0,\n          },\n          end: {\n            column: this.location?.end.column ?? 0,\n            line: this.location?.end.line ?? 0,\n          },\n        },\n      },\n    ];\n    this.artifacts.push(['css', [rules, sourceMapReplacements]]);\n  }\n\n  private handleCall([, ...callArgs]: CallParam, values: ValueCache) {\n    const mergedStyleObj: CSSInterpolation = {};\n\n    callArgs.forEach((callArg) => {\n      let styleObj: CSSInterpolation;\n      if (callArg.kind === ValueType.LAZY) {\n        styleObj = values.get(callArg.ex.name) as CSSInterpolation;\n      } else if (callArg.kind === ValueType.FUNCTION) {\n        const { themeArgs } = this.options as IOptions;\n        const value = values.get(callArg.ex.name) as (\n          args: Record<string, unknown> | undefined,\n        ) => CSSInterpolation;\n        styleObj = value(themeArgs);\n      }\n\n      if (styleObj) {\n        deepMerge(mergedStyleObj, styleObj);\n      }\n    });\n    if (Object.keys(mergedStyleObj).length > 0) {\n      this.generateArtifacts(mergedStyleObj);\n    }\n  }\n\n  doEvaltimeReplacement() {\n    this.replacer(this.value, false);\n  }\n\n  doRuntimeReplacement() {\n    this.doEvaltimeReplacement();\n  }\n\n  get asSelector() {\n    return `.${this.className}`;\n  }\n\n  get value(): Expression {\n    return this.astService.stringLiteral(this.className);\n  }\n}\n"]}