regpick 0.16.7 → 0.16.8
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-cpIoXEyW.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/add-O9Xew8KZ.mjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./index.mjs";import{a as i,i as a}from"./config-T4fp4qjQ.mjs";import{a as o,i as s,n as c,o as l,r as u,t as d}from"./registry-rhSnHehV.mjs";import{Runtime as f}from"./ports-Cya9T6al.mjs";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./update-DbZ8tye8.mjs";import{Array as b,Effect as x,Schema as S}from"effect";import C from"node:path";function w(e){return{dependencies:b.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),devDependencies:b.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean))}}function T(e,t){let n=new Map,r=[...e],i=[];for(;r.length>0;){let e=r.shift();if(!n.has(e.name)&&(n.set(e.name,e),e.registryDependencies&&e.registryDependencies.length>0))for(let a of e.registryDependencies){if(n.has(a))continue;let e=t.find(e=>e.name===a);e?r.push(e):i.push(a)}}return{resolvedItems:b.fromIterable(n.values()),missingDependencies:b.dedupe(i.filter(Boolean))}}const E=(e,t,n,r=new Set)=>x.gen(function*(){let i=[],a=[];for(let o of e)for(let e of o.files){let{absoluteTarget:s,relativeTarget:c}=yield*p(o,e,t,n),l={itemName:o.name,sourceFile:e,absoluteTarget:s,relativeTarget:c};i.push(l),r.has(s)&&a.push(l)}return yield*x.succeed({selectedItems:e,plannedWrites:i,dependencyPlan:w(e),conflicts:a})});function D(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function O(e,t){let{flags:n}=t.args,i=D(n.select);if(n.all)return x.succeed(e);if(i.length){let t=e.filter(e=>i.includes(e.name));return t.length?x.succeed(t):x.fail(r(`ValidationError`,`No items matched --select=${String(n.select)}`))}return x.succeed(null)}const k={npm:{name:`npm`,lockfiles:[`package-lock.json`],detect:(e,t)=>t.fs.existsSync(C.join(e,`package-lock.json`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`npm`,args:[`install`,...e]}),t.length&&n.push({command:`npm`,args:[`install`,`-D`,...t]}),n}},yarn:{name:`yarn`,lockfiles:[`yarn.lock`],detect:(e,t)=>t.fs.existsSync(C.join(e,`yarn.lock`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`yarn`,args:[`add`,...e]}),t.length&&n.push({command:`yarn`,args:[`add`,`-D`,...t]}),n}},pnpm:{name:`pnpm`,lockfiles:[`pnpm-lock.yaml`],detect:(e,t)=>t.fs.existsSync(C.join(e,`pnpm-lock.yaml`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`pnpm`,args:[`add`,...e]}),t.length&&n.push({command:`pnpm`,args:[`add`,`-D`,...t]}),n}},bun:{name:`bun`,lockfiles:[`bun.lockb`,`bun.lock`],detect:(e,t)=>t.fs.existsSync(C.join(e,`bun.lockb`))||t.fs.existsSync(C.join(e,`bun.lock`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`bun`,args:[`add`,...e]}),t.length&&n.push({command:`bun`,args:[`add`,`-D`,...t]}),n}}};function A(e,t){return t?.plugins?.find(t=>typeof t==`object`&&!!t&&`name`in t&&t.name===e)??k[e]}function j(e){let t=(e?.plugins||[]).filter(e=>typeof e==`object`&&!!e&&`buildInstallCommands`in e),n=Object.values(k).filter(e=>!t.some(t=>t.name===e.name));return[...t,...n]}const M=S.Struct({dependencies:S.optionalWith(S.Record({key:S.String,value:S.String}),{exact:!0,default:()=>({})}),devDependencies:S.optionalWith(S.Record({key:S.String,value:S.String}),{exact:!0,default:()=>({})}),peerDependencies:S.optionalWith(S.Record({key:S.String,value:S.String}),{exact:!0,default:()=>({})})});function N(e,t,n){return x.gen(function*(){let r=C.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=yield*x.exit(n.fs.readJsonSync(r)),a=i._tag===`Success`?i.value:{},o=S.decodeUnknownEither(M)(a),s=o._tag===`Right`?o.right:{dependencies:{},devDependencies:{},peerDependencies:{}},c={...s.dependencies,...s.devDependencies,...s.peerDependencies},l=b.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),u=b.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean));return{missingDependencies:l.filter(e=>!c[e]),missingDevDependencies:u.filter(e=>!c[e])}})}function P(e,t,n,i,a,o){return x.gen(function*(){if(!n.length&&!i.length)return;let s=A(t,o);if(!s)return yield*x.fail(r(`InstallError`,`Unknown package manager: ${t}`));let c=s.buildInstallCommands(n,i);yield*x.forEach(c,t=>x.gen(function*(){if(a.process.run(t.command,t.args,e).status!==0)return yield*x.fail(r(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`))}),{concurrency:1})})}function F(e,t,n,r){return x.gen(function*(){if(t&&t!==`auto`)return t;let i=j(r);for(let t of i)if(yield*x.promise(()=>Promise.resolve(t.detect(e,n))))return t.name;return`npm`})}function I(e,t,n,r=[],i=[]){return{name:`regpick:core-add`,async finish(a){await x.runPromise(x.gen(function*(){if(`flushToDisk`in a.vfs&&(yield*x.tryPromise({try:()=>a.vfs.flushToDisk(),catch:e=>Error(`Failed to flush VFS: ${e instanceof Error?e.message:String(e)}`)})),r.length>0){let e=yield*h(a.cwd,n);for(let t of r){e.components||={};let n=i.filter(e=>e.itemName===t.name),r=y(n.map(e=>({path:e.relativeTarget,content:e.originalContent}))),o=[];for(let e of n)try{let t=yield*x.promise(()=>a.vfs.readFile(e.absoluteTarget,`utf-8`));o.push({path:e.relativeTarget,content:t.toString()})}catch{o.push({path:e.relativeTarget,content:e.originalContent})}let s=y(o);e.components[t.name]={source:t.sourceMeta?.originalSource??`unknown`,remoteHash:r,localHash:s}}yield*_(a.cwd,e,n).pipe(x.mapError(e=>Error(`Failed to write lockfile: ${e.message}`)))}if([...e.dependencies,...e.devDependencies].length>0){let r=yield*F(a.cwd,t.install?.packageManager||`auto`,n,t);yield*P(a.cwd,r,e.dependencies,e.devDependencies,n,t).pipe(x.catchAll(e=>x.fail(Error(`Failed to install dependencies: ${e.message}`))))}}))}}}function L(){return x.gen(function*(){let e=yield*f,i=yield*a((yield*n).cwd).pipe(x.mapError(t));return i.configPath?{config:i.config,configPath:i.configPath}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*x.fail(r(`ValidationError`,`No config file found`)))})}function R(){return x.gen(function*(){let t=yield*e,a=yield*f,o=yield*n,s=o.args.positionals[0]===`add`?1:0,c=o.args.positionals[s];if(c)return i(c,t);let l=Object.entries(t.registry?.sources||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(l.length>0){let e=yield*a.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:l,maxItems:1,required:!1});if(yield*a.prompt.isCancel(e))return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`));if(Array.isArray(e)&&e.length>0)return i(String(e[0]),t)}let u=yield*a.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return(yield*a.prompt.isCancel(u))?yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`)):String(u)})}function z(e,t){return x.gen(function*(){let i=yield*f,a=yield*n,o=(a.args.positionals[0]===`add`?1:0)+1,{items:s}=yield*d(e,a.cwd,i,t);if(!s.length)return yield*i.prompt.warn(`No installable items in registry.`),yield*x.fail(r(`ValidationError`,`No installable items in registry.`));let c=a.args.positionals[o];c&&!a.args.flags.select&&(a.args.flags.select=c);let l=yield*O(s,a),u;if(l)u=l;else{let e=yield*i.prompt.autocompleteMultiselect({message:`Select items to install`,options:s.map(e=>({value:e.name,label:`${e.name} (${e.type||`registry:file`})`,hint:e.description||`${e.files.length} file(s)`})),maxItems:10,required:!0});if(yield*i.prompt.isCancel(e))return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`));let t=new Set((Array.isArray(e)?e:[]).map(String));u=s.filter(e=>t.has(e.name))}if(!u.length)return yield*i.prompt.warn(`No items selected.`),yield*x.fail(r(`ValidationError`,`No items selected.`));let{resolvedItems:p,missingDependencies:m}=T(u,s);return{selectedItems:p,missingRegistryDeps:m}})}function B(t){return x.gen(function*(){let r=yield*e,i=yield*f,a=yield*n,o=yield*E(t,a.cwd,r),s=new Set;yield*x.forEach(o.plannedWrites,e=>x.gen(function*(){(yield*i.fs.pathExists(e.absoluteTarget))&&s.add(e.absoluteTarget)}),{concurrency:`unbounded`});let c=yield*E(t,a.cwd,r,s),l=yield*N(t,a.cwd,i);return{selectedItems:t,plannedWrites:c.plannedWrites,existingTargets:s,missingDependencies:l.missingDependencies,missingDevDependencies:l.missingDevDependencies}})}function V(t){return x.gen(function*(){let i=yield*e,a=yield*f,o=yield*n,s=!!o.args.flags.yes;if(!s){let e=yield*a.prompt.confirm({message:`Install ${t.selectedItems.length} item(s)?`,initialValue:!0});if((yield*a.prompt.isCancel(e))||!e)return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`))}let c=[],l=i.install?.overwritePolicy||`prompt`;yield*x.forEach(t.plannedWrites,e=>x.gen(function*(){if(t.existingTargets.has(e.absoluteTarget))if(s||l===`overwrite`)c.push(e);else if(l===`skip`)yield*a.prompt.warn(`Skipped existing file: ${e.absoluteTarget}`);else{let t=yield*a.prompt.select({message:`File exists: ${e.absoluteTarget}`,options:[{value:`overwrite`,label:`Overwrite this file`},{value:`skip`,label:`Skip this file`},{value:`abort`,label:`Abort installation`}]});if((yield*a.prompt.isCancel(t))||t===`abort`)return yield*x.fail(r(`UserCancelled`,`Installation aborted by user.`));t===`overwrite`&&c.push(e)}else c.push(e)}),{concurrency:1});let u=!1;if(t.missingDependencies.length>0||t.missingDevDependencies.length>0)if(s)u=!0;else{let e=F(o.cwd,i.install?.packageManager||`auto`,a),n=[];t.missingDependencies.length&&n.push(`dependencies: ${t.missingDependencies.join(`, `)}`),t.missingDevDependencies.length&&n.push(`devDependencies: ${t.missingDevDependencies.join(`, `)}`);let s=yield*a.prompt.confirm({message:`Install missing packages with ${e}? (${n.join(` | `)})`,initialValue:!0});if(yield*a.prompt.isCancel(s))return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`));u=!!s,u||(yield*a.prompt.warn(`Skipped dependency installation.`))}return{selectedItems:t.selectedItems,finalWrites:c,shouldInstallDeps:u,dependencyPlan:{dependencies:t.missingDependencies,devDependencies:t.missingDevDependencies}}})}function H(t,r,i){return x.gen(function*(){let a=yield*e,o=yield*f,s=yield*n,l=[];return yield*x.forEach(t,e=>x.gen(function*(){let t=r.find(t=>t.name===e.itemName);if(!t)return;let n=yield*c(e.sourceFile,t,s.cwd,o,i),u=m(n,a);l.push({itemName:e.itemName,absoluteTarget:e.absoluteTarget,relativeTarget:e.relativeTarget,sourceFile:e.sourceFile,originalContent:n,finalContent:u})}),{concurrency:`unbounded`}),l})}function U(){return x.gen(function*(){let{config:t}=yield*L(),r=x.gen(function*(){let r=yield*f,i=yield*n,a=yield*R();if(!a)return{kind:`noop`,message:`No source provided`};let c=[...yield*u((yield*e).plugins||[],i.cwd),s(),o(),l()],d=yield*z(a,c);for(let e of d.missingRegistryDeps||[])yield*r.prompt.warn(`Registry dependency "${e}" not found in current registry.`);let p=yield*V(yield*B(d.selectedItems)),m=yield*H(p.finalWrites,p.selectedItems,c),h=new g,_=m.map(e=>({id:e.absoluteTarget,code:e.finalContent})),y=[];for(let e of m){let t=p.selectedItems.find(t=>t.name===e.itemName);t&&!y.some(e=>e.name===t.name)&&y.push(t)}let b=t.plugins?.filter(e=>typeof e==`object`)||[],S=p.shouldInstallDeps?p.dependencyPlan:{dependencies:[],devDependencies:[]};return yield*new v([...b,I(S,yield*e,r,y,m)]).run({vfs:h,cwd:i.cwd,runtime:r},_).pipe(x.catchAll(e=>(h.rollback(),x.gen(function*(){return yield*r.prompt.error(`[Failed] Installation aborted: ${e.message}`),yield*x.fail(e)})))),yield*r.prompt.info(`Installed ${p.selectedItems.length} item(s), wrote ${m.length} file(s).`),{kind:`success`,message:`Installed ${p.selectedItems.length} item(s), wrote ${m.length} file(s).`,details:{writesCount:m.length,itemsCount:p.selectedItems.length}}});return yield*x.provideService(r,e,t)})}export{U as runAddCommand};
|
package/dist/index.mjs
CHANGED
|
@@ -12,4 +12,4 @@ Options:
|
|
|
12
12
|
--select=a,b,c Select explicit item names in add flow
|
|
13
13
|
--yes Skip confirmation prompts where safe
|
|
14
14
|
--help Show this help
|
|
15
|
-
`)}function y(){return n.gen(function*(){let e=new AbortController,t=t=>{e.signal.aborted||e.abort(t),t instanceof Error&&console.error(a(`red`,`\n[Fatal Error] ${t.message}`)),process.exit(1)};process.on(`SIGINT`,()=>t()),process.on(`SIGTERM`,()=>t()),process.on(`uncaughtException`,t),process.on(`unhandledRejection`,e=>t(e instanceof Error?e:Error(String(e))));let s=_(process.argv.slice(2)),c=s.positionals[0];if(!c||s.flags.help){v();return}let{createRuntimePorts:l,Runtime:u}=yield*n.promise(()=>import(`./ports-Cya9T6al.mjs`)),d=l({signal:e.signal}),f={cwd:s.flags.cwd?i.resolve(process.cwd(),String(s.flags.cwd)):process.cwd(),args:s};d.prompt.intro(a(`cyan`,`regpick`));let p=n.gen(function*(){let e;switch(c){case`init`:e=yield*n.promise(()=>import(`./init-iLVbxiXA.mjs`).then(e=>e.runInitCommand()));break;case`list`:e=yield*n.promise(()=>import(`./list-nLGwDs7L.mjs`).then(e=>e.runListCommand()));break;case`add`:e=yield*n.promise(()=>import(`./add-
|
|
15
|
+
`)}function y(){return n.gen(function*(){let e=new AbortController,t=t=>{e.signal.aborted||e.abort(t),t instanceof Error&&console.error(a(`red`,`\n[Fatal Error] ${t.message}`)),process.exit(1)};process.on(`SIGINT`,()=>t()),process.on(`SIGTERM`,()=>t()),process.on(`uncaughtException`,t),process.on(`unhandledRejection`,e=>t(e instanceof Error?e:Error(String(e))));let s=_(process.argv.slice(2)),c=s.positionals[0];if(!c||s.flags.help){v();return}let{createRuntimePorts:l,Runtime:u}=yield*n.promise(()=>import(`./ports-Cya9T6al.mjs`)),d=l({signal:e.signal}),f={cwd:s.flags.cwd?i.resolve(process.cwd(),String(s.flags.cwd)):process.cwd(),args:s};d.prompt.intro(a(`cyan`,`regpick`));let p=n.gen(function*(){let e;switch(c){case`init`:e=yield*n.promise(()=>import(`./init-iLVbxiXA.mjs`).then(e=>e.runInitCommand()));break;case`list`:e=yield*n.promise(()=>import(`./list-nLGwDs7L.mjs`).then(e=>e.runListCommand()));break;case`add`:e=yield*n.promise(()=>import(`./add-cpIoXEyW.mjs`).then(e=>e.runAddCommand()));break;case`update`:e=yield*n.promise(()=>import(`./update-DbZ8tye8.mjs`).then(e=>e.runUpdateCommand()));break;case`pack`:e=yield*n.promise(()=>import(`./pack-BHMSlNX5.mjs`).then(e=>e.runPackCommand()));break;default:return d.prompt.error(`Unknown command: ${c}`),v(),process.exitCode=1,yield*n.succeed(void 0)}let t=yield*e;if(t.kind===`noop`){d.prompt.outro(a(`yellow`,t.message));return}d.prompt.outro(a(`green`,`Done.`))}).pipe(n.catchAll(e=>n.sync(()=>{b(e,d.prompt.error),d.prompt.outro(a(`red`,`Failed.`)),process.exitCode=1})),n.catchAllDefect(e=>n.sync(()=>{b(h(e),d.prompt.error),d.prompt.outro(a(`red`,`Failed.`)),process.exitCode=1}))),m=r.merge(r.succeed(u,d),r.succeed(o,f));yield*p.pipe(n.provide(m))})}function b(e,t){if(e._tag===`UserCancelled`){t(e.message);return}let n=`[${e._tag}] ${e.message}`;if(e.cause)if(e.cause instanceof Error)n+=`\n\nCause:\n${e.cause.stack||e.cause.message}`;else if(typeof e.cause==`object`)try{n+=`\n\nCause:\n${JSON.stringify(e.cause,null,2)}`}catch{n+=`\n\nCause: ${String(e.cause)}`}else n+=`\n\nCause: ${String(e.cause)}`;t(n)}n.runPromise(y());export{s as i,h as n,o as r,m as t};
|
package/package.json
CHANGED
package/dist/add-O9Xew8KZ.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"./index.mjs";import{a as i,i as a}from"./config-T4fp4qjQ.mjs";import{a as o,i as s,n as c,o as l,r as u,t as d}from"./registry-rhSnHehV.mjs";import{Runtime as f}from"./ports-Cya9T6al.mjs";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./update-DbZ8tye8.mjs";import{Array as b,Effect as x,Schema as S}from"effect";import C from"node:path";function w(e){return{dependencies:b.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),devDependencies:b.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean))}}function T(e,t){let n=new Map,r=[...e],i=[];for(;r.length>0;){let e=r.shift();if(!n.has(e.name)&&(n.set(e.name,e),e.registryDependencies&&e.registryDependencies.length>0))for(let a of e.registryDependencies){if(n.has(a))continue;let e=t.find(e=>e.name===a);e?r.push(e):i.push(a)}}return{resolvedItems:b.fromIterable(n.values()),missingDependencies:b.dedupe(i.filter(Boolean))}}const E=(e,t,n,r=new Set)=>x.gen(function*(){let i=[],a=[];for(let o of e)for(let e of o.files){let{absoluteTarget:s,relativeTarget:c}=yield*p(o,e,t,n),l={itemName:o.name,sourceFile:e,absoluteTarget:s,relativeTarget:c};i.push(l),r.has(s)&&a.push(l)}return yield*x.succeed({selectedItems:e,plannedWrites:i,dependencyPlan:w(e),conflicts:a})});function D(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function O(e,t){let{flags:n}=t.args,i=D(n.select);if(n.all)return x.succeed(e);if(i.length){let t=e.filter(e=>i.includes(e.name));return t.length?x.succeed(t):x.fail(r(`ValidationError`,`No items matched --select=${String(n.select)}`))}return x.succeed(null)}const k={npm:{name:`npm`,lockfiles:[`package-lock.json`],detect:(e,t)=>t.fs.existsSync(C.join(e,`package-lock.json`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`npm`,args:[`install`,...e]}),t.length&&n.push({command:`npm`,args:[`install`,`-D`,...t]}),n}},yarn:{name:`yarn`,lockfiles:[`yarn.lock`],detect:(e,t)=>t.fs.existsSync(C.join(e,`yarn.lock`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`yarn`,args:[`add`,...e]}),t.length&&n.push({command:`yarn`,args:[`add`,`-D`,...t]}),n}},pnpm:{name:`pnpm`,lockfiles:[`pnpm-lock.yaml`],detect:(e,t)=>t.fs.existsSync(C.join(e,`pnpm-lock.yaml`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`pnpm`,args:[`add`,...e]}),t.length&&n.push({command:`pnpm`,args:[`add`,`-D`,...t]}),n}},bun:{name:`bun`,lockfiles:[`bun.lockb`,`bun.lock`],detect:(e,t)=>t.fs.existsSync(C.join(e,`bun.lockb`))||t.fs.existsSync(C.join(e,`bun.lock`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`bun`,args:[`add`,...e]}),t.length&&n.push({command:`bun`,args:[`add`,`-D`,...t]}),n}}};function A(e,t){return t?.plugins?.find(t=>typeof t==`object`&&!!t&&`name`in t&&t.name===e)??k[e]}function j(e){let t=(e?.plugins||[]).filter(e=>typeof e==`object`&&!!e&&`buildInstallCommands`in e),n=Object.values(k).filter(e=>!t.some(t=>t.name===e.name));return[...t,...n]}const M=S.Struct({dependencies:S.optionalWith(S.Record({key:S.String,value:S.String}),{exact:!0,default:()=>({})}),devDependencies:S.optionalWith(S.Record({key:S.String,value:S.String}),{exact:!0,default:()=>({})}),peerDependencies:S.optionalWith(S.Record({key:S.String,value:S.String}),{exact:!0,default:()=>({})})});function N(e,t,n){return x.gen(function*(){let r=C.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=yield*x.exit(n.fs.readJsonSync(r)),a=i._tag===`Success`?i.value:{},o=S.decodeUnknownEither(M)(a),s=o._tag===`Right`?o.right:{dependencies:{},devDependencies:{},peerDependencies:{}},c={...s.dependencies,...s.devDependencies,...s.peerDependencies},l=b.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),u=b.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean));return{missingDependencies:l.filter(e=>!c[e]),missingDevDependencies:u.filter(e=>!c[e])}})}function P(e,t,n,i,a,o){return x.gen(function*(){if(!n.length&&!i.length)return;let s=A(t,o);if(!s)return yield*x.fail(r(`InstallError`,`Unknown package manager: ${t}`));let c=s.buildInstallCommands(n,i);yield*x.forEach(c,t=>x.gen(function*(){if(a.process.run(t.command,t.args,e).status!==0)return yield*x.fail(r(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`))}),{concurrency:1})})}function F(e,t,n,r){return x.gen(function*(){if(t&&t!==`auto`)return t;let i=j(r);for(let t of i)if(yield*x.promise(()=>Promise.resolve(t.detect(e,n))))return t.name;return`npm`})}function I(e,t,n,r=[],i=[]){return{name:`regpick:core-add`,async finish(a){if([...e.dependencies,...e.devDependencies].length>0){let r=await x.runPromise(F(a.cwd,t.install?.packageManager||`auto`,n,t));try{await x.runPromise(P(a.cwd,r,e.dependencies,e.devDependencies,n,t))}catch(e){throw Error(`Failed to install dependencies: ${e.message}`)}}if(`flushToDisk`in a.vfs&&await a.vfs.flushToDisk(),r.length>0){let e=await x.runPromise(h(a.cwd,n));for(let t of r){e.components||={};let n=i.filter(e=>e.itemName===t.name),r=y(n.map(e=>({path:e.relativeTarget,content:e.originalContent}))),o=[];for(let e of n)try{let t=await a.vfs.readFile(e.absoluteTarget,`utf-8`);o.push({path:e.relativeTarget,content:t.toString()})}catch{o.push({path:e.relativeTarget,content:e.originalContent})}let s=y(o);e.components[t.name]={source:t.sourceMeta?.originalSource??`unknown`,remoteHash:r,localHash:s}}await x.runPromise(_(a.cwd,e,n))}}}}function L(){return x.gen(function*(){let e=yield*f,i=yield*a((yield*n).cwd).pipe(x.mapError(t));return i.configPath?{config:i.config,configPath:i.configPath}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*x.fail(r(`ValidationError`,`No config file found`)))})}function R(){return x.gen(function*(){let t=yield*e,a=yield*f,o=yield*n,s=o.args.positionals[0]===`add`?1:0,c=o.args.positionals[s];if(c)return i(c,t);let l=Object.entries(t.registry?.sources||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(l.length>0){let e=yield*a.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:l,maxItems:1,required:!1});if(yield*a.prompt.isCancel(e))return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`));if(Array.isArray(e)&&e.length>0)return i(String(e[0]),t)}let u=yield*a.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return(yield*a.prompt.isCancel(u))?yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`)):String(u)})}function z(e,t){return x.gen(function*(){let i=yield*f,a=yield*n,o=(a.args.positionals[0]===`add`?1:0)+1,{items:s}=yield*d(e,a.cwd,i,t);if(!s.length)return yield*i.prompt.warn(`No installable items in registry.`),yield*x.fail(r(`ValidationError`,`No installable items in registry.`));let c=a.args.positionals[o];c&&!a.args.flags.select&&(a.args.flags.select=c);let l=yield*O(s,a),u;if(l)u=l;else{let e=yield*i.prompt.autocompleteMultiselect({message:`Select items to install`,options:s.map(e=>({value:e.name,label:`${e.name} (${e.type||`registry:file`})`,hint:e.description||`${e.files.length} file(s)`})),maxItems:10,required:!0});if(yield*i.prompt.isCancel(e))return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`));let t=new Set((Array.isArray(e)?e:[]).map(String));u=s.filter(e=>t.has(e.name))}if(!u.length)return yield*i.prompt.warn(`No items selected.`),yield*x.fail(r(`ValidationError`,`No items selected.`));let{resolvedItems:p,missingDependencies:m}=T(u,s);return{selectedItems:p,missingRegistryDeps:m}})}function B(t){return x.gen(function*(){let r=yield*e,i=yield*f,a=yield*n,o=yield*E(t,a.cwd,r),s=new Set;yield*x.forEach(o.plannedWrites,e=>x.gen(function*(){(yield*i.fs.pathExists(e.absoluteTarget))&&s.add(e.absoluteTarget)}),{concurrency:`unbounded`});let c=yield*E(t,a.cwd,r,s),l=yield*N(t,a.cwd,i);return{selectedItems:t,plannedWrites:c.plannedWrites,existingTargets:s,missingDependencies:l.missingDependencies,missingDevDependencies:l.missingDevDependencies}})}function V(t){return x.gen(function*(){let i=yield*e,a=yield*f,o=yield*n,s=!!o.args.flags.yes;if(!s){let e=yield*a.prompt.confirm({message:`Install ${t.selectedItems.length} item(s)?`,initialValue:!0});if((yield*a.prompt.isCancel(e))||!e)return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`))}let c=[],l=i.install?.overwritePolicy||`prompt`;yield*x.forEach(t.plannedWrites,e=>x.gen(function*(){if(t.existingTargets.has(e.absoluteTarget))if(s||l===`overwrite`)c.push(e);else if(l===`skip`)yield*a.prompt.warn(`Skipped existing file: ${e.absoluteTarget}`);else{let t=yield*a.prompt.select({message:`File exists: ${e.absoluteTarget}`,options:[{value:`overwrite`,label:`Overwrite this file`},{value:`skip`,label:`Skip this file`},{value:`abort`,label:`Abort installation`}]});if((yield*a.prompt.isCancel(t))||t===`abort`)return yield*x.fail(r(`UserCancelled`,`Installation aborted by user.`));t===`overwrite`&&c.push(e)}else c.push(e)}),{concurrency:1});let u=!1;if(t.missingDependencies.length>0||t.missingDevDependencies.length>0)if(s)u=!0;else{let e=F(o.cwd,i.install?.packageManager||`auto`,a),n=[];t.missingDependencies.length&&n.push(`dependencies: ${t.missingDependencies.join(`, `)}`),t.missingDevDependencies.length&&n.push(`devDependencies: ${t.missingDevDependencies.join(`, `)}`);let s=yield*a.prompt.confirm({message:`Install missing packages with ${e}? (${n.join(` | `)})`,initialValue:!0});if(yield*a.prompt.isCancel(s))return yield*x.fail(r(`UserCancelled`,`Dependency installation cancelled by user.`));u=!!s,u||(yield*a.prompt.warn(`Skipped dependency installation.`))}return{selectedItems:t.selectedItems,finalWrites:c,shouldInstallDeps:u,dependencyPlan:{dependencies:t.missingDependencies,devDependencies:t.missingDevDependencies}}})}function H(t,r,i){return x.gen(function*(){let a=yield*e,o=yield*f,s=yield*n,l=[];return yield*x.forEach(t,e=>x.gen(function*(){let t=r.find(t=>t.name===e.itemName);if(!t)return;let n=yield*c(e.sourceFile,t,s.cwd,o,i),u=m(n,a);l.push({itemName:e.itemName,absoluteTarget:e.absoluteTarget,relativeTarget:e.relativeTarget,sourceFile:e.sourceFile,originalContent:n,finalContent:u})}),{concurrency:`unbounded`}),l})}function U(){return x.gen(function*(){let{config:t}=yield*L(),r=x.gen(function*(){let r=yield*f,i=yield*n,a=yield*R();if(!a)return{kind:`noop`,message:`No source provided`};let c=[...yield*u((yield*e).plugins||[],i.cwd),s(),o(),l()],d=yield*z(a,c);for(let e of d.missingRegistryDeps||[])yield*r.prompt.warn(`Registry dependency "${e}" not found in current registry.`);let p=yield*V(yield*B(d.selectedItems)),m=yield*H(p.finalWrites,p.selectedItems,c),h=new g,_=m.map(e=>({id:e.absoluteTarget,code:e.finalContent})),y=[];for(let e of m){let t=p.selectedItems.find(t=>t.name===e.itemName);t&&!y.some(e=>e.name===t.name)&&y.push(t)}let b=t.plugins?.filter(e=>typeof e==`object`)||[],S=p.shouldInstallDeps?p.dependencyPlan:{dependencies:[],devDependencies:[]};return yield*new v([...b,I(S,yield*e,r,y,m)]).run({vfs:h,cwd:i.cwd,runtime:r},_).pipe(x.catchAll(e=>(h.rollback(),x.gen(function*(){return yield*r.prompt.error(`[Failed] Installation aborted: ${e.message}`),yield*x.fail(e)})))),yield*r.prompt.info(`Installed ${p.selectedItems.length} item(s), wrote ${m.length} file(s).`),{kind:`success`,message:`Installed ${p.selectedItems.length} item(s), wrote ${m.length} file(s).`,details:{writesCount:m.length,itemsCount:p.selectedItems.length}}});return yield*x.provideService(r,e,t)})}export{U as runAddCommand};
|