'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var CompilerDOM = require('@vue/compiler-dom'); var sourceMap = require('source-map'); var hash = require('hash-sum'); var path = require('path'); var compilerCore = require('@vue/compiler-core'); var url = require('url'); var shared = require('@vue/shared'); var CompilerSSR = require('@vue/compiler-ssr'); var postcss = require('postcss'); var selectorParser = require('postcss-selector-parser'); var merge = require('merge-source-map'); var MagicString = require('magic-string'); var parser = require('@babel/parser'); var estreeWalker = require('estree-walker'); var refTransform = require('@vue/ref-transform'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e['default'] : e; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { n[k] = e[k]; }); } n['default'] = e; return Object.freeze(n); } var CompilerDOM__namespace = /*#__PURE__*/_interopNamespace(CompilerDOM); var hash__default = /*#__PURE__*/_interopDefaultLegacy(hash); var path__default = /*#__PURE__*/_interopDefaultLegacy(path); var CompilerSSR__namespace = /*#__PURE__*/_interopNamespace(CompilerSSR); var postcss__default = /*#__PURE__*/_interopDefaultLegacy(postcss); var selectorParser__default = /*#__PURE__*/_interopDefaultLegacy(selectorParser); var merge__default = /*#__PURE__*/_interopDefaultLegacy(merge); var MagicString__default = /*#__PURE__*/_interopDefaultLegacy(MagicString); const CSS_VARS_HELPER = `useCssVars`; const cssVarRE = /\bv-bind\(\s*(?:'([^']+)'|"([^"]+)"|([^'"][^)]*))\s*\)/g; function genCssVarsFromList(vars, id, isProd) { return `{\n ${vars .map(key => `"${genVarName(id, key, isProd)}": (${key})`) .join(',\n ')}\n}`; } function genVarName(id, raw, isProd) { if (isProd) { return hash__default(id + raw); } else { return `${id}-${raw.replace(/([^\w-])/g, '_')}`; } } function parseCssVars(sfc) { const vars = []; sfc.styles.forEach(style => { let match; // ignore v-bind() in comments /* ... */ const content = style.content.replace(/\/\*([\s\S]*?)\*\//g, ''); while ((match = cssVarRE.exec(content))) { const variable = match[1] || match[2] || match[3]; if (!vars.includes(variable)) { vars.push(variable); } } }); return vars; } const cssVarsPlugin = opts => { const { id, isProd } = opts; return { postcssPlugin: 'vue-sfc-vars', Declaration(decl) { // rewrite CSS variables if (cssVarRE.test(decl.value)) { decl.value = decl.value.replace(cssVarRE, (_, $1, $2, $3) => { return `var(--${genVarName(id, $1 || $2 || $3, isProd)})`; }); } } }; }; cssVarsPlugin.postcss = true; function genCssVarsCode(vars, bindings, id, isProd) { const varsExp = genCssVarsFromList(vars, id, isProd); const exp = CompilerDOM.createSimpleExpression(varsExp, false); const context = CompilerDOM.createTransformContext(CompilerDOM.createRoot([]), { prefixIdentifiers: true, inline: true, bindingMetadata: bindings.__isScriptSetup === false ? undefined : bindings }); const transformed = CompilerDOM.processExpression(exp, context); const transformedString = transformed.type === 4 /* SIMPLE_EXPRESSION */ ? transformed.content : transformed.children .map(c => { return typeof c === 'string' ? c : c.content; }) .join(''); return `_${CSS_VARS_HELPER}(_ctx => (${transformedString}))`; } //