regpick 0.20.1 → 0.20.3

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.
@@ -1,2 +1,2 @@
1
- import{i as e,r as t,t as n}from"./lockfile-CgL_H1L0.mjs";import{a as r,c as i,i as a,l as o,n as s,o as c,r as l,s as u,t as d}from"./index.mjs";import{o as f,t as p}from"./config-C76zmAVD.mjs";import{a as m,i as h,n as g,o as _,r as v,t as y}from"./plugins-Bv4KTCC-.mjs";import{Array as b,Effect as x,Schema as S}from"effect";import C from"node:path";import w from"node:crypto";import{Volume as T}from"memfs";import E from"node:fs/promises";const D=(e,t,n)=>x.gen(function*(){yield*x.forEach(t,t=>x.gen(function*(){t.start&&(yield*x.tryPromise({try:()=>t.start(e),catch:e=>c(`PluginError`,`[${t.name}] Failed during start hook: ${e instanceof Error?e.message:String(e)}`)}))}),{concurrency:1});let r=yield*x.forEach(n,n=>x.gen(function*(){let r=n.id;for(let n of t)if(n.resolveId){let t=yield*x.tryPromise({try:()=>n.resolveId(r,void 0,e),catch:e=>c(`PluginError`,`[${n.name}] Failed to resolveId for '${r}': ${e instanceof Error?e.message:String(e)}`)});if(t){r=t;break}}return{file:n,currentId:r}}),{concurrency:`unbounded`}),i=new Map;for(let e of r)i.has(e.currentId)||i.set(e.currentId,[]),i.get(e.currentId).push(e);yield*x.forEach(i.values(),n=>x.gen(function*(){for(let r of n){let n=r.file.code,i=r.currentId;for(let r of t)if(r.load){let t=yield*x.tryPromise({try:()=>r.load(i,e),catch:e=>c(`PluginError`,`[${r.name}] Failed to load '${i}': ${e instanceof Error?e.message:String(e)}`)});if(t!=null){n=t;break}}if(n!==null){if(typeof n==`string`){for(let r of t)if(r.transform){let t=yield*x.tryPromise({try:()=>r.transform(n,i,e),catch:e=>c(`PluginError`,`[${r.name}] Failed to transform '${i}': ${e instanceof Error?e.message:String(e)}`)});t!=null&&(n=t)}}yield*x.tryPromise({try:()=>e.vfs.writeFile(i,n),catch:e=>c(`VfsError`,`Failed to write ${i}: ${e instanceof Error?e.message:String(e)}`)})}}}),{concurrency:`unbounded`}),yield*x.forEach(t,t=>x.gen(function*(){t.finish&&(yield*x.tryPromise({try:()=>t.finish(e),catch:e=>c(`PluginError`,`[${t.name}] Failed during finish hook: ${e instanceof Error?e.message:String(e)}`)}))}),{concurrency:1})}).pipe(x.catchAll(n=>x.gen(function*(){return yield*x.forEach(t,t=>x.gen(function*(){t.onError&&(yield*x.tryPromise({try:()=>t.onError(n,e),catch:()=>{}}).pipe(x.ignore))}),{concurrency:1}),yield*x.fail(n)}))),O={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 k(e,t){return t?.plugins?.find(t=>typeof t==`object`&&!!t&&`name`in t&&t.name===e)??O[e]}function A(e){let t=(e?.plugins||[]).filter(e=>typeof e==`object`&&!!e&&`buildInstallCommands`in e),n=Object.values(O).filter(e=>!t.some(t=>t.name===e.name));return[...t,...n]}function j(e,t,n,r){return x.gen(function*(){if(t&&t!==`auto`)return t;let i=A(r);for(let t of i)if(yield*x.promise(()=>Promise.resolve(t.detect(e,n))))return t.name;return`npm`})}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,r,i,a){return x.gen(function*(){if(!n.length&&!r.length)return;let o=k(t,a);if(!o)return yield*x.fail(c(`InstallError`,`Unknown package manager: ${t}`));let s=o.buildInstallCommands(n,r);yield*x.forEach(s,t=>x.gen(function*(){if(i.process.run(t.command,t.args,e).status!==0)return yield*x.fail(c(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`))}),{concurrency:1})})}function F(r,i,a,o=[],s=[]){return{name:`regpick:core-add`,async finish(c){await x.runPromise(x.gen(function*(){if(`flushToDisk`in c.vfs&&(yield*x.tryPromise({try:()=>c.vfs.flushToDisk(),catch:e=>Error(`Failed to flush VFS: ${e instanceof Error?e.message:String(e)}`)})),o.length>0){let r=yield*t(c.cwd,a);for(let e of o){r.components||={};let t=s.filter(t=>t.itemName===e.name),i=[];for(let e of t)try{let t=yield*x.promise(()=>c.vfs.readFile(e.absoluteTarget,`utf-8`));i.push({path:e.relativeTarget,content:t.toString()})}catch{i.push({path:e.relativeTarget,content:e.originalContent})}let a=i.map(e=>({path:e.path,hash:n(e.content)}));r.components[e.name]={source:e.sourceMeta?.originalSource??`unknown`,version:`version`in e?String(e.version):void 0,installedAt:new Date().toISOString(),dependencies:e.dependencies??[],files:a.sort((e,t)=>e.path.localeCompare(t.path))}}yield*e(c.cwd,r,a).pipe(x.mapError(e=>Error(`Failed to write lockfile: ${e.message}`)))}if([...r.dependencies,...r.devDependencies].length>0){let e=yield*j(c.cwd,i.install?.packageManager||`auto`,a,i);yield*P(c.cwd,e,r.dependencies,r.devDependencies,a,i).pipe(x.catchAll(e=>x.fail(Error(`Failed to install dependencies: ${e.message}`))))}}))}}}function I(e){return e.replace(/\\/g,`/`)}var L=class{memory=new T;async readFile(e,t=`utf-8`){let n=I(e),r=this.memory.readFileSync(n);return r?t===`utf-8`?r.toString():r:t===`utf-8`?await E.readFile(e,`utf-8`):await E.readFile(e)}async writeFile(e,t){let n=I(e),r=C.dirname(n);await this.mkdir(r),this.memory.writeFileSync(n,t)}async exists(e){let t=I(e);try{return this.memory.existsSync(t)||await E.access(e),!0}catch{return!1}}async mkdir(e){let t=I(e);this.memory.mkdirSync(t,{recursive:!0})}async flushToDisk(){let e=this.memory.toJSON(),t=Object.entries(e).filter(([e,t])=>t!==null);if(t.length===0)return;let n=new Set;for(let[e]of t){let t=C.normalize(e);n.add(C.dirname(t))}try{for(let e of Array.from(n).sort())await E.mkdir(e,{recursive:!0})}catch(e){throw Error(`Failed to create physical filesystem directories during flush: ${e}`)}let r=(await x.runPromise(x.all(t.map(([e])=>x.tryPromise(async()=>{let t=C.normalize(e),n=this.memory.readFileSync(e);await E.writeFile(t,n)})),{concurrency:`unbounded`,mode:`either`}))).filter(e=>e._tag===`Left`);if(r.length>0){let e=r.map(e=>e.left?.message||String(e.left)).join(`
1
+ import{i as e,r as t,t as n}from"./lockfile-CgL_H1L0.mjs";import{a as r,c as i,i as a,l as o,n as s,o as c,r as l,s as u,t as d}from"./index.mjs";import{o as f,t as p}from"./config-C76zmAVD.mjs";import{a as m,i as h,n as g,o as _,r as v,t as y}from"./plugins-Bv4KTCC-.mjs";import{Array as b,Effect as x,Schema as S}from"effect";import C from"node:path";import w from"node:crypto";import{Volume as T}from"memfs";import E from"node:fs/promises";const D=(e,t,n)=>x.gen(function*(){yield*x.forEach(t,t=>x.gen(function*(){t.start&&(yield*x.tryPromise({try:()=>t.start(e),catch:e=>c(`PluginError`,`[${t.name}] Failed during start hook: ${e instanceof Error?e.message:String(e)}`)}))}),{concurrency:1,discard:!0});let r=yield*x.forEach(n,n=>x.gen(function*(){let r=n.id;for(let n of t)if(n.resolveId){let t=yield*x.tryPromise({try:()=>n.resolveId(r,void 0,e),catch:e=>c(`PluginError`,`[${n.name}] Failed to resolveId for '${r}': ${e instanceof Error?e.message:String(e)}`)});if(t){r=t;break}}return{file:n,currentId:r}}),{concurrency:`unbounded`}),i=new Map;for(let e of r)i.has(e.currentId)||i.set(e.currentId,[]),i.get(e.currentId).push(e);yield*x.forEach(i.values(),n=>x.gen(function*(){for(let r of n){let n=r.file.code,i=r.currentId;for(let r of t)if(r.load){let t=yield*x.tryPromise({try:()=>r.load(i,e),catch:e=>c(`PluginError`,`[${r.name}] Failed to load '${i}': ${e instanceof Error?e.message:String(e)}`)});if(t!=null){n=t;break}}if(n!==null){if(typeof n==`string`){for(let r of t)if(r.transform){let t=yield*x.tryPromise({try:()=>r.transform(n,i,e),catch:e=>c(`PluginError`,`[${r.name}] Failed to transform '${i}': ${e instanceof Error?e.message:String(e)}`)});t!=null&&(n=t)}}yield*x.tryPromise({try:()=>e.vfs.writeFile(i,n),catch:e=>c(`VfsError`,`Failed to write ${i}: ${e instanceof Error?e.message:String(e)}`)})}}}),{concurrency:`unbounded`,discard:!0}),yield*x.forEach(t,t=>x.gen(function*(){t.finish&&(yield*x.tryPromise({try:()=>t.finish(e),catch:e=>c(`PluginError`,`[${t.name}] Failed during finish hook: ${e instanceof Error?e.message:String(e)}`)}))}),{concurrency:1,discard:!0})}).pipe(x.catchAll(n=>x.gen(function*(){return yield*x.forEach(t,t=>x.gen(function*(){t.onError&&(yield*x.tryPromise({try:()=>t.onError(n,e),catch:e=>c(`PluginError`,`Cleanup error ignored`,e)}).pipe(x.ignore))}),{concurrency:1,discard:!0}),yield*x.fail(n)}))),O={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 k(e,t){return t?.plugins?.find(t=>typeof t==`object`&&!!t&&`name`in t&&t.name===e)??O[e]}function A(e){let t=(e?.plugins||[]).filter(e=>typeof e==`object`&&!!e&&`buildInstallCommands`in e),n=Object.values(O).filter(e=>!t.some(t=>t.name===e.name));return[...t,...n]}function j(e,t,n,r){return x.gen(function*(){if(t&&t!==`auto`)return t;let i=A(r);for(let t of i)if(yield*x.promise(()=>Promise.resolve(t.detect(e,n))))return t.name;return`npm`})}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,r,i,a){return x.gen(function*(){if(!n.length&&!r.length)return;let o=k(t,a);if(!o)return yield*x.fail(c(`InstallError`,`Unknown package manager: ${t}`));let s=o.buildInstallCommands(n,r);yield*x.forEach(s,t=>x.gen(function*(){if(i.process.run(t.command,t.args,e).status!==0)return yield*x.fail(c(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`))}),{concurrency:1})})}function F(r,i,a,o=[],s=[]){return{name:`regpick:core-add`,async finish(c){await x.runPromise(x.gen(function*(){if(`flushToDisk`in c.vfs&&(yield*x.tryPromise({try:()=>c.vfs.flushToDisk(),catch:e=>Error(`Failed to flush VFS: ${e instanceof Error?e.message:String(e)}`)})),o.length>0){let r=yield*t(c.cwd,a);for(let e of o){r.components||={};let t=s.filter(t=>t.itemName===e.name),i=[];for(let e of t)try{let t=yield*x.promise(()=>c.vfs.readFile(e.absoluteTarget,`utf-8`));i.push({path:e.relativeTarget,content:t.toString()})}catch{i.push({path:e.relativeTarget,content:e.originalContent})}let a=i.map(e=>({path:e.path,hash:n(e.content)}));r.components[e.name]={source:e.sourceMeta?.originalSource??`unknown`,version:`version`in e?String(e.version):void 0,installedAt:new Date().toISOString(),dependencies:e.dependencies??[],files:a.sort((e,t)=>e.path.localeCompare(t.path))}}yield*e(c.cwd,r,a).pipe(x.mapError(e=>Error(`Failed to write lockfile: ${e.message}`)))}if([...r.dependencies,...r.devDependencies].length>0){let e=yield*j(c.cwd,i.install?.packageManager||`auto`,a,i);yield*P(c.cwd,e,r.dependencies,r.devDependencies,a,i).pipe(x.catchAll(e=>x.fail(Error(`Failed to install dependencies: ${e.message}`))))}}))}}}function I(e){return e.replace(/\\/g,`/`)}var L=class{memory=new T;async readFile(e,t=`utf-8`){let n=I(e),r=this.memory.readFileSync(n);return r?t===`utf-8`?r.toString():r:t===`utf-8`?await E.readFile(e,`utf-8`):await E.readFile(e)}async writeFile(e,t){let n=I(e),r=C.dirname(n);await this.mkdir(r),this.memory.writeFileSync(n,t)}async exists(e){let t=I(e);try{return this.memory.existsSync(t)||await E.access(e),!0}catch{return!1}}async mkdir(e){let t=I(e);this.memory.mkdirSync(t,{recursive:!0})}async flushToDisk(){let e=this.memory.toJSON(),t=Object.entries(e).filter(([e,t])=>t!==null);if(t.length===0)return;let n=new Set;for(let[e]of t){let t=C.normalize(e);n.add(C.dirname(t))}try{for(let e of Array.from(n).sort())await E.mkdir(e,{recursive:!0})}catch(e){throw Error(`Failed to create physical filesystem directories during flush: ${e}`)}let r=(await x.runPromise(x.all(t.map(([e])=>x.tryPromise(async()=>{let t=C.normalize(e),n=this.memory.readFileSync(e);await E.writeFile(t,n)})),{concurrency:`unbounded`,mode:`either`}))).filter(e=>e._tag===`Left`);if(r.length>0){let e=r.map(e=>e.left?.message||String(e.left)).join(`
2
2
  `);throw Error(`flushToDisk failed with ${r.length} errors:\n${e}`)}}rollback(){this.memory.reset()}};function R(e){return e.replace(/\\/g,`/`)}function z(e,t,n){let r=`${C.resolve(e)}${C.sep}`,i=C.resolve(t);return n?x.succeed(void 0):i!==C.resolve(e)&&!i.startsWith(r)?x.fail(c(`ValidationError`,`Refusing to write outside project: ${i}`)):x.succeed(void 0)}const B=(e,t,n,r)=>x.gen(function*(){let i=t.type||e.type||`registry:file`,a=(r.resolve?.targets||{})?.[i],o=(r.registry?.preferManifestTarget??!0)!==!1,s=C.basename(t.path||`${e.name}.txt`),c;if(c=o&&t.target?t.target:a?C.join(a,s):t.target?t.target:C.join(`src`,s),r.plugins&&r.plugins.length>0){for(let n of r.plugins)if(typeof n==`object`&&n&&`resolvePath`in n&&typeof n.resolvePath==`function`){let i=n.resolvePath(t,e,c,r);if(i){c=i;break}}}let l=C.resolve(n,c);return yield*z(n,l,!!r.install?.allowOutsideProject),yield*x.succeed({absoluteTarget:l,relativeTarget:R(C.relative(n,l))})});function V(e){return{dependencies:b.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),devDependencies:b.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean))}}function H(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 U=(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*B(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:V(e),conflicts:a})});function W(e,t,n,r,i=`prompt`){let a=[];for(let o of e)if(t.has(o.absoluteTarget))if(r||i===`overwrite`)a.push(o);else if(i===`skip`)continue;else n.get(o.absoluteTarget)===`overwrite`&&a.push(o);else a.push(o);return a}function G(e,t){let n=e;for(let[e,r]of Object.entries(t.resolve?.aliases||{})){let t=RegExp(`from ["']${e}(.*?)["']`,`g`);n=n.replace(t,`from "${r}$1"`);let i=RegExp(`import\\(["']${e}(.*?)["']\\)`,`g`);n=n.replace(i,`import("${r}$1")`)}return n}function K(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function q(e,t){let{flags:n}=t.args,r=K(n.select);if(n.all)return x.succeed(e);if(r.length){let t=e.filter(e=>r.includes(e.name));return t.length?x.succeed(t):x.fail(c(`ValidationError`,`No items matched --select=${String(n.select)}`))}return x.succeed(null)}function J(){return x.gen(function*(){let e={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},t=yield*p((yield*i).cwd).pipe(x.mapError(u));return t.configPath?{config:t.config,configPath:t.configPath}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*x.fail(c(`ValidationError`,`No config file found`)))})}function Y(){return x.gen(function*(){let e=yield*o,t={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},n=yield*i,r=n.args.positionals[0]===`add`?1:0,u=n.args.positionals[r];if(u)return f(u,e);let p=Object.entries(e.registry?.sources||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(p.length>0){let n=yield*t.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:p,maxItems:1,required:!1});if(yield*t.prompt.isCancel(n))return yield*x.fail(c(`UserCancelled`,`Dependency installation cancelled by user.`));if(Array.isArray(n)&&n.length>0)return f(String(n[0]),e)}let m=yield*t.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return(yield*t.prompt.isCancel(m))?yield*x.fail(c(`UserCancelled`,`Dependency installation cancelled by user.`)):String(m)})}function X(e,t){return x.gen(function*(){let n={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},r=yield*i,o=(r.args.positionals[0]===`add`?1:0)+1,{items:u}=yield*m(e,r.cwd,n,t);if(!u.length)return yield*n.prompt.warn(`No installable items in registry.`),yield*x.fail(c(`ValidationError`,`No installable items in registry.`));let f=r.args.positionals[o];f&&!r.args.flags.select&&(r.args.flags.select=f);let p=yield*q(u,r),h;if(p)h=p;else{let e=yield*n.prompt.autocompleteMultiselect({message:`Select items to install`,options:u.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*n.prompt.isCancel(e))return yield*x.fail(c(`UserCancelled`,`Dependency installation cancelled by user.`));let t=new Set((Array.isArray(e)?e:[]).map(String));h=u.filter(e=>t.has(e.name))}if(!h.length)return yield*n.prompt.warn(`No items selected.`),yield*x.fail(c(`ValidationError`,`No items selected.`));let{resolvedItems:g,missingDependencies:_}=H(h,u);return{selectedItems:g,missingRegistryDeps:_}})}function Z(e){return x.gen(function*(){let t=yield*o,n={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},r=yield*i,c=yield*U(e,r.cwd,t),u=new Set;yield*x.forEach(c.plannedWrites,e=>x.gen(function*(){(yield*n.fs.pathExists(e.absoluteTarget))&&u.add(e.absoluteTarget)}),{concurrency:`unbounded`});let f=yield*U(e,r.cwd,t,u),p=yield*N(e,r.cwd,n);return{selectedItems:e,plannedWrites:f.plannedWrites,existingTargets:u,missingDependencies:p.missingDependencies,missingDevDependencies:p.missingDevDependencies}})}function Q(e){return x.gen(function*(){let t=yield*o,n={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},r=yield*i,u=!!r.args.flags.yes;if(!u){let t=yield*n.prompt.confirm({message:`Install ${e.selectedItems.length} item(s)?`,initialValue:!0});if((yield*n.prompt.isCancel(t))||!t)return yield*x.fail(c(`UserCancelled`,`Dependency installation cancelled by user.`))}let f=t.install?.overwritePolicy||`prompt`,p=new Map;if(!u&&f===`prompt`){for(let t of e.plannedWrites)if(e.existingTargets.has(t.absoluteTarget)){let e=yield*n.prompt.select({message:`File exists: ${t.absoluteTarget}`,options:[{value:`overwrite`,label:`Overwrite this file`},{value:`skip`,label:`Skip this file`},{value:`abort`,label:`Abort installation`}]});if((yield*n.prompt.isCancel(e))||e===`abort`)return yield*x.fail(c(`UserCancelled`,`Installation aborted by user.`));p.set(t.absoluteTarget,e)}}let m=W(e.plannedWrites,e.existingTargets,p,u,f),h=!1;if(e.missingDependencies.length>0||e.missingDevDependencies.length>0)if(u)h=!0;else{let i=j(r.cwd,t.install?.packageManager||`auto`,n),a=[];e.missingDependencies.length&&a.push(`dependencies: ${e.missingDependencies.join(`, `)}`),e.missingDevDependencies.length&&a.push(`devDependencies: ${e.missingDevDependencies.join(`, `)}`);let o=yield*n.prompt.confirm({message:`Install missing packages with ${i}? (${a.join(` | `)})`,initialValue:!0});if(yield*n.prompt.isCancel(o))return yield*x.fail(c(`UserCancelled`,`Dependency installation cancelled by user.`));h=!!o,h||(yield*n.prompt.warn(`Skipped dependency installation.`))}return{selectedItems:e.selectedItems,finalWrites:m,shouldInstallDeps:h,dependencyPlan:{dependencies:e.missingDependencies,devDependencies:e.missingDevDependencies}}})}function $(e,t,n){return x.gen(function*(){let r=yield*o,c={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},u=yield*i,f=[];return yield*x.forEach(e,e=>x.gen(function*(){let i=t.find(t=>t.name===e.itemName);if(!i)return;let a=yield*_(e.sourceFile,i,u.cwd,c,n),o=G(a,r);f.push({itemName:e.itemName,absoluteTarget:e.absoluteTarget,relativeTarget:e.relativeTarget,sourceFile:e.sourceFile,originalContent:a,finalContent:o})}),{concurrency:`unbounded`}),f})}function ee(){return x.gen(function*(){let{config:e}=yield*J();return yield*x.gen(function*(){let t={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},n=yield*i,c=yield*Y();if(!c)return{kind:`noop`,message:`No source provided`};let u=[...yield*y((yield*o).plugins||[],n.cwd),g(),v(),h()],f=yield*X(c,u);for(let e of f.missingRegistryDeps||[])yield*t.prompt.warn(`Registry dependency "${e}" not found in current registry.`);let p=yield*Q(yield*Z(f.selectedItems)),m=yield*$(p.finalWrites,p.selectedItems,u),_=new L,b=m.map(e=>({id:e.absoluteTarget,code:e.finalContent})),S=[];for(let e of m){let t=p.selectedItems.find(t=>t.name===e.itemName);t&&!S.some(e=>e.name===t.name)&&S.push(t)}let C=e.plugins?.filter(e=>typeof e==`object`)||[],T=p.shouldInstallDeps?p.dependencyPlan:{dependencies:[],devDependencies:[]},E=[...C,F(T,yield*o,t,S,m)],O=yield*r,k;try{let{readLockfile:e}=yield*x.promise(()=>import(`./lockfile-CgL_H1L0.mjs`).then(e=>e.n));k=yield*e(n.cwd,t).pipe(x.catchAll(()=>x.succeed(void 0)))}catch{}let A={id:w.randomUUID(),command:`add`,status:`pending`,plannedFiles:m.map(e=>e.absoluteTarget),lockfileBackup:k};return yield*O.writeIntent(A,n.cwd),yield*D({vfs:_,cwd:n.cwd,runtime:t},E,b).pipe(x.tapError(()=>O.clearIntent(n.cwd)),x.catchAll(e=>(_.rollback(),x.gen(function*(){return yield*t.prompt.error(`[Failed] Installation aborted: ${e.message}`),yield*x.fail(e)}))),x.tap(()=>O.clearIntent(n.cwd))),{kind:`success`,plan:p}}).pipe(x.provideService(o,e))})}export{D as i,B as n,L as r,ee as runAddCommand,G as t};
@@ -0,0 +1 @@
1
+ export { };
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 M(){return r.gen(function*(){let e=new AbortController,t=t=>{e.signal.aborted||e.abort(t),t instanceof Error&&console.error(o(`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 n=A(process.argv.slice(2)),c=n.positionals[0];if(!c||n.flags.help){j();return}let l={cwd:n.flags.cwd?a.resolve(process.cwd(),String(n.flags.cwd)):process.cwd(),args:n};console.log(o(`cyan`,`regpick`));let u=r.gen(function*(){let e=yield*S,t=yield*T;(yield*e.rollbackIntent(l.cwd))&&(yield*t.error(o(`yellow`,`Previous incomplete operation detected and rolled back.`)));let n;switch(c){case`init`:n=yield*r.promise(()=>import(`./init-DRGlfhSr.mjs`).then(e=>e.runInitCommand()));break;case`list`:n=yield*r.promise(()=>import(`./list-u1AZTg3F.mjs`).then(e=>e.runListCommand()));break;case`add`:n=yield*r.promise(()=>import(`./add-CtQH2yQW.mjs`).then(e=>e.runAddCommand()));break;case`update`:n=yield*r.promise(()=>import(`./update-MBdxGA_y.mjs`).then(e=>e.runUpdateCommand()));break;case`pack`:n=yield*r.promise(()=>import(`./pack-DPpPIJVF.mjs`).then(e=>e.runPackCommand()));break;default:return yield*t.error(`Unknown command: ${c}`),j(),process.exitCode=1,yield*r.succeed(void 0)}let i=yield*n;if(i.kind===`noop`){t.outro(o(`yellow`,i.message));return}t.outro(o(`green`,`Done.`))}).pipe(r.catchAll(e=>r.gen(function*(){let t=yield*T;N(e,console.error),t.outro(o(`red`,`Failed.`)),process.exitCode=1})),r.catchAllDefect(e=>r.gen(function*(){let t=yield*T;N(x(e),console.error),t.outro(o(`red`,`Failed.`)),process.exitCode=1}))),d=yield*r.promise(()=>import(`./runtime-CRLKtcLE.mjs`).then(t=>t.createRuntimeLive({signal:e.signal}))),f=i.mergeAll(d,i.succeed(s,l),i.succeed(S,O));yield*u.pipe(r.provide(f))})}function N(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)}`;console.error(n)}r.runPromise(M());export{S as a,s as c,T as i,c as l,w as n,b as o,E as r,x as s,C as t};
15
+ `)}function M(){return r.gen(function*(){let e=new AbortController,t=t=>{e.signal.aborted||e.abort(t),t instanceof Error&&console.error(o(`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 n=A(process.argv.slice(2)),c=n.positionals[0];if(!c||n.flags.help){j();return}let l={cwd:n.flags.cwd?a.resolve(process.cwd(),String(n.flags.cwd)):process.cwd(),args:n};console.log(o(`cyan`,`regpick`));let u=r.gen(function*(){let e=yield*S,t=yield*T;(yield*e.rollbackIntent(l.cwd))&&(yield*t.error(o(`yellow`,`Previous incomplete operation detected and rolled back.`)));let n;switch(c){case`init`:n=yield*r.promise(()=>import(`./init-DRGlfhSr.mjs`).then(e=>e.runInitCommand()));break;case`list`:n=yield*r.promise(()=>import(`./list-u1AZTg3F.mjs`).then(e=>e.runListCommand()));break;case`add`:n=yield*r.promise(()=>import(`./add-BgGH9oUR.mjs`).then(e=>e.runAddCommand()));break;case`update`:n=yield*r.promise(()=>import(`./update-DwVi6f_I.mjs`).then(e=>e.runUpdateCommand()));break;case`pack`:n=yield*r.promise(()=>import(`./pack-DPpPIJVF.mjs`).then(e=>e.runPackCommand()));break;default:return yield*t.error(`Unknown command: ${c}`),j(),process.exitCode=1,yield*r.succeed(void 0)}let i=yield*n;if(i.kind===`noop`){t.outro(o(`yellow`,i.message));return}t.outro(o(`green`,`Done.`))}).pipe(r.catchAll(e=>r.gen(function*(){let t=yield*T;N(e,console.error),t.outro(o(`red`,`Failed.`)),process.exitCode=1})),r.catchAllDefect(e=>r.gen(function*(){let t=yield*T;N(x(e),console.error),t.outro(o(`red`,`Failed.`)),process.exitCode=1}))),d=yield*r.promise(()=>import(`./runtime-CRLKtcLE.mjs`).then(t=>t.createRuntimeLive({signal:e.signal}))),f=i.mergeAll(d,i.succeed(s,l),i.succeed(S,O));yield*u.pipe(r.provide(f))})}function N(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)}`;console.error(n)}r.runPromise(M());export{S as a,s as c,T as i,c as l,w as n,b as o,E as r,x as s,C as t};
@@ -1,2 +1,2 @@
1
- import{i as e,r as t,t as n}from"./lockfile-CgL_H1L0.mjs";import{a as r,c as i,i as a,l as o,n as s,o as c,r as l,s as u,t as d}from"./index.mjs";import{t as f}from"./config-C76zmAVD.mjs";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./plugins-Bv4KTCC-.mjs";import{i as y,n as b,r as x,t as S}from"./add-CtQH2yQW.mjs";import{Effect as C,Either as w}from"effect";import T from"node:path";import{styleText as E}from"node:util";import D from"node:crypto";function O(e){let t={};for(let n of Object.keys(e.components)){let r=e.components[n].source;r&&(t[r]||(t[r]=[]),t[r].push(n))}return t}const k=(e,t,r,i,a,o)=>C.gen(function*(){let s=[],c=[];for(let{file:e,content:i}of r){let r=S(i,o),l=yield*b(t,e,a,o);s.push({target:l.absoluteTarget,content:r}),c.push({path:l.relativeTarget,hash:n(r)})}c.sort((e,t)=>e.path.localeCompare(t.path));let l=i.files?[...i.files].sort((e,t)=>e.path.localeCompare(t.path)):[],u=l.length===0,d=!1;if(l.length!==c.length)d=!0;else for(let e=0;e<c.length;e++)if(c[e].path!==l[e].path||c[e].hash!==l[e].hash){d=!0;break}let f=u||d?`requires-diff-prompt`:`up-to-date`;return yield*C.succeed({itemName:e,status:f,newFiles:c,files:s})});function A(){return C.gen(function*(){let e={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},n=yield*i,r=yield*f(n.cwd).pipe(C.mapError(u)),o=yield*t(n.cwd,e).pipe(C.mapError(u));return r.configPath?{config:r.config,lockfile:o}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*C.fail(c(`ValidationError`,`No config file found`)))})}function j(e,t){return C.gen(function*(){let n=yield*o,r={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},c=yield*i,u=O(e);return(yield*C.forEach(Object.entries(u),([i,a])=>C.gen(function*(){let o=yield*C.either(p(i,c.cwd,r,t));if(w.isLeft(o))return yield*r.prompt.warn(`Failed to load registry ${i}`),[];let s=o.right.items;return(yield*C.forEach(a,i=>C.gen(function*(){let a=s.find(e=>e.name===i);if(!a)return null;let o=yield*C.all(a.files.map(e=>g(e,a,c.cwd,r,t).pipe(C.map(t=>({file:e,content:t})),C.catchAll(()=>C.succeed(null)))),{concurrency:`unbounded`}).pipe(C.map(e=>e.filter(e=>e!==null))),l=e.components[i],u=yield*C.catchAll(k(i,a,o,l,c.cwd,n),()=>C.succeed(null));if(!u)return null;let d=u;if(d.status===`requires-diff-prompt`){let e=yield*C.forEach(d.files,e=>C.gen(function*(){let t=yield*C.catchAll(r.fs.readFile(e.target,`utf8`),()=>C.succeed(``));return{target:e.target,remoteContent:e.content,localContent:t}}),{concurrency:`unbounded`});return{itemName:i,newFiles:d.newFiles,files:e}}return null}),{concurrency:`unbounded`})).filter(e=>e!==null)}),{concurrency:1})).flat()})}function M(e,t){return C.gen(function*(){let n=yield*C.tryPromise({try:()=>import(`diff`).then(({diffLines:n})=>n(e,t)),catch:u});yield*C.forEach(n,e=>C.sync(()=>{let t=e.added?`green`:e.removed?`red`:`gray`,n=e.added?`+ `:e.removed?`- `:` `,r=e.value.replace(/\n$/,``).split(`
1
+ import{i as e,r as t,t as n}from"./lockfile-CgL_H1L0.mjs";import{a as r,c as i,i as a,l as o,n as s,o as c,r as l,s as u,t as d}from"./index.mjs";import{t as f}from"./config-C76zmAVD.mjs";import{a as p,i as m,n as h,o as g,r as _,t as v}from"./plugins-Bv4KTCC-.mjs";import{i as y,n as b,r as x,t as S}from"./add-BgGH9oUR.mjs";import{Effect as C,Either as w}from"effect";import T from"node:path";import{styleText as E}from"node:util";import D from"node:crypto";function O(e){let t={};for(let n of Object.keys(e.components)){let r=e.components[n].source;r&&(t[r]||(t[r]=[]),t[r].push(n))}return t}const k=(e,t,r,i,a,o)=>C.gen(function*(){let s=[],c=[];for(let{file:e,content:i}of r){let r=S(i,o),l=yield*b(t,e,a,o);s.push({target:l.absoluteTarget,content:r}),c.push({path:l.relativeTarget,hash:n(r)})}c.sort((e,t)=>e.path.localeCompare(t.path));let l=i.files?[...i.files].sort((e,t)=>e.path.localeCompare(t.path)):[],u=l.length===0,d=!1;if(l.length!==c.length)d=!0;else for(let e=0;e<c.length;e++)if(c[e].path!==l[e].path||c[e].hash!==l[e].hash){d=!0;break}let f=u||d?`requires-diff-prompt`:`up-to-date`;return yield*C.succeed({itemName:e,status:f,newFiles:c,files:s})});function A(){return C.gen(function*(){let e={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},n=yield*i,r=yield*f(n.cwd).pipe(C.mapError(u)),o=yield*t(n.cwd,e).pipe(C.mapError(u));return r.configPath?{config:r.config,lockfile:o}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*C.fail(c(`ValidationError`,`No config file found`)))})}function j(e,t){return C.gen(function*(){let n=yield*o,r={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},c=yield*i,u=O(e);return(yield*C.forEach(Object.entries(u),([i,a])=>C.gen(function*(){let o=yield*C.either(p(i,c.cwd,r,t));if(w.isLeft(o))return yield*r.prompt.warn(`Failed to load registry ${i}`),[];let s=o.right.items;return(yield*C.forEach(a,i=>C.gen(function*(){let a=s.find(e=>e.name===i);if(!a)return null;let o=yield*C.all(a.files.map(e=>g(e,a,c.cwd,r,t).pipe(C.map(t=>({file:e,content:t})),C.catchAll(()=>C.succeed(null)))),{concurrency:`unbounded`}).pipe(C.map(e=>e.filter(e=>e!==null))),l=e.components[i],u=yield*C.catchAll(k(i,a,o,l,c.cwd,n),()=>C.succeed(null));if(!u)return null;let d=u;if(d.status===`requires-diff-prompt`){let e=yield*C.forEach(d.files,e=>C.gen(function*(){let t=yield*C.catchAll(r.fs.readFile(e.target,`utf8`),()=>C.succeed(``));return{target:e.target,remoteContent:e.content,localContent:t}}),{concurrency:`unbounded`});return{itemName:i,newFiles:d.newFiles,files:e}}return null}),{concurrency:`unbounded`})).filter(e=>e!==null)}),{concurrency:1})).flat()})}function M(e,t){return C.gen(function*(){let n=yield*C.tryPromise({try:()=>import(`diff`).then(({diffLines:n})=>n(e,t)),catch:u});yield*C.forEach(n,e=>C.sync(()=>{let t=e.added?`green`:e.removed?`red`:`gray`,n=e.added?`+ `:e.removed?`- `:` `,r=e.value.replace(/\n$/,``).split(`
2
2
  `);for(let e of r)console.log(E(t,`${n}${e}`))}),{concurrency:1})})}function N(e){return C.gen(function*(){let t={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a};return{approvedUpdates:(yield*C.forEach(e,e=>C.gen(function*(){yield*t.prompt.info(`Update available for ${e.itemName}`);let n=yield*t.prompt.select({message:`What do you want to do with ${e.itemName}?`,options:[{value:`diff`,label:`Show diff`},{value:`update`,label:`Update`},{value:`skip`,label:`Skip`}]});if((yield*t.prompt.isCancel(n))||n===`skip`)return null;if(n===`diff`){yield*C.forEach(e.files,e=>C.gen(function*(){console.log(E(`bold`,`\nDiff for ${e.target}:`)),yield*M(e.localContent,e.remoteContent)}),{concurrency:1});let n=yield*t.prompt.confirm({message:`Update ${e.itemName} now?`,initialValue:!0});if((yield*t.prompt.isCancel(n))||!n)return null}return e}),{concurrency:1})).filter(e=>e!==null)}})}function P(){return C.gen(function*(){let t=yield*A(),c=C.gen(function*(){let c={fs:yield*d,http:yield*s,process:yield*l,prompt:yield*a},f=yield*i;if(Object.keys(t.lockfile.components).length===0)return yield*c.prompt.info(`No components installed. Nothing to update.`),{kind:`noop`,message:`No components to update.`};let p=[...yield*v((yield*o).plugins||[],f.cwd).pipe(C.mapError(u)),h(),_(),m()],g=yield*j(t.lockfile,p);if(g.length===0)return{kind:`noop`,message:`All components are up to date.`};let b;b=f.args?.flags?.yes?{approvedUpdates:g}:yield*N(g);let S=b.approvedUpdates.length;if(S===0)return{kind:`noop`,message:`No updates approved.`};let w=JSON.parse(JSON.stringify(t.lockfile)),E=[];yield*C.forEach(b.approvedUpdates,e=>C.sync(()=>{e.files.forEach(e=>{E.push({id:e.target,code:e.remoteContent})}),w.components[e.itemName].installedAt=new Date().toISOString()}),{concurrency:`unbounded`});let O=(yield*o).plugins?.filter(e=>typeof e==`object`)||[],k=new x,A=[...O,{name:`regpick:core-update`,async finish(t){`flushToDisk`in t.vfs&&await t.vfs.flushToDisk();for(let e of b.approvedUpdates){let r=[];for(let n of e.files){let e=T.relative(t.cwd,n.target);try{let i=await t.vfs.readFile(n.target,`utf-8`);r.push({path:e,content:i.toString()})}catch{r.push({path:e,content:n.remoteContent})}}w.components[e.itemName].files=r.map(e=>({path:e.path,hash:n(e.content)})).sort((e,t)=>e.path.localeCompare(t.path))}await C.runPromise(e(t.cwd,w,c))}}],M=yield*r,P={id:D.randomUUID(),command:`update`,status:`pending`,plannedFiles:E.map(e=>e.id),lockfileBackup:t.lockfile};return yield*M.writeIntent(P,f.cwd),yield*y({vfs:k,cwd:f.cwd,runtime:c},A,E).pipe(C.tapError(()=>M.clearIntent(f.cwd)),C.catchAll(e=>(k.rollback(),C.gen(function*(){return yield*c.prompt.error(`[Failed] Update aborted: ${e.message}`),yield*C.fail(e)}))),C.tap(()=>M.clearIntent(f.cwd))),{kind:`success`,message:`Updated ${S} components.`}});return yield*C.provideService(c,o,t.config)})}export{P as runUpdateCommand};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "regpick",
3
- "version": "0.20.1",
3
+ "version": "0.20.3",
4
4
  "description": "Lightweight CLI for selecting and installing registry entries.",
5
5
  "keywords": [
6
6
  "cli",
@@ -32,9 +32,10 @@
32
32
  "regpick.config.schema.json"
33
33
  ],
34
34
  "type": "module",
35
- "main": "./dist/index.mjs",
35
+ "types": "./dist/index.d.mts",
36
36
  "exports": {
37
- ".": "./dist/index.mjs"
37
+ ".": "./dist/index.mjs",
38
+ "./package.json": "./package.json"
38
39
  },
39
40
  "scripts": {
40
41
  "docs:dev": "npm run dev --prefix website",
@@ -57,26 +58,25 @@
57
58
  "prepare": "husky"
58
59
  },
59
60
  "dependencies": {
60
- "@clack/prompts": "^1.0.1",
61
+ "@clack/prompts": "^1.1.0",
61
62
  "diff": "^8.0.3",
62
63
  "effect": "^3.19.19",
63
64
  "memfs": "^4.56.10",
64
65
  "unconfig": "^7.5.0"
65
66
  },
66
67
  "devDependencies": {
67
- "@commitlint/cli": "^20.4.2",
68
- "@commitlint/config-conventional": "^20.4.2",
68
+ "@commitlint/cli": "^20.4.3",
69
+ "@commitlint/config-conventional": "^20.4.3",
69
70
  "@release-it/conventional-changelog": "^10.0.5",
70
- "@types/diff": "^7.0.2",
71
- "@types/node": "^24.3.0",
71
+ "@types/node": "^24.3.3",
72
72
  "@vitest/coverage-v8": "^4.0.18",
73
73
  "husky": "^9.1.7",
74
74
  "oxfmt": "^0.36.0",
75
75
  "oxlint": "^1.51.0",
76
76
  "release-it": "^19.2.4",
77
- "tsdown": "^0.21.0-beta.2",
78
- "tsx": "^4.20.5",
79
- "typescript": "^5.9.2",
77
+ "tsdown": "^0.21.0",
78
+ "tsx": "^4.21.0",
79
+ "typescript": "^5.9.3",
80
80
  "vite-tsconfig-paths": "^6.1.1",
81
81
  "vitest": "^4.0.18"
82
82
  },