@olegkuibar/plunk 0.7.6 → 0.8.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.
Files changed (55) hide show
  1. package/dist/add-S5F3UPAP.mjs +14 -0
  2. package/dist/chunk-2GDRDQA5.mjs +3 -0
  3. package/dist/{chunk-HHV6VEYA.mjs → chunk-5EOIBIQO.mjs} +3 -3
  4. package/dist/chunk-7ZWOJDCA.mjs +4 -0
  5. package/dist/chunk-ETKOGSRN.mjs +3 -0
  6. package/dist/chunk-GAS7XU4A.mjs +3 -0
  7. package/dist/chunk-HN3SZGD3.mjs +4 -0
  8. package/dist/chunk-PH7M73X2.mjs +13 -0
  9. package/dist/chunk-S3IAOIXI.mjs +3 -0
  10. package/dist/chunk-SG6M7SAC.mjs +4 -0
  11. package/dist/chunk-ULPTRGDP.mjs +3 -0
  12. package/dist/chunk-W4LHCWGD.mjs +3 -0
  13. package/dist/chunk-WSJHZ2ND.mjs +19 -0
  14. package/dist/clean-STIN6OS6.mjs +3 -0
  15. package/dist/cli.mjs +1 -1
  16. package/dist/{dev-DBGYZOIV.mjs → dev-YR4ZYYT4.mjs} +2 -2
  17. package/dist/doctor-DAEAGACF.mjs +4 -0
  18. package/dist/fs-6ZUVEONC.mjs +2 -0
  19. package/dist/index.d.ts +31 -5
  20. package/dist/index.mjs +250 -148
  21. package/dist/{init-C6XCSFCU.mjs → init-G6X5O3A3.mjs} +2 -2
  22. package/dist/list-N2B4TO6R.mjs +5 -0
  23. package/dist/migrate-YZRZUG54.mjs +8 -0
  24. package/dist/{publish-6A7PX5IH.mjs → publish-DGEQG3L5.mjs} +2 -2
  25. package/dist/{push-AUAGCBYK.mjs → push-VS3VZKU4.mjs} +1 -1
  26. package/dist/remove-GPLRNTDM.mjs +2 -0
  27. package/dist/reset-E5P4ZKQ7.mjs +3 -0
  28. package/dist/{restore-JVH6INAG.mjs → restore-WIYNZSQL.mjs} +1 -1
  29. package/dist/{status-22YV26A3.mjs → status-ADDZJ66C.mjs} +2 -2
  30. package/dist/tailwind-source-C2ANIANJ.mjs +5 -0
  31. package/dist/update-2Q46L6NR.mjs +3 -0
  32. package/dist/{vite-config-LXMLHR7V.mjs → vite-config-JEUUATXJ.mjs} +4 -4
  33. package/dist/watcher-KAPGRKYP.mjs +3 -0
  34. package/dist/workspace-4U2WM4MX.mjs +3 -0
  35. package/package.json +1 -1
  36. package/dist/add-GYBX4VAZ.mjs +0 -14
  37. package/dist/chunk-22YCXJTS.mjs +0 -4
  38. package/dist/chunk-4ZGIZZSF.mjs +0 -12
  39. package/dist/chunk-AC5FETT7.mjs +0 -4
  40. package/dist/chunk-CIY4E6PA.mjs +0 -3
  41. package/dist/chunk-EMRPZYLU.mjs +0 -3
  42. package/dist/chunk-LLVBXPQN.mjs +0 -3
  43. package/dist/chunk-PVMVWPLG.mjs +0 -4
  44. package/dist/chunk-SMIGYQFG.mjs +0 -15
  45. package/dist/chunk-TMH7HIJ2.mjs +0 -3
  46. package/dist/clean-F2IWAVRP.mjs +0 -3
  47. package/dist/doctor-GJGAAT6J.mjs +0 -4
  48. package/dist/fs-BUNURH4P.mjs +0 -2
  49. package/dist/list-QSPN7FE5.mjs +0 -5
  50. package/dist/migrate-4TFDXO4G.mjs +0 -8
  51. package/dist/remove-5DAQD627.mjs +0 -3
  52. package/dist/tailwind-source-YCRZUHUP.mjs +0 -5
  53. package/dist/update-33ICRFYZ.mjs +0 -3
  54. package/dist/watcher-SY45L3SS.mjs +0 -3
  55. package/dist/workspace-SKJJQMMK.mjs +0 -3
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$5,b as b$2}from'./chunk-4ZGIZZSF.mjs';import {a as a$2}from'./chunk-7JG555TZ.mjs';import {a as a$4,d}from'./chunk-AC5FETT7.mjs';import {a as a$6,c as c$1}from'./chunk-LLVBXPQN.mjs';import {a as a$3}from'./chunk-MBKCCWSD.mjs';import'./chunk-22YCXJTS.mjs';import {b as b$1,a as a$7}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {k,i}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {join,resolve,basename}from'path';import {readFile,writeFile}from'fs/promises';globalThis.require=createRequire(import.meta.url);
2
+ import {createRequire}from'node:module';import {a as a$5,b as b$2}from'./chunk-PH7M73X2.mjs';import {a as a$2}from'./chunk-7JG555TZ.mjs';import {a as a$4,d}from'./chunk-7ZWOJDCA.mjs';import {a as a$6,c as c$1}from'./chunk-W4LHCWGD.mjs';import {a as a$3}from'./chunk-MBKCCWSD.mjs';import'./chunk-GAS7XU4A.mjs';import {b as b$1,a as a$7}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {w,u}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {join,resolve,basename}from'path';import {readFile,writeFile}from'fs/promises';globalThis.require=createRequire(import.meta.url);
3
3
  var n=c(a(),1);var ee={meta:{name:"init",description:"Set up plunk in the current project"},args:{yes:{type:"boolean",alias:"y",description:"Skip confirmation prompts",default:false},role:{type:"string",description:'Project role: "consumer" or "library"'}},async run({args:a}){b$1();let o=new a$3,s=resolve("."),p=a.yes;b.info(`Initializing plunk in ${n.default.cyan(s)}
4
- `);let i$1=await a$4(s),d$1={pnpm:"pnpm-lock.yaml",bun:"bun.lockb",yarn:"yarn.lock",npm:"package-lock.json"};b.success(`Detected package manager: ${n.default.cyan(i$1)}`+(d$1[i$1]?` (from ${d$1[i$1]})`:""));let l=i$1;if(!p&&await b.prompt(`Use ${i$1}?`,{type:"confirm",initial:true})===false){let c=["npm","pnpm","yarn","bun"].filter(f=>f!==i$1),u=await b.prompt("Select package manager:",{type:"select",options:c.map(f=>({label:f,value:f}))});typeof u=="string"&&(l=u);}let r="consumer";a.role==="consumer"||a.role==="library"?r=a.role:p||await b.prompt("How will you use plunk in this project?",{type:"select",options:[{label:"Consumer (app) \u2014 I want to link packages INTO this project",value:"consumer"},{label:"Library (package) \u2014 I want to publish this package FOR other projects",value:"library"}]})==="library"&&(r="library"),b.success(`Project role: ${n.default.cyan(r)}`);let R=join(s,".gitignore");await a$5(R)&&b.success("Added .plunk/ to .gitignore");let m=join(s,"package.json");if(await k(m))if(r==="consumer"){if(await b$2(m)&&b.success('Added "postinstall": "plunk restore" to package.json scripts'),!p){let c=await b.prompt("Package name to link (leave blank to skip):",{type:"text",default:""});if(typeof c=="string"&&c.trim()){let u=c.trim();await $(m,"plunk:add",`plunk add ${u}`)&&b.success(`Added "plunk:add": "plunk add ${u}" to package.json scripts`);}}}else {await T(m,l,p);let t=await V(m);for(let c of t)b.success(`Added "${c}" script to package.json`);}let y=join(s,".plunk");if(!await k(y))await i(y),await writeFile(join(y,"state.json"),JSON.stringify({version:"1",packageManager:l,role:r,links:{}},null,2)),b.success("Created .plunk/ state directory");else {let t=await a$6(s);t.packageManager=l,t.role=r,await c$1(s,t);}if(r==="consumer"){let t=await d(s);if(t.type==="vite"&&t.configFile){b.success(`Detected bundler: ${n.default.cyan("Vite")} (${basename(t.configFile)})`);let{addPlunkVitePlugin:c}=await import('./vite-config-LXMLHR7V.mjs'),u=await c(t.configFile);u.modified?b.success(`Added plunk plugin to ${basename(t.configFile)}`):u.error&&b.info(`Add the Vite plugin for automatic dev server restarts:
4
+ `);let i=await a$4(s),d$1={pnpm:"pnpm-lock.yaml",bun:"bun.lockb",yarn:"yarn.lock",npm:"package-lock.json"};b.success(`Detected package manager: ${n.default.cyan(i)}`+(d$1[i]?` (from ${d$1[i]})`:""));let l=i;if(!p&&await b.prompt(`Use ${i}?`,{type:"confirm",initial:true})===false){let c=["npm","pnpm","yarn","bun"].filter(f=>f!==i),u=await b.prompt("Select package manager:",{type:"select",options:c.map(f=>({label:f,value:f}))});typeof u=="string"&&(l=u);}let r="consumer";a.role==="consumer"||a.role==="library"?r=a.role:p||await b.prompt("How will you use plunk in this project?",{type:"select",options:[{label:"Consumer (app) \u2014 I want to link packages INTO this project",value:"consumer"},{label:"Library (package) \u2014 I want to publish this package FOR other projects",value:"library"}]})==="library"&&(r="library"),b.success(`Project role: ${n.default.cyan(r)}`);let R=join(s,".gitignore");await a$5(R)&&b.success("Added .plunk/ to .gitignore");let m=join(s,"package.json");if(await w(m))if(r==="consumer"){if(await b$2(m)&&b.success('Added "postinstall": "plunk restore" to package.json scripts'),!p){let c=await b.prompt("Package name to link (leave blank to skip):",{type:"text",default:""});if(typeof c=="string"&&c.trim()){let u=c.trim();await $(m,"plunk:add",`plunk add ${u}`)&&b.success(`Added "plunk:add": "plunk add ${u}" to package.json scripts`);}}}else {await T(m,l,p);let t=await V(m);for(let c of t)b.success(`Added "${c}" script to package.json`);}let y=join(s,".plunk");if(!await w(y))await u(y),await writeFile(join(y,"state.json"),JSON.stringify({version:"1",packageManager:l,role:r,links:{}},null,2)),b.success("Created .plunk/ state directory");else {let t=await a$6(s);t.packageManager=l,t.role=r,await c$1(s,t);}if(r==="consumer"){let t=await d(s);if(t.type==="vite"&&t.configFile){b.success(`Detected bundler: ${n.default.cyan("Vite")} (${basename(t.configFile)})`);let{addPlunkVitePlugin:c}=await import('./vite-config-JEUUATXJ.mjs'),u=await c(t.configFile);u.modified?b.success(`Added plunk plugin to ${basename(t.configFile)}`):u.error&&b.info(`Add the Vite plugin for automatic dev server restarts:
5
5
  ${n.default.cyan('import plunk from "@olegkuibar/plunk/vite"')}
6
6
  ${n.default.cyan("plugins: [plunk()]")}`);}else if(t.type==="next"&&t.configFile)b.success(`Detected bundler: ${n.default.cyan("Next.js")} (${basename(t.configFile)})`),b.info(`Next.js transpilePackages will be auto-configured when you run ${n.default.cyan("plunk add")}`);else if(t.type){let c={webpack:"Webpack",turbo:"Turbopack",rollup:"Rollup"};b.success(`Detected bundler: ${n.default.cyan(c[t.type]||t.type)} \u2014 no config needed, works out of the box`);}b.log(""),b.info(`${n.default.bold("Next steps:")}`),b.log(` 1. ${n.default.cyan("cd ../my-lib && plunk publish")}`),b.log(` 2. ${n.default.cyan("plunk add my-lib")}${t.type==="vite"?" \u2190 auto-updates vite config":t.type==="next"?" \u2190 auto-updates next config":""}`),b.log(` 3. ${n.default.cyan("cd ../my-lib && plunk dev")} \u2190 watch + rebuild + auto-push`);}else b.log(""),b.info(`${n.default.bold("Next steps:")}`),b.log(` 1. ${n.default.cyan("plunk publish")} \u2190 copy built files to plunk store`),b.log(` 2. ${n.default.cyan(`${l} run plunk:dev`)} \u2190 watch + rebuild + auto-push to consumers`),b.log(` 3. In consumer project: ${n.default.cyan("plunk add "+await H(m))}`);b.info(`Done in ${o.elapsed()}`),a$7({packageManager:l,role:r,elapsed:o.elapsedMs()});}};async function $(a,o,s){let p=await readFile(a,"utf-8"),i=JSON.parse(p);if(i.scripts?.[o])return false;i.scripts||(i.scripts={}),i.scripts[o]=s;let d=p.match(/^(\s+)"/m)?.[1]||" ";return await writeFile(a,JSON.stringify(i,null,d)+`
7
7
  `),true}a$1($,"addScript");async function T(a,o,s){let p=join(a,".."),i=await a$2(p,o);if(i)return b.success(`Detected build script: ${n.default.cyan(i)}`),i;let d=o==="npm"?"npm run ":`${o} `;if(!s){b.warn("No build script found in package.json");let r=await b.prompt("Build command (e.g. tsc, tsup, rollup -c):",{type:"text",default:""});if(typeof r=="string"&&r.trim())return r.trim()}let l=`${d}build`;return b.warn(`Using ${n.default.cyan(l)} as placeholder \u2014 add a "build" script to package.json`),l}a$1(T,"detectBuildCommand");async function V(a){let o=[];return await $(a,"plunk:publish","plunk publish")&&o.push("plunk:publish"),await $(a,"plunk:dev","plunk dev")&&o.push("plunk:dev"),o}a$1(V,"addLibraryScripts");async function H(a){try{return JSON.parse(await readFile(a,"utf-8")).name||"my-package"}catch{return "my-package"}}a$1(H,"readPkgName");export{ee as default};
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {a as a$5}from'./chunk-2GDRDQA5.mjs';import {a as a$2,g}from'./chunk-W4LHCWGD.mjs';import {b as b$1,d}from'./chunk-ETKOGSRN.mjs';import'./chunk-GAS7XU4A.mjs';import {a as a$3,b as b$2}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a as a$4,y}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var o=c(a(),1);var B={meta:{name:"list",description:"List linked packages in current project or in the store"},args:{store:{type:"boolean",description:"List all packages in the global plunk store",default:false}},async run({args:n}){b$2(),n.store?await j():await L();}};async function L(){let n=await a$2(resolve(".")),m=Object.entries(n.links);if(m.length===0){b.info("No linked packages in this project"),a$3({packages:[]});return}b.info(`Linked packages (${m.length}):
4
+ `);let l=a$4(8),r=await Promise.all(m.map(([t,i])=>l(async()=>{let s=await b$1(t,i.version),e=!!(s&&s.meta.contentHash!==i.contentHash);return {name:t,version:i.version,buildId:i.buildId??null,stale:e,sourcePath:i.sourcePath}})));for(let t of r){let i=t.buildId?`[${t.buildId}]`:"[--------]",s=t.stale?o.default.yellow(" (stale)"):"";b.log(` ${o.default.cyan(t.name)} ${o.default.dim("@"+t.version)} ${o.default.dim(i)}${s} \u2190 ${o.default.dim(t.sourcePath)}`);}a$3({packages:r});}a$1(L,"listProject");async function j(){let[n,m]=await Promise.all([d(),g()]);if(n.length===0){b.info("Plunk store is empty"),a$3({entries:[],totalSize:0});return}let l=a$4(8),r=await Promise.all(n.map(s=>l(()=>y(s.packageDir)))),t=r.reduce((s,e)=>s+e,0);b.info(`Store entries (${n.length}, ${a$5(t)} total):
5
+ `);let i=[];for(let s=0;s<n.length;s++){let e=n[s],g=r[s],w=D(new Date(e.meta.publishedAt)),v=e.meta.buildId?`[${e.meta.buildId}]`:"[--------]",u=m[e.name]?.length??0,I=u>0?o.default.green(`${u} consumer${u>1?"s":""}`):o.default.dim("no consumers");b.log(` ${o.default.cyan(e.name)} ${o.default.dim("@"+e.version)} ${o.default.dim(v)} ${o.default.dim(a$5(g))} ${o.default.dim(`published ${w}`)} ${I}`),b.log(` ${o.default.dim(`from: ${e.meta.sourcePath}`)}`),i.push({name:e.name,version:e.version,buildId:e.meta.buildId??null,publishedAt:e.meta.publishedAt,sourcePath:e.meta.sourcePath,consumers:u,size:g});}a$3({entries:i,totalSize:t});}a$1(j,"listStore");function D(n){let m=Date.now()-n.getTime(),l=Math.floor(m/1e3);if(l<60)return `${l}s ago`;let r=Math.floor(l/60);if(r<60)return `${r}m ago`;let t=Math.floor(r/60);return t<24?`${t}h ago`:`${Math.floor(t/24)}d ago`}a$1(D,"getRelativeTime");export{B as default};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {b,a as a$2}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {w}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b as b$1}from'./chunk-ICCM7US5.mjs';import {c}from'./chunk-2VCW5RWI.mjs';import {resolve,join}from'path';import {readFile,writeFile,rm}from'fs/promises';globalThis.require=createRequire(import.meta.url);
3
+ var t=c(a(),1);var E={meta:{name:"migrate",description:"Migrate from yalc to plunk"},args:{yes:{type:"boolean",alias:"y",description:"Skip confirmation prompts",default:false}},async run({args:Y}){b();let u=new a$1,r=resolve(".");b$1.info(`Checking for yalc usage...
4
+ `);let y=join(r,".yalc"),s=join(r,"yalc.lock"),l=join(r,"package.json"),k=await w(y),p=await w(s);if(!k&&!p){b$1.info("No yalc usage detected in this project."),a$2({migrated:false,packages:[]});return}if(!Y.yes){let o=await b$1.prompt("Migrate from yalc to plunk? This will modify package.json and remove .yalc/ and yalc.lock.",{type:"confirm"});if(!o||typeof o=="symbol"){b$1.info("Cancelled");return}}let n=[];if(p)try{let o=await readFile(s,"utf-8"),a=JSON.parse(o);a.packages&&(n.push(...Object.keys(a.packages)),b$1.info(`Found ${n.length} yalc-linked package(s): ${n.map(c=>t.default.cyan(c)).join(", ")}`));}catch{b$1.warn("Could not parse yalc.lock \u2014 the file may be corrupted. Continuing with cleanup.");}if(await w(l))try{let o=await readFile(l,"utf-8"),a=JSON.parse(o),c=!1;for(let f of ["dependencies","devDependencies","peerDependencies"]){let m=a[f];if(m)for(let[h,w]of Object.entries(m))typeof w=="string"&&w.includes(".yalc/")&&(delete m[h],c=!0,b$1.info(`Removed file:.yalc/ reference for ${t.default.cyan(h)}`));}if(c){let f=o.match(/^(\s+)"/m)?.[1]||" ";await writeFile(l,JSON.stringify(a,null,f)+`
5
+ `),b$1.success("Cleaned up package.json");}}catch(o){b$1.warn(`Could not clean package.json: ${o instanceof Error?o.message:String(o)}. You may need to manually remove file:.yalc/ references.`);}if(k&&(await rm(y,{recursive:true,force:true}),b$1.success("Removed .yalc/ directory")),p&&(await rm(s,{force:true}),b$1.success("Removed yalc.lock")),b$1.log(""),b$1.info(`${t.default.bold("Migration complete!")} Next steps:
6
+ `),b$1.log(` 1. ${t.default.cyan("plunk init")}`),n.length>0)for(let o of n)b$1.log(` 2. ${t.default.cyan(`plunk add ${o} --from <path-to-${o}>`)}`);b$1.log(`
7
+ Run ${t.default.cyan("plunk doctor")} to verify your setup.
8
+ `),b$1.info(`Migrated in ${u.elapsed()}`),a$2({migrated:true,packages:n,elapsed:u.elapsedMs()});}};export{E as default};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$3}from'./chunk-PVMVWPLG.mjs';import {a as a$2}from'./chunk-HPF6K6WO.mjs';import'./chunk-EMRPZYLU.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import'./chunk-22YCXJTS.mjs';import {b,a as a$4}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-HW7AEGI3.mjs';import {a}from'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
- var v=a(4),O={meta:{name:"publish",description:"Publish current package to the plunk store"},args:{dir:{type:"positional",description:"Package directory (default: current directory)",required:false},private:{type:"boolean",description:"Allow publishing private packages",default:false},"no-scripts":{type:"boolean",description:"Skip prepack/postpack lifecycle hooks",default:false},recursive:{type:"boolean",alias:"r",description:"Publish all packages in the workspace",default:false}},async run({args:r}){b();let m=new a$1,t=resolve(r.dir||"."),h={allowPrivate:r.private,runScripts:!r["no-scripts"]};if(r.recursive){d(`[publish] Discovering workspace packages from ${t}`);let{findWorkspacePackages:e}=await import('./workspace-SKJJQMMK.mjs'),o=await e(t);o.length===0&&(a$2("No workspace packages found. Make sure you're in a workspace root or subdirectory."),process.exit(1));let a=0,p=0,l=0,w=await Promise.all(o.map(s=>v(async()=>{try{return (await a$3(s,h)).skipped?"skipped":"published"}catch(i){return b$1.warn(`Failed to publish ${s}: ${i instanceof Error?i.message:String(i)}`),"failed"}})));for(let s of w)s==="published"?a++:s==="skipped"?p++:l++;b$1.success(`Workspace publish: ${a} published, ${p} up to date, ${l} failed`),a$4({recursive:true,packages:o.length,published:a,skipped:p,failed:l,elapsed:m.elapsedMs()});}else {d(`[publish] Publishing from ${t}`);try{let e=await a$3(t,h);a$4({...e,elapsed:m.elapsedMs()});}catch(e){a$2(e instanceof Error?e.message:String(e)),process.exit(1);}}}};export{O as default};
2
+ import {createRequire}from'node:module';import {a as a$3}from'./chunk-HN3SZGD3.mjs';import {a as a$2}from'./chunk-HPF6K6WO.mjs';import'./chunk-ETKOGSRN.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import'./chunk-GAS7XU4A.mjs';import {b,a as a$4}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-HW7AEGI3.mjs';import {a}from'./chunk-SG6M7SAC.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var v=a(4),O={meta:{name:"publish",description:"Publish current package to the plunk store"},args:{dir:{type:"positional",description:"Package directory (default: current directory)",required:false},private:{type:"boolean",description:"Allow publishing private packages",default:false},"no-scripts":{type:"boolean",description:"Skip prepack/postpack lifecycle hooks",default:false},recursive:{type:"boolean",alias:"r",description:"Publish all packages in the workspace",default:false}},async run({args:r}){b();let m=new a$1,t=resolve(r.dir||"."),h={allowPrivate:r.private,runScripts:!r["no-scripts"]};if(r.recursive){d(`[publish] Discovering workspace packages from ${t}`);let{findWorkspacePackages:e}=await import('./workspace-4U2WM4MX.mjs'),o=await e(t);o.length===0&&(a$2("No workspace packages found. Make sure you're in a workspace root or subdirectory."),process.exit(1));let a=0,p=0,l=0,w=await Promise.all(o.map(s=>v(async()=>{try{return (await a$3(s,h)).skipped?"skipped":"published"}catch(i){return b$1.warn(`Failed to publish ${s}: ${i instanceof Error?i.message:String(i)}`),"failed"}})));for(let s of w)s==="published"?a++:s==="skipped"?p++:l++;b$1.success(`Workspace publish: ${a} published, ${p} up to date, ${l} failed`),a$4({recursive:true,packages:o.length,published:a,skipped:p,failed:l,elapsed:m.elapsedMs()});}else {d(`[publish] Publishing from ${t}`);try{let e=await a$3(t,h);a$4({...e,elapsed:m.elapsedMs()});}catch(e){a$2(e instanceof Error?e.message:String(e)),process.exit(1);}}}};export{O as default};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$1,b as b$1}from'./chunk-CIY4E6PA.mjs';import'./chunk-SMIGYQFG.mjs';import'./chunk-7JG555TZ.mjs';import'./chunk-AC5FETT7.mjs';import'./chunk-LLVBXPQN.mjs';import'./chunk-PVMVWPLG.mjs';import'./chunk-HPF6K6WO.mjs';import'./chunk-EMRPZYLU.mjs';import'./chunk-MBKCCWSD.mjs';import'./chunk-22YCXJTS.mjs';import {b}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-HW7AEGI3.mjs';import'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
2
+ import {createRequire}from'node:module';import {a as a$1,b as b$1}from'./chunk-ULPTRGDP.mjs';import'./chunk-WSJHZ2ND.mjs';import'./chunk-7JG555TZ.mjs';import'./chunk-7ZWOJDCA.mjs';import'./chunk-W4LHCWGD.mjs';import'./chunk-HN3SZGD3.mjs';import'./chunk-HPF6K6WO.mjs';import'./chunk-ETKOGSRN.mjs';import'./chunk-MBKCCWSD.mjs';import'./chunk-GAS7XU4A.mjs';import {b}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-HW7AEGI3.mjs';import'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
3
  var u={meta:{name:"push",description:"Publish and push to all consumers. Use --watch for continuous mode."},args:{watch:{type:"boolean",description:"Watch for changes and auto-push",default:false},build:{type:"string",description:"Build command to run before publishing (watch mode)"},"skip-build":{type:"boolean",description:"Watch output dirs directly, skip build command detection",default:false},debounce:{type:"string",description:"Debounce delay in ms for watch mode (default: 500)"},cooldown:{type:"string",description:"Minimum time between builds in ms (default: 500)"},"no-scripts":{type:"boolean",description:"Skip prepack/postpack lifecycle hooks",default:false},force:{type:"boolean",alias:"f",description:"Force copy all files, bypassing hash comparison",default:false}},async run({args:e}){b();let o=resolve("."),t=a(()=>a$1(o,{runScripts:!e["no-scripts"],force:e.force}),"push");await t(),e.watch&&await b$1(o,e,t);}};export{u as default};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';export{a as default,b as removeSinglePackage}from'./chunk-S3IAOIXI.mjs';import'./chunk-5EOIBIQO.mjs';import'./chunk-WSJHZ2ND.mjs';import'./chunk-7ZWOJDCA.mjs';import'./chunk-W4LHCWGD.mjs';import'./chunk-HPF6K6WO.mjs';import'./chunk-MBKCCWSD.mjs';import'./chunk-GAS7XU4A.mjs';import'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {b as b$2}from'./chunk-S3IAOIXI.mjs';import'./chunk-5EOIBIQO.mjs';import'./chunk-WSJHZ2ND.mjs';import {c}from'./chunk-PH7M73X2.mjs';import'./chunk-7ZWOJDCA.mjs';import {a as a$2}from'./chunk-W4LHCWGD.mjs';import'./chunk-HPF6K6WO.mjs';import {a}from'./chunk-MBKCCWSD.mjs';import'./chunk-GAS7XU4A.mjs';import {b,a as a$1}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {i,w,t}from'./chunk-SG6M7SAC.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve,join}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var E={meta:{name:"reset",description:"Remove all plunk links and teardown plunk from this project"},args:{yes:{type:"boolean",alias:"y",description:"Skip confirmation prompts",default:false}},async run({args:y}){b();let p=new a,t$1=resolve("."),l=i(t$1);if(!await w(l)){b$1.info("No plunk setup found in this project"),a$1({reset:false});return}let $=await a$2(t$1),r=Object.entries($.links);if(!y.yes){let o=[];r.length>0&&o.push(`remove ${r.length} linked package(s)`),o.push("delete .plunk/ directory","remove postinstall hook");let s=await b$1.prompt(`Reset plunk? This will ${o.join(", ")}.`,{type:"confirm"});if(!s||typeof s=="symbol"){b$1.info("Cancelled");return}}d(`[reset] Removing ${r.length} linked package(s) from ${t$1}`);let n=0;for(let[o,s]of r)try{await b$2(t$1,o,s),n++;}catch(i){b$1.warn(`Failed to remove ${o}: ${i instanceof Error?i.message:String(i)}`);}await t(l),b$1.success("Removed .plunk/ directory");let c$1=join(t$1,"package.json");await w(c$1)&&await c(c$1)&&b$1.success("Removed postinstall hook from package.json"),b$1.success(`Reset complete: ${n} package(s) restored in ${p.elapsed()}`),a$1({reset:true,removed:n,elapsed:p.elapsedMs()});}};export{E as default};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$5}from'./chunk-SMIGYQFG.mjs';import {a as a$3,b as b$1,c}from'./chunk-AC5FETT7.mjs';import {a as a$2,d}from'./chunk-LLVBXPQN.mjs';import {b as b$3}from'./chunk-EMRPZYLU.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import'./chunk-22YCXJTS.mjs';import {b,a as a$4}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a}from'./chunk-TMH7HIJ2.mjs';import {d as d$1}from'./chunk-R3RSOZXN.mjs';import {b as b$2}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
2
+ import {createRequire}from'node:module';import {a as a$5}from'./chunk-WSJHZ2ND.mjs';import {a as a$3,b as b$1,c}from'./chunk-7ZWOJDCA.mjs';import {a as a$2,d}from'./chunk-W4LHCWGD.mjs';import {b as b$3}from'./chunk-ETKOGSRN.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import'./chunk-GAS7XU4A.mjs';import {b,a as a$4}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a}from'./chunk-SG6M7SAC.mjs';import {d as d$1}from'./chunk-R3RSOZXN.mjs';import {b as b$2}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
3
  var j=a(4),B={meta:{name:"restore",description:"Re-inject all linked packages (use after npm install wipes overrides)"},args:{silent:{type:"boolean",description:"Suppress output when no packages are linked (for postinstall scripts)",default:false}},async run({args:S}){b();let c$1=new a$1,r=resolve("."),v=await a$2(r);if(await a$3(r)==="yarn"){let e=await b$1(r);(e==="pnp"||e===null&&await c(r))&&(b$2.error(`Yarn PnP mode is not compatible with plunk.
4
4
 
5
5
  plunk works by copying files into node_modules/, but PnP eliminates
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$2}from'./chunk-LLVBXPQN.mjs';import {b as b$2}from'./chunk-EMRPZYLU.mjs';import'./chunk-22YCXJTS.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a as a$1,k}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b as b$1}from'./chunk-ICCM7US5.mjs';import {c}from'./chunk-2VCW5RWI.mjs';import {resolve,join}from'path';globalThis.require=createRequire(import.meta.url);
2
+ import {createRequire}from'node:module';import {a as a$2}from'./chunk-W4LHCWGD.mjs';import {b as b$2}from'./chunk-ETKOGSRN.mjs';import'./chunk-GAS7XU4A.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a as a$1,w}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b as b$1}from'./chunk-ICCM7US5.mjs';import {c}from'./chunk-2VCW5RWI.mjs';import {resolve,join}from'path';globalThis.require=createRequire(import.meta.url);
3
3
  var o=c(a(),1);var y=a$1(4),L={meta:{name:"status",description:"Show status of linked packages with health checks"},async run(){b();let c=resolve("."),h=await a$2(c),r=Object.entries(h.links);if(r.length===0){b$1.info("No linked packages in this project"),a$3({packages:[]});return}b$1.info(`Package status (${r.length} linked):
4
- `);let m=await Promise.all(r.map(([t,s])=>y(async()=>{let e=[],n=await b$2(t,s.version);n?n.meta.contentHash!==s.contentHash&&e.push("store has newer content (run plunk update)"):e.push("store entry missing");let f=join(c,"node_modules",t);return await k(f)||e.push("missing from node_modules (run plunk restore)"),await k(s.sourcePath)||e.push(`source directory missing: ${s.sourcePath}`),{name:t,version:s.version,buildId:s.buildId??"",issues:e,linkedAt:s.linkedAt,sourcePath:s.sourcePath}})));for(let t of m){let s=t.issues.length===0?o.default.green("\u2713"):o.default.yellow("!"),e=t.buildId?`[${t.buildId}]`:"[--------]";b$1.log(` ${s} ${o.default.cyan(t.name)} ${o.default.dim("@"+t.version)} ${o.default.dim(e)}`),b$1.log(` ${o.default.dim(`linked ${new Date(t.linkedAt).toLocaleString()} from ${t.sourcePath}`)}`);for(let n of t.issues)b$1.log(` ${o.default.yellow("\u26A0")} ${n}`);}a$3({packages:m.map(({name:t,version:s,buildId:e,issues:n})=>({name:t,version:s,buildId:e||null,healthy:n.length===0,issues:n}))});}};export{L as default};
4
+ `);let m=await Promise.all(r.map(([t,s])=>y(async()=>{let e=[],n=await b$2(t,s.version);n?n.meta.contentHash!==s.contentHash&&e.push("store has newer content (run plunk update)"):e.push("store entry missing");let f=join(c,"node_modules",t);return await w(f)||e.push("missing from node_modules (run plunk restore)"),await w(s.sourcePath)||e.push(`source directory missing: ${s.sourcePath}`),{name:t,version:s.version,buildId:s.buildId??"",issues:e,linkedAt:s.linkedAt,sourcePath:s.sourcePath}})));for(let t of m){let s=t.issues.length===0?o.default.green("\u2713"):o.default.yellow("!"),e=t.buildId?`[${t.buildId}]`:"[--------]";b$1.log(` ${s} ${o.default.cyan(t.name)} ${o.default.dim("@"+t.version)} ${o.default.dim(e)}`),b$1.log(` ${o.default.dim(`linked ${new Date(t.linkedAt).toLocaleString()} from ${t.sourcePath}`)}`);for(let n of t.issues)b$1.log(` ${o.default.yellow("\u26A0")} ${n}`);}a$3({packages:m.map(({name:t,version:s,buildId:e,issues:n})=>({name:t,version:s,buildId:e||null,healthy:n.length===0,issues:n}))});}};export{L as default};
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {l,x as x$1}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readdir,readFile}from'fs/promises';import {join,dirname,relative}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var x=new Set(["node_modules",".plunk","dist",".git"]);async function P(t){let n;try{n=await readdir(t,{recursive:!0,encoding:"utf-8"});}catch{return null}let r=n.filter(e=>e.endsWith(".css")?!l(e).split("/").some(c=>x.has(c)):false).map(e=>join(t,e));for(let e of r){let i;try{i=await readFile(e,"utf-8");}catch{continue}if(i.includes('@import "tailwindcss"')||i.includes("@import 'tailwindcss'"))return e}return null}a(P,"findTailwindCss");async function _(t,n,r){let e;try{e=await readFile(t,"utf-8");}catch{return {modified:false,error:"could not read CSS file"}}if(e.includes(`node_modules/${n}`))return {modified:false};let i=y(t,n,r),c=/^@(import|source|plugin|theme)\s.+$/gm,o=null,d;for(;(d=c.exec(e))!==null;)o=d;let f=`@source "${i}";`;if(o){let m=o.index+o[0].length;e=e.slice(0,m)+`
4
+ `+f+e.slice(m);}else e=f+`
5
+ `+e;return await x$1(t,e),{modified:true}}a(_,"addTailwindSource");async function v(t,n){let r;try{r=await readFile(t,"utf-8");}catch{return {modified:false}}let e=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`^@source\\s+["'][^"']*node_modules/${e}["'];?\\s*\\n?`,"m");return i.test(r)?(r=r.replace(i,""),await x$1(t,r),{modified:true}):{modified:false}}a(v,"removeTailwindSource");function y(t,n,r){let e=dirname(t),i=join(r,"node_modules",n);return l(relative(e,i))}a(y,"computeSourcePath");export{_ as addTailwindSource,P as findTailwindCss,v as removeTailwindSource};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {a as a$5}from'./chunk-WSJHZ2ND.mjs';import'./chunk-7ZWOJDCA.mjs';import {a as a$2,d as d$1}from'./chunk-W4LHCWGD.mjs';import {a as a$4}from'./chunk-HPF6K6WO.mjs';import {c}from'./chunk-ETKOGSRN.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {d as d$2}from'./chunk-GAS7XU4A.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a}from'./chunk-SG6M7SAC.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var M=a(4),z={meta:{name:"update",description:"Pull latest versions from the store for linked packages"},args:{package:{type:"positional",description:"Package name to update (default: all linked)",required:false}},async run({args:n}){b();let f=new a$1,o=resolve("."),E=await a$2(o),p=Object.entries(E.links);if(p.length===0){b$1.info("No linked packages in this project"),a$3({updated:0,skipped:0});return}let k=n.package?p.filter(([t])=>t===n.package):p;n.package&&k.length===0&&(a$4(`Package "${n.package}" is not linked in this project. Run 'plunk list' to see linked packages.`),process.exit(1));let d$3=0,c$1=0,r=0,a=0,H=await Promise.all(k.map(([t,m])=>M(async()=>{let e=await c(t);if(!e)return b$1.warn(`Store entry missing for ${t}. Re-publish it.`),"missing";if(e.meta.contentHash===m.contentHash)return d(`[update] ${t}@${e.version} already up to date`),"skipped";try{let s=await a$5(e,o,m.packageManager),P={...m,version:e.version,contentHash:e.meta.contentHash,buildId:e.meta.buildId??"",linkedAt:new Date().toISOString()};return await d$1(o,t,P),await d$2(o,t,e.version),b$1.success(`Updated ${t}@${e.version} (${s.copied} files changed)`),"updated"}catch(s){return b$1.warn(`Failed to update ${t}: ${s instanceof Error?s.message:String(s)}`),"failed"}})));for(let t of H)t==="updated"?d$3++:t==="skipped"?c$1++:t==="missing"?r++:a++;let l=[`${d$3} updated`,`${c$1} unchanged`];r>0&&l.push(`${r} missing`),a>0&&l.push(`${a} failed`),b$1.info(`Update complete: ${l.join(", ")} in ${f.elapsed()}`),a$3({updated:d$3,skipped:c$1,missing:r,failed:a,elapsed:f.elapsedMs()});}};export{z as default};
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {l}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';globalThis.require=createRequire(import.meta.url);
2
+ import {createRequire}from'node:module';import {x as x$1}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';globalThis.require=createRequire(import.meta.url);
3
3
  function d(n){return n.match(/^(\s+)\S/m)?.[1]||" "}a(d,"detectIndent");function h(n){return n.includes("@olegkuibar/plunk/vite")||n.includes("vite-plugin-plunk")}a(h,"hasPlunkPlugin");function x(n){let e=[],t="",i=0;for(let r of n)if(r==="("&&i++,r===")"&&i--,r===","&&i===0){let o=t.trim();o&&e.push(o),t="";}else t+=r;let s=t.trim();return s&&e.push(s),e}a(x,"parsePluginItems");function k(n,e){return n.length===0?"[]":n.length===1?`[${n[0]}]`:`[
4
4
  ${n.map(i=>`${e}${e}${i},`).join(`
5
5
  `)}
6
6
  ${e}]`}a(k,"formatPlugins");async function P(n){let e;try{e=await readFile(n,"utf-8");}catch{return {modified:false,error:"could not read config file"}}if(h(e))return {modified:false};let t=d(e),i=/plugins\s*:\s*\[([\s\S]*?)\]/,s=i.exec(e);if(s){let f=x(s[1]);f.push("plunk()");let g=k(f,t);e=e.replace(i,`plugins: ${g}`);}else {let g=/(?:defineConfig\s*\(\s*\{|export\s+default\s+\{)/.exec(e);if(g){let m=g.index+g[0].length,$=`
7
7
  ${t}plugins: [plunk()],`;e=e.slice(0,m)+$+e.slice(m);}else return {modified:false,error:"unrecognized Vite config pattern"}}let r=`import plunk from "@olegkuibar/plunk/vite";
8
- `,o=/^import\s.+$/gm,l$1=0,c;for(;(c=o.exec(e))!==null;)l$1=c.index+c[0].length;return l$1>0?e=e.slice(0,l$1)+`
9
- `+r+e.slice(l$1+1):e=r+`
10
- `+e,await l(n,e),{modified:true}}a(P,"addPlunkVitePlugin");async function R(n){let e;try{e=await readFile(n,"utf-8");}catch{return {modified:false}}if(!h(e))return {modified:false};let t=false,i=/^import\s+\w+\s+from\s+["']@olegkuibar\/plunk\/vite["'];?\s*\n?/m;i.test(e)&&(e=e.replace(i,""),t=true);let s=/plugins\s*:\s*\[([\s\S]*?)\]/,r=s.exec(e);if(r){let o=x(r[1]),l=o.filter(c=>!c.startsWith("plunk("));if(l.length!==o.length){let c=d(e),f=k(l,c);e=e.replace(s,`plugins: ${f}`),t=true;}}return t&&await l(n,e),{modified:t}}a(R,"removeFromViteConfig");export{P as addPlunkVitePlugin,R as removeFromViteConfig};
8
+ `,o=/^import\s.+$/gm,l=0,c;for(;(c=o.exec(e))!==null;)l=c.index+c[0].length;return l>0?e=e.slice(0,l)+`
9
+ `+r+e.slice(l+1):e=r+`
10
+ `+e,await x$1(n,e),{modified:true}}a(P,"addPlunkVitePlugin");async function R(n){let e;try{e=await readFile(n,"utf-8");}catch{return {modified:false}}if(!h(e))return {modified:false};let t=false,i=/^import\s+\w+\s+from\s+["']@olegkuibar\/plunk\/vite["'];?\s*\n?/m;i.test(e)&&(e=e.replace(i,""),t=true);let s=/plugins\s*:\s*\[([\s\S]*?)\]/,r=s.exec(e);if(r){let o=x(r[1]),l=o.filter(c=>!c.startsWith("plunk("));if(l.length!==o.length){let c=d(e),f=k(l,c);e=e.replace(s,`plugins: ${f}`),t=true;}}return t&&await x$1(n,e),{modified:t}}a(R,"removeFromViteConfig");export{P as addPlunkVitePlugin,R as removeFromViteConfig};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {spawn}from'child_process';import {readdir,stat}from'fs/promises';import {platform}from'os';import {join}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var d=null;function j(){d&&!d.killed&&(d.kill("SIGTERM"),d=null);}a(j,"killActiveBuild");var _=new Set(["node_modules",".git",".plunk"]);async function M(o,t){let r;try{r=await readdir(o,{withFileTypes:!0});}catch{return}for(let s of r){if(_.has(s.name))continue;let u=join(o,s.name);if(s.isDirectory())await M(u,t);else try{let f=await stat(u);t.set(u,f.mtimeMs);}catch{}}}a(M,"walkDir");async function I(o){let t=new Map;for(let r of o)try{let s=await stat(r);s.isDirectory()?await M(r,t):t.set(r,s.mtimeMs);}catch{}return t}a(I,"buildSnapshot");async function q(o,t,r){let{watch:s}=await import('./chokidar-LVDD2IK4.mjs'),u=t.patterns??["src","lib"],f=u.map(n=>n.startsWith("/")||n.includes(":")?n:`${o}/${n}`),h=t.debounce??500,l=t.cooldown??500,e=null,p=false,b$1=false,w=0,v=false,T=a(async()=>{if(p||b$1)return;let n=Date.now()-w;if(w>0&&n<l){let i=l-n;e&&clearTimeout(e),e=setTimeout(()=>{e=null,T();},i);return}b$1=true,v=false;try{if(t.buildCmd&&!await x(t.buildCmd,o)){b.warn("Build failed (see output above), skipping push");return}await r();}catch(i){b.error(`Push failed: ${i instanceof Error?i.message:String(i)}`);}finally{b$1=false,w=Date.now(),v&&!p&&(v=false,e=setTimeout(()=>{e=null,T();},l));}},"doBuild"),g=a(n=>{if(p)return;if(b$1){v=true;return}let i=Date.now()-w;if(w>0&&i<l){e&&clearTimeout(e);let m=l-i;e=setTimeout(()=>{e=null,T();},m+h);return}e&&clearTimeout(e),e=setTimeout(()=>{e=null,T();},h);},"onFileEvent"),$=t.buildCmd?false:t.awaitWriteFinish??{stabilityThreshold:200,pollInterval:50},P=!!process.versions?.webcontainer,y=s(f,{ignoreInitial:true,ignored:[/[/\\]node_modules[/\\]/,/[/\\]\.git[/\\]/,/[/\\]\.plunk[/\\]/],awaitWriteFinish:$,usePolling:P,...P&&{interval:1e3}});y.on("change",g),y.on("add",g),y.on("unlink",g),y.on("error",n=>{b.error(`Watcher error: ${n instanceof Error?n.message:String(n)}`);});let k=null;if(P){let n=await I(f);k=setInterval(async()=>{if(!p)try{let i=await I(f);for(let[m,D]of i){let W=n.get(m);if(W===void 0||W!==D){g(m);break}}if(!p){for(let m of n.keys())if(!i.has(m)){g(m);break}}n=i;}catch{}},1e3);}let B={close:a(async()=>{p=true,k&&clearInterval(k),e&&clearTimeout(e),j(),await y.close();},"close")};return b.info(`Watching for changes in: ${u.join(", ")}`),B}a(q,"startWatcher");function x(o,t){return new Promise(r=>{let s=platform()==="win32",u=s?"cmd":"sh",f=s?"/c":"-c";b.start(`Running: ${o}`);let h=spawn(u,[f,o],{cwd:t,stdio:"inherit"});d=h,h.on("close",l=>{d=null,l===0?(b.success("Build succeeded"),r(true)):(b.error(`Build failed with code ${l}`),r(false));}),h.on("error",l=>{d=null,b.error(`Build error: ${l.message}`),r(false);});})}a(x,"runBuildCommand");export{j as killActiveBuild,q as startWatcher};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {createRequire}from'node:module';import {a}from'./chunk-HW7AEGI3.mjs';import {w,l}from'./chunk-SG6M7SAC.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {readFile,readdir}from'fs/promises';import {join,dirname,relative,resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
+ var y=c(a(),1);async function J(o){let t=o;for(;;){if(await w(join(t,"pnpm-workspace.yaml")))return t;let s=dirname(t);if(s===t)return null;t=s;}}a$1(J,"findWorkspaceRoot");async function $(o){let t={default:{},named:{}},s=join(o,"pnpm-workspace.yaml"),i;try{i=await readFile(s,"utf-8");}catch{return t}let a=i.split(/\r?\n/),r="top",n="";for(let e of a){if(e.trim()===""||e.trim().startsWith("#"))continue;let l=e.length-e.trimStart().length;if(l===0){if(e.startsWith("catalog:")){r="default-catalog";continue}if(e.startsWith("catalogs:")){r="named-catalogs";continue}r="top";continue}if(r==="default-catalog"&&l>=2){let c=v(e);c&&(t.default[c[0]]=c[1]);continue}if(r==="named-catalogs"&&l>=2&&l<4){let c=e.trim();c.endsWith(":")&&(n=c.slice(0,-1),t.named[n]={},r="named-catalog-entries");continue}if(r==="named-catalog-entries"&&l>=4){let c=v(e);c&&n&&(t.named[n][c[0]]=c[1]);continue}if(r==="named-catalog-entries"&&l>=2&&l<4){let c=e.trim();c.endsWith(":")?(n=c.slice(0,-1),t.named[n]={}):r="named-catalogs";continue}}return t}a$1($,"parseCatalogs");async function z(o){let t=await J(o);if(t){let i=await N(t),a=i.filter(n=>!n.startsWith("!")),r=i.filter(n=>n.startsWith("!")).map(n=>n.slice(1));if(a.length>0)return W(t,a,r)}let s=t??await O(o);if(!s)return [];try{let i=JSON.parse(await readFile(join(s,"package.json"),"utf-8")),a=Array.isArray(i.workspaces)?i.workspaces:i.workspaces?.packages??[];if(a.length===0)return [];let r=a.filter(e=>!e.startsWith("!")),n=a.filter(e=>e.startsWith("!")).map(e=>e.slice(1));return W(s,r,n)}catch{return []}}a$1(z,"findWorkspacePackages");async function N(o){let t=join(o,"pnpm-workspace.yaml"),s;try{s=await readFile(t,"utf-8");}catch{return []}let i=[],a=false;for(let r of s.split(/\r?\n/)){let n=r.trim();if(n===""||n.startsWith("#"))continue;let e=r.length-r.trimStart().length;if(e===0){a=n==="packages:";continue}if(a&&e>=2){let l=n.match(/^-\s+["']?([^"']+)["']?$/);l&&i.push(l[1]);}}return i}a$1(N,"parsePnpmWorkspacePackages");async function O(o){let t=o;for(;;){try{if(JSON.parse(await readFile(join(t,"package.json"),"utf-8")).workspaces)return t}catch{}let s=dirname(t);if(s===t)return null;t=s;}}a$1(O,"findPackageJsonWorkspaceRoot");async function W(o,t,s=[]){let i=[];for(let n of t)if(n.includes("*")){let e=n.split("/"),l$1=o,c=[],w$1=false;for(let g of e)w$1||g.includes("*")?(w$1=true,c.push(g)):l$1=join(l$1,g);if(c.length===1&&c[0]==="*")try{let g=await readdir(l$1,{withFileTypes:!0});for(let d of g)if(d.isDirectory()){let p=join(l$1,d.name);await w(join(p,"package.json"))&&i.push(p);}}catch{}else {let g=(0, y.default)(n),d=await j(o,8);for(let p of d){let R=l(relative(o,p));g(R)&&await w(join(p,"package.json"))&&i.push(p);}}}else {let e=resolve(o,n);await w(join(e,"package.json"))&&i.push(e);}let a=[...new Set(i)];if(s.length===0)return a;let r=(0, y.default)(s);return a.filter(n=>{let e=l(relative(o,n));return !r(e)})}a$1(W,"resolveWorkspaceGlobs");async function j(o,t){if(t<=0)return [];let s=[];try{let i=await readdir(o,{withFileTypes:!0});for(let a of i){if(!a.isDirectory()||a.name==="node_modules"||a.name===".git")continue;let r=join(o,a.name);s.push(r),s.push(...await j(r,t-1));}}catch{}return s}a$1(j,"collectDirs");function v(o){let t=o.trim(),s=t.indexOf(":");if(s<=0)return null;let i=t.slice(0,s).trim(),a=t.slice(s+1).trim();if(!i||!a)return null;let r=a.replace(/^["']|["']$/g,"");return [i,r]}a$1(v,"parseKeyValue");export{z as findWorkspacePackages,J as findWorkspaceRoot,$ as parseCatalogs};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olegkuibar/plunk",
3
- "version": "0.7.6",
3
+ "version": "0.8.0",
4
4
  "description": "Local npm package development without symlinks. Copies built files into consumer node_modules with incremental sync and watch mode.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$6}from'./chunk-HHV6VEYA.mjs';import {b as b$5,a as a$5,e}from'./chunk-SMIGYQFG.mjs';import {c as c$1}from'./chunk-4ZGIZZSF.mjs';import {a as a$4,b as b$4,c as c$2,d as d$2}from'./chunk-AC5FETT7.mjs';import {f,d,h}from'./chunk-LLVBXPQN.mjs';import {a as a$3}from'./chunk-PVMVWPLG.mjs';import {a as a$2}from'./chunk-HPF6K6WO.mjs';import {b as b$3,c}from'./chunk-EMRPZYLU.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {i}from'./chunk-22YCXJTS.mjs';import {b as b$2,a as a$7}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-HW7AEGI3.mjs';import {k}from'./chunk-TMH7HIJ2.mjs';import {c as c$3,d as d$1}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';import {spawn}from'child_process';import {platform}from'os';import {join,resolve,basename}from'path';globalThis.require=createRequire(import.meta.url);
3
- var Pn={meta:{name:"add",description:"Link a package from the plunk store into this project"},args:{package:{type:"positional",description:"Package name to add",required:true},from:{type:"string",description:"Path to package source (will publish first)"},yes:{type:"boolean",alias:"y",description:"Auto-accept prompts (install missing deps, etc.)",default:false}},async run({args:t}){b$2();let s=new a$1,n=resolve("."),{name:e$1,version:c$4}=nn(t.package);if((!e$1||e$1==="@"||e$1.startsWith("@")&&!e$1.includes("/"))&&(a$2(`Invalid package name "${t.package}". Use format: package-name or @scope/package-name`),process.exit(1)),t.from){let o=resolve(t.from);b$1.info(`Publishing from ${o}...`),await a$3(o);}let a=c$4?await b$3(e$1,c$4):await c(e$1);if(!a){let o=c$4?`@${c$4} `:"";a$2(`Package "${e$1}"${o?" "+o:""} not found in store. Run 'plunk publish' in the package directory first, or use --from <path>.`),process.exit(1);}let p=!await k(i(n)),r=await a$4(n);if(p&&(await c$1(n,r),b$1.success("Auto-initialized plunk (consumer mode)")),b$1.info(`Detected package manager: ${r}`),r==="yarn"){let o=await b$4(n);(o==="pnp"||o===null&&await c$2(n))&&(b$1.error(`Yarn PnP mode is not compatible with plunk.
4
-
5
- plunk works by copying files into node_modules/, but PnP eliminates
6
- node_modules/ entirely. To use plunk with Yarn Berry, add this to
7
- .yarnrc.yml:
8
-
9
- nodeLinker: node-modules
10
-
11
- Then run: yarn install`),process.exit(1));}let g=await f(n,e$1);g&&(g.version===a.version?b$1.info(`Updating ${e$1}@${a.version} (already linked)`):b$1.info(`Updating ${e$1}: ${g.version} \u2192 ${a.version}`));let v=await b$5(n,e$1,r);v&&b$1.info(`Backed up existing ${e$1} installation`);let u=await a$5(a,n,r);b$1.success(`Linked ${e$1}@${a.version} \u2192 node_modules/${e$1} (${u.copied} files copied, ${u.skipped} unchanged)`),u.binLinks>0&&b$1.info(`Created ${u.binLinks} bin link(s)`);let q={version:a.version,contentHash:a.meta.contentHash,linkedAt:new Date().toISOString(),sourcePath:a.meta.sourcePath,backupExists:v,packageManager:r,buildId:a.meta.buildId??""};await d(n,e$1,q),await h(e$1,n),await en(n,e$1,a.version);let l=await e(a,n);if(l.length>0)if(c$3())d$1(`[add] Missing transitive deps (json mode): ${l.join(", ")}`);else if(t.yes){let o=y(r,l);b$1.info(`Installing missing dependencies: ${l.join(", ")}`),await b(o,n)?b$1.success("Installed missing dependencies"):b$1.warn(`Install failed. Run manually: ${o}`);}else if(await b$1.prompt(`Install ${l.length} missing dependencies? (${l.join(", ")})`,{type:"confirm",initial:true})){let m=y(r,l);await b(m,n)?b$1.success("Installed missing dependencies"):b$1.warn(`Install failed. Run manually: ${m}`);}else b$1.warn(`Missing transitive dependencies: ${l.join(", ")}
12
- Run: ${y(r,l)}`);let d$3=await d$2(n);if(d$3.type==="next"&&d$3.configFile){let o=await a$6(d$3.configFile,e$1);o.modified?b$1.success(`Added ${e$1} to transpilePackages in ${basename(d$3.configFile)}`):o.error&&b$1.info(`Add to next.config manually: transpilePackages: ['${e$1}']`);}else if(d$3.type==="vite"&&d$3.configFile){let{addPlunkVitePlugin:o}=await import('./vite-config-LXMLHR7V.mjs'),m=await o(d$3.configFile);if(m.modified){b$1.success(`Added plunk plugin to ${basename(d$3.configFile)}`);let w=Z(r,"@olegkuibar/plunk");b$1.info("Installing @olegkuibar/plunk as devDependency..."),await b(w,n)?b$1.success("Installed @olegkuibar/plunk"):b$1.warn(`Install failed. Run manually: ${w}`);}else m.error&&b$1.info(`Add manually:
13
- import plunk from "@olegkuibar/plunk/vite"
14
- plugins: [plunk()]`);}let{findTailwindCss:z,addTailwindSource:G}=await import('./tailwind-source-YCRZUHUP.mjs'),k$1=await z(n);if(k$1){let o=await G(k$1,e$1,n);o.modified?b$1.success(`Added @source for ${e$1} to ${basename(k$1)}`):o.error&&b$1.info(`Add to your CSS manually: @source "../node_modules/${e$1}";`);}b$1.info(`Done in ${s.elapsed()}`),a$7({package:e$1,version:a.version,copied:u.copied,skipped:u.skipped,binLinks:u.binLinks,elapsed:s.elapsedMs()});}};function y(t,s){let n=s.join(" ");switch(t){case "pnpm":return `pnpm add ${n}`;case "yarn":return `yarn add ${n}`;case "bun":return `bun add ${n}`;default:return `npm install ${n}`}}a(y,"buildInstallCommand");function Z(t,s){switch(t){case "pnpm":return `pnpm add -D ${s}`;case "yarn":return `yarn add -D ${s}`;case "bun":return `bun add -d ${s}`;default:return `npm install -D ${s}`}}a(Z,"buildDevInstallCommand");function b(t,s){return new Promise(n=>{let e=platform()==="win32",p=spawn(e?"cmd":"sh",[e?"/c":"-c",t],{cwd:s,stdio:"inherit"});p.on("close",r=>n(r===0)),p.on("error",()=>n(false));})}a(b,"runInstallCommand");function nn(t){if(t.startsWith("@")){let n=t.indexOf("/");if(n>0){let e=t.indexOf("@",n);if(e>n)return {name:t.slice(0,e),version:t.slice(e+1)}}return {name:t,version:null}}let s=t.lastIndexOf("@");return s>0?{name:t.slice(0,s),version:t.slice(s+1)}:{name:t,version:null}}a(nn,"parsePackageArg");async function en(t,s,n){try{let e=await readFile(join(t,"package.json"),"utf-8"),c=JSON.parse(e),a=c.dependencies?.[s]??c.devDependencies?.[s]??c.peerDependencies?.[s];if(!a||/^(workspace:|catalog:|\*)/.test(a))return;let p=a.match(/(\d+)\.\d+\.\d+/);if(!p)return;let r=parseInt(p[1],10),g=parseInt(n.split(".")[0],10);r!==g&&b$1.warn(`Version mismatch: store has ${s}@${n} but your package.json declares "${a}". Consider updating your dependency range.`);}catch{}}a(en,"warnVersionMismatch");export{Pn as default};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {c}from'./chunk-TMH7HIJ2.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {homedir}from'os';import {join,dirname}from'path';import {mkdir,stat,rm}from'fs/promises';import {setTimeout}from'timers/promises';globalThis.require=createRequire(import.meta.url);
3
- function p(){return process.env.PLUNK_HOME||join(homedir(),".plunk")}a(p,"getPlunkHome");function x(){return join(p(),"store")}a(x,"getStorePath");function M(){return join(p(),"consumers.json")}a(M,"getConsumersPath");function l(t){return t.replace(/\//g,"+")}a(l,"encodePackageName");function S(t){if(t.startsWith("@")){let r=t.indexOf("+");if(r!==-1)return t.slice(0,r)+"/"+t.slice(r+1)}return t}a(S,"decodePackageName");function m(t,r){return join(x(),`${l(t)}@${r}`)}a(m,"getStoreEntryPath");function T(t,r){return join(m(t,r),"package")}a(T,"getStorePackagePath");function v(t,r){return join(m(t,r),".plunk-meta.json")}a(v,"getStoreMetaPath");function R(t){return join(t,".plunk")}a(R,"getConsumerPlunkDir");function I(t){return join(t,".plunk","state.json")}a(I,"getConsumerStatePath");function A(t,r){return join(t,".plunk","backups",l(r))}a(A,"getConsumerBackupPath");function L(t,r){return join(t,"node_modules",r)}a(L,"getNodeModulesPackagePath");var s={retries:5,minTimeout:100,maxTimeout:1e3,factor:2,stale:1e4};async function q(t,r,i){await mkdir(dirname(t),{recursive:true});let o=t+".lk",d=i?.stale??s.stale,c$1=false;for(let u=0;u<=s.retries;u++)try{await mkdir(o),c$1=!0;break}catch(a){if(c(a)&&a.code==="EEXIST"){try{let f=await stat(o);if(Date.now()-f.mtimeMs>d){await rm(o,{recursive:!0,force:!0});continue}}catch{continue}if(u<s.retries){let f=Math.min(s.minTimeout*s.factor**u,s.maxTimeout);await setTimeout(f);}}else throw a}if(!c$1)throw new Error(`Failed to acquire lock after ${s.retries} attempts. Another plunk process may be running. If this persists, delete ${o} and retry.`);try{return await r()}finally{await rm(o,{recursive:true,force:true});}}a(q,"withFileLock");function _(t){if(typeof t!="object"||t===null)return false;let r=t;return typeof r.contentHash=="string"&&typeof r.publishedAt=="string"&&typeof r.sourcePath=="string"&&(r.buildId===void 0||typeof r.buildId=="string")&&(r.schemaVersion===void 0||typeof r.schemaVersion=="number")}a(_,"isPlunkMeta");function j(t){if(typeof t!="object"||t===null)return false;let r=t;return typeof r.version=="string"&&typeof r.contentHash=="string"&&typeof r.linkedAt=="string"&&typeof r.sourcePath=="string"&&typeof r.backupExists=="boolean"&&typeof r.packageManager=="string"&&["npm","pnpm","yarn","bun"].includes(r.packageManager)&&(r.buildId===void 0||typeof r.buildId=="string")}a(j,"isLinkEntry");function B(t){if(typeof t!="object"||t===null)return false;let r=t;if(r.version!=="1"||typeof r.links!="object"||r.links===null)return false;let i=r.links;for(let o of Object.values(i))if(!j(o))return false;return true}a(B,"isConsumerState");function K(t){if(typeof t!="object"||t===null)return false;let r=t;for(let i of Object.values(r)){if(!Array.isArray(i))return false;for(let o of i)if(typeof o!="string")return false}return true}a(K,"isConsumersRegistry");
4
- export{x as a,M as b,l as c,S as d,m as e,T as f,v as g,R as h,I as i,A as j,L as k,q as l,_ as m,B as n,K as o};
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {c as c$1,a as a$2}from'./chunk-LLVBXPQN.mjs';import {h,i}from'./chunk-22YCXJTS.mjs';import {k,i as i$1}from'./chunk-TMH7HIJ2.mjs';import {a,b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {readFile,writeFile}from'fs/promises';import {join}from'path';globalThis.require=createRequire(import.meta.url);
3
- var y=c(a(),1);async function x(t){let n="";try{n=await readFile(t,"utf-8");}catch{}if(n.split(`
4
- `).some(a=>a.trim()===".plunk/"||a.trim()===".plunk"||a.trim()==="/.plunk/"||a.trim()==="/.plunk"))return false;let o=n.length>0&&!n.endsWith(`
5
- `)?`
6
- `:"",r=n.length>0?`
7
- # plunk local links
8
- .plunk/
9
- `:`# plunk local links
10
- .plunk/
11
- `;return await writeFile(t,n+o+r),true}a$1(x,"ensureGitignore");async function C(t){let n=await readFile(t,"utf-8"),e=JSON.parse(n);if(e.scripts?.postinstall)return e.scripts.postinstall.includes("plunk")||b.warn(`Existing postinstall script found. Add ${y.default.cyan("npx @olegkuibar/plunk restore")} manually if needed.`),false;e.scripts||(e.scripts={}),e.scripts.postinstall="npx @olegkuibar/plunk restore || true";let s=n.match(/^(\s+)"/m)?.[1]||" ";return await writeFile(t,JSON.stringify(e,null,s)+`
12
- `),true}a$1(C,"addPostinstall");async function J(t,n){let e=h(t),s=i(t);if(!await k(s))await i$1(e),await c$1(t,{version:"1",packageManager:n,role:"consumer",links:{}});else {let a=await a$2(t);a.packageManager||(a.packageManager=n,a.role=a.role??"consumer",await c$1(t,a));}let o=join(t,".gitignore");await x(o);let r=join(t,"package.json");await k(r)&&await C(r);}a$1(J,"ensureConsumerInit");export{x as a,C as b,J as c};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {k}from'./chunk-TMH7HIJ2.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {stat,readFile}from'fs/promises';import {join,dirname}from'path';globalThis.require=createRequire(import.meta.url);
3
- var y=[["pnpm-lock.yaml","pnpm"],["bun.lockb","bun"],["bun.lock","bun"],["yarn.lock","yarn"],["package-lock.json","npm"]];async function b(o){let n=o;for(;;){let t=(await Promise.all(y.map(async([r,c])=>{try{return await stat(join(n,r)),c}catch{return null}}))).find(r=>r!==null);if(t)return t;let e=dirname(n);if(e===n)return "npm";n=e;}}a(b,"detectPackageManager");async function w(o){let n=o;for(;;){let i;try{i=await readFile(join(n,".yarnrc.yml"),"utf-8");}catch{let t=dirname(n);if(t===n)return null;n=t;continue}for(let t of i.split(`
4
- `)){let e=t.trim();if(e.startsWith("#")||!e.includes("nodeLinker"))continue;let r=e.match(/^nodeLinker:\s*(.+)$/);if(r){let c=r[1].trim().replace(/^["']|["']$/g,"");if(c==="node-modules"||c==="pnpm"||c==="pnp")return c}}return null}}a(w,"detectYarnNodeLinker");async function P(o){let n=o;for(;;)try{return await stat(join(n,".yarnrc.yml")),!0}catch{let i=dirname(n);if(i===n)return false;n=i;}}a(P,"hasYarnrcYml");var g=[["vite",["vite.config.ts","vite.config.js","vite.config.mts","vite.config.mjs"]],["next",["next.config.js","next.config.ts","next.config.mjs"]],["webpack",["webpack.config.js","webpack.config.ts"]],["turbo",["turbo.json"]],["rollup",["rollup.config.js","rollup.config.ts","rollup.config.mjs"]]];async function L(o){for(let[n,i]of g)for(let t of i){let e=join(o,t);if(await k(e))return {type:n,configFile:e}}return {type:null,configFile:null}}a(L,"detectBundler");async function v(o){let n=g.flatMap(([r,c])=>c.map(async l=>({type:r,configFile:join(o,l),found:await k(join(o,l))}))),i=await Promise.all(n),t=new Set,e=[];for(let{type:r,configFile:c,found:l}of i)l&&!t.has(r)&&(t.add(r),e.push({type:r,configFile:c}));return e}a(v,"detectAllBundlers");export{b as a,w as b,P as c,L as d,v as e};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$6}from'./chunk-SMIGYQFG.mjs';import {a as a$8}from'./chunk-7JG555TZ.mjs';import {a as a$7}from'./chunk-AC5FETT7.mjs';import {j,f,d as d$1}from'./chunk-LLVBXPQN.mjs';import {a as a$3}from'./chunk-PVMVWPLG.mjs';import {a as a$4}from'./chunk-HPF6K6WO.mjs';import {b as b$1}from'./chunk-EMRPZYLU.mjs';import {a as a$2}from'./chunk-MBKCCWSD.mjs';import {a as a$5}from'./chunk-OJJZ7CLB.mjs';import {a}from'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a as a$1}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';import {join}from'path';globalThis.require=createRequire(import.meta.url);
3
- var E=a(4);async function X(n,i={}){let a=new a$2,e=await a$3(n,{runScripts:i.runScripts,force:i.force});if(e.skipped){b.info("No changes to push");return}let t=await b$1(e.name,e.version);if(!t){a$4(`Failed to read store entry for ${e.name}@${e.version} after publish`);return}let r=await j(e.name);if(r.length===0){b.success(`Published ${e.name}@${e.version} to store`),b.info("No consumers registered yet. Run 'plunk add "+e.name+"' in a consumer project to start receiving pushes."),a$5({name:e.name,version:e.version,buildId:e.buildId,consumers:0,failedConsumers:0,copied:0,skipped:0,elapsed:a.elapsedMs()});return}let d$2=0,o=0,l=0,b$2=0,N=await Promise.all(r.map(c=>E(async()=>{let f$1=await f(c,e.name);if(!f$1)return d(`[push] No link found for ${e.name} in ${c}, skipping`),null;try{let m=await a$6(t,c,f$1.packageManager,{force:i.force});return await d$1(c,e.name,{...f$1,contentHash:t.meta.contentHash,linkedAt:new Date().toISOString(),buildId:t.meta.buildId??""}),m}catch(m){return b.warn(`Failed to push to ${c}: ${m instanceof Error?m.message:String(m)}`),null}})));for(let c of N)c?(d$2+=c.copied,o+=c.skipped,l++):b$2++;let M=e.buildId?` [${e.buildId}]`:"";b.success(`Pushed ${e.name}@${e.version}${M} to ${l} consumer(s) in ${a.elapsed()} (${d$2} files changed, ${o} unchanged)`),a$5({name:e.name,version:e.version,buildId:e.buildId,consumers:l,failedConsumers:b$2,copied:d$2,skipped:o,elapsed:a.elapsedMs()});}a$1(X,"doPush");function W(n){if(!n)return;let i=parseInt(n,10);return Number.isFinite(i)?i:void 0}a$1(W,"parseMs");async function Y(n,i,a){let{startWatcher:e}=await import('./watcher-SY45L3SS.mjs'),{buildCmd:t,patterns:r}=await F(n,i),d=await e(n,{patterns:r,buildCmd:t,debounce:W(i.debounce),cooldown:W(i.cooldown)},a);await new Promise(o=>{let l=a$1(async()=>{b.info("Stopping watcher..."),await d.close(),o();},"cleanup");process.once("SIGINT",l),process.once("SIGTERM",l);});}a$1(Y,"startWatchMode");async function F(n,i){let a=i.build,e;if(!i.build){if(!i["skip-build"]){let t=await a$7(n),r=await a$8(n,t);r&&(a=r,b.info(`Auto-detected build command: ${r}`));}}if(a){let{exists:t}=await import('./fs-BUNURH4P.mjs'),r=["src","lib","source","app","pages","components"],d$1=(await Promise.all(r.map(async o=>({dir:o,exists:await t(join(n,o))})))).filter(o=>o.exists).map(o=>o.dir);e=d$1.length>0?d$1:["src","lib"],d(`[watch] Using source patterns with build command: ${e.join(", ")}`);}else {b.info("No build command detected \u2014 watching output directories directly");try{let t=JSON.parse(await readFile(join(n,"package.json"),"utf-8"));t.files&&t.files.length>0?(e=t.files,b.info(`Watching from package.json "files": ${e.join(", ")}`)):b.warn('No "files" field in package.json \u2014 falling back to watching src/ and lib/. Add a "files" field or use --build to specify a build command.');}catch(t){d(`[watch] Could not read package.json: ${t instanceof Error?t.message:String(t)}`);}}return {buildCmd:a,patterns:e}}a$1(F,"resolveWatchConfig");export{X as a,Y as b};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {g,m,f,a as a$1,c as c$1,d,e}from'./chunk-22YCXJTS.mjs';import {c,k,h}from'./chunk-TMH7HIJ2.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile,readdir}from'fs/promises';import'path';globalThis.require=createRequire(import.meta.url);
3
- async function y(t,r){let s=g(t,r);try{let a=await readFile(s,"utf-8"),e=JSON.parse(a);return m(e)?e:(b.warn(`Invalid metadata for ${t}@${r}, ignoring`),null)}catch(a){return c(a)&&a.code!=="ENOENT"&&b.warn(`Failed to read metadata for ${t}@${r}: ${a instanceof Error?a.message:String(a)}`),null}}a(y,"readMeta");async function A(t,r){let s=f(t,r),a=await y(t,r);return !a||!await k(s)?null:{name:t,version:r,packageDir:s,meta:a}}a(A,"getStoreEntry");async function J(t){let r=a$1();if(!await k(r))return null;let s=c$1(t)+"@",e=(await readdir(r,{withFileTypes:true})).filter(n=>n.isDirectory()&&n.name.startsWith(s)),u=(await Promise.all(e.map(async n=>{let i=n.name.slice(s.length),c=await y(t,i);return c?{name:t,version:i,packageDir:f(t,i),meta:c}:null}))).filter(n=>n!==null);return u.length===0?null:u.reduce((n,i)=>new Date(i.meta.publishedAt).getTime()>new Date(n.meta.publishedAt).getTime()?i:n)}a(J,"findStoreEntry");async function W(){let t=a$1();if(!await k(t))return [];let s=(await readdir(t,{withFileTypes:true})).filter(e=>e.isDirectory()?e.name.lastIndexOf("@")>0:false);return (await Promise.all(s.map(async e=>{let l=e.name.lastIndexOf("@"),u=e.name.slice(0,l),n=e.name.slice(l+1),i=d(u),c=await y(i,n);return c?{name:i,version:n,packageDir:f(i,n),meta:c}:null}))).filter(e=>e!==null)}a(W,"listStoreEntries");async function q(t,r){await h(e(t,r));}a(q,"removeStoreEntry");export{y as a,A as b,J as c,W as d,q as e};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {i,n,h,l as l$1,b as b$2,o}from'./chunk-22YCXJTS.mjs';import {c,i as i$1,l,j,k}from'./chunk-TMH7HIJ2.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';import {dirname}from'path';globalThis.require=createRequire(import.meta.url);
3
- async function O(t){let{state:e}=await w(t);return e}a(O,"readConsumerState");async function w(t){let e=i(t);try{let r=await readFile(e,"utf-8"),s=JSON.parse(r);return n(s)?{state:s,reliable:!0}:(b$1.warn(`Invalid consumer state in ${e}, using defaults`),{state:{version:"1",links:{}},reliable:!1})}catch(r){return c(r)&&r.code==="ENOENT"?{state:{version:"1",links:{}},reliable:true}:(b$1.warn(`Failed to read consumer state: ${r instanceof Error?r.message:String(r)}`),{state:{version:"1",links:{}},reliable:false})}}a(w,"readConsumerStateSafe");async function b(t,e){await i$1(h(t));let r=i(t);await l(r,JSON.stringify(e,null,2));}a(b,"writeConsumerState");async function I(t,e,r){let s=i(t);await l$1(s,async()=>{let{state:i,reliable:c}=await w(t);if(!c)throw new Error(`Consumer state in ${s} is corrupt \u2014 refusing to write to avoid destroying existing links. Delete .plunk/state.json and re-run 'plunk add' for each package.`);i.links[e]=r,await b(t,i);});}a(I,"addLink");async function T(t,e){let r=i(t);await l$1(r,async()=>{let{state:s,reliable:i}=await w(t);if(!i)throw new Error(`Consumer state in ${r} is corrupt \u2014 refusing to write to avoid destroying existing links. Delete .plunk/state.json and re-run 'plunk add' for each package.`);delete s.links[e],await b(t,s);});}a(T,"removeLink");async function M(t,e){return (await O(t)).links[e]??null}a(M,"getLink");async function g(){let t=b$2();try{let e=await readFile(t,"utf-8"),r=JSON.parse(e);return o(r)?r:(b$1.warn("Invalid consumers registry, using empty registry"),{})}catch(e){return c(e)&&e.code!=="ENOENT"&&b$1.warn(`Failed to read consumers registry: ${e instanceof Error?e.message:String(e)}`),{}}}a(g,"readConsumersRegistry");async function p(t){let e=b$2();await j(dirname(b$2())),await l(e,JSON.stringify(t,null,2));}a(p,"writeConsumersRegistry");async function W(t,e){let r=b$2();await l$1(r,async()=>{let s=await g();s[t]||(s[t]=[]);let i=e.replace(/\\/g,"/");s[t].includes(i)||s[t].push(i),await p(s);});}a(W,"registerConsumer");async function q(t,e){let r=b$2();await l$1(r,async()=>{let s=await g();if(!s[t])return;let i=e.replace(/\\/g,"/");s[t]=s[t].filter(c=>c!==i),s[t].length===0&&delete s[t],await p(s);});}a(q,"unregisterConsumer");async function A(t){return (await g())[t]??[]}a(A,"getConsumers");async function B(){let t=b$2(),e=0,r=0;return await l$1(t,async()=>{let s=await g(),i={};for(let[c,C]of Object.entries(s)){let d=(await Promise.all(C.map(async a=>({consumerPath:a,valid:await k(a)})))).filter(a=>a.valid).map(a=>a.consumerPath);e+=C.length-d.length,d.length>0?i[c]=d:r++;}await p(i);}),{removedConsumers:e,removedPackages:r}}a(B,"cleanStaleConsumers");export{O as a,w as b,b as c,I as d,T as e,M as f,g,W as h,q as i,A as j,B as k};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$3}from'./chunk-EMRPZYLU.mjs';import {e,l}from'./chunk-22YCXJTS.mjs';import {a}from'./chunk-HW7AEGI3.mjs';import {a as a$2,c as c$1,b as b$1,j,i,d as d$1,k as k$1,g,h}from'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {stat,readFile,readdir,writeFile,rename}from'fs/promises';import {resolve,join,relative,sep,dirname}from'path';import {spawn}from'child_process';import {availableParallelism,platform}from'os';globalThis.require=createRequire(import.meta.url);
3
- var P=c(a(),1);async function z(s,n){let o=[],t=resolve(s);o.push(join(t,"package.json"));let e=await Q(t,t),r=e.map(a=>relative(t,a).replace(/\\/g,"/"));if(n.files&&n.files.length>0)for(let a of n.files){let i=join(t,a),u=resolve(i);if(!u.startsWith(t+sep)&&u!==t){b.warn(`files pattern "${a}" escapes package directory, skipping`);continue}let l=false;try{if((await stat(i)).isDirectory()){let w=relative(t,i).replace(/\\/g,"/")+"/";for(let f=0;f<r.length;f++)r[f].startsWith(w)&&o.push(e[f]);l=!0;}else o.push(i),l=!0;}catch(g){if(c$1(g)&&g.code!=="ENOENT")throw g}if(!l){let g=(0, P.default)(a,{dot:true}),w=0;for(let f=0;f<r.length;f++)if(g(r[f])){let E=resolve(e[f]);if(!E.startsWith(t+sep)&&E!==t)continue;o.push(e[f]),w++;}w===0&&b.warn(`files pattern "${a}" matched no files`);}}else {let a=await ce(t);for(let i=0;i<r.length;i++)le(r[i],a)||o.push(e[i]);}let p=new Set(o),c=new Set(e);for(let a of ["README.md","README","LICENSE","LICENCE","CHANGELOG.md"]){let i=join(t,a);p.has(i)||c.has(i)&&(o.push(i),p.add(i));}return [...p]}a$1(z,"resolvePackFiles");var ae=new Set(["node_modules",".git",".svn",".hg",".DS_Store",".npmrc",".plunk","test","tests","__tests__",".github",".vscode",".idea","coverage",".nyc_output","tsconfig.json","tsconfig.build.json",".eslintrc",".eslintrc.js",".eslintrc.json",".prettierrc",".prettierrc.js","jest.config.js","jest.config.ts","vitest.config.ts","vitest.config.js"]);function le(s,n){for(let t of n.negations)if(t(s))return false;let o=s.split(/[\\/]/);for(let t of o)if(ae.has(t)||n.literals.has(t))return true;if(n.literals.has(s))return true;for(let t of n.patterns)if(t(s))return true;return false}a$1(le,"shouldIgnore");async function ce(s){let n={literals:new Set,patterns:[],negations:[]};try{let o=await readFile(join(s,".npmignore"),"utf-8");for(let t of o.split(`
4
- `)){let e=t.trim();if(!(!e||e.startsWith("#")))if(e.startsWith("!")){let r=e.slice(1);B(r)?n.negations.push((0,P.default)(r,{dot:!0})):n.negations.push((0,P.default)(r,{dot:!0}));}else B(e)?n.patterns.push((0,P.default)(e,{dot:!0})):n.literals.add(e.replace(/\/$/,""));}}catch(o){if(c$1(o)&&o.code!=="ENOENT")throw o}return n}a$1(ce,"loadNpmIgnore");function B(s){return /[*?[\]{}()]/.test(s)}a$1(B,"hasGlobChars");async function Q(s,n){let o=[];try{let t=await readdir(s,{withFileTypes:!0});for(let e of t){let r=join(s,e.name);if(e.isDirectory()){if(e.name===".git"||s===n&&e.name==="node_modules"||e.isSymbolicLink())continue;o.push(...await Q(r,n));}else e.isSymbolicLink()||o.push(r);}}catch(t){if(c$1(t)&&t.code==="ENOENT")return [];throw t}return o}a$1(Q,"collectAllFiles");var he=a$2(Math.max(availableParallelism(),8));async function Ke(s,n={}){let o=join(s,"package.json"),t;try{t=await readFile(o,"utf-8");}catch{throw new Error(`No package.json found in ${s}`)}let e$1=JSON.parse(t);if(!e$1.name)throw new Error("package.json missing 'name' field");if(!e$1.version)throw new Error("package.json missing 'version' field");if(e$1.private&&!n.allowPrivate)throw new Error(`Package "${e$1.name}" is private. Use --private flag to publish private packages.`);await S(s,e$1,"preplunk"),n.runScripts!==false&&await S(s,e$1,"prepack");let r=s;if(e$1.publishConfig?.directory){r=resolve(s,e$1.publishConfig.directory);try{if(!(await stat(r)).isDirectory())throw new Error(`publishConfig.directory "${e$1.publishConfig.directory}" is not a directory`)}catch(l){throw l instanceof Error&&"code"in l&&l.code==="ENOENT"?new Error(`publishConfig.directory "${e$1.publishConfig.directory}" does not exist`):l}d(`[publish] Using publishConfig.directory: ${r}`);}let p=r!==s?JSON.parse(await readFile(join(r,"package.json"),"utf-8").catch(()=>JSON.stringify(e$1))):e$1,c=await z(r,p);if(c.length===0)throw new Error("No publishable files found");d(`[publish] Resolved ${c.length} files for ${e$1.name}@${e$1.version}`);let a=await b$1(c,r);if(await Pe(e$1,s),await Ee(e$1,s),!n.force){let l=await a$3(e$1.name,e$1.version);if(l&&l.contentHash===a)return b.info(`${e$1.name}@${e$1.version} already up to date (no changes since last publish)`),{name:e$1.name,version:e$1.version,fileCount:c.length,skipped:true,contentHash:a,buildId:l.buildId??""}}let i$1=e(e$1.name,e$1.version),u=await l(i$1+".lock",async()=>{if(!n.force){let f=await a$3(e$1.name,e$1.version);if(f&&f.contentHash===a)return b.info(`${e$1.name}@${e$1.version} already up to date (no changes since last publish)`),{name:e$1.name,version:e$1.version,fileCount:c.length,skipped:true,contentHash:a,buildId:f.buildId??""}}let l=i$1+`.tmp-${process.pid}-${Date.now()}`,g$1=join(l,"package"),w=a.slice(9,17);try{await j(g$1);let f=ve(e$1);f=be(f),d("[publish] Copying files to temp store...");let E=new Set(c.map(v=>dirname(join(g$1,relative(r,v)))));await Promise.all([...E].map(v=>i(v))),await Promise.all(c.map(v=>he(async()=>{let _=relative(r,v),D=join(g$1,_);_==="package.json"&&f!==e$1?await writeFile(D,JSON.stringify(f,null,2)):await d$1(v,D,{ensureParent:!1});}))),r!==s&&await writeFile(join(g$1,"package.json"),JSON.stringify(f,null,2));let te={schemaVersion:1,contentHash:a,publishedAt:new Date().toISOString(),sourcePath:s,buildId:w};await writeFile(join(l,".plunk-meta.json"),JSON.stringify(te,null,2));let W=await k$1(i$1),R=i$1+".old-"+Date.now();W&&await rename(i$1,R),await g(l,i$1),W&&await h(R),d(`[publish] Stored at ${i$1}`);}catch(f){throw await h(l),f}return {name:e$1.name,version:e$1.version,fileCount:c.length,skipped:false,contentHash:a,buildId:w}},{stale:6e4});return u.skipped||(n.runScripts!==false&&await S(s,e$1,"postpack"),await S(s,e$1,"postplunk"),b.success(`Published ${e$1.name}@${e$1.version} (${c.length} files) [${u.buildId}]`)),u}a$1(Ke,"publish");var Y=parseInt(process.env.PLUNK_HOOK_TIMEOUT??"30000",10);async function S(s,n,o){let t=n.scripts?.[o];if(t)return d(`[lifecycle] Running ${o}: ${t}`),new Promise((e,r)=>{let p=platform()==="win32",i=spawn(p?"cmd":"sh",[p?"/c":"-c",t],{cwd:s,stdio:"inherit"}),u=setTimeout(()=>{i.kill("SIGTERM"),r(new Error(`${o} script timed out after ${Y/1e3}s. Increase PLUNK_HOOK_TIMEOUT env var if the script needs more time.`));},Y);i.on("close",l=>{clearTimeout(u),l===0?e():r(new Error(`${o} script failed with exit code ${l}`));}),i.on("error",l=>{clearTimeout(u),r(new Error(`${o} script error: ${l.message}`));});})}a$1(S,"runLifecycleHook");var we=["main","module","exports","types","typings","browser","bin"];function be(s){if(!s.publishConfig)return s;let n={...s};for(let o of we)o in s.publishConfig&&(n[o]=s.publishConfig[o]);return delete n.publishConfig,n}a$1(be,"applyPublishConfig");function ve(s){let n=false,o={...s},t=null,e=false;for(let r of ["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let p=s[r];if(!p)continue;let c=false,a={...p};for(let[i,u]of Object.entries(p))if(u.startsWith("workspace:")){let l=u.slice(10);if(l==="*"||l==="^"||l==="~"){let g=$?.versions.get(i)??s.version;a[i]=l==="*"?g:l+g;}else a[i]=l;c=true,n=true;}else if(u.startsWith("catalog:"))if(e||(t=ke(),e=true),t){let l=ye(u,i,t);l?(a[i]=l,c=true,n=true):b.warn(`catalog: specifier for "${i}" could not be resolved \u2014 published package.json will contain "${u}" which may cause install failures`);}else d(`[publish] No pnpm-workspace.yaml found, cannot resolve catalog: for "${i}"`);c&&(o[r]=a);}return n?o:s}a$1(ve,"rewriteProtocolVersions");function ye(s,n,o){let t=s.slice(8);return t===""||t==="default"?o.default[n]??null:o.named[t]?.[n]??null}a$1(ye,"resolveCatalogVersion");var N=null;async function ee(s){if(N?.dir===s)return N.root;let{findWorkspaceRoot:n}=await import('./workspace-SKJJQMMK.mjs'),o=await n(s);return N={dir:s,root:o},o}a$1(ee,"getWorkspaceRoot");var $=null;async function Pe(s,n){if(!["dependencies","devDependencies","peerDependencies","optionalDependencies"].some(c=>{let a=s[c];return a&&Object.values(a).some(i=>i.startsWith("workspace:"))}))return;let t=await ee(n);if(!t){$=null;return}if($?.root===t)return;let{findWorkspacePackages:e}=await import('./workspace-SKJJQMMK.mjs'),r=await e(t),p=new Map;await Promise.all(r.map(async c=>{try{let a=JSON.parse(await readFile(join(c,"package.json"),"utf-8"));a.name&&a.version&&p.set(a.name,a.version);}catch{}})),$={root:t,versions:p};}a$1(Pe,"preloadWorkspaceVersions");var k=null;function ke(){return k?.catalogs??null}a$1(ke,"loadCatalogsFromCache");async function Ee(s,n){if(!["dependencies","devDependencies","peerDependencies","optionalDependencies"].some(a=>{let i=s[a];return i&&Object.values(i).some(u=>u.startsWith("catalog:"))}))return;let t=await ee(n);if(!t){k=null;return}let e=join(t,"pnpm-workspace.yaml"),r=(await stat(e).catch(()=>null))?.mtimeMs??0;if(k?.root===t&&k.mtimeMs===r)return;let{parseCatalogs:p}=await import('./workspace-SKJJQMMK.mjs'),c=await p(t);k={root:t,mtimeMs:r,catalogs:c};}a$1(Ee,"preloadCatalogs");export{Ke as a};
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {e,b as b$1}from'./chunk-AC5FETT7.mjs';import {j,k as k$1}from'./chunk-22YCXJTS.mjs';import {c,k,h,i,f,m}from'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {mkdir,writeFile,rm,symlink,chmod,readdir,stat,realpath,readFile}from'fs/promises';import {join,resolve,sep,relative}from'path';import {platform}from'os';globalThis.require=createRequire(import.meta.url);
3
- function J(e){return e.bin?typeof e.bin=="string"?{[e.name.startsWith("@")?e.name.split("/")[1]:e.name]:e.bin}:e.bin:{}}a(J,"resolveBinEntries");async function L(e,t,i){let r=J(i);if(Object.keys(r).length===0)return 0;let n=join(e,"node_modules",".bin");await mkdir(n,{recursive:true});let c$1=platform()==="win32",a=0;for(let[o,g]of Object.entries(r)){let p=join(e,"node_modules",t),l=join(p,g),B=resolve(l);if(!B.startsWith(resolve(p)+sep)&&B!==resolve(p)){b.warn(`bin "${o}" points outside package directory, skipping`);continue}let v=relative(n,l).replace(/\\/g,"/");if(c$1){let w=join(n,`${o}.cmd`),j=`@ECHO off\r
4
- GOTO start\r
5
- :find_dp0\r
6
- SET dp0=%~dp0\r
7
- EXIT /b\r
8
- :start\r
9
- CALL :find_dp0\r
10
- "%dp0%\\${v.replace(/\//g,"\\")}" %*\r
11
- `;await writeFile(w,j);let G=join(n,o),X=`#!/bin/sh
12
- exec node "${v}" "$@"
13
- `;await writeFile(G,X);}else {let w=join(n,o);try{await rm(w,{force:!0});}catch{}try{await symlink(v,w),await chmod(l,493);}catch(b){if(c(b)&&(b.code==="EPERM"||b.code==="EACCES")){d(`[bin-linker] Symlink failed (${b.code}), using shell wrapper for ${o}`);let j=`#!/bin/sh
14
- exec node "${v}" "$@"
15
- `;await writeFile(w,j),await chmod(w,493);}else throw b}}a++;}return a}a(L,"createBinLinks");async function W(e,t){let i=J(t),r=join(e,"node_modules",".bin"),n=platform()==="win32";for(let c of Object.keys(i))try{await rm(join(r,c),{force:!0}),n&&await rm(join(r,`${c}.cmd`),{force:!0});}catch{}}a(W,"removeBinLinks");var U={next:[".next/cache"],webpack:["node_modules/.cache"]},A=new Map;async function F(e$1){let t=A.get(e$1);t||(t=await e(e$1),A.set(e$1,t));for(let i of t){if(!i.type)continue;let r=U[i.type];if(r)for(let n of r){let c=join(e$1,n);if(await k(c))try{await h(c),d(`[inject] Invalidated ${i.type} cache: ${n}`);}catch{d(`[inject] Could not clear ${i.type} cache: ${n} (locked?)`);}}}}a(F,"invalidateBundlerCache");async function Ee(e,t,i$1,r={}){let n=await $(t,e.name,i$1,e.version);d(`[inject] ${e.name}@${e.version} \u2192 ${n}`),await i(n);let{copied:c,removed:a,skipped:o}=await f(e.packageDir,n,{force:r.force});d(`[inject] ${c} copied, ${a} removed, ${o} skipped`),(c>0||a>0)&&await F(t);let g=await O(e.packageDir),p=g?await L(t,e.name,g):0;return p>0&&d(`[inject] Created ${p} bin link(s)`),{copied:c,removed:a,skipped:o,binLinks:p}}a(Ee,"inject");async function Ce(e,t,i){let r=await $(e,t,i);if(!await k(r))return false;let n=j(e,t);return await h(n),await m(r,n),true}a(Ce,"backupExisting");async function Oe(e,t,i){let r=j(e,t);if(!await k(r))return false;let n=await $(e,t,i);return await h(n),await m(r,n),await h(r),true}a(Oe,"restoreBackup");async function Be(e,t,i){let r=await $(e,t,i),n=await O(r);n&&await W(e,n),await h(r);}a(Be,"removeInjected");async function Ne(e,t){let i=await O(e.packageDir);if(!i)return [];let r={...i.dependencies,...Object.fromEntries(Object.entries(i.peerDependencies??{}).filter(([a])=>!i.peerDependenciesMeta?.[a]?.optional))};if(Object.keys(r).length===0)return [];let n=Object.keys(r);return (await Promise.all(n.map(async a=>({dep:a,installed:await k(join(t,"node_modules",a))})))).filter(a=>!a.installed).map(a=>a.dep)}a(Ne,"checkMissingDeps");async function $(e,t,i,r){let n=k$1(e,t);if(!(i==="pnpm"||i==="yarn"&&await b$1(e)==="pnpm"))return n;try{let o=await ne(n);if(o!==resolve(n))return d(`[inject] pnpm: resolved symlink \u2192 ${o}`),o}catch(o){c(o)&&o.code!=="ENOENT"&&b.debug(`pnpm symlink resolution error: ${o instanceof Error?o.message:String(o)}`);}let a=join(e,"node_modules",".pnpm");if(await k(a)){d(`[inject] pnpm: scanning .pnpm/ for ${t}`);let o=t.replaceAll("/","+");if(r){let p=`${o}@${r}`,l=join(a,p,"node_modules",t);if(await k(l))return d(`[inject] pnpm: exact version match in .pnpm/ \u2192 ${l}`),l}let g=await readdir(a);for(let p of g)if(p.startsWith(o+"@")){let l=join(a,p,"node_modules",t);if(await k(l))return d(`[inject] pnpm: found in .pnpm/ \u2192 ${l}`),l}}return b.warn(`pnpm: Could not find ${t} in .pnpm/ virtual store, using direct node_modules path. If this causes issues, run 'pnpm install' to rebuild the virtual store, then 'plunk add' again.`),n}a($,"resolveTargetDir");async function ne(e){try{return await stat(e),await realpath(e)}catch(t){if(c(t)&&t.code==="ENOENT")return resolve(e);throw t}}a(ne,"resolveRealPath");async function O(e){try{let t=await readFile(join(e,"package.json"),"utf-8");return JSON.parse(t)}catch(t){return c(t)&&t.code!=="ENOENT"&&b.warn(`Failed to read package.json in ${e}: ${t instanceof Error?t.message:String(t)}`),null}}a(O,"readPackageJson");export{Ee as a,Ce as b,Oe as c,Be as d,Ne as e};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {d,b as b$1}from'./chunk-R3RSOZXN.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {stat,readFile,mkdir,copyFile,constants,readdir,utimes,rm,rename,cp,writeFile}from'fs/promises';import {relative,parse,dirname,join}from'path';import {availableParallelism}from'os';import {createHash}from'crypto';globalThis.require=createRequire(import.meta.url);
3
- function y(e){let t=0,r=[],s=a(()=>{r.length>0&&t<e&&(t++,r.shift()());},"next");return l=>new Promise((w,p)=>{let h=a(()=>{l().then(o=>{t--,w(o),s();},o=>{t--,p(o),s();});},"run");t<e?(t++,h()):r.push(h);})}a(y,"pLimit");var P=null;function D(){return P||(P=import('./xxhash-wasm-DTW44IIQ.mjs').then(e=>e.default()).catch(e=>{throw P=null,e})),P}a(D,"getXXHash");var W=1024*1024,Y=y(Math.max(availableParallelism(),8)),v=new Map;async function ce(e,t){let r=[...e].sort((i,m)=>{let a=relative(t,i).replace(/\\/g,"/"),f=relative(t,m).replace(/\\/g,"/");return a.localeCompare(f)}),s=new Set(r),l=0,w=await Promise.all(r.map(i=>Y(async()=>{let m=relative(t,i).replace(/\\/g,"/"),a=await stat(i),f=v.get(i);if(f&&f.mtimeMs===a.mtimeMs&&f.size===a.size)return l++,{rel:m,content:f.content};let c=await readFile(i);return v.set(i,{mtimeMs:a.mtimeMs,size:a.size,content:c}),{rel:m,content:c}})));for(let i of v.keys())s.has(i)||v.delete(i);d(`[hash] Computing content hash for ${e.length} files (${l} cached)`);let p=createHash("sha256"),h=Buffer.alloc(4);for(let{rel:i,content:m}of w)p.update(i),p.update("\0"),h.writeUInt32LE(m.length),p.update(h),p.update(m);let o="sha256v2:"+p.digest("hex");return d(`[hash] Result: ${o.slice(0,20)}...`),o}a(ce,"computeContentHash");async function z(e,t){let r=t??(await stat(e)).size,s=await D();if(r>W)return j(e,s);let l=await readFile(e);return s.h64Raw(l).toString(16)}a(z,"hashFile");async function j(e,t){let{createReadStream:r}=await import('fs'),s=t.create64();return new Promise((l,w)=>{let p=r(e);p.on("data",h=>s.update(h)),p.on("end",()=>l(s.digest().toString(16))),p.on("error",w);})}a(j,"hashFileStream");var S=y(Math.max(availableParallelism(),8));function b(e){return e instanceof Error&&"code"in e}a(b,"isNodeError");var F=new Map;function Q(e){let{root:t}=parse(e);return t||"/"}a(Q,"volumeRoot");async function Z(e,t,r){if(b$1()){d(`[dry-run] would copy ${e} \u2192 ${t}`);return}r?.ensureParent!==false&&await mkdir(dirname(t),{recursive:true});let s=Q(t),l=F.get(s);if(l===false){await copyFile(e,t);return}if(l===true){await copyFile(e,t,constants.COPYFILE_FICLONE);return}try{await copyFile(e,t,constants.COPYFILE_FICLONE_FORCE),F.set(s,!0);}catch{F.set(s,false),d(`[copy] reflink not supported on ${s}, using plain copy`),await copyFile(e,t);}}a(Z,"copyWithCoW");async function T(e){return (await readdir(e,{recursive:true,withFileTypes:true})).filter(r=>r.isFile()).map(r=>join(r.parentPath,r.name))}a(T,"collectFiles");async function ge(e,t,r={}){let s=await T(e),l=0,w=0,p=0,h=await Promise.all(s.map(o=>S(async()=>{let i=relative(e,o),m=join(t,i),a=true,f=null;if(r.force)d(`[copy] ${i} (forced)`);else try{let[c,g]=await Promise.all([stat(o),stat(m)]);if(f={atime:c.atime,mtime:c.mtime},c.size!==g.size)d(`[copy] ${i} (size differs: ${c.size} vs ${g.size})`);else if(c.mtimeMs===g.mtimeMs)a=!1,d(`[skip] ${i} (size+mtime match)`);else {let[N,A]=await Promise.all([z(o,c.size),z(m,g.size)]);N===A?(a=!1,d(`[skip] ${i} (unchanged)`)):d(`[copy] ${i} (hash differs)`);}}catch(c){if(b(c)&&c.code==="ENOENT")d(`[copy] ${i} (new file)`);else throw c}if(a){if(await Z(o,m),!f){let c=await stat(o);f={atime:c.atime,mtime:c.mtime};}return await utimes(m,f.atime,f.mtime),"copied"}return "skipped"})));for(let o of h)o==="copied"?l++:p++;try{let o=await T(t),i=new Set(s.map(a=>relative(e,a))),m=o.filter(a=>!i.has(relative(t,a)));await Promise.all(m.map(a=>S(async()=>{d(`[remove] ${relative(t,a)} (no longer in source)`),b$1()||await rm(a);}))),w=m.length;}catch(o){if(!(b(o)&&o.code==="ENOENT"))throw o}return {copied:l,removed:w,skipped:p}}a(ge,"incrementalCopy");async function Pe(e,t){try{await rename(e,t);}catch(r){if(b(r)&&r.code==="EXDEV")await cp(e,t,{recursive:true}),await rm(e,{recursive:true,force:true});else throw r}}a(Pe,"moveDir");async function ve(e){if(b$1()){d(`[dry-run] would remove ${e}`);return}await rm(e,{recursive:true,force:true});}a(ve,"removeDir");async function xe(e){await mkdir(e,{recursive:true});}a(xe,"ensureDir");async function Ee(e){await mkdir(e,{recursive:true,mode:448});}a(Ee,"ensurePrivateDir");async function $e(e){try{return await stat(e),!0}catch{return false}}a($e,"exists");async function Ce(e,t){if(b$1()){d(`[dry-run] would write ${e}`);return}let r=e+`.tmp-${process.pid}-${Date.now()}`;await writeFile(r,t),await rename(r,e);}a(Ce,"atomicWriteFile");async function ze(e,t){await cp(e,t,{recursive:true});}a(ze,"copyDir");export{y as a,ce as b,b as c,Z as d,T as e,ge as f,Pe as g,ve as h,xe as i,Ee as j,$e as k,Ce as l,ze as m};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {k,g,b as b$2}from'./chunk-LLVBXPQN.mjs';import {d as d$1,e}from'./chunk-EMRPZYLU.mjs';import {a}from'./chunk-MBKCCWSD.mjs';import {a as a$1}from'./chunk-22YCXJTS.mjs';import {b,a as a$2}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {k as k$1,h}from'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {readdir}from'fs/promises';import {join}from'path';globalThis.require=createRequire(import.meta.url);
3
- var I={meta:{name:"clean",description:"Remove unreferenced store entries and stale consumer registrations"},async run(){b();let p=new a;b$1.start("Checking consumer registrations...");let{removedConsumers:i,removedPackages:u}=await k();i>0&&b$1.success(`Removed ${i} stale consumer registration(s) across ${u} package(s)`);let g$1=await g(),c=new Set,D=[...new Set(Object.values(g$1).flat())],h$1=await Promise.all(D.map(async t=>{let{state:e,reliable:r}=await b$2(t);return {path:t,state:e,reliable:r}}));for(let{state:t,reliable:e}of h$1)if(e)for(let[r,d]of Object.entries(t.links))c.add(`${r}@${d.version}`);let m=new Set,l=h$1.filter(t=>!t.reliable);if(l.length>0){b$1.warn(`${l.length} consumer(s) have corrupt state \u2014 their store entries will be preserved`);let t=new Set(l.map(e=>e.path.replace(/\\/g,"/")));for(let[e,r]of Object.entries(g$1))r.some(d=>t.has(d))&&m.add(e);d(`[clean] Protected packages (corrupt state): ${[...m].join(", ")}`);}d(`[clean] Referenced entries: ${[...c].join(", ")||"(none)"}`);let O=await d$1(),o=0;for(let t of O){let e$1=`${t.name}@${t.version}`;if(!c.has(e$1)){if(m.has(t.name)){d(`[clean] Preserving ${e$1} (consumer state unreadable)`);continue}let r=Date.now()-new Date(t.meta.publishedAt).getTime();if(r<300*1e3){d(`[clean] Skipping recently published entry: ${e$1} (${Math.round(r/1e3)}s old)`);continue}d(`[clean] Removing unreferenced store entry: ${e$1}`),await e(t.name,t.version),o++;}}o>0&&b$1.success(`Removed ${o} unreferenced store entry(ies)`);let a$3=0,f=a$1();if(await k$1(f)){let t=await readdir(f,{withFileTypes:true});for(let e of t)e.isDirectory()&&(e.name.includes(".tmp-")||e.name.includes(".old-"))&&(d(`[clean] Removing orphaned directory: ${e.name}`),await h(join(f,e.name)),a$3++);a$3>0&&b$1.success(`Removed ${a$3} orphaned temp directory(ies)`);}i===0&&o===0&&a$3===0&&b$1.info("Store is clean \u2014 no stale entries or registrations found"),b$1.info(`Clean complete in ${p.elapsed()}`),a$2({removedConsumers:i,removedPackages:u,removedEntries:o,removedOrphans:a$3,elapsed:p.elapsedMs()});}};export{I as default};
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$2,b as b$5,c as c$1,d as d$1}from'./chunk-AC5FETT7.mjs';import {g,b as b$3}from'./chunk-LLVBXPQN.mjs';import {d,b as b$4}from'./chunk-EMRPZYLU.mjs';import {a as a$1,b as b$2}from'./chunk-22YCXJTS.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {k}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b as b$1}from'./chunk-ICCM7US5.mjs';import {c}from'./chunk-2VCW5RWI.mjs';import {resolve,join}from'path';globalThis.require=createRequire(import.meta.url);
3
- var o=c(a(),1);var K={meta:{name:"doctor",description:"Run diagnostic checks on your plunk setup"},async run(){b();let t=resolve("."),s=[];b$1.info(`Running plunk diagnostics...
4
- `);let l=a$1();if(await k(l)){let e=await d();s.push({name:"Store directory",status:"pass",message:`${e.length} entries in ${l}`});}else s.push({name:"Store directory",status:"warn",message:`Store not found at ${l}. Run 'plunk publish' to create it.`});let _=b$2();if(await k(_)){let e=await g(),n=Object.values(e).flat().length;s.push({name:"Global registry",status:"pass",message:`${Object.keys(e).length} packages, ${n} consumer registrations`});}else s.push({name:"Global registry",status:"warn",message:"No consumers registered yet. Use 'plunk add' to link packages."});let{state:x,reliable:A}=await b$3(t);A||s.push({name:"Consumer state",status:"fail",message:"state.json is corrupt or unreadable. Delete .plunk/state.json and re-run 'plunk add' for each package."});let m=Object.entries(x.links);if(m.length>0){s.push({name:"Consumer state",status:"pass",message:`${m.length} linked package(s)`});for(let[e,n]of m){let u=await b$4(e,n.version);u?u.meta.contentHash!==n.contentHash?s.push({name:`Store: ${e}`,status:"warn",message:"Store has newer content. Run 'plunk update' to sync."}):s.push({name:`Store: ${e}`,status:"pass",message:`${e}@${n.version} in sync`}):s.push({name:`Store: ${e}`,status:"fail",message:`Store entry missing for ${e}@${n.version}. Re-publish it.`});let k$1=join(t,"node_modules",e);if(!await k(k$1))s.push({name:`node_modules: ${e}`,status:"fail",message:"Missing from node_modules. Run 'plunk restore'."});else try{let{readFile:F}=await import('fs/promises'),d=JSON.parse(await F(join(k$1,"package.json"),"utf-8"));d.version&&d.version!==n.version&&s.push({name:`node_modules: ${e}`,status:"warn",message:`node_modules has v${d.version} but plunk linked v${n.version}. Run 'plunk restore'.`});}catch{}}}else s.push({name:"Consumer state",status:"warn",message:"No packages linked. Use 'plunk add' to link a package."});let f=await a$2(t);if(s.push({name:"Package manager",status:"pass",message:f}),f==="yarn"){let e=await b$5(t);await c$1(t)?e==="node-modules"?s.push({name:"Yarn linker",status:"pass",message:"Yarn Berry with node-modules linker"}):e==="pnpm"?s.push({name:"Yarn linker",status:"pass",message:"Yarn pnpm linker mode (plunk handles this)"}):e==="pnp"?s.push({name:"Yarn linker",status:"fail",message:"Yarn PnP is not compatible. Set `nodeLinker: node-modules` in .yarnrc.yml"}):s.push({name:"Yarn linker",status:"warn",message:"Yarn Berry defaults to PnP. Add `nodeLinker: node-modules` to .yarnrc.yml"}):s.push({name:"Yarn linker",status:"pass",message:"Yarn Classic, node_modules mode"});}let i=await d$1(t);i.type?s.push({name:"Bundler",status:"pass",message:`${i.type}${i.configFile?` (${i.configFile})`:""}`}):s.push({name:"Bundler",status:"warn",message:"No bundler config detected"});let h=join(t,".gitignore");if(await k(h)){let{readFile:e}=await import('fs/promises');(await e(h,"utf-8")).includes(".plunk")?s.push({name:".gitignore",status:"pass",message:".plunk/ is ignored"}):s.push({name:".gitignore",status:"warn",message:".plunk/ not in .gitignore. Run 'plunk init' to fix."});}parseInt(process.versions.node.split(".")[0],10)>=22?s.push({name:"Node.js version",status:"pass",message:`v${process.versions.node}`}):s.push({name:"Node.js version",status:"fail",message:`v${process.versions.node} \u2014 plunk requires Node.js >= 22`});let B={pass:o.default.green("PASS"),fail:o.default.red("FAIL"),warn:o.default.yellow("WARN")};for(let e of s)b$1.log(` ${B[e.status]} ${e.name}: ${o.default.dim(e.message)}`);let p=s.filter(e=>e.status==="fail").length,c=s.filter(e=>e.status==="warn").length;b$1.log(""),p>0?b$1.error(`${p} issue(s) found that need attention`):c>0?b$1.warn(`${c} warning(s), but no critical issues`):b$1.success("All checks passed!"),a$3({results:s.map(({name:e,status:n,message:u})=>({name:e,status:n,message:u})),failures:p,warnings:c});}};export{K as default};
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';export{l as atomicWriteFile,e as collectFiles,m as copyDir,d as copyWithCoW,i as ensureDir,j as ensurePrivateDir,k as exists,f as incrementalCopy,c as isNodeError,g as moveDir,h as removeDir}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$2,g}from'./chunk-LLVBXPQN.mjs';import {b as b$1,d}from'./chunk-EMRPZYLU.mjs';import'./chunk-22YCXJTS.mjs';import {a as a$3,b as b$2}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a as a$4}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
- var o=c(a(),1);var M={meta:{name:"list",description:"List linked packages in current project or in the store"},args:{store:{type:"boolean",description:"List all packages in the global plunk store",default:false}},async run({args:n}){b$2(),n.store?await v():await P();}};async function P(){let n=await a$2(resolve(".")),l=Object.entries(n.links);if(l.length===0){b.info("No linked packages in this project"),a$3({packages:[]});return}b.info(`Linked packages (${l.length}):
4
- `);let i=a$4(8),t=await Promise.all(l.map(([e,s])=>i(async()=>{let r=await b$1(e,s.version),u=!!(r&&r.meta.contentHash!==s.contentHash);return {name:e,version:s.version,buildId:s.buildId??null,stale:u,sourcePath:s.sourcePath}})));for(let e of t){let s=e.buildId?`[${e.buildId}]`:"[--------]",r=e.stale?o.default.yellow(" (stale)"):"";b.log(` ${o.default.cyan(e.name)} ${o.default.dim("@"+e.version)} ${o.default.dim(s)}${r} \u2190 ${o.default.dim(e.sourcePath)}`);}a$3({packages:t});}a$1(P,"listProject");async function v(){let[n,l]=await Promise.all([d(),g()]);if(n.length===0){b.info("Plunk store is empty"),a$3({entries:[]});return}b.info(`Store entries (${n.length}):
5
- `);let i=[];for(let t of n){let e=w(new Date(t.meta.publishedAt)),s=t.meta.buildId?`[${t.meta.buildId}]`:"[--------]",r=l[t.name]?.length??0,u=r>0?o.default.green(`${r} consumer${r>1?"s":""}`):o.default.dim("no consumers");b.log(` ${o.default.cyan(t.name)} ${o.default.dim("@"+t.version)} ${o.default.dim(s)} ${o.default.dim(`published ${e}`)} ${u}`),b.log(` ${o.default.dim(`from: ${t.meta.sourcePath}`)}`),i.push({name:t.name,version:t.version,buildId:t.meta.buildId??null,publishedAt:t.meta.publishedAt,sourcePath:t.meta.sourcePath,consumers:r});}a$3({entries:i});}a$1(v,"listStore");function w(n){let l=Date.now()-n.getTime(),i=Math.floor(l/1e3);if(i<60)return `${i}s ago`;let t=Math.floor(i/60);if(t<60)return `${t}m ago`;let e=Math.floor(t/60);return e<24?`${e}h ago`:`${Math.floor(e/24)}d ago`}a$1(w,"getRelativeTime");export{M as default};
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {b,a as a$2}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {k}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b as b$1}from'./chunk-ICCM7US5.mjs';import {c}from'./chunk-2VCW5RWI.mjs';import {resolve,join}from'path';import {readFile,writeFile,rm}from'fs/promises';globalThis.require=createRequire(import.meta.url);
3
- var n=c(a(),1);var x={meta:{name:"migrate",description:"Migrate from yalc to plunk"},async run(){b();let m=new a$1,i=resolve(".");b$1.info(`Checking for yalc usage...
4
- `);let y=join(i,".yalc"),s=join(i,"yalc.lock"),l=join(i,"package.json"),k$1=await k(y),p=await k(s);if(!k$1&&!p){b$1.info("No yalc usage detected in this project."),a$2({migrated:false,packages:[]});return}let o=[];if(p)try{let t=await readFile(s,"utf-8"),a=JSON.parse(t);a.packages&&(o.push(...Object.keys(a.packages)),b$1.info(`Found ${o.length} yalc-linked package(s): ${o.map(c=>n.default.cyan(c)).join(", ")}`));}catch{b$1.warn("Could not parse yalc.lock \u2014 the file may be corrupted. Continuing with cleanup.");}if(await k(l))try{let t=await readFile(l,"utf-8"),a=JSON.parse(t),c=!1;for(let f of ["dependencies","devDependencies","peerDependencies"]){let g=a[f];if(g)for(let[h,w]of Object.entries(g))typeof w=="string"&&w.includes(".yalc/")&&(delete g[h],c=!0,b$1.info(`Removed file:.yalc/ reference for ${n.default.cyan(h)}`));}if(c){let f=t.match(/^(\s+)"/m)?.[1]||" ";await writeFile(l,JSON.stringify(a,null,f)+`
5
- `),b$1.success("Cleaned up package.json");}}catch(t){b$1.warn(`Could not clean package.json: ${t instanceof Error?t.message:String(t)}. You may need to manually remove file:.yalc/ references.`);}if(k$1&&(await rm(y,{recursive:true,force:true}),b$1.success("Removed .yalc/ directory")),p&&(await rm(s,{force:true}),b$1.success("Removed yalc.lock")),b$1.log(""),b$1.info(`${n.default.bold("Migration complete!")} Next steps:
6
- `),b$1.log(` 1. ${n.default.cyan("plunk init")}`),o.length>0)for(let t of o)b$1.log(` 2. ${n.default.cyan(`plunk add ${t} --from <path-to-${t}>`)}`);b$1.log(`
7
- Run ${n.default.cyan("plunk doctor")} to verify your setup.
8
- `),b$1.info(`Migrated in ${m.elapsed()}`),a$2({migrated:true,packages:o,elapsed:m.elapsedMs()});}};export{x as default};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {b as b$1}from'./chunk-HHV6VEYA.mjs';import {d as d$1,c}from'./chunk-SMIGYQFG.mjs';import {d as d$2}from'./chunk-AC5FETT7.mjs';import {e,i,a as a$1,f}from'./chunk-LLVBXPQN.mjs';import {a as a$4}from'./chunk-HPF6K6WO.mjs';import {a as a$2}from'./chunk-MBKCCWSD.mjs';import'./chunk-22YCXJTS.mjs';import {b as b$2,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {basename,resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
- var W={meta:{name:"remove",description:"Remove a plunk-linked package and restore the original"},args:{package:{type:"positional",description:"Package name to remove",required:false},all:{type:"boolean",description:"Remove all linked packages",default:false},force:{type:"boolean",description:"Skip error checking",default:false}},async run({args:r}){b$2();let e=new a$2,t=resolve(".");if(r.all){let f=await a$1(t),a=Object.entries(f.links);if(a.length===0){b.info("No linked packages to remove"),a$3({removed:0});return}let i=0,s=0;for(let[p,j]of a)try{await M(t,p,j),i++;}catch(d){s++,b.warn(`Failed to remove ${p}: ${d instanceof Error?d.message:String(d)}`);}b.success(`Removed ${i} plunk link(s)${s>0?`, ${s} failed`:""} in ${e.elapsed()}`),a$3({removed:i,failed:s,elapsed:e.elapsedMs()});return}let o=r.package;o||(a$4("Package name required. Use --all to remove all linked packages."),process.exit(1));let c=await f(t,o);if(!c){if(r.force){b.warn(`Package "${o}" is not linked, skipping`),a$3({removed:0});return}a$4(`Package "${o}" is not linked in this project`),process.exit(1);}await M(t,o,c),b.success(`Removed plunk link for ${o} in ${e.elapsed()}`),a$3({removed:1,package:o,elapsed:e.elapsedMs()});}};async function M(r,e$1,t){if(d(`[remove] Removing ${e$1}`),await d$1(r,e$1,t.packageManager),t.backupExists)try{await c(r,e$1,t.packageManager)&&b.success(`Restored original ${e$1} from backup`);}catch(i){b.warn(`Failed to restore backup for ${e$1}: ${i instanceof Error?i.message:String(i)}. Run your package manager's install command to restore it.`);}let o=await d$2(r);o.type==="next"&&o.configFile&&(await b$1(o.configFile,e$1)).modified&&d(`[remove] Removed ${e$1} from ${basename(o.configFile)}`);let{findTailwindCss:c$1,removeTailwindSource:f}=await import('./tailwind-source-YCRZUHUP.mjs'),a=await c$1(r);if(a&&(await f(a,e$1)).modified&&d(`[remove] Removed @source for ${e$1} from ${basename(a)}`),await e(r,e$1),await i(e$1,r),o.type==="vite"&&o.configFile){let i=await a$1(r);if(Object.keys(i.links).length===0){let{removeFromViteConfig:s}=await import('./vite-config-LXMLHR7V.mjs');(await s(o.configFile)).modified&&d(`[remove] Removed plunk plugin from ${basename(o.configFile)}`);}}}a(M,"removeSinglePackage");export{W as default};
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {l}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readdir,readFile}from'fs/promises';import {join,dirname,relative}from'path';globalThis.require=createRequire(import.meta.url);
3
- var x=new Set(["node_modules",".plunk","dist",".git"]);async function R(t){let n;try{n=await readdir(t,{recursive:!0,encoding:"utf-8"});}catch{return null}let r=n.filter(e=>e.endsWith(".css")?!e.replace(/\\/g,"/").split("/").some(c=>x.has(c)):false).map(e=>join(t,e));for(let e of r){let i;try{i=await readFile(e,"utf-8");}catch{continue}if(i.includes('@import "tailwindcss"')||i.includes("@import 'tailwindcss'"))return e}return null}a(R,"findTailwindCss");async function $(t,n,r){let e;try{e=await readFile(t,"utf-8");}catch{return {modified:false,error:"could not read CSS file"}}if(e.includes(`node_modules/${n}`))return {modified:false};let i=h(t,n,r),c=/^@(import|source|plugin|theme)\s.+$/gm,o=null,a;for(;(a=c.exec(e))!==null;)o=a;let d=`@source "${i}";`;if(o){let f=o.index+o[0].length;e=e.slice(0,f)+`
4
- `+d+e.slice(f);}else e=d+`
5
- `+e;return await l(t,e),{modified:true}}a($,"addTailwindSource");async function _(t,n){let r;try{r=await readFile(t,"utf-8");}catch{return {modified:false}}let e=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`^@source\\s+["'][^"']*node_modules/${e}["'];?\\s*\\n?`,"m");return i.test(r)?(r=r.replace(i,""),await l(t,r),{modified:true}):{modified:false}}a(_,"removeTailwindSource");function h(t,n,r){let e=dirname(t),i=join(r,"node_modules",n);return relative(e,i).replace(/\\/g,"/")}a(h,"computeSourcePath");export{$ as addTailwindSource,R as findTailwindCss,_ as removeTailwindSource};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a as a$5}from'./chunk-SMIGYQFG.mjs';import'./chunk-AC5FETT7.mjs';import {a as a$2,d as d$1}from'./chunk-LLVBXPQN.mjs';import {a as a$4}from'./chunk-HPF6K6WO.mjs';import {c}from'./chunk-EMRPZYLU.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import'./chunk-22YCXJTS.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {a}from'./chunk-TMH7HIJ2.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
- var I=a(4),W={meta:{name:"update",description:"Pull latest versions from the store for linked packages"},args:{package:{type:"positional",description:"Package name to update (default: all linked)",required:false}},async run({args:n}){b();let f=new a$1,a=resolve("."),b$2=await a$2(a),p=Object.entries(b$2.links);if(p.length===0){b$1.info("No linked packages in this project"),a$3({updated:0,skipped:0});return}let k=n.package?p.filter(([t])=>t===n.package):p;n.package&&k.length===0&&(a$4(`Package "${n.package}" is not linked in this project. Run 'plunk list' to see linked packages.`),process.exit(1));let d$2=0,c$1=0,o=0,r=0,E=await Promise.all(k.map(([t,m])=>I(async()=>{let e=await c(t);if(!e)return b$1.warn(`Store entry missing for ${t}. Re-publish it.`),"missing";if(e.meta.contentHash===m.contentHash)return d(`[update] ${t}@${e.version} already up to date`),"skipped";try{let s=await a$5(e,a,m.packageManager),H={...m,version:e.version,contentHash:e.meta.contentHash,buildId:e.meta.buildId??"",linkedAt:new Date().toISOString()};return await d$1(a,t,H),b$1.success(`Updated ${t}@${e.version} (${s.copied} files changed)`),"updated"}catch(s){return b$1.warn(`Failed to update ${t}: ${s instanceof Error?s.message:String(s)}`),"failed"}})));for(let t of E)t==="updated"?d$2++:t==="skipped"?c$1++:t==="missing"?o++:r++;let l=[`${d$2} updated`,`${c$1} unchanged`];o>0&&l.push(`${o} missing`),r>0&&l.push(`${r} failed`),b$1.info(`Update complete: ${l.join(", ")} in ${f.elapsed()}`),a$3({updated:d$2,skipped:c$1,missing:o,failed:r,elapsed:f.elapsedMs()});}};export{W as default};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {spawn}from'child_process';import {readdir,stat}from'fs/promises';import {platform}from'os';import {join}from'path';globalThis.require=createRequire(import.meta.url);
3
- var m=null;function j(){m&&!m.killed&&(m.kill("SIGTERM"),m=null);}a(j,"killActiveBuild");var _=new Set(["node_modules",".git",".plunk"]);async function M(o,t){let n;try{n=await readdir(o,{withFileTypes:!0});}catch{return}for(let r of n){if(_.has(r.name))continue;let u=join(o,r.name);if(r.isDirectory())await M(u,t);else try{let f=await stat(u);t.set(u,f.mtimeMs);}catch{}}}a(M,"walkDir");async function I(o){let t=new Map;for(let n of o)try{let r=await stat(n);r.isDirectory()?await M(n,t):t.set(n,r.mtimeMs);}catch{}return t}a(I,"buildSnapshot");async function q(o,t,n){let{watch:r}=await import('./chokidar-LVDD2IK4.mjs'),u=t.patterns??["src","lib"],f=u.map(e=>e.startsWith("/")||e.includes(":")?e:`${o}/${e}`),h=t.debounce??500,l=t.cooldown??500,i=null,p=false,b$1=false,w=0,v=false,P=a(async()=>{if(p||b$1)return;let e=Date.now()-w;if(!(w>0&&e<l)){b$1=true,v=false;try{if(t.buildCmd&&!await x(t.buildCmd,o)){b.warn("Build failed (see output above), skipping push");return}await n();}catch(s){b.error(`Push failed: ${s instanceof Error?s.message:String(s)}`);}finally{b$1=false,w=Date.now(),v&&!p&&(v=false,i=setTimeout(()=>{i=null,P();},l));}}},"doBuild"),g=a(e=>{if(p)return;if(b$1){v=true;return}let s=Date.now()-w;if(w>0&&s<l){i&&clearTimeout(i);let d=l-s;i=setTimeout(()=>{i=null,P();},d+h);return}i&&clearTimeout(i),i=setTimeout(()=>{i=null,P();},h);},"onFileEvent"),$=t.buildCmd?false:t.awaitWriteFinish??{stabilityThreshold:200,pollInterval:50},T=!!process.versions?.webcontainer,y=r(f,{ignoreInitial:true,ignored:[/[/\\]node_modules[/\\]/,/[/\\]\.git[/\\]/,/[/\\]\.plunk[/\\]/],awaitWriteFinish:$,usePolling:T,...T&&{interval:1e3}});y.on("change",g),y.on("add",g),y.on("unlink",g),y.on("error",e=>{b.error(`Watcher error: ${e instanceof Error?e.message:String(e)}`);});let k=null;if(T){let e=await I(f);k=setInterval(async()=>{if(!p)try{let s=await I(f);for(let[d,D]of s){let W=e.get(d);if(W===void 0||W!==D){g(d);break}}if(!p){for(let d of e.keys())if(!s.has(d)){g(d);break}}e=s;}catch{}},1e3);}let B={close:a(async()=>{p=true,k&&clearInterval(k),i&&clearTimeout(i),j(),await y.close();},"close")};return b.info(`Watching for changes in: ${u.join(", ")}`),B}a(q,"startWatcher");function x(o,t){return new Promise(n=>{let r=platform()==="win32",u=r?"cmd":"sh",f=r?"/c":"-c";b.start(`Running: ${o}`);let h=spawn(u,[f,o],{cwd:t,stdio:"inherit"});m=h,h.on("close",l=>{m=null,l===0?(b.success("Build succeeded"),n(true)):(b.error(`Build failed with code ${l}`),n(false));}),h.on("error",l=>{m=null,b.error(`Build error: ${l.message}`),n(false);});})}a(x,"runBuildCommand");export{j as killActiveBuild,q as startWatcher};
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import {createRequire}from'node:module';import {a}from'./chunk-HW7AEGI3.mjs';import {k as k$1}from'./chunk-TMH7HIJ2.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {readFile,readdir}from'fs/promises';import {join,dirname,relative,resolve}from'path';globalThis.require=createRequire(import.meta.url);
3
- var k=c(a(),1);async function F(o){let t=o;for(;;){if(await k$1(join(t,"pnpm-workspace.yaml")))return t;let s=dirname(t);if(s===t)return null;t=s;}}a$1(F,"findWorkspaceRoot");async function G(o){let t={default:{},named:{}},s=join(o,"pnpm-workspace.yaml"),i;try{i=await readFile(s,"utf-8");}catch{return t}let a=i.split(/\r?\n/),r="top",n="";for(let e of a){if(e.trim()===""||e.trim().startsWith("#"))continue;let l=e.length-e.trimStart().length;if(l===0){if(e.startsWith("catalog:")){r="default-catalog";continue}if(e.startsWith("catalogs:")){r="named-catalogs";continue}r="top";continue}if(r==="default-catalog"&&l>=2){let c=W(e);c&&(t.default[c[0]]=c[1]);continue}if(r==="named-catalogs"&&l>=2&&l<4){let c=e.trim();c.endsWith(":")&&(n=c.slice(0,-1),t.named[n]={},r="named-catalog-entries");continue}if(r==="named-catalog-entries"&&l>=4){let c=W(e);c&&n&&(t.named[n][c[0]]=c[1]);continue}if(r==="named-catalog-entries"&&l>=2&&l<4){let c=e.trim();c.endsWith(":")?(n=c.slice(0,-1),t.named[n]={}):r="named-catalogs";continue}}return t}a$1(G,"parseCatalogs");async function T(o){let t=await F(o);if(t){let i=await J(t),a=i.filter(n=>!n.startsWith("!")),r=i.filter(n=>n.startsWith("!")).map(n=>n.slice(1));if(a.length>0)return P(t,a,r)}let s=t??await N(o);if(!s)return [];try{let i=JSON.parse(await readFile(join(s,"package.json"),"utf-8")),a=Array.isArray(i.workspaces)?i.workspaces:i.workspaces?.packages??[];if(a.length===0)return [];let r=a.filter(e=>!e.startsWith("!")),n=a.filter(e=>e.startsWith("!")).map(e=>e.slice(1));return P(s,r,n)}catch{return []}}a$1(T,"findWorkspacePackages");async function J(o){let t=join(o,"pnpm-workspace.yaml"),s;try{s=await readFile(t,"utf-8");}catch{return []}let i=[],a=false;for(let r of s.split(/\r?\n/)){let n=r.trim();if(n===""||n.startsWith("#"))continue;let e=r.length-r.trimStart().length;if(e===0){a=n==="packages:";continue}if(a&&e>=2){let l=n.match(/^-\s+["']?([^"']+)["']?$/);l&&i.push(l[1]);}}return i}a$1(J,"parsePnpmWorkspacePackages");async function N(o){let t=o;for(;;){try{if(JSON.parse(await readFile(join(t,"package.json"),"utf-8")).workspaces)return t}catch{}let s=dirname(t);if(s===t)return null;t=s;}}a$1(N,"findPackageJsonWorkspaceRoot");async function P(o,t,s=[]){let i=[];for(let n of t)if(n.includes("*")){let e=n.split("/"),l=o,c=[],y=false;for(let g of e)y||g.includes("*")?(y=true,c.push(g)):l=join(l,g);if(c.length===1&&c[0]==="*")try{let g=await readdir(l,{withFileTypes:!0});for(let d of g)if(d.isDirectory()){let p=join(l,d.name);await k$1(join(p,"package.json"))&&i.push(p);}}catch{}else {let g=(0, k.default)(n),d=await S(o,8);for(let p of d){let j=relative(o,p).replace(/\\/g,"/");g(j)&&await k$1(join(p,"package.json"))&&i.push(p);}}}else {let e=resolve(o,n);await k$1(join(e,"package.json"))&&i.push(e);}let a=[...new Set(i)];if(s.length===0)return a;let r=(0, k.default)(s);return a.filter(n=>{let e=relative(o,n).replace(/\\/g,"/");return !r(e)})}a$1(P,"resolveWorkspaceGlobs");async function S(o,t){if(t<=0)return [];let s=[];try{let i=await readdir(o,{withFileTypes:!0});for(let a of i){if(!a.isDirectory()||a.name==="node_modules"||a.name===".git")continue;let r=join(o,a.name);s.push(r),s.push(...await S(r,t-1));}}catch{}return s}a$1(S,"collectDirs");function W(o){let t=o.trim(),s=t.indexOf(":");if(s<=0)return null;let i=t.slice(0,s).trim(),a=t.slice(s+1).trim();if(!i||!a)return null;let r=a.replace(/^["']|["']$/g,"");return [i,r]}a$1(W,"parseKeyValue");export{T as findWorkspacePackages,F as findWorkspaceRoot,G as parseCatalogs};