import {afterAll,expect,test} from "bun:test"; import {mkdirSync,mkdtempSync,readFileSync,readdirSync,rmSync,writeFileSync} from "node:fs"; import {join} from "node:path"; import {runBuild} from "../src/build.ts"; const scratch=join(import.meta.dir,".tmp-client-dependency"); mkdirSync(scratch,{recursive:true}); afterAll(()=>rmSync(scratch,{recursive:true,force:true})); test("changing a bundled dependency changes the immutable client URL",async()=>{ const root=mkdtempSync(join(scratch,"app-")); mkdirSync(join(root,"app/pages"),{recursive:true}); writeFileSync(join(root,"package.json"),JSON.stringify({name:"client-cache-fixture"})); writeFileSync(join(root,"wrnexus.config.ts"),"export default {};\n"); writeFileSync(join(root,"app/pages/index.wrn"),'import {message} from "../message.ts"\npage Home { functions { client function show(){alert(message)} } view { } }'); const files:string[]=[]; for(const message of ["first dependency","updated dependency"]){ writeFileSync(join(root,"app/message.ts"),`export const message=${JSON.stringify(message)};`); await runBuild(root); const file=readdirSync(join(root,"dist/client")).find(name=>name.startsWith("index-")&&readFileSync(join(root,"dist/client",name),"utf8").includes(message)); expect(file).toBeDefined(); files.push(file!); expect(readFileSync(join(root,"dist/server.js"),"utf8")).toContain(`/__wrnexus/client/${file}`); } expect(files[0]).not.toBe(files[1]); },120000);