weapp-tailwindcss 4.0.0-alpha.8 → 4.0.0

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.
Files changed (57) hide show
  1. package/dist/{chunk-LQTX4UOG.js → chunk-AHF73IRB.js} +2 -2
  2. package/dist/{chunk-W3O6VH4H.js → chunk-DXVFKGNL.js} +2 -2
  3. package/dist/{chunk-M46SZJAU.mjs → chunk-HI4MB6DS.mjs} +3 -3
  4. package/dist/{chunk-NOJXTM75.mjs → chunk-M5OLCGMK.mjs} +3 -3
  5. package/dist/{chunk-5CLZ2D6F.js → chunk-P3IRFH3E.js} +21 -19
  6. package/dist/{chunk-U7O2XXYR.mjs → chunk-PCBSAFQF.mjs} +2 -2
  7. package/dist/{chunk-3CGOYSLC.js → chunk-PZFXLVE2.js} +2 -2
  8. package/dist/{chunk-Y4EU4S4H.mjs → chunk-RHTRRSP3.mjs} +2 -2
  9. package/dist/{chunk-ULHA32LG.mjs → chunk-UJFSOSOM.mjs} +3 -3
  10. package/dist/{chunk-HRK65AE5.mjs → chunk-W3GZOMW4.mjs} +16 -14
  11. package/dist/{chunk-RFNUATFD.js → chunk-WGQLZ5K4.js} +1 -1
  12. package/dist/{chunk-6LFESXEB.js → chunk-YUXG2EJF.js} +1 -1
  13. package/dist/cli.js +5 -5
  14. package/dist/cli.mjs +5 -5
  15. package/dist/core.d.mts +1 -0
  16. package/dist/core.d.ts +1 -0
  17. package/dist/core.js +4 -4
  18. package/dist/core.mjs +5 -5
  19. package/dist/defaults.d.mts +1 -0
  20. package/dist/defaults.d.ts +1 -0
  21. package/dist/defaults.js +2 -2
  22. package/dist/defaults.mjs +1 -1
  23. package/dist/escape.d.mts +1 -0
  24. package/dist/escape.d.ts +1 -0
  25. package/dist/escape.js +2 -2
  26. package/dist/escape.mjs +1 -1
  27. package/dist/gulp.d.mts +1 -0
  28. package/dist/gulp.d.ts +1 -0
  29. package/dist/gulp.js +5 -5
  30. package/dist/gulp.mjs +4 -4
  31. package/dist/index.d.mts +1 -0
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.js +7 -7
  34. package/dist/index.mjs +6 -6
  35. package/dist/types.d.mts +233 -219
  36. package/dist/types.d.ts +233 -219
  37. package/dist/vite.d.mts +2 -1
  38. package/dist/vite.d.ts +2 -1
  39. package/dist/vite.js +5 -5
  40. package/dist/vite.mjs +4 -4
  41. package/dist/weapp-tw-runtime-loader.js +1 -3
  42. package/dist/webpack.d.mts +2 -1
  43. package/dist/webpack.d.ts +2 -1
  44. package/dist/webpack.js +5 -5
  45. package/dist/webpack.mjs +4 -4
  46. package/dist/webpack4.d.mts +2 -1
  47. package/dist/webpack4.d.ts +2 -1
  48. package/dist/webpack4.js +4 -4
  49. package/dist/webpack4.mjs +5 -5
  50. package/index.css +5 -0
  51. package/package.json +27 -12
  52. package/preflight.css +16 -0
  53. package/theme.css +450 -0
  54. package/utilities.css +1 -0
  55. package/dist/weapp-tw-runtime-loader.d.mts +0 -7
  56. package/dist/weapp-tw-runtime-loader.d.ts +0 -7
  57. package/dist/weapp-tw-runtime-loader.mjs +0 -14
package/dist/index.js CHANGED
@@ -1,22 +1,22 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-FXPGR372.js');
2
2
 
3
3
 
4
- var _chunkW3O6VH4Hjs = require('./chunk-W3O6VH4H.js');
4
+ var _chunkDXVFKGNLjs = require('./chunk-DXVFKGNL.js');
5
5
 
6
6
 
7
- var _chunk3CGOYSLCjs = require('./chunk-3CGOYSLC.js');
7
+ var _chunkPZFXLVE2js = require('./chunk-PZFXLVE2.js');
8
8
 
9
9
 
10
- var _chunkLQTX4UOGjs = require('./chunk-LQTX4UOG.js');
10
+ var _chunkAHF73IRBjs = require('./chunk-AHF73IRB.js');
11
11
  require('./chunk-HBQASQKY.js');
12
12
  require('./chunk-N62XM3T3.js');
13
- require('./chunk-5CLZ2D6F.js');
14
- require('./chunk-RFNUATFD.js');
15
- require('./chunk-6LFESXEB.js');
13
+ require('./chunk-P3IRFH3E.js');
14
+ require('./chunk-WGQLZ5K4.js');
15
+ require('./chunk-YUXG2EJF.js');
16
16
  require('./chunk-35CYTBPM.js');
17
17
  require('./chunk-6FNC3XMI.js');
18
18
 
19
19
 
20
20
 
21
21
 
22
- exports.UnifiedViteWeappTailwindcssPlugin = _chunkLQTX4UOGjs.UnifiedViteWeappTailwindcssPlugin; exports.UnifiedWebpackPluginV5 = _chunkW3O6VH4Hjs.UnifiedWebpackPluginV5; exports.createPlugins = _chunk3CGOYSLCjs.createPlugins;
22
+ exports.UnifiedViteWeappTailwindcssPlugin = _chunkAHF73IRBjs.UnifiedViteWeappTailwindcssPlugin; exports.UnifiedWebpackPluginV5 = _chunkDXVFKGNLjs.UnifiedWebpackPluginV5; exports.createPlugins = _chunkPZFXLVE2js.createPlugins;
package/dist/index.mjs CHANGED
@@ -1,18 +1,18 @@
1
1
  import "./chunk-LOLJLZCX.mjs";
2
2
  import {
3
3
  UnifiedWebpackPluginV5
4
- } from "./chunk-ULHA32LG.mjs";
4
+ } from "./chunk-UJFSOSOM.mjs";
5
5
  import {
6
6
  createPlugins
7
- } from "./chunk-NOJXTM75.mjs";
7
+ } from "./chunk-M5OLCGMK.mjs";
8
8
  import {
9
9
  UnifiedViteWeappTailwindcssPlugin
10
- } from "./chunk-M46SZJAU.mjs";
10
+ } from "./chunk-HI4MB6DS.mjs";
11
11
  import "./chunk-75EWCRQW.mjs";
12
12
  import "./chunk-HL6Y5PYZ.mjs";
13
- import "./chunk-HRK65AE5.mjs";
14
- import "./chunk-U7O2XXYR.mjs";
15
- import "./chunk-Y4EU4S4H.mjs";
13
+ import "./chunk-W3GZOMW4.mjs";
14
+ import "./chunk-PCBSAFQF.mjs";
15
+ import "./chunk-RHTRRSP3.mjs";
16
16
  import "./chunk-MUJ65IQ3.mjs";
17
17
  import "./chunk-AXBFBHS2.mjs";
18
18
  export {
package/dist/types.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { ParseError, ParserOptions } from '@babel/parser';
2
- import { IMangleScopeContext, IMangleOptions } from '@weapp-tailwindcss/mangle';
1
+ import { ParserOptions, ParseError } from '@babel/parser';
2
+ import { IMangleOptions, IMangleScopeContext } from '@weapp-tailwindcss/mangle';
3
3
  export { IMangleScopeContext } from '@weapp-tailwindcss/mangle';
4
4
  import { CssPreflightOptions, LoadedPostcssOptions, CustomRuleCallback, IStyleHandlerOptions } from '@weapp-tailwindcss/postcss';
5
5
  export { CssPreflightOptions, IStyleHandlerOptions } from '@weapp-tailwindcss/postcss';
@@ -9,6 +9,7 @@ import { ILengthUnitsPatchOptions, TailwindcssPatcher } from 'tailwindcss-patch'
9
9
  import { Buffer } from 'node:buffer';
10
10
  import { sources } from 'webpack';
11
11
  import { LRUCache } from 'lru-cache';
12
+ import { pluginOptions } from 'postcss-preset-env';
12
13
 
13
14
  interface HashMapValue {
14
15
  hash: string;
@@ -36,51 +37,164 @@ interface ICreateCacheReturnType {
36
37
  }>) => void | Promise<void>;
37
38
  }
38
39
 
39
- type ItemOrItemArray<T> = T | T[];
40
-
41
- type AppType = 'uni-app' | 'uni-app-vite' | 'taro' | 'remax' | 'rax' | 'native' | 'kbone' | 'mpx' | 'weapp-vite';
42
- interface InternalCssSelectorReplacerOptions {
43
- mangleContext?: IMangleScopeContext;
44
- escapeMap?: Record<string, string>;
45
- }
46
- interface JsHandlerResult {
47
- code: string;
48
- map?: SourceMap;
49
- error?: ParseError;
50
- }
51
- type ICustomAttributes = Record<string, ItemOrItemArray<string | RegExp>> | Map<string | RegExp, ItemOrItemArray<string | RegExp>>;
52
- type ICustomAttributesEntities = [string | RegExp, ItemOrItemArray<string | RegExp>][];
53
- interface IJsHandlerOptions {
54
- escapeMap?: Record<string, string>;
55
- classNameSet?: Set<string>;
56
- arbitraryValues?: IArbitraryValues;
57
- mangleContext?: IMangleScopeContext;
58
- jsPreserveClass?: (keyword: string) => boolean | undefined;
59
- needEscaped?: boolean;
60
- generateMap?: boolean;
61
- alwaysEscape?: boolean;
40
+ interface UserDefinedOptions {
41
+ /**
42
+ * @group 0.重要配置
43
+ * @description 是否禁用此插件,一般用于构建到多平台时使用,比如小程序时不传,非小程序环境(h5,app)传入一个 `true`
44
+ */
45
+ disabled?: boolean;
46
+ /**
47
+ * @group 0.重要配置
48
+ * @description **这是一个重要的配置!**
49
+
50
+ 它可以自定义`wxml`标签上的`attr`转化属性。默认转化所有的`class`和`hover-class`,这个`Map`的 `key`为匹配标签,`value`为属性字符串或者匹配正则数组。
51
+
52
+ 如果你想要增加,对于所有标签都生效的转化的属性,你可以添加 `*`: `(string | Regexp)[]` 这样的键值对。(`*` 是一个特殊值,代表所有标签)
53
+
54
+ 更复杂的情况,可以传一个 `Map<string | Regex, (string | Regex)[]>`实例。
55
+
56
+ 假如你要把 `className` 通过组件的`prop`传递给子组件,又或者想要自定义转化的标签属性时,需要用到此配置,案例详见:[issue#129](https://github.com/sonofmagic/weapp-tailwindcss/issues/129#issuecomment-1340914688),[issue#134](https://github.com/sonofmagic/weapp-tailwindcss/issues/134#issuecomment-1351288238)
57
+
58
+ @example
59
+
60
+ ```js
61
+ const customAttributes = {
62
+ // 匹配所有带 Class / class 相关的标签,比如某个组件上的 `a-class`, `testClass` , `custom-class` 里面的值
63
+ '*': [ /[A-Za-z]?[A-Za-z-]*[Cc]lass/ ],
64
+ // 额外匹配转化 `van-image` 标签上属性为 `custom-class` 的值
65
+ 'van-image': ['custom-class'],
66
+ // 转化所有 `ice-button` 标签上属性为 `testClass` 的值
67
+ 'ice-button': ['testClass']
68
+ }
69
+ ```
70
+
71
+ 当然你可以根据自己的需求,定义单个或者多个正则/字符串。
72
+
73
+ 甚至有可能你编写正则表达式,它们匹配的范围,直接包括了插件里自带默认的 `class`/`hover-class`,那么这种情况下,你完全可以取代插件的默认模板转化器,开启 [disabledDefaultTemplateHandler](/docs/api/interfaces/UserDefinedOptions#disableddefaulttemplatehandler) 配置项,禁用默认的模版匹配转化器。
74
+ */
75
+ customAttributes?: ICustomAttributes;
76
+ /**
77
+ * @group 0.重要配置
78
+ * @description 自定义转化class名称字典,这个配置项用来自定义转化`class`名称字典,你可以使用这个选项来简化生成的`class`
79
+ - 默认模式: 把小程序中不允许的字符串,转义为**相等长度**的代替字符串,这种情况不追求转化目标字符串的一比一绝对等价,即无法从生成结果,反推原先的`class`
80
+
81
+ 当然,你也可以自定义,传一个 `Record<string, string>` 类型,只需保证转化后 css 中的 `class` 选择器,不会和自己定义的 `class` 产生冲突即可,示例见[dic.ts](https://github.com/sonofmagic/weapp-core/blob/main/packages/escape/src/dic.ts)
82
+ * @default MappingChars2String
83
+ */
84
+ customReplaceDictionary?: Record<string, string>;
85
+ /**
86
+ * @version `^3.1.0`
87
+ * @group 0.重要配置
88
+ * @description 对解析 js 使用的 ast 工具,默认情况使用 `babel`,可以通过安装 `@ast-grep/napi`,同时启用 `ast-grep` 配置项,来启用 `ast-grep` 来处理 `js`,速度会是 `babel` 的 `2` 倍左右
89
+ */
62
90
  jsAstTool?: 'babel' | 'ast-grep';
63
- unescapeUnicode?: boolean;
64
- babelParserOptions?: ParserOptions;
91
+ /**
92
+ * @version `^4.0.0`
93
+ * @group 0.重要配置
94
+ * @description js 忽略标签模板表达式中的标识符,这样使用标识符包裹的模板字符串不会被转义
95
+ * @default ['weappTwIgnore']
96
+ */
65
97
  ignoreTaggedTemplateExpressionIdentifiers?: (string | RegExp)[];
98
+ /**
99
+ * @version `^4.0.0`
100
+ * @group 0.重要配置
101
+ * @description js 忽略调用表达式中的标识符,这样使用这个方法,包裹的模板字符串和字符串字面量不会被转义,一般用来配合 `@weapp-tailwindcss/merge` 使用,比如设置为 `['twMerge', 'twJoin', 'cva']`
102
+ */
66
103
  ignoreCallExpressionIdentifiers?: (string | RegExp)[];
67
- }
68
- interface IArbitraryValues {
69
104
  /**
70
- * 是否允许在类名里,使用双引号。
71
- * 建议不要开启,因为有些框架,比如 `vue3` 它针对有些静态模板会直接编译成 `html` 字符串,此时开启这个配置很有可能导致转义出错
72
- *
73
- * @example
74
- * ```html
75
- * <!-- 开启前默认只允许单引号 -->
76
- * <view class="after:content-['对酒当歌,人生几何']"></view>
77
- * <!-- 开启后 -->
78
- * <view class="after:content-[\"对酒当歌,人生几何\"]"></view>
105
+ * @group 0.重要配置
106
+ * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/7
107
+ * @description 在所有 view节点添加的 css 预设,可根据情况自由的禁用原先的规则,或者添加新的规则。默认预置 `css` 同 `tailwindcss` 类似,详细用法如下:
108
+ * ```js
109
+ * // default 默认,这代表会添加给所有的 view / text 元素, 受到 cssPreflightRange 配置项影响 :
110
+ cssPreflight: {
111
+ 'box-sizing': 'border-box',
112
+ 'border-width': '0',
113
+ 'border-style': 'solid',
114
+ 'border-color': 'currentColor'
115
+ }
116
+ // result
117
+ // box-sizing: border-box;
118
+ // border-width: 0;
119
+ // border-style: solid;
120
+ // border-color: currentColor
121
+
122
+ // case 禁用所有
123
+ cssPreflight: false
124
+ // result
125
+ // none
126
+
127
+ // case 禁用单个属性
128
+ cssPreflight: {
129
+ 'box-sizing': false
130
+ }
131
+ // border-width: 0;
132
+ // border-style: solid;
133
+ // border-color: currentColor
134
+
135
+ // case 更改和添加单个属性
136
+ cssPreflight: {
137
+ 'box-sizing': 'content-box',
138
+ 'background': 'black'
139
+ }
140
+ // result
141
+ // box-sizing: content-box;
142
+ // border-width: 0;
143
+ // border-style: solid;
144
+ // border-color: currentColor;
145
+ // background: black
79
146
  * ```
147
+ */
148
+ cssPreflight?: CssPreflightOptions;
149
+ /**
150
+ * @group 0.重要配置
151
+ * @issue https://github.com/sonofmagic/weapp-tailwindcss/pull/62
152
+ * @description 全局`dom`选择器,只有在这个选择器作用范围内的`dom`会被注入 `cssPreflight` 的变量和默认样式。只对所有的 `view`,`text` 和伪元素生效,想要对所有的元素生效,可切换为 `'all'`,此时需要自行处理和客户端默认样式的冲突
153
+ */
154
+ cssPreflightRange?: 'all';
155
+ /**
156
+ * @group 0.重要配置
157
+ * @version `^2.6.0`
158
+ * @description 是否注入额外的 `tailwindcss css var scope` 区域,这个选项用于这样的场景
80
159
  *
81
- * @default `false`
160
+ * 比如 `taro vue3` 使用 [NutUI](https://nutui.jd.com), 需要使用 `@tarojs/plugin-html`,而这个插件会启用 `postcss-html-transform` 从而移除所有带 `*` 选择器
161
+ *
162
+ * 这会导致 `tailwindcss css var scope` 区域被移除导致一些样式,比如渐变等等功能失效
163
+ *
164
+ * 这种场景下,启用这个选项会再次重新注入整个 `tailwindcss css var scope`
165
+ *
166
+ * @default false
82
167
  */
83
- allowDoubleQuotes?: boolean;
168
+ injectAdditionalCssVarScope?: boolean;
169
+ /**
170
+ * @group 0.重要配置
171
+ * @description 用于处理 css 选择器的替换规则
172
+ */
173
+ cssSelectorReplacement?: {
174
+ /**
175
+ * @default `'page'` <br/>
176
+ * @description 把`css`中的全局选择器 **`:root`** 替换为指定值,默认替换为 `'page'`,设置为 `false` 时不进行替换
177
+ */
178
+ root?: string | string[] | false;
179
+ /**
180
+ * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/81 <br/>
181
+ * @default `['view','text']` <br/>
182
+ * @description 把`css`中的全局选择器 **`*`** 替换为指定值,默认替换为 `'view','text'`,设置为 `false` 时不进行替换,此时小程序会由于不认识`*`选择器而报错
183
+ */
184
+ universal?: string | string[] | false;
185
+ };
186
+ /**
187
+ * @version `^3.0.0`
188
+ * @group 0.重要配置
189
+ * @description rem 转 rpx 配置,默认为 `undefined` 不开启,可传入 `true` 启用默认配置项,也可传入自定义配置项,配置项列表见 [postcss-rem-to-responsive-pixel](https://www.npmjs.com/package/postcss-rem-to-responsive-pixel)
190
+ */
191
+ rem2rpx?: boolean | UserDefinedOptions;
192
+ /**
193
+ * @version `^4.0.0`
194
+ * @group 0.重要配置
195
+ * @description postcss-preset-env 的入参数
196
+ */
197
+ cssPresetEnv?: pluginOptions;
84
198
  }
85
199
  interface UserDefinedOptions {
86
200
  /**
@@ -105,10 +219,37 @@ interface UserDefinedOptions {
105
219
  */
106
220
  mainCssChunkMatcher?: (name: string, appType?: AppType) => boolean;
107
221
  /**
108
- * @group 0.重要配置
109
- * @description 是否禁用此插件,一般用于构建到多平台时使用,比如小程序时不传,非小程序环境(h5,app)传入一个 `true`
222
+ * @group 1.文件匹配
223
+ * @experiment 实验性质,有可能会改变
224
+ * @description 各个平台 `wxs` 文件的匹配方法,可以设置为包括微信的 .wxs,支付宝的 .sjs 和 百度小程序的 .filter.js
225
+ * > tip: 记得在 `tailwind.config.js` 中,把 `wxs` 这个格式加入 `content` 配置项,不然不会生效
226
+ * @default ()=>false
110
227
  */
111
- disabled?: boolean;
228
+ wxsMatcher?: (name: string) => boolean;
229
+ /**
230
+ * @group 1.文件匹配
231
+ * @experiment 实验性质,有可能会改变
232
+ * @description 是否转义 `wxml` 中内联的 `wxs`
233
+ * > tip: 记得在 `tailwind.config.js` 中,把 `wxs` 这个格式加入 `content` 配置项,不然不会生效
234
+ * @example
235
+ * ```html
236
+ * <!-- index.wxml -->
237
+ * <wxs module="inline">
238
+ // 我是内联wxs
239
+ // 下方的类名会被转义
240
+ var className = "after:content-['我是className']"
241
+ module.exports = {
242
+ className: className
243
+ }
244
+ </wxs>
245
+ <wxs src="./index.wxs" module="outside"/>
246
+ <view><view class="{{inline.className}}"></view><view class="{{outside.className}}"></view></view>
247
+ * ```
248
+ * @default false
249
+ */
250
+ inlineWxs?: boolean;
251
+ }
252
+ interface UserDefinedOptions {
112
253
  /**
113
254
  * @group 2.生命周期
114
255
  * @description plugin apply 初调用
@@ -132,45 +273,8 @@ interface UserDefinedOptions {
132
273
  * @description 结束处理时调用
133
274
  */
134
275
  onEnd?: () => void;
135
- /**
136
- * @group 0.重要配置
137
- * @description **这是一个重要的配置!**
138
-
139
- 它可以自定义`wxml`标签上的`attr`转化属性。默认转化所有的`class`和`hover-class`,这个`Map`的 `key`为匹配标签,`value`为属性字符串或者匹配正则数组。
140
-
141
- 如果你想要增加,对于所有标签都生效的转化的属性,你可以添加 `*`: `(string | Regexp)[]` 这样的键值对。(`*` 是一个特殊值,代表所有标签)
142
-
143
- 更复杂的情况,可以传一个 `Map<string | Regex, (string | Regex)[]>`实例。
144
-
145
- 假如你要把 `className` 通过组件的`prop`传递给子组件,又或者想要自定义转化的标签属性时,需要用到此配置,案例详见:[issue#129](https://github.com/sonofmagic/weapp-tailwindcss/issues/129#issuecomment-1340914688),[issue#134](https://github.com/sonofmagic/weapp-tailwindcss/issues/134#issuecomment-1351288238)
146
-
147
- @example
148
-
149
- ```js
150
- const customAttributes = {
151
- // 匹配所有带 Class / class 相关的标签,比如某个组件上的 `a-class`, `testClass` , `custom-class` 里面的值
152
- '*': [ /[A-Za-z]?[A-Za-z-]*[Cc]lass/ ],
153
- // 额外匹配转化 `van-image` 标签上属性为 `custom-class` 的值
154
- 'van-image': ['custom-class'],
155
- // 转化所有 `ice-button` 标签上属性为 `testClass` 的值
156
- 'ice-button': ['testClass']
157
- }
158
- ```
159
-
160
- 当然你可以根据自己的需求,定义单个或者多个正则/字符串。
161
-
162
- 甚至有可能你编写正则表达式,它们匹配的范围,直接包括了插件里自带默认的 `class`/`hover-class`,那么这种情况下,你完全可以取代插件的默认模板转化器,开启 [disabledDefaultTemplateHandler](/docs/api/interfaces/UserDefinedOptions#disableddefaulttemplatehandler) 配置项,禁用默认的模版匹配转化器。
163
- */
164
- customAttributes?: ICustomAttributes;
165
- /**
166
- * @group 0.重要配置
167
- * @description 自定义转化class名称字典,这个配置项用来自定义转化`class`名称字典,你可以使用这个选项来简化生成的`class`
168
- - 默认模式: 把小程序中不允许的字符串,转义为**相等长度**的代替字符串,这种情况不追求转化目标字符串的一比一绝对等价,即无法从生成结果,反推原先的`class`
169
-
170
- 当然,你也可以自定义,传一个 `Record<string, string>` 类型,只需保证转化后 css 中的 `class` 选择器,不会和自己定义的 `class` 产生冲突即可,示例见[dic.ts](https://github.com/sonofmagic/weapp-core/blob/main/packages/escape/src/dic.ts)
171
- * @default SimpleMappingChars2String
172
- */
173
- customReplaceDictionary?: Record<string, string>;
276
+ }
277
+ interface UserDefinedOptions {
174
278
  /**
175
279
  * @group 3.一般配置
176
280
  * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/110
@@ -202,36 +306,6 @@ interface UserDefinedOptions {
202
306
  * @description 针对 tailwindcss arbitrary values 的一些配置
203
307
  */
204
308
  arbitraryValues?: IArbitraryValues;
205
- /**
206
- * @group 1.文件匹配
207
- * @experiment 实验性质,有可能会改变
208
- * @description 各个平台 `wxs` 文件的匹配方法,可以设置为包括微信的 .wxs,支付宝的 .sjs 和 百度小程序的 .filter.js
209
- * > tip: 记得在 `tailwind.config.js` 中,把 `wxs` 这个格式加入 `content` 配置项,不然不会生效
210
- * @default ()=>false
211
- */
212
- wxsMatcher?: (name: string) => boolean;
213
- /**
214
- * @group 1.文件匹配
215
- * @experiment 实验性质,有可能会改变
216
- * @description 是否转义 `wxml` 中内联的 `wxs`
217
- * > tip: 记得在 `tailwind.config.js` 中,把 `wxs` 这个格式加入 `content` 配置项,不然不会生效
218
- * @example
219
- * ```html
220
- * <!-- index.wxml -->
221
- * <wxs module="inline">
222
- // 我是内联wxs
223
- // 下方的类名会被转义
224
- var className = "after:content-['我是className']"
225
- module.exports = {
226
- className: className
227
- }
228
- </wxs>
229
- <wxs src="./index.wxs" module="outside"/>
230
- <view><view class="{{inline.className}}"></view><view class="{{outside.className}}"></view></view>
231
- * ```
232
- * @default false
233
- */
234
- inlineWxs?: boolean;
235
309
  /**
236
310
  * @group 3.一般配置
237
311
  * @version `^2.6.1`
@@ -265,82 +339,12 @@ interface UserDefinedOptions {
265
339
  * @description 缓存策略
266
340
  */
267
341
  cache?: boolean | ICreateCacheReturnType;
268
- /**
269
- * @version `^3.1.0`
270
- * @group 0.重要配置
271
- * @description 对解析 js 使用的 ast 工具,默认情况使用 `babel`,可以通过安装 `@ast-grep/napi`,同时启用 `ast-grep` 配置项,来启用 `ast-grep` 来处理 `js`,速度会是 `babel` 的 `2` 倍左右
272
- */
273
- jsAstTool?: 'babel' | 'ast-grep';
274
342
  /**
275
343
  * @version `^3.2.0`
276
344
  * @group 3.一般配置
277
345
  * @description 对解析 js 使用的 `@babel/parser` 工具的配置
278
346
  */
279
347
  babelParserOptions?: ParserOptions;
280
- /**
281
- * @version `^4.0.0`
282
- * @group 0.重要配置
283
- * @description js 忽略标签模板表达式中的标识符,这样使用标识符包裹的模板字符串不会被转义
284
- * @default ['weappTwIgnore']
285
- */
286
- ignoreTaggedTemplateExpressionIdentifiers?: (string | RegExp)[];
287
- /**
288
- * @version `^4.0.0`
289
- * @group 0.重要配置
290
- * @description js 忽略调用表达式中的标识符,这样使用这个方法,包裹的模板字符串和字符串字面量不会被转义,一般用来配合 `@weapp-tailwindcss/merge` 使用,比如设置为 `['twMerge', 'twJoin', 'cva']`
291
- */
292
- ignoreCallExpressionIdentifiers?: (string | RegExp)[];
293
- /**
294
- * @group 0.重要配置
295
- * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/7
296
- * @description 在所有 view节点添加的 css 预设,可根据情况自由的禁用原先的规则,或者添加新的规则。默认预置 `css` 同 `tailwindcss` 类似,详细用法如下:
297
- * ```js
298
- * // default 默认,这代表会添加给所有的 view / text 元素, 受到 cssPreflightRange 配置项影响 :
299
- cssPreflight: {
300
- 'box-sizing': 'border-box',
301
- 'border-width': '0',
302
- 'border-style': 'solid',
303
- 'border-color': 'currentColor'
304
- }
305
- // result
306
- // box-sizing: border-box;
307
- // border-width: 0;
308
- // border-style: solid;
309
- // border-color: currentColor
310
-
311
- // case 禁用所有
312
- cssPreflight: false
313
- // result
314
- // none
315
-
316
- // case 禁用单个属性
317
- cssPreflight: {
318
- 'box-sizing': false
319
- }
320
- // border-width: 0;
321
- // border-style: solid;
322
- // border-color: currentColor
323
-
324
- // case 更改和添加单个属性
325
- cssPreflight: {
326
- 'box-sizing': 'content-box',
327
- 'background': 'black'
328
- }
329
- // result
330
- // box-sizing: content-box;
331
- // border-width: 0;
332
- // border-style: solid;
333
- // border-color: currentColor;
334
- // background: black
335
- * ```
336
- */
337
- cssPreflight?: CssPreflightOptions;
338
- /**
339
- * @group 0.重要配置
340
- * @issue https://github.com/sonofmagic/weapp-tailwindcss/pull/62
341
- * @description 全局`dom`选择器,只有在这个选择器作用范围内的`dom`会被注入 `cssPreflight` 的变量和默认样式。只对所有的 `view`,`text` 和伪元素生效,想要对所有的元素生效,可切换为 `'all'`,此时需要自行处理和客户端默认样式的冲突
342
- */
343
- cssPreflightRange?: 'all';
344
348
  /**
345
349
  * @group 3.一般配置
346
350
  * @description 用于控制 tailwindcss 子组合器的生效标签范围, 这里我们用一个例子来说明这个配置是干啥用的.
@@ -370,43 +374,6 @@ interface UserDefinedOptions {
370
374
  * @default 'view + view'
371
375
  */
372
376
  cssChildCombinatorReplaceValue?: string | string[];
373
- /**
374
- * @group 0.重要配置
375
- * @version `^2.6.0`
376
- * @description 是否注入额外的 `tailwindcss css var scope` 区域,这个选项用于这样的场景
377
- *
378
- * 比如 `taro vue3` 使用 [NutUI](https://nutui.jd.com), 需要使用 `@tarojs/plugin-html`,而这个插件会启用 `postcss-html-transform` 从而移除所有带 `*` 选择器
379
- *
380
- * 这会导致 `tailwindcss css var scope` 区域被移除导致一些样式,比如渐变等等功能失效
381
- *
382
- * 这种场景下,启用这个选项会再次重新注入整个 `tailwindcss css var scope`
383
- *
384
- * @default false
385
- */
386
- injectAdditionalCssVarScope?: boolean;
387
- /**
388
- * @group 0.重要配置
389
- * @description 用于处理 css 选择器的替换规则
390
- */
391
- cssSelectorReplacement?: {
392
- /**
393
- * @default `'page'` <br/>
394
- * @description 把`css`中的全局选择器 **`:root`** 替换为指定值,默认替换为 `'page'`,设置为 `false` 时不进行替换
395
- */
396
- root?: string | string[] | false;
397
- /**
398
- * @issue https://github.com/sonofmagic/weapp-tailwindcss/issues/81 <br/>
399
- * @default `['view','text']` <br/>
400
- * @description 把`css`中的全局选择器 **`*`** 替换为指定值,默认替换为 `'view','text'`,设置为 `false` 时不进行替换,此时小程序会由于不认识`*`选择器而报错
401
- */
402
- universal?: string | string[] | false;
403
- };
404
- /**
405
- * @version `^3.0.0`
406
- * @group 0.重要配置
407
- * @description rem 转 rpx 配置,默认为 `undefined` 不开启,可传入 `true` 启用默认配置项,也可传入自定义配置项,配置项列表见 [postcss-rem-to-responsive-pixel](https://www.npmjs.com/package/postcss-rem-to-responsive-pixel)
408
- */
409
- rem2rpx?: boolean | UserDefinedOptions;
410
377
  /**
411
378
  * @version `^3.2.0`
412
379
  * @group 3.一般配置
@@ -427,6 +394,53 @@ interface UserDefinedOptions {
427
394
  */
428
395
  customRuleCallback?: CustomRuleCallback;
429
396
  }
397
+
398
+ type ItemOrItemArray<T> = T | T[];
399
+
400
+ type AppType = 'uni-app' | 'uni-app-vite' | 'taro' | 'remax' | 'rax' | 'native' | 'kbone' | 'mpx' | 'weapp-vite';
401
+ interface InternalCssSelectorReplacerOptions {
402
+ mangleContext?: IMangleScopeContext;
403
+ escapeMap?: Record<string, string>;
404
+ }
405
+ interface JsHandlerResult {
406
+ code: string;
407
+ map?: SourceMap;
408
+ error?: ParseError;
409
+ }
410
+ type ICustomAttributes = Record<string, ItemOrItemArray<string | RegExp>> | Map<string | RegExp, ItemOrItemArray<string | RegExp>>;
411
+ type ICustomAttributesEntities = [string | RegExp, ItemOrItemArray<string | RegExp>][];
412
+ interface IJsHandlerOptions {
413
+ escapeMap?: Record<string, string>;
414
+ classNameSet?: Set<string>;
415
+ arbitraryValues?: IArbitraryValues;
416
+ mangleContext?: IMangleScopeContext;
417
+ jsPreserveClass?: (keyword: string) => boolean | undefined;
418
+ needEscaped?: boolean;
419
+ generateMap?: boolean;
420
+ alwaysEscape?: boolean;
421
+ jsAstTool?: 'babel' | 'ast-grep';
422
+ unescapeUnicode?: boolean;
423
+ babelParserOptions?: ParserOptions;
424
+ ignoreTaggedTemplateExpressionIdentifiers?: (string | RegExp)[];
425
+ ignoreCallExpressionIdentifiers?: (string | RegExp)[];
426
+ }
427
+ interface IArbitraryValues {
428
+ /**
429
+ * 是否允许在类名里,使用双引号。
430
+ * 建议不要开启,因为有些框架,比如 `vue3` 它针对有些静态模板会直接编译成 `html` 字符串,此时开启这个配置很有可能导致转义出错
431
+ *
432
+ * @example
433
+ * ```html
434
+ * <!-- 开启前默认只允许单引号 -->
435
+ * <view class="after:content-['对酒当歌,人生几何']"></view>
436
+ * <!-- 开启后 -->
437
+ * <view class="after:content-[\"对酒当歌,人生几何\"]"></view>
438
+ * ```
439
+ *
440
+ * @default `false`
441
+ */
442
+ allowDoubleQuotes?: boolean;
443
+ }
430
444
  interface JsHandler {
431
445
  (rawSource: string, set: Set<string>, options?: CreateJsHandlerOptions): JsHandlerResult | Promise<JsHandlerResult>;
432
446
  sync: (rawSource: string, set: Set<string>, options?: CreateJsHandlerOptions) => JsHandlerResult;