@empjs/plugin-lightningcss 3.0.0-rc.1 → 3.0.0-rc.8
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.
- package/README.md +15 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/loader.cjs +1 -1
- package/dist/postcss-polyfill.d.ts +3 -9
- package/dist/px-to-base.d.ts +18 -3
- package/dist/unit-tramsform.d.ts +51 -0
- package/package.json +4 -9
package/README.md
CHANGED
|
@@ -25,5 +25,18 @@ export default defineConfig(store => {
|
|
|
25
25
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
##
|
|
29
|
-
+
|
|
28
|
+
## 增加变量
|
|
29
|
+
+ excludeSelectors 屏蔽选择器,如`[{type: 'class', name: 'cssModule'}]`
|
|
30
|
+
+ excludeUnit 防止转换`px`的写法,默认为 `-px`,不接受大小写和`--px`,接受非关键字如`ipx` 等
|
|
31
|
+
```js
|
|
32
|
+
/**
|
|
33
|
+
* 屏蔽选择器 [{type: 'class', name: 'cssModule'}]
|
|
34
|
+
* @default []
|
|
35
|
+
*/
|
|
36
|
+
excludeSelectors: ExcludeSelectorsType[]
|
|
37
|
+
/**
|
|
38
|
+
* 屏蔽单位 大小写无法区分 只支持 -px 等横杠
|
|
39
|
+
* @default -px
|
|
40
|
+
*/
|
|
41
|
+
excludeUnit: string
|
|
42
|
+
```
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { composeVisitors } from 'lightningcss';
|
|
1
2
|
import empLightningcssPlugin from './plugin.js';
|
|
2
3
|
import postcss from './postcss-polyfill.js';
|
|
3
|
-
import { composeVisitors } from 'lightningcss';
|
|
4
4
|
export default empLightningcssPlugin;
|
|
5
5
|
export { postcss, composeVisitors };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var C=Object.defineProperty;var
|
|
1
|
+
var C=Object.defineProperty;var R=(i,e)=>()=>(i&&(e=i(i=0)),e);var A=(i,e)=>{for(var t in e)C(i,t,{get:e[t],enumerable:!0})};var g={};A(g,{LightningCSSMinifyPlugin:()=>c,default:()=>P});import{Buffer as T}from"node:buffer";import{transform as _}from"lightningcss";var p,E,c,P,x=R(()=>{"use strict";p="lightningcss-minify-plugin",E=/\.css(?:\?.*)?$/i,c=class{options;transform;constructor(e={}){let{implementation:t}=e;if(t&&typeof t.transform!="function")throw new TypeError(`[${p}]: implementation.transform must be an 'lightningcss' transform function. Received ${typeof t.transform}`);this.transform=t?.transform??_,this.options=e}apply(e){e.hooks.compilation.tap(p,t=>{t.hooks.processAssets.tapPromise({name:p,stage:t?.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE},async()=>await this.transformAssets(t)),t.hooks.statsPrinter.tap(p,s=>{s.hooks.print.for("asset.info.minimized").tap(p,(n,{green:r,formatFlag:o})=>n&&r&&o?r(o("minimized")):"")})})}async transformAssets(e){let{options:{devtool:t},webpack:{sources:{SourceMapSource:s,RawSource:n}}}=e.compiler,r=this.options.sourceMap===void 0?t&&t.includes("source-map"):this.options.sourceMap,{targets:o,...m}=this.options,u=e.getAssets().filter(a=>!a.info.minimized&&E.test(a.name));await Promise.all(u.map(async a=>{let{source:l,map:k}=a.source.sourceAndMap(),w=l.toString(),V=typeof l=="string"?T.from(l):l,d=this.transform({filename:a.name,code:V,minify:!0,sourceMap:r,...m}),h=d.code.toString();e.updateAsset(a.name,r?new s(h,a.name,JSON.parse(d.map.toString()),w,k,!0):new n(h),{...a.info,minimized:!0})}))}},P=c});import{composeVisitors as Z}from"lightningcss";import O from"browserslist";import{browserslistToTargets as L}from"lightningcss";var M=async(i,e)=>{if(e?.transform===!1)return;let{importResolve:t,chain:s}=i,n=["sass","less","css"],r=e?.transform||{},m={targets:L(O(i.empConfig.build.browserslist)),...r};for(let u of n){let a=s.module.rule(u),l=a.use("lightningcss").loader(t("./loader.cjs",import.meta.url)).options(m);["sass","less"].includes(u)&&l.before(`${u}Loader`),a.uses.delete("postcss")}},I=async(i,e)=>{if(e?.minify===!1)return;let{chain:t}=i,s=e?.minify||{},{LightningCSSMinifyPlugin:n}=await Promise.resolve().then(()=>(x(),g));t.optimization.minimizer("minCss").use(n,[s])},U=i=>({name:"@empjs/plugin-lightningcss",async rsConfig(e){await Promise.all([M(e,i),I(e,i)])}}),b=U;import{composeVisitors as S}from"lightningcss";var y=class{skipSelector=!1;skipVal=!1;isExclude;isDebug=!1;op={designWidth:320,minPixelValue:1,excludeSelectors:[],transformUnit:"",excludeUnit:"-px",rootValue:16};debug(...e){this.isDebug&&console.log(...e)}Selector=e=>{this.skipSelector=!1;for(let t of e)this.isExclude(t)&&(this.skipSelector=!0)};Token={dimension:e=>{if(this.debug("dimension",e),e.unit===this.op.excludeUnit)return this.skipVal=!0,{type:"length",value:{unit:"px",value:e.value}}}};Length=e=>{if(this.debug(e,"skipVal",this.skipVal,"skipSelector",this.skipSelector),e.unit==="px"&&!this.skipSelector&&Math.abs(e.value)>this.op.minPixelValue){if(this.skipVal)return this.skipVal=!1,{unit:"px",value:e.value};switch(this.op.transformUnit){case"rem":return{unit:"rem",value:e.value/this.op.rootValue};case"vw":return{unit:"vw",value:e.value/this.op.designWidth*100}}}};pxToRem(e={}){return this.op.transformUnit="rem",this.op=Object.assign(this.op,e),this.isExclude=this.excludeFilter(this.op.excludeSelectors),{Selector:this.Selector,Token:this.Token,Length:this.Length}}pxToVw(e){return this.op.transformUnit="vw",this.op=Object.assign(this.op,e),this.isExclude=this.excludeFilter(this.op.excludeSelectors),{Selector:this.Selector,Token:this.Token,Length:this.Length}}excludeFilter(e){return s=>{if(this.debug(s,e),!s.name)return!1;for(let n of e)if(s.type===n.type&&(typeof n.name=="string"&&n.name===s.name||typeof n.name=="object"&&n.name.test(s.name)))return!0;return!1}}},f=new y;var v=class{px_to_rem(e){return S([f.pxToRem(e)])}px_to_viewport(e){return S([f.pxToVw(e)])}apply(e){return e=e||new Map,{Rule:{style(t){for(let s of t.value.selectors)if(s.length===1&&s[0].type==="type"&&s[0].name.startsWith("--"))return e.set(s[0].name,t.value.declarations),{type:"ignored",value:null};return t.value.rules=t.value.rules.filter(s=>{if(s.type==="unknown"&&s.value.name==="apply"){for(let n of s.value.prelude)if(n.type==="dashed-ident"&&e.has(n.value)){let r=e.get(n.value),o=t.value.declarations;o.declarations.push(...r.declarations),o.importantDeclarations.push(...r.importantDeclarations)}return!1}return!0}),t}}}}selector_prefix(){return{Selector(e){return[{type:"class",name:"prefix"},{type:"combinator",value:"descendant"},...e]}}}static_vars(e){return e=e||new Map,{Rule:{unknown(t){return e.set(t.name,t.prelude),[]}},Token:{"at-keyword"(t){if(e.has(t.value))return e.get(t.value)}}}}url(e){return{Url(t){return t.url=e+t.url,t}}}specific_environment_variables(e){let t={};for(let s in e)t[s]=()=>e[s];return{EnvironmentVariable:t}}env_function(e){return{EnvironmentVariable(t){if(t.name.type==="custom")return e[t.name.ident]}}}design_tokens(e){return{Function:{"design-token"(t){if(t.arguments.length===1&&t.arguments[0].type==="token"&&t.arguments[0].value.type==="string")return e[t.arguments[0].value.value]}}}}custom_units(){return{Token:{dimension(e){if(e.unit.startsWith("--"))return{type:"function",value:{name:"calc",arguments:[{type:"token",value:{type:"number",value:e.value}},{type:"token",value:{type:"delim",value:"*"}},{type:"var",value:{name:{ident:e.unit}}}]}}}}}}property_lookup(){return{Rule:{style(e){let t=new Map;for(let s of e.value.declarations.declarations){let n=s.property;s.property==="unparsed"&&(n=s.value.propertyId.property),t.set(n,s)}return e.value.declarations.declarations=e.value.declarations.declarations.map(s=>{if(s.property==="unparsed"&&s.value.value.length===1){let n=s.value.value[0];if(n.type==="token"&&n.value.type==="at-keyword"&&t.has(n.value.value)){let r=t.get(n.value.value);return{property:s.value.propertyId.property,value:r.value}}}return s}),e}}}}focus_visible(){return{Rule:{style(e){let t=null;for(let s of e.value.selectors)for(let[n,r]of s.entries())r.type==="pseudo-class"&&r.kind==="focus-visible"&&(t==null&&(t=[...e.value.selectors.map(o=>[...o])]),s[n]={type:"class",name:"focus-visible"});if(t)return[e,{type:"style",value:{...e.value,selectors:t}}]}}}}dark_theme_class(){return{Rule:{media(e){let t=e.value.query.mediaQueries[0];if(t.condition?.type==="feature"&&t.condition.value.type==="plain"&&t.condition.value.name==="prefers-color-scheme"&&t.condition.value.value.value==="dark"){let s=[e];for(let n of e.value.rules)if(n.type==="style"){let r=[];for(let o of n.value.selectors)r.push([{type:"type",name:"html"},{type:"attribute",name:"theme",operation:{operator:"equal",value:"dark"}},{type:"combinator",value:"descendant"},...o]),o.unshift({type:"type",name:"html"},{type:"pseudo-class",kind:"not",selectors:[[{type:"attribute",name:"theme",operation:{operator:"equal",value:"light"}}]]},{type:"combinator",value:"descendant"});s.push({type:"style",value:{...n.value,selectors:r}})}return s}}}}}fix_100vh(){return{Rule:{style(e){let t;for(let s of e.value.declarations.declarations)s.property==="height"&&s.value.type==="length-percentage"&&s.value.value.type==="dimension"&&s.value.value.value.unit==="vh"&&s.value.value.value.value===100&&(t||(t=structuredClone(e),t.value.declarations.declarations=[]),t.value.declarations.declarations.push({...s,value:{type:"stretch",vendorPrefix:["webkit"]}}));if(t)return[e,{type:"supports",value:{condition:{type:"declaration",propertyId:{property:"-webkit-touch-callout"},value:"none"},loc:e.value.loc,rules:[t]}}]}}}}logical_transforms(){return{Rule:{style(e){let t;for(let s of e.value.declarations.declarations)if(s.property==="transform"){let n=s.value.map(r=>{if(r.type!=="translateX")return r;t||(t=structuredClone(e),t.value.declarations.declarations=[]);let o;switch(r.value.type){case"dimension":o={type:"dimension",value:{unit:r.value.value.unit,value:-r.value.value.value}};break;case"percentage":o={type:"percentage",value:-r.value.value};break;case"calc":o={type:"calc",value:{type:"product",value:[-1,r.value.value]}};break}return{type:"translateX",value:o}});t&&(t.value.selectors.at(-1).push({type:"pseudo-class",kind:"dir",direction:"rtl"}),t.value.declarations.declarations.push({...s,value:n}))}if(t)return[e,t]}}}}hover_media_query(){return{Rule:{media(e){let t=e.value.query.mediaQueries;if(t.length===1&&t[0].condition&&t[0].condition.type==="feature"&&t[0].condition.value.type==="boolean"&&t[0].condition.value.name==="hover"){for(let s of e.value.rules)if(s.type==="style")for(let n of s.value.selectors)n.unshift({type:"class",name:"hoverable"},{type:"combinator",value:"descendant"});return e.value.rules}}}}}momentum_scrolling(e){return{Declaration:{overflow:e,"overflow-x":e,"overflow-y":e}}}size(){return{Declaration:{custom:{size(e){if(e.value[0].type==="length"){let t={type:"length-percentage",value:{type:"dimension",value:e.value[0].value}};return[{property:"width",value:t},{property:"height",value:t}]}}}}}}},z=new v;var K=b;export{Z as composeVisitors,K as default,z as postcss};
|
package/dist/loader.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var m=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var l=(n,t)=>{for(var r in t)m(n,r,{get:t[r],enumerable:!0})},h=(n,t,r,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of y(t))!S.call(n,o)&&o!==r&&m(n,o,{get:()=>t[o],enumerable:!(e=d(t,o))||e.enumerable});return n};var L=n=>h(m({},"__esModule",{value:!0}),n);var v={};l(v,{default:()=>R});module.exports=L(v);var
|
|
1
|
+
"use strict";var m=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var l=(n,t)=>{for(var r in t)m(n,r,{get:t[r],enumerable:!0})},h=(n,t,r,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of y(t))!S.call(n,o)&&o!==r&&m(n,o,{get:()=>t[o],enumerable:!(e=d(t,o))||e.enumerable});return n};var L=n=>h(m({},"__esModule",{value:!0}),n);var v={};l(v,{default:()=>R});module.exports=L(v);var c=require("node:buffer"),s=require("lightningcss"),O="lightningcss-loader";async function C(n,t){let r=this.async(),e=this.getOptions(),{implementation:o,targets:f,...i}=e;if(o&&typeof o.transform!="function"){r(new TypeError(`[${O}]: options.implementation.transform must be an 'lightningcss' transform function. Received ${typeof o.transform}`));return}let u=o?.transform??s.transform;i.visitor&&(i.visitor=(0,s.composeVisitors)([i.visitor]));try{let{code:a,map:p}=u({filename:this.resourcePath,code:c.Buffer.from(n),sourceMap:this.sourceMap,targets:f,inputSourceMap:this.sourceMap&&t?JSON.stringify(t):void 0,errorRecovery:typeof e.errorRecovery<"u"?e.errorRecovery:!0,nonStandard:{deepSelectorCombinator:!0},...i}),g=a.toString();r(null,g,p&&JSON.parse(p.toString()))}catch(a){r(a)}}var R=C;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Visitor } from 'lightningcss';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import { type CustomAtRules } from 'lightningcss';
|
|
3
|
+
import { type remOptions, type vwOptions } from './unit-tramsform.js';
|
|
4
4
|
/**
|
|
5
5
|
* // 插件编写 https://github.com/parcel-bundler/lightningcss/blob/master/node/test/visitor.test.mjs
|
|
6
6
|
*/
|
|
@@ -8,13 +8,7 @@ declare class PostcssConfig {
|
|
|
8
8
|
/**
|
|
9
9
|
* https://github.com/cuth/postcss-pxtorem
|
|
10
10
|
*/
|
|
11
|
-
px_to_rem(op:
|
|
12
|
-
Selector(selectors: import("lightningcss").Selector): void;
|
|
13
|
-
Length(length: import("lightningcss").LengthValue): {
|
|
14
|
-
unit: "rem";
|
|
15
|
-
value: number;
|
|
16
|
-
} | undefined;
|
|
17
|
-
};
|
|
11
|
+
px_to_rem(op: remOptions): Visitor<CustomAtRules>;
|
|
18
12
|
/**
|
|
19
13
|
* https://github.com/evrone/postcss-px-to-viewport
|
|
20
14
|
*/
|
package/dist/px-to-base.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
interface Options {
|
|
2
2
|
designWidth: number;
|
|
3
3
|
minPixelValue: number;
|
|
4
|
-
skipUppercasePx: boolean;
|
|
5
4
|
excludeSelectors: {
|
|
6
5
|
type: string;
|
|
7
6
|
name: RegExp | string;
|
|
8
7
|
}[];
|
|
9
8
|
}
|
|
10
|
-
export declare function createExcludeFilter(excludes: Options['excludeSelectors']
|
|
9
|
+
export declare function createExcludeFilter(excludes: Options['excludeSelectors']): (testItem: {
|
|
11
10
|
type: string;
|
|
12
11
|
name?: string;
|
|
13
12
|
}) => boolean;
|
|
@@ -22,17 +21,33 @@ export declare function createPxToVwVisitor(userOptions?: vwOptions): {
|
|
|
22
21
|
export type PxToRemOptions = {
|
|
23
22
|
rootValue?: number;
|
|
24
23
|
minPixelValue?: number;
|
|
25
|
-
skipUppercasePx?: boolean;
|
|
26
24
|
excludeSelectors?: {
|
|
27
25
|
type: string;
|
|
28
26
|
name: RegExp | string;
|
|
29
27
|
}[];
|
|
28
|
+
excludeUnit?: string;
|
|
30
29
|
};
|
|
31
30
|
export declare function createPxToRemVisitor(options?: PxToRemOptions): {
|
|
32
31
|
Selector(selectors: import("lightningcss").Selector): void;
|
|
32
|
+
Token: {
|
|
33
|
+
dimension(token: {
|
|
34
|
+
type: "dimension";
|
|
35
|
+
unit: string;
|
|
36
|
+
value: number;
|
|
37
|
+
}): {
|
|
38
|
+
type: "length";
|
|
39
|
+
value: {
|
|
40
|
+
unit: "px";
|
|
41
|
+
value: number;
|
|
42
|
+
};
|
|
43
|
+
} | undefined;
|
|
44
|
+
};
|
|
33
45
|
Length(length: import("lightningcss").LengthValue): {
|
|
34
46
|
unit: "rem";
|
|
35
47
|
value: number;
|
|
48
|
+
} | {
|
|
49
|
+
unit: "px";
|
|
50
|
+
value: number;
|
|
36
51
|
} | undefined;
|
|
37
52
|
};
|
|
38
53
|
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CustomAtRules, LengthValue, Selector, Visitor } from 'lightningcss';
|
|
2
|
+
export type ExcludeSelectorsType = {
|
|
3
|
+
type: string;
|
|
4
|
+
name: RegExp | string;
|
|
5
|
+
};
|
|
6
|
+
interface Options {
|
|
7
|
+
designWidth: number;
|
|
8
|
+
minPixelValue: number;
|
|
9
|
+
/**
|
|
10
|
+
* 屏蔽选择器 [{type: 'class', name: 'cssModule'}]
|
|
11
|
+
* @default []
|
|
12
|
+
*/
|
|
13
|
+
excludeSelectors: ExcludeSelectorsType[];
|
|
14
|
+
transformUnit: 'vw' | 'rem' | '';
|
|
15
|
+
/**
|
|
16
|
+
* 屏蔽单位 大小写无法区分 只支持 -px 等横杠
|
|
17
|
+
* @default -px
|
|
18
|
+
*/
|
|
19
|
+
excludeUnit: string;
|
|
20
|
+
rootValue: number;
|
|
21
|
+
}
|
|
22
|
+
export type vwOptions = Partial<Options>;
|
|
23
|
+
export type remOptions = Partial<Options>;
|
|
24
|
+
export type ExcludeItemType = {
|
|
25
|
+
type: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
};
|
|
28
|
+
export declare class UnitTramsform {
|
|
29
|
+
private skipSelector;
|
|
30
|
+
private skipVal;
|
|
31
|
+
private isExclude;
|
|
32
|
+
private isDebug;
|
|
33
|
+
op: Options;
|
|
34
|
+
debug(...args: any[]): void;
|
|
35
|
+
Selector: (selectors: Selector) => void;
|
|
36
|
+
Token: any;
|
|
37
|
+
Length: Visitor<CustomAtRules>['Length'];
|
|
38
|
+
pxToRem(options?: remOptions): {
|
|
39
|
+
Selector: (selectors: Selector) => void;
|
|
40
|
+
Token: any;
|
|
41
|
+
Length: ((length: LengthValue) => void | LengthValue) | undefined;
|
|
42
|
+
};
|
|
43
|
+
pxToVw(options: vwOptions): {
|
|
44
|
+
Selector: (selectors: Selector) => void;
|
|
45
|
+
Token: any;
|
|
46
|
+
Length: ((length: LengthValue) => void | LengthValue) | undefined;
|
|
47
|
+
};
|
|
48
|
+
excludeFilter(excludes: ExcludeSelectorsType[]): (item: ExcludeItemType) => boolean;
|
|
49
|
+
}
|
|
50
|
+
declare const _default: UnitTramsform;
|
|
51
|
+
export default _default;
|
package/package.json
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empjs/plugin-lightningcss",
|
|
3
|
-
"version": "3.0.0-rc.
|
|
3
|
+
"version": "3.0.0-rc.8",
|
|
4
4
|
"description": "emp v3 lightningcss",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"files": [
|
|
9
|
-
|
|
10
|
-
],
|
|
11
|
-
"maintainers": [
|
|
12
|
-
"xuhongbin",
|
|
13
|
-
"ckken"
|
|
14
|
-
],
|
|
8
|
+
"files": ["dist"],
|
|
9
|
+
"maintainers": ["xuhongbin", "ckken"],
|
|
15
10
|
"repository": {
|
|
16
11
|
"type": "git",
|
|
17
12
|
"url": "git+https://github.com/empjs/emp.git",
|
|
@@ -47,4 +42,4 @@
|
|
|
47
42
|
"rimraf": "^5.0.5",
|
|
48
43
|
"tsc-alias": "^1.8.8"
|
|
49
44
|
}
|
|
50
|
-
}
|
|
45
|
+
}
|