regpick 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/add-B7_7J0gG.mjs +1 -0
- package/dist/config-Cp8TqKCv.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/dist/init-DOJzn8_H.mjs +1 -0
- package/dist/list-BQ7SuKYg.mjs +1 -0
- package/dist/{registry-ZprC228m.mjs → registry-CS_ioaMI.mjs} +1 -1
- package/dist/{update-CgDVFpQ1.mjs → update-Cuig_1c_.mjs} +2 -2
- package/package.json +1 -1
- package/dist/add-BD6oHbyv.mjs +0 -1
- package/dist/config-COSdj64l.mjs +0 -1
- package/dist/init-C9fbqh24.mjs +0 -1
- package/dist/list-C-vpoz7M.mjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{a as r,i}from"./config-Cp8TqKCv.mjs";import{a,i as o,n as s,o as c,r as l,t as u}from"./registry-CS_ioaMI.mjs";import d from"node:path";import{Volume as f}from"memfs";import p from"node:fs/promises";import*as m from"valibot";import h from"node:crypto";var g=class{plugins=[];constructor(e){this.plugins=e}async run(t,n){try{for(let n of this.plugins)if(n.start)try{await n.start(t)}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed during start hook: ${t.message}`)}await Promise.all(n.map(async n=>{let r=n.id,i=n.code;for(let n of this.plugins)if(n.resolveId)try{let e=await n.resolveId(r,void 0,t);if(e){r=e;break}}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed to resolveId for '${r}': ${t.message}`)}for(let n of this.plugins)if(n.load)try{let e=await n.load(r,t);if(e!=null){i=e;break}}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed to load '${r}': ${t.message}`)}if(i!==null){if(typeof i==`string`){for(let n of this.plugins)if(n.transform)try{let e=await n.transform(i,r,t);e!=null&&(i=e)}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed to transform '${r}': ${t.message}`)}}await t.vfs.writeFile(r,i)}}));for(let n of this.plugins)if(n.finish)try{await n.finish(t)}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed during finish hook: ${t.message}`)}}catch(e){for(let n of this.plugins)if(n.onError)try{await n.onError(e,t)}catch{}throw e}}};function _(e){return e.replace(/\\/g,`/`)}var v=class{memory=new f;async readFile(e,t=`utf-8`){let n=_(e),r=this.memory.readFileSync(n);return r?t===`utf-8`?r.toString():r:t===`utf-8`?await p.readFile(e,`utf-8`):await p.readFile(e)}async writeFile(e,t){let n=_(e),r=d.dirname(n);await this.mkdir(r),this.memory.writeFileSync(n,t)}async exists(e){let t=_(e);try{return this.memory.existsSync(t)||await p.access(e),!0}catch{return!1}}async mkdir(e){let t=_(e);this.memory.mkdirSync(t,{recursive:!0})}async flushToDisk(){let e=this.memory.toJSON(),t=Object.entries(e).map(async([e,t])=>{if(t!==null){let t=d.normalize(e);await p.mkdir(d.dirname(t),{recursive:!0});let n=this.memory.readFileSync(e);await p.writeFile(t,n)}});await Promise.all(t)}rollback(){this.memory.reset()}};function y(e){return e.replace(/\\/g,`/`)}function b(r,i,a){let o=`${d.resolve(r)}${d.sep}`,s=d.resolve(i);return a?t(void 0):s!==d.resolve(r)&&!s.startsWith(o)?n(e(`ValidationError`,`Refusing to write outside project: ${s}`)):t(void 0)}function x(e,n,r,i){let a=n.type||e.type||`registry:file`,o=(i.resolve?.targets||{})?.[a],s=(i.resolve?.preferManifestTarget??!0)!==!1,c=d.basename(n.path||`${e.name}.txt`),l;if(l=s&&n.target?n.target:o?d.join(o,c):n.target?n.target:d.join(`src`,c),i.plugins&&i.plugins.length>0)for(let t of i.plugins){let r=t.resolvePath?.(n,e,l,i);if(r){l=r;break}}let u=d.resolve(r,l),f=b(r,u,!!i.install?.allowOutsideProject);return f.ok?t({absoluteTarget:u,relativeTarget:y(d.relative(r,u))}):f}function S(e){return[...new Set(e.filter(Boolean))]}function C(e){return{dependencies:S(e.flatMap(e=>e.dependencies||[])),devDependencies:S(e.flatMap(e=>e.devDependencies||[]))}}function w(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:Array.from(n.values()),missingDependencies:S(i)}}function T(e,n,r,i=new Set){let a=[],o=[];for(let t of e)for(let e of t.files){let s=x(t,e,n,r);if(!s.ok)return s;let{absoluteTarget:c,relativeTarget:l}=s.value,u={itemName:t.name,sourceFile:e,absoluteTarget:c,relativeTarget:l};a.push(u),i.has(c)&&o.push(u)}return t({selectedItems:e,plannedWrites:a,dependencyPlan:C(e),conflicts:o})}function E(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 D(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function O(r,i){let{flags:a}=i.args,o=D(a.select);if(a.all)return t(r);if(o.length){let i=r.filter(e=>o.includes(e.name));return i.length?t(i):n(e(`ValidationError`,`No items matched --select=${String(a.select)}`))}return t(null)}const k={npm:{name:`npm`,lockfiles:[`package-lock.json`],detect:(e,t)=>t.fs.existsSync(d.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(d.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(d.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(d.join(e,`bun.lockb`))||t.fs.existsSync(d.join(e,`bun.lock`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`bun`,args:[`add`,...e]}),t.length&&n.push({command:`bun`,args:[`add`,`-D`,...t]}),n}}};function A(e,t){if(t?.plugins){let n=t.plugins.find(t=>t.name===e);if(n)return n}return k[e]}function j(e){let t=e?.packageManagers||[],n=Object.values(k).filter(e=>!t.find(t=>t.name===e.name));return[...t,...n]}const M=m.object({dependencies:m.optional(m.record(m.string(),m.string()),{}),devDependencies:m.optional(m.record(m.string(),m.string()),{}),peerDependencies:m.optional(m.record(m.string(),m.string()),{})});function N(e){return[...new Set(e.filter(Boolean))]}function P(e,t,n){let r=d.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=n.fs.readJsonSync(r),a=i.ok?i.value:{},o=m.safeParse(M,a),s=o.success?o.output:{dependencies:{},devDependencies:{},peerDependencies:{}},c={...s.dependencies,...s.devDependencies,...s.peerDependencies},l=N(e.flatMap(e=>e.dependencies||[])),u=N(e.flatMap(e=>e.devDependencies||[]));return{missingDependencies:l.filter(e=>!c[e]),missingDevDependencies:u.filter(e=>!c[e])}}function F(r,i,a,o,s,c){if(!a.length&&!o.length)return t(void 0);let l=A(i,c);if(!l)return n(e(`InstallError`,`Unknown package manager: ${i}`));let u=l.buildInstallCommands(a,o);for(let t of u)if(s.process.run(t.command,t.args,r).status!==0)return n(e(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`));return t(void 0)}const I=m.object({version:m.optional(m.string()),source:m.optional(m.string()),hash:m.string()}),L=m.object({components:m.record(m.string(),I)});function R(e){return d.join(e,`regpick-lock.json`)}async function z(e,t){let n=R(e);if(!await t.fs.pathExists(n))return{components:{}};let r=t.fs.readJsonSync(n);if(!r.ok)return{components:{}};try{return m.parse(L,r.value)}catch{return{components:{}}}}async function B(e,t,n){let r=R(e);await n.fs.writeJson(r,t,{spaces:2})}function V(e){return h.createHash(`sha256`).update(e).digest(`hex`)}async function H(e,t,n,r){if(t&&t!==`auto`)return t;let i=j(r);for(let t of i)if(await t.detect(e,n))return t.name;return`npm`}function U(e,t,n,r=[]){return{name:`regpick:core-add`,async finish(i){if([...e.dependencies,...e.devDependencies].length>0){let r=await H(i.cwd,t.install?.packageManager||`auto`,n,t),a=F(i.cwd,r,e.dependencies,e.devDependencies,n,t);if(!a.ok)throw Error(`Failed to install dependencies: ${a.error.message}`)}if(`flushToDisk`in i.vfs&&await i.vfs.flushToDisk(),r.length>0){let e=await z(i.cwd,n);for(let t of r)e.components||={},e.components[t.name]={source:t.sourceMeta?.originalSource??`unknown`,hash:`pending`};await B(i.cwd,e,n)}}}}async function W(r){let a=await i(r.cwd);return a.configPath?t(a):(r.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`)))}async function G(i,a){let o=i.args.positionals[0]===`add`?1:0,s=i.args.positionals[o];if(s)return t(r(s,a));let c=Object.entries(a.registry?.sources||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(c.length){let o=await i.runtime.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:c,maxItems:1,required:!1});if(await i.runtime.prompt.isCancel(o))return n(e(`UserCancelled`,`Operation cancelled.`));if(Array.isArray(o)&&o.length>0)return t(r(String(o[0]),a))}let l=await i.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await i.runtime.prompt.isCancel(l)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(l))}async function K(r,i,o){let s=(r.args.positionals[0]===`add`?1:0)+1,c=await a(i,r.cwd,r.runtime,o);if(!c.ok)return c;let{items:l}=c.value;if(!l.length)return r.runtime.prompt.warn(`No installable items in registry.`),n(e(`ValidationError`,`No installable items in registry.`));let u=r.args.positionals[s];u&&!r.args.flags.select&&(r.args.flags.select=u);let d=O(l,r),f;if(d.ok&&d.value)f=d.value;else if(d.ok){let t=await r.runtime.prompt.autocompleteMultiselect({message:`Select items to install`,options:l.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(await r.runtime.prompt.isCancel(t))return n(e(`UserCancelled`,`Operation cancelled.`));let i=new Set((Array.isArray(t)?t:[]).map(String));f=l.filter(e=>i.has(e.name))}else return n(d.error);if(!f.length)return r.runtime.prompt.warn(`No items selected.`),n(e(`ValidationError`,`No items selected.`));let{resolvedItems:p,missingDependencies:m}=w(f,l);return t({selectedItems:p,missingRegistryDeps:m})}async function q(e,r,i){let a=T(i,e.cwd,r);if(!a.ok)return n(a.error);let o=new Set,s=a.value.plannedWrites;for(let t of s)await e.runtime.fs.pathExists(t.absoluteTarget)&&o.add(t.absoluteTarget);let c=T(i,e.cwd,r,o);if(!c.ok)return n(c.error);let{missingDependencies:l,missingDevDependencies:u}=P(i,e.cwd,e.runtime);return t({selectedItems:i,missingDependencies:l,missingDevDependencies:u,plannedWrites:c.value.plannedWrites,existingTargets:o})}async function J(r,i,a){let o=!!r.args.flags.yes;if(!o){let t=await r.runtime.prompt.confirm({message:`Install ${a.selectedItems.length} item(s)?`,initialValue:!0});if(await r.runtime.prompt.isCancel(t)||!t)return n(e(`UserCancelled`,`Operation cancelled.`))}let s=[];for(let t of a.plannedWrites)if(a.existingTargets.has(t.absoluteTarget))if(o||(i.install?.overwritePolicy||`prompt`)===`overwrite`)s.push(t);else if((i.install?.overwritePolicy||`prompt`)===`skip`)r.runtime.prompt.warn(`Skipped existing file: ${t.absoluteTarget}`);else{let i=await r.runtime.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(await r.runtime.prompt.isCancel(i)||i===`abort`)return n(e(`UserCancelled`,`Installation aborted by user.`));i===`overwrite`&&s.push(t)}else s.push(t);let c=!1;if(a.missingDependencies.length||a.missingDevDependencies.length)if(o)c=!0;else{let t=H(r.cwd,i.install?.packageManager||`auto`,r.runtime),o=[];a.missingDependencies.length&&o.push(`dependencies: ${a.missingDependencies.join(`, `)}`),a.missingDevDependencies.length&&o.push(`devDependencies: ${a.missingDevDependencies.join(`, `)}`);let s=await r.runtime.prompt.confirm({message:`Install missing packages with ${t}? (${o.join(` | `)})`,initialValue:!0});if(await r.runtime.prompt.isCancel(s))return n(e(`UserCancelled`,`Dependency installation cancelled by user.`));c=!!s,c||r.runtime.prompt.warn(`Skipped dependency installation.`)}return t({selectedItems:a.selectedItems,shouldInstallDeps:c,finalWrites:s,dependencyPlan:{dependencies:a.missingDependencies,devDependencies:a.missingDevDependencies}})}async function Y(e,r,i,a){let o=[];for(let t of i.finalWrites){let s=i.selectedItems.find(e=>e.name===t.itemName);if(!s)continue;let l=await c(t.sourceFile,s,e.cwd,e.runtime,a);if(!l.ok)return n(l.error);let u=E(l.value,r);o.push({absoluteTarget:t.absoluteTarget,finalContent:u,itemName:t.itemName})}return t({...i,hydratedWrites:o})}async function X(r){let i=await W(r);if(!i.ok)return n(i.error);let a=await G(r,i.value.config);if(!a.ok)return n(a.error);if(!a.value)return t({kind:`noop`,message:`No source provided.`});let c=[...await u(i.value.config.plugins||[],r.cwd),new s,new l,new o],d=await K(r,a.value,c);if(!d.ok)return n(d.error);for(let e of d.value.missingRegistryDeps)r.runtime.prompt.warn(`Registry dependency "${e}" not found in current registry.`);let f=await q(r,i.value.config,d.value.selectedItems);if(!f.ok)return n(f.error);let p=await J(r,i.value.config,f.value);if(!p.ok)return n(p.error);let m=await Y(r,i.value.config,p.value,c);if(!m.ok)return n(m.error);let h=m.value.hydratedWrites.map(e=>({id:e.absoluteTarget,code:e.finalContent})),_=[];for(let e of m.value.hydratedWrites){let t=m.value.selectedItems.find(t=>t.name===e.itemName);t&&!_.some(e=>e.name===t.name)&&_.push(t)}let y=new v,b=new g([...i.value.config.plugins||[],U(m.value.dependencyPlan,i.value.config,r.runtime,_)]);try{await b.run({vfs:y,cwd:r.cwd},h)}catch(t){return y.rollback(),r.runtime.prompt.error(`[Failed] Installation aborted: ${t}`),n(e(`RuntimeError`,String(t)))}return r.runtime.prompt.info(`Installed ${m.value.selectedItems.length} item(s), wrote ${m.value.hydratedWrites.length} file(s).`),t({kind:`success`,message:`Installed ${m.value.selectedItems.length} item(s), wrote ${m.value.hydratedWrites.length} file(s).`})}export{x as a,E as i,z as n,v as o,B as r,X as runAddCommand,g as s,V as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:path";import t from"node:fs/promises";import*as n from"valibot";import{loadConfig as r}from"unconfig";const i=n.union([n.literal(`prompt`),n.literal(`overwrite`),n.literal(`skip`)]),a=n.string(),o=n.custom(e=>typeof e==`function`,`Expected a function`),s=n.objectWithRest({name:n.string(),start:n.optional(o),resolveId:n.optional(o),load:n.optional(o),transform:n.optional(o),finish:n.optional(o),onError:n.optional(o)},n.any()),c=n.objectWithRest({name:n.string(),match:o,resolveManifest:o,resolveItemReference:o,resolveFile:o},n.any()),l=n.objectWithRest({name:n.string(),lockfiles:n.array(n.string()),detect:o,buildInstallCommands:o},n.any()),u=n.objectWithRest({name:n.string(),resolvePath:o},n.any()),d=n.pipe(n.object({resolve:n.optional(n.object({targets:n.optional(n.record(n.string(),n.string()),{}),aliases:n.optional(n.record(n.string(),n.string()),{})}),{}),registry:n.optional(n.object({sources:n.optional(n.record(n.string(),n.string()),{}),preferManifestTarget:n.optional(n.boolean(),!0)}),{}),install:n.optional(n.object({packageManager:n.optional(a,`auto`),overwritePolicy:n.optional(i,`prompt`),allowOutsideProject:n.optional(n.boolean(),!1)}),{}),plugins:n.optional(n.array(n.union([s,c,l,u,n.string()])),[])}),n.forward(n.custom(t=>{if(!t.install?.allowOutsideProject){let n=t.resolve?.targets||{};for(let t of Object.values(n))if(typeof t==`string`&&(t.startsWith(`..`)||e.isAbsolute(t)))return!1}return!0},`Target paths outside project are disallowed when install.allowOutsideProject is false`),[`resolve`,`targets`])),f={resolve:{targets:{"registry:icon":`src/components/ui/icons`,"registry:component":`src/components/ui`,"registry:file":`src/components/ui`},aliases:{}},registry:{sources:{tebra:`./tebra-icon-registry/registry`},preferManifestTarget:!0},install:{overwritePolicy:`prompt`,packageManager:`auto`,allowOutsideProject:!1},plugins:[]};async function p(n){try{return await t.access(e.join(n,`tsconfig.json`)),`ts`}catch{}try{let r=await t.readFile(e.join(n,`package.json`),`utf-8`),i=JSON.parse(r);if(i.type===`module`)return`mjs`;if(i.type===`commonjs`)return`cjs`}catch{}return`mjs`}function m(e,t=1){if(e===null)return`null`;if(typeof e==`string`)return`"${e}"`;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e)){if(e.length===0)return`[]`;let n=` `.repeat(t);return`[\n${n}${e.map(e=>m(e,t+1)).join(`,\n${n}`)}\n${` `.repeat(t-1)}]`}if(typeof e==`object`){let n=Object.keys(e);if(n.length===0)return`{}`;let r=` `.repeat(t);return`{\n${r}${n.map(n=>`${/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(n)?n:`"${n}"`}: ${m(e[n],t+1)}`).join(`,\n${r}`)}\n${` `.repeat(t-1)}}`}return`undefined`}function h(e,t){if(t===`json`)return JSON.stringify(e,null,2);let n=m(e,1);return t===`cjs`?`const { defineConfig } = require("regpick");\n\nmodule.exports = defineConfig(${n});\n`:`import { defineConfig } from "regpick";\n\nexport default defineConfig(${n});\n`}async function g(t){let{sources:n}=await r({sources:[{files:[`regpick`,`.regpickrc`,`regpickrc`],extensions:[`json`,`js`,`ts`,`mjs`,`cjs`,``]}],cwd:t});if(n.length>0)return n[0];let i=await p(t);return e.join(t,`regpick.config.${i}`)}async function _(e){let{config:t,sources:i}=await r({sources:[{files:[`regpick`,`.regpickrc`,`regpickrc`],extensions:[`json`,`js`,`ts`,`mjs`,`cjs`,``]},{files:`package.json`,extensions:[],rewrite(e){return e?.regpick}}],defaults:f,merge:!0,cwd:e});return{config:n.parse(d,t),configPath:i[0]||null}}function v(e,t){return e?t.registry?.sources?.[e]?String(t.registry.sources[e]):e:null}export{v as a,_ as i,d as n,g as o,h as r,c as t};
|
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
|
-
`)}async function s(){let n=new AbortController,i=e=>{n.signal.aborted||n.abort(e),e instanceof Error&&console.error(t(`red`,`\n[Fatal Error] ${e.message}`)),process.exit(1)};process.on(`SIGINT`,()=>i()),process.on(`SIGTERM`,()=>i()),process.on(`uncaughtException`,i),process.on(`unhandledRejection`,e=>i(e instanceof Error?e:Error(String(e))));let s=a(process.argv.slice(2)),l=s.positionals[0];if(!l||s.flags.help){o();return}let{createRuntimePorts:u}=await import(`./ports-CYe5vg01.mjs`),d=u({signal:n.signal});if(!l||s.flags.help){o();return}let f={cwd:s.flags.cwd?e.resolve(process.cwd(),String(s.flags.cwd)):process.cwd(),args:s,runtime:d};d.prompt.intro(t(`cyan`,`regpick`));try{let e;if(l===`init`)e=await import(`./init-
|
|
15
|
+
`)}async function s(){let n=new AbortController,i=e=>{n.signal.aborted||n.abort(e),e instanceof Error&&console.error(t(`red`,`\n[Fatal Error] ${e.message}`)),process.exit(1)};process.on(`SIGINT`,()=>i()),process.on(`SIGTERM`,()=>i()),process.on(`uncaughtException`,i),process.on(`unhandledRejection`,e=>i(e instanceof Error?e:Error(String(e))));let s=a(process.argv.slice(2)),l=s.positionals[0];if(!l||s.flags.help){o();return}let{createRuntimePorts:u}=await import(`./ports-CYe5vg01.mjs`),d=u({signal:n.signal});if(!l||s.flags.help){o();return}let f={cwd:s.flags.cwd?e.resolve(process.cwd(),String(s.flags.cwd)):process.cwd(),args:s,runtime:d};d.prompt.intro(t(`cyan`,`regpick`));try{let e;if(l===`init`)e=await import(`./init-DOJzn8_H.mjs`).then(e=>e.runInitCommand(f));else if(l===`list`)e=await import(`./list-BQ7SuKYg.mjs`).then(e=>e.runListCommand(f));else if(l===`add`)e=await import(`./add-B7_7J0gG.mjs`).then(e=>e.runAddCommand(f));else if(l===`update`)e=await import(`./update-Cuig_1c_.mjs`).then(e=>e.runUpdateCommand(f));else if(l===`pack`)e=await import(`./pack-1ZwczWOl.mjs`).then(e=>e.runPackCommand(f));else{d.prompt.error(`Unknown command: ${l}`),o(),process.exitCode=1;return}if(!e.ok){c(e.error,d.prompt.error),d.prompt.outro(t(`red`,`Failed.`)),process.exitCode=1;return}if(e.value.kind===`noop`){d.prompt.outro(t(`yellow`,e.value.message));return}d.prompt.outro(t(`green`,`Done.`))}catch(e){c(r(e),d.prompt.error),d.prompt.outro(t(`red`,`Failed.`)),process.exitCode=1}}function c(e,t){if(e.kind===`UserCancelled`){t(e.message);return}t(`[${e.kind}] ${e.message}`)}s();export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{i as r,n as i,o as a,r as o}from"./config-Cp8TqKCv.mjs";import s from"node:path";import*as c from"valibot";function l(e,t){return e?`cancelled`:t?`overwrite`:`keep`}async function u(e){let n=await a(e.cwd),i=(await e.runtime.fs.stat(n)).ok,{config:o}=await r(e.cwd);return t({configPath:n,exists:i,existingConfig:o})}async function d(r,a){if(a.exists){let i=await r.runtime.prompt.confirm({message:`${a.configPath} already exists. Overwrite?`,initialValue:!1}),o=l(await r.runtime.prompt.isCancel(i),!!i);if(o===`cancelled`)return n(e(`UserCancelled`,`Operation cancelled.`));if(o===`keep`)return r.runtime.prompt.info(`Keeping existing configuration.`),t(null)}let o=!!r.args.flags.yes,s=o?`auto`:await r.runtime.prompt.select({message:`Jakiego menedżera pakietów używasz?`,options:[{value:`auto`,label:`Auto (wykrywanie)`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`pnpm`,label:`pnpm`}]}),u=await r.runtime.prompt.isCancel(s);if(!o&&u)return n(e(`UserCancelled`,`Operation cancelled.`));let d=o?`src/components/ui`:await r.runtime.prompt.text({message:`W jakim folderze trzymasz komponenty UI?`,placeholder:`src/components/ui`}),f=await r.runtime.prompt.isCancel(d);if(!o&&f)return n(e(`UserCancelled`,`Operation cancelled.`));let p=o?`prompt`:await r.runtime.prompt.select({message:`Czy chcesz nadpisywać pliki automatycznie, czy wolisz być pytany?`,options:[{value:`prompt`,label:`Pytaj (prompt)`},{value:`overwrite`,label:`Zawsze nadpisuj (overwrite)`},{value:`skip`,label:`Pomijaj nadpisywanie (skip)`}]}),m=await r.runtime.prompt.isCancel(p);if(!o&&m)return n(e(`UserCancelled`,`Operation cancelled.`));let h={...a.existingConfig,install:{packageManager:String(s),overwritePolicy:String(p)},resolve:{targets:{...a.existingConfig.resolve?.targets||{},"registry:component":String(d||`src/components/ui`),"registry:file":String(d||`src/components/ui`),"registry:icon":`${String(d||`src/components/ui`)}/icons`}}};return t({newConfig:c.parse(i,h),configPath:a.configPath,isOverwrite:a.exists})}async function f(e){let r=await u(e);if(!r.ok)return n(r.error);let i=await d(e,r.value);if(!i.ok)return n(i.error);if(!i.value)return t({kind:`noop`,message:`Keeping existing configuration.`});let a=s.extname(i.value.configPath).slice(1),c=[`ts`,`mjs`,`cjs`,`js`,`json`].includes(a)?a:`json`,l=o(i.value.newConfig,c),f=await e.runtime.fs.writeFile(i.value.configPath,l,`utf8`);return f.ok?(e.runtime.prompt.success(`${i.value.isOverwrite?`Overwrote`:`Created`} ${i.value.configPath}`),t({kind:`success`,message:`${i.value.isOverwrite?`Overwrote`:`Created`} ${i.value.configPath}`})):(e.runtime.prompt.error(`Failed to write config file: ${i.value.configPath}`),n(f.error))}export{f as runInitCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{i as r}from"./config-Cp8TqKCv.mjs";import{a as i,i as a,n as o,r as s,t as c}from"./registry-CS_ioaMI.mjs";function l(e,t){return e?t[e]?String(t[e]):e:null}function u(e,t){let n=l(e,t);if(n)return{source:n,requiresPrompt:!1};let r=Object.keys(t)[0];return r?{source:l(r,t),requiresPrompt:!1}:{source:null,requiresPrompt:!0}}async function d(e){let{config:n}=await r(e.cwd),i=u(e.args.positionals[1],n.registry?.sources||{}),l=[...await c(n.plugins||[],e.cwd),new o,new s,new a];return t({source:i.source,requiresPrompt:i.requiresPrompt,adapters:l})}async function f(r,i){if(!i.requiresPrompt)return t(i.source);let a=await r.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await r.runtime.prompt.isCancel(a)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(a))}async function p(e,n,r){let a=await i(n,e.cwd,e.runtime,r);return a.ok?t(a.value.items):a}function m(e){let t=e.type||`registry:file`,n=Array.isArray(e.files)?e.files.length:0;return`${e.name} (${t}, files: ${n})`}function h(e,t){e.runtime.prompt.info(`Found ${t.length} items.`);for(let e of t)console.log(`- ${m(e)}`)}async function g(e){let r=await d(e);if(!r.ok)return n(r.error);let i=await f(e,r.value);if(!i.ok)return n(i.error);if(!i.value)return t({kind:`noop`,message:`No registry source provided.`});let a=await p(e,i.value,r.value.adapters);if(!a.ok)return n(a.error);let o=a.value;return o.length?(h(e,o),t({kind:`success`,message:`Listed ${o.length} item(s).`})):(e.runtime.prompt.warn(`No items found in registry.`),t({kind:`noop`,message:`No items found in registry.`}))}export{g as runListCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{t as r}from"./config-
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{t as r}from"./config-Cp8TqKCv.mjs";import i from"node:path";import*as a from"valibot";import{fileURLToPath as o}from"node:url";const s=a.object({path:a.optional(a.string()),target:a.optional(a.string()),type:a.optional(a.string(),`registry:file`),content:a.optional(a.string()),url:a.optional(a.string())}),c=a.object({name:a.optional(a.string(),`unnamed-item`),title:a.optional(a.string()),description:a.optional(a.string(),``),type:a.optional(a.string(),`registry:file`),dependencies:a.optional(a.array(a.string()),[]),devDependencies:a.optional(a.array(a.string()),[]),registryDependencies:a.optional(a.array(a.string()),[]),files:a.optional(a.array(s),[])});a.object({type:a.string(),originalSource:a.optional(a.string()),adapterState:a.optional(a.record(a.string(),a.unknown()))});function l(e,t){let n=a.parse(c,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 u=a.object({url:a.optional(a.string()),href:a.optional(a.string()),path:a.optional(a.string()),files:a.optional(a.unknown())}),d=a.object({items:a.array(a.union([a.record(a.string(),a.unknown()),u]))});function f(e){let t=a.safeParse(d,e);return t.success?t.output.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 p=a.object({files:a.array(a.unknown())});function m(r,i){try{if(Array.isArray(r))return t(r.filter(e=>!!(e&&typeof e==`object`)).map(e=>l(e,i)));let o=a.safeParse(d,r);return o.success?t(o.output.items.filter(e=>`files`in e&&Array.isArray(e.files)).map(e=>l(e,i))):a.safeParse(p,r).success?t([l(r,i)]):n(e(`RegistryError`,`Unsupported manifest structure.`))}catch(t){return a.isValiError(t)?n(e(`ValidationError`,`Manifest validation failed: ${t.message}`)):n(e(`RegistryError`,`Failed to parse manifest`))}}async function h(e,r,i,a){let o=m(e,r);if(!e||typeof e!=`object`||Array.isArray(e))return o;let s=f(e);if(!s.length)return o;let c=o.ok?o.value:[],u=await Promise.all(s.map(async e=>{let o=await a.resolveItemReference(e,r,i);if(!o.ok)return n(o.error);let s=o.value;return t(s&&typeof s==`object`?l(s,r):null)})),d=[];for(let e of u){if(!e.ok)return e;e.value&&d.push(e.value)}return t([...c,...d])}async function g(r,i,a,o){if(!r)return n(e(`ValidationError`,`Registry source is required.`));for(let e of o)if(e.match({source:r,cwd:i})){let o=await e.resolveManifest({source:r,cwd:i},a);if(!o.ok)return n(o.error);let s=o.value,c=[];if(s.items)c=s.items;else if(s.rawData){let t=await h(s.rawData,s.sourceMeta,a,e);if(!t.ok)return n(t.error);c=t.value}let l=s.resolvedSource||r;return t({items:c.map(e=>({...e,sourceMeta:{...e.sourceMeta,originalSource:l}})),source:l})}return n(e(`RegistryError`,`No suitable adapter found for source: ${r}`))}async function _(r,i,a,o,s){if(typeof r.content==`string`)return t(r.content);let c=s.find(e=>e.name===i.sourceMeta.type)||s[0];return c?c.resolveFile(r,i,a,o):n(e(`RegistryError`,`No suitable adapter found to resolve file content.`))}const v=a.object({baseDir:a.string()});var y=class{name=`directory`;match(e){return!0}async resolveManifest(r,a){let o=i.resolve(r.cwd,r.source),s=await a.fs.stat(o);if(!s.ok||!s.value.isDirectory())return n(e(`RegistryError`,`Source is not a directory: ${r.source}`));let c=o,u=await a.fs.readdir(c);if(!u.ok)return n(u.error);let d=u.value.filter(e=>e.endsWith(`.json`)),f={type:`directory`,adapterState:{baseDir:c}},p=await Promise.all(d.map(async e=>{let n=i.join(c,e),r=await a.fs.readFile(n,`utf8`);if(!r.ok)return r;let o;try{o=JSON.parse(r.value)}catch{return t(null)}return!o||typeof o!=`object`||!(`files`in o)||!Array.isArray(o.files)?t(null):t(l(o,f))})),m=[];for(let e of p){if(!e.ok)return n(e.error);e.value&&m.push(e.value)}return t({sourceMeta:f,items:m,resolvedSource:o})}async resolveItemReference(r,o,s){let c=i.resolve(r),l=a.safeParse(v,o.adapterState);l.success&&(c=i.resolve(l.output.baseDir,r));let u=await s.fs.readFile(c,`utf8`);if(!u.ok)return n(u.error);try{return t(JSON.parse(u.value))}catch{return n(e(`RegistryError`,`Invalid JSON: ${c}`))}}async resolveFile(t,r,o,s){let c=t.url||t.path;if(!c)return n(e(`ValidationError`,`File entry in "${r.name}" missing path/url.`));let l=i.resolve(o,c);if(!i.isAbsolute(c)){let e=a.safeParse(v,r.sourceMeta.adapterState);e.success&&(l=i.resolve(e.output.baseDir,c))}return s.fs.readFile(l,`utf8`)}};const b=a.object({baseDir:a.string()});function x(e){return/^file:\/\//i.test(e)}var S=class{name=`file`;match(e){return x(e.source)||e.source.endsWith(`.json`)}async resolveManifest(r,a){let s=x(r.source)?o(new URL(r.source)):i.resolve(r.cwd,r.source),c=await a.fs.stat(s);if(!c.ok)return n(e(`RegistryError`,`Registry source not found: ${r.source}`));if(c.value.isDirectory())return n(e(`RegistryError`,`Source is a directory, not a file.`));let l=await a.fs.readFile(s,`utf8`);if(!l.ok)return n(l.error);let u;try{u=JSON.parse(l.value)}catch(t){return n(e(`RegistryError`,`Failed to parse registry JSON.`,t))}return t({sourceMeta:{type:`file`,adapterState:{baseDir:i.dirname(s)}},rawData:u,resolvedSource:s})}async resolveItemReference(r,o,s){let c=r;if(o.type===`file`){let e=a.safeParse(b,o.adapterState);c=e.success?i.resolve(e.output.baseDir,r):i.resolve(r)}else c=i.resolve(r);let l=await s.fs.readFile(c,`utf8`);if(!l.ok)return n(l.error);try{return t(JSON.parse(l.value))}catch{return n(e(`RegistryError`,`Invalid JSON: ${c}`))}}async resolveFile(t,r,o,s){let c=t.url||t.path;if(!c)return n(e(`ValidationError`,`File entry in "${r.name}" missing path/url.`));let l=i.resolve(o,c);if(!i.isAbsolute(c)){let e=a.safeParse(b,r.sourceMeta.adapterState);e.success&&(l=i.resolve(e.output.baseDir,c))}return s.fs.readFile(l,`utf8`)}};const C=a.object({baseUrl:a.string()});function w(e){return/^https?:\/\//i.test(e)}function T(e){return e.includes(`github.com`)?e.replace(/^https?:\/\/github\.com\//,`https://raw.githubusercontent.com/`).replace(/\/(blob|tree)\//,`/`):e}function E(e,t){return new URL(t,e).toString()}var D=class{name=`http`;match(e){return w(e.source)}async resolveManifest(e,r){let i=T(e.source),a=await r.http.getJson(i);return a.ok?t({sourceMeta:{type:`http`,adapterState:{baseUrl:i.endsWith(`/`)?i:i.replace(/[^/]*$/,``)}},rawData:a.value,resolvedSource:i}):n(a.error)}async resolveItemReference(t,r,i){if(w(t))return i.http.getJson(t);if(r.type===`http`){let e=a.safeParse(C,r.adapterState);if(e.success){let n=E(e.output.baseUrl,t);return i.http.getJson(n)}}return n(e(`RegistryError`,`Cannot resolve HTTP reference: ${t}`))}async resolveFile(t,r,i,o){let s=t.url||t.path;if(!s)return n(e(`ValidationError`,`File entry in "${r.name}" missing path/url.`));let c=w(s)?T(s):s;if(w(c))return o.http.getText(c);if(r.sourceMeta.type===`http`){let e=a.safeParse(C,r.sourceMeta.adapterState);if(e.success){let t=E(e.output.baseUrl,c);return o.http.getText(t)}}return n(e(`RegistryError`,`Cannot resolve remote file: ${c}`))}};async function O(e,t){let n=[];for(let o of e)if(typeof o==`string`)try{let e=o;(o.startsWith(`.`)||o.startsWith(`/`))&&(e=i.resolve(t,o));let s=await import(e),c=s.default||s.adapter||s,l=a.parse(r,c);n.push(l)}catch(e){console.warn(`[regpick] Failed to load registry adapter module: ${o} - ${e.message}`)}else try{let e=a.parse(r,o);n.push(e)}catch(e){console.warn(`[regpick] Invalid registry adapter provided: ${e.message}`)}return n}export{g as a,y as i,D as n,_ as o,S as r,O as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{i as r}from"./config-
|
|
2
|
-
`);for(let e of r)console.log(_(t,`${n}${e}`))}}async function C(e,n){let r=[];for(let t of n){e.runtime.prompt.info(`Update available for ${t.itemName}`);let n=await e.runtime.prompt.select({message:`What do you want to do with ${t.itemName}?`,options:[{value:`diff`,label:`Show diff`},{value:`update`,label:`Update`},{value:`skip`,label:`Skip`}]});if(!(await e.runtime.prompt.isCancel(n)||n===`skip`)){if(n===`diff`){for(let e of t.files)console.log(_(`bold`,`\nDiff for ${e.target}:`)),await S(e.localContent,e.remoteContent);let n=await e.runtime.prompt.confirm({message:`Update ${t.itemName} now?`,initialValue:!0});if(await e.runtime.prompt.isCancel(n)||!n)continue}r.push(t)}}return t({approvedUpdates:r})}async function w(r){let i=await b(r);if(!i.ok)return n(i.error);if(Object.keys(i.value.lockfile.components).length===0)return r.runtime.prompt.info(`No components installed. Nothing to update.`),t({kind:`noop`,message:`No components to update.`});let s=[...await l(i.value.config.
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{i as r}from"./config-Cp8TqKCv.mjs";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./registry-CS_ioaMI.mjs";import{a as u,i as d,n as f,o as p,r as m,s as h,t as g}from"./add-B7_7J0gG.mjs";import{styleText as _}from"node:util";function v(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}function y(e,n,r,i,a,o){let s=[],c=[];for(let{file:e,content:t}of r){let r=d(t,o);s.push(r);let i=u(n,e,a,o);if(!i.ok)return i;c.push({target:i.value.absoluteTarget,content:r})}let l=g(s.sort().join(``));return t({itemName:e,status:l===i?`up-to-date`:`requires-diff-prompt`,newHash:l,files:c})}async function b(i){let[a,o]=await Promise.all([r(i.cwd),f(i.cwd,i.runtime)]);return a.configPath?t({config:a.config,lockfile:o}):(i.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`)))}async function x(e,n,r,a){let o=v(r),c=[];for(let[t,l]of Object.entries(o)){let o=await i(t,e.cwd,e.runtime,a);if(!o.ok){e.runtime.prompt.warn(`Failed to load registry ${t}`);continue}let u=o.value.items;for(let t of l){let i=u.find(e=>e.name===t);if(!i)continue;let o=(await Promise.all(i.files.map(async t=>{let n=await s(t,i,e.cwd,e.runtime,a);return n.ok?{file:t,content:n.value}:null}))).filter(e=>e!==null),l=r.components[t].hash,d=y(t,i,o,l,e.cwd,n);if(!d.ok)continue;let f=d.value;if(f.status===`requires-diff-prompt`){let n=[];for(let t of f.files){let r=await e.runtime.fs.readFile(t.target,`utf8`);n.push({target:t.target,remoteContent:t.content,localContent:r.ok?r.value:``})}c.push({itemName:t,newHash:f.newHash,files:n})}}}return t(c)}async function S(e,t){let n=await import(`diff`).then(({diffLines:n})=>n(e,t));for(let e of n){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(_(t,`${n}${e}`))}}async function C(e,n){let r=[];for(let t of n){e.runtime.prompt.info(`Update available for ${t.itemName}`);let n=await e.runtime.prompt.select({message:`What do you want to do with ${t.itemName}?`,options:[{value:`diff`,label:`Show diff`},{value:`update`,label:`Update`},{value:`skip`,label:`Skip`}]});if(!(await e.runtime.prompt.isCancel(n)||n===`skip`)){if(n===`diff`){for(let e of t.files)console.log(_(`bold`,`\nDiff for ${e.target}:`)),await S(e.localContent,e.remoteContent);let n=await e.runtime.prompt.confirm({message:`Update ${t.itemName} now?`,initialValue:!0});if(await e.runtime.prompt.isCancel(n)||!n)continue}r.push(t)}}return t({approvedUpdates:r})}async function w(r){let i=await b(r);if(!i.ok)return n(i.error);if(Object.keys(i.value.lockfile.components).length===0)return r.runtime.prompt.info(`No components installed. Nothing to update.`),t({kind:`noop`,message:`No components to update.`});let s=[...await l(i.value.config.plugins||[],r.cwd),new o,new c,new a],u=await x(r,i.value.config,i.value.lockfile,s);if(!u.ok)return n(u.error);if(u.value.length===0)return t({kind:`noop`,message:`All components are up to date.`});let d;if(d=r.args?.flags?.yes?t({approvedUpdates:u.value}):await C(r,u.value),!d.ok)return n(d.error);let f=d.value.approvedUpdates.length;if(f===0)return t({kind:`noop`,message:`No updates approved.`});let g=JSON.parse(JSON.stringify(i.value.lockfile)),_=[];for(let e of d.value.approvedUpdates){for(let t of e.files)_.push({id:t.target,code:t.remoteContent});g.components[e.itemName].hash=e.newHash}let v=i.value.config.plugins||[],y=new p,S=new h([...v,{name:`regpick:core-update`,async finish(e){`flushToDisk`in e.vfs&&await e.vfs.flushToDisk(),await m(e.cwd,g,r.runtime)}}]);try{await S.run({vfs:y,cwd:r.cwd},_)}catch(t){return y.rollback(),r.runtime.prompt.error(`[Failed] Update aborted: ${t}`),n(e(`RuntimeError`,String(t)))}return t({kind:`success`,message:`Updated ${f} components.`})}export{w as runUpdateCommand};
|
package/package.json
CHANGED
package/dist/add-BD6oHbyv.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{a as r,i}from"./config-COSdj64l.mjs";import{a,i as o,n as s,o as c,r as l,t as u}from"./registry-ZprC228m.mjs";import d from"node:path";import{Volume as f}from"memfs";import p from"node:fs/promises";import*as m from"valibot";import h from"node:crypto";var g=class{plugins=[];constructor(e){this.plugins=e}async run(t,n){try{for(let n of this.plugins)if(n.start)try{await n.start(t)}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed during start hook: ${t.message}`)}await Promise.all(n.map(async n=>{let r=n.id,i=n.code;for(let n of this.plugins)if(n.resolveId)try{let e=await n.resolveId(r,void 0,t);if(e){r=e;break}}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed to resolveId for '${r}': ${t.message}`)}for(let n of this.plugins)if(n.load)try{let e=await n.load(r,t);if(e!=null){i=e;break}}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed to load '${r}': ${t.message}`)}if(i!==null){if(typeof i==`string`){for(let n of this.plugins)if(n.transform)try{let e=await n.transform(i,r,t);e!=null&&(i=e)}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed to transform '${r}': ${t.message}`)}}await t.vfs.writeFile(r,i)}}));for(let n of this.plugins)if(n.finish)try{await n.finish(t)}catch(t){throw e(`RuntimeError`,`[${n.name}] Failed during finish hook: ${t.message}`)}}catch(e){for(let n of this.plugins)if(n.onError)try{await n.onError(e,t)}catch{}throw e}}};function _(e){return e.replace(/\\/g,`/`)}var v=class{memory=new f;async readFile(e,t=`utf-8`){let n=_(e),r=this.memory.readFileSync(n);return r?t===`utf-8`?r.toString():r:t===`utf-8`?await p.readFile(e,`utf-8`):await p.readFile(e)}async writeFile(e,t){let n=_(e),r=d.dirname(n);await this.mkdir(r),this.memory.writeFileSync(n,t)}async exists(e){let t=_(e);try{return this.memory.existsSync(t)||await p.access(e),!0}catch{return!1}}async mkdir(e){let t=_(e);this.memory.mkdirSync(t,{recursive:!0})}async flushToDisk(){let e=this.memory.toJSON(),t=Object.entries(e).map(async([e,t])=>{if(t!==null){let t=d.normalize(e);await p.mkdir(d.dirname(t),{recursive:!0});let n=this.memory.readFileSync(e);await p.writeFile(t,n)}});await Promise.all(t)}rollback(){this.memory.reset()}};function y(e){return e.replace(/\\/g,`/`)}function b(r,i,a){let o=`${d.resolve(r)}${d.sep}`,s=d.resolve(i);return a?t(void 0):s!==d.resolve(r)&&!s.startsWith(o)?n(e(`ValidationError`,`Refusing to write outside project: ${s}`)):t(void 0)}function x(e,n,r,i){let a=n.type||e.type||`registry:file`,o=i.targetsByType?.[a],s=i.preferManifestTarget!==!1,c=d.basename(n.path||`${e.name}.txt`),l;if(l=s&&n.target?n.target:o?d.join(o,c):n.target?n.target:d.join(`src`,c),i.pathResolvers&&i.pathResolvers.length>0)for(let t of i.pathResolvers){let r=t.resolve(n,e,l,i);if(r){l=r;break}}let u=d.resolve(r,l),f=b(r,u,!!i.allowOutsideProject);return f.ok?t({absoluteTarget:u,relativeTarget:y(d.relative(r,u))}):f}function S(e){return[...new Set(e.filter(Boolean))]}function C(e){return{dependencies:S(e.flatMap(e=>e.dependencies||[])),devDependencies:S(e.flatMap(e=>e.devDependencies||[]))}}function w(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:Array.from(n.values()),missingDependencies:S(i)}}function T(e,n,r,i=new Set){let a=[],o=[];for(let t of e)for(let e of t.files){let s=x(t,e,n,r);if(!s.ok)return s;let{absoluteTarget:c,relativeTarget:l}=s.value,u={itemName:t.name,sourceFile:e,absoluteTarget:c,relativeTarget:l};a.push(u),i.has(c)&&o.push(u)}return t({selectedItems:e,plannedWrites:a,dependencyPlan:C(e),conflicts:o})}function E(e,t){let n=e;for(let[e,r]of Object.entries(t.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 D(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function O(r,i){let{flags:a}=i.args,o=D(a.select);if(a.all)return t(r);if(o.length){let i=r.filter(e=>o.includes(e.name));return i.length?t(i):n(e(`ValidationError`,`No items matched --select=${String(a.select)}`))}return t(null)}const k={npm:{name:`npm`,lockfiles:[`package-lock.json`],detect:(e,t)=>t.fs.existsSync(d.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(d.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(d.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(d.join(e,`bun.lockb`))||t.fs.existsSync(d.join(e,`bun.lock`)),buildInstallCommands:(e,t)=>{let n=[];return e.length&&n.push({command:`bun`,args:[`add`,...e]}),t.length&&n.push({command:`bun`,args:[`add`,`-D`,...t]}),n}}};function A(e,t){if(t?.packageManagers){let n=t.packageManagers.find(t=>t.name===e);if(n)return n}return k[e]}function j(e){let t=e?.packageManagers||[],n=Object.values(k).filter(e=>!t.find(t=>t.name===e.name));return[...t,...n]}const M=m.object({dependencies:m.optional(m.record(m.string(),m.string()),{}),devDependencies:m.optional(m.record(m.string(),m.string()),{}),peerDependencies:m.optional(m.record(m.string(),m.string()),{})});function N(e){return[...new Set(e.filter(Boolean))]}function P(e,t,n){let r=d.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=n.fs.readJsonSync(r),a=i.ok?i.value:{},o=m.safeParse(M,a),s=o.success?o.output:{dependencies:{},devDependencies:{},peerDependencies:{}},c={...s.dependencies,...s.devDependencies,...s.peerDependencies},l=N(e.flatMap(e=>e.dependencies||[])),u=N(e.flatMap(e=>e.devDependencies||[]));return{missingDependencies:l.filter(e=>!c[e]),missingDevDependencies:u.filter(e=>!c[e])}}function F(r,i,a,o,s,c){if(!a.length&&!o.length)return t(void 0);let l=A(i,c);if(!l)return n(e(`InstallError`,`Unknown package manager: ${i}`));let u=l.buildInstallCommands(a,o);for(let t of u)if(s.process.run(t.command,t.args,r).status!==0)return n(e(`InstallError`,`Dependency install failed: ${t.command} ${t.args.join(` `)}`));return t(void 0)}const I=m.object({version:m.optional(m.string()),source:m.optional(m.string()),hash:m.string()}),L=m.object({components:m.record(m.string(),I)});function R(e){return d.join(e,`regpick-lock.json`)}async function z(e,t){let n=R(e);if(!await t.fs.pathExists(n))return{components:{}};let r=t.fs.readJsonSync(n);if(!r.ok)return{components:{}};try{return m.parse(L,r.value)}catch{return{components:{}}}}async function B(e,t,n){let r=R(e);await n.fs.writeJson(r,t,{spaces:2})}function V(e){return h.createHash(`sha256`).update(e).digest(`hex`)}async function H(e,t,n,r){if(t&&t!==`auto`)return t;let i=j(r);for(let t of i)if(await t.detect(e,n))return t.name;return`npm`}function U(e,t,n,r=[]){return{name:`regpick:core-add`,async finish(i){if([...e.dependencies,...e.devDependencies].length>0){let r=await H(i.cwd,t.packageManager,n,t),a=F(i.cwd,r,e.dependencies,e.devDependencies,n,t);if(!a.ok)throw Error(`Failed to install dependencies: ${a.error.message}`)}if(`flushToDisk`in i.vfs&&await i.vfs.flushToDisk(),r.length>0){let e=await z(i.cwd,n);for(let t of r)e.components||={},e.components[t.name]={source:t.sourceMeta?.originalSource??`unknown`,hash:`pending`};await B(i.cwd,e,n)}}}}async function W(r){let a=await i(r.cwd);return a.configPath?t(a):(r.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`)))}async function G(i,a){let o=i.args.positionals[0]===`add`?1:0,s=i.args.positionals[o];if(s)return t(r(s,a));let c=Object.entries(a.registries||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(c.length){let o=await i.runtime.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:c,maxItems:1,required:!1});if(await i.runtime.prompt.isCancel(o))return n(e(`UserCancelled`,`Operation cancelled.`));if(Array.isArray(o)&&o.length>0)return t(r(String(o[0]),a))}let l=await i.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await i.runtime.prompt.isCancel(l)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(l))}async function K(r,i,o){let s=(r.args.positionals[0]===`add`?1:0)+1,c=await a(i,r.cwd,r.runtime,o);if(!c.ok)return c;let{items:l}=c.value;if(!l.length)return r.runtime.prompt.warn(`No installable items in registry.`),n(e(`ValidationError`,`No installable items in registry.`));let u=r.args.positionals[s];u&&!r.args.flags.select&&(r.args.flags.select=u);let d=O(l,r),f;if(d.ok&&d.value)f=d.value;else if(d.ok){let t=await r.runtime.prompt.autocompleteMultiselect({message:`Select items to install`,options:l.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(await r.runtime.prompt.isCancel(t))return n(e(`UserCancelled`,`Operation cancelled.`));let i=new Set((Array.isArray(t)?t:[]).map(String));f=l.filter(e=>i.has(e.name))}else return n(d.error);if(!f.length)return r.runtime.prompt.warn(`No items selected.`),n(e(`ValidationError`,`No items selected.`));let{resolvedItems:p,missingDependencies:m}=w(f,l);return t({selectedItems:p,missingRegistryDeps:m})}async function q(e,r,i){let a=T(i,e.cwd,r);if(!a.ok)return n(a.error);let o=new Set,s=a.value.plannedWrites;for(let t of s)await e.runtime.fs.pathExists(t.absoluteTarget)&&o.add(t.absoluteTarget);let c=T(i,e.cwd,r,o);if(!c.ok)return n(c.error);let{missingDependencies:l,missingDevDependencies:u}=P(i,e.cwd,e.runtime);return t({selectedItems:i,missingDependencies:l,missingDevDependencies:u,plannedWrites:c.value.plannedWrites,existingTargets:o})}async function J(r,i,a){let o=!!r.args.flags.yes;if(!o){let t=await r.runtime.prompt.confirm({message:`Install ${a.selectedItems.length} item(s)?`,initialValue:!0});if(await r.runtime.prompt.isCancel(t)||!t)return n(e(`UserCancelled`,`Operation cancelled.`))}let s=[];for(let t of a.plannedWrites)if(a.existingTargets.has(t.absoluteTarget))if(o||i.overwritePolicy===`overwrite`)s.push(t);else if(i.overwritePolicy===`skip`)r.runtime.prompt.warn(`Skipped existing file: ${t.absoluteTarget}`);else{let i=await r.runtime.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(await r.runtime.prompt.isCancel(i)||i===`abort`)return n(e(`UserCancelled`,`Installation aborted by user.`));i===`overwrite`&&s.push(t)}else s.push(t);let c=!1;if(a.missingDependencies.length||a.missingDevDependencies.length)if(o)c=!0;else{let t=H(r.cwd,i.packageManager,r.runtime),o=[];a.missingDependencies.length&&o.push(`dependencies: ${a.missingDependencies.join(`, `)}`),a.missingDevDependencies.length&&o.push(`devDependencies: ${a.missingDevDependencies.join(`, `)}`);let s=await r.runtime.prompt.confirm({message:`Install missing packages with ${t}? (${o.join(` | `)})`,initialValue:!0});if(await r.runtime.prompt.isCancel(s))return n(e(`UserCancelled`,`Dependency installation cancelled by user.`));c=!!s,c||r.runtime.prompt.warn(`Skipped dependency installation.`)}return t({selectedItems:a.selectedItems,shouldInstallDeps:c,finalWrites:s,dependencyPlan:{dependencies:a.missingDependencies,devDependencies:a.missingDevDependencies}})}async function Y(e,r,i,a){let o=[];for(let t of i.finalWrites){let s=i.selectedItems.find(e=>e.name===t.itemName);if(!s)continue;let l=await c(t.sourceFile,s,e.cwd,e.runtime,a);if(!l.ok)return n(l.error);let u=E(l.value,r);o.push({absoluteTarget:t.absoluteTarget,finalContent:u,itemName:t.itemName})}return t({...i,hydratedWrites:o})}async function X(r){let i=await W(r);if(!i.ok)return n(i.error);let a=await G(r,i.value.config);if(!a.ok)return n(a.error);if(!a.value)return t({kind:`noop`,message:`No source provided.`});let c=[...await u(i.value.config.adapters||[],r.cwd),new s,new l,new o],d=await K(r,a.value,c);if(!d.ok)return n(d.error);for(let e of d.value.missingRegistryDeps)r.runtime.prompt.warn(`Registry dependency "${e}" not found in current registry.`);let f=await q(r,i.value.config,d.value.selectedItems);if(!f.ok)return n(f.error);let p=await J(r,i.value.config,f.value);if(!p.ok)return n(p.error);let m=await Y(r,i.value.config,p.value,c);if(!m.ok)return n(m.error);let h=m.value.hydratedWrites.map(e=>({id:e.absoluteTarget,code:e.finalContent})),_=[];for(let e of m.value.hydratedWrites){let t=m.value.selectedItems.find(t=>t.name===e.itemName);t&&!_.some(e=>e.name===t.name)&&_.push(t)}let y=new v,b=new g([...i.value.config.plugins||[],U(m.value.dependencyPlan,i.value.config,r.runtime,_)]);try{await b.run({vfs:y,cwd:r.cwd},h)}catch(t){return y.rollback(),r.runtime.prompt.error(`[Failed] Installation aborted: ${t}`),n(e(`RuntimeError`,String(t)))}return r.runtime.prompt.info(`Installed ${m.value.selectedItems.length} item(s), wrote ${m.value.hydratedWrites.length} file(s).`),t({kind:`success`,message:`Installed ${m.value.selectedItems.length} item(s), wrote ${m.value.hydratedWrites.length} file(s).`})}export{x as a,E as i,z as n,v as o,B as r,X as runAddCommand,g as s,V as t};
|
package/dist/config-COSdj64l.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:path";import"node:fs/promises";import*as t from"valibot";import{loadConfig as n}from"unconfig";const r=t.union([t.literal(`prompt`),t.literal(`overwrite`),t.literal(`skip`)]),i=t.string(),a=t.custom(e=>typeof e==`function`,`Expected a function`),o=t.object({name:t.string(),start:t.optional(a),resolveId:t.optional(a),load:t.optional(a),transform:t.optional(a),finish:t.optional(a),onError:t.optional(a)}),s=t.object({name:t.string(),match:a,resolveManifest:a,resolveItemReference:a,resolveFile:a}),c=t.object({name:t.string(),lockfiles:t.array(t.string()),detect:a,buildInstallCommands:a}),l=t.object({name:t.string(),resolve:a}),u=t.object({registries:t.record(t.string(),t.string()),targetsByType:t.record(t.string(),t.string()),aliases:t.optional(t.record(t.string(),t.string()),{}),overwritePolicy:r,packageManager:i,packageManagers:t.optional(t.array(c),[]),pathResolvers:t.optional(t.array(l),[]),plugins:t.optional(t.array(o),[]),preferManifestTarget:t.boolean(),allowOutsideProject:t.boolean(),adapters:t.optional(t.array(t.union([t.string(),s])),[])}),d={registries:{tebra:`./tebra-icon-registry/registry`},targetsByType:{"registry:icon":`src/components/ui/icons`,"registry:component":`src/components/ui`,"registry:file":`src/components/ui`},aliases:{},overwritePolicy:`prompt`,packageManager:`auto`,packageManagers:[],pathResolvers:[],plugins:[],preferManifestTarget:!0,allowOutsideProject:!1,adapters:[]};function f(t){return e.join(t,`regpick.json`)}async function p(e){let{config:r,sources:i}=await n({sources:[{files:[`regpick`,`.regpickrc`,`regpickrc`],extensions:[`json`,`js`,`ts`,`mjs`,`cjs`,``]},{files:`package.json`,extensions:[],rewrite(e){return e?.regpick}}],defaults:d,merge:!0,cwd:e});return{config:t.parse(u,r),configPath:i[0]||null}}function m(e,t){return e?t.registries[e]?String(t.registries[e]):e:null}export{m as a,p as i,u as n,f as r,s as t};
|
package/dist/init-C9fbqh24.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{i as r,n as i,r as a}from"./config-COSdj64l.mjs";import*as o from"valibot";function s(e,t){return e?`cancelled`:t?`overwrite`:`keep`}async function c(e){let n=a(e.cwd),i=(await e.runtime.fs.stat(n)).ok,{config:o}=await r(e.cwd);return t({configPath:n,exists:i,existingConfig:o})}async function l(r,a){if(a.exists){let i=await r.runtime.prompt.confirm({message:`${a.configPath} already exists. Overwrite?`,initialValue:!1}),o=s(await r.runtime.prompt.isCancel(i),!!i);if(o===`cancelled`)return n(e(`UserCancelled`,`Operation cancelled.`));if(o===`keep`)return r.runtime.prompt.info(`Keeping existing configuration.`),t(null)}let c=!!r.args.flags.yes,l=c?`auto`:await r.runtime.prompt.select({message:`Jakiego menedżera pakietów używasz?`,options:[{value:`auto`,label:`Auto (wykrywanie)`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`pnpm`,label:`pnpm`}]}),u=await r.runtime.prompt.isCancel(l);if(!c&&u)return n(e(`UserCancelled`,`Operation cancelled.`));let d=c?`src/components/ui`:await r.runtime.prompt.text({message:`W jakim folderze trzymasz komponenty UI?`,placeholder:`src/components/ui`}),f=await r.runtime.prompt.isCancel(d);if(!c&&f)return n(e(`UserCancelled`,`Operation cancelled.`));let p=c?`prompt`:await r.runtime.prompt.select({message:`Czy chcesz nadpisywać pliki automatycznie, czy wolisz być pytany?`,options:[{value:`prompt`,label:`Pytaj (prompt)`},{value:`overwrite`,label:`Zawsze nadpisuj (overwrite)`},{value:`skip`,label:`Pomijaj nadpisywanie (skip)`}]}),m=await r.runtime.prompt.isCancel(p);if(!c&&m)return n(e(`UserCancelled`,`Operation cancelled.`));let h={...a.existingConfig,packageManager:String(l),overwritePolicy:String(p),targetsByType:{...a.existingConfig.targetsByType,"registry:component":String(d||`src/components/ui`),"registry:file":String(d||`src/components/ui`),"registry:icon":`${String(d||`src/components/ui`)}/icons`}};return t({newConfig:o.parse(i,h),configPath:a.configPath,isOverwrite:a.exists})}async function u(e){let r=await c(e);if(!r.ok)return n(r.error);let i=await l(e,r.value);if(!i.ok)return n(i.error);if(!i.value)return t({kind:`noop`,message:`Keeping existing configuration.`});let a=JSON.stringify(i.value.newConfig,null,2),o=await e.runtime.fs.writeFile(i.value.configPath,a,`utf8`);return o.ok?(e.runtime.prompt.success(`${i.value.isOverwrite?`Overwrote`:`Created`} ${i.value.configPath}`),t({kind:`success`,message:`${i.value.isOverwrite?`Overwrote`:`Created`} ${i.value.configPath}`})):(e.runtime.prompt.error(`Failed to write config file: ${i.value.configPath}`),n(o.error))}export{u as runInitCommand};
|
package/dist/list-C-vpoz7M.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{i as r}from"./config-COSdj64l.mjs";import{a as i,i as a,n as o,r as s,t as c}from"./registry-ZprC228m.mjs";function l(e,t){return e?t[e]?String(t[e]):e:null}function u(e,t){let n=l(e,t);if(n)return{source:n,requiresPrompt:!1};let r=Object.keys(t)[0];return r?{source:l(r,t),requiresPrompt:!1}:{source:null,requiresPrompt:!0}}async function d(e){let{config:n}=await r(e.cwd),i=u(e.args.positionals[1],n.registries),l=[...await c(n.adapters||[],e.cwd),new o,new s,new a];return t({source:i.source,requiresPrompt:i.requiresPrompt,adapters:l})}async function f(r,i){if(!i.requiresPrompt)return t(i.source);let a=await r.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await r.runtime.prompt.isCancel(a)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(a))}async function p(e,n,r){let a=await i(n,e.cwd,e.runtime,r);return a.ok?t(a.value.items):a}function m(e){let t=e.type||`registry:file`,n=Array.isArray(e.files)?e.files.length:0;return`${e.name} (${t}, files: ${n})`}function h(e,t){e.runtime.prompt.info(`Found ${t.length} items.`);for(let e of t)console.log(`- ${m(e)}`)}async function g(e){let r=await d(e);if(!r.ok)return n(r.error);let i=await f(e,r.value);if(!i.ok)return n(i.error);if(!i.value)return t({kind:`noop`,message:`No registry source provided.`});let a=await p(e,i.value,r.value.adapters);if(!a.ok)return n(a.error);let o=a.value;return o.length?(h(e,o),t({kind:`success`,message:`Listed ${o.length} item(s).`})):(e.runtime.prompt.warn(`No items found in registry.`),t({kind:`noop`,message:`No items found in registry.`}))}export{g as runListCommand};
|