@@ -6,6 +6,9 @@ import { join } from 'node:path'
66import { codeExtract , getCss } from '@devup-ui/wasm'
77import { globSync } from 'glob'
88
9+ import { findTopPackageRoot } from '../find-top-package-root'
10+ import { getPackageName } from '../get-package-name'
11+ import { hasLocalPackage } from '../has-localpackage'
912import { preload } from '../preload'
1013
1114// Mock dependencies
@@ -33,6 +36,18 @@ vi.mock('@devup-ui/wasm', () => ({
3336 getCss : vi . fn ( ) ,
3437} ) )
3538
39+ vi . mock ( '../find-top-package-root' , ( ) => ( {
40+ findTopPackageRoot : vi . fn ( ) ,
41+ } ) )
42+
43+ vi . mock ( '../get-package-name' , ( ) => ( {
44+ getPackageName : vi . fn ( ) ,
45+ } ) )
46+
47+ vi . mock ( '../has-localpackage' , ( ) => ( {
48+ hasLocalPackage : vi . fn ( ) ,
49+ } ) )
50+
3651describe ( 'preload' , ( ) => {
3752 beforeEach ( ( ) => {
3853 vi . clearAllMocks ( )
@@ -233,4 +248,63 @@ describe('preload', () => {
233248 'utf-8' ,
234249 )
235250 } )
251+
252+ it ( 'should recurse into local workspaces when include is provided' , ( ) => {
253+ const files = [ 'src/App.tsx' ]
254+ vi . mocked ( findTopPackageRoot ) . mockReturnValue ( '/repo' )
255+ vi . mocked ( hasLocalPackage )
256+ . mockReturnValueOnce ( true )
257+ . mockReturnValueOnce ( false )
258+ vi . mocked ( globSync )
259+ . mockReturnValueOnce ( [
260+ '/repo/packages/pkg-a/package.json' ,
261+ '/repo/packages/pkg-b/package.json' ,
262+ ] )
263+ . mockReturnValueOnce ( files )
264+ vi . mocked ( getPackageName )
265+ . mockReturnValueOnce ( 'pkg-a' )
266+ . mockReturnValueOnce ( 'pkg-b' )
267+ vi . mocked ( realpathSync ) . mockReturnValueOnce ( 'src/App.tsx' )
268+
269+ preload ( / n o d e _ m o d u l e s / , '@devup-ui/react' , false , '/output/css' , [ 'pkg-a' ] )
270+
271+ expect ( findTopPackageRoot ) . toHaveBeenCalled ( )
272+ expect ( globSync ) . toHaveBeenCalledWith (
273+ [ 'package.json' , '!**/node_modules/**' ] ,
274+ {
275+ follow : true ,
276+ absolute : true ,
277+ cwd : '/repo' ,
278+ } ,
279+ )
280+ expect ( codeExtract ) . toHaveBeenCalledTimes ( 1 )
281+ expect ( realpathSync ) . toHaveBeenCalledWith ( 'src/App.tsx' )
282+ } )
283+
284+ it ( 'should skip test and build outputs based on filters' , ( ) => {
285+ vi . mocked ( globSync ) . mockReturnValue ( [
286+ 'src/App.test.tsx' ,
287+ '.next/page.tsx' ,
288+ 'out/index.js' ,
289+ 'src/keep.ts' ,
290+ ] )
291+ vi . mocked ( realpathSync )
292+ . mockReturnValueOnce ( 'src/App.test.tsx' )
293+ . mockReturnValueOnce ( '.next/page.tsx' )
294+ . mockReturnValueOnce ( 'out/index.js' )
295+ . mockReturnValueOnce ( 'src/keep.ts' )
296+
297+ preload ( / e x c l u d e / , '@devup-ui/react' , false , '/output/css' , [ ] )
298+
299+ expect ( codeExtract ) . toHaveBeenCalledTimes ( 1 )
300+ expect ( codeExtract ) . toHaveBeenCalledWith (
301+ expect . stringMatching ( / k e e p \. t s $ / ) ,
302+ 'const Button = () => <div>Hello</div>' ,
303+ '@devup-ui/react' ,
304+ '/output/css' ,
305+ false ,
306+ false ,
307+ true ,
308+ )
309+ } )
236310} )
0 commit comments