@renzp/postcss-css-scoped
Version:
实现css scoped的postcss plugin
155 lines (152 loc) • 5.4 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esm = (fn, res) => function __init() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// ../../node_modules/.pnpm/tsup@5.12.9_@swc+core@1.5.7_postcss@8.4.38_typescript@4.9.5/node_modules/tsup/assets/cjs_shims.js
var init_cjs_shims = __esm({
"../../node_modules/.pnpm/tsup@5.12.9_@swc+core@1.5.7_postcss@8.4.38_typescript@4.9.5/node_modules/tsup/assets/cjs_shims.js"() {
}
});
// ../../node_modules/.pnpm/hash-sum@2.0.0/node_modules/hash-sum/hash-sum.js
var require_hash_sum = __commonJS({
"../../node_modules/.pnpm/hash-sum@2.0.0/node_modules/hash-sum/hash-sum.js"(exports, module2) {
"use strict";
init_cjs_shims();
function pad(hash2, len) {
while (hash2.length < len) {
hash2 = "0" + hash2;
}
return hash2;
}
function fold(hash2, text) {
var i;
var chr;
var len;
if (text.length === 0) {
return hash2;
}
for (i = 0, len = text.length; i < len; i++) {
chr = text.charCodeAt(i);
hash2 = (hash2 << 5) - hash2 + chr;
hash2 |= 0;
}
return hash2 < 0 ? hash2 * -2 : hash2;
}
function foldObject(hash2, o, seen) {
return Object.keys(o).sort().reduce(foldKey, hash2);
function foldKey(hash3, key) {
return foldValue(hash3, o[key], key, seen);
}
}
function foldValue(input, value, key, seen) {
var hash2 = fold(fold(fold(input, key), toString(value)), typeof value);
if (value === null) {
return fold(hash2, "null");
}
if (value === void 0) {
return fold(hash2, "undefined");
}
if (typeof value === "object" || typeof value === "function") {
if (seen.indexOf(value) !== -1) {
return fold(hash2, "[Circular]" + key);
}
seen.push(value);
var objHash = foldObject(hash2, 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(hash2, value.toString());
}
function toString(o) {
return Object.prototype.toString.call(o);
}
function sum(o) {
return pad(foldValue(0, o, "", []).toString(16), 8);
}
module2.exports = sum;
}
});
// src/index.ts
var src_exports = {};
__export(src_exports, {
default: () => src_default
});
module.exports = __toCommonJS(src_exports);
init_cjs_shims();
var import_hash_sum = __toESM(require_hash_sum());
var import_postcss_selector_parser = __toESM(require("postcss-selector-parser"));
var plugin = (resourcePath) => {
return {
postcssPlugin: "postcss-css-scoped",
Once(root) {
root.each((node) => {
if (!node.selector) {
return;
}
node.selector = (0, import_postcss_selector_parser.default)((selectors) => {
selectors.each((selector) => {
let node2 = null;
selector.each((n) => {
if (n.type === "pseudo" && n.value === "::global") {
n.value = n.spaces.before = n.spaces.after = "";
return false;
}
if (n.type !== "pseudo" && n.type !== "combinator") {
node2 = n;
}
});
if (node2) {
const path = resourcePath.replace(/\\/g, "/");
const id = (0, import_hash_sum.default)(path);
node2.spaces.after = "";
selector.insertAfter(
node2,
import_postcss_selector_parser.default.attribute({
attribute: `data-scoped-${id}`
})
);
} else {
selector.first.spaces.before = "";
}
});
}).processSync(node.selector);
});
}
};
};
plugin.postcss = true;
var src_default = plugin;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {});
//# sourceMappingURL=index.js.map