regpick 0.8.0 → 0.9.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-DTgZRyi9.mjs +1 -0
- package/dist/config-DBCWbzyr.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/dist/{init-8i9wc4T8.mjs → init-v_ycOf8A.mjs} +1 -1
- package/dist/{list-Bss9NK-X.mjs → list-fuT3LlGZ.mjs} +1 -1
- package/dist/pack-C5oJjxLv.mjs +1 -0
- package/dist/registry-Ccy74Ba7.mjs +1 -0
- package/dist/update-Bvs7BJaD.mjs +2 -0
- package/package.json +4 -3
- package/dist/add-Dk_Qszjz.mjs +0 -1
- package/dist/config-DF-S5_la.mjs +0 -1
- package/dist/pack-wVOoOChv.mjs +0 -1
- package/dist/registry-2GjgbSBI.mjs +0 -1
- package/dist/update-CTZdZqoY.mjs +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{n as r,r as i}from"./config-DBCWbzyr.mjs";import{n as a,t as o}from"./registry-Ccy74Ba7.mjs";import s from"node:path";import*as c from"valibot";import l from"node:crypto";function u(e){return e.replace(/\\/g,`/`)}function d(r,i,a){let o=`${s.resolve(r)}${s.sep}`,c=s.resolve(i);return a?t(void 0):c!==s.resolve(r)&&!c.startsWith(o)?n(e(`ValidationError`,`Refusing to write outside project: ${c}`)):t(void 0)}function f(e,n,r,i){let a=n.type||e.type||`registry:file`,o=i.targetsByType?.[a],c=i.preferManifestTarget!==!1,l=s.basename(n.path||`${e.name}.txt`),f;f=c&&n.target?n.target:o?s.join(o,l):n.target?n.target:s.join(`src`,l);let p=s.resolve(r,f),m=d(r,p,!!i.allowOutsideProject);return m.ok?t({absoluteTarget:p,relativeTarget:u(s.relative(r,p))}):m}function p(e){return[...new Set(e.filter(Boolean))]}function m(e){return{dependencies:p(e.flatMap(e=>e.dependencies||[])),devDependencies:p(e.flatMap(e=>e.devDependencies||[]))}}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:Array.from(n.values()),missingDependencies:p(i)}}function g(e,n,r,i=new Set){let a=[],o=[];for(let t of e)for(let e of t.files){let s=f(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:m(e),conflicts:o})}function _(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 v(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function y(r,i){let{flags:a}=i.args,o=v(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)}function b(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}function x(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}function S(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}const C={npm:{manager:`npm`,buildInstallCommands:b},yarn:{manager:`yarn`,buildInstallCommands:x},pnpm:{manager:`pnpm`,buildInstallCommands:S}};function w(e){return C[e]}function T(e){return[...new Set(e.filter(Boolean))]}function E(e,t,n){let r=s.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=n.fs.readJsonSync(r),a=i.ok?i.value:{},o={...a.dependencies||{},...a.devDependencies||{},...a.peerDependencies||{}},c=T(e.flatMap(e=>e.dependencies||[])),l=T(e.flatMap(e=>e.devDependencies||[]));return{missingDependencies:c.filter(e=>!o[e]),missingDevDependencies:l.filter(e=>!o[e])}}function D(r,i,a,o,s){if(!a.length&&!o.length)return t(void 0);let c=w(i).buildInstallCommands(a,o);for(let t of c)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 O=c.object({components:c.record(c.string(),c.object({version:c.optional(c.string()),source:c.optional(c.string()),hash:c.string()}))});function k(e){return s.join(e,`regpick-lock.json`)}async function A(e,t){let n=k(e);if(!await t.fs.pathExists(n))return{components:{}};let r=t.fs.readJsonSync(n);if(!r.ok)return{components:{}};try{return c.parse(O,r.value)}catch{return{components:{}}}}async function j(e,t,n){let r=k(e);await n.fs.writeJson(r,t,{spaces:2})}function M(e){return l.createHash(`sha256`).update(e).digest(`hex`)}function N(e,t,n){return t&&t!==`auto`?t:n.fs.existsSync(s.join(e,`pnpm-lock.yaml`))?`pnpm`:n.fs.existsSync(s.join(e,`yarn.lock`))?`yarn`:(n.fs.existsSync(s.join(e,`package-lock.json`)),`npm`)}async function P(r,a,o){let s=o[1];if(s)return t(i(s,a));let c=Object.entries(a.registries||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(c.length){let o=await r.runtime.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:c,maxItems:1,required:!1});if(await r.runtime.prompt.isCancel(o))return n(e(`UserCancelled`,`Operation cancelled.`));if(Array.isArray(o)&&o.length>0)return t(i(String(o[0]),a))}let l=await r.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await r.runtime.prompt.isCancel(l)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(l))}function F(e){return e.map(e=>({value:e.name,label:`${e.name} (${e.type||`registry:file`})`,hint:e.description||`${e.files.length} file(s)`}))}async function I(r,i){if(!i.length)return t([]);let a=await r.runtime.prompt.autocompleteMultiselect({message:`Select items to install`,options:F(i),maxItems:10,required:!0});if(await r.runtime.prompt.isCancel(a))return n(e(`UserCancelled`,`Operation cancelled.`));let o=Array.isArray(a)?a:[],s=new Set(o.map(e=>String(e)));return t(i.filter(e=>s.has(e.name)))}async function L(i){let c=!!i.args.flags.yes,{config:l,configPath:u}=await r(i.cwd);if(!u)return i.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`));let d=(i.args.positionals[0]===`add`?1:0)+1,f=await P(i,l,i.args.positionals);if(!f.ok)return f;let p=f.value;if(!p)return t({kind:`noop`,message:`No registry source provided.`});let m=await o(p,i.cwd,i.runtime);if(!m.ok)return m;let{items:v}=m.value;if(!v.length)return i.runtime.prompt.warn(`No installable items in registry.`),t({kind:`noop`,message:`No installable items in registry.`});let b=i.args.positionals[d];b&&!i.args.flags.select&&(i.args.flags.select=b);let x=y(v,i),S=x.ok&&x.value?x:await I(i,v);if(!S.ok)return S;let C=S.value,{resolvedItems:w,missingDependencies:T}=h(C,v);C=w;for(let e of T)i.runtime.prompt.warn(`Registry dependency "${e}" not found in current registry.`);if(!C||!C.length)return i.runtime.prompt.warn(`No items selected.`),t({kind:`noop`,message:`No items selected.`});if(!c){let t=await i.runtime.prompt.confirm({message:`Install ${C.length} item(s)?`,initialValue:!0});if(await i.runtime.prompt.isCancel(t)||!t)return n(e(`UserCancelled`,`Operation cancelled.`))}let O=new Set,k=g(C,i.cwd,l);if(!k.ok)return k;let F=k.value;for(let e of F.plannedWrites)await i.runtime.fs.pathExists(e.absoluteTarget)&&O.add(e.absoluteTarget);let L=g(C,i.cwd,l,O);if(!L.ok)return L;let R=L.value,z=[];for(let t of R.plannedWrites)if(O.has(t.absoluteTarget))if(c||l.overwritePolicy===`overwrite`)z.push(t);else if(l.overwritePolicy===`skip`)i.runtime.prompt.warn(`Skipped existing file: ${t.absoluteTarget}`);else{let r=await i.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 i.runtime.prompt.isCancel(r)||r===`abort`)return n(e(`UserCancelled`,`Installation aborted by user.`));r===`overwrite`&&z.push(t)}else z.push(t);let{missingDependencies:B,missingDevDependencies:V}=E(C,i.cwd,i.runtime),H=!1;if(B.length||V.length)if(c)H=!0;else{let t=N(i.cwd,l.packageManager,i.runtime),r=[];B.length&&r.push(`dependencies: ${B.join(`, `)}`),V.length&&r.push(`devDependencies: ${V.join(`, `)}`);let a=await i.runtime.prompt.confirm({message:`Install missing packages with ${t}? (${r.join(` | `)})`,initialValue:!0});if(await i.runtime.prompt.isCancel(a))return n(e(`UserCancelled`,`Dependency installation cancelled by user.`));H=!!a,H||i.runtime.prompt.warn(`Skipped dependency installation.`)}let U=0,W=await A(i.cwd,i.runtime),G={};for(let e of z){let t=C.find(t=>t.name===e.itemName);if(!t)continue;let n=await a(e.sourceFile,t,i.cwd,i.runtime);if(!n.ok)return n;let r=_(n.value,l),o=await i.runtime.fs.ensureDir(s.dirname(e.absoluteTarget));if(!o.ok)return o;let c=await i.runtime.fs.writeFile(e.absoluteTarget,r,`utf8`);if(!c.ok)return c;let u=M(r);G[t.name]||(G[t.name]=[]),G[t.name].push(u),U+=1,i.runtime.prompt.success(`Wrote ${e.relativeTarget}`)}if(U>0){for(let[e,t]of Object.entries(G)){let n=M(t.sort().join(``));W.components[e]={source:p,hash:n}}await j(i.cwd,W,i.runtime)}if(H){let e=N(i.cwd,l.packageManager,i.runtime),t=D(i.cwd,e,B,V,i.runtime);if(!t.ok)return t}return i.runtime.prompt.info(`Installed ${C.length} item(s), wrote ${U} file(s).`),t({kind:`success`,message:`Installed ${C.length} item(s), wrote ${U} file(s).`})}export{f as a,_ as i,A as n,j as r,L as runAddCommand,M as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:path";import t from"node:fs/promises";import{loadConfig as n}from"unconfig";import*as r from"valibot";const i=r.union([r.literal(`prompt`),r.literal(`overwrite`),r.literal(`skip`)]),a=r.union([r.literal(`auto`),r.literal(`npm`),r.literal(`yarn`),r.literal(`pnpm`)]),o=r.object({registries:r.record(r.string(),r.string()),targetsByType:r.record(r.string(),r.string()),aliases:r.optional(r.record(r.string(),r.string()),{}),overwritePolicy:i,packageManager:a,preferManifestTarget:r.boolean(),allowOutsideProject:r.boolean()}),s={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`,preferManifestTarget:!0,allowOutsideProject:!1};function c(t){return e.join(t,`regpick.json`)}async function l(e){let{config:t,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:s,merge:!0,cwd:e});return{config:r.parse(o,t),configPath:i[0]||null}}async function u(e,n,{overwrite:r=!1}={}){let i=c(e),a=!1;try{await t.access(i),a=!0}catch{}return a&&!r?{filePath:i,written:!1}:(await t.writeFile(i,JSON.stringify(n,null,2),`utf8`),{filePath:i,written:!0})}function d(e,t){return e?t.registries[e]?String(t.registries[e]):e:null}export{u as i,l as n,d 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-Cr6fDIR9.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-Cr6fDIR9.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-v_ycOf8A.mjs`).then(e=>e.runInitCommand(f));else if(l===`list`)e=await import(`./list-fuT3LlGZ.mjs`).then(e=>e.runListCommand(f));else if(l===`add`)e=await import(`./add-DTgZRyi9.mjs`).then(e=>e.runAddCommand(f));else if(l===`update`)e=await import(`./update-Bvs7BJaD.mjs`).then(e=>e.runUpdateCommand(f));else if(l===`pack`)e=await import(`./pack-C5oJjxLv.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};
|
|
@@ -1 +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,t as a}from"./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,n as i,t as a}from"./config-DBCWbzyr.mjs";function o(e,t){return e?`cancelled`:t?`overwrite`:`keep`}async function s(s){let c=a(s.cwd),l=await s.runtime.fs.stat(c);if(l.ok){let r=await s.runtime.prompt.confirm({message:`${c} already exists. Overwrite?`,initialValue:!1}),i=o(await s.runtime.prompt.isCancel(r),!!r);if(i===`cancelled`)return n(e(`UserCancelled`,`Operation cancelled.`));if(i===`keep`)return s.runtime.prompt.info(`Keeping existing configuration.`),t({kind:`noop`,message:`Keeping existing configuration.`})}let{config:u}=await i(s.cwd),d=!!s.args.flags.yes,f=d?`auto`:await s.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`}]}),p=await s.runtime.prompt.isCancel(f);if(!d&&p)return n(e(`UserCancelled`,`Operation cancelled.`));let m=d?`src/components/ui`:await s.runtime.prompt.text({message:`W jakim folderze trzymasz komponenty UI?`,placeholder:`src/components/ui`}),h=await s.runtime.prompt.isCancel(m);if(!d&&h)return n(e(`UserCancelled`,`Operation cancelled.`));let g=d?`prompt`:await s.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)`}]}),_=await s.runtime.prompt.isCancel(g);if(!d&&_)return n(e(`UserCancelled`,`Operation cancelled.`));let v={...u,packageManager:String(f),overwritePolicy:String(g),targetsByType:{...u.targetsByType,"registry:component":String(m||`src/components/ui`),"registry:file":String(m||`src/components/ui`),"registry:icon":`${String(m||`src/components/ui`)}/icons`}};try{await r(s.cwd,v,{overwrite:!0})}catch(t){let r=`Failed to write config file: ${t instanceof Error?t.message:String(t)}`;return s.runtime.prompt.error(r),n(e(`RuntimeError`,r))}return s.runtime.prompt.success(`${l.ok?`Overwrote`:`Created`} ${c}`),t({kind:`success`,message:`${l.ok?`Overwrote`:`Created`} ${c}`})}export{s as runInitCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import{n 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{n as r}from"./config-DBCWbzyr.mjs";import{t as i}from"./registry-Ccy74Ba7.mjs";function a(e,t){return e?t[e]?String(t[e]):e:null}function o(e,t){let n=a(e,t);if(n)return{source:n,requiresPrompt:!1};let r=Object.keys(t)[0];return r?{source:a(r,t),requiresPrompt:!1}:{source:null,requiresPrompt:!0}}function s(e){let t=e.type||`registry:file`,n=Array.isArray(e.files)?e.files.length:0;return`${e.name} (${t}, files: ${n})`}async function c(a){let{config:c}=await r(a.cwd),l=o(a.args.positionals[1],c.registries),u=l.source;if(l.requiresPrompt){let t=await a.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});if(await a.runtime.prompt.isCancel(t))return n(e(`UserCancelled`,`Operation cancelled.`));u=String(t)}if(!u)return t({kind:`noop`,message:`No registry source provided.`});let d=await i(u,a.cwd,a.runtime);if(!d.ok)return d;let{items:f}=d.value;if(!f.length)return a.runtime.prompt.warn(`No items found in registry.`),t({kind:`noop`,message:`No items found in registry.`});a.runtime.prompt.info(`Found ${f.length} items.`);for(let e of f)console.log(`- ${s(e)}`);return t({kind:`success`,message:`Listed ${f.length} item(s).`})}export{c as runListCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import r from"node:path";function i(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 a(e){let t=i(e.content),n=r.relative(e.targetDir,e.path).replace(/\\/g,`/`),a=r.basename(e.path,r.extname(e.path));return{name:a,title:a,description:`Packed component`,type:`registry:component`,dependencies:t,devDependencies:[],registryDependencies:[],files:[{path:n,type:`registry:component`}]}}async function o(e,i){let a=[];async function o(e){let n=await i.runtime.fs.readdir(e);if(!n.ok)return n;for(let t of n.value){let n=r.join(e,t),s=await i.runtime.fs.stat(n);if(!s.ok)return s;if(s.value.isDirectory()){let e=await o(n);if(!e.ok)return e}else (n.endsWith(`.ts`)||n.endsWith(`.tsx`))&&a.push(n)}return t(void 0)}let s=await o(e);return s.ok?t(a):n(s.error)}async function s(i){let s=i.args.positionals[1]||`.`,c=r.resolve(i.cwd,s),l=await i.runtime.fs.stat(c);if(!l.ok||!l.value.isDirectory())return n(e(`ValidationError`,`Target is not a directory: ${c}`));i.runtime.prompt.info(`Scanning ${c} for components...`);let u=await o(c,i);if(!u.ok)return u;let d=u.value;if(d.length===0)return i.runtime.prompt.warn(`No .ts or .tsx files found.`),t({kind:`noop`,message:`No files found.`});let f=[];for(let e of d){let t=await i.runtime.fs.readFile(e,`utf8`);if(!t.ok)return n(t.error);f.push(a({path:e,content:t.value,targetDir:c}))}let p={items:f},m=r.join(i.cwd,`registry.json`),h=await i.runtime.fs.writeJson(m,p,{spaces:2});return h.ok?(i.runtime.prompt.success(`Packed ${f.length} components into registry.json`),t({kind:`success`,message:`Generated registry.json`})):n(h.error)}export{s as runPackCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import r from"node:path";import*as i from"valibot";import{fileURLToPath as a}from"node:url";const o=i.object({path:i.optional(i.string()),target:i.optional(i.string()),type:i.optional(i.string(),`registry:file`),content:i.optional(i.string()),url:i.optional(i.string())}),s=i.object({name:i.optional(i.string(),`unnamed-item`),title:i.optional(i.string()),description:i.optional(i.string(),``),type:i.optional(i.string(),`registry:file`),dependencies:i.optional(i.array(i.string()),[]),devDependencies:i.optional(i.array(i.string()),[]),registryDependencies:i.optional(i.array(i.string()),[]),files:i.optional(i.array(o),[])});function c(e,t){let n=i.parse(s,e),r=n.name===`unnamed-item`&&n.title?n.title:n.name,a=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:a,files:o,sourceMeta:t}}function l(e){return!e||!Array.isArray(e.items)?[]:e.items.filter(e=>!!(e&&typeof e==`object`)).map(e=>Array.isArray(e.files)?null:typeof e.url==`string`?e.url:typeof e.href==`string`?e.href:typeof e.path==`string`?e.path:null).filter(e=>!!e)}function u(r,a){try{return Array.isArray(r)?t(r.filter(e=>!!(e&&typeof e==`object`)).map(e=>c(e,a))):r&&typeof r==`object`&&Array.isArray(r.items)?t(r.items.filter(e=>e&&typeof e==`object`&&Array.isArray(e.files)).map(e=>c(e,a))):r&&typeof r==`object`&&Array.isArray(r.files)?t([c(r,a)]):n(e(`RegistryError`,`Unsupported manifest structure.`))}catch(t){return i.isValiError(t)?n(e(`ValidationError`,`Manifest validation failed: ${t.message}`)):n(e(`RegistryError`,`Failed to parse manifest`))}}function d(e){return/^https?:\/\//i.test(e)}function f(e){return e.includes(`github.com`)?e.replace(/^https?:\/\/github\.com\//,`https://raw.githubusercontent.com/`).replace(/\/(blob|tree)\//,`/`):e}function p(e){return/^file:\/\//i.test(e)}function m(e,t){return new URL(t,e).toString()}async function h(i,a,o){let s=u(i,a);if(!i||typeof i!=`object`||Array.isArray(i))return s;let f=l(i);if(!f.length)return s;let p=s.ok?s.value:[],h=[];for(let t of f){let i;if(d(t)){let e=await o.http.getJson(t);if(!e.ok)return n(e.error);i=e.value}else if(a.type===`http`&&a.baseUrl){let e=await o.http.getJson(m(a.baseUrl,t));if(!e.ok)return n(e.error);i=e.value}else if((a.type===`file`||a.type===`directory`)&&a.baseDir){let s=await o.fs.readFile(r.resolve(a.baseDir,t),`utf8`);if(!s.ok)return n(s.error);try{i=JSON.parse(s.value)}catch{return n(e(`RegistryError`,`Invalid JSON: ${t}`))}}else{let a=await o.fs.readFile(r.resolve(t),`utf8`);if(!a.ok)return n(a.error);try{i=JSON.parse(a.value)}catch{return n(e(`RegistryError`,`Invalid JSON: ${t}`))}}i&&typeof i==`object`&&h.push(c(i,a))}return t([...p,...h])}async function g(e,i){let a=r.resolve(e),o=await i.fs.readdir(a);if(!o.ok)return n(o.error);let s=o.value.filter(e=>e.endsWith(`.json`)),l=[];for(let e of s){let t=r.join(a,e),o=await i.fs.readFile(t,`utf8`);if(!o.ok)return n(o.error);let s;try{s=JSON.parse(o.value)}catch{continue}!s||typeof s!=`object`||!Array.isArray(s.files)||l.push(c(s,{type:`directory`,baseDir:a}))}return t(l)}async function _(i,o,s){if(!i)return n(e(`ValidationError`,`Registry source is required.`));let c=d(i)||p(i)?f(i):r.resolve(o,i);if(d(c)){let e=await s.http.getJson(c);if(!e.ok)return n(e.error);let r=c.endsWith(`/`)?c:c.replace(/[^/]*$/,``),i=await h(e.value,{type:`http`,baseUrl:r},s);return i.ok?t({items:i.value,source:c}):n(i.error)}let l=p(c)?a(new URL(c)):r.resolve(c),u=await s.fs.stat(l);if(!u.ok)return n(e(`RegistryError`,`Registry source not found: ${i}`));if(u.value.isDirectory()){let e=await g(l,s);return e.ok?t({items:e.value,source:l}):n(e.error)}let m=await s.fs.readFile(l,`utf8`);if(!m.ok)return n(m.error);let _;try{_=JSON.parse(m.value)}catch(t){return n(e(`RegistryError`,`Failed to parse registry JSON.`,t))}let v=await h(_,{type:`file`,baseDir:r.dirname(l)},s);return v.ok?t({items:v.value,source:l}):n(v.error)}async function v(i,a,o,s){if(typeof i.content==`string`)return t(i.content);let c=i.url||i.path;if(!c)return n(e(`ValidationError`,`File entry in "${a.name}" is missing both content and path/url.`));let l=d(c)?f(c):c;if(d(l))return await s.http.getText(l);if(a.sourceMeta.type===`http`&&a.sourceMeta.baseUrl){let e=m(a.sourceMeta.baseUrl,l);return await s.http.getText(e)}let u=a.sourceMeta.baseDir&&!r.isAbsolute(c)?r.resolve(a.sourceMeta.baseDir,c):r.resolve(o,c);return await s.fs.readFile(u,`utf8`)}export{v as n,_ as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e}from"./result-Dmv-uoQK.mjs";import{n as t}from"./config-DBCWbzyr.mjs";import{n,t as r}from"./registry-Ccy74Ba7.mjs";import{a as i,i as a,n as o,r as s,t as c}from"./add-DTgZRyi9.mjs";import l from"node:path";import{styleText as u}from"node:util";function d(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 f(t,n,r,o,s,l){let u=[],d=[];for(let{file:e,content:t}of r){let r=a(t,l);u.push(r);let o=i(n,e,s,l);if(!o.ok)return o;d.push({target:o.value.absoluteTarget,content:r})}let f=c(u.sort().join(``));return e({itemName:t,status:f===o?`up-to-date`:`requires-diff-prompt`,newHash:f,files:d})}async function p(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(u(t,`${n}${e}`))}}async function m(i){let a=await o(i.cwd,i.runtime);if(Object.keys(a.components).length===0)return i.runtime.prompt.info(`No components installed. Nothing to update.`),e({kind:`noop`,message:`No components to update.`});let{config:c}=await t(i.cwd),m=d(a),h=0;for(let[e,t]of Object.entries(m)){let o=await r(e,i.cwd,i.runtime);if(!o.ok){i.runtime.prompt.warn(`Failed to load registry ${e}`);continue}let s=o.value.items;for(let e of t){let t=s.find(t=>t.name===e);if(!t)continue;let r=[];for(let e of t.files){let a=await n(e,t,i.cwd,i.runtime);a.ok&&r.push({file:e,content:a.value})}let o=a.components[e].hash,d=f(e,t,r,o,i.cwd,c);if(!d.ok)continue;let m=d.value;if(m.status===`requires-diff-prompt`){i.runtime.prompt.info(`Update available for ${e}`);let t=await i.runtime.prompt.select({message:`What do you want to do with ${e}?`,options:[{value:`diff`,label:`Show diff`},{value:`update`,label:`Update`},{value:`skip`,label:`Skip`}]});if(await i.runtime.prompt.isCancel(t)||t===`skip`)continue;if(t===`diff`){for(let e of m.files){let t=await i.runtime.fs.readFile(e.target,`utf8`),n=t.ok?t.value:``;console.log(u(`bold`,`\nDiff for ${e.target}:`)),await p(n,e.content)}let t=await i.runtime.prompt.confirm({message:`Update ${e} now?`,initialValue:!0});if(await i.runtime.prompt.isCancel(t)||!t)continue}for(let e of m.files){let t=await i.runtime.fs.ensureDir(l.dirname(e.target));if(!t.ok)return t;let n=await i.runtime.fs.writeFile(e.target,e.content,`utf8`);if(!n.ok)return n}a.components[e].hash=m.newHash,h++,i.runtime.prompt.success(`Updated ${e}`)}}}return h>0?(await s(i.cwd,a,i.runtime),e({kind:`success`,message:`Updated ${h} components.`})):e({kind:`noop`,message:`All components are up to date.`})}export{m as runUpdateCommand};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "regpick",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Lightweight CLI for selecting and installing registry entries.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -60,7 +60,8 @@
|
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@clack/prompts": "^1.0.1",
|
|
62
62
|
"diff": "^8.0.3",
|
|
63
|
-
"unconfig": "^7.5.0"
|
|
63
|
+
"unconfig": "^7.5.0",
|
|
64
|
+
"valibot": "^1.2.0"
|
|
64
65
|
},
|
|
65
66
|
"devDependencies": {
|
|
66
67
|
"@commitlint/cli": "^20.4.2",
|
|
@@ -69,13 +70,13 @@
|
|
|
69
70
|
"@types/diff": "^7.0.2",
|
|
70
71
|
"@types/node": "^24.3.0",
|
|
71
72
|
"@vitest/coverage-v8": "^4.0.18",
|
|
72
|
-
"vite-tsconfig-paths": "^6.1.1",
|
|
73
73
|
"husky": "^9.1.7",
|
|
74
74
|
"oxlint": "^1.50.0",
|
|
75
75
|
"release-it": "^19.2.4",
|
|
76
76
|
"tsdown": "^0.21.0-beta.2",
|
|
77
77
|
"tsx": "^4.20.5",
|
|
78
78
|
"typescript": "^5.9.2",
|
|
79
|
+
"vite-tsconfig-paths": "^6.1.1",
|
|
79
80
|
"vitest": "^4.0.18"
|
|
80
81
|
}
|
|
81
82
|
}
|
package/dist/add-Dk_Qszjz.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{n as r,r as i}from"./config-DF-S5_la.mjs";import{n as a,t as o}from"./registry-2GjgbSBI.mjs";import s from"node:path";import c from"node:crypto";function l(e){return e.replace(/\\/g,`/`)}function u(r,i,a){let o=`${s.resolve(r)}${s.sep}`,c=s.resolve(i);return a?t(void 0):c!==s.resolve(r)&&!c.startsWith(o)?n(e(`ValidationError`,`Refusing to write outside project: ${c}`)):t(void 0)}function d(e,n,r,i){let a=n.type||e.type||`registry:file`,o=i.targetsByType?.[a],c=i.preferManifestTarget!==!1,d=s.basename(n.path||`${e.name}.txt`),f;f=c&&n.target?n.target:o?s.join(o,d):n.target?n.target:s.join(`src`,d);let p=s.resolve(r,f),m=u(r,p,!!i.allowOutsideProject);return m.ok?t({absoluteTarget:p,relativeTarget:l(s.relative(r,p))}):m}function f(e){return[...new Set(e.filter(Boolean))]}function p(e){return{dependencies:f(e.flatMap(e=>e.dependencies||[])),devDependencies:f(e.flatMap(e=>e.devDependencies||[]))}}function m(e,n,r,i=new Set){let a=[],o=[];for(let t of e)for(let e of t.files){let s=d(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:p(e),conflicts:o})}function h(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 g(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function _(r,i){let{flags:a}=i.args,o=g(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)}function v(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}function y(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}function b(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}const x={npm:{manager:`npm`,buildInstallCommands:v},yarn:{manager:`yarn`,buildInstallCommands:y},pnpm:{manager:`pnpm`,buildInstallCommands:b}};function S(e){return x[e]}function C(e){return[...new Set(e.filter(Boolean))]}function w(e,t,n){let r=s.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=n.fs.readJsonSync(r),a=i.ok?i.value:{},o={...a.dependencies||{},...a.devDependencies||{},...a.peerDependencies||{}},c=C(e.flatMap(e=>e.dependencies||[])),l=C(e.flatMap(e=>e.devDependencies||[]));return{missingDependencies:c.filter(e=>!o[e]),missingDevDependencies:l.filter(e=>!o[e])}}function T(r,i,a,o,s){if(!a.length&&!o.length)return t(void 0);let c=S(i).buildInstallCommands(a,o);for(let t of c)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)}function E(e){return s.join(e,`regpick-lock.json`)}async function D(e,t){let n=E(e);if(!await t.fs.pathExists(n))return{components:{}};let r=t.fs.readJsonSync(n);return r.ok?r.value:{components:{}}}async function O(e,t,n){let r=E(e);await n.fs.writeJson(r,t,{spaces:2})}function k(e){return c.createHash(`sha256`).update(e).digest(`hex`)}function A(e,t,n){return t&&t!==`auto`?t:n.fs.existsSync(s.join(e,`pnpm-lock.yaml`))?`pnpm`:n.fs.existsSync(s.join(e,`yarn.lock`))?`yarn`:(n.fs.existsSync(s.join(e,`package-lock.json`)),`npm`)}async function j(r,a,o){let s=o[1];if(s)return t(i(s,a));let c=Object.entries(a.registries||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(c.length){let o=await r.runtime.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:c,maxItems:1,required:!1});if(await r.runtime.prompt.isCancel(o))return n(e(`UserCancelled`,`Operation cancelled.`));if(Array.isArray(o)&&o.length>0)return t(i(String(o[0]),a))}let l=await r.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await r.runtime.prompt.isCancel(l)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(l))}function M(e){return e.map(e=>({value:e.name,label:`${e.name} (${e.type||`registry:file`})`,hint:e.description||`${e.files.length} file(s)`}))}async function N(r,i){if(!i.length)return t([]);let a=await r.runtime.prompt.autocompleteMultiselect({message:`Select items to install`,options:M(i),maxItems:10,required:!0});if(await r.runtime.prompt.isCancel(a))return n(e(`UserCancelled`,`Operation cancelled.`));let o=Array.isArray(a)?a:[],s=new Set(o.map(e=>String(e)));return t(i.filter(e=>s.has(e.name)))}async function P(i){let c=!!i.args.flags.yes,{config:l,configPath:u}=await r(i.cwd);if(!u)return i.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`));let d=(i.args.positionals[0]===`add`?1:0)+1,f=await j(i,l,i.args.positionals);if(!f.ok)return f;let p=f.value;if(!p)return t({kind:`noop`,message:`No registry source provided.`});let g=await o(p,i.cwd,i.runtime);if(!g.ok)return g;let{items:v}=g.value;if(!v.length)return i.runtime.prompt.warn(`No installable items in registry.`),t({kind:`noop`,message:`No installable items in registry.`});let y=i.args.positionals[d];y&&!i.args.flags.select&&(i.args.flags.select=y);let b=_(v,i),x=b.ok&&b.value?b:await N(i,v);if(!x.ok)return x;let S=x.value,C=new Map,E=[...S];for(;E.length>0;){let e=E.shift();if(!C.has(e.name)&&(C.set(e.name,e),e.registryDependencies&&e.registryDependencies.length>0))for(let t of e.registryDependencies){if(C.has(t))continue;let e=v.find(e=>e.name===t);e?E.push(e):i.runtime.prompt.warn(`Registry dependency "${t}" not found in current registry.`)}}if(S=Array.from(C.values()),!S||!S.length)return i.runtime.prompt.warn(`No items selected.`),t({kind:`noop`,message:`No items selected.`});if(!c){let t=await i.runtime.prompt.confirm({message:`Install ${S.length} item(s)?`,initialValue:!0});if(await i.runtime.prompt.isCancel(t)||!t)return n(e(`UserCancelled`,`Operation cancelled.`))}let M=new Set,P=m(S,i.cwd,l);if(!P.ok)return P;let F=P.value;for(let e of F.plannedWrites)await i.runtime.fs.pathExists(e.absoluteTarget)&&M.add(e.absoluteTarget);let I=m(S,i.cwd,l,M);if(!I.ok)return I;let L=I.value,R=[];for(let t of L.plannedWrites)if(M.has(t.absoluteTarget))if(c||l.overwritePolicy===`overwrite`)R.push(t);else if(l.overwritePolicy===`skip`)i.runtime.prompt.warn(`Skipped existing file: ${t.absoluteTarget}`);else{let r=await i.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 i.runtime.prompt.isCancel(r)||r===`abort`)return n(e(`UserCancelled`,`Installation aborted by user.`));r===`overwrite`&&R.push(t)}else R.push(t);let{missingDependencies:z,missingDevDependencies:B}=w(S,i.cwd,i.runtime),V=!1;if(z.length||B.length)if(c)V=!0;else{let t=A(i.cwd,l.packageManager,i.runtime),r=[];z.length&&r.push(`dependencies: ${z.join(`, `)}`),B.length&&r.push(`devDependencies: ${B.join(`, `)}`);let a=await i.runtime.prompt.confirm({message:`Install missing packages with ${t}? (${r.join(` | `)})`,initialValue:!0});if(await i.runtime.prompt.isCancel(a))return n(e(`UserCancelled`,`Dependency installation cancelled by user.`));V=!!a,V||i.runtime.prompt.warn(`Skipped dependency installation.`)}let H=0,U=await D(i.cwd,i.runtime),W={};for(let e of R){let t=S.find(t=>t.name===e.itemName);if(!t)continue;let n=await a(e.sourceFile,t,i.cwd,i.runtime);if(!n.ok)return n;let r=h(n.value,l),o=await i.runtime.fs.ensureDir(s.dirname(e.absoluteTarget));if(!o.ok)return o;let c=await i.runtime.fs.writeFile(e.absoluteTarget,r,`utf8`);if(!c.ok)return c;let u=k(r);W[t.name]||(W[t.name]=[]),W[t.name].push(u),H+=1,i.runtime.prompt.success(`Wrote ${e.relativeTarget}`)}if(H>0){for(let[e,t]of Object.entries(W)){let n=k(t.sort().join(``));U.components[e]={source:p,hash:n}}await O(i.cwd,U,i.runtime)}if(V){let e=A(i.cwd,l.packageManager,i.runtime),t=T(i.cwd,e,z,B,i.runtime);if(!t.ok)return t}return i.runtime.prompt.info(`Installed ${S.length} item(s), wrote ${H} file(s).`),t({kind:`success`,message:`Installed ${S.length} item(s), wrote ${H} file(s).`})}export{d as a,h as i,D as n,O as r,P as runAddCommand,k as t};
|
package/dist/config-DF-S5_la.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:path";import t from"node:fs/promises";import{loadConfig as n}from"unconfig";const r={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`,preferManifestTarget:!0,allowOutsideProject:!1};function i(t){return e.join(t,`regpick.json`)}async function a(e){let{config:t,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:r,merge:!0,cwd:e});return{config:t,configPath:i[0]||null}}async function o(e,n,{overwrite:r=!1}={}){let a=i(e),o=!1;try{await t.access(a),o=!0}catch{}return o&&!r?{filePath:a,written:!1}:(await t.writeFile(a,JSON.stringify(n,null,2),`utf8`),{filePath:a,written:!0})}function s(e,t){return e?t.registries[e]?String(t.registries[e]):e:null}export{o as i,a as n,s as r,i as t};
|
package/dist/pack-wVOoOChv.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 r from"node:path";function i(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)}async function a(e,i){let a=[];async function o(e){let n=await i.runtime.fs.readdir(e);if(!n.ok)return n;for(let t of n.value){let n=r.join(e,t),s=await i.runtime.fs.stat(n);if(!s.ok)return s;if(s.value.isDirectory()){let e=await o(n);if(!e.ok)return e}else (n.endsWith(`.ts`)||n.endsWith(`.tsx`))&&a.push(n)}return t(void 0)}let s=await o(e);return s.ok?t(a):n(s.error)}async function o(o){let s=o.args.positionals[1]||`.`,c=r.resolve(o.cwd,s),l=await o.runtime.fs.stat(c);if(!l.ok||!l.value.isDirectory())return n(e(`ValidationError`,`Target is not a directory: ${c}`));o.runtime.prompt.info(`Scanning ${c} for components...`);let u=await a(c,o);if(!u.ok)return u;let d=u.value;if(d.length===0)return o.runtime.prompt.warn(`No .ts or .tsx files found.`),t({kind:`noop`,message:`No files found.`});let f=[];for(let e of d){let t=await o.runtime.fs.readFile(e,`utf8`);if(!t.ok)return n(t.error);let a=i(t.value),s=r.relative(c,e).replace(/\\/g,`/`),l=r.basename(e,r.extname(e));f.push({name:l,title:l,description:`Packed component`,type:`registry:component`,dependencies:a,devDependencies:[],registryDependencies:[],files:[{path:s,type:`registry:component`}]})}let p={items:f},m=r.join(o.cwd,`registry.json`),h=await o.runtime.fs.writeJson(m,p,{spaces:2});return h.ok?(o.runtime.prompt.success(`Packed ${f.length} components into registry.json`),t({kind:`success`,message:`Generated registry.json`})):n(h.error)}export{o as runPackCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,t as n}from"./result-Dmv-uoQK.mjs";import r from"node:path";import{fileURLToPath as i}from"node:url";function a(e){return e?Array.isArray(e)?e.filter(e=>typeof e==`string`):typeof e==`string`?[e]:[]:[]}function o(e){return Array.isArray(e)?e.filter(e=>!!(e&&typeof e==`object`)):[]}function s(e,t){let n=o(e.files).map(t=>({path:typeof t.path==`string`?t.path:void 0,target:typeof t.target==`string`?t.target:void 0,type:typeof t.type==`string`?t.type:typeof e.type==`string`?e.type:`registry:file`,content:typeof t.content==`string`?t.content:void 0,url:typeof t.url==`string`?t.url:void 0})),r=typeof e.name==`string`?e.name:typeof e.title==`string`?e.title:`unnamed-item`;return{name:r,title:typeof e.title==`string`?e.title:r,description:typeof e.description==`string`?e.description:``,type:typeof e.type==`string`?e.type:`registry:file`,dependencies:a(e.dependencies),devDependencies:a(e.devDependencies),registryDependencies:a(e.registryDependencies),files:n,sourceMeta:t}}function c(e){return o(e.items).map(e=>Array.isArray(e.files)?null:typeof e.url==`string`?e.url:typeof e.href==`string`?e.href:typeof e.path==`string`?e.path:null).filter(e=>!!e)}function l(r,i){return Array.isArray(r)?t(r.filter(e=>!!(e&&typeof e==`object`)).map(e=>s(e,i))):r&&typeof r==`object`&&Array.isArray(r.items)?t(o(r.items).filter(e=>Array.isArray(e.files)).map(e=>s(e,i))):r&&typeof r==`object`&&Array.isArray(r.files)?t([s(r,i)]):n(e(`RegistryError`,`Unsupported manifest structure.`))}function u(e){return/^https?:\/\//i.test(e)}function d(e){return e.includes(`github.com`)?e.replace(/^https?:\/\/github\.com\//,`https://raw.githubusercontent.com/`).replace(/\/(blob|tree)\//,`/`):e}function f(e){return/^file:\/\//i.test(e)}function p(e,t){return new URL(t,e).toString()}async function m(i,a,o){let d=l(i,a);if(!i||typeof i!=`object`||Array.isArray(i))return d;let f=c(i);if(!f.length)return d;let m=d.ok?d.value:[],h=[];for(let t of f){let i;if(u(t)){let e=await o.http.getJson(t);if(!e.ok)return n(e.error);i=e.value}else if(a.type===`http`&&a.baseUrl){let e=await o.http.getJson(p(a.baseUrl,t));if(!e.ok)return n(e.error);i=e.value}else if((a.type===`file`||a.type===`directory`)&&a.baseDir){let s=await o.fs.readFile(r.resolve(a.baseDir,t),`utf8`);if(!s.ok)return n(s.error);try{i=JSON.parse(s.value)}catch{return n(e(`RegistryError`,`Invalid JSON: ${t}`))}}else{let a=await o.fs.readFile(r.resolve(t),`utf8`);if(!a.ok)return n(a.error);try{i=JSON.parse(a.value)}catch{return n(e(`RegistryError`,`Invalid JSON: ${t}`))}}i&&typeof i==`object`&&h.push(s(i,a))}return t([...m,...h])}async function h(e,i){let a=r.resolve(e),o=await i.fs.readdir(a);if(!o.ok)return n(o.error);let c=o.value.filter(e=>e.endsWith(`.json`)),l=[];for(let e of c){let t=r.join(a,e),o=await i.fs.readFile(t,`utf8`);if(!o.ok)return n(o.error);let c;try{c=JSON.parse(o.value)}catch{continue}!c||typeof c!=`object`||!Array.isArray(c.files)||l.push(s(c,{type:`directory`,baseDir:a}))}return t(l)}async function g(a,o,s){if(!a)return n(e(`ValidationError`,`Registry source is required.`));let c=u(a)||f(a)?d(a):r.resolve(o,a);if(u(c)){let e=await s.http.getJson(c);if(!e.ok)return n(e.error);let r=c.endsWith(`/`)?c:c.replace(/[^/]*$/,``),i=await m(e.value,{type:`http`,baseUrl:r},s);return i.ok?t({items:i.value,source:c}):n(i.error)}let l=f(c)?i(new URL(c)):r.resolve(c),p=await s.fs.stat(l);if(!p.ok)return n(e(`RegistryError`,`Registry source not found: ${a}`));if(p.value.isDirectory()){let e=await h(l,s);return e.ok?t({items:e.value,source:l}):n(e.error)}let g=await s.fs.readFile(l,`utf8`);if(!g.ok)return n(g.error);let _;try{_=JSON.parse(g.value)}catch(t){return n(e(`RegistryError`,`Failed to parse registry JSON.`,t))}let v=await m(_,{type:`file`,baseDir:r.dirname(l)},s);return v.ok?t({items:v.value,source:l}):n(v.error)}async function _(i,a,o,s){if(typeof i.content==`string`)return t(i.content);let c=i.url||i.path;if(!c)return n(e(`ValidationError`,`File entry in "${a.name}" is missing both content and path/url.`));let l=u(c)?d(c):c;if(u(l))return await s.http.getText(l);if(a.sourceMeta.type===`http`&&a.sourceMeta.baseUrl){let e=p(a.sourceMeta.baseUrl,l);return await s.http.getText(e)}let f=a.sourceMeta.baseDir&&!r.isAbsolute(c)?r.resolve(a.sourceMeta.baseDir,c):r.resolve(o,c);return await s.fs.readFile(f,`utf8`)}export{_ as n,g as t};
|
package/dist/update-CTZdZqoY.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./result-Dmv-uoQK.mjs";import{n as t}from"./config-DF-S5_la.mjs";import{n,t as r}from"./registry-2GjgbSBI.mjs";import{a as i,i as a,n as o,r as s,t as c}from"./add-Dk_Qszjz.mjs";import l from"node:path";import{styleText as u}from"node:util";async function d(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(u(t,`${n}${e}`))}}async function f(f){let p=await o(f.cwd,f.runtime),m=Object.keys(p.components);if(m.length===0)return f.runtime.prompt.info(`No components installed. Nothing to update.`),e({kind:`noop`,message:`No components to update.`});let{config:h}=await t(f.cwd),g={};for(let e of m){let t=p.components[e].source;t&&(g[t]||(g[t]=[]),g[t].push(e))}let _=0;for(let[e,t]of Object.entries(g)){let o=await r(e,f.cwd,f.runtime);if(!o.ok){f.runtime.prompt.warn(`Failed to load registry ${e}`);continue}let s=o.value.items;for(let e of t){let t=s.find(t=>t.name===e);if(!t)continue;let r=[],o=[];for(let e of t.files){let s=await n(e,t,f.cwd,f.runtime);if(!s.ok)continue;let c=a(s.value,h);r.push(c);let l=i(t,e,f.cwd,h);l.ok&&o.push({target:l.value.absoluteTarget,content:c})}let m=c(r.sort().join(``));if(m!==p.components[e].hash){f.runtime.prompt.info(`Update available for ${e}`);let t=await f.runtime.prompt.select({message:`What do you want to do with ${e}?`,options:[{value:`diff`,label:`Show diff`},{value:`update`,label:`Update`},{value:`skip`,label:`Skip`}]});if(await f.runtime.prompt.isCancel(t)||t===`skip`)continue;if(t===`diff`){for(let e of o){let t=await f.runtime.fs.readFile(e.target,`utf8`),n=t.ok?t.value:``;console.log(u(`bold`,`\nDiff for ${e.target}:`)),await d(n,e.content)}let t=await f.runtime.prompt.confirm({message:`Update ${e} now?`,initialValue:!0});if(await f.runtime.prompt.isCancel(t)||!t)continue}for(let e of o){let t=await f.runtime.fs.ensureDir(l.dirname(e.target));if(!t.ok)return t;let n=await f.runtime.fs.writeFile(e.target,e.content,`utf8`);if(!n.ok)return n}p.components[e].hash=m,_++,f.runtime.prompt.success(`Updated ${e}`)}}}return _>0?(await s(f.cwd,p,f.runtime),e({kind:`success`,message:`Updated ${_} components.`})):e({kind:`noop`,message:`All components are up to date.`})}export{f as runUpdateCommand};
|