'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var CompilerDOM = require('@vue/compiler-dom'); var sourceMap = require('source-map'); var MagicString = require('magic-string'); var parser$2 = require('@babel/parser'); var shared = require('@vue/shared'); var estreeWalker = require('estree-walker'); var path = require('path'); var compilerCore = require('@vue/compiler-core'); var url = require('url'); var CompilerSSR = require('@vue/compiler-ssr'); var fs = require('fs'); var util$2 = require('util'); var reactivityTransform = require('@vue/reactivity-transform'); var _postcss = require('postcss'); 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 sourceMap__default = /*#__PURE__*/_interopDefaultLegacy(sourceMap); var MagicString__default = /*#__PURE__*/_interopDefaultLegacy(MagicString); var path__default = /*#__PURE__*/_interopDefaultLegacy(path); var CompilerSSR__namespace = /*#__PURE__*/_interopNamespace(CompilerSSR); var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); var util__default = /*#__PURE__*/_interopDefaultLegacy(util$2); var _postcss__default = /*#__PURE__*/_interopDefaultLegacy(_postcss); function pad (hash, len) { while (hash.length < len) { hash = '0' + hash; } return hash; } function fold (hash, text) { var i; var chr; var len; if (text.length === 0) { return hash; } for (i = 0, len = text.length; i < len; i++) { chr = text.charCodeAt(i); hash = ((hash << 5) - hash) + chr; hash |= 0; } return hash < 0 ? hash * -2 : hash; } function foldObject (hash, o, seen) { return Object.keys(o).sort().reduce(foldKey, hash); function foldKey (hash, key) { return foldValue(hash, o[key], key, seen); } } function foldValue (input, value, key, seen) { var hash = fold(fold(fold(input, key), toString(value)), typeof value); if (value === null) { return fold(hash, 'null'); } if (value === undefined) { return fold(hash, 'undefined'); } if (typeof value === 'object' || typeof value === 'function') { if (seen.indexOf(value) !== -1) { return fold(hash, '[Circular]' + key); } seen.push(value); var objHash = foldObject(hash, value, seen); if (!('valueOf' in value) || typeof value.valueOf !== 'function') { return objHash; } try { return fold(objHash, String(value.valueOf())) } catch (err) { return fold(objHash, '[valueOf exception]' + (err.stack || err.message)) } } return fold(hash, value.toString()); } function toString (o) { return Object.prototype.toString.call(o); } function sum (o) { return pad(foldValue(0, o, '', []).toString(16), 8); } var hashSum = sum; const CSS_VARS_HELPER = `useCssVars`; function genCssVarsFromList(vars, id, isProd, isSSR = false) { return `{\n ${vars .map(key => `"${isSSR ? `--` : ``}${genVarName(id, key, isProd)}": (${key})`) .join(',\n ')}\n}`; } function genVarName(id, raw, isProd) { if (isProd) { return hashSum(id + raw); } else { return `${id}-${raw.replace(/([^\w-])/g, '_')}`; } } function normalizeExpression(exp) { exp = exp.trim(); if ((exp[0] === `'` && exp[exp.length - 1] === `'`) || (exp[0] === `"` && exp[exp.length - 1] === `"`)) { return exp.slice(1, -1); } return exp; } const vBindRE = /v-bind\s*\(/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 = vBindRE.exec(content))) { const start = match.index + match[0].length; const end = lexBinding(content, start); if (end !== null) { const variable = normalizeExpression(content.slice(start, end)); if (!vars.includes(variable)) { vars.push(variable); } } } }); return vars; } function lexBinding(content, start) { let state = 0 /* inParens */; let parenDepth = 0; for (let i = start; i < content.length; i++) { const char = content.charAt(i); switch (state) { case 0 /* inParens */: if (char === `'`) { state = 1 /* inSingleQuoteString */; } else if (char === `"`) { state = 2 /* inDoubleQuoteString */; } else if (char === `(`) { parenDepth++; } else if (char === `)`) { if (parenDepth > 0) { parenDepth--; } else { return i; } } break; case 1 /* inSingleQuoteString */: if (char === `'`) { state = 0 /* inParens */; } break; case 2 /* inDoubleQuoteString */: if (char === `"`) { state = 0 /* inParens */; } break; } } return null; } const cssVarsPlugin = opts => { const { id, isProd } = opts; return { postcssPlugin: 'vue-sfc-vars', Declaration(decl) { // rewrite CSS variables const value = decl.value; if (vBindRE.test(value)) { vBindRE.lastIndex = 0; let transformed = ''; let lastIndex = 0; let match; while ((match = vBindRE.exec(value))) { const start = match.index + match[0].length; const end = lexBinding(value, start); if (end !== null) { const variable = normalizeExpression(value.slice(start, end)); transformed += value.slice(lastIndex, match.index) + `var(--${genVarName(id, variable, isProd)})`; lastIndex = end + 1; } } decl.value = transformed + value.slice(lastIndex); } } }; }; 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}))`; } //