@olegkuibar/plunk 0.7.6 → 0.8.0-canary.80f84dc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/add-3RQYONUL.mjs +14 -0
- package/dist/bell-YD6IWNXO.mjs +2 -0
- package/dist/check-YV3B3NJU.mjs +6 -0
- package/dist/chunk-2GDRDQA5.mjs +3 -0
- package/dist/chunk-4GAOTDK4.mjs +3 -0
- package/dist/chunk-4KEAE5RS.mjs +7 -0
- package/dist/chunk-72AD4PZH.mjs +19 -0
- package/dist/chunk-AS4SJVLT.mjs +3 -0
- package/dist/chunk-BVIEPHQN.mjs +3 -0
- package/dist/chunk-EPNDXIQH.mjs +4 -0
- package/dist/chunk-HGXH6DYF.mjs +12 -0
- package/dist/chunk-KJPN6E7W.mjs +3 -0
- package/dist/chunk-P4QZJA33.mjs +3 -0
- package/dist/chunk-QDQKKMAV.mjs +3 -0
- package/dist/chunk-RWALYHUR.mjs +3 -0
- package/dist/chunk-SFLWVTJC.mjs +3 -0
- package/dist/chunk-SSCTJUNB.mjs +3 -0
- package/dist/chunk-SXO3YBPY.mjs +5 -0
- package/dist/chunk-SYADAYF4.mjs +3 -0
- package/dist/chunk-U376XMQP.mjs +3 -0
- package/dist/chunk-UFR2DOQU.mjs +13 -0
- package/dist/chunk-XVWUDOVN.mjs +4 -0
- package/dist/clean-ZKSUQ5P7.mjs +3 -0
- package/dist/cli.mjs +4 -4
- package/dist/dev-ZWSFPFJT.mjs +3 -0
- package/dist/doctor-F4IJJRMU.mjs +4 -0
- package/dist/fs-J2TUM3EM.mjs +2 -0
- package/dist/history-UND5QZKN.mjs +2 -0
- package/dist/index.d.ts +202 -5
- package/dist/index.mjs +2720 -1621
- package/dist/init-462LK4RS.mjs +7 -0
- package/dist/list-SN3P6AW4.mjs +5 -0
- package/dist/migrate-OAUFA2ML.mjs +8 -0
- package/dist/preflight-NPYJJSMT.mjs +2 -0
- package/dist/publish-WBWXJKWT.mjs +3 -0
- package/dist/push-ZDSUAM2Q.mjs +3 -0
- package/dist/remove-F4IUA7SK.mjs +2 -0
- package/dist/reset-UNDLX2AJ.mjs +3 -0
- package/dist/restore-K25HTQN3.mjs +11 -0
- package/dist/rollback-GFQSNZFB.mjs +3 -0
- package/dist/{status-22YV26A3.mjs → status-4QXDLVCX.mjs} +3 -3
- package/dist/tailwind-source-FEK5ASYL.mjs +5 -0
- package/dist/topo-sort-WEIVPJKN.mjs +2 -0
- package/dist/tracker-FEVY3U3R.mjs +2 -0
- package/dist/update-ZI2P4X2T.mjs +3 -0
- package/dist/vite-config-5RF5QMOC.mjs +2 -0
- package/dist/watch-orchestrator-6X33Y6OT.mjs +3 -0
- package/dist/watcher-MH45TB3S.mjs +3 -0
- package/dist/webpack-plugin.d.ts +47 -0
- package/dist/webpack-plugin.mjs +143 -0
- package/dist/workspace-V5YKJN5V.mjs +2 -0
- package/package.json +18 -3
- package/dist/add-GYBX4VAZ.mjs +0 -14
- package/dist/chunk-22YCXJTS.mjs +0 -4
- package/dist/chunk-4ZGIZZSF.mjs +0 -12
- package/dist/chunk-AC5FETT7.mjs +0 -4
- package/dist/chunk-CIY4E6PA.mjs +0 -3
- package/dist/chunk-EMRPZYLU.mjs +0 -3
- package/dist/chunk-HHV6VEYA.mjs +0 -7
- package/dist/chunk-LLVBXPQN.mjs +0 -3
- package/dist/chunk-PVMVWPLG.mjs +0 -4
- package/dist/chunk-SMIGYQFG.mjs +0 -15
- package/dist/chunk-TMH7HIJ2.mjs +0 -3
- package/dist/clean-F2IWAVRP.mjs +0 -3
- package/dist/dev-DBGYZOIV.mjs +0 -3
- package/dist/doctor-GJGAAT6J.mjs +0 -4
- package/dist/fs-BUNURH4P.mjs +0 -2
- package/dist/init-C6XCSFCU.mjs +0 -7
- package/dist/list-QSPN7FE5.mjs +0 -5
- package/dist/migrate-4TFDXO4G.mjs +0 -8
- package/dist/publish-6A7PX5IH.mjs +0 -3
- package/dist/push-AUAGCBYK.mjs +0 -3
- package/dist/remove-5DAQD627.mjs +0 -3
- package/dist/restore-JVH6INAG.mjs +0 -11
- package/dist/tailwind-source-YCRZUHUP.mjs +0 -5
- package/dist/update-33ICRFYZ.mjs +0 -3
- package/dist/vite-config-LXMLHR7V.mjs +0 -10
- package/dist/watcher-SY45L3SS.mjs +0 -3
- package/dist/workspace-SKJJQMMK.mjs +0 -3
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$3}from'./chunk-XVWUDOVN.mjs';import {b as b$3,c}from'./chunk-SSCTJUNB.mjs';import {a as a$6}from'./chunk-4KEAE5RS.mjs';import {b as b$5,a as a$5,e}from'./chunk-72AD4PZH.mjs';import {a as a$2}from'./chunk-HPF6K6WO.mjs';import'./chunk-HGXH6DYF.mjs';import {d}from'./chunk-UFR2DOQU.mjs';import {a as a$4,b as b$4,c as c$1,d as d$4}from'./chunk-EPNDXIQH.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {b as b$1,a as a$7}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {f,d as d$1,h as h$1}from'./chunk-KJPN6E7W.mjs';import {d as d$2}from'./chunk-U376XMQP.mjs';import'./chunk-HW7AEGI3.mjs';import {A,k,r}from'./chunk-SXO3YBPY.mjs';import {c as c$2,d as d$3,b as b$6}from'./chunk-R3RSOZXN.mjs';import {b as b$2}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import'fs/promises';import {spawn}from'child_process';import {platform}from'os';import {resolve,basename}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var Cn={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$1();let o=new a$1,e$1=resolve("."),{name:n,version:p}=en(t.package);if((!n||n==="@"||n.startsWith("@")&&!n.includes("/"))&&(a$2(`Invalid package name "${t.package}". Use format: package-name or @scope/package-name`),process.exit(1)),t.from){let s=resolve(t.from);b$2.info(`Publishing from ${s}...`),await a$3(s);}let a=p?await b$3(n,p):await c(n);if(!a){let s=p?`@${p} `:"";a$2(`Package "${n}"${s?" "+s:""} not found in store. Run 'plunk publish' in the package directory first, or use --from <path>.`),process.exit(1);}let f$1=!await A(k(e$1)),r$1=await a$4(e$1);if(f$1&&(await d(e$1,r$1),b$2.success("Auto-initialized plunk (consumer mode)")),b$2.info(`Detected package manager: ${r$1}`),r$1==="yarn"){let s=await b$4(e$1);(s==="pnp"||s===null&&await c$1(e$1))&&(b$2.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 k$1=await f(e$1,n);k$1&&(k$1.version===a.version?b$2.info(`Updating ${n}@${a.version} (already linked)`):b$2.info(`Updating ${n}: ${k$1.version} \u2192 ${a.version}`));let v=await b$5(e$1,n,r$1);v&&b$2.info(`Backed up existing ${n} installation`);let d$5=await a$5(a,e$1,r$1);b$2.success(`Linked ${n}@${a.version} \u2192 node_modules/${n} (${d$5.copied} files copied, ${d$5.skipped} unchanged)`),d$5.binLinks>0&&b$2.info(`Created ${d$5.binLinks} bin link(s)`);let G={version:a.version,contentHash:a.meta.contentHash,linkedAt:new Date().toISOString(),sourcePath:a.meta.sourcePath,backupExists:v,packageManager:r$1,buildId:a.meta.buildId??""};await d$1(e$1,n,G),await h$1(n,e$1),await d$2(e$1,n,a.version);let l=await e(a,e$1);if(l.length>0)if(c$2())d$3(`[add] Missing transitive deps (json mode): ${l.join(", ")}`);else if(t.yes){let s=h(r$1,l);b$2.info(`Installing missing dependencies: ${l.join(", ")}`),await b(s,e$1)?b$2.success("Installed missing dependencies"):b$2.warn(`Install failed. Run manually: ${s}`);}else if(await b$2.prompt(`Install ${l.length} missing dependencies? (${l.join(", ")})`,{type:"confirm",initial:true})){let m=h(r$1,l);await b(m,e$1)?b$2.success("Installed missing dependencies"):b$2.warn(`Install failed. Run manually: ${m}`);}else b$2.warn(`Missing transitive dependencies: ${l.join(", ")}
|
|
12
|
+
Run: ${h(r$1,l)}`);let c$3=await d$4(e$1);if(c$3.type==="next"&&c$3.configFile){let s=await a$6(c$3.configFile,n);s.modified?b$2.success(`Added ${n} to transpilePackages in ${basename(c$3.configFile)}`):s.error&&b$2.info(`Add to next.config manually: transpilePackages: ['${n}']`);}else if(c$3.type==="vite"&&c$3.configFile){let{addPlunkVitePlugin:s}=await import('./vite-config-5RF5QMOC.mjs'),m=await s(c$3.configFile);if(m.modified){b$2.success(`Added plunk plugin to ${basename(c$3.configFile)}`);let w=nn(r$1,"@olegkuibar/plunk");b$2.info("Installing @olegkuibar/plunk as devDependency..."),await b(w,e$1)?b$2.success("Installed @olegkuibar/plunk"):b$2.warn(`Install failed. Run manually: ${w}`);}else m.error&&b$2.info(`Add manually:
|
|
13
|
+
import plunk from "@olegkuibar/plunk/vite"
|
|
14
|
+
plugins: [plunk()]`);}let{findTailwindCss:K,addTailwindSource:Q}=await import('./tailwind-source-FEK5ASYL.mjs'),g=await K(e$1);if(g){let s=await Q(g,n,e$1);s.modified?b$2.success(`Added @source for ${n} to ${basename(g)}`):s.error&&b$2.info(`Add to your CSS manually: @source "../node_modules/${n}";`);}b$2.info(`Done in ${o.elapsed()}`),a$7({package:n,version:a.version,copied:d$5.copied,skipped:d$5.skipped,binLinks:d$5.binLinks,elapsed:o.elapsedMs()}),b$6()&&r();}};function h(t,o){let e=o.join(" ");switch(t){case "pnpm":return `pnpm add ${e}`;case "yarn":return `yarn add ${e}`;case "bun":return `bun add ${e}`;default:return `npm install ${e}`}}a(h,"buildInstallCommand");function nn(t,o){switch(t){case "pnpm":return `pnpm add -D ${o}`;case "yarn":return `yarn add -D ${o}`;case "bun":return `bun add -d ${o}`;default:return `npm install -D ${o}`}}a(nn,"buildDevInstallCommand");function b(t,o){return new Promise(e=>{let n=platform()==="win32",f=spawn(n?"cmd":"sh",[n?"/c":"-c",t],{cwd:o,stdio:"inherit"});f.on("close",r=>e(r===0)),f.on("error",()=>e(false));})}a(b,"runInstallCommand");function en(t){if(t.startsWith("@")){let e=t.indexOf("/");if(e>0){let n=t.indexOf("@",e);if(n>e)return {name:t.slice(0,n),version:t.slice(n+1)}}return {name:t,version:null}}let o=t.lastIndexOf("@");return o>0?{name:t.slice(0,o),version:t.slice(o+1)}:{name:t,version:null}}a(en,"parsePackageArg");export{Cn as default};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$1}from'./chunk-RWALYHUR.mjs';import {b,a as a$2}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-R3RSOZXN.mjs';import {a,b as b$1}from'./chunk-ICCM7US5.mjs';import {c}from'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var o=c(a(),1);var y={meta:{name:"check",description:"Validate package configuration (exports, types, entry points)"},args:{dir:{type:"positional",description:"Package directory (default: current directory)",required:false}},async run({args:l}){b();let p=resolve(l.dir||"."),s=await a$1(p);if(s.length===0){b$1.success("All pre-flight checks passed"),a$2({issues:[],passed:true});return}let t=s.filter(e=>e.severity==="error"),i=s.filter(e=>e.severity==="warn");b$1.info(`Found ${s.length} issue(s):
|
|
4
|
+
`);for(let e of t)b$1.log(` ${o.default.red("ERROR")} ${o.default.dim(`[${e.code}]`)} ${e.message}`);for(let e of i)b$1.log(` ${o.default.yellow("WARN")} ${o.default.dim(`[${e.code}]`)} ${e.message}`);t.length>0?b$1.error(`
|
|
5
|
+
${t.length} error(s), ${i.length} warning(s)`):b$1.warn(`
|
|
6
|
+
${i.length} warning(s)`),a$2({issues:s,passed:t.length===0});}};export{y as default};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a}from'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
function B(t){if(t===0)return "0 B";let o=["B","KB","MB","GB"],n=Math.min(Math.floor(Math.log(t)/Math.log(1024)),o.length-1),i=t/1024**n;return n===0?`${t} B`:`${i.toFixed(1)} ${o[n]}`}a(B,"formatBytes");export{B as a};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {h,i,A as A$1,y,w,x as x$1,e}from'./chunk-SXO3YBPY.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile,writeFile,rename,readdir}from'fs/promises';import {join}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var E=3;async function x(i$1,e,r,o){let s=join(r,".plunk-meta.json"),t;try{t=JSON.parse(await readFile(s,"utf-8"));}catch{d(`[history] Could not read meta from ${s}, skipping history capture`);return}let n=t.buildId;if(!n){d("[history] No buildId in meta, skipping history capture");return}let u=h(i$1,e),c=i(i$1,e,n);if(await A$1(c)){d(`[history] Build ${n} already in history, skipping`);return}await y(u);let m=c+`.tmp-${process.pid}`;try{await y(m);let y$1=join(r,"package");await A$1(y$1)&&await w(y$1,join(m,"package")),await writeFile(join(m,".plunk-meta.json"),JSON.stringify(t,null,2)),await rename(m,c),d(`[history] Captured build ${n} to history`);}catch(y){d(`[history] Failed to capture history: ${y instanceof Error?y.message:String(y)}`),await x$1(m);}await M(i$1,e,o??E);}a(x,"captureHistory");async function S(i,e){let r=h(i,e);if(!await A$1(r))return [];let o;try{o=await readdir(r);}catch{return []}let s=[];for(let t of o){let n=join(r,t),u=join(n,".plunk-meta.json");try{let c=JSON.parse(await readFile(u,"utf-8"));s.push({buildId:c.buildId??t,contentHash:c.contentHash,publishedAt:c.publishedAt,sourcePath:c.sourcePath,packageDir:join(n,"package")});}catch{}}return s.sort((t,n)=>new Date(n.publishedAt).getTime()-new Date(t.publishedAt).getTime()),s}a(S,"listHistory");async function A(i$1,e,r){let o=i(i$1,e,r),s=join(o,".plunk-meta.json");try{let t=JSON.parse(await readFile(s,"utf-8"));return {buildId:t.buildId??r,contentHash:t.contentHash,publishedAt:t.publishedAt,sourcePath:t.sourcePath,packageDir:join(o,"package")}}catch{return null}}a(A,"getHistoryEntry");async function J(i$1,e$1,r,o){let s=await A(i$1,e$1,r);if(!s)return null;let t=e(i$1,e$1),n=i(i$1,e$1,r),u=join(n,"package"),c=join(n,".plunk-meta.json"),m=await readFile(c,"utf-8");await A$1(t)&&await x(i$1,e$1,t,o);let f=join(t,"package"),y=join(t,".plunk-meta.json");return await A$1(f)&&await x$1(f),await A$1(u)&&await w(u,f),await writeFile(y,m),await x$1(n),d(`[history] Restored build ${r} as current`),s}a(J,"restoreHistoryEntry");async function M(i$1,e,r){if(r<0)return 0;let o=await S(i$1,e);if(o.length<=r)return 0;let s=o.slice(r),t=0;for(let n of s){let u=i(i$1,e,n.buildId);try{await x$1(u),t++,d(`[history] Pruned old build ${n.buildId}`);}catch{}}return t}a(M,"pruneHistory");async function C(i,e){let r=h(i,e);await A$1(r)&&await x$1(r);}a(C,"clearHistory");function L(i){return i??E}a(L,"resolveHistoryLimit");export{x as a,S as b,A as c,J as d,M as e,C as f,L as g};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$1}from'./chunk-HGXH6DYF.mjs';import {B}from'./chunk-SXO3YBPY.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
function g(e){return e.match(/^(\s+)\S/m)?.[1]||" "}a(g,"detectIndent");function x(e){let r=[],t=/['"]([^'"]*)['"]/g,n;for(;(n=t.exec(e))!==null;)r.push(n[1]);return r}a(x,"parseArrayItems");function w(e,r){return e.length===0?"[]":e.length<=3?`[${e.map(n=>`'${n}'`).join(", ")}]`:`[
|
|
4
|
+
${e.map(n=>`${r}${r}'${n}',`).join(`
|
|
5
|
+
`)}
|
|
6
|
+
${r}]`}a(w,"formatArray");function y(e){let r=a$1(e);return r.complex?r:/(?:module\.exports\s*=\s*|export\s+default\s+)[\w.]+\s*\(\s*\{/.test(e)?{complex:true,reason:"wrapper function pattern"}:/\w+\s*\(\s*\w+\s*\(/.test(e)&&e.includes("module.exports")?{complex:true,reason:"chained wrapper functions"}:{complex:false}}a(y,"isComplexNextConfig");async function b(e,r){let t;try{t=await readFile(e,"utf-8");}catch{return {modified:false,error:"could not read config file"}}let n=y(t);if(n.complex)return {modified:false,error:`config too complex (${n.reason})`};let c=g(t),l=/transpilePackages\s*:\s*\[([^\]]*)\]/s,f=l.exec(t);if(f){let s=x(f[1]);if(s.includes(r))return {modified:false};s.push(r);let i=w(s,c),a=t.replace(l,`transpilePackages: ${i}`);return await B(e,a),{modified:true}}let p=[/module\.exports\s*=\s*\{/,/export\s+default\s+\{/,/(?:const|let|var)\s+\w*[Cc]onfig\w*\s*=\s*\{/];for(let s of p){let i=s.exec(t);if(i){let a=i.index+i[0].length,h=`
|
|
7
|
+
${c}transpilePackages: ['${r}'],`,$=t.slice(0,a)+h+t.slice(a);return await B(e,$),{modified:true}}}return {modified:false,error:"unrecognized config pattern"}}a(b,"addToTranspilePackages");async function A(e,r){let t;try{t=await readFile(e,"utf-8");}catch{return {modified:false}}let n=g(t),c=/transpilePackages\s*:\s*\[([^\]]*)\]/s,l=c.exec(t);if(!l)return {modified:false};let f=x(l[1]),p=f.filter(a=>a!==r);if(p.length===f.length)return {modified:false};let s=w(p,n),i=t.replace(c,`transpilePackages: ${s}`);return await B(e,i),{modified:true}}a(A,"removeFromTranspilePackages");export{b as a,A as b};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {e,b as b$2}from'./chunk-EPNDXIQH.mjs';import {q,m,s,A,x as x$1,y,v,l,D,n}from'./chunk-SXO3YBPY.mjs';import {b,d}from'./chunk-R3RSOZXN.mjs';import {b as b$1}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 W(e){return e.bin?typeof e.bin=="string"?{[e.name.startsWith("@")?e.name.split("/")[1]:e.name]:e.bin}:e.bin:{}}a(W,"resolveBinEntries");async function F(e,n,i){let r=W(i);if(Object.keys(r).length===0)return 0;if(b()){for(let o of Object.keys(r))q({type:"bin-link",path:join(e,"node_modules",".bin",o),detail:n});return d(`[dry-run] would create ${Object.keys(r).length} bin link(s) for ${n}`),Object.keys(r).length}let t=join(e,"node_modules",".bin");await mkdir(t,{recursive:true});let s$1=platform()==="win32",a=0;for(let[o,g]of Object.entries(r)){let l=join(e,"node_modules",n),f=join(l,g),R=resolve(f);if(!R.startsWith(resolve(l)+sep)&&R!==resolve(l)){b$1.warn(`bin "${o}" points outside package directory, skipping`);continue}let $=m(relative(t,f));if(s$1){let b=join(t,`${o}.cmd`),O=`@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%\\${$.replace(/\//g,"\\")}" %*\r
|
|
11
|
+
`;await writeFile(b,O);let Y=join(t,`${o}.ps1`),q=`#!/usr/bin/env pwsh
|
|
12
|
+
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
|
13
|
+
& node "$basedir/${$}" $args
|
|
14
|
+
exit $LASTEXITCODE
|
|
15
|
+
`;await writeFile(Y,q);let K=join(t,o),Q=`#!/bin/sh
|
|
16
|
+
exec node "${$}" "$@"
|
|
17
|
+
`;await writeFile(K,Q);}else {let b=join(t,o);try{await rm(b,{force:!0});}catch{}try{await symlink($,b),await chmod(f,493);}catch(w){if(s(w)&&(w.code==="EPERM"||w.code==="EACCES")){d(`[bin-linker] Symlink failed (${w.code}), using shell wrapper for ${o}`);let O=`#!/bin/sh
|
|
18
|
+
exec node "${$}" "$@"
|
|
19
|
+
`;await writeFile(b,O),await chmod(b,493);}else throw w}}a++;}return a}a(F,"createBinLinks");async function H(e,n){let i=W(n);if(b()){for(let s of Object.keys(i))q({type:"bin-unlink",path:join(e,"node_modules",".bin",s)});d(`[dry-run] would remove ${Object.keys(i).length} bin link(s)`);return}let r=join(e,"node_modules",".bin"),t=platform()==="win32";for(let s of Object.keys(i))try{await rm(join(r,s),{force:!0}),t&&(await rm(join(r,`${s}.cmd`),{force:!0}),await rm(join(r,`${s}.ps1`),{force:!0}));}catch{}}a(H,"removeBinLinks");var te={next:[".next/cache"],webpack:["node_modules/.cache"]},X=new Map;async function z(e$1){if(b()){d(`[dry-run] would invalidate bundler caches for ${e$1}`),q({type:"cache-invalidate",path:e$1});return}let n=X.get(e$1);n||(n=await e(e$1),X.set(e$1,n));for(let i of n){if(!i.type)continue;let r=te[i.type];if(r)for(let t of r){let s=join(e$1,t);if(await A(s))try{await x$1(s),d(`[inject] Invalidated ${i.type} cache: ${t}`);}catch{d(`[inject] Could not clear ${i.type} cache: ${t} (locked?)`);}}}}a(z,"invalidateBundlerCache");async function Ie(e,n,i,r={}){let t=await x(n,e.name,i,e.version);d(`[inject] ${e.name}@${e.version} \u2192 ${t}`),await y(t);let{copied:s,removed:a,skipped:o}=await v(e.packageDir,t,{force:r.force});d(`[inject] ${s} copied, ${a} removed, ${o} skipped`),(s>0||a>0)&&await z(n);let g=await M(e.packageDir),l=g?await F(n,e.name,g):0;return l>0&&d(`[inject] Created ${l} bin link(s)`),{copied:s,removed:a,skipped:o,binLinks:l}}a(Ie,"inject");async function Ne(e,n,i){let r=await x(e,n,i);if(!await A(r))return false;let t=l(e,n);return await x$1(t),await D(r,t),true}a(Ne,"backupExisting");async function Te(e,n,i){let r=l(e,n);if(!await A(r))return false;let t=await x(e,n,i);return await x$1(t),await D(r,t),await x$1(r),true}a(Te,"restoreBackup");async function Le(e,n,i){let r=await x(e,n,i),t=await M(r);t&&await H(e,t),await x$1(r);}a(Le,"removeInjected");async function Je(e,n){let i=await M(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 t=Object.keys(r);return (await Promise.all(t.map(async a=>({dep:a,installed:await A(join(n,"node_modules",a))})))).filter(a=>!a.installed).map(a=>a.dep)}a(Je,"checkMissingDeps");async function x(e,n$1,i,r){let t=n(e,n$1);if(!(i==="pnpm"||i==="yarn"&&await b$2(e)==="pnpm"))return t;try{let o=await se(t);if(o!==resolve(t))return d(`[inject] pnpm: resolved symlink \u2192 ${o}`),o}catch(o){s(o)&&o.code!=="ENOENT"&&b$1.debug(`pnpm symlink resolution error: ${o instanceof Error?o.message:String(o)}`);}let a=join(e,"node_modules",".pnpm");if(await A(a)){d(`[inject] pnpm: scanning .pnpm/ for ${n$1}`);let o=n$1.replaceAll("/","+");if(r){let l=`${o}@${r}`,f=join(a,l,"node_modules",n$1);if(await A(f))return d(`[inject] pnpm: exact version match in .pnpm/ \u2192 ${f}`),f}let g=await readdir(a);for(let l of g)if(l.startsWith(o+"@")){let f=join(a,l,"node_modules",n$1);if(await A(f))return d(`[inject] pnpm: found in .pnpm/ \u2192 ${f}`),f}}return b$1.warn(`pnpm: Could not find ${n$1} 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.`),t}a(x,"resolveTargetDir");async function se(e){try{return await stat(e),await realpath(e)}catch(n){if(s(n)&&n.code==="ENOENT")return resolve(e);throw n}}a(se,"resolveRealPath");async function M(e){try{let n=await readFile(join(e,"package.json"),"utf-8");return JSON.parse(n)}catch(n){return s(n)&&n.code!=="ENOENT"&&b$1.warn(`Failed to read package.json in ${e}: ${n instanceof Error?n.message:String(n)}`),null}}a(M,"readPackageJson");export{Ie as a,Ne as b,Te as c,Le as d,Je as e};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a}from'./chunk-HW7AEGI3.mjs';import {A,m}from'./chunk-SXO3YBPY.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 w=c(a(),1);async function N(o){let t=o;for(;;){if(await A(join(t,"pnpm-workspace.yaml")))return t;let s=dirname(t);if(s===t)return null;t=s;}}a$1(N,"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 r=i.split(/\r?\n/),e="top",n="";for(let a of r){if(a.trim()===""||a.trim().startsWith("#"))continue;let f=a.length-a.trimStart().length;if(f===0){if(a.startsWith("catalog:")){e="default-catalog";continue}if(a.startsWith("catalogs:")){e="named-catalogs";continue}e="top";continue}if(e==="default-catalog"&&f>=2){let c=S(a);c&&(t.default[c[0]]=c[1]);continue}if(e==="named-catalogs"&&f>=2&&f<4){let c=a.trim();c.endsWith(":")&&(n=c.slice(0,-1),t.named[n]={},e="named-catalog-entries");continue}if(e==="named-catalog-entries"&&f>=4){let c=S(a);c&&n&&(t.named[n][c[0]]=c[1]);continue}if(e==="named-catalog-entries"&&f>=2&&f<4){let c=a.trim();c.endsWith(":")?(n=c.slice(0,-1),t.named[n]={}):e="named-catalogs";continue}}return t}a$1($,"parseCatalogs");async function C(o){let t=await N(o);if(t){let i=await G(t),r=i.filter(n=>!n.startsWith("!")),e=i.filter(n=>n.startsWith("!")).map(n=>n.slice(1));if(r.length>0)return W(t,r,e)}let s=t??await O(o);if(!s)return [];try{let i=JSON.parse(await readFile(join(s,"package.json"),"utf-8")),r=Array.isArray(i.workspaces)?i.workspaces:i.workspaces?.packages??[];if(r.length===0)return [];let e=r.filter(a=>!a.startsWith("!")),n=r.filter(a=>a.startsWith("!")).map(a=>a.slice(1));return W(s,e,n)}catch{return []}}a$1(C,"findWorkspacePackages");async function G(o){let t=join(o,"pnpm-workspace.yaml"),s;try{s=await readFile(t,"utf-8");}catch{return []}let i=[],r=false;for(let e of s.split(/\r?\n/)){let n=e.trim();if(n===""||n.startsWith("#"))continue;let a=e.length-e.trimStart().length;if(a===0){r=n==="packages:";continue}if(r&&a>=2){let f=n.match(/^-\s+["']?([^"']+)["']?$/);f&&i.push(f[1]);}}return i}a$1(G,"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 a=n.split("/"),f=o,c=[],y=false;for(let g of a)y||g.includes("*")?(y=true,c.push(g)):f=join(f,g);if(c.length===1&&c[0]==="*")try{let g=await readdir(f,{withFileTypes:!0});for(let k of g)if(k.isDirectory()){let u=join(f,k.name);await A(join(u,"package.json"))&&i.push(u);}}catch{}else {let g=(0, w.default)(n),k=await j(o,8);for(let u of k){let b=m(relative(o,u));g(b)&&await A(join(u,"package.json"))&&i.push(u);}}}else {let a=resolve(o,n);await A(join(a,"package.json"))&&i.push(a);}let r=[...new Set(i)];if(s.length===0)return r;let e=(0, w.default)(s);return r.filter(n=>{let a=m(relative(o,n));return !e(a)})}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 r of i){if(!r.isDirectory()||r.name==="node_modules"||r.name===".git")continue;let e=join(o,r.name);s.push(e),s.push(...await j(e,t-1));}}catch{}return s}a$1(j,"collectDirs");async function z(o){let t=await C(o),s=[];for(let e of t)try{let n=JSON.parse(await readFile(join(e,"package.json"),"utf-8"));n.name&&n.version&&s.push({name:n.name,version:n.version,dir:e,pkg:n});}catch{}let i=new Set(s.map(e=>e.name)),r=new Map;for(let e of s){let n=new Set;for(let a of ["dependencies","devDependencies"]){let f=e.pkg[a];if(f)for(let c of Object.keys(f))i.has(c)&&n.add(c);}r.set(e.name,n);}return {packages:s,adjacency:r}}a$1(z,"buildWorkspaceGraph");function D(o){let t=new Map;for(let s of o.keys())t.set(s,new Set);for(let[s,i]of o)for(let r of i){let e=t.get(r);e||(e=new Set,t.set(r,e)),e.add(s);}return t}a$1(D,"buildReverseAdjacency");function S(o){let t=o.trim(),s=t.indexOf(":");if(s<=0)return null;let i=t.slice(0,s).trim(),r=t.slice(s+1).trim();if(!i||!r)return null;let e=r.replace(/^["']|["']$/g,"");return [i,e]}a$1(S,"parseKeyValue");export{N as a,$ as b,C as c,z as d,D as e};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {b as b$1}from'./chunk-4KEAE5RS.mjs';import {d as d$1,c}from'./chunk-72AD4PZH.mjs';import {a as a$4}from'./chunk-HPF6K6WO.mjs';import {d as d$2}from'./chunk-EPNDXIQH.mjs';import {a as a$2}from'./chunk-MBKCCWSD.mjs';import {b as b$2,a as a$3}from'./chunk-OJJZ7CLB.mjs';import {e,i,a as a$1,f}from'./chunk-KJPN6E7W.mjs';import {r}from'./chunk-SXO3YBPY.mjs';import {d,b as b$3}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 A={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},yes:{type:"boolean",alias:"y",description:"Skip confirmation prompts",default:false}},async run({args:i}){b$2();let e=new a$2,n=resolve(".");if(i.all){let u=await a$1(n),a=Object.entries(u.links);if(a.length===0){b.info("No linked packages to remove"),a$3({removed:0});return}if(!i.yes){let l=a.map(([m])=>m).join(", "),d=await b.prompt(`Remove ${a.length} linked package(s)? (${l})`,{type:"confirm"});if(!d||typeof d=="symbol"){b.info("Cancelled");return}}let r=0,s=0;for(let[l,d]of a)try{await E(n,l,d),r++;}catch(m){s++,b.warn(`Failed to remove ${l}: ${m instanceof Error?m.message:String(m)}`);}b.success(`Removed ${r} plunk link(s)${s>0?`, ${s} failed`:""} in ${e.elapsed()}`),a$3({removed:r,failed:s,elapsed:e.elapsedMs()});return}let o=i.package;o||(a$4("Package name required. Use --all to remove all linked packages."),process.exit(1));let f$1=await f(n,o);if(!f$1){if(i.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 E(n,o,f$1),b.success(`Removed plunk link for ${o} in ${e.elapsed()}`),a$3({removed:1,package:o,elapsed:e.elapsedMs()}),b$3()&&r();}};async function E(i$1,e$1,n){if(d(`[remove] Removing ${e$1}`),await d$1(i$1,e$1,n.packageManager),n.backupExists)try{await c(i$1,e$1,n.packageManager)&&b.success(`Restored original ${e$1} from backup`);}catch(r){b.warn(`Failed to restore backup for ${e$1}: ${r instanceof Error?r.message:String(r)}. Run your package manager's install command to restore it.`);}let o=await d$2(i$1);o.type==="next"&&o.configFile&&(await b$1(o.configFile,e$1)).modified&&d(`[remove] Removed ${e$1} from ${basename(o.configFile)}`);let{findTailwindCss:f,removeTailwindSource:u}=await import('./tailwind-source-FEK5ASYL.mjs'),a=await f(i$1);if(a&&(await u(a,e$1)).modified&&d(`[remove] Removed @source for ${e$1} from ${basename(a)}`),await e(i$1,e$1),await i(e$1,i$1),o.type==="vite"&&o.configFile){let r=await a$1(i$1);if(Object.keys(r.links).length===0){let{removeFromViteConfig:s}=await import('./vite-config-5RF5QMOC.mjs');(await s(o.configFile)).modified&&d(`[remove] Removed plunk plugin from ${basename(o.configFile)}`);}}}a(E,"removeSinglePackage");export{A as a,E as b};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {A}from'./chunk-SXO3YBPY.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile,stat}from'fs/promises';import {join,dirname}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var y=new Set(["npm","pnpm","yarn","bun"]),k=[["pnpm-lock.yaml","pnpm"],["bun.lockb","bun"],["bun.lock","bun"],["yarn.lock","yarn"],["package-lock.json","npm"]];async function P(r){try{let n=await readFile(join(r,"package.json"),"utf-8"),e=JSON.parse(n);if(typeof e.packageManager!="string")return null;let t=e.packageManager.split("@")[0];return y.has(t)?t:null}catch{return null}}a(P,"readPackageManagerField");async function x(r){let n=r;for(;;){let e=await P(n);if(e)return e;let o=(await Promise.all(k.map(async([a,s])=>{try{return await stat(join(n,a)),s}catch{return null}}))).find(a=>a!==null);if(o)return o;let i=dirname(n);if(i===n)return "npm";n=i;}}a(x,"detectPackageManager");async function h(r){let n=r;for(;;){let e;try{e=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 e.split(`
|
|
4
|
+
`)){let o=t.trim();if(o.startsWith("#")||!o.includes("nodeLinker"))continue;let i=o.match(/^nodeLinker:\s*(.+)$/);if(i){let a=i[1].trim().replace(/^["']|["']$/g,"");if(a==="node-modules"||a==="pnpm"||a==="pnp")return a}}return null}}a(h,"detectYarnNodeLinker");async function j(r){let n=r;for(;;)try{return await stat(join(n,".yarnrc.yml")),!0}catch{let e=dirname(n);if(e===n)return false;n=e;}}a(j,"hasYarnrcYml");var d=[["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 v(r){for(let[n,e]of d)for(let t of e){let o=join(r,t);if(await A(o))return {type:n,configFile:o}}return {type:null,configFile:null}}a(v,"detectBundler");async function I(r){let n=d.flatMap(([i,a])=>a.map(async s=>({type:i,configFile:join(r,s),found:await A(join(r,s))}))),e=await Promise.all(n),t=new Set,o=[];for(let{type:i,configFile:a,found:s}of e)s&&!t.has(i)&&(t.add(i),o.push({type:i,configFile:a}));return o}a(I,"detectAllBundlers");export{x as a,h as b,j as c,v as d,I as e};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {B}from'./chunk-SXO3YBPY.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
function d(n){return n.match(/^(\s+)\S/m)?.[1]||" "}a(d,"detectIndent");function m(n){return n.includes("@olegkuibar/plunk/vite")||n.includes("vite-plugin-plunk")}a(m,"hasPlunkPlugin");function p(n){let e=[],s="",o=0;for(let i of n)if(i==="("&&o++,i===")"&&o--,i===","&&o===0){let l=s.trim();l&&e.push(l),s="";}else s+=i;let r=s.trim();return r&&e.push(r),e}a(p,"parsePluginItems");function h(n,e){return n.length===0?"[]":n.length===1?`[${n[0]}]`:`[
|
|
4
|
+
${n.map(o=>`${e}${e}${o},`).join(`
|
|
5
|
+
`)}
|
|
6
|
+
${e}]`}a(h,"formatPlugins");function x(n){let s=/plugins\s*:\s*\[/g.exec(n);if(!s)return null;let o=s.index+s[0].length-1,r=1,i=o+1,l=false,f=false;for(;i<n.length&&r>0;){let t=n[i];if(f){f=false,i++;continue}if(t==="\\"){f=true,i++;continue}if(l){t===l&&(l=false),i++;continue}if(t==='"'||t==="'"||t==="`"){l=t,i++;continue}if(t==="/"&&n[i+1]==="/"){let u=n.indexOf(`
|
|
7
|
+
`,i);i=u===-1?n.length:u+1;continue}if(t==="/"&&n[i+1]==="*"){let u=n.indexOf("*/",i+2);i=u===-1?n.length:u+2;continue}(t==="["||t==="("||t==="{")&&r++,(t==="]"||t===")"||t==="}")&&r--,i++;}return r!==0?null:{start:o,end:i,inner:n.slice(o+1,i-1)}}a(x,"findPluginsArray");function k(n){let e=0,s=/^import\s/gm,o;for(;(o=s.exec(n))!==null;){let r=o.index,i=r+o[0].length,l=false,f=0;for(;i<n.length;){let t=n[i];if(l){t===l&&(l=false),i++;continue}if(t==='"'||t==="'"||t==="`"){l=t,i++;continue}if(t==="{"&&f++,t==="}"&&f--,t===";"&&f<=0){i++;break}if(t===`
|
|
8
|
+
`&&f<=0){let u=n.slice(r,i).trimEnd();if(u.endsWith('"')||u.endsWith("'"))break}i++;}e=i;}return e}a(k,"findLastImportEnd");function w(n){return /defineConfig\s*\(.*\?/.test(n)?{complex:true,reason:"conditional defineConfig"}:/export\s+default\s+function/.test(n)?{complex:true,reason:"dynamic export (function)"}:/plugins\s*:\s*\[\s*\.\.\./.test(n)?{complex:true,reason:"spread operator in plugins array"}:/defineConfig\s*\(\s*async/.test(n)||/mergeConfig\s*\(/.test(n)?{complex:true,reason:"async or merged config"}:{complex:false}}a(w,"isComplexConfig");async function C(n){let e;try{e=await readFile(n,"utf-8");}catch{return {modified:false,error:"could not read config file"}}if(m(e))return {modified:false};let s=w(e);if(s.complex)return {modified:false,error:`config too complex (${s.reason})`};let o=d(e),r=x(e);if(r){let f=p(r.inner);f.push("plunk()");let t=h(f,o);e=e.slice(0,r.start)+t+e.slice(r.end);}else {let t=/(?:defineConfig\s*\(\s*\{|export\s+default\s+\{)/.exec(e);if(t){let u=t.index+t[0].length,b=`
|
|
9
|
+
${o}plugins: [plunk()],`;e=e.slice(0,u)+b+e.slice(u);}else return {modified:false,error:"unrecognized Vite config pattern"}}let i=`import plunk from "@olegkuibar/plunk/vite";
|
|
10
|
+
`,l=k(e);return l>0?e=e.slice(0,l)+`
|
|
11
|
+
`+i+e.slice(l):e=i+`
|
|
12
|
+
`+e,await B(n,e),{modified:true}}a(C,"addPlunkVitePlugin");async function $(n){let e;try{e=await readFile(n,"utf-8");}catch{return {modified:false}}if(!m(e))return {modified:false};let s=false,o=/^import\s+\w+\s+from\s+["']@olegkuibar\/plunk\/vite["'];?\s*\n?/m;o.test(e)&&(e=e.replace(o,""),s=true);let r=x(e);if(r){let i=p(r.inner),l=i.filter(f=>!f.startsWith("plunk("));if(l.length!==i.length){let f=d(e),t=h(l,f);e=e.slice(0,r.start)+t+e.slice(r.end),s=true;}}return s&&await B(n,e),{modified:s}}a($,"removeFromViteConfig");export{w as a,C as b,$ as c};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {c,a as a$1,e}from'./chunk-U376XMQP.mjs';import {k,s,y,j,B as B$1,b as b$1,z,m,A as A$1}from'./chunk-SXO3YBPY.mjs';import {b}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 R(t){let{state:e}=await p(t);return e}a(R,"readConsumerState");async function p(t){let e=k(t);try{let r=await readFile(e,"utf-8"),s=JSON.parse(r);return c(s)?{state:s,reliable:!0}:(b.warn(`Invalid consumer state in ${e}, using defaults`),{state:{version:"1",links:{}},reliable:!1})}catch(r){return s(r)&&r.code==="ENOENT"?{state:{version:"1",links:{}},reliable:true}:(b.warn(`Failed to read consumer state: ${r instanceof Error?r.message:String(r)}`),{state:{version:"1",links:{}},reliable:false})}}a(p,"readConsumerStateSafe");async function L(t,e){await y(j(t));let r=k(t);await B$1(r,JSON.stringify(e,null,2));}a(L,"writeConsumerState");async function T(t,e,r){let s=k(t);await a$1(s,async()=>{let{state:i,reliable:c}=await p(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 L(t,i);});}a(T,"addLink");async function M(t,e){let r=k(t);await a$1(r,async()=>{let{state:s,reliable:i}=await p(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 L(t,s);});}a(M,"removeLink");async function W(t,e){return (await R(t)).links[e]??null}a(W,"getLink");async function g(){let t=b$1();try{let e$1=await readFile(t,"utf-8"),r=JSON.parse(e$1);return e(r)?r:(b.warn("Invalid consumers registry, using empty registry"),{})}catch(e){return s(e)&&e.code!=="ENOENT"&&b.warn(`Failed to read consumers registry: ${e instanceof Error?e.message:String(e)}`),{}}}a(g,"readConsumersRegistry");async function C(t){let e=b$1();await z(dirname(b$1())),await B$1(e,JSON.stringify(t,null,2));}a(C,"writeConsumersRegistry");async function q(t,e){let r=b$1();await a$1(r,async()=>{let s=await g();s[t]||(s[t]=[]);let i=m(e);s[t].includes(i)||s[t].push(i),await C(s);});}a(q,"registerConsumer");async function A(t,e){let r=b$1();await a$1(r,async()=>{let s=await g();if(!s[t])return;let i=m(e);s[t]=s[t].filter(c=>c!==i),s[t].length===0&&delete s[t],await C(s);});}a(A,"unregisterConsumer");async function B(t){return (await g())[t]??[]}a(B,"getConsumers");async function G(){let t=b$1(),e=0,r=0;return await a$1(t,async()=>{let s=await g(),i={};for(let[c,P]of Object.entries(s)){let d=(await Promise.all(P.map(async a=>({consumerPath:a,valid:await A$1(a)})))).filter(a=>a.valid).map(a=>a.consumerPath);e+=P.length-d.length,d.length>0?i[c]=d:r++;}await C(i);}),{removedConsumers:e,removedPackages:r}}a(G,"cleanStaleConsumers");export{R as a,p as b,L as c,T as d,M as e,W as f,g,q as h,A as i,B as j,G as k};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {b as b$1,a as a$2}from'./chunk-SYADAYF4.mjs';import {b as b$2}from'./chunk-QDQKKMAV.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {d}from'./chunk-AS4SJVLT.mjs';import {d as d$1}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
async function v(g,l={}){let $=new a$1,n=await d(g);if(n.packages.length===0){b.warn("No workspace packages found");return}let o;try{o=b$1(n.adjacency);}catch(r){if(r instanceof a$2){b.error(`Cannot push: ${r.message}`);return}throw r}let w=new Map(n.packages.map(r=>[r.name,r.dir]));b.info(`Pushing ${o.length} packages in dependency order`),d$1(`[batch-push] Order: ${o.join(" \u2192 ")}`);let a=0,t=0;for(let r of o){let i=w.get(r);if(i)try{await b$2(i,l),a++;}catch(s){b.warn(`Failed to push ${r}: ${s instanceof Error?s.message:String(s)}`),t++;}}b.success(`Pushed ${a}/${o.length} packages in ${$.elapsed()}${t>0?` (${t} failed)`:""}`);}a(v,"doPushAll");export{v as a};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$2}from'./chunk-XVWUDOVN.mjs';import {b as b$1}from'./chunk-SSCTJUNB.mjs';import {a as a$5}from'./chunk-72AD4PZH.mjs';import {a as a$3}from'./chunk-HPF6K6WO.mjs';import {a as a$7}from'./chunk-7JG555TZ.mjs';import {a as a$6}from'./chunk-EPNDXIQH.mjs';import {a as a$1}from'./chunk-MBKCCWSD.mjs';import {a as a$4}from'./chunk-OJJZ7CLB.mjs';import {j,f,d as d$1}from'./chunk-KJPN6E7W.mjs';import {o}from'./chunk-SXO3YBPY.mjs';import {d}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile}from'fs/promises';import {join}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
async function L(n){try{let o=await readFile(join(n,"package.json"),"utf-8"),r=JSON.parse(o);if(!r.plunk||typeof r.plunk!="object")return {};let t={},e=r.plunk;return typeof e.buildCmd=="string"&&(t.buildCmd=e.buildCmd),Array.isArray(e.watchPatterns)&&(t.watchPatterns=e.watchPatterns.filter(i=>typeof i=="string")),typeof e.debounce=="number"&&Number.isFinite(e.debounce)&&(t.debounce=e.debounce),typeof e.cooldown=="number"&&Number.isFinite(e.cooldown)&&(t.cooldown=e.cooldown),typeof e.historyLimit=="number"&&Number.isFinite(e.historyLimit)&&(t.historyLimit=Math.max(0,Math.floor(e.historyLimit))),typeof e.notify=="boolean"&&(t.notify=e.notify),d(`[config] Loaded plunk config from package.json: ${JSON.stringify(t)}`),t}catch{return {}}}a(L,"loadPlunkConfig");var J=o(4);async function nt(n,o={}){let r=new a$1,t=await a$2(n,{runScripts:o.runScripts,force:o.force,historyLimit:o.historyLimit});if(t.skipped){b.info("No changes to push");return}let e=await b$1(t.name,t.version);if(!e){a$3(`Failed to read store entry for ${t.name}@${t.version} after publish`);return}let i=await j(t.name);if(i.length===0){b.success(`Published ${t.name}@${t.version} to store`),b.info("No consumers registered yet. Run 'plunk add "+t.name+"' in a consumer project to start receiving pushes."),a$4({name:t.name,version:t.version,buildId:t.buildId,consumers:0,failedConsumers:0,copied:0,skipped:0,elapsed:r.elapsedMs()});return}let c=0,l=0,s=0,p=0,b$2=await Promise.all(i.map(d$2=>J(async()=>{let g=await f(d$2,t.name);if(!g)return d(`[push] No link found for ${t.name} in ${d$2}, skipping`),null;try{let f=await a$5(e,d$2,g.packageManager,{force:o.force});return await d$1(d$2,t.name,{...g,contentHash:e.meta.contentHash,linkedAt:new Date().toISOString(),buildId:e.meta.buildId??""}),f}catch(f){return b.warn(`Failed to push to ${d$2}: ${f instanceof Error?f.message:String(f)}`),null}})));for(let d of b$2)d?(c+=d.copied,l+=d.skipped,s++):p++;let M=t.buildId?` [${t.buildId}]`:"";b.success(`Pushed ${t.name}@${t.version}${M} to ${s} consumer(s) in ${r.elapsed()} (${c} files changed, ${l} unchanged)`),a$4({name:t.name,version:t.version,buildId:t.buildId,consumers:s,failedConsumers:p,copied:c,skipped:l,elapsed:r.elapsedMs()});}a(nt,"doPush");function W(n){if(!n)return;let o=parseInt(n,10);return Number.isFinite(o)?o:void 0}a(W,"parseMs");async function rt(n,o,r){let{startWatcher:t}=await import('./watcher-MH45TB3S.mjs'),e=await L(n),{buildCmd:i,patterns:c}=await E(n,o,e),l=o.notify??e.notify??false,s=await t(n,{patterns:c,buildCmd:i,debounce:W(o.debounce)??e.debounce,cooldown:W(o.cooldown)??e.cooldown,notify:l},r);await new Promise(p=>{let b$1=a(async()=>{b.info("Stopping watcher..."),await s.close(),p();},"cleanup");process.once("SIGINT",b$1),process.once("SIGTERM",b$1);});}a(rt,"startWatchMode");async function E(n,o,r){let t=o.build,e=r?.watchPatterns;if(!o.build){if(!o["skip-build"])if(r?.buildCmd)t=r.buildCmd,b.info(`Using build command from config: ${t}`);else {let i=await a$6(n),c=await a$7(n,i);c&&(t=c,b.info(`Auto-detected build command: ${c}`));}}if(t){let{exists:i}=await import('./fs-J2TUM3EM.mjs'),c=["src","lib","source","app","pages","components"],l=(await Promise.all(c.map(async s=>({dir:s,exists:await i(join(n,s))})))).filter(s=>s.exists).map(s=>s.dir);e=l.length>0?l:["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 i=JSON.parse(await readFile(join(n,"package.json"),"utf-8"));i.files&&i.files.length>0?(e=i.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(i){d(`[watch] Could not read package.json: ${i instanceof Error?i.message:String(i)}`);}}return {buildCmd:t,patterns:e}}a(E,"resolveWatchConfig");async function st(n,o,r){let t=!o["no-cascade"],{WatchOrchestrator:e}=await import('./watch-orchestrator-6X33Y6OT.mjs');await new e(t).start(n,o,r);}a(st,"startMultiWatchMode");export{L as a,nt as b,rt as c,E as d,st as e};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {d}from'./chunk-R3RSOZXN.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {readFile,stat}from'fs/promises';import {join,resolve}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
async function S(s){let t=[],n;try{n=await readFile(join(s,"package.json"),"utf-8");}catch{return t.push({code:"NO_PACKAGE_JSON",severity:"error",message:"No package.json found"}),t}let e;try{e=JSON.parse(n);}catch{return t.push({code:"INVALID_PACKAGE_JSON",severity:"error",message:"package.json is not valid JSON"}),t}let i=e.files;if((!i||i.length===0)&&t.push({code:"EMPTY_FILES",severity:"warn",message:'No "files" field in package.json \u2014 npm will include almost everything. Consider adding a "files" field to control what gets published.'}),typeof e.main=="string"&&await r(s,e.main,"main",t),typeof e.module=="string"&&await r(s,e.module,"module",t),typeof e.types=="string"?await r(s,e.types,"types",t):typeof e.typings=="string"&&await r(s,e.typings,"typings",t),typeof e.exports=="string"?await r(s,e.exports,"exports",t):e.exports&&typeof e.exports=="object"&&await P(s,e.exports,t),typeof e.bin=="string")await r(s,e.bin,"bin",t);else if(e.bin&&typeof e.bin=="object")for(let[f,c]of Object.entries(e.bin))typeof c=="string"&&await r(s,c,`bin.${f}`,t);return d(`[preflight] ${t.length} issue(s) found in ${s}`),t}a(S,"runPreflightChecks");async function l(s){try{return (await stat(s)).isFile()}catch{return false}}a(l,"fileExists");async function r(s,t,n,e){let i=resolve(s,t);await l(i)||e.push({code:"MISSING_PATH",severity:"warn",message:`"${n}" points to "${t}" which does not exist`});}a(r,"checkPath");async function P(s,t,n){for(let[e,i]of Object.entries(t))if(typeof i=="string"){if(i.startsWith(".")){let f=resolve(s,i);await l(f)||n.push({code:"EXPORTS_PATH_MISSING",severity:"warn",message:`exports["${e}"] points to "${i}" which does not exist`});}}else i&&typeof i=="object"&&await h(s,e,i,n);}a(P,"checkExports");async function h(s,t,n,e){let i=Object.keys(n),f=i.indexOf("types"),c=i.indexOf("import"),g=i.indexOf("require"),y=i.indexOf("default");if(f!==-1){let d=Math.min(c===-1?1/0:c,g===-1?1/0:g,y===-1?1/0:y);f>d&&d!==1/0&&e.push({code:"TYPES_CONDITION_ORDER",severity:"warn",message:`exports["${t}"].types should come before import/require/default for TypeScript to resolve it correctly`});}for(let[d,o]of Object.entries(n))if(typeof o=="string"&&o.startsWith(".")){let m=resolve(s,o);await l(m)||e.push({code:"EXPORTS_PATH_MISSING",severity:"warn",message:`exports["${t}"].${d} points to "${o}" which does not exist`});}else o&&typeof o=="object"&&await h(s,t,o,e);}a(h,"checkExportsConditions");export{S as a};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {b}from'./chunk-U376XMQP.mjs';import {g,s,f,A as A$1,a as a$1,c,d,x,e}from'./chunk-SXO3YBPY.mjs';import {b as b$1}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$1=g(t,r);try{let a=await readFile(s$1,"utf-8"),e=JSON.parse(a);return b(e)?e:(b$1.warn(`Invalid metadata for ${t}@${r}, ignoring`),null)}catch(a){return s(a)&&a.code!=="ENOENT"&&b$1.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 A$1(s)?null:{name:t,version:r,packageDir:s,meta:a}}a(A,"getStoreEntry");async function J(t){let r=a$1();if(!await A$1(r))return null;let s=c(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 A$1(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 x(e(t,r));}a(q,"removeStoreEntry");export{y as a,A as b,J as c,W as d,q as e};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {d,c,b as b$1}from'./chunk-R3RSOZXN.mjs';import {b}from'./chunk-ICCM7US5.mjs';import {a}from'./chunk-2VCW5RWI.mjs';import {stat,readFile,mkdir,copyFile,constants,readdir,utimes,rm,rename,cp,writeFile}from'fs/promises';import {join,relative,parse,dirname}from'path';import {availableParallelism,homedir}from'os';import {createHash}from'crypto';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
function $(t){let e=0,n=[],i=0,o=a(()=>{i<n.length&&e<t&&(e++,n[i++]()),i>0&&i===n.length&&(n.length=0,i=0);},"next");return l=>new Promise((u,f)=>{let y=a(()=>{l().then(a=>{e--,u(a),o();},a=>{e--,f(a),o();});},"run");e<t?(e++,y()):n.push(y);})}a($,"pLimit");function B(){return process.env.PLUNK_HOME||join(homedir(),".plunk")}a(B,"getPlunkHome");function et(){return join(B(),"store")}a(et,"getStorePath");function vt(){return join(B(),"consumers.json")}a(vt,"getConsumersPath");function W(t){return t.replace(/\//g,"+")}a(W,"encodePackageName");function kt(t){if(t.startsWith("@")){let e=t.indexOf("+");if(e!==-1)return t.slice(0,e)+"/"+t.slice(e+1)}return t}a(kt,"decodePackageName");function I(t,e){return join(et(),`${W(t)}@${e}`)}a(I,"getStoreEntryPath");function $t(t,e){return join(I(t,e),"package")}a($t,"getStorePackagePath");function Mt(t,e){return join(I(t,e),".plunk-meta.json")}a(Mt,"getStoreMetaPath");function rt(t,e){return join(I(t,e),"history")}a(rt,"getStoreHistoryPath");function Ct(t,e,n){return join(rt(t,e),n)}a(Ct,"getHistoryEntryPath");function bt(t){return join(t,".plunk")}a(bt,"getConsumerPlunkDir");function Et(t){return join(t,".plunk","state.json")}a(Et,"getConsumerStatePath");function Rt(t,e){return join(t,".plunk","backups",W(e))}a(Rt,"getConsumerBackupPath");function R(t){return t.replace(/\\/g,"/")}a(R,"normalizePath");function St(t,e){return join(t,"node_modules",e)}a(St,"getNodeModulesPackagePath");var S=null;function ot(){return S||(S=import('./xxhash-wasm-DTW44IIQ.mjs').then(t=>t.default()).catch(t=>{throw S=null,t})),S}a(ot,"getXXHash");var st=1024*1024,at=$(Math.max(availableParallelism(),8)),z=new Map;async function Dt(t,e){let n=[...t].sort((a,g)=>{let d=R(relative(e,a)),h=R(relative(e,g));return d.localeCompare(h)}),i=new Set(n),o=0,l=await Promise.all(n.map(a=>at(async()=>{let g=R(relative(e,a)),d=await stat(a),h=z.get(a);if(h&&h.mtimeMs===d.mtimeMs&&h.size===d.size)return o++,{rel:g,content:h.content};let s=await readFile(a);return z.set(a,{mtimeMs:d.mtimeMs,size:d.size,content:s}),{rel:g,content:s}})));for(let a of z.keys())i.has(a)||z.delete(a);d(`[hash] Computing content hash for ${t.length} files (${o} cached)`);let u=createHash("sha256"),f=Buffer.alloc(4);for(let{rel:a,content:g}of l)u.update(a),u.update("\0"),f.writeUInt32LE(g.length),u.update(f),u.update(g);let y="sha256v2:"+u.digest("hex");return d(`[hash] Result: ${y.slice(0,20)}...`),y}a(Dt,"computeContentHash");async function O(t,e){let n=e??(await stat(t)).size,i=await ot();if(n>st)return ct(t,i);let o=await readFile(t);return i.h64Raw(o).toString(16)}a(O,"hashFile");async function ct(t,e){let{createReadStream:n}=await import('fs'),i=e.create64();return new Promise((o,l)=>{let u=n(t);u.on("data",f=>i.update(f)),u.on("end",()=>o(i.digest().toString(16))),u.on("error",l);})}a(ct,"hashFileStream");var M=[];function P(t){M.push(t);}a(P,"recordMutation");function Wt(){if(M.length===0){b.info("[dry-run] No mutations would be performed");return}if(c()){console.log(JSON.stringify({dryRun:true,mutations:M},null,2));return}let t=new Map;for(let n of M){let i=t.get(n.type);i||(i=[],t.set(n.type,i)),i.push(n);}b.info(`
|
|
4
|
+
[dry-run] ${M.length} mutation(s) would be performed:
|
|
5
|
+
`);let e={copy:"Copy",remove:"Remove",move:"Move",mkdir:"Create directory",write:"Write file","bin-link":"Create bin link","bin-unlink":"Remove bin link","cache-invalidate":"Invalidate cache","lock-skip":"Skip lock","lifecycle-skip":"Skip lifecycle hook"};for(let[n,i]of t){b.info(` ${e[n]} (${i.length}):`);for(let o of i.slice(0,20)){let l=o.dest?` \u2192 ${o.dest}`:"",u=o.detail?` (${o.detail})`:"";b.info(` ${o.path}${l}${u}`);}i.length>20&&b.info(` ... and ${i.length-20} more`);}}a(Wt,"printDryRunReport");var q=$(Math.max(availableParallelism(),8));function X(t){return t instanceof Error&&"code"in t}a(X,"isNodeError");var L=new Map;function ht(t){let{root:e}=parse(t);return e||"/"}a(ht,"volumeRoot");async function yt(t,e,n){if(b$1()){d(`[dry-run] would copy ${t} \u2192 ${e}`),P({type:"copy",path:t,dest:e});return}n?.ensureParent!==false&&await mkdir(dirname(e),{recursive:true});let i=ht(e),o=L.get(i);if(o===false){await copyFile(t,e);return}if(o===true){await copyFile(t,e,constants.COPYFILE_FICLONE);return}try{await copyFile(t,e,constants.COPYFILE_FICLONE_FORCE),L.set(i,!0);}catch{L.set(i,false),d(`[copy] reflink not supported on ${i}, using plain copy`),await copyFile(t,e);}}a(yt,"copyWithCoW");async function D(t){return (await readdir(t,{recursive:true,withFileTypes:true})).filter(n=>n.isFile()).map(n=>join(n.parentPath,n.name))}a(D,"collectFiles");async function ee(t,e,n={}){let i=D(t),o=D(e).catch(s=>{if(X(s)&&s.code==="ENOENT")return [];throw s}),[l,u]=await Promise.all([i,o]),f=0,y=0,a=0,g=await Promise.all(l.map(s=>q(async()=>{let x=relative(t,s),b=join(e,x),F=true,k=null;if(n.force)d(`[copy] ${x} (forced)`);else try{let[m,E]=await Promise.all([stat(s),stat(b)]);if(k={atime:m.atime,mtime:m.mtime},m.size!==E.size)d(`[copy] ${x} (size differs: ${m.size} vs ${E.size})`);else if(m.mtimeMs===E.mtimeMs)F=!1,d(`[skip] ${x} (size+mtime match)`);else {let[Q,Z]=await Promise.all([O(s,m.size),O(b,E.size)]);Q===Z?(F=!1,d(`[skip] ${x} (unchanged)`)):d(`[copy] ${x} (hash differs)`);}}catch(m){if(X(m)&&m.code==="ENOENT")d(`[copy] ${x} (new file)`);else throw m}if(F){if(await yt(s,b),!k){let m=await stat(s);k={atime:m.atime,mtime:m.mtime};}return await utimes(b,k.atime,k.mtime),"copied"}return "skipped"})));for(let s of g)s==="copied"?f++:a++;let d$1=new Set(l.map(s=>relative(t,s))),h=u.filter(s=>!d$1.has(relative(e,s)));return await Promise.all(h.map(s=>q(async()=>{d(`[remove] ${relative(e,s)} (no longer in source)`),b$1()?P({type:"remove",path:s}):await rm(s);}))),y=h.length,{copied:f,removed:y,skipped:a}}a(ee,"incrementalCopy");async function re(t,e){if(b$1()){d(`[dry-run] would move ${t} \u2192 ${e}`),P({type:"move",path:t,dest:e});return}try{await rename(t,e);}catch(n){if(X(n)&&n.code==="EXDEV")await cp(t,e,{recursive:true}),await rm(t,{recursive:true,force:true});else throw n}}a(re,"moveDir");async function ne(t){if(b$1()){d(`[dry-run] would remove ${t}`),P({type:"remove",path:t});return}await rm(t,{recursive:true,force:true});}a(ne,"removeDir");async function ie(t){if(b$1()){d(`[dry-run] would ensure dir ${t}`),P({type:"mkdir",path:t});return}await mkdir(t,{recursive:true});}a(ie,"ensureDir");async function oe(t){if(b$1()){d(`[dry-run] would ensure private dir ${t}`),P({type:"mkdir",path:t});return}await mkdir(t,{recursive:true,mode:448});}a(oe,"ensurePrivateDir");async function se(t){try{return await stat(t),!0}catch{return false}}a(se,"exists");async function ae(t,e){if(b$1()){d(`[dry-run] would write ${t}`),P({type:"write",path:t});return}let n=t+`.tmp-${process.pid}-${Date.now()}`;await writeFile(n,e),await rename(n,t);}a(ae,"atomicWriteFile");async function ce(t){try{let e=await D(t);return (await Promise.all(e.map(i=>stat(i).then(o=>o.size).catch(()=>0)))).reduce((i,o)=>i+o,0)}catch{return 0}}a(ce,"dirSize");async function ue(t,e){await cp(t,e,{recursive:true});}a(ue,"copyDir");export{se as A,ae as B,ce as C,ue as D,et as a,vt as b,W as c,kt as d,I as e,$t as f,Mt as g,rt as h,Ct as i,bt as j,Et as k,Rt as l,R as m,St as n,$ as o,Dt as p,P as q,Wt as r,X as s,yt as t,D as u,ee as v,re as w,ne as x,ie as y,oe as z};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a}from'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var d=class extends Error{static{a(this,"CycleError");}cycle;constructor(t){super(`Dependency cycle detected: ${t.join(" \u2192 ")}`),this.name="CycleError",this.cycle=t;}};function u(s){let t=new Map,i=new Map;for(let e of s.keys())t.has(e)||t.set(e,0),i.has(e)||i.set(e,[]);for(let[e,n]of s)for(let o of n){if(!s.has(o))continue;t.set(e,(t.get(e)??0)+1);let g=i.get(o);g?g.push(e):i.set(o,[e]);}let r=[];for(let[e,n]of t)n===0&&r.push(e);let c=[];for(;r.length>0;){let e=r.shift();c.push(e);for(let n of i.get(e)??[]){let o=(t.get(n)??1)-1;t.set(n,o),o===0&&r.push(n);}}if(c.length!==s.size){let e=[...s.keys()].filter(n=>!c.includes(n));throw new d(e)}return c}a(u,"topoSort");export{d as a,u as b};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {q,s}from'./chunk-SXO3YBPY.mjs';import {b}from'./chunk-R3RSOZXN.mjs';import {b as b$1}from'./chunk-ICCM7US5.mjs';import {a as a$1}from'./chunk-2VCW5RWI.mjs';import {mkdir,stat,rm,readFile}from'fs/promises';import {dirname,join}from'path';import {setTimeout}from'timers/promises';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var a={retries:5,minTimeout:100,maxTimeout:1e3,factor:2,stale:3e4};async function C(e,t,n){if(b())return q({type:"lock-skip",path:e}),t();await mkdir(dirname(e),{recursive:true});let r=e+".lk",u=n?.stale??a.stale,s$1=false;for(let i=0;i<=a.retries;i++)try{await mkdir(r),s$1=!0;break}catch(c){if(s(c)&&c.code==="EEXIST"){try{let f=await stat(r);if(Date.now()-f.mtimeMs>u){await rm(r,{recursive:!0,force:!0});continue}}catch{continue}if(i<a.retries){let f=Math.min(a.minTimeout*a.factor**i,a.maxTimeout);await setTimeout(f);}}else throw c}if(!s$1)throw new Error(`Failed to acquire lock after ${a.retries} attempts. Another plunk process may be running. If this persists, delete ${r} and retry.`);try{return await t()}finally{await rm(r,{recursive:true,force:true});}}a$1(C,"withFileLock");function $(e){if(typeof e!="object"||e===null)return false;let t=e;return typeof t.contentHash=="string"&&typeof t.publishedAt=="string"&&typeof t.sourcePath=="string"&&(t.buildId===void 0||typeof t.buildId=="string")&&(t.schemaVersion===void 0||typeof t.schemaVersion=="number")}a$1($,"isPlunkMeta");function M(e){if(typeof e!="object"||e===null)return false;let t=e;return typeof t.version=="string"&&typeof t.contentHash=="string"&&typeof t.linkedAt=="string"&&typeof t.sourcePath=="string"&&typeof t.backupExists=="boolean"&&typeof t.packageManager=="string"&&["npm","pnpm","yarn","bun"].includes(t.packageManager)&&(t.buildId===void 0||typeof t.buildId=="string")}a$1(M,"isLinkEntry");function F(e){if(typeof e!="object"||e===null)return false;let t=e;if(t.version!=="1"||typeof t.links!="object"||t.links===null)return false;let n=t.links;for(let r of Object.values(n))if(!M(r))return false;return true}a$1(F,"isConsumerState");async function O(e,t,n){try{let r=await readFile(join(e,"package.json"),"utf-8"),u=JSON.parse(r),s=u.dependencies?.[t]??u.devDependencies?.[t]??u.peerDependencies?.[t];if(!s||/^(workspace:|catalog:|\*)/.test(s))return;let i=s.match(/(\d+)\.\d+\.\d+/);if(!i)return;let c=parseInt(i[1],10),f=parseInt(n.split(".")[0],10);c!==f&&b$1.warn(`Version mismatch: store has ${t}@${n} but your package.json declares "${s}". Consider updating your dependency range.`);}catch{}}a$1(O,"warnVersionMismatch");function V(e){if(typeof e!="object"||e===null)return false;let t=e;for(let n of Object.values(t)){if(!Array.isArray(n))return false;for(let r of n)if(typeof r!="string")return false}return true}a$1(V,"isConsumersRegistry");export{C as a,$ as b,F as c,O as d,V as e};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {c as c$1,a as a$2}from'./chunk-KJPN6E7W.mjs';import {j,k,A,y as y$1}from'./chunk-SXO3YBPY.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(s=>s.trim()===".plunk/"||s.trim()===".plunk"||s.trim()==="/.plunk/"||s.trim()==="/.plunk"))return false;let o=n.length>0&&!n.endsWith(`
|
|
5
|
+
`)?`
|
|
6
|
+
`:"",i=n.length>0?`
|
|
7
|
+
# plunk local links
|
|
8
|
+
.plunk/
|
|
9
|
+
`:`# plunk local links
|
|
10
|
+
.plunk/
|
|
11
|
+
`;return await writeFile(t,n+o+i),true}a$1(x,"ensureGitignore");async function S(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 a=n.match(/^(\s+)"/m)?.[1]||" ";return await writeFile(t,JSON.stringify(e,null,a)+`
|
|
12
|
+
`),true}a$1(S,"addPostinstall");async function v(t){let n;try{n=await readFile(t,"utf-8");}catch{return false}let e=JSON.parse(n);if(!e.scripts?.postinstall?.includes("plunk"))return false;delete e.scripts.postinstall,Object.keys(e.scripts).length===0&&delete e.scripts;let a=n.match(/^(\s+)"/m)?.[1]||" ";return await writeFile(t,JSON.stringify(e,null,a)+`
|
|
13
|
+
`),true}a$1(v,"removePostinstall");async function I(t,n){let e=j(t),a=k(t);if(!await A(a))await y$1(e),await c$1(t,{version:"1",packageManager:n,role:"consumer",links:{}});else {let s=await a$2(t);s.packageManager||(s.packageManager=n,s.role=s.role??"consumer",await c$1(t,s));}let o=join(t,".gitignore");await x(o);let i=join(t,"package.json");await A(i)&&await S(i);}a$1(I,"ensureConsumerInit");export{x as a,S as b,v as c,I as d};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$2}from'./chunk-SSCTJUNB.mjs';import {a as a$3}from'./chunk-U376XMQP.mjs';import {a}from'./chunk-HW7AEGI3.mjs';import {o,m,s,p,e,z,y,t,A,w,x,q}from'./chunk-SXO3YBPY.mjs';import {d,b as b$1}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 Y(s$1,n){let i=[],t=resolve(s$1);i.push(join(t,"package.json"));let e=await Z(t,t),r=e.map(a=>m(relative(t,a)));if(n.files&&n.files.length>0)for(let a of n.files){let o=join(t,a),u=resolve(o);if(!u.startsWith(t+sep)&&u!==t){b.warn(`files pattern "${a}" escapes package directory, skipping`);continue}let c=false;try{if((await stat(o)).isDirectory()){let b=m(relative(t,o))+"/";for(let f=0;f<r.length;f++)r[f].startsWith(b)&&i.push(e[f]);c=!0;}else i.push(o),c=!0;}catch(d){if(s(d)&&d.code!=="ENOENT")throw d}if(!c){let d=(0, P.default)(a,{dot:true}),b$1=0;for(let f=0;f<r.length;f++)if(d(r[f])){let E=resolve(e[f]);if(!E.startsWith(t+sep)&&E!==t)continue;i.push(e[f]),b$1++;}b$1===0&&b.warn(`files pattern "${a}" matched no files`);}}else {let a=await pe(t);for(let o=0;o<r.length;o++)ue(r[o],a)||i.push(e[o]);}let p=new Set(i),l=new Set(e);for(let a of ["README.md","README","LICENSE","LICENCE","CHANGELOG.md"]){let o=join(t,a);p.has(o)||l.has(o)&&(i.push(o),p.add(o));}return [...p]}a$1(Y,"resolvePackFiles");var fe=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 ue(s,n){for(let t of n.negations)if(t(s))return false;let i=s.split(/[\\/]/);for(let t of i)if(fe.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(ue,"shouldIgnore");async function pe(s$1){let n={literals:new Set,patterns:[],negations:[]};try{let i=await readFile(join(s$1,".npmignore"),"utf-8");for(let t of i.split(`
|
|
4
|
+
`)){let e=t.trim();if(!(!e||e.startsWith("#")))if(e.startsWith("!")){let r=e.slice(1);X(r)?n.negations.push((0,P.default)(r,{dot:!0})):n.negations.push((0,P.default)(r,{dot:!0}));}else X(e)?n.patterns.push((0,P.default)(e,{dot:!0})):n.literals.add(e.replace(/\/$/,""));}}catch(i){if(s(i)&&i.code!=="ENOENT")throw i}return n}a$1(pe,"loadNpmIgnore");function X(s){return /[*?[\]{}()]/.test(s)}a$1(X,"hasGlobChars");async function Z(s$1,n){let i=[];try{let t=await readdir(s$1,{withFileTypes:!0});for(let e of t){let r=join(s$1,e.name);if(e.isDirectory()){if(e.name===".git"||s$1===n&&e.name==="node_modules"||e.isSymbolicLink())continue;i.push(...await Z(r,n));}else e.isSymbolicLink()||i.push(r);}}catch(t){if(s(t)&&t.code==="ENOENT")return [];throw t}return i}a$1(Z,"collectAllFiles");var be=o(Math.max(availableParallelism(),8));async function Xe(s,n={}){let i=join(s,"package.json"),t$1;try{t$1=await readFile(i,"utf-8");}catch{throw new Error(`No package.json found in ${s}`)}let e$1=JSON.parse(t$1);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,e$1,"preplunk"),n.runScripts!==false&&await $(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(c){throw c instanceof Error&&"code"in c&&c.code==="ENOENT"?new Error(`publishConfig.directory "${e$1.publishConfig.directory}" does not exist`):c}d(`[publish] Using publishConfig.directory: ${r}`);}let p$1=r!==s?JSON.parse(await readFile(join(r,"package.json"),"utf-8").catch(()=>JSON.stringify(e$1))):e$1,l=await Y(r,p$1);if(l.length===0)throw new Error("No publishable files found");d(`[publish] Resolved ${l.length} files for ${e$1.name}@${e$1.version}`);let a=await p(l,r);if(await Ce(e$1,s),await Se(e$1,s),!n.force){let c=await a$2(e$1.name,e$1.version);if(c&&c.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:l.length,skipped:true,contentHash:a,buildId:c.buildId??""}}let o=e(e$1.name,e$1.version),u=await a$3(o+".lock",async()=>{if(!n.force){let f=await a$2(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:l.length,skipped:true,contentHash:a,buildId:f.buildId??""}}let c=o+`.tmp-${process.pid}-${Date.now()}`,d$1=join(c,"package"),b$1=a.slice(9,17);try{await z(d$1);let f=ke(e$1);f=Pe(f),d("[publish] Copying files to temp store...");let E=new Set(l.map(g=>dirname(join(d$1,relative(r,g)))));await Promise.all([...E].map(g=>y(g))),await Promise.all(l.map(g=>be(async()=>{let D=relative(r,g),F=join(d$1,D);D==="package.json"&&f!==e$1?await writeFile(F,JSON.stringify(f,null,2)):await t(g,F,{ensureParent:!1});}))),r!==s&&await writeFile(join(d$1,"package.json"),JSON.stringify(f,null,2));let ie={schemaVersion:1,contentHash:a,publishedAt:new Date().toISOString(),sourcePath:s,buildId:b$1};await writeFile(join(c,".plunk-meta.json"),JSON.stringify(ie,null,2));let _=await A(o),O=o+".old-"+Date.now();if(_&&await rename(o,O),await w(c,o),_){try{let{captureHistory:g}=await import('./history-UND5QZKN.mjs');await g(e$1.name,e$1.version,O,n.historyLimit);}catch(g){d(`[publish] History capture failed: ${g instanceof Error?g.message:String(g)}`);}await x(O);}d(`[publish] Stored at ${o}`);}catch(f){throw await x(c),f}return {name:e$1.name,version:e$1.version,fileCount:l.length,skipped:false,contentHash:a,buildId:b$1}},{stale:6e4});return u.skipped||(n.runScripts!==false&&await $(s,e$1,"postpack"),await $(s,e$1,"postplunk"),b.success(`Published ${e$1.name}@${e$1.version} (${l.length} files) [${u.buildId}]`)),u}a$1(Xe,"publish");var te=parseInt(process.env.PLUNK_HOOK_TIMEOUT??"30000",10);async function $(s,n,i){let t=n.scripts?.[i];if(t){if(b$1()){q({type:"lifecycle-skip",path:s,detail:`${i}: ${t}`});return}return d(`[lifecycle] Running ${i}: ${t}`),new Promise((e,r)=>{let p=platform()==="win32",o=spawn(p?"cmd":"sh",[p?"/c":"-c",t],{cwd:s,stdio:"inherit"}),u=setTimeout(()=>{o.kill("SIGTERM"),r(new Error(`${i} script timed out after ${te/1e3}s. Increase PLUNK_HOOK_TIMEOUT env var if the script needs more time.`));},te);o.on("close",c=>{clearTimeout(u),c===0?e():r(new Error(`${i} script failed with exit code ${c}`));}),o.on("error",c=>{clearTimeout(u),r(new Error(`${i} script error: ${c.message}`));});})}}a$1($,"runLifecycleHook");var ve=["main","module","exports","types","typings","browser","bin"];function Pe(s){if(!s.publishConfig)return s;let n={...s};for(let i of ve)i in s.publishConfig&&(n[i]=s.publishConfig[i]);return delete n.publishConfig,n}a$1(Pe,"applyPublishConfig");function ke(s){let n=false,i={...s},t=null,e=false;for(let r of ["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let p=s[r];if(!p)continue;let l=false,a={...p};for(let[o,u]of Object.entries(p))if(u.startsWith("workspace:")){let c=u.slice(10);if(c==="*"||c==="^"||c==="~"){let d=S?.versions.get(o)??s.version;a[o]=c==="*"?d:c+d;}else a[o]=c;l=true,n=true;}else if(u.startsWith("catalog:"))if(e||(t=$e(),e=true),t){let c=Ee(u,o,t);c?(a[o]=c,l=true,n=true):b.warn(`catalog: specifier for "${o}" 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 "${o}"`);l&&(i[r]=a);}return n?i:s}a$1(ke,"rewriteProtocolVersions");function Ee(s,n,i){let t=s.slice(8);return t===""||t==="default"?i.default[n]??null:i.named[t]?.[n]??null}a$1(Ee,"resolveCatalogVersion");var R=null;async function ne(s){if(R?.dir===s)return R.root;let{findWorkspaceRoot:n}=await import('./workspace-V5YKJN5V.mjs'),i=await n(s);return R={dir:s,root:i},i}a$1(ne,"getWorkspaceRoot");var S=null;async function Ce(s,n){if(!["dependencies","devDependencies","peerDependencies","optionalDependencies"].some(l=>{let a=s[l];return a&&Object.values(a).some(o=>o.startsWith("workspace:"))}))return;let t=await ne(n);if(!t){S=null;return}if(S?.root===t)return;let{findWorkspacePackages:e}=await import('./workspace-V5YKJN5V.mjs'),r=await e(t),p=new Map;await Promise.all(r.map(async l=>{try{let a=JSON.parse(await readFile(join(l,"package.json"),"utf-8"));a.name&&a.version&&p.set(a.name,a.version);}catch{}})),S={root:t,versions:p};}a$1(Ce,"preloadWorkspaceVersions");var k=null;function $e(){return k?.catalogs??null}a$1($e,"loadCatalogsFromCache");async function Se(s,n){if(!["dependencies","devDependencies","peerDependencies","optionalDependencies"].some(a=>{let o=s[a];return o&&Object.values(o).some(u=>u.startsWith("catalog:"))}))return;let t=await ne(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-V5YKJN5V.mjs'),l=await p(t);k={root:t,mtimeMs:r,catalogs:l};}a$1(Se,"preloadCatalogs");export{Xe as a};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$2}from'./chunk-2GDRDQA5.mjs';import {d as d$1,e}from'./chunk-SSCTJUNB.mjs';import {a}from'./chunk-MBKCCWSD.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {k,g,b as b$2}from'./chunk-KJPN6E7W.mjs';import'./chunk-U376XMQP.mjs';import {m,a as a$1,A,C,x,r}from'./chunk-SXO3YBPY.mjs';import {d,b as b$3}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 ne={meta:{name:"clean",description:"Remove unreferenced store entries and stale consumer registrations"},args:{yes:{type:"boolean",alias:"y",description:"Skip confirmation prompts",default:false}},async run({args:A$1}){b();let y=new a;b$1.start("Checking consumer registrations...");let{removedConsumers:l,removedPackages:v}=await k();l>0&&b$1.success(`Removed ${l} stale consumer registration(s) across ${v} package(s)`);let $=await g(),f=new Set,F=[...new Set(Object.values($).flat())],w=await Promise.all(F.map(async e=>{let{state:t,reliable:o}=await b$2(e);return {path:e,state:t,reliable:o}}));for(let{state:e,reliable:t}of w)if(t)for(let[o,g]of Object.entries(e.links))f.add(`${o}@${g.version}`);let d$2=new Set,u=w.filter(e=>!e.reliable);if(u.length>0){b$1.warn(`${u.length} consumer(s) have corrupt state \u2014 their store entries will be preserved`);let e=new Set(u.map(t=>m(t.path)));for(let[t,o]of Object.entries($))o.some(g=>e.has(g))&&d$2.add(t);d(`[clean] Protected packages (corrupt state): ${[...d$2].join(", ")}`);}d(`[clean] Referenced entries: ${[...f].join(", ")||"(none)"}`);let H=await d$1(),s=[];for(let e of H){let t=`${e.name}@${e.version}`;if(!f.has(t)){if(d$2.has(e.name)){d(`[clean] Preserving ${t} (consumer state unreadable)`);continue}let o=Date.now()-new Date(e.meta.publishedAt).getTime();if(o<300*1e3){d(`[clean] Skipping recently published entry: ${t} (${Math.round(o/1e3)}s old)`);continue}s.push(e);}}let n=[],p=a$1();if(await A(p)){let e=await readdir(p,{withFileTypes:true});for(let t of e)t.isDirectory()&&(t.name.includes(".tmp-")||t.name.includes(".old-"))&&n.push(t.name);}if(s.length+n.length>0&&!A$1.yes){let e=[];s.length>0&&e.push(`${s.length} unreferenced store entry(ies)`),n.length>0&&e.push(`${n.length} orphaned temp directory(ies)`);let t=await b$1.prompt(`Remove ${e.join(" and ")}?`,{type:"confirm"});if(!t||typeof t=="symbol"){b$1.info("Cancelled");return}}let a$4=0,q=await Promise.all(s.map(e=>C(e.packageDir))),G=await Promise.all(n.map(e=>C(join(p,e)))),m$1=0;for(let e$1=0;e$1<s.length;e$1++){let t=s[e$1];d(`[clean] Removing unreferenced store entry: ${t.name}@${t.version}`),await e(t.name,t.version),a$4+=q[e$1],m$1++;}m$1>0&&b$1.success(`Removed ${m$1} unreferenced store entry(ies)`);let c=0;for(let e=0;e<n.length;e++)d(`[clean] Removing orphaned directory: ${n[e]}`),await x(join(p,n[e])),a$4+=G[e],c++;c>0&&b$1.success(`Removed ${c} orphaned temp directory(ies)`),l===0&&m$1===0&&c===0&&b$1.info("Store is clean \u2014 no stale entries or registrations found");let I=a$4>0?` (reclaimed ${a$2(a$4)})`:"";b$1.info(`Clean complete in ${y.elapsed()}${I}`),a$3({removedConsumers:l,removedPackages:v,removedEntries:m$1,removedOrphans:c,reclaimedBytes:a$4,elapsed:y.elapsedMs()}),b$3()&&r();}};export{ne as default};
|
package/dist/cli.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {createRequire}from'node:module';import {a as a$
|
|
3
|
-
var o=c(a
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$3}from'./chunk-OL7SNXMX.mjs';import {a as a$2}from'./chunk-R3RSOZXN.mjs';import {a,b}from'./chunk-ICCM7US5.mjs';import {c,a as a$1}from'./chunk-2VCW5RWI.mjs';import {availableParallelism}from'os';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var o=c(a(),1);var f=`
|
|
4
4
|
\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
|
|
5
5
|
\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u255D
|
|
6
6
|
\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2554\u255D
|
|
7
7
|
\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2588\u2588\u2557
|
|
8
8
|
\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2557
|
|
9
9
|
\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D
|
|
10
|
-
`;function
|
|
11
|
-
`));}a$
|
|
10
|
+
`;function s(){console.log(o.default.yellow(f)),console.log(o.default.cyan(" \u{1F4E6} Local npm package development without symlinks")),console.log(o.default.dim(` Copies built files into consumer node_modules with incremental sync
|
|
11
|
+
`));}a$1(s,"showBanner");process.env.UV_THREADPOOL_SIZE??=String(Math.max(availableParallelism(),8));a$2();var l=process.argv.slice(2),v=["init","publish","add","remove","push","dev","restore","list","status","update","clean","gc","doctor","migrate","reset","rollback","check"],u=l.some(e=>!e.startsWith("-")&&v.includes(e)),g=l.includes("--help")||l.includes("-h")||l.includes("--version");if(!u&&!g&&process.stdin.isTTY){s();let e=await k();e&&process.argv.splice(2,0,e);}else u||s();async function k(){try{let{readConsumerStateSafe:p}=await import('./tracker-FEVY3U3R.mjs'),{resolve:c}=await import('path'),{state:d}=await p(c(".")),n=Object.keys(d.links).length;n>0&&b.info(`${n} package(s) linked in this project`);}catch{}return await b.prompt("What would you like to do?",{type:"select",options:[{label:"init \u2014 Set up plunk in this project",value:"init"},{label:"publish \u2014 Publish package to the plunk store",value:"publish"},{label:"add \u2014 Link a package from the store",value:"add"},{label:"push \u2014 Publish and push to all consumers",value:"push"},{label:"dev \u2014 Watch, rebuild, and push continuously",value:"dev"},{label:"list \u2014 Show linked packages",value:"list"},{label:"status \u2014 Show project status",value:"status"},{label:"help \u2014 Show help",value:"--help"}]})||null}a$1(k,"showInteractiveMenu");var _={meta:{name:"plunk",version:"0.8.0-canary.80f84dc",description:"Local npm package development \u2014 copies built files into consumer node_modules"},args:{verbose:{type:"boolean",alias:"v",description:"Enable verbose debug logging",default:false},"dry-run":{type:"boolean",description:"Preview changes without writing files",default:false},json:{type:"boolean",description:"Output machine-readable JSON",default:false}},subCommands:{init:a$1(()=>import('./init-462LK4RS.mjs').then(e=>e.default),"init"),publish:a$1(()=>import('./publish-WBWXJKWT.mjs').then(e=>e.default),"publish"),add:a$1(()=>import('./add-3RQYONUL.mjs').then(e=>e.default),"add"),remove:a$1(()=>import('./remove-F4IUA7SK.mjs').then(e=>e.default),"remove"),push:a$1(()=>import('./push-ZDSUAM2Q.mjs').then(e=>e.default),"push"),dev:a$1(()=>import('./dev-ZWSFPFJT.mjs').then(e=>e.default),"dev"),restore:a$1(()=>import('./restore-K25HTQN3.mjs').then(e=>e.default),"restore"),list:a$1(()=>import('./list-SN3P6AW4.mjs').then(e=>e.default),"list"),status:a$1(()=>import('./status-4QXDLVCX.mjs').then(e=>e.default),"status"),update:a$1(()=>import('./update-ZI2P4X2T.mjs').then(e=>e.default),"update"),clean:a$1(()=>import('./clean-ZKSUQ5P7.mjs').then(e=>e.default),"clean"),gc:a$1(()=>import('./clean-ZKSUQ5P7.mjs').then(e=>e.default),"gc"),doctor:a$1(()=>import('./doctor-F4IJJRMU.mjs').then(e=>e.default),"doctor"),migrate:a$1(()=>import('./migrate-OAUFA2ML.mjs').then(e=>e.default),"migrate"),reset:a$1(()=>import('./reset-UNDLX2AJ.mjs').then(e=>e.default),"reset"),rollback:a$1(()=>import('./rollback-GFQSNZFB.mjs').then(e=>e.default),"rollback"),check:a$1(()=>import('./check-YV3B3NJU.mjs').then(e=>e.default),"check")}};a$3(_);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {a as a$1}from'./chunk-P4QZJA33.mjs';import'./chunk-SYADAYF4.mjs';import {a,e,b as b$1,c}from'./chunk-QDQKKMAV.mjs';import'./chunk-XVWUDOVN.mjs';import'./chunk-SSCTJUNB.mjs';import'./chunk-72AD4PZH.mjs';import'./chunk-HPF6K6WO.mjs';import'./chunk-7JG555TZ.mjs';import'./chunk-EPNDXIQH.mjs';import'./chunk-MBKCCWSD.mjs';import {b}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import'./chunk-KJPN6E7W.mjs';import'./chunk-U376XMQP.mjs';import'./chunk-AS4SJVLT.mjs';import'./chunk-HW7AEGI3.mjs';import {r}from'./chunk-SXO3YBPY.mjs';import {b as b$2}from'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import {a as a$2}from'./chunk-2VCW5RWI.mjs';import {resolve}from'path';globalThis.require=createRequire(import.meta.url);
|
|
3
|
+
var W={meta:{name:"dev",description:"Watch, rebuild, and push to all consumers. Auto-detects build command."},args:{all:{type:"boolean",description:"Watch all workspace packages in dependency order",default:false},build:{type:"string",description:"Override build command (default: auto-detect from package.json)"},"skip-build":{type:"boolean",description:"Watch output dirs directly, skip build command detection",default:false},debounce:{type:"string",description:"Debounce delay in ms (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},notify:{type:"boolean",description:"Ring terminal bell on push completion",default:false},"no-cascade":{type:"boolean",description:"Disable cascading rebuilds in --all mode",default:false}},async run({args:e$1}){b();let o=resolve("."),m=await a(o),t={runScripts:!e$1["no-scripts"],force:e$1.force,historyLimit:m.historyLimit};if(e$1.all)await a$1(o,t),await e(o,e$1,t);else {let i=a$2(()=>b$1(o,t),"push");if(await i(),b$2()){r();return}await c(o,e$1,i);}}};export{W as default};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';import {d,b as b$4}from'./chunk-SSCTJUNB.mjs';import {a as a$2,b as b$5,c as c$1,d as d$1}from'./chunk-EPNDXIQH.mjs';import {b,a as a$3}from'./chunk-OJJZ7CLB.mjs';import'./chunk-OL7SNXMX.mjs';import {g,b as b$3}from'./chunk-KJPN6E7W.mjs';import'./chunk-U376XMQP.mjs';import {a as a$1,A,b as b$2}from'./chunk-SXO3YBPY.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 A(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 A(_)){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$1}=await b$3(t);A$1||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=join(t,"node_modules",e);if(!await A(k))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,"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 A(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};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';export{B as atomicWriteFile,u as collectFiles,D as copyDir,t as copyWithCoW,C as dirSize,y as ensureDir,z as ensurePrivateDir,A as exists,v as incrementalCopy,s as isNodeError,w as moveDir,x as removeDir}from'./chunk-SXO3YBPY.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {createRequire}from'node:module';export{a as captureHistory,f as clearHistory,c as getHistoryEntry,b as listHistory,e as pruneHistory,g as resolveHistoryLimit,d as restoreHistoryEntry}from'./chunk-4GAOTDK4.mjs';import'./chunk-SXO3YBPY.mjs';import'./chunk-R3RSOZXN.mjs';import'./chunk-ICCM7US5.mjs';import'./chunk-2VCW5RWI.mjs';globalThis.require=createRequire(import.meta.url);
|