regpick 0.20.0 → 0.20.2
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-CtQH2yQW.mjs +2 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +2 -2
- package/dist/init-DRGlfhSr.mjs +1 -0
- package/dist/list-u1AZTg3F.mjs +1 -0
- package/dist/lockfile-CgL_H1L0.mjs +3 -0
- package/dist/pack-DPpPIJVF.mjs +1 -0
- package/dist/{plugins-B2_dJlD9.mjs → plugins-Bv4KTCC-.mjs} +1 -1
- package/dist/runtime-CRLKtcLE.mjs +1 -0
- package/dist/update-MBdxGA_y.mjs +2 -0
- package/package.json +11 -12
- package/dist/add-BYsB1qok.mjs +0 -2
- package/dist/init-CrSPZblA.mjs +0 -1
- package/dist/list-3KUJXe3D.mjs +0 -1
- package/dist/lockfile-DpP9ihXE.mjs +0 -3
- package/dist/pack-_9Mhp1qL.mjs +0 -1
- package/dist/rolldown-runtime-DR3Ue2cl.mjs +0 -1
- package/dist/update-Bcjwyyvz.mjs +0 -2
- /package/dist/{config-mVvW7xo7.mjs → config-C76zmAVD.mjs} +0 -0
|
@@ -0,0 +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(`
|
|
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};
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{i as e}from"./lockfile-CgL_H1L0.mjs";import{Context as t,Data as n,Effect as r,Layer as i}from"effect";import a from"node:path";import{styleText as o}from"node:util";var s=class extends t.Tag(`CommandContext`)(){},c=class extends t.Tag(`RegpickConfig`)(){},l=class extends n.TaggedError(`ConfigError`){},u=class extends n.TaggedError(`RegistryError`){},d=class extends n.TaggedError(`InstallError`){},f=class extends n.TaggedError(`UserCancelled`){},p=class extends n.TaggedError(`ValidationError`){},m=class extends n.TaggedError(`RuntimeError`){},h=class extends n.TaggedError(`FileSystemError`){},g=class extends n.TaggedError(`JsonError`){},_=class extends n.TaggedError(`NetworkError`){},v=class extends n.TaggedError(`PluginError`){},y=class extends n.TaggedError(`VfsError`){};function b(e,t,n){switch(e){case`ConfigError`:return new l({message:t,cause:n});case`RegistryError`:return new u({message:t,cause:n});case`InstallError`:return new d({message:t,cause:n});case`UserCancelled`:return new f({message:t,cause:n});case`ValidationError`:return new p({message:t,cause:n});case`RuntimeError`:return new m({message:t,cause:n});case`FileSystemError`:return new h({message:t,cause:n});case`JsonError`:return new g({message:t,cause:n});case`NetworkError`:return new _({message:t,cause:n});case`PluginError`:return new v({message:t,cause:n});case`VfsError`:return new y({message:t,cause:n})}}function x(e,t=`RuntimeError`){if(typeof e==`object`&&e&&`_tag`in e){let t=e;if(t._tag===`ConfigError`||t._tag===`RegistryError`||t._tag===`InstallError`||t._tag===`UserCancelled`||t._tag===`ValidationError`||t._tag===`RuntimeError`||t._tag===`FileSystemError`||t._tag===`JsonError`||t._tag===`NetworkError`||t._tag===`PluginError`||t._tag===`VfsError`)return t}return e instanceof Error?b(t,e.message,e):b(t,typeof e==`object`&&e&&`message`in e?String(e.message):String(e),e)}var S=class extends t.Tag(`JournalService`)(){},C=class extends t.Tag(`FileSystemPort`)(){},w=class extends t.Tag(`HttpPort`)(){},T=class extends t.Tag(`PromptPort`)(){},E=class extends t.Tag(`ProcessPort`)(){};function D(e){return a.join(e,`node_modules`,`.cache`,`regpick`,`journal.json`)}const O=S.of({writeIntent:(e,t)=>r.gen(function*(){let n={fs:yield*C,http:yield*w,process:yield*E,prompt:yield*T},r=D(t);yield*n.fs.ensureDir(a.dirname(r)),yield*n.fs.writeJson(r,e,{spaces:2})}),clearIntent:e=>r.gen(function*(){let t={fs:yield*C,http:yield*w,process:yield*E,prompt:yield*T},n=D(e);yield*t.fs.remove(n).pipe(r.ignore)}),rollbackIntent:t=>r.gen(function*(){let n={fs:yield*C,http:yield*w,process:yield*E,prompt:yield*T},i=D(t);if(!(yield*n.fs.pathExists(i)))return!1;let a=yield*n.fs.readJsonSync(i).pipe(r.catchAll(()=>r.succeed(null)));if(!a||a.status!==`pending`)return yield*n.fs.remove(i).pipe(r.ignore),!1;for(let e of a.plannedFiles||[])yield*n.fs.remove(e).pipe(r.ignore);return a.lockfileBackup&&(yield*e(t,a.lockfileBackup,n).pipe(r.ignore)),yield*n.fs.remove(i).pipe(r.ignore),!0})});function k(e){return e===`true`?!0:e===`false`?!1:e}function A(e){let t={},n=[];for(let r of e){if(!r.startsWith(`--`)){n.push(r);continue}let e=r.slice(2),i=e.indexOf(`=`);if(i===-1){t[e]=!0;continue}let a=e.slice(0,i);t[a]=k(e.slice(i+1))}return{flags:t,positionals:n}}function j(){console.log(`
|
|
2
2
|
Usage:
|
|
3
3
|
regpick init
|
|
4
4
|
regpick list [registry-name-or-url]
|
|
@@ -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
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,i as t,n,o as r,r as i,s as a,t as o}from"./index.mjs";import{a as s,n as c,r as l,t as u}from"./config-C76zmAVD.mjs";import{Effect as d,Schema as f}from"effect";import p from"node:path";function m(e,t){return e?`cancelled`:t?`overwrite`:`keep`}const h=()=>d.gen(function*(){let r={fs:yield*o,http:yield*n,process:yield*i,prompt:yield*t},s=yield*e,l=yield*c(s.cwd).pipe(d.mapError(a)),f=(yield*d.either(r.fs.stat(l)))._tag===`Right`,{config:p}=yield*u(s.cwd).pipe(d.mapError(a));return{configPath:l,exists:f,existingConfig:p}}),g=a=>d.gen(function*(){let c={fs:yield*o,http:yield*n,process:yield*i,prompt:yield*t},l=yield*e;if(a.exists){let e=yield*c.prompt.confirm({message:`${a.configPath} already exists. Overwrite?`,initialValue:!1}),t=m(yield*c.prompt.isCancel(e),e===!0);if(t===`cancelled`)return yield*d.fail(r(`UserCancelled`,`Operation cancelled.`));if(t===`keep`)return yield*c.prompt.info(`Keeping existing configuration.`),null}let u=!!l.args.flags.yes,p=u?`auto`:yield*c.prompt.select({message:`What package manager do you use?`,options:[{value:`auto`,label:`Auto (detection)`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`pnpm`,label:`pnpm`}]}),h=yield*c.prompt.isCancel(p);if(!u&&h)return yield*d.fail(r(`UserCancelled`,`Operation cancelled.`));let g=u?`src/components/ui`:yield*c.prompt.text({message:`What folder do you keep your UI components in?`,placeholder:`src/components/ui`}),_=yield*c.prompt.isCancel(g);if(!u&&_)return yield*d.fail(r(`UserCancelled`,`Operation cancelled.`));let v=u?`prompt`:yield*c.prompt.select({message:`Do you want to overwrite files automatically, or do you prefer to be asked?`,options:[{value:`prompt`,label:`Ask (prompt)`},{value:`overwrite`,label:`Always overwrite (overwrite)`},{value:`skip`,label:`Skip overwriting (skip)`}]}),y=yield*c.prompt.isCancel(v);if(!u&&y)return yield*d.fail(r(`UserCancelled`,`Operation cancelled.`));let b={...a.existingConfig,install:{packageManager:String(p),overwritePolicy:String(v)},resolve:{targets:{...a.existingConfig.resolve?.targets,"registry:component":String(g||`src/components/ui`),"registry:file":String(g||`src/components/ui`),"registry:icon":`${String(g||`src/components/ui`)}/icons`}}};return{newConfig:f.decodeUnknownSync(s)(b),configPath:a.configPath,isOverwrite:a.exists}}),_=()=>d.gen(function*(){let e={fs:yield*o,http:yield*n,process:yield*i,prompt:yield*t},r=yield*g(yield*h());if(!r)return{kind:`noop`,message:`Keeping existing configuration.`};let a=p.extname(r.configPath).slice(1),s=[`ts`,`mjs`,`cjs`,`js`,`json`].includes(a)?a:`json`,c=l(r.newConfig,s);return yield*d.catchAll(e.fs.writeFile(r.configPath,c,`utf8`),t=>d.gen(function*(){return yield*e.prompt.error(`Failed to write config file: ${r.configPath}`),yield*d.fail(t)})),yield*e.prompt.success(`${r.isOverwrite?`Overwrote`:`Created`} ${r.configPath}`),{kind:`success`,message:`${r.isOverwrite?`Overwrote`:`Created`} ${r.configPath}`}});export{_ as runInitCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./lockfile-CgL_H1L0.mjs";import{c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./index.mjs";import{t as c}from"./config-C76zmAVD.mjs";import{a as l,i as u,n as d,r as f,t as p}from"./plugins-Bv4KTCC-.mjs";import{Effect as m}from"effect";function h(e,t){return e?t[e]?String(t[e]):e:null}function g(e,t){let n=h(e,t);if(n)return{source:n,requiresPrompt:!1};let r=Object.keys(t)[0];return r?{source:h(r,t),requiresPrompt:!1}:{source:null,requiresPrompt:!0}}function _(){return m.gen(function*(){let e=yield*t,n=yield*c(e.cwd).pipe(m.mapError(o)),r=g(e.args.positionals[1],n.config.registry?.sources||{}),i=[...yield*p(n.config.plugins||[],e.cwd).pipe(m.mapError(o)),d(),f(),u()];return{source:r.source,requiresPrompt:r.requiresPrompt,plugins:i}})}function v(e){return m.gen(function*(){let t={fs:yield*s,http:yield*r,process:yield*a,prompt:yield*n};if(!e.requiresPrompt)return e.source;let o=yield*t.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return(yield*t.prompt.isCancel(o))?yield*m.fail(i(`UserCancelled`,`Operation cancelled.`)):String(o)})}function y(e,i){return m.gen(function*(){let o={fs:yield*s,http:yield*r,process:yield*a,prompt:yield*n},{items:c}=yield*l(e,(yield*t).cwd,o,i);return c})}function b(e,t){let n=e.type||`registry:file`,r=Array.isArray(e.files)?e.files.length:0,i=``;if(t&&t.components&&t.components[e.name]){let n=t.components[e.name],r=n.installedAt?new Date(n.installedAt).toLocaleString():`Unknown date`;i=` \x1b[32m[Installed: ${n.version?`v${n.version}, `:``}${r}]\x1b[0m`}return`${e.name} (${n}, files: ${r})${i}`}function x(e,t){return m.gen(function*(){yield*{fs:yield*s,http:yield*r,process:yield*a,prompt:yield*n}.prompt.info(`Found ${e.length} items.`),yield*m.forEach(e,e=>m.sync(()=>{console.log(`- ${b(e,t)}`)}),{concurrency:1})})}function S(){return m.gen(function*(){let i={fs:yield*s,http:yield*r,process:yield*a,prompt:yield*n},o=yield*_(),c=yield*v(o);if(!c)return{kind:`noop`,message:`No registry source provided.`};let l=yield*y(c,o.plugins);return l.length?(yield*x(l,yield*e((yield*t).cwd,i)),{kind:`success`,message:`Listed ${l.length} item(s).`}):(yield*i.prompt.warn(`No items found in registry.`),{kind:`noop`,message:`No items found in registry.`})})}export{S as runListCommand};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{Effect as e,Schema as t}from"effect";import n from"node:path";import r from"node:crypto";var i=Object.defineProperty,a=((e,t)=>{let n={};for(var r in e)i(n,r,{get:e[r],enumerable:!0});return t||i(n,Symbol.toStringTag,{value:`Module`}),n})({ComponentLockSchema:()=>s,FileLockSchema:()=>o,RegpickLockfileSchema:()=>c,computeHash:()=>f,computeTreeHash:()=>p,getLockfilePath:()=>l,readLockfile:()=>u,writeLockfile:()=>d});const o=t.Struct({path:t.String,hash:t.String}),s=t.Struct({version:t.optional(t.String),installedAt:t.String,source:t.optional(t.String),dependencies:t.optional(t.Array(t.String)),files:t.Array(o)}),c=t.mutable(t.Struct({lockfileVersion:t.Literal(2),components:t.mutable(t.Record({key:t.String,value:s}))}));function l(e){return n.join(e,`regpick-lock.json`)}function u(n,r){let i=l(n);return e.gen(function*(){if(!(yield*r.fs.pathExists(i)))return{lockfileVersion:2,components:{}};let n=yield*e.exit(r.fs.readJsonSync(i));if(n._tag!==`Success`)return{lockfileVersion:2,components:{}};let a=t.decodeUnknownEither(c)(n.value);return a._tag===`Right`?a.right:{lockfileVersion:2,components:{}}})}function d(e,t,n){let r=l(e),i={};for(let e of Object.keys(t.components).sort()){let n=t.components[e];i[e]={...n,files:[...n.files].sort((e,t)=>e.path.localeCompare(t.path))}}let a={lockfileVersion:2,components:i};return n.fs.writeJson(r,a,{spaces:2})}function f(e){return r.createHash(`sha256`).update(e).digest(`hex`)}function p(e){let t=[...e].sort((e,t)=>e.path.localeCompare(t.path)).map(e=>`${e.path}:${e.content}`).join(`
|
|
2
|
+
---
|
|
3
|
+
`);return r.createHash(`sha256`).update(t).digest(`hex`)}export{d as i,a as n,u as r,f as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,i as t,n,o as r,r as i,t as a}from"./index.mjs";import{Effect as o}from"effect";import s from"node:path";function c(e){let t=/import\s+[\s\S]*?from\s+["']([^"']+)["']/g,n=/import\(["']([^"']+)["']\)/g,r=new Set,i;for(;(i=t.exec(e))!==null;){let e=i[1];if(!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`~`)&&!e.startsWith(`@/`)&&!e.startsWith(`@\\`)){let t=e.split(`/`);e.startsWith(`@`)&&t.length>1?r.add(`${t[0]}/${t[1]}`):r.add(t[0])}}for(;(i=n.exec(e))!==null;){let e=i[1];if(!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`~`)&&!e.startsWith(`@/`)&&!e.startsWith(`@\\`)){let t=e.split(`/`);e.startsWith(`@`)&&t.length>1?r.add(`${t[0]}/${t[1]}`):r.add(t[0])}}return Array.from(r)}function l(e){let t=c(e.content),n=s.relative(e.targetDir,e.path).replace(/\\/g,`/`),r=s.basename(e.path,s.extname(e.path));return{name:r,title:r,description:`Packed component`,type:`registry:component`,dependencies:t,devDependencies:[],registryDependencies:[],files:[{path:n,type:`registry:component`}]}}const u=e=>o.gen(function*(){let r={fs:yield*a,http:yield*n,process:yield*i,prompt:yield*t},c=[],l=e=>o.gen(function*(){let t=yield*r.fs.readdir(e);yield*o.forEach(t,t=>o.gen(function*(){let n=s.join(e,t);(yield*r.fs.stat(n)).isDirectory()?yield*l(n):(n.endsWith(`.ts`)||n.endsWith(`.tsx`))&&c.push(n)}),{concurrency:1})});return yield*l(e),c}),d=()=>o.gen(function*(){let c={fs:yield*a,http:yield*n,process:yield*i,prompt:yield*t},l=yield*e,d=l.args.positionals[1]||`.`,f=s.resolve(l.cwd,d);return(yield*c.fs.stat(f)).isDirectory()||(yield*o.fail(r(`ValidationError`,`Target is not a directory: ${f}`))),yield*c.prompt.info(`Scanning ${f} for components...`),{targetDir:f,files:yield*u(f)}}),f=r=>o.gen(function*(){let c={fs:yield*a,http:yield*n,process:yield*i,prompt:yield*t},u=yield*e,d=yield*o.forEach(r.files,e=>o.gen(function*(){return l({path:e,content:yield*c.fs.readFile(e,`utf8`),targetDir:r.targetDir})}),{concurrency:10}),f=s.join(u.cwd,`registry.json`);return{items:Array.from(d),outPath:f,fileCount:r.files.length}});function p(){return o.gen(function*(){let e={fs:yield*a,http:yield*n,process:yield*i,prompt:yield*t},r=yield*d();if(r.files.length===0)return yield*e.prompt.warn(`No .ts or .tsx files found.`),{kind:`noop`,message:`No files found.`};let s=yield*f(r),c=JSON.stringify({name:`my-registry`,items:s.items},null,2);return yield*o.catchAll(e.fs.writeFile(s.outPath,c,`utf8`),t=>o.gen(function*(){return yield*e.prompt.error(`Failed to write registry file: ${s.outPath}`),yield*o.fail(t)})),yield*e.prompt.success(`Packed ${s.items.length} components into registry.json`),{kind:`success`,message:`Generated registry.json`}})}export{p as runPackCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as e}from"./index.mjs";import{i as t}from"./config-C76zmAVD.mjs";import{Effect as n,Either as r,Option as i,Schema as a}from"effect";import o from"node:path";import{fileURLToPath as s,pathToFileURL as c}from"node:url";const l=a.Struct({path:a.optionalWith(a.String,{exact:!0}),target:a.optionalWith(a.String,{exact:!0}),type:a.optionalWith(a.String,{exact:!0,default:()=>`registry:file`}),content:a.optionalWith(a.String,{exact:!0}),url:a.optionalWith(a.String,{exact:!0})}),u=a.Struct({name:a.optionalWith(a.String,{exact:!0,default:()=>`unnamed-item`}),title:a.optionalWith(a.String,{exact:!0}),description:a.optionalWith(a.String,{exact:!0,default:()=>``}),type:a.optionalWith(a.String,{exact:!0,default:()=>`registry:file`}),dependencies:a.optionalWith(a.Array(a.String),{exact:!0,default:()=>[]}),devDependencies:a.optionalWith(a.Array(a.String),{exact:!0,default:()=>[]}),registryDependencies:a.optionalWith(a.Array(a.String),{exact:!0,default:()=>[]}),files:a.optionalWith(a.Array(l),{exact:!0,default:()=>[]})});a.Struct({type:a.String,originalSource:a.optionalWith(a.String,{exact:!0}),pluginState:a.optionalWith(a.Record({key:a.String,value:a.Unknown}),{exact:!0})});function d(e,t){let n=a.decodeUnknownSync(u)(e),r=n.name===`unnamed-item`&&n.title?n.title:n.name,i=n.title??r,o=n.files.map(e=>({...e,type:e.type===`registry:file`&&n.type!==`registry:file`?n.type:e.type}));return{...n,name:r,title:i,files:o,sourceMeta:t}}const f=a.Struct({url:a.optionalWith(a.String,{exact:!0}),href:a.optionalWith(a.String,{exact:!0}),path:a.optionalWith(a.String,{exact:!0}),files:a.optionalWith(a.Unknown,{exact:!0})}),p=a.Struct({items:a.Array(a.Union(a.Record({key:a.String,value:a.Unknown}),f))});function m(e){let t=a.decodeUnknownEither(p)(e);return t._tag===`Left`?[]:t.right.items.map(e=>{let t=e;return`files`in t&&Array.isArray(t.files)?null:typeof t.url==`string`?t.url:typeof t.href==`string`?t.href:typeof t.path==`string`?t.path:null}).filter(e=>!!e)}const h=a.Struct({files:a.Array(a.Unknown)});function g(t,r){try{if(Array.isArray(t)){let e=t.filter(e=>!!(e&&typeof e==`object`)).map(e=>d(e,r));return n.succeed(e)}let i=a.decodeUnknownEither(p)(t);if(i._tag===`Right`){let e=i.right.items.filter(e=>`files`in e&&Array.isArray(e.files));return n.succeed(e.map(e=>d(e,r)))}return a.decodeUnknownEither(h)(t)._tag===`Right`?n.succeed([d(t,r)]):n.fail(e(`RegistryError`,`Unsupported manifest structure.`))}catch(t){return t?.name===`ParseError`?n.fail(e(`ValidationError`,`Manifest validation failed: ${t.message}`)):n.fail(e(`RegistryError`,`Failed to parse manifest`))}}function _(t,r,i,a,o){return n.gen(function*(){for(let s of o){if(!s.resolveId||!s.load)continue;let o=yield*n.tryPromise({try:async()=>s.resolveId(t,i||r,{cwd:r,runtime:a}),catch:n=>n&&typeof n==`object`&&`_tag`in n?n:e(`RegistryError`,`Failed to resolve ${t}: ${n instanceof Error?n.message:String(n)}`,n)});if(!o)continue;let c=yield*n.tryPromise({try:async()=>s.load(o,{cwd:r,runtime:a}),catch:t=>t&&typeof t==`object`&&`_tag`in t?t:e(`RegistryError`,`Failed to load ${o}: ${t instanceof Error?t.message:String(t)}`,t)});if(c!=null)return{plugin:s,resolvedId:o,content:c}}return yield*n.fail(e(`RegistryError`,`No suitable plugin found to resolve: ${t}`))})}function v(t,i,a,o,s){return n.gen(function*(){let c=yield*n.either(_(t,i,a.originalSource,o,s));if(r.isLeft(c)){let r=c.left;return r._tag===`RegistryError`&&r.message.includes(`No suitable plugin`)?yield*n.fail(e(`RegistryError`,`Could not resolve reference: ${t}`)):yield*n.fail(r)}let{resolvedId:l,content:u}=c.right,f;return f=typeof u==`string`?yield*n.try({try:()=>JSON.parse(u),catch:()=>e(`RegistryError`,`Failed to parse JSON for ${l}`)}):u,f&&typeof f==`object`?d(f,a):null})}function y(e,t,r,i,a){return n.gen(function*(){let o=g(e,r);if(!e||typeof e!=`object`||Array.isArray(e))return yield*o;let s=m(e);if(!s.length)return yield*o;let c=yield*n.catchAll(o,()=>n.succeed([])),l=yield*n.all(s.map(e=>v(e,t,r,i,a)),{concurrency:`unbounded`}).pipe(n.map(e=>e.filter(e=>e!==null)));return[...c,...l]})}function b(t,i,a,o){return n.gen(function*(){if(!t)return yield*n.fail(e(`ValidationError`,`Registry source is required.`));let s=yield*n.either(_(t,i,void 0,a,o));if(r.isLeft(s)){let r=s.left;return r._tag===`RegistryError`&&r.message.includes(`No suitable plugin found`)?yield*n.fail(e(`RegistryError`,`No suitable plugin found for source: ${t}`)):yield*n.fail(r)}let{resolvedId:c,content:l}=s.right;if(l&&typeof l==`object`&&`ok`in l&&l.ok===!1)return yield*n.fail(l.error);let u=l&&typeof l==`object`&&`value`in l?l.value:l,d=[];u&&typeof u==`object`&&`items`in u&&Array.isArray(u.items)?d=u.items:u&&typeof u==`object`&&`rawData`in u?d=yield*y(u.rawData,i,u.sourceMeta,a,o):(u&&typeof u==`object`||Array.isArray(u))&&(d=yield*y(u,i,{type:`system`,originalSource:c},a,o));let f=(u&&typeof u==`object`&&`resolvedSource`in u?u.resolvedSource:void 0)||t;return{items:d.map(e=>({...e,sourceMeta:{...e.sourceMeta,originalSource:f}})),source:f}})}function x(t,i,a,o,s){return n.gen(function*(){if(typeof t.content==`string`)return t.content;let c=t.url||t.path;if(!c)return yield*n.fail(e(`ValidationError`,`File entry in "${i.name}" is missing both content and path/url.`));let l=yield*n.either(_(c,a,i.sourceMeta.originalSource||a,o,s));if(r.isLeft(l)){let t=l.left;return t._tag===`RegistryError`&&t.message.includes(`No suitable plugin found`)?yield*n.fail(e(`RegistryError`,`No suitable plugin found to resolve file content for: ${c}`)):yield*n.fail(t)}let{content:u}=l.right;return typeof u==`string`?u:JSON.stringify(u,null,2)})}function S(e){return/^file:\/\//i.test(e)}function C(){return{name:`directory`,async resolveId(e,t,n){if(S(e))return e;let r;if(t&&S(t)){let n=o.dirname(s(new URL(t)));r=o.resolve(n,e)}else if(t&&o.isAbsolute(t)){let n=o.dirname(t);r=o.resolve(n,e)}else if(o.isAbsolute(e))r=e;else if(n)r=o.resolve(n.cwd,e);else return null;return c(r).toString()},async load(e,t){if(!S(e)||!t?.runtime?.fs)return null;let r=s(new URL(e)),i=n.gen(function*(){if(!(yield*t.runtime.fs.stat(r)).isDirectory())return null;let i=(yield*t.runtime.fs.readdir(r)).filter(e=>e.endsWith(`.json`));return{items:(yield*n.all(i.map(e=>{let i=o.join(r,e);return n.gen(function*(){let e=yield*t.runtime.fs.readFile(i,`utf8`),n=JSON.parse(e);return n&&typeof n==`object`&&`files`in n&&Array.isArray(n.files)?n:null}).pipe(n.catchAll(()=>n.succeed(null)))}),{concurrency:`unbounded`})).filter(e=>e!==null),resolvedSource:e}}).pipe(n.catchAll(()=>n.succeed(null)));return n.runPromise(i)}}}function w(e){return/^file:\/\//i.test(e)}function T(){return{name:`file`,async resolveId(e,t,n){if(w(e))return e;let r;if(t&&w(t)){let n=o.dirname(s(new URL(t)));r=o.resolve(n,e)}else if(t&&o.isAbsolute(t)){let n=o.dirname(t);r=o.resolve(n,e)}else if(o.isAbsolute(e))r=e;else if(n&&e.endsWith(`.json`))r=o.resolve(n.cwd,e);else return null;return c(r).toString()},async load(e,t){if(!w(e)||!t?.runtime?.fs)return null;let r=s(new URL(e)),i=n.gen(function*(){if((yield*t.runtime.fs.stat(r)).isDirectory())return null;let e=yield*t.runtime.fs.readFile(r,`utf8`);try{return JSON.parse(e)}catch{return e}}).pipe(n.catchAll(()=>n.succeed(null)));return n.runPromise(i)}}}function E(){return{name:`http`,async resolveId(e,t,n){return e.includes(`github.com`)&&e.includes(`/blob/`)&&(e=e.replace(`github.com`,`raw.githubusercontent.com`).replace(`/blob/`,`/`)),e.startsWith(`http://`)||e.startsWith(`https://`)?e:t&&(t.startsWith(`http://`)||t.startsWith(`https://`))?new URL(e,t).toString():null},async load(e,t){if(!e.startsWith(`http://`)&&!e.startsWith(`https://`)||!t)return null;let r=t.runtime.http.getText(e).pipe(n.map(e=>{try{return JSON.parse(e)}catch{return e}}));return n.runPromise(r)}}}function D(e,r){let s=a.decodeUnknownOption(t);return n.all(e.map(e=>{if(typeof e==`string`){let t=e;return(e.startsWith(`.`)||e.startsWith(`/`))&&(t=o.resolve(r,e)),n.tryPromise({try:()=>import(t).then(e=>e.default||e.plugin||e),catch:t=>Error(`[regpick] Failed to load plugin module: ${e} - ${t instanceof Error?t.message:String(t)}`)}).pipe(n.flatMap(t=>i.match(s(t),{onNone:()=>n.fail(Error(`[regpick] Invalid plugin provided from module: ${e}`)),onSome:e=>n.succeed(e)})),n.catchAll(e=>(console.warn(e.message),n.succeed(null))))}return i.match(s(e),{onNone:()=>(console.warn(`[regpick] Invalid plugin provided`),n.succeed(null)),onSome:e=>n.succeed(e)})}),{concurrency:`unbounded`}).pipe(n.map(e=>e.filter(e=>e!==null)))}export{b as a,C as i,E as n,x as o,T as r,D as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,n as t,o as n,r,t as i}from"./index.mjs";import{Effect as a,Layer as o}from"effect";import s from"node:fs/promises";import{spawnSync as c}from"node:child_process";import l from"node:fs";const u=()=>o.succeed(i,{existsSync:e=>l.existsSync(e),pathExists:e=>a.promise(async()=>{try{return await s.access(e),!0}catch{return!1}}),remove:e=>a.tryPromise({try:()=>s.rm(e,{recursive:!0,force:!0}),catch:t=>n(`FileSystemError`,`Failed to remove ${e}`,t)}),ensureDir:e=>a.tryPromise({try:()=>s.mkdir(e,{recursive:!0}),catch:t=>n(`FileSystemError`,`Failed to ensure directory: ${e}`,t)}),writeFile:(e,t,r)=>a.tryPromise({try:()=>s.writeFile(e,t,r),catch:t=>n(`FileSystemError`,`Failed to write file: ${e}`,t)}),readFile:(e,t)=>a.tryPromise({try:()=>s.readFile(e,t).then(e=>e.toString()),catch:t=>n(`FileSystemError`,`Failed to read file: ${e}`,t)}),readJsonSync:e=>a.try({try:()=>{let t=l.readFileSync(e,`utf8`);return JSON.parse(t)},catch:t=>n(`JsonError`,`Failed to read JSON: ${e}`,t)}),writeJson:(e,t,r)=>a.tryPromise({try:()=>{let n=JSON.stringify(t,null,r?.spaces??2);return s.writeFile(e,n,`utf8`)},catch:t=>n(`JsonError`,`Failed to write JSON: ${e}`,t)}),stat:e=>a.tryPromise({try:()=>s.stat(e),catch:t=>n(`FileSystemError`,`Failed to stat path: ${e}`,t)}),readdir:e=>a.tryPromise({try:()=>s.readdir(e),catch:t=>n(`FileSystemError`,`Failed to read directory: ${e}`,t)})}),d=e=>o.succeed(t,{getJson:(t,r=15e3)=>a.tryPromise({try:async()=>{let n=await fetch(t,{signal:e?.signal||AbortSignal.timeout(r)});if(!n.ok)throw Error(`HTTP error! status: ${n.status} when fetching JSON from: ${t}`);return await n.json()},catch:e=>n(`NetworkError`,`Failed to fetch JSON from: ${t}`,e)}),getText:(t,r=15e3)=>a.tryPromise({try:async()=>{let n=await fetch(t,{signal:e?.signal||AbortSignal.timeout(r)});if(!n.ok)throw Error(`HTTP error! status: ${n.status} when fetching text from: ${t}`);return await n.text()},catch:e=>n(`NetworkError`,`Failed to fetch text from: ${t}`,e)})}),f=()=>o.succeed(e,{intro:e=>a.promise(async()=>{let{intro:t}=await import(`@clack/prompts`);t(e)}),outro:e=>a.promise(async()=>{let{outro:t}=await import(`@clack/prompts`);t(e)}),cancel:e=>a.promise(async()=>{let{cancel:t}=await import(`@clack/prompts`);t(e)}),isCancel:e=>a.sync(()=>typeof e==`symbol`&&e.description===`clack:cancel`),info:e=>a.promise(async()=>{let{log:t}=await import(`@clack/prompts`);t.info(e)}),warn:e=>a.promise(async()=>{let{log:t}=await import(`@clack/prompts`);t.warn(e)}),error:e=>a.promise(async()=>{let{log:t}=await import(`@clack/prompts`);t.error(e)}),success:e=>a.promise(async()=>{let{log:t}=await import(`@clack/prompts`);t.success(e)}),text:e=>a.promise(async()=>{let{text:t}=await import(`@clack/prompts`);return t(e)}),confirm:e=>a.promise(async()=>{let{confirm:t}=await import(`@clack/prompts`);return t(e)}),select:e=>a.promise(async()=>{let{select:t}=await import(`@clack/prompts`);return t(e)}),multiselect:e=>a.promise(async()=>{let{multiselect:t}=await import(`@clack/prompts`);return t(e)}),autocompleteMultiselect:e=>a.promise(async()=>{let t=await import(`@clack/prompts`);return t.autocompleteMultiselect?t.autocompleteMultiselect(e):t.multiselect(e)})}),p=()=>o.succeed(r,{run:(e,t,n)=>({status:c(e,t,{stdio:`inherit`,cwd:n,shell:!0}).status})}),m=e=>o.mergeAll(u(),d(e),f(),p());export{m as createRuntimeLive};
|
|
@@ -0,0 +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(`
|
|
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.
|
|
3
|
+
"version": "0.20.2",
|
|
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
|
-
"
|
|
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,27 +58,25 @@
|
|
|
57
58
|
"prepare": "husky"
|
|
58
59
|
},
|
|
59
60
|
"dependencies": {
|
|
60
|
-
"@clack/prompts": "^1.0
|
|
61
|
-
"@effect/schema": "^0.75.5",
|
|
61
|
+
"@clack/prompts": "^1.1.0",
|
|
62
62
|
"diff": "^8.0.3",
|
|
63
63
|
"effect": "^3.19.19",
|
|
64
64
|
"memfs": "^4.56.10",
|
|
65
65
|
"unconfig": "^7.5.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@commitlint/cli": "^20.4.
|
|
69
|
-
"@commitlint/config-conventional": "^20.4.
|
|
68
|
+
"@commitlint/cli": "^20.4.3",
|
|
69
|
+
"@commitlint/config-conventional": "^20.4.3",
|
|
70
70
|
"@release-it/conventional-changelog": "^10.0.5",
|
|
71
|
-
"@types/
|
|
72
|
-
"@types/node": "^24.3.0",
|
|
71
|
+
"@types/node": "^24.3.3",
|
|
73
72
|
"@vitest/coverage-v8": "^4.0.18",
|
|
74
73
|
"husky": "^9.1.7",
|
|
75
74
|
"oxfmt": "^0.36.0",
|
|
76
75
|
"oxlint": "^1.51.0",
|
|
77
76
|
"release-it": "^19.2.4",
|
|
78
|
-
"tsdown": "^0.21.0
|
|
79
|
-
"tsx": "^4.
|
|
80
|
-
"typescript": "^5.9.
|
|
77
|
+
"tsdown": "^0.21.0",
|
|
78
|
+
"tsx": "^4.21.0",
|
|
79
|
+
"typescript": "^5.9.3",
|
|
81
80
|
"vite-tsconfig-paths": "^6.1.1",
|
|
82
81
|
"vitest": "^4.0.18"
|
|
83
82
|
},
|
package/dist/add-BYsB1qok.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t,t as n}from"./lockfile-DpP9ihXE.mjs";import{a as r,i,n as a,o,r as s,t as c}from"./index.mjs";import{o as l,t as u}from"./config-mVvW7xo7.mjs";import{a as d,i as f,n as p,o as m,r as h,t as g}from"./plugins-B2_dJlD9.mjs";import{Array as _,Effect as v,Schema as y}from"effect";import b from"node:path";import x from"node:crypto";import S from"node:fs/promises";import{Volume as C}from"memfs";const w=(e,t,n)=>v.gen(function*(){yield*v.forEach(t,t=>v.gen(function*(){t.start&&(yield*v.tryPromise({try:()=>t.start(e),catch:e=>s(`PluginError`,`[${t.name}] Failed during start hook: ${e instanceof Error?e.message:String(e)}`)}))}),{concurrency:1});let r=yield*v.forEach(n,n=>v.gen(function*(){let r=n.id;for(let n of t)if(n.resolveId){let t=yield*v.tryPromise({try:()=>n.resolveId(r,void 0,e),catch:e=>s(`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*v.forEach(i.values(),n=>v.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*v.tryPromise({try:()=>r.load(i,e),catch:e=>s(`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*v.tryPromise({try:()=>r.transform(n,i,e),catch:e=>s(`PluginError`,`[${r.name}] Failed to transform '${i}': ${e instanceof Error?e.message:String(e)}`)});t!=null&&(n=t)}}yield*v.tryPromise({try:()=>e.vfs.writeFile(i,n),catch:e=>s(`VfsError`,`Failed to write ${i}: ${e instanceof Error?e.message:String(e)}`)})}}}),{concurrency:`unbounded`}),yield*v.forEach(t,t=>v.gen(function*(){t.finish&&(yield*v.tryPromise({try:()=>t.finish(e),catch:e=>s(`PluginError`,`[${t.name}] Failed during finish hook: ${e instanceof Error?e.message:String(e)}`)}))}),{concurrency:1})}).pipe(v.catchAll(n=>v.gen(function*(){return yield*v.forEach(t,t=>v.gen(function*(){t.onError&&(yield*v.tryPromise({try:()=>t.onError(n,e),catch:()=>{}}).pipe(v.ignore))}),{concurrency:1}),yield*v.fail(n)}))),T={npm:{name:`npm`,lockfiles:[`package-lock.json`],detect:(e,t)=>t.fs.existsSync(b.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(b.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(b.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(b.join(e,`bun.lockb`))||t.fs.existsSync(b.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 E(e,t){return t?.plugins?.find(t=>typeof t==`object`&&!!t&&`name`in t&&t.name===e)??T[e]}function D(e){let t=(e?.plugins||[]).filter(e=>typeof e==`object`&&!!e&&`buildInstallCommands`in e),n=Object.values(T).filter(e=>!t.some(t=>t.name===e.name));return[...t,...n]}function O(e,t,n,r){return v.gen(function*(){if(t&&t!==`auto`)return t;let i=D(r);for(let t of i)if(yield*v.promise(()=>Promise.resolve(t.detect(e,n))))return t.name;return`npm`})}const k=y.Struct({dependencies:y.optionalWith(y.Record({key:y.String,value:y.String}),{exact:!0,default:()=>({})}),devDependencies:y.optionalWith(y.Record({key:y.String,value:y.String}),{exact:!0,default:()=>({})}),peerDependencies:y.optionalWith(y.Record({key:y.String,value:y.String}),{exact:!0,default:()=>({})})});function A(e,t,n){return v.gen(function*(){let r=b.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=yield*v.exit(n.fs.readJsonSync(r)),a=i._tag===`Success`?i.value:{},o=y.decodeUnknownEither(k)(a),s=o._tag===`Right`?o.right:{dependencies:{},devDependencies:{},peerDependencies:{}},c={...s.dependencies,...s.devDependencies,...s.peerDependencies},l=_.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),u=_.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean));return{missingDependencies:l.filter(e=>!c[e]),missingDevDependencies:u.filter(e=>!c[e])}})}function j(e,t,n,r,i,a){return v.gen(function*(){if(!n.length&&!r.length)return;let o=E(t,a);if(!o)return yield*v.fail(s(`InstallError`,`Unknown package manager: ${t}`));let c=o.buildInstallCommands(n,r);yield*v.forEach(c,t=>v.gen(function*(){if(i.process.run(t.command,t.args,e).status!==0)return yield*v.fail(s(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`))}),{concurrency:1})})}function M(r,i,a,o=[],s=[]){return{name:`regpick:core-add`,async finish(c){await v.runPromise(v.gen(function*(){if(`flushToDisk`in c.vfs&&(yield*v.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*v.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(v.mapError(e=>Error(`Failed to write lockfile: ${e.message}`)))}if([...r.dependencies,...r.devDependencies].length>0){let e=yield*O(c.cwd,i.install?.packageManager||`auto`,a,i);yield*j(c.cwd,e,r.dependencies,r.devDependencies,a,i).pipe(v.catchAll(e=>v.fail(Error(`Failed to install dependencies: ${e.message}`))))}}))}}}function N(e){return e.replace(/\\/g,`/`)}var P=class{memory=new C;async readFile(e,t=`utf-8`){let n=N(e),r=this.memory.readFileSync(n);return r?t===`utf-8`?r.toString():r:t===`utf-8`?await S.readFile(e,`utf-8`):await S.readFile(e)}async writeFile(e,t){let n=N(e),r=b.dirname(n);await this.mkdir(r),this.memory.writeFileSync(n,t)}async exists(e){let t=N(e);try{return this.memory.existsSync(t)||await S.access(e),!0}catch{return!1}}async mkdir(e){let t=N(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=b.normalize(e);n.add(b.dirname(t))}try{for(let e of Array.from(n).sort())await S.mkdir(e,{recursive:!0})}catch(e){throw Error(`Failed to create physical filesystem directories during flush: ${e}`)}let r=(await v.runPromise(v.all(t.map(([e])=>v.tryPromise(async()=>{let t=b.normalize(e),n=this.memory.readFileSync(e);await S.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
|
-
`);throw Error(`flushToDisk failed with ${r.length} errors:\n${e}`)}}rollback(){this.memory.reset()}};function F(e){return e.replace(/\\/g,`/`)}function I(e,t,n){let r=`${b.resolve(e)}${b.sep}`,i=b.resolve(t);return n?v.succeed(void 0):i!==b.resolve(e)&&!i.startsWith(r)?v.fail(s(`ValidationError`,`Refusing to write outside project: ${i}`)):v.succeed(void 0)}const L=(e,t,n,r)=>v.gen(function*(){let i=t.type||e.type||`registry:file`,a=(r.resolve?.targets||{})?.[i],o=(r.registry?.preferManifestTarget??!0)!==!1,s=b.basename(t.path||`${e.name}.txt`),c;if(c=o&&t.target?t.target:a?b.join(a,s):t.target?t.target:b.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=b.resolve(n,c);return yield*I(n,l,!!r.install?.allowOutsideProject),yield*v.succeed({absoluteTarget:l,relativeTarget:F(b.relative(n,l))})});function R(e){return{dependencies:_.dedupe(e.flatMap(e=>e.dependencies||[]).filter(Boolean)),devDependencies:_.dedupe(e.flatMap(e=>e.devDependencies||[]).filter(Boolean))}}function z(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:_.fromIterable(n.values()),missingDependencies:_.dedupe(i.filter(Boolean))}}const B=(e,t,n,r=new Set)=>v.gen(function*(){let i=[],a=[];for(let o of e)for(let e of o.files){let{absoluteTarget:s,relativeTarget:c}=yield*L(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*v.succeed({selectedItems:e,plannedWrites:i,dependencyPlan:R(e),conflicts:a})});function V(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 H(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 U(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function W(e,t){let{flags:n}=t.args,r=U(n.select);if(n.all)return v.succeed(e);if(r.length){let t=e.filter(e=>r.includes(e.name));return t.length?v.succeed(t):v.fail(s(`ValidationError`,`No items matched --select=${String(n.select)}`))}return v.succeed(null)}function G(){return v.gen(function*(){let e=yield*c,t=yield*u((yield*r).cwd).pipe(v.mapError(i));return t.configPath?{config:t.config,configPath:t.configPath}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*v.fail(s(`ValidationError`,`No config file found`)))})}function K(){return v.gen(function*(){let e=yield*o,t=yield*c,n=yield*r,i=n.args.positionals[0]===`add`?1:0,a=n.args.positionals[i];if(a)return l(a,e);let u=Object.entries(e.registry?.sources||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(u.length>0){let n=yield*t.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:u,maxItems:1,required:!1});if(yield*t.prompt.isCancel(n))return yield*v.fail(s(`UserCancelled`,`Dependency installation cancelled by user.`));if(Array.isArray(n)&&n.length>0)return l(String(n[0]),e)}let d=yield*t.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return(yield*t.prompt.isCancel(d))?yield*v.fail(s(`UserCancelled`,`Dependency installation cancelled by user.`)):String(d)})}function q(e,t){return v.gen(function*(){let n=yield*c,i=yield*r,a=(i.args.positionals[0]===`add`?1:0)+1,{items:o}=yield*d(e,i.cwd,n,t);if(!o.length)return yield*n.prompt.warn(`No installable items in registry.`),yield*v.fail(s(`ValidationError`,`No installable items in registry.`));let l=i.args.positionals[a];l&&!i.args.flags.select&&(i.args.flags.select=l);let u=yield*W(o,i),f;if(u)f=u;else{let e=yield*n.prompt.autocompleteMultiselect({message:`Select items to install`,options:o.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*v.fail(s(`UserCancelled`,`Dependency installation cancelled by user.`));let t=new Set((Array.isArray(e)?e:[]).map(String));f=o.filter(e=>t.has(e.name))}if(!f.length)return yield*n.prompt.warn(`No items selected.`),yield*v.fail(s(`ValidationError`,`No items selected.`));let{resolvedItems:p,missingDependencies:m}=z(f,o);return{selectedItems:p,missingRegistryDeps:m}})}function J(e){return v.gen(function*(){let t=yield*o,n=yield*c,i=yield*r,a=yield*B(e,i.cwd,t),s=new Set;yield*v.forEach(a.plannedWrites,e=>v.gen(function*(){(yield*n.fs.pathExists(e.absoluteTarget))&&s.add(e.absoluteTarget)}),{concurrency:`unbounded`});let l=yield*B(e,i.cwd,t,s),u=yield*A(e,i.cwd,n);return{selectedItems:e,plannedWrites:l.plannedWrites,existingTargets:s,missingDependencies:u.missingDependencies,missingDevDependencies:u.missingDevDependencies}})}function Y(e){return v.gen(function*(){let t=yield*o,n=yield*c,i=yield*r,a=!!i.args.flags.yes;if(!a){let t=yield*n.prompt.confirm({message:`Install ${e.selectedItems.length} item(s)?`,initialValue:!0});if((yield*n.prompt.isCancel(t))||!t)return yield*v.fail(s(`UserCancelled`,`Dependency installation cancelled by user.`))}let l=t.install?.overwritePolicy||`prompt`,u=new Map;if(!a&&l===`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*v.fail(s(`UserCancelled`,`Installation aborted by user.`));u.set(t.absoluteTarget,e)}}let d=V(e.plannedWrites,e.existingTargets,u,a,l),f=!1;if(e.missingDependencies.length>0||e.missingDevDependencies.length>0)if(a)f=!0;else{let r=O(i.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 ${r}? (${a.join(` | `)})`,initialValue:!0});if(yield*n.prompt.isCancel(o))return yield*v.fail(s(`UserCancelled`,`Dependency installation cancelled by user.`));f=!!o,f||(yield*n.prompt.warn(`Skipped dependency installation.`))}return{selectedItems:e.selectedItems,finalWrites:d,shouldInstallDeps:f,dependencyPlan:{dependencies:e.missingDependencies,devDependencies:e.missingDevDependencies}}})}function X(e,t,n){return v.gen(function*(){let i=yield*o,a=yield*c,s=yield*r,l=[];return yield*v.forEach(e,e=>v.gen(function*(){let r=t.find(t=>t.name===e.itemName);if(!r)return;let o=yield*m(e.sourceFile,r,s.cwd,a,n),c=H(o,i);l.push({itemName:e.itemName,absoluteTarget:e.absoluteTarget,relativeTarget:e.relativeTarget,sourceFile:e.sourceFile,originalContent:o,finalContent:c})}),{concurrency:`unbounded`}),l})}function Z(){return v.gen(function*(){let{config:e}=yield*G();return yield*v.gen(function*(){let t=yield*c,n=yield*r,i=yield*K();if(!i)return{kind:`noop`,message:`No source provided`};let s=[...yield*g((yield*o).plugins||[],n.cwd),p(),h(),f()],l=yield*q(i,s);for(let e of l.missingRegistryDeps||[])yield*t.prompt.warn(`Registry dependency "${e}" not found in current registry.`);let u=yield*Y(yield*J(l.selectedItems)),d=yield*X(u.finalWrites,u.selectedItems,s),m=new P,_=d.map(e=>({id:e.absoluteTarget,code:e.finalContent})),y=[];for(let e of d){let t=u.selectedItems.find(t=>t.name===e.itemName);t&&!y.some(e=>e.name===t.name)&&y.push(t)}let b=e.plugins?.filter(e=>typeof e==`object`)||[],S=u.shouldInstallDeps?u.dependencyPlan:{dependencies:[],devDependencies:[]},C=[...b,M(S,yield*o,t,y,d)],T=yield*a,E;try{let{readLockfile:e}=yield*v.promise(()=>import(`./lockfile-DpP9ihXE.mjs`).then(e=>e.n));E=yield*e(n.cwd,t).pipe(v.catchAll(()=>v.succeed(void 0)))}catch{}let D={id:x.randomUUID(),command:`add`,status:`pending`,plannedFiles:d.map(e=>e.absoluteTarget),lockfileBackup:E};return yield*T.writeIntent(D,n.cwd),yield*w({vfs:m,cwd:n.cwd,runtime:t},C,_).pipe(v.tapError(()=>T.clearIntent(n.cwd)),v.catchAll(e=>(m.rollback(),v.gen(function*(){return yield*t.prompt.error(`[Failed] Installation aborted: ${e.message}`),yield*v.fail(e)}))),v.tap(()=>T.clearIntent(n.cwd))),{kind:`success`,plan:u}}).pipe(v.provideService(o,e))})}export{w as i,L as n,P as r,Z as runAddCommand,H as t};
|
package/dist/init-CrSPZblA.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t,r as n,t as r}from"./index.mjs";import{a as i,n as a,r as o,t as s}from"./config-mVvW7xo7.mjs";import{Effect as c,Schema as l}from"effect";import u from"node:path";function d(e,t){return e?`cancelled`:t?`overwrite`:`keep`}const f=()=>c.gen(function*(){let n=yield*r,i=yield*e,o=yield*a(i.cwd).pipe(c.mapError(t)),l=(yield*c.either(n.fs.stat(o)))._tag===`Right`,{config:u}=yield*s(i.cwd).pipe(c.mapError(t));return{configPath:o,exists:l,existingConfig:u}}),p=t=>c.gen(function*(){let a=yield*r,o=yield*e;if(t.exists){let e=yield*a.prompt.confirm({message:`${t.configPath} already exists. Overwrite?`,initialValue:!1}),r=d(yield*a.prompt.isCancel(e),e===!0);if(r===`cancelled`)return yield*c.fail(n(`UserCancelled`,`Operation cancelled.`));if(r===`keep`)return yield*a.prompt.info(`Keeping existing configuration.`),null}let s=!!o.args.flags.yes,u=s?`auto`:yield*a.prompt.select({message:`What package manager do you use?`,options:[{value:`auto`,label:`Auto (detection)`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`pnpm`,label:`pnpm`}]}),f=yield*a.prompt.isCancel(u);if(!s&&f)return yield*c.fail(n(`UserCancelled`,`Operation cancelled.`));let p=s?`src/components/ui`:yield*a.prompt.text({message:`What folder do you keep your UI components in?`,placeholder:`src/components/ui`}),m=yield*a.prompt.isCancel(p);if(!s&&m)return yield*c.fail(n(`UserCancelled`,`Operation cancelled.`));let h=s?`prompt`:yield*a.prompt.select({message:`Do you want to overwrite files automatically, or do you prefer to be asked?`,options:[{value:`prompt`,label:`Ask (prompt)`},{value:`overwrite`,label:`Always overwrite (overwrite)`},{value:`skip`,label:`Skip overwriting (skip)`}]}),g=yield*a.prompt.isCancel(h);if(!s&&g)return yield*c.fail(n(`UserCancelled`,`Operation cancelled.`));let _={...t.existingConfig,install:{packageManager:String(u),overwritePolicy:String(h)},resolve:{targets:{...t.existingConfig.resolve?.targets,"registry:component":String(p||`src/components/ui`),"registry:file":String(p||`src/components/ui`),"registry:icon":`${String(p||`src/components/ui`)}/icons`}}};return{newConfig:l.decodeUnknownSync(i)(_),configPath:t.configPath,isOverwrite:t.exists}}),m=()=>c.gen(function*(){let e=yield*r,t=yield*p(yield*f());if(!t)return{kind:`noop`,message:`Keeping existing configuration.`};let n=u.extname(t.configPath).slice(1),i=[`ts`,`mjs`,`cjs`,`js`,`json`].includes(n)?n:`json`,a=o(t.newConfig,i);return yield*c.catchAll(e.fs.writeFile(t.configPath,a,`utf8`),n=>c.gen(function*(){return yield*e.prompt.error(`Failed to write config file: ${t.configPath}`),yield*c.fail(n)})),yield*e.prompt.success(`${t.isOverwrite?`Overwrote`:`Created`} ${t.configPath}`),{kind:`success`,message:`${t.isOverwrite?`Overwrote`:`Created`} ${t.configPath}`}});export{m as runInitCommand};
|
package/dist/list-3KUJXe3D.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./lockfile-DpP9ihXE.mjs";import{a as t,i as n,r,t as i}from"./index.mjs";import{t as a}from"./config-mVvW7xo7.mjs";import{a as o,i as s,n as c,r as l,t as u}from"./plugins-B2_dJlD9.mjs";import{Effect as d}from"effect";function f(e,t){return e?t[e]?String(t[e]):e:null}function p(e,t){let n=f(e,t);if(n)return{source:n,requiresPrompt:!1};let r=Object.keys(t)[0];return r?{source:f(r,t),requiresPrompt:!1}:{source:null,requiresPrompt:!0}}function m(){return d.gen(function*(){let e=yield*t,r=yield*a(e.cwd).pipe(d.mapError(n)),i=p(e.args.positionals[1],r.config.registry?.sources||{}),o=[...yield*u(r.config.plugins||[],e.cwd).pipe(d.mapError(n)),c(),l(),s()];return{source:i.source,requiresPrompt:i.requiresPrompt,plugins:o}})}function h(e){return d.gen(function*(){let t=yield*i;if(!e.requiresPrompt)return e.source;let n=yield*t.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return(yield*t.prompt.isCancel(n))?yield*d.fail(r(`UserCancelled`,`Operation cancelled.`)):String(n)})}function g(e,n){return d.gen(function*(){let r=yield*i,{items:a}=yield*o(e,(yield*t).cwd,r,n);return a})}function _(e,t){let n=e.type||`registry:file`,r=Array.isArray(e.files)?e.files.length:0,i=``;if(t&&t.components&&t.components[e.name]){let n=t.components[e.name],r=n.installedAt?new Date(n.installedAt).toLocaleString():`Unknown date`;i=` \x1b[32m[Installed: ${n.version?`v${n.version}, `:``}${r}]\x1b[0m`}return`${e.name} (${n}, files: ${r})${i}`}function v(e,t){return d.gen(function*(){yield*(yield*i).prompt.info(`Found ${e.length} items.`),yield*d.forEach(e,e=>d.sync(()=>{console.log(`- ${_(e,t)}`)}),{concurrency:1})})}function y(){return d.gen(function*(){let n=yield*i,r=yield*m(),a=yield*h(r);if(!a)return{kind:`noop`,message:`No registry source provided.`};let o=yield*g(a,r.plugins);return o.length?(yield*v(o,yield*e((yield*t).cwd,n)),{kind:`success`,message:`Listed ${o.length} item(s).`}):(yield*n.prompt.warn(`No items found in registry.`),{kind:`noop`,message:`No items found in registry.`})})}export{y as runListCommand};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DR3Ue2cl.mjs";import{Effect as t,Schema as n}from"effect";import r from"node:path";import i from"node:crypto";var a=e({ComponentLockSchema:()=>s,FileLockSchema:()=>o,RegpickLockfileSchema:()=>c,computeHash:()=>f,computeTreeHash:()=>p,getLockfilePath:()=>l,readLockfile:()=>u,writeLockfile:()=>d});const o=n.Struct({path:n.String,hash:n.String}),s=n.Struct({version:n.optional(n.String),installedAt:n.String,source:n.optional(n.String),dependencies:n.optional(n.Array(n.String)),files:n.Array(o)}),c=n.mutable(n.Struct({lockfileVersion:n.Literal(2),components:n.mutable(n.Record({key:n.String,value:s}))}));function l(e){return r.join(e,`regpick-lock.json`)}function u(e,r){let i=l(e);return t.gen(function*(){if(!(yield*r.fs.pathExists(i)))return{lockfileVersion:2,components:{}};let e=yield*t.exit(r.fs.readJsonSync(i));if(e._tag!==`Success`)return{lockfileVersion:2,components:{}};let a=n.decodeUnknownEither(c)(e.value);return a._tag===`Right`?a.right:{lockfileVersion:2,components:{}}})}function d(e,t,n){let r=l(e),i={};for(let e of Object.keys(t.components).sort()){let n=t.components[e];i[e]={...n,files:[...n.files].sort((e,t)=>e.path.localeCompare(t.path))}}let a={lockfileVersion:2,components:i};return n.fs.writeJson(r,a,{spaces:2})}function f(e){return i.createHash(`sha256`).update(e).digest(`hex`)}function p(e){let t=[...e].sort((e,t)=>e.path.localeCompare(t.path)).map(e=>`${e.path}:${e.content}`).join(`
|
|
2
|
-
---
|
|
3
|
-
`);return i.createHash(`sha256`).update(t).digest(`hex`)}export{d as i,a as n,u as r,f as t};
|
package/dist/pack-_9Mhp1qL.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,r as t,t as n}from"./index.mjs";import{Effect as r}from"effect";import i from"node:path";function a(e){let t=/import\s+[\s\S]*?from\s+["']([^"']+)["']/g,n=/import\(["']([^"']+)["']\)/g,r=new Set,i;for(;(i=t.exec(e))!==null;){let e=i[1];if(!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`~`)&&!e.startsWith(`@/`)&&!e.startsWith(`@\\`)){let t=e.split(`/`);e.startsWith(`@`)&&t.length>1?r.add(`${t[0]}/${t[1]}`):r.add(t[0])}}for(;(i=n.exec(e))!==null;){let e=i[1];if(!e.startsWith(`.`)&&!e.startsWith(`/`)&&!e.startsWith(`~`)&&!e.startsWith(`@/`)&&!e.startsWith(`@\\`)){let t=e.split(`/`);e.startsWith(`@`)&&t.length>1?r.add(`${t[0]}/${t[1]}`):r.add(t[0])}}return Array.from(r)}function o(e){let t=a(e.content),n=i.relative(e.targetDir,e.path).replace(/\\/g,`/`),r=i.basename(e.path,i.extname(e.path));return{name:r,title:r,description:`Packed component`,type:`registry:component`,dependencies:t,devDependencies:[],registryDependencies:[],files:[{path:n,type:`registry:component`}]}}const s=e=>r.gen(function*(){let t=yield*n,a=[],o=e=>r.gen(function*(){let n=yield*t.fs.readdir(e);yield*r.forEach(n,n=>r.gen(function*(){let r=i.join(e,n);(yield*t.fs.stat(r)).isDirectory()?yield*o(r):(r.endsWith(`.ts`)||r.endsWith(`.tsx`))&&a.push(r)}),{concurrency:1})});return yield*o(e),a}),c=()=>r.gen(function*(){let a=yield*n,o=yield*e,c=o.args.positionals[1]||`.`,l=i.resolve(o.cwd,c);return(yield*a.fs.stat(l)).isDirectory()||(yield*r.fail(t(`ValidationError`,`Target is not a directory: ${l}`))),yield*a.prompt.info(`Scanning ${l} for components...`),{targetDir:l,files:yield*s(l)}}),l=t=>r.gen(function*(){let a=yield*n,s=yield*e,c=yield*r.forEach(t.files,e=>r.gen(function*(){return o({path:e,content:yield*a.fs.readFile(e,`utf8`),targetDir:t.targetDir})}),{concurrency:10}),l=i.join(s.cwd,`registry.json`);return{items:Array.from(c),outPath:l,fileCount:t.files.length}});function u(){return r.gen(function*(){let e=yield*n,t=yield*c();if(t.files.length===0)return yield*e.prompt.warn(`No .ts or .tsx files found.`),{kind:`noop`,message:`No files found.`};let i=yield*l(t),a=JSON.stringify({name:`my-registry`,items:i.items},null,2);return yield*r.catchAll(e.fs.writeFile(i.outPath,a,`utf8`),t=>r.gen(function*(){return yield*e.prompt.error(`Failed to write registry file: ${i.outPath}`),yield*r.fail(t)})),yield*e.prompt.success(`Packed ${i.items.length} components into registry.json`),{kind:`success`,message:`Generated registry.json`}})}export{u as runPackCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};export{t};
|
package/dist/update-Bcjwyyvz.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t,t as n}from"./lockfile-DpP9ihXE.mjs";import{a as r,i,n as a,o,r as s,t as c}from"./index.mjs";import{t as l}from"./config-mVvW7xo7.mjs";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./plugins-B2_dJlD9.mjs";import{i as g,n as _,r as v,t as y}from"./add-BYsB1qok.mjs";import{Effect as b,Either as x}from"effect";import S from"node:path";import{styleText as C}from"node:util";import w from"node:crypto";function T(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 E=(e,t,r,i,a,o)=>b.gen(function*(){let s=[],c=[];for(let{file:e,content:i}of r){let r=y(i,o),l=yield*_(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*b.succeed({itemName:e,status:f,newFiles:c,files:s})});function D(){return b.gen(function*(){let e=yield*c,n=yield*r,a=yield*l(n.cwd).pipe(b.mapError(i)),o=yield*t(n.cwd,e).pipe(b.mapError(i));return a.configPath?{config:a.config,lockfile:o}:(yield*e.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),yield*b.fail(s(`ValidationError`,`No config file found`)))})}function O(e,t){return b.gen(function*(){let n=yield*o,i=yield*c,a=yield*r,s=T(e);return(yield*b.forEach(Object.entries(s),([r,o])=>b.gen(function*(){let s=yield*b.either(u(r,a.cwd,i,t));if(x.isLeft(s))return yield*i.prompt.warn(`Failed to load registry ${r}`),[];let c=s.right.items;return(yield*b.forEach(o,r=>b.gen(function*(){let o=c.find(e=>e.name===r);if(!o)return null;let s=yield*b.all(o.files.map(e=>p(e,o,a.cwd,i,t).pipe(b.map(t=>({file:e,content:t})),b.catchAll(()=>b.succeed(null)))),{concurrency:`unbounded`}).pipe(b.map(e=>e.filter(e=>e!==null))),l=e.components[r],u=yield*b.catchAll(E(r,o,s,l,a.cwd,n),()=>b.succeed(null));if(!u)return null;let d=u;if(d.status===`requires-diff-prompt`){let e=yield*b.forEach(d.files,e=>b.gen(function*(){let t=yield*b.catchAll(i.fs.readFile(e.target,`utf8`),()=>b.succeed(``));return{target:e.target,remoteContent:e.content,localContent:t}}),{concurrency:`unbounded`});return{itemName:r,newFiles:d.newFiles,files:e}}return null}),{concurrency:`unbounded`})).filter(e=>e!==null)}),{concurrency:1})).flat()})}function k(e,t){return b.gen(function*(){let n=yield*b.tryPromise({try:()=>import(`diff`).then(({diffLines:n})=>n(e,t)),catch:i});yield*b.forEach(n,e=>b.sync(()=>{let t=e.added?`green`:e.removed?`red`:`gray`,n=e.added?`+ `:e.removed?`- `:` `,r=e.value.replace(/\n$/,``).split(`
|
|
2
|
-
`);for(let e of r)console.log(C(t,`${n}${e}`))}),{concurrency:1})})}function A(e){return b.gen(function*(){let t=yield*c;return{approvedUpdates:(yield*b.forEach(e,e=>b.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*b.forEach(e.files,e=>b.gen(function*(){console.log(C(`bold`,`\nDiff for ${e.target}:`)),yield*k(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 j(){return b.gen(function*(){let t=yield*D(),s=b.gen(function*(){let s=yield*c,l=yield*r;if(Object.keys(t.lockfile.components).length===0)return yield*s.prompt.info(`No components installed. Nothing to update.`),{kind:`noop`,message:`No components to update.`};let u=[...yield*h((yield*o).plugins||[],l.cwd).pipe(b.mapError(i)),f(),m(),d()],p=yield*O(t.lockfile,u);if(p.length===0)return{kind:`noop`,message:`All components are up to date.`};let _;_=l.args?.flags?.yes?{approvedUpdates:p}:yield*A(p);let y=_.approvedUpdates.length;if(y===0)return{kind:`noop`,message:`No updates approved.`};let x=JSON.parse(JSON.stringify(t.lockfile)),C=[];yield*b.forEach(_.approvedUpdates,e=>b.sync(()=>{e.files.forEach(e=>{C.push({id:e.target,code:e.remoteContent})}),x.components[e.itemName].installedAt=new Date().toISOString()}),{concurrency:`unbounded`});let T=(yield*o).plugins?.filter(e=>typeof e==`object`)||[],E=new v,D=[...T,{name:`regpick:core-update`,async finish(t){`flushToDisk`in t.vfs&&await t.vfs.flushToDisk();for(let e of _.approvedUpdates){let r=[];for(let n of e.files){let e=S.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})}}x.components[e.itemName].files=r.map(e=>({path:e.path,hash:n(e.content)})).sort((e,t)=>e.path.localeCompare(t.path))}await b.runPromise(e(t.cwd,x,s))}}],k=yield*a,j={id:w.randomUUID(),command:`update`,status:`pending`,plannedFiles:C.map(e=>e.id),lockfileBackup:t.lockfile};return yield*k.writeIntent(j,l.cwd),yield*g({vfs:E,cwd:l.cwd,runtime:s},D,C).pipe(b.tapError(()=>k.clearIntent(l.cwd)),b.catchAll(e=>(E.rollback(),b.gen(function*(){return yield*s.prompt.error(`[Failed] Update aborted: ${e.message}`),yield*b.fail(e)}))),b.tap(()=>k.clearIntent(l.cwd))),{kind:`success`,message:`Updated ${y} components.`}});return yield*b.provideService(s,o,t.config)})}export{j as runUpdateCommand};
|
|
File without changes
|