@@ -5,7 +5,7 @@ import path from 'node:path';
55import { execPath } from 'node:process' ;
66import { describe , it } from 'node:test' ;
77import { spawn } from 'node:child_process' ;
8- import { writeFileSync , readFileSync , mkdirSync } from 'node:fs' ;
8+ import { writeFileSync , readFileSync , mkdirSync , write } from 'node:fs' ;
99import { inspect } from 'node:util' ;
1010import { pathToFileURL } from 'node:url' ;
1111import { once } from 'node:events' ;
@@ -922,4 +922,238 @@ process.on('message', (message) => {
922922 await done ( ) ;
923923 }
924924 } ) ;
925- } ) ;
925+
926+ it ( 'should watch changes to worker - cjs' , async ( ) => {
927+ const dir = tmpdir . resolve ( `watch-worker-cjs-${ Date . now ( ) } ` ) ;
928+ mkdirSync ( dir ) ;
929+
930+ const worker = path . join ( dir , 'worker.js' ) ;
931+
932+ writeFileSync ( worker , `
933+ console.log("worker running");
934+ ` ) ;
935+
936+ const file = createTmpFile ( `
937+ const { Worker } = require('node:worker_threads');
938+
939+ const w = new Worker(${ JSON . stringify ( worker ) } );
940+ w.on('exit', () => {
941+ console.log('running');
942+ });
943+ ` , '.js' , dir ) ;
944+
945+ const { stderr, stdout } = await runWriteSucceed ( {
946+ file,
947+ watchedFile : worker ,
948+ } ) ;
949+
950+ assert . strictEqual ( stderr , '' ) ;
951+ assert . deepStrictEqual ( stdout , [
952+ 'worker running' ,
953+ 'running' ,
954+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
955+ `Restarting ${ inspect ( file ) } ` ,
956+ 'worker running' ,
957+ 'running' ,
958+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
959+ ] ) ;
960+ } ) ;
961+
962+ it ( 'should watch changes to worker dependencies - cjs' , async ( ) => {
963+ const dir = tmpdir . resolve ( `watch-worker-dep-cjs-${ Date . now ( ) } ` ) ;
964+ mkdirSync ( dir ) ;
965+
966+ const dep = path . join ( dir , 'dep.js' ) ;
967+ const worker = path . join ( dir , 'worker.js' ) ;
968+
969+ writeFileSync ( dep , `
970+ module.exports = 'dep v1';
971+ ` ) ;
972+
973+ writeFileSync ( worker , `
974+ const dep = require('./dep.js');
975+ console.log(dep);
976+ ` ) ;
977+
978+ const file = createTmpFile ( `
979+ const { Worker } = require('node:worker_threads');
980+
981+ const w = new Worker(${ JSON . stringify ( worker ) } );
982+ w.on('exit', () => {
983+ console.log('running');
984+ });
985+ ` , '.js' , dir ) ;
986+
987+ const { stderr, stdout } = await runWriteSucceed ( {
988+ file,
989+ watchedFile : dep ,
990+ } ) ;
991+
992+ assert . strictEqual ( stderr , '' ) ;
993+ assert . deepStrictEqual ( stdout , [
994+ 'dep v1' ,
995+ 'running' ,
996+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
997+ `Restarting ${ inspect ( file ) } ` ,
998+ 'dep v1' ,
999+ 'running' ,
1000+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1001+ ] ) ;
1002+ } ) ;
1003+
1004+ it ( 'should watch changes to nested worker dependencies - cjs' , async ( ) => {
1005+ const dir = tmpdir . resolve ( `watch-worker-dep-cjs-${ Date . now ( ) } ` ) ;
1006+ mkdirSync ( dir ) ;
1007+
1008+ const subDep = path . join ( dir , 'sub-dep.js' ) ;
1009+ const dep = path . join ( dir , 'dep.js' ) ;
1010+ const worker = path . join ( dir , 'worker.js' ) ;
1011+
1012+ writeFileSync ( subDep , `
1013+ module.exports = 'sub-dep v1';
1014+ ` ) ;
1015+
1016+ writeFileSync ( dep , `
1017+ const subDep = require('./sub-dep.js');
1018+ console.log(subDep);
1019+ module.exports = 'dep v1';
1020+ ` ) ;
1021+
1022+ writeFileSync ( worker , `
1023+ const dep = require('./dep.js');
1024+ ` ) ;
1025+
1026+ const file = createTmpFile ( `
1027+ const { Worker } = require('node:worker_threads');
1028+
1029+ const w = new Worker(${ JSON . stringify ( worker ) } );
1030+ w.on('exit', () => {
1031+ console.log('running');
1032+ });
1033+ ` , '.js' , dir ) ;
1034+
1035+ const { stderr, stdout } = await runWriteSucceed ( {
1036+ file,
1037+ watchedFile : subDep ,
1038+ } ) ;
1039+
1040+ assert . strictEqual ( stderr , '' ) ;
1041+ assert . deepStrictEqual ( stdout , [
1042+ 'sub-dep v1' ,
1043+ 'running' ,
1044+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1045+ `Restarting ${ inspect ( file ) } ` ,
1046+ 'sub-dep v1' ,
1047+ 'running' ,
1048+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1049+ ] ) ;
1050+ } ) ;
1051+
1052+ it ( 'should watch changes to worker - esm' , async ( ) => {
1053+ const dir = tmpdir . resolve ( `watch-worker-esm-${ Date . now ( ) } ` ) ;
1054+ mkdirSync ( dir ) ;
1055+
1056+ const worker = path . join ( dir , 'worker.mjs' ) ;
1057+
1058+ writeFileSync ( worker , `
1059+ console.log("worker running");
1060+ ` ) ;
1061+
1062+ const file = createTmpFile ( `
1063+ import { Worker } from 'node:worker_threads';
1064+ new Worker(new URL(${ JSON . stringify ( pathToFileURL ( worker ) ) } ));
1065+ ` , '.mjs' , dir ) ;
1066+
1067+ const { stderr, stdout } = await runWriteSucceed ( {
1068+ file,
1069+ watchedFile : worker ,
1070+ } ) ;
1071+
1072+ assert . strictEqual ( stderr , '' ) ;
1073+ assert . deepStrictEqual ( stdout , [
1074+ 'worker running' ,
1075+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1076+ `Restarting ${ inspect ( file ) } ` ,
1077+ 'worker running' ,
1078+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1079+ ] ) ;
1080+ } ) ;
1081+
1082+ it ( 'should watch changes to worker dependencies - esm' , async ( ) => {
1083+ const dir = tmpdir . resolve ( `watch-worker-dep-esm-${ Date . now ( ) } ` ) ;
1084+ mkdirSync ( dir ) ;
1085+
1086+ const dep = path . join ( dir , 'dep.mjs' ) ;
1087+ const worker = path . join ( dir , 'worker.mjs' ) ;
1088+
1089+ writeFileSync ( dep , `
1090+ export default 'dep v1';
1091+ ` ) ;
1092+
1093+ writeFileSync ( worker , `
1094+ import dep from ${ JSON . stringify ( pathToFileURL ( dep ) ) } ;
1095+ console.log(dep);
1096+ ` ) ;
1097+
1098+ const file = createTmpFile ( `
1099+ import { Worker } from 'node:worker_threads';
1100+ new Worker(new URL(${ JSON . stringify ( pathToFileURL ( worker ) ) } ));
1101+ ` , '.mjs' , dir ) ;
1102+
1103+ const { stderr, stdout } = await runWriteSucceed ( {
1104+ file,
1105+ watchedFile : dep ,
1106+ } ) ;
1107+
1108+ assert . strictEqual ( stderr , '' ) ;
1109+ assert . deepStrictEqual ( stdout , [
1110+ 'dep v1' ,
1111+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1112+ `Restarting ${ inspect ( file ) } ` ,
1113+ 'dep v1' ,
1114+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1115+ ] ) ;
1116+ } ) ;
1117+
1118+ it ( 'should watch changes to nested worker dependencies - esm' , async ( ) => {
1119+ const dir = tmpdir . resolve ( `watch-worker-dep-esm-${ Date . now ( ) } ` ) ;
1120+ mkdirSync ( dir ) ;
1121+
1122+ const subDep = path . join ( dir , 'sub-dep.mjs' ) ;
1123+ const dep = path . join ( dir , 'dep.mjs' ) ;
1124+ const worker = path . join ( dir , 'worker.mjs' ) ;
1125+
1126+ writeFileSync ( subDep , `
1127+ export default 'sub-dep v1';
1128+ ` ) ;
1129+
1130+ writeFileSync ( dep , `
1131+ import subDep from ${ JSON . stringify ( pathToFileURL ( subDep ) ) } ;
1132+ console.log(subDep);
1133+ export default 'dep v1';
1134+ ` ) ;
1135+
1136+ writeFileSync ( worker , `
1137+ import dep from ${ JSON . stringify ( pathToFileURL ( dep ) ) } ;
1138+ ` ) ;
1139+
1140+ const file = createTmpFile ( `
1141+ import { Worker } from 'node:worker_threads';
1142+ new Worker(new URL(${ JSON . stringify ( pathToFileURL ( worker ) ) } ));
1143+ ` , '.mjs' , dir ) ;
1144+
1145+ const { stderr, stdout } = await runWriteSucceed ( {
1146+ file,
1147+ watchedFile : subDep ,
1148+ } ) ;
1149+
1150+ assert . strictEqual ( stderr , '' ) ;
1151+ assert . deepStrictEqual ( stdout , [
1152+ 'sub-dep v1' ,
1153+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1154+ `Restarting ${ inspect ( file ) } ` ,
1155+ 'sub-dep v1' ,
1156+ `Completed running ${ inspect ( file ) } . Waiting for file changes before restarting...` ,
1157+ ] ) ;
1158+ } ) ;
1159+ } ) ;
0 commit comments