UNPKG

zss-engine

Version:

A CSS-in-JS transpiler engine for building zero-runtime stylesheets at build time.

53 lines (52 loc) 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.splitAtomicAndNested = splitAtomicAndNested; exports.processAtomicProps = processAtomicProps; const helper_js_1 = require("./helper.js"); const transpile_atomic_js_1 = require("./transpile-atomic.js"); const hash_js_1 = require("./hash.js"); function splitAtomicAndNested(obj, flat, nonFlat) { const queryFlat = flat; const queryNonFlat = nonFlat; Object.entries(obj).forEach(([property, value]) => { if (property.startsWith(':') || property.startsWith('[')) { queryNonFlat[property] = value; } else if ((0, helper_js_1.isAtRule)(property)) { const innerFlat = {}; const innerNonFlat = {}; splitAtomicAndNested(value, innerFlat, innerNonFlat); if (Object.keys(innerFlat).length) queryFlat[property] = innerFlat; if (Object.keys(innerNonFlat).length) queryNonFlat[property] = innerNonFlat; } else { queryFlat[property] = value; } }); } function processAtomicProps(flatProps, atomicMap, parentAtRule) { const resultQueue = []; for (const [key, style] of Object.entries(flatProps)) { if ((0, helper_js_1.isAtRule)(key)) { processAtomicProps(style, atomicMap, key); continue; } resultQueue.push([key, style]); } for (const [property, value] of resultQueue) { const CSSProp = (0, helper_js_1.camelToKebabCase)(property); const normalizedValue = (0, helper_js_1.applyCssValue)(value, CSSProp); const singlePropObj = { [property]: normalizedValue }; const styleObj = parentAtRule ? { [parentAtRule]: singlePropObj } : singlePropObj; const atomicHash = (0, hash_js_1.genBase36Hash)(styleObj, 1, 8); if (atomicMap.has(atomicHash)) continue; let styleSheet = (0, transpile_atomic_js_1.transpileAtomic)(property, value, atomicHash); if (parentAtRule) { styleSheet = `${parentAtRule} { ${styleSheet} }`; } atomicMap.set(atomicHash, styleSheet + '\n'); } }