UNPKG

vite-plugin-react-css-module-stylename

Version:

Quick use of styleName to introduce CSS module plugin

469 lines (468 loc) 19.6 kB
import { transformSync as X } from "@babel/core"; import z, { relative as W } from "path"; import N from "crypto"; import * as K from "@babel/parser"; import L from "@babel/traverse"; import Z from "@babel/generator"; import * as u from "@babel/types"; function O(r) { return r && r.__esModule && Object.prototype.hasOwnProperty.call(r, "default") ? r.default : r; } var Q = { exports: {} }, v; function q() { if (v) return Q.exports; v = 1; const r = Math.floor(65472 / 4) & -4; class f { /** * @param {WebAssembly.Instance} instance wasm instance * @param {WebAssembly.Instance[]} instancesPool pool of instances * @param {number} chunkSize size of data chunks passed to wasm * @param {number} digestSize size of digest returned by wasm */ constructor(e, A, i, g) { const c = ( /** @type {any} */ e.exports ); c.init(), this.exports = c, this.mem = Buffer.from(c.memory.buffer, 0, 65536), this.buffered = 0, this.instancesPool = A, this.chunkSize = i, this.digestSize = g; } reset() { this.buffered = 0, this.exports.init(); } /** * @param {Buffer | string} data data * @param {BufferEncoding=} encoding encoding * @returns {this} itself */ update(e, A) { if (typeof e == "string") { for (; e.length > r; ) this._updateWithShortString(e.slice(0, r), A), e = e.slice(r); return this._updateWithShortString(e, A), this; } return this._updateWithBuffer(e), this; } /** * @param {string} data data * @param {BufferEncoding=} encoding encoding * @returns {void} */ _updateWithShortString(e, A) { const { exports: i, buffered: g, mem: c, chunkSize: I } = this; let n; if (e.length < 70) if (!A || A === "utf-8" || A === "utf8") { n = g; for (let s = 0; s < e.length; s++) { const a = e.charCodeAt(s); if (a < 128) c[n++] = a; else if (a < 2048) c[n] = a >> 6 | 192, c[n + 1] = a & 63 | 128, n += 2; else { n += c.write(e.slice(s), n, A); break; } } } else if (A === "latin1") { n = g; for (let s = 0; s < e.length; s++) { const a = e.charCodeAt(s); c[n++] = a; } } else n = g + c.write(e, g, A); else n = g + c.write(e, g, A); if (n < I) this.buffered = n; else { const s = n & ~(this.chunkSize - 1); i.update(s); const a = n - s; this.buffered = a, a > 0 && c.copyWithin(0, s, n); } } /** * @param {Buffer} data data * @returns {void} */ _updateWithBuffer(e) { const { exports: A, buffered: i, mem: g } = this, c = e.length; if (i + c < this.chunkSize) e.copy(g, i, 0, c), this.buffered += c; else { const I = i + c & ~(this.chunkSize - 1); if (I > 65536) { let s = 65536 - i; e.copy(g, i, 0, s), A.update(65536); const a = I - i - 65536; for (; s < a; ) e.copy(g, 0, s, s + 65536), A.update(65536), s += 65536; e.copy(g, 0, s, I - i), A.update(I - i - s); } else e.copy(g, i, 0, I - i), A.update(I); const n = c + i - I; this.buffered = n, n > 0 && e.copy(g, 0, c - n, c); } } digest(e) { const { exports: A, buffered: i, mem: g, digestSize: c } = this; A.final(i), this.instancesPool.push(this); const I = g.toString("latin1", 0, c); return e === "hex" ? I : e === "binary" || !e ? Buffer.from(I, "hex") : Buffer.from(I, "hex").toString(e); } } const o = (t, e, A, i) => { if (e.length > 0) { const g = e.pop(); return g.reset(), g; } else return new f( new WebAssembly.Instance(t), e, A, i ); }; return Q.exports = o, Q.exports.MAX_SHORT_STRING = r, Q.exports; } var m, M; function _() { if (M) return m; M = 1; const r = q(), f = new WebAssembly.Module( Buffer.from( // 1173 bytes "AGFzbQEAAAABCAJgAX8AYAAAAwQDAQAABQMBAAEGGgV+AUIAC34BQgALfgFCAAt+AUIAC34BQgALByIEBGluaXQAAAZ1cGRhdGUAAQVmaW5hbAACBm1lbW9yeQIACrUIAzAAQtbrgu7q/Yn14AAkAELP1tO+0ser2UIkAUIAJAJC+erQ0OfJoeThACQDQgAkBAvUAQIBfwR+IABFBEAPCyMEIACtfCQEIwAhAiMBIQMjAiEEIwMhBQNAIAIgASkDAELP1tO+0ser2UJ+fEIfiUKHla+vmLbem55/fiECIAMgASkDCELP1tO+0ser2UJ+fEIfiUKHla+vmLbem55/fiEDIAQgASkDEELP1tO+0ser2UJ+fEIfiUKHla+vmLbem55/fiEEIAUgASkDGELP1tO+0ser2UJ+fEIfiUKHla+vmLbem55/fiEFIAAgAUEgaiIBSw0ACyACJAAgAyQBIAQkAiAFJAMLqwYCAX8EfiMEQgBSBH4jACICQgGJIwEiA0IHiXwjAiIEQgyJfCMDIgVCEol8IAJCz9bTvtLHq9lCfkIfiUKHla+vmLbem55/foVCh5Wvr5i23puef35CnaO16oOxjYr6AH0gA0LP1tO+0ser2UJ+Qh+JQoeVr6+Ytt6bnn9+hUKHla+vmLbem55/fkKdo7Xqg7GNivoAfSAEQs/W077Sx6vZQn5CH4lCh5Wvr5i23puef36FQoeVr6+Ytt6bnn9+Qp2jteqDsY2K+gB9IAVCz9bTvtLHq9lCfkIfiUKHla+vmLbem55/foVCh5Wvr5i23puef35CnaO16oOxjYr6AH0FQsXP2bLx5brqJwsjBCAArXx8IQIDQCABQQhqIABNBEAgAiABKQMAQs/W077Sx6vZQn5CH4lCh5Wvr5i23puef36FQhuJQoeVr6+Ytt6bnn9+Qp2jteqDsY2K+gB9IQIgAUEIaiEBDAELCyABQQRqIABNBEACfyACIAE1AgBCh5Wvr5i23puef36FQheJQs/W077Sx6vZQn5C+fPd8Zn2masWfCECIAFBBGoLIQELA0AgACABRwRAIAIgATEAAELFz9my8eW66id+hUILiUKHla+vmLbem55/fiECIAFBAWohAQwBCwtBACACIAJCIYiFQs/W077Sx6vZQn4iAiACQh2IhUL5893xmfaZqxZ+IgIgAkIgiIUiAkIgiCIDQv//A4NCIIYgA0KAgPz/D4NCEIiEIgNC/4GAgPAfg0IQhiADQoD+g4CA4D+DQgiIhCIDQo+AvIDwgcAHg0IIhiADQvCBwIeAnoD4AINCBIiEIgNChoyYsODAgYMGfEIEiEKBgoSIkKDAgAGDQid+IANCsODAgYOGjJgwhHw3AwBBCCACQv////8PgyICQv//A4NCIIYgAkKAgPz/D4NCEIiEIgJC/4GAgPAfg0IQhiACQoD+g4CA4D+DQgiIhCICQo+AvIDwgcAHg0IIhiACQvCBwIeAnoD4AINCBIiEIgJChoyYsODAgYMGfEIEiEKBgoSIkKDAgAGDQid+IAJCsODAgYOGjJgwhHw3AwAL", "base64" ) ); return m = r.bind(null, f, [], 32, 16), m; } var y, R; function G() { if (R) return y; R = 1; const r = q().MAX_SHORT_STRING; class f { constructor(t) { this.string = void 0, this.encoding = void 0, this.hash = t; } /** * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * @param {string|Buffer} data data * @param {string=} inputEncoding data encoding * @returns {this} updated hash */ update(t, e) { if (this.string !== void 0) { if (typeof t == "string" && e === this.encoding && this.string.length + t.length < r) return this.string += t, this; this.hash.update(this.string, this.encoding), this.string = void 0; } return typeof t == "string" ? t.length < r && // base64 encoding is not valid since it may contain padding chars (!e || !e.startsWith("ba")) ? (this.string = t, this.encoding = e) : this.hash.update(t, e) : this.hash.update(t), this; } /** * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * @param {string=} encoding encoding of the return value * @returns {string|Buffer} digest */ digest(t) { return this.string !== void 0 && this.hash.update(this.string, this.encoding), this.hash.digest(t); } } return y = f, y; } var D, J; function j() { if (J) return D; J = 1; const r = q(), f = new WebAssembly.Module( Buffer.from( // 2150 bytes "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", "base64" ) ); return D = r.bind(null, f, [], 64, 32), D; } var w, k; function F() { if (k) return w; k = 1; const r = 2e3, f = {}; class o { /** * @param {Hash | function(): Hash} hashOrFactory function to create a hash * @param {string=} hashKey key for caching */ constructor(e, A) { this.hashKey = A, typeof e == "function" ? (this.hashFactory = e, this.hash = void 0) : (this.hashFactory = void 0, this.hash = e), this.buffer = ""; } /** * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} * @param {string|Buffer} data data * @param {string=} inputEncoding data encoding * @returns {this} updated hash */ update(e, A) { return A !== void 0 || typeof e != "string" || e.length > r ? (this.hash === void 0 && (this.hash = this.hashFactory()), this.buffer.length > 0 && (this.hash.update(this.buffer), this.buffer = ""), this.hash.update(e, A)) : (this.buffer += e, this.buffer.length > r && (this.hash === void 0 && (this.hash = this.hashFactory()), this.hash.update(this.buffer), this.buffer = "")), this; } /** * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} * @param {string=} encoding encoding of the return value * @returns {string|Buffer} digest */ digest(e) { let A; const i = this.buffer; if (this.hash === void 0) { const c = `${this.hashKey}-${e}`; A = f[c], A === void 0 && (A = f[c] = /* @__PURE__ */ new Map()); const I = A.get(i); if (I !== void 0) return I; this.hash = this.hashFactory(); } i.length > 0 && this.hash.update(i); const g = this.hash.digest(e); return A !== void 0 && A.set(i, g), g; } } return w = o, w; } var S, H; function V() { if (H) return S; H = 1; const r = { 26: "abcdefghijklmnopqrstuvwxyz", 32: "123456789abcdefghjkmnpqrstuvwxyz", // no 0lio 36: "0123456789abcdefghijklmnopqrstuvwxyz", 49: "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // no lIO 52: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 58: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // no 0lIO 62: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 64: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_" }; function f(I, n) { let s = 0; for (let a = I.length - 1; a >= 0; a--) { const h = s * 4294967296 + I[a]; s = h % n, I[a] = Math.floor(h / n); } return s; } function o(I, n, s) { const a = r[n]; if (!a) throw new Error("Unknown encoding base" + n); const h = Math.ceil(I.length * 8 / Math.log2(n)); s = Math.min(s, h); const p = new Uint32Array(Math.ceil(I.length / 4)); I.copy(Buffer.from(p.buffer)); let C = ""; for (let B = 0; B < s; B++) C = a[f(p, n)] + C; return C; } let t, e, A, i, g; function c(I, n, s, a) { n = n || "xxhash64", a = a || 9999; let h; return n === "xxhash64" ? (e === void 0 && (e = _(), i === void 0 && (i = G())), h = new i(e())) : n === "md4" ? (A === void 0 && (A = j(), i === void 0 && (i = G())), h = new i(A())) : n === "native-md4" ? (typeof t > "u" && (t = N, g === void 0 && (g = F())), h = new g(() => t.createHash("md4"), "md4")) : (typeof t > "u" && (t = N, g === void 0 && (g = F())), h = new g( () => t.createHash(n), n )), h.update(I), s === "base26" || s === "base32" || s === "base36" || s === "base49" || s === "base52" || s === "base58" || s === "base62" || s === "base64safe" ? o( h.digest(), s === "base64safe" ? 64 : s.substr(4), a ) : h.digest(s || "hex").substr(0, a); } return S = c, S; } var x, P; function T() { if (P) return x; P = 1; const r = z, f = V(); function o(t, e, A = {}) { let i; const g = t.resourceQuery && t.resourceQuery.length > 1; typeof e == "function" ? i = e( t.resourcePath, g ? t.resourceQuery : void 0 ) : i = e || "[hash].[ext]"; const c = A.context, I = A.content, n = A.regExp; let s = "bin", a = "file", h = "", p = "", C = ""; if (t.resourcePath) { const E = r.parse(t.resourcePath); let l = t.resourcePath; E.ext && (s = E.ext.substr(1)), E.dir && (a = E.name, l = E.dir + r.sep), typeof c < "u" ? (h = r.relative(c, l + "_").replace(/\\/g, "/").replace(/\.\.(\/)?/g, "_$1"), h = h.substr(0, h.length - 1)) : h = l.replace(/\\/g, "/").replace(/\.\.(\/)?/g, "_$1"), h.length <= 1 ? h = "" : p = r.basename(h); } if (t.resourceQuery && t.resourceQuery.length > 1) { C = t.resourceQuery; const E = C.indexOf("#"); E >= 0 && (C = C.substr(0, E)); } let B = i; if (I && (B = B.replace( /\[(?:([^[:\]]+):)?(?:hash|contenthash)(?::([a-z]+\d*(?:safe)?))?(?::(\d+))?\]/gi, (E, l, d, Y) => f(I, l, d, parseInt(Y, 10)) )), B = B.replace(/\[ext\]/gi, () => s).replace(/\[name\]/gi, () => a).replace(/\[path\]/gi, () => h).replace(/\[folder\]/gi, () => p).replace(/\[query\]/gi, () => C), n && t.resourcePath) { const E = t.resourcePath.match(new RegExp(n)); E && E.forEach((l, d) => { B = B.replace(new RegExp("\\[" + d + "\\]", "ig"), l); }); } return typeof t.options == "object" && typeof t.options.customInterpolateName == "function" && (B = t.options.customInterpolateName.call( t, B, e, A )), B; } return x = o, x; } var b, U; function $() { if (U) return b; U = 1; var r = T(), f = z; return b = function(t, e) { e = e || {}; var A = e && typeof e.context == "string" ? e.context : process.cwd(), i = e && typeof e.hashPrefix == "string" ? e.hashPrefix : ""; return function(c, I) { var n = t.replace(/\[local\]/gi, c), s = { resourcePath: I }, a = { content: i + f.relative(A, I).replace(/\\/g, "/") + "\0" + c, context: A }, h = r(s, n, a); return h.replace(new RegExp("[^a-zA-Z0-9\\-_ -￿]", "g"), "-").replace(/^((-?[0-9])|--)/, "_$1"); }; }, b; } var ee = $(); const Ae = /* @__PURE__ */ O(ee), te = "[local]__[hash:base64:5]", ie = Ae(te, { context: process.cwd() }), Be = (r, f) => { const o = W(process.cwd(), f); return ie(r, o); }, se = "Carl"; function re(r, f) { const o = K.parse(r, { sourceType: "module", plugins: ["typescript", "jsx"] }), t = []; let e = 0; return L.default(o, { // convert module.scss ImportDeclaration(A) { if (A.node.source.value.endsWith( f === "scss" ? ".module.scss" : ".module.less" ) && A.node.specifiers.length === 0) { const i = `${se}${e++}`; t.push(i), A.replaceWith( u.importDeclaration( [u.importDefaultSpecifier(u.identifier(i))], A.node.source ) ); } }, ReturnStatement(A) { if (t.length > 0) { const i = t.map( (g) => u.expressionStatement( u.callExpression( u.memberExpression( u.callExpression( u.memberExpression( u.identifier("Object"), u.identifier("values") ), [u.identifier(g)] ), u.identifier("forEach") ), [ u.arrowFunctionExpression( [u.identifier("cn")], u.unaryExpression("void", u.identifier("cn")) ) ] ) ) ); A.insertBefore(i); } } }), Z.default(o).code; } const ne = "vite-plugin-react-css-module-styleName", ge = /\.(t|j)sx?$/; var ce = /* @__PURE__ */ ((r) => (r.Pro = "production", r.Dev = "development", r))(ce || {}), Ie = /* @__PURE__ */ ((r) => (r.Scss = "scss", r.Less = "less", r))(Ie || {}); const Ee = (r) => { const { generateScopedName: f, env: o, cssTypes: t = "scss" /* Scss */ } = r; return { name: ne, enforce: "pre", transform(e, A) { if (!ge.test(A) || A.includes("node_modules") || !A.endsWith("x")) return; const i = ["jsx", "importMeta"]; /\.tsx?$/.test(A) && i.push("typescript", "decorators-legacy"); const g = X(e, { babelrc: !1, configFile: !1, filename: A, parserOpts: { sourceType: "module", allowAwaitOutsideFunction: !0, plugins: i }, plugins: [ [ // Allow use 'react-css-modules',recommend use 'babel-plugin-react-css-modules' "babel-plugin-react-css-modules", { autoResolveMultipleImports: !0, exclude: "node_modules", generateScopedName: (c, I) => f(c, I), filetypes: t === "scss" ? { ".scss": { syntax: "postcss-scss" } } : { ".less": { syntax: "postcss-less" } } } ] ] }); return { code: o === "production" ? re(g.code, t) : g.code, map: g.map }; } }; }; export { Ie as ECssType, ce as EEnv, Ee as default, Be as generateScopedName };