{"version":3,"file":"statistic.cjs","sources":["../../../../../../packages/theme/token/util/statistic.ts"],"sourcesContent":["declare const CSSINJS_STATISTIC: any;\n\nconst enableStatistic\n  = process.env.NODE_ENV !== 'production' || typeof CSSINJS_STATISTIC !== 'undefined';\nlet recording = true;\n\n/**\n * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to\n * pass all value access in development. To support statistic field usage with alias token.\n */\nexport function merge<T extends object>(...objs: Array<Partial<T>>): T {\n  /* istanbul ignore next */\n  if (!enableStatistic)\n    return Object.assign({}, ...objs);\n\n  recording = false;\n\n  const ret = {} as T;\n\n  objs.forEach((obj) => {\n    const keys = Object.keys(obj);\n\n    keys.forEach((key) => {\n      Object.defineProperty(ret, key, {\n        configurable: true,\n        enumerable: true,\n        get: () => (obj as any)[key],\n      });\n    });\n  });\n\n  recording = true;\n  return ret;\n}\n\n/** @private Internal Usage. Not use in your production. */\nexport const statistic: Record<\n  string,\n  { global: string[], component: Record<string, string | number> }\n> = {};\n\n/** @private Internal Usage. Not use in your production. */\n\nexport const _statistic_build_: typeof statistic = {};\n\n/* istanbul ignore next */\nfunction noop() {}\n\n/** Statistic token usage case. Should use `merge` function if you do not want spread record. */\nexport default function statisticToken<T extends object>(token: T) {\n  let tokenKeys: Set<string> | undefined;\n  let proxy = token;\n  let flush: (componentName: string, componentToken: Record<string, string | number>) => void\n    = noop;\n\n  if (enableStatistic) {\n    tokenKeys = new Set<string>();\n\n    proxy = new Proxy(token, {\n      get(obj: any, prop: any) {\n        if (recording)\n          tokenKeys!.add(prop);\n\n        return obj[prop];\n      },\n    });\n\n    flush = (componentName, componentToken) => {\n      statistic[componentName] = { global: Array.from(tokenKeys!), component: componentToken };\n    };\n  }\n\n  return { token: proxy, keys: tokenKeys, flush };\n}\n"],"names":[],"mappings":";;;;AAEA,MAAM,kBACF,OAAQ,CAAA,GAAA,CAAI,QAAa,KAAA,YAAA,IAAgB,OAAO,iBAAsB,KAAA,WAAA,CAAA;AAC1E,IAAI,SAAY,GAAA,IAAA,CAAA;AAMT,SAAS,SAA2B,IAA4B,EAAA;AAErE,EAAA,IAAI,CAAC,eAAA;AACH,IAAA,OAAO,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,GAAG,IAAI,CAAA,CAAA;AAElC,EAAY,SAAA,GAAA,KAAA,CAAA;AAEZ,EAAA,MAAM,MAAM,EAAC,CAAA;AAEb,EAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,IAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAE5B,IAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,MAAO,MAAA,CAAA,cAAA,CAAe,KAAK,GAAK,EAAA;AAAA,QAC9B,YAAc,EAAA,IAAA;AAAA,QACd,UAAY,EAAA,IAAA;AAAA,QACZ,GAAA,EAAK,MAAO,GAAA,CAAY,GAAG,CAAA;AAAA,OAC5B,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AAED,EAAY,SAAA,GAAA,IAAA,CAAA;AACZ,EAAO,OAAA,GAAA,CAAA;AACT,CAAA;AAGO,MAAM,YAGT,GAAC;AAIE,MAAM,oBAAsC,GAAC;AAGpD,SAAS,IAAO,GAAA;AAAC,CAAA;AAGjB,SAAwB,eAAiC,KAAU,EAAA;AACjE,EAAI,IAAA,SAAA,CAAA;AACJ,EAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,EAAA,IAAI,KACA,GAAA,IAAA,CAAA;AAEJ,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAA,SAAA,uBAAgB,GAAY,EAAA,CAAA;AAE5B,IAAQ,KAAA,GAAA,IAAI,MAAM,KAAO,EAAA;AAAA,MACvB,GAAA,CAAI,KAAU,IAAW,EAAA;AACvB,QAAI,IAAA,SAAA;AACF,UAAA,SAAA,CAAW,IAAI,IAAI,CAAA,CAAA;AAErB,QAAA,OAAO,IAAI,IAAI,CAAA,CAAA;AAAA,OACjB;AAAA,KACD,CAAA,CAAA;AAED,IAAQ,KAAA,GAAA,CAAC,eAAe,cAAmB,KAAA;AACzC,MAAU,SAAA,CAAA,aAAa,IAAI,EAAE,MAAA,EAAQ,MAAM,IAAK,CAAA,SAAU,CAAG,EAAA,SAAA,EAAW,cAAe,EAAA,CAAA;AAAA,KACzF,CAAA;AAAA,GACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,KAAO,EAAA,IAAA,EAAM,WAAW,KAAM,EAAA,CAAA;AAChD;;;;;;;"}