elcrm 1.1.8 → 1.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -11,7 +11,12 @@ export type MinifyCssVarsOptions = {
|
|
|
11
11
|
start?: number;
|
|
12
12
|
varStart?: number;
|
|
13
13
|
nameStart?: number;
|
|
14
|
+
/** Минифицировать `--*` (по умолчанию true) */
|
|
14
15
|
vars?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Минифицировать составные классы. По умолчанию **false** —
|
|
18
|
+
* иначе ломаются `className={\`foo--${x}\`}`.
|
|
19
|
+
*/
|
|
15
20
|
classes?: boolean;
|
|
16
21
|
minVar?: number;
|
|
17
22
|
minClass?: number;
|
|
@@ -45,6 +50,9 @@ export declare function replaceCssVarToken(
|
|
|
45
50
|
to: string,
|
|
46
51
|
): string;
|
|
47
52
|
|
|
53
|
+
/** Имена `--*` в CSS, без суффиксов BEM-классов. */
|
|
54
|
+
export declare function collectCssVarNames(texts: string[]): string[];
|
|
55
|
+
|
|
48
56
|
export declare function isVendorJsChunk(code: string): boolean;
|
|
49
57
|
|
|
50
58
|
export declare function minifyCssVars(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/vite/minify-css-vars.ts
|
|
2
|
-
var VAR_RE =
|
|
2
|
+
var VAR_RE = /(?<![\w-])--[a-zA-Z_][\w-]*/g;
|
|
3
3
|
var VAR_IN_JS_RE = /var\(\s*(--[a-zA-Z_][\w-]*)|["'](--[a-zA-Z_][\w-]*)["']/g;
|
|
4
4
|
var CLASS_SEL_RE = /\.(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)/g;
|
|
5
5
|
var LETTERS = "abcdefghijklmnopqrstuvwxyz";
|
|
@@ -106,7 +106,10 @@ function escapeRe(s) {
|
|
|
106
106
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
107
107
|
}
|
|
108
108
|
function replaceCssVarToken(text, from, to) {
|
|
109
|
-
return text.replace(new RegExp(
|
|
109
|
+
return text.replace(new RegExp(`(?<![\\w-])${escapeRe(from)}(?![\\w-])`, "g"), to);
|
|
110
|
+
}
|
|
111
|
+
function collectCssVarNames(texts) {
|
|
112
|
+
return [...collect(texts, VAR_RE)].sort();
|
|
110
113
|
}
|
|
111
114
|
function replaceVarsInCss(text, map) {
|
|
112
115
|
let out = text;
|
|
@@ -128,7 +131,11 @@ function isVendorJsChunk(code) {
|
|
|
128
131
|
}
|
|
129
132
|
function replaceClasses(text, map, inCss) {
|
|
130
133
|
let out = text;
|
|
131
|
-
|
|
134
|
+
const entries = byLongest(map.keys()).map((k) => [
|
|
135
|
+
k,
|
|
136
|
+
map.get(k)
|
|
137
|
+
]);
|
|
138
|
+
for (const [from, to] of entries) {
|
|
132
139
|
const esc = escapeRe(from);
|
|
133
140
|
if (inCss) {
|
|
134
141
|
out = out.replace(new RegExp(`\\.${esc}(?![\\w-])`, "g"), `.${to}`);
|
|
@@ -164,7 +171,7 @@ function normalizeOpts(raw) {
|
|
|
164
171
|
varStart: toIndex(o.varStart, start),
|
|
165
172
|
nameStart: toIndex(o.nameStart, start),
|
|
166
173
|
vars: o.vars !== false,
|
|
167
|
-
classes: o.classes
|
|
174
|
+
classes: o.classes === true,
|
|
168
175
|
minVar: o.minVar ?? Math.max(4, varLen + 2),
|
|
169
176
|
minClass: o.minClass ?? 5,
|
|
170
177
|
classPrefix: o.classPrefix ?? "x",
|
|
@@ -288,5 +295,6 @@ export {
|
|
|
288
295
|
minifyCssVars,
|
|
289
296
|
isVendorJsChunk,
|
|
290
297
|
encodeName,
|
|
298
|
+
collectCssVarNames,
|
|
291
299
|
allocateUnique
|
|
292
300
|
};
|
package/package.json
CHANGED
|
@@ -92,16 +92,17 @@ elcrm test --front|--server|--no-scripts
|
|
|
92
92
|
|
|
93
93
|
### Vite-плагины из пакета `elcrm`
|
|
94
94
|
|
|
95
|
-
Нужен **elcrm ≥ 1.1.
|
|
95
|
+
Нужен **elcrm ≥ 1.1.10** в `devDependencies` приложения (не только глобальный `bun i -g`). Иначе Vite: `Missing "./vite/minify-css-vars"` или BEM/классы ломают стили.
|
|
96
96
|
|
|
97
97
|
```js
|
|
98
98
|
import { minifyCssVars } from "elcrm/vite/minify-css-vars";
|
|
99
99
|
|
|
100
|
-
// только command === "build"
|
|
101
|
-
minifyCssVars({ var: 2
|
|
100
|
+
// только command === "build"; классы по умолчанию выключены
|
|
101
|
+
minifyCssVars({ var: 2 })
|
|
102
|
+
// classes: true — только если нет className={\`foo--${x}\`}
|
|
102
103
|
```
|
|
103
104
|
|
|
104
|
-
`nameStart` / `varStart` — **числа** (индекс алфавита), не `"x"`. Префикс класса — `classPrefix`. В JS плагин не трогает декремент `--n` (иначе `aqt is not defined`).
|
|
105
|
+
`nameStart` / `varStart` — **числа** (индекс алфавита), не `"x"`. Префикс класса — `classPrefix`. В JS плагин не трогает декремент `--n` (иначе `aqt is not defined`). BEM `.account--wide` — это класс, не переменная `--wide`. **`classes: true` нельзя** при динамических модификаторах (`account-passkey-status--${tone}`) — CSS сожмёт полное имя, шаблон в JS останется.
|
|
105
106
|
|
|
106
107
|
Короткие имена **уникальны и подряд**: `--aa`, `--ab`, `--ac`… Занятые слоты пропускаются; `--field` не затирает `--field-border`. Чанки JSZip не минифицируются (декремент `--n`). Если слотов нет — сборка падает.
|
|
107
108
|
|