Skip to content

Commit ff1a74b

Browse files
committed
feat: 允许 escape/unescape 传入 true/false 布尔值
1 parent c8f11c1 commit ff1a74b

File tree

10 files changed

+61
-5
lines changed

10 files changed

+61
-5
lines changed

.changeset/odd-meals-taste.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@weapp-tailwindcss/runtime": patch
3+
---
4+
5+
允许 `escape`/`unescape` 传入 `true`/`false` 布尔值,并保持默认转换行为一致。

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"build:nocache": "cross-env TURBO_FORCE=1 pnpm build",
5151
"build:docs": "turbo run build --filter=./website/",
5252
"build:apps": "turbo run build --filter=./apps/*",
53-
"build:pkgs": "turbo run build --filter=./packages/*",
53+
"build:pkgs": "turbo run build --filter=./packages/* --filter=./packages-runtime/*",
5454
"build:demo": "turbo run build --filter=./demo/*",
5555
"build:analyze": "tsx scripts/check-build-size.ts",
5656
"test": "vitest run",

packages-runtime/cva/test/cva.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ describe('cva runtime', () => {
1515
expect(badge()).toBe('text-[#ececec]')
1616
})
1717

18+
it('accepts boolean escape/unescape options', () => {
19+
const { cva: rawCva } = create({ escape: true, unescape: true })
20+
const badge = rawCva('text-[#ececec]')
21+
22+
expect(badge()).toBe('text-_b_hececec_B')
23+
})
24+
1825
it('normalizes escaped classes before evaluating variants', () => {
1926
const badge = cva('text-_b_hececec_B', {
2027
variants: {

packages-runtime/merge-v3/test/runtime.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ describe('merge-v3 runtime exports', () => {
2525
expect(rawTwMerge('text-[#ececec]')).toBe('text-[#ececec]')
2626
})
2727

28+
it('accepts boolean escape/unescape options', () => {
29+
const { twMerge: rawTwMerge } = create({ escape: true, unescape: true })
30+
31+
expect(rawTwMerge('text-[#ececec]', 'text-[#ECECEC]')).toBe('text-_b_hECECEC_B')
32+
})
33+
2834
it('treats rpx arbitrary values as lengths for color-like utilities', () => {
2935
expect(twMerge('text-red', 'text-[80rpx]')).toBe('text-red text-_b80rpx_B')
3036
expect(twMerge('border-red-500', 'border-[10rpx]')).toBe('border-red-500 border-_b10rpx_B')

packages-runtime/merge/test/v4.unit.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,10 @@ describe('v4 runtime exports', () => {
2424

2525
expect(rawTwMerge('text-[#ececec]')).toBe('text-[#ececec]')
2626
})
27+
28+
it('accepts boolean escape/unescape options', () => {
29+
const { twMerge: rawTwMerge } = create({ escape: true, unescape: true })
30+
31+
expect(rawTwMerge('text-[#ececec]', 'text-[#ECECEC]')).toBe('text-_b_hECECEC_B')
32+
})
2733
})

packages-runtime/runtime/src/transformers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88

99
const identity = (value: string) => value
1010

11-
function isConfig<T extends object>(value: false | T | undefined): value is T {
11+
function isConfig<T extends object>(value: boolean | T | undefined): value is T {
1212
return typeof value === 'object' && value !== null
1313
}
1414

packages-runtime/runtime/src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { EscapeOptions, UnescapeOptions } from '@weapp-core/escape'
22
import type { ClassValue } from 'clsx'
33

4-
export type EscapeConfig = false | EscapeOptions
4+
export type EscapeConfig = boolean | EscapeOptions
55

6-
export type UnescapeConfig = false | UnescapeOptions
6+
export type UnescapeConfig = boolean | UnescapeOptions
77

88
export interface CreateOptions {
99
escape?: EscapeConfig

packages-runtime/runtime/test/create-runtime.test.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('createRuntimeFactory', () => {
1111
value: `prepared:${value}`,
1212
metadata: 'meta-token',
1313
}))
14-
const restoreValue = vi.fn((value: string, metadata?: string) => {
14+
const restoreValue = vi.fn((value: string, metadata?: unknown) => {
1515
expect(metadata).toBe('meta-token')
1616
return value.replace('prepared:', 'restored:')
1717
})
@@ -74,6 +74,24 @@ describe('createRuntimeFactory', () => {
7474
expect(merged).toBe('text-[#ececec]')
7575
})
7676

77+
it('accepts boolean escape/unescape options', () => {
78+
const twMergeImpl = vi.fn((value: string) => value)
79+
80+
const createRuntime = createRuntimeFactory({
81+
version: 3,
82+
twMerge: twMergeImpl,
83+
twJoin: twMergeImpl,
84+
extendTailwindMerge: vi.fn(() => twMergeImpl),
85+
createTailwindMerge: vi.fn(() => twMergeImpl),
86+
})
87+
88+
const runtime = createRuntime({ escape: true, unescape: true })
89+
const merged = runtime.twMerge('text-_b_hececec_B')
90+
91+
expect(twMergeImpl).toHaveBeenCalledWith('text-[#ececec]')
92+
expect(merged).toBe('text-_b_hececec_B')
93+
})
94+
7795
it('accepts plain string responses from prepareValue hooks', () => {
7896
const twMergeImpl = vi.fn((value: string) => value)
7997
const prepareValue = vi.fn((value: string) => `prepared:${value}`)

packages-runtime/variants-v3/test/variants.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ describe('variants-v3 runtime', () => {
6464
expect(badge()).toBe('text-[#ececec]')
6565
})
6666

67+
it('accepts boolean escape/unescape options', () => {
68+
const { tv: rawTv } = create({ escape: true, unescape: true })
69+
const badge = rawTv({ base: 'text-[#ececec]' })
70+
71+
expect(badge()).toBe('text-_b_hececec_B')
72+
})
73+
6774
it('respects disabled escape/unescape options in runtime factory', () => {
6875
const runtime = create({ escape: false, unescape: false })
6976
const badge = runtime.tv({

packages-runtime/variants/test/variants.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ describe('variants runtime', () => {
6464
expect(badge()).toBe('text-[#ececec]')
6565
})
6666

67+
it('accepts boolean escape/unescape options', () => {
68+
const { tv: rawTv } = createVariants({ escape: true, unescape: true })
69+
const badge = rawTv({ base: 'text-[#ececec]' })
70+
71+
expect(badge()).toBe('text-_b_hececec_B')
72+
})
73+
6774
it('respects disabled escape/unescape options in runtime factory', () => {
6875
const runtime = createVariants({ escape: false, unescape: false })
6976
const badge = runtime.tv({

0 commit comments

Comments
 (0)