effect-start 0.18.0 → 0.20.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.
- package/README.md +3 -3
- package/dist/Development.d.ts +8 -3
- package/dist/Development.js +14 -7
- package/dist/Effectify.d.ts +212 -0
- package/dist/Effectify.js +19 -0
- package/dist/FilePathPattern.d.ts +29 -0
- package/dist/FilePathPattern.js +86 -0
- package/dist/FileRouter.d.ts +39 -41
- package/dist/FileRouter.js +104 -158
- package/dist/FileRouterCodegen.d.ts +7 -8
- package/dist/FileRouterCodegen.js +97 -66
- package/dist/PlatformError.d.ts +46 -0
- package/dist/PlatformError.js +43 -0
- package/dist/PlatformRuntime.d.ts +27 -0
- package/dist/PlatformRuntime.js +51 -0
- package/dist/Route.d.ts +6 -2
- package/dist/Route.js +22 -0
- package/dist/RouteBody.d.ts +1 -1
- package/dist/RouteHttp.d.ts +1 -1
- package/dist/RouteHttp.js +12 -19
- package/dist/RouteMount.d.ts +2 -1
- package/dist/Start.d.ts +33 -6
- package/dist/Start.js +31 -13
- package/dist/Unique.d.ts +50 -0
- package/dist/Unique.js +187 -0
- package/dist/bun/BunHttpServer.js +5 -6
- package/dist/bun/BunPlatformHttpServer.d.ts +10 -0
- package/dist/bun/BunPlatformHttpServer.js +53 -0
- package/dist/bun/BunRoute.d.ts +4 -6
- package/dist/bun/BunRoute.js +10 -18
- package/dist/bun/BunRuntime.d.ts +2 -1
- package/dist/bun/BunRuntime.js +10 -5
- package/dist/bun/BunServer.d.ts +33 -0
- package/dist/bun/BunServer.js +133 -0
- package/dist/bun/BunServerRequest.d.ts +60 -0
- package/dist/bun/BunServerRequest.js +252 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.js +1 -1
- package/dist/datastar/actions/fetch.d.ts +30 -0
- package/dist/datastar/actions/fetch.js +411 -0
- package/dist/datastar/actions/peek.d.ts +1 -0
- package/dist/datastar/actions/peek.js +14 -0
- package/dist/datastar/actions/setAll.d.ts +1 -0
- package/dist/datastar/actions/setAll.js +13 -0
- package/dist/datastar/actions/toggleAll.d.ts +1 -0
- package/dist/datastar/actions/toggleAll.js +13 -0
- package/dist/datastar/attributes/attr.d.ts +1 -0
- package/dist/datastar/attributes/attr.js +49 -0
- package/dist/datastar/attributes/bind.d.ts +1 -0
- package/dist/datastar/attributes/bind.js +183 -0
- package/dist/datastar/attributes/class.d.ts +1 -0
- package/dist/datastar/attributes/class.js +50 -0
- package/dist/datastar/attributes/computed.d.ts +1 -0
- package/dist/datastar/attributes/computed.js +27 -0
- package/dist/datastar/attributes/effect.d.ts +1 -0
- package/dist/datastar/attributes/effect.js +10 -0
- package/dist/datastar/attributes/indicator.d.ts +1 -0
- package/dist/datastar/attributes/indicator.js +32 -0
- package/dist/datastar/attributes/init.d.ts +1 -0
- package/dist/datastar/attributes/init.js +27 -0
- package/dist/datastar/attributes/jsonSignals.d.ts +1 -0
- package/dist/datastar/attributes/jsonSignals.js +31 -0
- package/dist/datastar/attributes/on.d.ts +1 -0
- package/dist/datastar/attributes/on.js +59 -0
- package/dist/datastar/attributes/onIntersect.d.ts +1 -0
- package/dist/datastar/attributes/onIntersect.js +54 -0
- package/dist/datastar/attributes/onInterval.d.ts +1 -0
- package/dist/datastar/attributes/onInterval.js +31 -0
- package/dist/datastar/attributes/onSignalPatch.d.ts +1 -0
- package/dist/datastar/attributes/onSignalPatch.js +44 -0
- package/dist/datastar/attributes/ref.d.ts +1 -0
- package/dist/datastar/attributes/ref.js +11 -0
- package/dist/datastar/attributes/show.d.ts +1 -0
- package/dist/datastar/attributes/show.js +32 -0
- package/dist/datastar/attributes/signals.d.ts +1 -0
- package/dist/datastar/attributes/signals.js +18 -0
- package/dist/datastar/attributes/style.d.ts +1 -0
- package/dist/datastar/attributes/style.js +56 -0
- package/dist/datastar/attributes/text.d.ts +1 -0
- package/dist/datastar/attributes/text.js +27 -0
- package/dist/datastar/engine.d.ts +156 -0
- package/dist/datastar/engine.js +971 -0
- package/dist/datastar/index.d.ts +24 -0
- package/dist/datastar/index.js +24 -0
- package/dist/datastar/load.d.ts +24 -0
- package/dist/datastar/load.js +24 -0
- package/dist/datastar/utils.d.ts +51 -0
- package/dist/datastar/utils.js +205 -0
- package/dist/datastar/watchers/patchElements.d.ts +1 -0
- package/dist/datastar/watchers/patchElements.js +420 -0
- package/dist/datastar/watchers/patchSignals.d.ts +1 -0
- package/dist/datastar/watchers/patchSignals.js +15 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/node/Effectify.d.ts +209 -0
- package/dist/node/Effectify.js +19 -0
- package/dist/node/FileSystem.d.ts +3 -5
- package/dist/node/FileSystem.js +42 -62
- package/dist/node/NodeFileSystem.d.ts +7 -0
- package/dist/node/NodeFileSystem.js +420 -0
- package/dist/node/NodeUtils.d.ts +2 -0
- package/dist/node/NodeUtils.js +20 -0
- package/dist/node/PlatformError.d.ts +46 -0
- package/dist/node/PlatformError.js +43 -0
- package/dist/testing/TestLogger.js +1 -1
- package/dist/x/tailwind/plugin.js +1 -1
- package/package.json +18 -7
- package/src/Development.ts +36 -40
- package/src/Effectify.ts +269 -0
- package/src/FilePathPattern.ts +115 -0
- package/src/FileRouter.ts +178 -255
- package/src/FileRouterCodegen.ts +135 -92
- package/src/PlatformError.ts +117 -0
- package/src/PlatformRuntime.ts +108 -0
- package/src/Route.ts +31 -2
- package/src/RouteBody.ts +1 -1
- package/src/RouteHttp.ts +15 -29
- package/src/RouteMount.ts +1 -1
- package/src/Start.ts +61 -27
- package/src/Unique.ts +232 -0
- package/src/bun/BunPlatformHttpServer.ts +88 -0
- package/src/bun/BunRoute.ts +14 -24
- package/src/bun/BunRuntime.ts +21 -5
- package/src/bun/BunServer.ts +228 -0
- package/src/bun/index.ts +1 -1
- package/src/datastar/README.md +18 -0
- package/src/datastar/actions/fetch.ts +609 -0
- package/src/datastar/actions/peek.ts +17 -0
- package/src/datastar/actions/setAll.ts +20 -0
- package/src/datastar/actions/toggleAll.ts +20 -0
- package/src/datastar/attributes/attr.ts +50 -0
- package/src/datastar/attributes/bind.ts +220 -0
- package/src/datastar/attributes/class.ts +57 -0
- package/src/datastar/attributes/computed.ts +33 -0
- package/src/datastar/attributes/effect.ts +11 -0
- package/src/datastar/attributes/indicator.ts +39 -0
- package/src/datastar/attributes/init.ts +35 -0
- package/src/datastar/attributes/jsonSignals.ts +38 -0
- package/src/datastar/attributes/on.ts +71 -0
- package/src/datastar/attributes/onIntersect.ts +65 -0
- package/src/datastar/attributes/onInterval.ts +39 -0
- package/src/datastar/attributes/onSignalPatch.ts +63 -0
- package/src/datastar/attributes/ref.ts +12 -0
- package/src/datastar/attributes/show.ts +33 -0
- package/src/datastar/attributes/signals.ts +22 -0
- package/src/datastar/attributes/style.ts +63 -0
- package/src/datastar/attributes/text.ts +30 -0
- package/src/datastar/engine.ts +1341 -0
- package/src/datastar/index.ts +25 -0
- package/src/datastar/utils.ts +286 -0
- package/src/datastar/watchers/patchElements.ts +554 -0
- package/src/datastar/watchers/patchSignals.ts +15 -0
- package/src/index.ts +1 -0
- package/src/node/{FileSystem.ts → NodeFileSystem.ts} +59 -97
- package/src/node/{Utils.ts → NodeUtils.ts} +2 -0
- package/src/testing/TestLogger.ts +1 -1
- package/src/x/tailwind/plugin.ts +1 -1
- package/dist/Random.d.ts +0 -5
- package/dist/Random.js +0 -49
- package/src/Commander.test.ts +0 -1639
- package/src/ContentNegotiation.test.ts +0 -603
- package/src/Development.test.ts +0 -119
- package/src/Entity.test.ts +0 -592
- package/src/FileRouterCodegen.todo.ts +0 -1133
- package/src/FileRouterPattern.test.ts +0 -147
- package/src/FileRouterPattern.ts +0 -59
- package/src/FileRouter_files.test.ts +0 -64
- package/src/FileRouter_path.test.ts +0 -145
- package/src/FileRouter_tree.test.ts +0 -132
- package/src/Http.test.ts +0 -319
- package/src/HttpAppExtra.test.ts +0 -103
- package/src/HttpUtils.test.ts +0 -85
- package/src/PathPattern.test.ts +0 -648
- package/src/Random.ts +0 -59
- package/src/RouteBody.test.ts +0 -232
- package/src/RouteHook.test.ts +0 -40
- package/src/RouteHttp.test.ts +0 -2909
- package/src/RouteMount.test.ts +0 -481
- package/src/RouteSchema.test.ts +0 -427
- package/src/RouteSse.test.ts +0 -249
- package/src/RouteTree.test.ts +0 -494
- package/src/RouteTrie.test.ts +0 -322
- package/src/RouterPattern.test.ts +0 -676
- package/src/RouterPattern.ts +0 -416
- package/src/StartApp.ts +0 -47
- package/src/Values.test.ts +0 -263
- package/src/bun/BunBundle.test.ts +0 -268
- package/src/bun/BunBundle_imports.test.ts +0 -48
- package/src/bun/BunHttpServer.test.ts +0 -251
- package/src/bun/BunHttpServer.ts +0 -306
- package/src/bun/BunImportTrackerPlugin.test.ts +0 -77
- package/src/bun/BunRoute.test.ts +0 -162
- package/src/bundler/BundleHttp.test.ts +0 -132
- package/src/effect/HttpRouter.test.ts +0 -548
- package/src/experimental/EncryptedCookies.test.ts +0 -488
- package/src/hyper/HyperHtml.test.ts +0 -209
- package/src/hyper/HyperRoute.test.tsx +0 -197
- package/src/middlewares/BasicAuthMiddleware.test.ts +0 -84
- package/src/testing/TestHttpClient.test.ts +0 -83
- package/src/testing/TestLogger.test.ts +0 -51
- package/src/x/datastar/Datastar.test.ts +0 -266
- package/src/x/tailwind/TailwindPlugin.test.ts +0 -333
- /package/src/bun/{BunHttpServer_web.ts → BunServerRequest.ts} +0 -0
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
import * as test from "bun:test"
|
|
2
|
-
import { extractClassNames } from "./TailwindPlugin.ts"
|
|
3
|
-
|
|
4
|
-
// Keep the old broad implementation for comparison tests
|
|
5
|
-
function extractClassNamesBroad(source: string): Set<string> {
|
|
6
|
-
// Old broad implementation
|
|
7
|
-
const CLASS_NAME_REGEX = /^[^"'`\s]+$/
|
|
8
|
-
const classTokenRegex =
|
|
9
|
-
/\b[a-zA-Z][a-zA-Z0-9_:-]*(?:\[[^\]]*\])?(?:\/[0-9]+)?/g
|
|
10
|
-
|
|
11
|
-
return new Set(
|
|
12
|
-
Array
|
|
13
|
-
.from(source.matchAll(classTokenRegex))
|
|
14
|
-
.map(match => match[0])
|
|
15
|
-
.filter(token => CLASS_NAME_REGEX.test(token)),
|
|
16
|
-
)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
test.describe(`${extractClassNames.name}`, () => {
|
|
20
|
-
test.it("Basic HTML class attributes", () => {
|
|
21
|
-
const source = `<div class="bg-red-500 text-white">Hello</div>`
|
|
22
|
-
const result = extractClassNames(source)
|
|
23
|
-
|
|
24
|
-
test
|
|
25
|
-
.expect([...result].sort())
|
|
26
|
-
.toEqual(["bg-red-500", "text-white"])
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
test.it("Basic JSX className attributes", () => {
|
|
30
|
-
const source =
|
|
31
|
-
`<div className="flex items-center justify-between">Content</div>`
|
|
32
|
-
const result = extractClassNames(source)
|
|
33
|
-
|
|
34
|
-
test
|
|
35
|
-
.expect([...result].sort())
|
|
36
|
-
.toEqual(["flex", "items-center", "justify-between"])
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
test.it("Single quotes", () => {
|
|
40
|
-
const source = `<div class='bg-blue-500 hover:bg-blue-600'>Button</div>`
|
|
41
|
-
const result = extractClassNames(source)
|
|
42
|
-
|
|
43
|
-
test
|
|
44
|
-
.expect([...result].sort())
|
|
45
|
-
.toEqual(["bg-blue-500", "hover:bg-blue-600"])
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
test.it("Template literals in JSX", () => {
|
|
49
|
-
const source = `<div className={\`bg-\${color} text-lg\`}>Dynamic</div>`
|
|
50
|
-
const result = extractClassNames(source)
|
|
51
|
-
|
|
52
|
-
// Should extract valid static class names from template literals
|
|
53
|
-
test
|
|
54
|
-
.expect([...result].sort())
|
|
55
|
-
.toEqual(["text-lg"])
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
test.it("JSX with quoted strings", () => {
|
|
59
|
-
const source = `<div className={"p-4 m-2"}>Static in braces</div>`
|
|
60
|
-
const result = extractClassNames(source)
|
|
61
|
-
|
|
62
|
-
test
|
|
63
|
-
.expect([...result].sort())
|
|
64
|
-
.toEqual(["m-2", "p-4"])
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
test.it("Multi-line attributes", () => {
|
|
68
|
-
const source = `<div
|
|
69
|
-
className="
|
|
70
|
-
grid
|
|
71
|
-
grid-cols-3
|
|
72
|
-
gap-4
|
|
73
|
-
"
|
|
74
|
-
>Grid</div>`
|
|
75
|
-
const result = extractClassNames(source)
|
|
76
|
-
|
|
77
|
-
test
|
|
78
|
-
.expect([...result].sort())
|
|
79
|
-
.toEqual(["gap-4", "grid", "grid-cols-3"])
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
test.it("Whitespace variations around equals", () => {
|
|
83
|
-
const cases = [
|
|
84
|
-
`<div class="text-sm">Normal</div>`,
|
|
85
|
-
`<div class ="text-md">Space before</div>`,
|
|
86
|
-
`<div class= "text-lg">Space after</div>`,
|
|
87
|
-
`<div class = "text-xl">Spaces both</div>`,
|
|
88
|
-
]
|
|
89
|
-
|
|
90
|
-
for (const source of cases) {
|
|
91
|
-
const result = extractClassNames(source)
|
|
92
|
-
|
|
93
|
-
test
|
|
94
|
-
.expect(result.size)
|
|
95
|
-
.toBe(1)
|
|
96
|
-
}
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
test.it("Arbitrary value classes", () => {
|
|
100
|
-
const source =
|
|
101
|
-
`<div className="w-[32px] bg-[#ff0000] text-[1.5rem]">Arbitrary</div>`
|
|
102
|
-
const result = extractClassNames(source)
|
|
103
|
-
|
|
104
|
-
test
|
|
105
|
-
.expect([...result].sort())
|
|
106
|
-
.toEqual(["bg-[#ff0000]", "text-[1.5rem]", "w-[32px]"])
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
test.it("Fraction classes", () => {
|
|
110
|
-
const source = `<div className="w-1/2 h-3/4">Fractions</div>`
|
|
111
|
-
const result = extractClassNames(source)
|
|
112
|
-
|
|
113
|
-
test
|
|
114
|
-
.expect([...result].sort())
|
|
115
|
-
.toEqual(["h-3/4", "w-1/2"])
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
test.it("Complex Tailwind classes", () => {
|
|
119
|
-
const source =
|
|
120
|
-
`<div className="sm:w-1/2 md:w-1/3 lg:w-1/4 hover:bg-gray-100 focus:ring-2">Responsive</div>`
|
|
121
|
-
const result = extractClassNames(source)
|
|
122
|
-
|
|
123
|
-
test
|
|
124
|
-
.expect([...result].sort())
|
|
125
|
-
.toEqual([
|
|
126
|
-
"focus:ring-2",
|
|
127
|
-
"hover:bg-gray-100",
|
|
128
|
-
"lg:w-1/4",
|
|
129
|
-
"md:w-1/3",
|
|
130
|
-
"sm:w-1/2",
|
|
131
|
-
])
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
test.it("Should ignore similar attribute names", () => {
|
|
135
|
-
const source =
|
|
136
|
-
`<div data-class="should-ignore" myclass="also-ignore" class="keep-this">Test</div>`
|
|
137
|
-
const result = extractClassNames(source)
|
|
138
|
-
|
|
139
|
-
test
|
|
140
|
-
.expect([...result])
|
|
141
|
-
.toEqual(["keep-this"])
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
test.it("Should handle case sensitivity", () => {
|
|
145
|
-
const source =
|
|
146
|
-
`<div Class="uppercase-class" class="lowercase-class">Mixed case</div>`
|
|
147
|
-
const result = extractClassNames(source)
|
|
148
|
-
|
|
149
|
-
// Our current implementation only matches lowercase 'class'
|
|
150
|
-
test
|
|
151
|
-
.expect([...result])
|
|
152
|
-
.toEqual(["lowercase-class"])
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
test.it("Empty class attributes", () => {
|
|
156
|
-
const source = `<div class="" className=''>Empty</div>`
|
|
157
|
-
const result = extractClassNames(source)
|
|
158
|
-
|
|
159
|
-
test
|
|
160
|
-
.expect(result.size)
|
|
161
|
-
.toBe(0)
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
test.it("Classes with special characters", () => {
|
|
165
|
-
const source =
|
|
166
|
-
`<div className="group-hover:text-blue-500 peer-focus:ring-2">Special chars</div>`
|
|
167
|
-
const result = extractClassNames(source)
|
|
168
|
-
|
|
169
|
-
test
|
|
170
|
-
.expect([...result].sort())
|
|
171
|
-
.toEqual(["group-hover:text-blue-500", "peer-focus:ring-2"])
|
|
172
|
-
})
|
|
173
|
-
|
|
174
|
-
test.it("Should not match classes in comments", () => {
|
|
175
|
-
const source = `
|
|
176
|
-
<!-- <div class="commented-out">Should not match</div> -->
|
|
177
|
-
<div class="real-class">Should match</div>
|
|
178
|
-
`
|
|
179
|
-
const result = extractClassNames(source)
|
|
180
|
-
|
|
181
|
-
test
|
|
182
|
-
.expect([...result])
|
|
183
|
-
.toEqual(["real-class"])
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
test.it("Should not match classes in strings", () => {
|
|
187
|
-
const source = `
|
|
188
|
-
const message = "This class='fake-class' should not match";
|
|
189
|
-
<div class="real-class">Real element</div>
|
|
190
|
-
`
|
|
191
|
-
const result = extractClassNames(source)
|
|
192
|
-
|
|
193
|
-
test
|
|
194
|
-
.expect([...result])
|
|
195
|
-
.toEqual(["real-class"])
|
|
196
|
-
})
|
|
197
|
-
|
|
198
|
-
test.it("Complex JSX expressions should be ignored", () => {
|
|
199
|
-
const source = `
|
|
200
|
-
<div className={condition ? "conditional-class" : "other-class"}>Conditional</div>
|
|
201
|
-
<div className={\`template-\${variable}\`}>Template</div>
|
|
202
|
-
<div className={getClasses()}>Function call</div>
|
|
203
|
-
<div className="static-class">Static</div>
|
|
204
|
-
`
|
|
205
|
-
const result = extractClassNames(source)
|
|
206
|
-
|
|
207
|
-
// Only the static class should match with our strict implementation
|
|
208
|
-
test
|
|
209
|
-
.expect([...result])
|
|
210
|
-
.toEqual(["static-class"])
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
test.it("Vue.js class bindings should be ignored", () => {
|
|
214
|
-
const source = `
|
|
215
|
-
<div :class="{ 'active': isActive }">Vue object</div>
|
|
216
|
-
<div :class="['base', condition && 'active']">Vue array</div>
|
|
217
|
-
<div class="static-vue-class">Static Vue</div>
|
|
218
|
-
`
|
|
219
|
-
const result = extractClassNames(source)
|
|
220
|
-
|
|
221
|
-
// Only static class should match
|
|
222
|
-
test
|
|
223
|
-
.expect([...result])
|
|
224
|
-
.toEqual(["static-vue-class"])
|
|
225
|
-
})
|
|
226
|
-
|
|
227
|
-
test.it("Svelte class directives should be ignored", () => {
|
|
228
|
-
const source = `
|
|
229
|
-
<div class:active={condition}>Svelte directive</div>
|
|
230
|
-
<div class="static-svelte-class">Static Svelte</div>
|
|
231
|
-
`
|
|
232
|
-
const result = extractClassNames(source)
|
|
233
|
-
|
|
234
|
-
test
|
|
235
|
-
.expect([...result])
|
|
236
|
-
.toEqual(["static-svelte-class"])
|
|
237
|
-
})
|
|
238
|
-
|
|
239
|
-
test.it("Escaped quotes should be handled", () => {
|
|
240
|
-
const source =
|
|
241
|
-
`<div class="text-sm before:content-['Hello']">Escaped quotes</div>`
|
|
242
|
-
const result = extractClassNames(source)
|
|
243
|
-
|
|
244
|
-
test
|
|
245
|
-
.expect([...result].sort())
|
|
246
|
-
.toEqual(["before:content-['Hello']", "text-sm"])
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
test.it("Current broad implementation comparison", () => {
|
|
250
|
-
const source = `
|
|
251
|
-
<div class="bg-red-500 text-white">Element</div>
|
|
252
|
-
<p>Some random-text-with-hyphens in content</p>
|
|
253
|
-
const variable = "some-string";
|
|
254
|
-
`
|
|
255
|
-
|
|
256
|
-
const broadResult = extractClassNamesBroad(source)
|
|
257
|
-
const strictResult = extractClassNames(source)
|
|
258
|
-
|
|
259
|
-
// Broad should pick up more tokens
|
|
260
|
-
test
|
|
261
|
-
.expect(broadResult.size)
|
|
262
|
-
.toBeGreaterThan(strictResult.size)
|
|
263
|
-
// Strict should only have the actual class names
|
|
264
|
-
test
|
|
265
|
-
.expect([...strictResult].sort())
|
|
266
|
-
.toEqual(["bg-red-500", "text-white"])
|
|
267
|
-
})
|
|
268
|
-
|
|
269
|
-
test.it("Component names with dots", () => {
|
|
270
|
-
const source =
|
|
271
|
-
`<Toast.Toast class="toast toast-top toast-center fixed top-8 z-10">Content</Toast.Toast>`
|
|
272
|
-
const result = extractClassNames(source)
|
|
273
|
-
|
|
274
|
-
test
|
|
275
|
-
.expect([...result].sort())
|
|
276
|
-
.toEqual(["fixed", "toast", "toast-center", "toast-top", "top-8", "z-10"])
|
|
277
|
-
})
|
|
278
|
-
|
|
279
|
-
test.it("Complex component names and attributes", () => {
|
|
280
|
-
const source = `
|
|
281
|
-
<My.Component.Name className="flex items-center">Content</My.Component.Name>
|
|
282
|
-
<Component-with-dashes class="bg-red-500">Content</Component-with-dashes>
|
|
283
|
-
<Component123 className="text-lg">Content</Component123>
|
|
284
|
-
<namespace:element class="border-2">XML style</namespace:element>
|
|
285
|
-
`
|
|
286
|
-
const result = extractClassNames(source)
|
|
287
|
-
|
|
288
|
-
test
|
|
289
|
-
.expect([...result].sort())
|
|
290
|
-
.toEqual([
|
|
291
|
-
"bg-red-500",
|
|
292
|
-
"border-2",
|
|
293
|
-
"flex",
|
|
294
|
-
"items-center",
|
|
295
|
-
"text-lg",
|
|
296
|
-
])
|
|
297
|
-
})
|
|
298
|
-
|
|
299
|
-
test.it("Conditional JSX with Toast component", () => {
|
|
300
|
-
const source = `{toastParam !== undefined && (
|
|
301
|
-
<Toast.Toast class="toast toast-top toast-center fixed top-8 z-10">
|
|
302
|
-
<div class="alert alert-success">
|
|
303
|
-
<span>
|
|
304
|
-
{toastParam}
|
|
305
|
-
</span>
|
|
306
|
-
</div>
|
|
307
|
-
</Toast.Toast>
|
|
308
|
-
)}`
|
|
309
|
-
const result = extractClassNames(source)
|
|
310
|
-
|
|
311
|
-
test
|
|
312
|
-
.expect([...result].sort())
|
|
313
|
-
.toEqual([
|
|
314
|
-
"alert",
|
|
315
|
-
"alert-success",
|
|
316
|
-
"fixed",
|
|
317
|
-
"toast",
|
|
318
|
-
"toast-center",
|
|
319
|
-
"toast-top",
|
|
320
|
-
"top-8",
|
|
321
|
-
"z-10",
|
|
322
|
-
])
|
|
323
|
-
})
|
|
324
|
-
|
|
325
|
-
test.it("Template literals with expressions", () => {
|
|
326
|
-
const source = `<div class={\`toast \${props.class ?? ""}\`}>Content</div>`
|
|
327
|
-
const result = extractClassNames(source)
|
|
328
|
-
|
|
329
|
-
test
|
|
330
|
-
.expect([...result].sort())
|
|
331
|
-
.toEqual(["toast"])
|
|
332
|
-
})
|
|
333
|
-
})
|
|
File without changes
|