@scenetest/vite-plugin 0.0.1
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/LICENSE +21 -0
- package/dist/__tests__/strip.test.d.ts +2 -0
- package/dist/__tests__/strip.test.d.ts.map +1 -0
- package/dist/__tests__/strip.test.js +434 -0
- package/dist/__tests__/strip.test.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +71 -0
- package/dist/config.js.map +1 -0
- package/dist/dev-panel.generated.d.ts +9 -0
- package/dist/dev-panel.generated.d.ts.map +1 -0
- package/dist/dev-panel.generated.js +9 -0
- package/dist/dev-panel.generated.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +14 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +121 -0
- package/dist/middleware.js.map +1 -0
- package/dist/strip.d.ts +26 -0
- package/dist/strip.d.ts.map +1 -0
- package/dist/strip.js +195 -0
- package/dist/strip.js.map +1 -0
- package/dist/transform.d.ts +52 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +477 -0
- package/dist/transform.js.map +1 -0
- package/dist/virtual-module.d.ts +36 -0
- package/dist/virtual-module.d.ts.map +1 -0
- package/dist/virtual-module.js +72 -0
- package/dist/virtual-module.js.map +1 -0
- package/package.json +63 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Scenetest
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/strip.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { stripScenetest } from '../strip.js';
|
|
3
|
+
describe('stripScenetest', () => {
|
|
4
|
+
describe('import removal', () => {
|
|
5
|
+
it('removes simple import statement', () => {
|
|
6
|
+
const code = `import { should, failed } from '@scenetest/core'
|
|
7
|
+
const x = 1`;
|
|
8
|
+
const result = stripScenetest(code);
|
|
9
|
+
expect(result).not.toBeNull();
|
|
10
|
+
expect(result.code).toBe('const x = 1');
|
|
11
|
+
});
|
|
12
|
+
it('removes import with only should', () => {
|
|
13
|
+
const code = `import { should } from '@scenetest/core'
|
|
14
|
+
console.log('hello')`;
|
|
15
|
+
const result = stripScenetest(code);
|
|
16
|
+
expect(result).not.toBeNull();
|
|
17
|
+
expect(result.code).toBe(`console.log('hello')`);
|
|
18
|
+
});
|
|
19
|
+
it('removes import with only failed', () => {
|
|
20
|
+
const code = `import { failed } from '@scenetest/core'
|
|
21
|
+
console.log('hello')`;
|
|
22
|
+
const result = stripScenetest(code);
|
|
23
|
+
expect(result).not.toBeNull();
|
|
24
|
+
expect(result.code).toBe(`console.log('hello')`);
|
|
25
|
+
});
|
|
26
|
+
it('removes import with aliases', () => {
|
|
27
|
+
const code = `import { should as s, failed as f } from '@scenetest/core'
|
|
28
|
+
s('test', true)
|
|
29
|
+
f('test')`;
|
|
30
|
+
const result = stripScenetest(code);
|
|
31
|
+
expect(result).not.toBeNull();
|
|
32
|
+
expect(result.code.trim()).toBe('');
|
|
33
|
+
});
|
|
34
|
+
it('handles namespace import', () => {
|
|
35
|
+
const code = `import * as scenetest from '@scenetest/core'
|
|
36
|
+
scenetest.should('test', true)
|
|
37
|
+
scenetest.failed('test')`;
|
|
38
|
+
const result = stripScenetest(code);
|
|
39
|
+
expect(result).not.toBeNull();
|
|
40
|
+
expect(result.code.trim()).toBe('');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('function call removal', () => {
|
|
44
|
+
it('removes simple should() statement', () => {
|
|
45
|
+
const code = `import { should } from '@scenetest/core'
|
|
46
|
+
should('description', true)
|
|
47
|
+
console.log('after')`;
|
|
48
|
+
const result = stripScenetest(code);
|
|
49
|
+
expect(result).not.toBeNull();
|
|
50
|
+
expect(result.code).toBe(`console.log('after')`);
|
|
51
|
+
});
|
|
52
|
+
it('removes simple failed() statement', () => {
|
|
53
|
+
const code = `import { failed } from '@scenetest/core'
|
|
54
|
+
failed('description')
|
|
55
|
+
console.log('after')`;
|
|
56
|
+
const result = stripScenetest(code);
|
|
57
|
+
expect(result).not.toBeNull();
|
|
58
|
+
expect(result.code).toBe(`console.log('after')`);
|
|
59
|
+
});
|
|
60
|
+
it('removes multiple should/failed statements', () => {
|
|
61
|
+
const code = `import { should, failed } from '@scenetest/core'
|
|
62
|
+
should('one', true)
|
|
63
|
+
console.log('middle')
|
|
64
|
+
failed('two')
|
|
65
|
+
should('three', true)`;
|
|
66
|
+
const result = stripScenetest(code);
|
|
67
|
+
expect(result).not.toBeNull();
|
|
68
|
+
expect(result.code.trim()).toBe(`console.log('middle')`);
|
|
69
|
+
});
|
|
70
|
+
it('removes should() with semicolon', () => {
|
|
71
|
+
const code = `import { should } from '@scenetest/core'
|
|
72
|
+
should('test', true);
|
|
73
|
+
const x = 1;`;
|
|
74
|
+
const result = stripScenetest(code);
|
|
75
|
+
expect(result).not.toBeNull();
|
|
76
|
+
expect(result.code).toBe('const x = 1;');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('complex arguments', () => {
|
|
80
|
+
it('handles nested function calls in condition', () => {
|
|
81
|
+
const code = `import { should } from '@scenetest/core'
|
|
82
|
+
should('test', foo() && bar.baz())
|
|
83
|
+
const x = 1`;
|
|
84
|
+
const result = stripScenetest(code);
|
|
85
|
+
expect(result).not.toBeNull();
|
|
86
|
+
expect(result.code).toBe('const x = 1');
|
|
87
|
+
});
|
|
88
|
+
it('handles template literals', () => {
|
|
89
|
+
const code = `import { should } from '@scenetest/core'
|
|
90
|
+
const name = 'test'
|
|
91
|
+
should(\`checking \${name}\`, true)
|
|
92
|
+
const x = 1`;
|
|
93
|
+
const result = stripScenetest(code);
|
|
94
|
+
expect(result).not.toBeNull();
|
|
95
|
+
expect(result.code).toBe(`const name = 'test'
|
|
96
|
+
const x = 1`);
|
|
97
|
+
});
|
|
98
|
+
it('handles object literals', () => {
|
|
99
|
+
const code = `import { should } from '@scenetest/core'
|
|
100
|
+
should('test', { a: 1, b: 2 }.hasOwnProperty('a'))
|
|
101
|
+
const x = 1`;
|
|
102
|
+
const result = stripScenetest(code);
|
|
103
|
+
expect(result).not.toBeNull();
|
|
104
|
+
expect(result.code).toBe('const x = 1');
|
|
105
|
+
});
|
|
106
|
+
it('handles array literals', () => {
|
|
107
|
+
const code = `import { should } from '@scenetest/core'
|
|
108
|
+
should('test', [1, 2, 3].includes(2))
|
|
109
|
+
const x = 1`;
|
|
110
|
+
const result = stripScenetest(code);
|
|
111
|
+
expect(result).not.toBeNull();
|
|
112
|
+
expect(result.code).toBe('const x = 1');
|
|
113
|
+
});
|
|
114
|
+
it('handles arrow functions', () => {
|
|
115
|
+
const code = `import { should } from '@scenetest/core'
|
|
116
|
+
should('test', (() => true)())
|
|
117
|
+
const x = 1`;
|
|
118
|
+
const result = stripScenetest(code);
|
|
119
|
+
expect(result).not.toBeNull();
|
|
120
|
+
expect(result.code).toBe('const x = 1');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('no-op cases', () => {
|
|
124
|
+
it('returns null when no scenetest import', () => {
|
|
125
|
+
const code = `const x = 1
|
|
126
|
+
console.log(x)`;
|
|
127
|
+
const result = stripScenetest(code);
|
|
128
|
+
expect(result).toBeNull();
|
|
129
|
+
});
|
|
130
|
+
it('does not strip should() not from scenetest', () => {
|
|
131
|
+
const code = `function should(msg, condition) { console.log(msg) }
|
|
132
|
+
should('test', true)
|
|
133
|
+
const x = 1`;
|
|
134
|
+
// No scenetest import, so no transformation
|
|
135
|
+
const result = stripScenetest(code);
|
|
136
|
+
expect(result).toBeNull();
|
|
137
|
+
});
|
|
138
|
+
it('does not strip when should/failed are from different module', () => {
|
|
139
|
+
const code = `import { should } from 'other-module'
|
|
140
|
+
should('test', true)
|
|
141
|
+
const x = 1`;
|
|
142
|
+
const result = stripScenetest(code);
|
|
143
|
+
expect(result).toBeNull();
|
|
144
|
+
});
|
|
145
|
+
it('ignores strings containing "should("', () => {
|
|
146
|
+
const code = `const x = "should('test', true)"
|
|
147
|
+
const y = 1`;
|
|
148
|
+
const result = stripScenetest(code);
|
|
149
|
+
expect(result).toBeNull();
|
|
150
|
+
});
|
|
151
|
+
it('ignores comments containing should()', () => {
|
|
152
|
+
const code = `// should('test', true)
|
|
153
|
+
/* should('test', true) */
|
|
154
|
+
const x = 1`;
|
|
155
|
+
const result = stripScenetest(code);
|
|
156
|
+
expect(result).toBeNull();
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('JSX support', () => {
|
|
160
|
+
it('handles should() in JSX component', () => {
|
|
161
|
+
const code = `import { should } from '@scenetest/core'
|
|
162
|
+
|
|
163
|
+
function Component() {
|
|
164
|
+
should('component rendered', true)
|
|
165
|
+
return <div>Hello</div>
|
|
166
|
+
}`;
|
|
167
|
+
const result = stripScenetest(code);
|
|
168
|
+
expect(result).not.toBeNull();
|
|
169
|
+
expect(result.code).toContain('function Component()');
|
|
170
|
+
expect(result.code).toContain('return <div>Hello</div>');
|
|
171
|
+
expect(result.code).not.toContain('should(');
|
|
172
|
+
});
|
|
173
|
+
it('handles should() in JSX expression', () => {
|
|
174
|
+
const code = `import { should } from '@scenetest/core'
|
|
175
|
+
|
|
176
|
+
function Component() {
|
|
177
|
+
return (
|
|
178
|
+
<div>
|
|
179
|
+
{should('in jsx', true)}
|
|
180
|
+
Hello
|
|
181
|
+
</div>
|
|
182
|
+
)
|
|
183
|
+
}`;
|
|
184
|
+
const result = stripScenetest(code);
|
|
185
|
+
expect(result).not.toBeNull();
|
|
186
|
+
// In expression context, should() is replaced with void 0
|
|
187
|
+
expect(result.code).toContain('void 0');
|
|
188
|
+
expect(result.code).not.toContain("should('in jsx'");
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe('TypeScript support', () => {
|
|
192
|
+
it('handles TypeScript syntax', () => {
|
|
193
|
+
const code = `import { should } from '@scenetest/core'
|
|
194
|
+
|
|
195
|
+
interface User {
|
|
196
|
+
name: string
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function greet(user: User): void {
|
|
200
|
+
should('user has name', user.name.length > 0)
|
|
201
|
+
console.log(user.name)
|
|
202
|
+
}`;
|
|
203
|
+
const result = stripScenetest(code);
|
|
204
|
+
expect(result).not.toBeNull();
|
|
205
|
+
expect(result.code).toContain('interface User');
|
|
206
|
+
expect(result.code).toContain('function greet(user: User)');
|
|
207
|
+
expect(result.code).toContain('console.log(user.name)');
|
|
208
|
+
expect(result.code).not.toContain('should(');
|
|
209
|
+
});
|
|
210
|
+
it('handles generic types', () => {
|
|
211
|
+
const code = `import { should } from '@scenetest/core'
|
|
212
|
+
|
|
213
|
+
function identity<T>(value: T): T {
|
|
214
|
+
should('identity called', true)
|
|
215
|
+
return value
|
|
216
|
+
}`;
|
|
217
|
+
const result = stripScenetest(code);
|
|
218
|
+
expect(result).not.toBeNull();
|
|
219
|
+
expect(result.code).toContain('function identity<T>');
|
|
220
|
+
expect(result.code).not.toContain('should(');
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
describe('expression contexts (defensive)', () => {
|
|
224
|
+
it('replaces should() in assignment with void 0', () => {
|
|
225
|
+
const code = `import { should } from '@scenetest/core'
|
|
226
|
+
const x = should('test', true)
|
|
227
|
+
console.log(x)`;
|
|
228
|
+
const result = stripScenetest(code);
|
|
229
|
+
expect(result).not.toBeNull();
|
|
230
|
+
expect(result.code).toContain('const x = void 0');
|
|
231
|
+
});
|
|
232
|
+
it('replaces should() in logical expression with void 0', () => {
|
|
233
|
+
const code = `import { should } from '@scenetest/core'
|
|
234
|
+
const x = condition && should('test', true)
|
|
235
|
+
console.log(x)`;
|
|
236
|
+
const result = stripScenetest(code);
|
|
237
|
+
expect(result).not.toBeNull();
|
|
238
|
+
expect(result.code).toContain('condition && void 0');
|
|
239
|
+
});
|
|
240
|
+
it('replaces should() in ternary with void 0', () => {
|
|
241
|
+
const code = `import { should } from '@scenetest/core'
|
|
242
|
+
const x = cond ? should('a', true) : should('b', false)
|
|
243
|
+
console.log(x)`;
|
|
244
|
+
const result = stripScenetest(code);
|
|
245
|
+
expect(result).not.toBeNull();
|
|
246
|
+
expect(result.code).toContain('cond ? void 0 : void 0');
|
|
247
|
+
});
|
|
248
|
+
it('replaces should() in comma expression with void 0', () => {
|
|
249
|
+
const code = `import { should } from '@scenetest/core'
|
|
250
|
+
const x = (should('test', true), 42)
|
|
251
|
+
console.log(x)`;
|
|
252
|
+
const result = stripScenetest(code);
|
|
253
|
+
expect(result).not.toBeNull();
|
|
254
|
+
expect(result.code).toContain('(void 0, 42)');
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe('source maps', () => {
|
|
258
|
+
it('generates source map by default', () => {
|
|
259
|
+
const code = `import { should } from '@scenetest/core'
|
|
260
|
+
should('test', true)`;
|
|
261
|
+
const result = stripScenetest(code);
|
|
262
|
+
expect(result).not.toBeNull();
|
|
263
|
+
expect(result.map).not.toBeNull();
|
|
264
|
+
});
|
|
265
|
+
it('can disable source map', () => {
|
|
266
|
+
const code = `import { should } from '@scenetest/core'
|
|
267
|
+
should('test', true)`;
|
|
268
|
+
const result = stripScenetest(code, { sourceMap: false });
|
|
269
|
+
expect(result).not.toBeNull();
|
|
270
|
+
expect(result.map).toBeNull();
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
describe('scenetest-vue imports', () => {
|
|
274
|
+
it('removes import from scenetest-vue', () => {
|
|
275
|
+
const code = `import { should, failed, useAssert } from '@scenetest/vue'
|
|
276
|
+
const x = 1`;
|
|
277
|
+
const result = stripScenetest(code);
|
|
278
|
+
expect(result).not.toBeNull();
|
|
279
|
+
expect(result.code).toBe('const x = 1');
|
|
280
|
+
});
|
|
281
|
+
it('handles Vue component with scenetest-vue imports', () => {
|
|
282
|
+
const code = `import { ref } from 'vue'
|
|
283
|
+
import { should, useAssert } from '@scenetest/vue'
|
|
284
|
+
|
|
285
|
+
const count = ref(0)
|
|
286
|
+
should('rendered', true)
|
|
287
|
+
useAssert({ title: 'test', withData: () => ({ count: count.value }), serverFn: () => {} }, [() => count.value])
|
|
288
|
+
console.log(count.value)`;
|
|
289
|
+
const result = stripScenetest(code);
|
|
290
|
+
expect(result).not.toBeNull();
|
|
291
|
+
expect(result.code).toContain("import { ref } from 'vue'");
|
|
292
|
+
expect(result.code).not.toContain("from '@scenetest/vue'");
|
|
293
|
+
expect(result.code).not.toContain('should(');
|
|
294
|
+
expect(result.code).not.toContain('useAssert(');
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
describe('scenetest-solid imports', () => {
|
|
298
|
+
it('removes import from scenetest-solid', () => {
|
|
299
|
+
const code = `import { should, failed, createAssert } from '@scenetest/solid'
|
|
300
|
+
const x = 1`;
|
|
301
|
+
const result = stripScenetest(code);
|
|
302
|
+
expect(result).not.toBeNull();
|
|
303
|
+
expect(result.code).toBe('const x = 1');
|
|
304
|
+
});
|
|
305
|
+
it('handles Solid component with scenetest-solid imports', () => {
|
|
306
|
+
const code = `import { createSignal } from 'solid-js'
|
|
307
|
+
import { should, createAssert } from '@scenetest/solid'
|
|
308
|
+
|
|
309
|
+
function Component() {
|
|
310
|
+
const [count, setCount] = createSignal(0)
|
|
311
|
+
should('rendered', true)
|
|
312
|
+
createAssert({ title: 'test', withData: () => ({ count: count() }), serverFn: () => {} }, [count])
|
|
313
|
+
return count()
|
|
314
|
+
}`;
|
|
315
|
+
const result = stripScenetest(code);
|
|
316
|
+
expect(result).not.toBeNull();
|
|
317
|
+
expect(result.code).toContain("import { createSignal } from 'solid-js'");
|
|
318
|
+
expect(result.code).not.toContain("from '@scenetest/solid'");
|
|
319
|
+
expect(result.code).not.toContain('should(');
|
|
320
|
+
expect(result.code).not.toContain('createAssert(');
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
describe('scenetest-svelte imports', () => {
|
|
324
|
+
it('removes import from scenetest-svelte', () => {
|
|
325
|
+
const code = `import { should, failed, runAssert } from '@scenetest/svelte'
|
|
326
|
+
const x = 1`;
|
|
327
|
+
const result = stripScenetest(code);
|
|
328
|
+
expect(result).not.toBeNull();
|
|
329
|
+
expect(result.code).toBe('const x = 1');
|
|
330
|
+
});
|
|
331
|
+
it('handles Svelte with scenetest-svelte imports', () => {
|
|
332
|
+
const code = `import { should, runAssert } from '@scenetest/svelte'
|
|
333
|
+
|
|
334
|
+
let count = 0
|
|
335
|
+
should('rendered', true)
|
|
336
|
+
runAssert({ title: 'test', withData: () => ({ count }), serverFn: () => {} })
|
|
337
|
+
console.log(count)`;
|
|
338
|
+
const result = stripScenetest(code);
|
|
339
|
+
expect(result).not.toBeNull();
|
|
340
|
+
expect(result.code).not.toContain("from '@scenetest/svelte'");
|
|
341
|
+
expect(result.code).not.toContain('should(');
|
|
342
|
+
expect(result.code).not.toContain('runAssert(');
|
|
343
|
+
expect(result.code).toContain('let count = 0');
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
describe('scenetest-react imports', () => {
|
|
347
|
+
it('removes import from scenetest-react', () => {
|
|
348
|
+
const code = `import { should, failed, useAssert } from '@scenetest/react'
|
|
349
|
+
const x = 1`;
|
|
350
|
+
const result = stripScenetest(code);
|
|
351
|
+
expect(result).not.toBeNull();
|
|
352
|
+
expect(result.code).toBe('const x = 1');
|
|
353
|
+
});
|
|
354
|
+
it('removes should/failed/useAssert calls from scenetest-react', () => {
|
|
355
|
+
const code = `import { should, failed, useAssert } from '@scenetest/react'
|
|
356
|
+
should('one', true)
|
|
357
|
+
failed('two')
|
|
358
|
+
useAssert({ title: 'test', withData: () => ({}), serverFn: () => {} }, [])
|
|
359
|
+
console.log('kept')`;
|
|
360
|
+
const result = stripScenetest(code);
|
|
361
|
+
expect(result).not.toBeNull();
|
|
362
|
+
expect(result.code.trim()).toBe(`console.log('kept')`);
|
|
363
|
+
});
|
|
364
|
+
it('handles React component with scenetest-react imports', () => {
|
|
365
|
+
const code = `import { useState } from 'react'
|
|
366
|
+
import { should, useAssert } from '@scenetest/react'
|
|
367
|
+
|
|
368
|
+
function Component() {
|
|
369
|
+
const [count, setCount] = useState(0)
|
|
370
|
+
should('rendered', true)
|
|
371
|
+
useAssert({ title: 'test', withData: () => ({ count }), serverFn: () => {} }, [count])
|
|
372
|
+
return <div>{count}</div>
|
|
373
|
+
}`;
|
|
374
|
+
const result = stripScenetest(code);
|
|
375
|
+
expect(result).not.toBeNull();
|
|
376
|
+
expect(result.code).toContain("import { useState } from 'react'");
|
|
377
|
+
expect(result.code).not.toContain("from '@scenetest/react'");
|
|
378
|
+
expect(result.code).not.toContain('should(');
|
|
379
|
+
expect(result.code).not.toContain('useAssert(');
|
|
380
|
+
expect(result.code).toContain('function Component()');
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
describe('real-world example', () => {
|
|
384
|
+
it('handles a React component with multiple assertions', () => {
|
|
385
|
+
const code = `import { useState, useEffect } from 'react'
|
|
386
|
+
import { should, failed } from '@scenetest/core'
|
|
387
|
+
|
|
388
|
+
function ProfileForm() {
|
|
389
|
+
const [profile, setProfile] = useState(null)
|
|
390
|
+
const [loading, setLoading] = useState(true)
|
|
391
|
+
|
|
392
|
+
should('ProfileForm should render', true)
|
|
393
|
+
|
|
394
|
+
useEffect(() => {
|
|
395
|
+
fetchProfile().then(data => {
|
|
396
|
+
setProfile(data)
|
|
397
|
+
setLoading(false)
|
|
398
|
+
should('Profile should load successfully', data !== null)
|
|
399
|
+
}).catch(() => {
|
|
400
|
+
failed('Profile fetch failed unexpectedly')
|
|
401
|
+
})
|
|
402
|
+
}, [])
|
|
403
|
+
|
|
404
|
+
if (loading) {
|
|
405
|
+
return <div>Loading...</div>
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
should('Profile data should be available', profile !== null)
|
|
409
|
+
|
|
410
|
+
return (
|
|
411
|
+
<form>
|
|
412
|
+
<input value={profile?.name ?? ''} />
|
|
413
|
+
</form>
|
|
414
|
+
)
|
|
415
|
+
}`;
|
|
416
|
+
const result = stripScenetest(code);
|
|
417
|
+
expect(result).not.toBeNull();
|
|
418
|
+
// Should keep React import
|
|
419
|
+
expect(result.code).toContain("import { useState, useEffect } from 'react'");
|
|
420
|
+
// Should remove scenetest import
|
|
421
|
+
expect(result.code).not.toContain("from '@scenetest/core'");
|
|
422
|
+
// Should remove all should/failed calls
|
|
423
|
+
expect(result.code).not.toContain('should(');
|
|
424
|
+
expect(result.code).not.toContain('failed(');
|
|
425
|
+
// Should keep the component logic
|
|
426
|
+
expect(result.code).toContain('function ProfileForm()');
|
|
427
|
+
expect(result.code).toContain('useState(null)');
|
|
428
|
+
expect(result.code).toContain('useEffect(');
|
|
429
|
+
expect(result.code).toContain('fetchProfile()');
|
|
430
|
+
expect(result.code).toContain('return (');
|
|
431
|
+
});
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
//# sourceMappingURL=strip.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip.test.js","sourceRoot":"","sources":["../../src/__tests__/strip.test.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ServerContext } from '@scenetest/core';
|
|
2
|
+
/**
|
|
3
|
+
* Scenetest configuration object
|
|
4
|
+
*/
|
|
5
|
+
export interface ScenetestConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Server functions available in serverFn via the `server` parameter.
|
|
8
|
+
* These functions can access databases, APIs, or any server-side resources.
|
|
9
|
+
*/
|
|
10
|
+
serverFunctions?: Partial<ServerContext>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Helper function for defining scenetest config with type safety
|
|
14
|
+
*/
|
|
15
|
+
export declare function defineScenetestConfig(config: ScenetestConfig): ScenetestConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Clear cached config (for HMR)
|
|
18
|
+
*/
|
|
19
|
+
export declare function clearConfigCache(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Find the scenetest config file path
|
|
22
|
+
*/
|
|
23
|
+
export declare function findConfigPath(root: string): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* Load the scenetest config using Vite's SSR module loader.
|
|
26
|
+
* This must be called from the server context with access to ViteDevServer.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadConfig(root: string, ssrLoadModule: (id: string) => Promise<Record<string, unknown>>): Promise<ScenetestConfig>;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a file path is the scenetest config file
|
|
31
|
+
*/
|
|
32
|
+
export declare function isConfigFile(file: string, root: string): boolean;
|
|
33
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CACzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAE9E;AAQD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW1D;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9D,OAAO,CAAC,eAAe,CAAC,CAuB1B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOhE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Helper function for defining scenetest config with type safety
|
|
5
|
+
*/
|
|
6
|
+
export function defineScenetestConfig(config) {
|
|
7
|
+
return config;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Cached config to avoid re-loading on every request
|
|
11
|
+
*/
|
|
12
|
+
let cachedConfig = null;
|
|
13
|
+
let cachedConfigPath = null;
|
|
14
|
+
/**
|
|
15
|
+
* Clear cached config (for HMR)
|
|
16
|
+
*/
|
|
17
|
+
export function clearConfigCache() {
|
|
18
|
+
cachedConfig = null;
|
|
19
|
+
cachedConfigPath = null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find the scenetest config file path
|
|
23
|
+
*/
|
|
24
|
+
export function findConfigPath(root) {
|
|
25
|
+
const extensions = ['ts', 'js', 'mjs'];
|
|
26
|
+
for (const ext of extensions) {
|
|
27
|
+
const configPath = resolve(root, `scenetest.config.${ext}`);
|
|
28
|
+
if (existsSync(configPath)) {
|
|
29
|
+
return configPath;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Load the scenetest config using Vite's SSR module loader.
|
|
36
|
+
* This must be called from the server context with access to ViteDevServer.
|
|
37
|
+
*/
|
|
38
|
+
export async function loadConfig(root, ssrLoadModule) {
|
|
39
|
+
// Return cached config if available
|
|
40
|
+
if (cachedConfig) {
|
|
41
|
+
return cachedConfig;
|
|
42
|
+
}
|
|
43
|
+
const configPath = findConfigPath(root);
|
|
44
|
+
if (!configPath) {
|
|
45
|
+
cachedConfig = {};
|
|
46
|
+
return cachedConfig;
|
|
47
|
+
}
|
|
48
|
+
cachedConfigPath = configPath;
|
|
49
|
+
try {
|
|
50
|
+
const module = await ssrLoadModule(configPath);
|
|
51
|
+
cachedConfig = module.default || {};
|
|
52
|
+
return cachedConfig;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.warn(`[vite-plugin-scenetest] Failed to load config from ${configPath}:`, err);
|
|
56
|
+
cachedConfig = {};
|
|
57
|
+
return cachedConfig;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if a file path is the scenetest config file
|
|
62
|
+
*/
|
|
63
|
+
export function isConfigFile(file, root) {
|
|
64
|
+
if (!cachedConfigPath) {
|
|
65
|
+
// Check if file matches any potential config path
|
|
66
|
+
const configPath = findConfigPath(root);
|
|
67
|
+
return configPath === file;
|
|
68
|
+
}
|
|
69
|
+
return cachedConfigPath === file;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAa9B;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,IAAI,YAAY,GAA2B,IAAI,CAAA;AAC/C,IAAI,gBAAgB,GAAkB,IAAI,CAAA;AAE1C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,YAAY,GAAG,IAAI,CAAA;IACnB,gBAAgB,GAAG,IAAI,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAEtC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,EAAE,CAAC,CAAA;QAC3D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAA;QACnB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,aAA+D;IAE/D,oCAAoC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,YAAY,GAAG,EAAE,CAAA;QACjB,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,gBAAgB,GAAG,UAAU,CAAA;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAA;QAC9C,YAAY,GAAI,MAAM,CAAC,OAA2B,IAAI,EAAE,CAAA;QACxD,OAAO,YAAY,CAAA;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,UAAU,GAAG,EAAE,GAAG,CAAC,CAAA;QACtF,YAAY,GAAG,EAAE,CAAA;QACjB,OAAO,YAAY,CAAA;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAY;IACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,kDAAkD;QAClD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,UAAU,KAAK,IAAI,CAAA;IAC5B,CAAC;IACD,OAAO,gBAAgB,KAAK,IAAI,CAAA;AAClC,CAAC"}
|