UNPKG

unplugin-transform-we-class

Version:
133 lines (126 loc) 4.06 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/nuxt.ts var nuxt_exports = {}; __export(nuxt_exports, { default: () => nuxt_default }); module.exports = __toCommonJS(nuxt_exports); // src/index.ts var import_unplugin = require("unplugin"); var import_pluginutils = require("@rollup/pluginutils"); // src/core/index.ts var import_utils = require("@meoc/utils"); // src/utils.ts var defaultRules = { ".": "-d-", "/": "-s-", ":": "-c-", "%": "-p-", "!": "-e-", "#": "-w-", "(": "-bl-", ")": "-br-", "[": "-fl-", "]": "-fr-", "$": "-r-", ",": "-co-" }; var transformRegExp = /[,\.\/:%!#\(\)\[\]$]/; var escapePrefix = "\\"; function transformSelector(selector, rules = defaultRules) { if (transformRegExp.test(selector)) { for (const transformRule in rules) { const replaceReg = new RegExp(`${escapePrefix}${transformRule}`, "g"); selector = selector.replace(replaceReg, rules[transformRule]); } } return selector; } // src/core/index.ts function getClass(code) { const matchs = []; Array.from(code.matchAll(/\s:?class="((?:\n|.)*?)"/g)).forEach((m) => { const classStr = m[1]; const sourceStr = (0, import_utils.trim)(m[0]); let classArr = [sourceStr]; if (sourceStr.startsWith(":")) { if (classStr.startsWith("{")) classArr = classArr.concat(getObjClass(classStr)); else if (classStr.startsWith("[")) classArr = classArr.concat(getArrClass(classStr)); } else { classArr.push(classStr); } matchs.push(classArr); }); Array.from(code.matchAll(/className=["']((?:\n|.)+?)["']/g)).forEach((m) => { matchs.push([m[0], m[1]]); }); return matchs; } function getObjClass(className) { return Array.from(className.matchAll(/'([^,]+?)'\s*:/g)).map((v) => v[1]); } function getArrClass(className) { return Array.from(className.matchAll(/(?<=[\?\:])\s*'(.*?)'/g)).map((v) => v[1]); } function transformCode(code, rules = defaultRules) { const classNames = getClass(code); classNames.forEach((c) => { let currentClass = c[0]; c.slice(1).forEach((selector) => { currentClass = currentClass.replace(selector, transformSelector(selector, rules)); }); code = code.replace(c[0], currentClass); }); return code; } // src/index.ts var src_default = (0, import_unplugin.createUnplugin)((options = {}) => { const rules = options.rules; const filter = (0, import_pluginutils.createFilter)( options.include || [/\.[jt]sx?$/, /\.vue$/, /\.vue\?vue/], options.exclude || [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/] ); return { name: "unplugin-transform-we-class", enforce: "pre", transformInclude(id) { return filter(id); }, transform(code) { return transformCode(code, rules); } }; }); // src/nuxt.ts function nuxt_default(options) { this.extendBuild((config) => { config.plugins = config.plugins || []; config.plugins.unshift(src_default.webpack(options)); }); this.nuxt.hook("vite:extend", async (vite) => { vite.config.plugins = vite.config.plugins || []; vite.config.plugins.push(src_default.vite(options)); }); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = {}); if (module.exports.default) module.exports = module.exports.default;