regpick 0.10.0 → 0.10.1
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-Bsk3NHKV.mjs +1 -0
- package/dist/config-BjCKahTl.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/dist/init-BTOB3wHB.mjs +1 -0
- package/dist/list-D08qTVwi.mjs +1 -0
- package/dist/lockfile-BdCCiIuT.mjs +1 -0
- package/dist/pack-D0Qeguwh.mjs +1 -0
- package/dist/saga-CJXdVI4r.mjs +1 -0
- package/dist/update-BN9AJKcB.mjs +2 -0
- package/package.json +1 -1
- package/dist/add-iAkEFSHQ.mjs +0 -1
- package/dist/config-7w5jSNP5.mjs +0 -1
- package/dist/init-BA_GBZmf.mjs +0 -1
- package/dist/list-Cnec7wHk.mjs +0 -1
- package/dist/pack-DoI2-3I9.mjs +0 -1
- package/dist/update-Cwr3o07A.mjs +0 -2
- /package/dist/{ports-mONME63A.mjs → ports-D5OB8fUl.mjs} +0 -0
- /package/dist/{registry-CC3cGX5F.mjs → registry-C9Zag4hh.mjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{a as r}from"./lockfile-BdCCiIuT.mjs";import{a as i,i as a,n as o,r as s,t as c}from"./saga-CJXdVI4r.mjs";import{i as l,r as u}from"./config-BjCKahTl.mjs";import{n as d,t as f}from"./registry-C9Zag4hh.mjs";import p from"node:path";function m(e){return e.replace(/\\/g,`/`)}function h(r,i,a){let o=`${p.resolve(r)}${p.sep}`,s=p.resolve(i);return a?t(void 0):s!==p.resolve(r)&&!s.startsWith(o)?n(e(`ValidationError`,`Refusing to write outside project: ${s}`)):t(void 0)}function g(e,n,r,i){let a=n.type||e.type||`registry:file`,o=i.targetsByType?.[a],s=i.preferManifestTarget!==!1,c=p.basename(n.path||`${e.name}.txt`),l;l=s&&n.target?n.target:o?p.join(o,c):n.target?n.target:p.join(`src`,c);let u=p.resolve(r,l),d=h(r,u,!!i.allowOutsideProject);return d.ok?t({absoluteTarget:u,relativeTarget:m(p.relative(r,u))}):d}function _(e){return[...new Set(e.filter(Boolean))]}function v(e){return{dependencies:_(e.flatMap(e=>e.dependencies||[])),devDependencies:_(e.flatMap(e=>e.devDependencies||[]))}}function y(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:_(i)}}function b(e,n,r,i=new Set){let a=[],o=[];for(let t of e)for(let e of t.files){let s=g(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:v(e),conflicts:o})}function x(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 S(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function C(r,i){let{flags:a}=i.args,o=S(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)}async function w(r){let i=await u(r.cwd);return i.configPath?t(i):(r.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`)))}async function T(r,i){let a=r.args.positionals[0]===`add`?1:0,o=r.args.positionals[a];if(o)return t(l(o,i));let s=Object.entries(i.registries||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(s.length){let a=await r.runtime.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:s,maxItems:1,required:!1});if(await r.runtime.prompt.isCancel(a))return n(e(`UserCancelled`,`Operation cancelled.`));if(Array.isArray(a)&&a.length>0)return t(l(String(a[0]),i))}let c=await r.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await r.runtime.prompt.isCancel(c)?n(e(`UserCancelled`,`Operation cancelled.`)):t(String(c))}async function E(r,i){let a=(r.args.positionals[0]===`add`?1:0)+1,o=await f(i,r.cwd,r.runtime);if(!o.ok)return o;let{items:s}=o.value;if(!s.length)return r.runtime.prompt.warn(`No installable items in registry.`),n(e(`ValidationError`,`No installable items in registry.`));let c=r.args.positionals[a];c&&!r.args.flags.select&&(r.args.flags.select=c);let l=C(s,r),u;if(l.ok&&l.value)u=l.value;else if(l.ok){let t=await r.runtime.prompt.autocompleteMultiselect({message:`Select items to install`,options:s.map(e=>({value:e.name,label:`${e.name} (${e.type||`registry:file`})`,hint:e.description||`${e.files.length} file(s)`})),maxItems:10,required:!0});if(await r.runtime.prompt.isCancel(t))return n(e(`UserCancelled`,`Operation cancelled.`));let i=new Set((Array.isArray(t)?t:[]).map(String));u=s.filter(e=>i.has(e.name))}else return n(l.error);if(!u.length)return r.runtime.prompt.warn(`No items selected.`),n(e(`ValidationError`,`No items selected.`));let{resolvedItems:d,missingDependencies:p}=y(u,s);return t({selectedItems:d,missingRegistryDeps:p})}async function D(e,r,a){let o=b(a,e.cwd,r);if(!o.ok)return n(o.error);let s=new Set,c=o.value.plannedWrites;for(let t of c)await e.runtime.fs.pathExists(t.absoluteTarget)&&s.add(t.absoluteTarget);let l=b(a,e.cwd,r,s);if(!l.ok)return n(l.error);let{missingDependencies:u,missingDevDependencies:d}=i(a,e.cwd,e.runtime);return t({selectedItems:a,missingDependencies:u,missingDevDependencies:d,plannedWrites:l.value.plannedWrites,existingTargets:s})}async function O(r,i,o){let s=!!r.args.flags.yes;if(!s){let t=await r.runtime.prompt.confirm({message:`Install ${o.selectedItems.length} item(s)?`,initialValue:!0});if(await r.runtime.prompt.isCancel(t)||!t)return n(e(`UserCancelled`,`Operation cancelled.`))}let c=[];for(let t of o.plannedWrites)if(o.existingTargets.has(t.absoluteTarget))if(s||i.overwritePolicy===`overwrite`)c.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`&&c.push(t)}else c.push(t);let l=!1;if(o.missingDependencies.length||o.missingDevDependencies.length)if(s)l=!0;else{let t=a(r.cwd,i.packageManager,r.runtime),s=[];o.missingDependencies.length&&s.push(`dependencies: ${o.missingDependencies.join(`, `)}`),o.missingDevDependencies.length&&s.push(`devDependencies: ${o.missingDevDependencies.join(`, `)}`);let c=await r.runtime.prompt.confirm({message:`Install missing packages with ${t}? (${s.join(` | `)})`,initialValue:!0});if(await r.runtime.prompt.isCancel(c))return n(e(`UserCancelled`,`Dependency installation cancelled by user.`));l=!!c,l||r.runtime.prompt.warn(`Skipped dependency installation.`)}return t({selectedItems:o.selectedItems,shouldInstallDeps:l,finalWrites:c,dependencyPlan:{dependencies:o.missingDependencies,devDependencies:o.missingDevDependencies}})}async function k(e,r,i){let a=[];for(let t of i.finalWrites){let o=i.selectedItems.find(e=>e.name===t.itemName);if(!o)continue;let s=await d(t.sourceFile,o,e.cwd,e.runtime);if(!s.ok)return n(s.error);let c=x(s.value,r);a.push({absoluteTarget:t.absoluteTarget,finalContent:c,itemName:t.itemName})}return t({...i,hydratedWrites:a})}function A(e,t){let n=[],r=[];for(let i of t.hydratedWrites){n.push(new c(i.absoluteTarget,i.finalContent,e.runtime));let a=t.selectedItems.find(e=>e.name===i.itemName);a&&!r.some(e=>e.name===a.name)&&r.push(a)}return r.length>0&&n.push(new o(r,e.cwd,e.runtime)),t.shouldInstallDeps&&(t.dependencyPlan.dependencies.length>0||t.dependencyPlan.devDependencies.length>0)&&n.push(new s(t.dependencyPlan,e.cwd,e.runtime)),n}async function j(e){let i=await w(e);if(!i.ok)return n(i.error);let a=await T(e,i.value.config);if(!a.ok)return n(a.error);if(!a.value)return t({kind:`noop`,message:`No source provided.`});let o=await E(e,a.value);if(!o.ok)return n(o.error);for(let t of o.value.missingRegistryDeps)e.runtime.prompt.warn(`Registry dependency "${t}" not found in current registry.`);let s=await D(e,i.value.config,o.value.selectedItems);if(!s.ok)return n(s.error);let c=await O(e,i.value.config,s.value);if(!c.ok)return n(c.error);let l=await k(e,i.value.config,c.value);if(!l.ok)return n(l.error);let u=await r(A(e,l.value),(t,n)=>{n===`executing`||(n===`completed`?e.runtime.prompt.success(`[Success] ${t}`):n===`failed`?e.runtime.prompt.error(`[Failed] ${t}`):n===`compensating`?e.runtime.prompt.warn(`[Rollback] ${t}`):n===`interrupted`&&e.runtime.prompt.error(`[Interrupted] Rolling back ${t}`))});return u.ok?(e.runtime.prompt.info(`Installed ${l.value.selectedItems.length} item(s), wrote ${l.value.hydratedWrites.length} file(s).`),t({kind:`success`,message:`Installed ${l.value.selectedItems.length} item(s), wrote ${l.value.hydratedWrites.length} file(s).`})):u}export{g as n,j as runAddCommand,x as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:path";import*as t from"valibot";import"node:fs/promises";import{loadConfig as n}from"unconfig";const r=t.union([t.literal(`prompt`),t.literal(`overwrite`),t.literal(`skip`)]),i=t.union([t.literal(`auto`),t.literal(`npm`),t.literal(`yarn`),t.literal(`pnpm`)]),a=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,preferManifestTarget:t.boolean(),allowOutsideProject:t.boolean()}),o={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 s(t){return e.join(t,`regpick.json`)}async function c(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:o,merge:!0,cwd:e});return{config:t.parse(a,r),configPath:i[0]||null}}function l(e,t){return e?t.registries[e]?String(t.registries[e]):e:null}export{l as i,s as n,c as r,a 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-
|
|
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-D5OB8fUl.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-BTOB3wHB.mjs`).then(e=>e.runInitCommand(f));else if(l===`list`)e=await import(`./list-D08qTVwi.mjs`).then(e=>e.runListCommand(f));else if(l===`add`)e=await import(`./add-Bsk3NHKV.mjs`).then(e=>e.runAddCommand(f));else if(l===`update`)e=await import(`./update-BN9AJKcB.mjs`).then(e=>e.runUpdateCommand(f));else if(l===`pack`)e=await import(`./pack-D0Qeguwh.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{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{a as r}from"./lockfile-BdCCiIuT.mjs";import{t as i}from"./saga-CJXdVI4r.mjs";import{n as a,r as o,t as s}from"./config-BjCKahTl.mjs";import*as c from"valibot";function l(e,t){return e?`cancelled`:t?`overwrite`:`keep`}async function u(e){let n=a(e.cwd),r=(await e.runtime.fs.stat(n)).ok,{config:i}=await o(e.cwd);return t({configPath:n,exists:r,existingConfig:i})}async function d(r,i){if(i.exists){let a=await r.runtime.prompt.confirm({message:`${i.configPath} already exists. Overwrite?`,initialValue:!1}),o=l(await r.runtime.prompt.isCancel(a),!!a);if(o===`cancelled`)return n(e(`UserCancelled`,`Operation cancelled.`));if(o===`keep`)return r.runtime.prompt.info(`Keeping existing configuration.`),t(null)}let a=!!r.args.flags.yes,o=a?`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(o);if(!a&&u)return n(e(`UserCancelled`,`Operation cancelled.`));let d=a?`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(!a&&f)return n(e(`UserCancelled`,`Operation cancelled.`));let p=a?`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(!a&&m)return n(e(`UserCancelled`,`Operation cancelled.`));let h={...i.existingConfig,packageManager:String(o),overwritePolicy:String(p),targetsByType:{...i.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:c.parse(s,h),configPath:i.configPath,isOverwrite:i.exists})}function f(e,t){let n=JSON.stringify(t.newConfig,null,2);return[new i(t.configPath,n,e.runtime)]}async function p(e){let i=await u(e);if(!i.ok)return n(i.error);let a=await d(e,i.value);if(!a.ok)return n(a.error);if(!a.value)return t({kind:`noop`,message:`Keeping existing configuration.`});let o=await r(f(e,a.value),(t,n)=>{n===`failed`&&e.runtime.prompt.error(`Failed to write config file: ${a.value.configPath}`)});return o.ok?(e.runtime.prompt.success(`${a.value.isOverwrite?`Overwrote`:`Created`} ${a.value.configPath}`),t({kind:`success`,message:`${a.value.isOverwrite?`Overwrote`:`Created`} ${a.value.configPath}`})):o}export{p as runInitCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{r}from"./config-BjCKahTl.mjs";import{t as i}from"./registry-C9Zag4hh.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}}async function s(e){let{config:n}=await r(e.cwd),i=o(e.args.positionals[1],n.registries);return t({source:i.source,requiresPrompt:i.requiresPrompt})}async function c(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 l(e,n){let r=await i(n,e.cwd,e.runtime);return r.ok?t(r.value.items):r}function u(e){let t=e.type||`registry:file`,n=Array.isArray(e.files)?e.files.length:0;return`${e.name} (${t}, files: ${n})`}function d(e,t){e.runtime.prompt.info(`Found ${t.length} items.`);for(let e of t)console.log(`- ${u(e)}`)}async function f(e){let r=await s(e);if(!r.ok)return n(r.error);let i=await c(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 l(e,i.value);if(!a.ok)return n(a.error);let o=a.value;return o.length?(d(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{f as runListCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,r as n,t as r}from"./result-mJp6ULEQ.mjs";import i from"node:path";import*as a from"valibot";import o from"node:crypto";async function s(i,a){let o=[],s=!1;return new Promise(async l=>{let u=async()=>{s||(s=!0,a?.(`Interrupted by user (SIGINT). Gracefully rolling back...`,`interrupted`),await c(o,a),process.exit(130))};process.env.NODE_ENV!==`test`&&process.on(`SIGINT`,u);for(let n of i){if(s)break;a?.(n.name,`executing`);let i=await n.execute();if(s)break;if(t(i))return s=!0,a?.(n.name,`failed`),await c(o,a),process.env.NODE_ENV!==`test`&&process.off(`SIGINT`,u),l(r(e(i.error.kind,`Transaction failed at step "${n.name}". Successfully rolled back ${o.length} previous steps.\nOriginal error: ${i.error.message}`,i.error)));a?.(n.name,`completed`),o.push(n)}process.env.NODE_ENV!==`test`&&process.off(`SIGINT`,u),!s&&l(n(void 0))})}async function c(e,n){for(let r=e.length-1;r>=0;r--){let i=e[r];n?.(i.name,`compensating`);let a=await i.compensate();t(a)&&console.error(`[Saga] FATAL: Failed to compensate step "${i.name}":`,a.error.message)}}const l=a.object({version:a.optional(a.string()),source:a.optional(a.string()),hash:a.string()}),u=a.object({components:a.record(a.string(),l)});function d(e){return i.join(e,`regpick-lock.json`)}async function f(e,t){let n=d(e);if(!await t.fs.pathExists(n))return{components:{}};let r=t.fs.readJsonSync(n);if(!r.ok)return{components:{}};try{return a.parse(u,r.value)}catch{return{components:{}}}}async function p(e,t,n){let r=d(e);await n.fs.writeJson(r,t,{spaces:2})}function m(e){return o.createHash(`sha256`).update(e).digest(`hex`)}export{s as a,p as i,d as n,f as r,m as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{a as r}from"./lockfile-BdCCiIuT.mjs";import{t as i}from"./saga-CJXdVI4r.mjs";import a from"node:path";function o(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 s(e){let t=o(e.content),n=a.relative(e.targetDir,e.path).replace(/\\/g,`/`),r=a.basename(e.path,a.extname(e.path));return{name:r,title:r,description:`Packed component`,type:`registry:component`,dependencies:t,devDependencies:[],registryDependencies:[],files:[{path:n,type:`registry:component`}]}}async function c(e,r){let i=[];async function o(e){let n=await r.runtime.fs.readdir(e);if(!n.ok)return n;let s=await Promise.all(n.value.map(async n=>{let s=a.join(e,n),c=await r.runtime.fs.stat(s);if(!c.ok)return c;if(c.value.isDirectory()){let e=await o(s);if(!e.ok)return e}else (s.endsWith(`.ts`)||s.endsWith(`.tsx`))&&i.push(s);return t(void 0)}));for(let e of s)if(!e.ok)return e;return t(void 0)}let s=await o(e);return s.ok?t(i):n(s.error)}async function l(r){let i=r.args.positionals[1]||`.`,o=a.resolve(r.cwd,i),s=await r.runtime.fs.stat(o);if(!s.ok||!s.value.isDirectory())return n(e(`ValidationError`,`Target is not a directory: ${o}`));r.runtime.prompt.info(`Scanning ${o} for components...`);let l=await c(o,r);return l.ok?t({targetDir:o,files:l.value}):l}async function u(e,r){let i=[],o=await Promise.all(r.files.map(async n=>{let i=await e.runtime.fs.readFile(n,`utf8`);return i.ok?t(s({path:n,content:i.value,targetDir:r.targetDir})):i}));for(let e of o){if(!e.ok)return n(e.error);i.push(e.value)}return t({items:i,outPath:a.join(e.cwd,`registry.json`),fileCount:r.files.length})}function d(e,t){let n={items:t.items},r=JSON.stringify(n,null,2);return[new i(t.outPath,r,e.runtime)]}async function f(e){let i=await l(e);if(!i.ok)return n(i.error);if(i.value.files.length===0)return e.runtime.prompt.warn(`No .ts or .tsx files found.`),t({kind:`noop`,message:`No files found.`});let a=await u(e,i.value);if(!a.ok)return n(a.error);let o=await r(d(e,a.value),(t,n)=>{n===`failed`&&e.runtime.prompt.error(`Failed to write registry file: ${a.value.outPath}`)});return o.ok?(e.runtime.prompt.success(`Packed ${a.value.items.length} components into registry.json`),t({kind:`success`,message:`Generated registry.json`})):o}export{f as runPackCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{n as t,r as n,t as r}from"./result-mJp6ULEQ.mjs";import{i,r as a}from"./lockfile-BdCCiIuT.mjs";import o from"node:path";import*as s from"valibot";function c(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 l(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 u(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 d={npm:{manager:`npm`,buildInstallCommands:c},yarn:{manager:`yarn`,buildInstallCommands:l},pnpm:{manager:`pnpm`,buildInstallCommands:u}};function f(e){return d[e]}const p=s.object({dependencies:s.optional(s.record(s.string(),s.string()),{}),devDependencies:s.optional(s.record(s.string(),s.string()),{}),peerDependencies:s.optional(s.record(s.string(),s.string()),{})});function m(e){return[...new Set(e.filter(Boolean))]}function h(e,t,n){let r=o.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=n.fs.readJsonSync(r),a=i.ok?i.value:{},c=s.safeParse(p,a),l=c.success?c.output:{dependencies:{},devDependencies:{},peerDependencies:{}},u={...l.dependencies,...l.devDependencies,...l.peerDependencies},d=m(e.flatMap(e=>e.dependencies||[])),f=m(e.flatMap(e=>e.devDependencies||[]));return{missingDependencies:d.filter(e=>!u[e]),missingDevDependencies:f.filter(e=>!u[e])}}function g(t,i,a,o,s){if(!a.length&&!o.length)return n(void 0);let c=f(i).buildInstallCommands(a,o);for(let n of c)if(s.process.run(n.command,n.args,t).status!==0)return r(e(`InstallError`,`Dependency install failed: ${n.command} ${n.args.join(` `)}`));return n(void 0)}function _(e,t,n){return t&&t!==`auto`?t:n.fs.existsSync(o.join(e,`pnpm-lock.yaml`))?`pnpm`:n.fs.existsSync(o.join(e,`yarn.lock`))?`yarn`:(n.fs.existsSync(o.join(e,`package-lock.json`)),`npm`)}var v=class{name=`Install dependencies`;packageJsonSnapshot;lockfileSnapshot;constructor(e,t,n){this.plan=e,this.projectPath=t,this.runtime=n}async execute(){let e=_(this.projectPath,`auto`,this.runtime),n=e===`pnpm`?`pnpm-lock.yaml`:e===`yarn`?`yarn.lock`:`package-lock.json`,r=`${this.projectPath}/package.json`,i=`${this.projectPath}/${n}`,a=await this.runtime.fs.readFile(r,`utf8`);t(a)||(this.packageJsonSnapshot=a.value);let o=await this.runtime.fs.readFile(i,`utf8`);return t(o)||(this.lockfileSnapshot=o.value),g(this.projectPath,e,this.plan.dependencies,this.plan.devDependencies,this.runtime)}async compensate(){let e=`${this.projectPath}/package.json`,t=_(this.projectPath,`auto`,this.runtime),r=t===`pnpm`?`pnpm-lock.yaml`:t===`yarn`?`yarn.lock`:`package-lock.json`,i=`${this.projectPath}/${r}`;return this.packageJsonSnapshot!==void 0&&await this.runtime.fs.writeFile(e,this.packageJsonSnapshot,`utf8`),this.lockfileSnapshot!==void 0&&await this.runtime.fs.writeFile(i,this.lockfileSnapshot,`utf8`),n(void 0)}},y=class{name=`Update lockfile`;priorLockfileState;existedPreviously=!1;constructor(e,t,n){this.itemsToInstall=e,this.projectPath=t,this.runtime=n}async execute(){let e=`${this.projectPath}/regpick-lock.json`;this.existedPreviously=await this.runtime.fs.pathExists(e),this.existedPreviously&&(this.priorLockfileState=await a(this.projectPath,this.runtime),this.priorLockfileState=JSON.parse(JSON.stringify(this.priorLockfileState)));let t=await a(this.projectPath,this.runtime);for(let e of this.itemsToInstall)t.components||={},t.components[e.name]={source:e.sourceMeta?.baseUrl??e.sourceMeta?.baseDir??`unknown`,hash:`pending`};return await i(this.projectPath,t,this.runtime),n(void 0)}async compensate(){let e=`${this.projectPath}/regpick-lock.json`;return!this.existedPreviously&&this.runtime.fs.remove?await this.runtime.fs.remove(e):this.priorLockfileState!==void 0&&await i(this.projectPath,this.priorLockfileState,this.runtime),n(void 0)}},b=class{name;priorContent;existedPreviously=!1;constructor(e,t,n){this.targetPath=e,this.newContent=t,this.runtime=n,this.name=`Write file: ${this.targetPath}`}async execute(){let e=await this.runtime.fs.pathExists(this.targetPath);if(this.existedPreviously=e,e){let e=await this.runtime.fs.readFile(this.targetPath,`utf8`);if(t(e))return r(e.error);this.priorContent=e.value}let n=this.targetPath.substring(0,this.targetPath.lastIndexOf(`/`));return!await this.runtime.fs.pathExists(n)&&this.runtime.fs.ensureDir&&await this.runtime.fs.ensureDir(n),await this.runtime.fs.writeFile(this.targetPath,this.newContent,`utf8`)}async compensate(){if(!this.existedPreviously){if(this.runtime.fs.remove)return await this.runtime.fs.remove(this.targetPath)}else if(this.priorContent!==void 0)return await this.runtime.fs.writeFile(this.targetPath,this.priorContent,`utf8`);return n(void 0)}};export{h as a,_ as i,y as n,v as r,b as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{a as r,i,n as a,r as o,t as s}from"./lockfile-BdCCiIuT.mjs";import{r as c}from"./config-BjCKahTl.mjs";import{n as l,t as u}from"./registry-C9Zag4hh.mjs";import{n as d,t as f}from"./add-Bsk3NHKV.mjs";import p from"node:path";import{styleText as m}from"node:util";var h=class{name=`Save lockfile`;previousLockfile=null;existedBefore=!1;constructor(e,t,n){this.cwd=e,this.newLockfile=t,this.runtime=n}async execute(){let e=a(this.cwd);if(this.existedBefore=await this.runtime.fs.pathExists(e),this.existedBefore){let e=await o(this.cwd,this.runtime);this.previousLockfile=JSON.parse(JSON.stringify(e))}return await i(this.cwd,this.newLockfile,this.runtime),t(void 0)}async compensate(){if(this.existedBefore&&this.previousLockfile)await i(this.cwd,this.previousLockfile,this.runtime);else{let e=a(this.cwd),t=await this.runtime.fs.remove(e);if(!t.ok)return t}return t(void 0)}},g=class{name;existedBefore=!1;previousContent=null;constructor(e,t,n){this.targetPath=e,this.newContent=t,this.runtime=n,this.name=`Update file ${e}`}async execute(){let e=await this.runtime.fs.readFile(this.targetPath,`utf8`);e.ok?(this.existedBefore=!0,this.previousContent=e.value):this.existedBefore=!1;let n=await this.runtime.fs.ensureDir(p.dirname(this.targetPath));if(!n.ok)return n;let r=await this.runtime.fs.writeFile(this.targetPath,this.newContent,`utf8`);return r.ok?t(void 0):r}async compensate(){if(this.existedBefore&&this.previousContent!==null){let e=await this.runtime.fs.ensureDir(p.dirname(this.targetPath));if(!e.ok)return e;let t=await this.runtime.fs.writeFile(this.targetPath,this.previousContent,`utf8`);if(!t.ok)return t}else{let e=await this.runtime.fs.remove(this.targetPath);if(!e.ok)return e}return t(void 0)}};function _(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 v(e,n,r,i,a,o){let c=[],l=[];for(let{file:e,content:t}of r){let r=f(t,o);c.push(r);let i=d(n,e,a,o);if(!i.ok)return i;l.push({target:i.value.absoluteTarget,content:r})}let u=s(c.sort().join(``));return t({itemName:e,status:u===i?`up-to-date`:`requires-diff-prompt`,newHash:u,files:l})}async function y(r){let[i,a]=await Promise.all([c(r.cwd),o(r.cwd,r.runtime)]);return i.configPath?t({config:i.config,lockfile:a}):(r.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),n(e(`ValidationError`,`No config file found`)))}async function b(e,n,r){let i=_(r),a=[];for(let[t,o]of Object.entries(i)){let i=await u(t,e.cwd,e.runtime);if(!i.ok){e.runtime.prompt.warn(`Failed to load registry ${t}`);continue}let s=i.value.items;for(let t of o){let i=s.find(e=>e.name===t);if(!i)continue;let o=(await Promise.all(i.files.map(async t=>{let n=await l(t,i,e.cwd,e.runtime);return n.ok?{file:t,content:n.value}:null}))).filter(e=>e!==null),c=r.components[t].hash,u=v(t,i,o,c,e.cwd,n);if(!u.ok)continue;let d=u.value;if(d.status===`requires-diff-prompt`){let n=[];for(let t of d.files){let r=await e.runtime.fs.readFile(t.target,`utf8`);n.push({target:t.target,remoteContent:t.content,localContent:r.ok?r.value:``})}a.push({itemName:t,newHash:d.newHash,files:n})}}}return t(a)}async function x(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(m(t,`${n}${e}`))}}async function S(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(m(`bold`,`\nDiff for ${e.target}:`)),await x(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})}function C(e,t,n){let r=[],i=JSON.parse(JSON.stringify(t));for(let t of n.approvedUpdates){for(let n of t.files)r.push(new g(n.target,n.remoteContent,e.runtime));i.components[t.itemName].hash=t.newHash}return n.approvedUpdates.length>0&&r.push(new h(e.cwd,i,e.runtime)),{sagaSteps:r,updatedLockfile:i}}async function w(e){let i=await y(e);if(!i.ok)return n(i.error);if(Object.keys(i.value.lockfile.components).length===0)return e.runtime.prompt.info(`No components installed. Nothing to update.`),t({kind:`noop`,message:`No components to update.`});let a=await b(e,i.value.config,i.value.lockfile);if(!a.ok)return n(a.error);if(a.value.length===0)return t({kind:`noop`,message:`All components are up to date.`});let o=await S(e,a.value);if(!o.ok)return n(o.error);let s=o.value.approvedUpdates.length;if(s===0)return t({kind:`noop`,message:`No updates approved.`});let{sagaSteps:c}=C(e,i.value.lockfile,o.value),l=await r(c,(t,n)=>{n===`executing`||(n===`completed`?e.runtime.prompt.success(`[Success] ${t}`):n===`failed`?e.runtime.prompt.error(`[Failed] ${t}`):n===`compensating`?e.runtime.prompt.warn(`[Rollback] ${t}`):n===`interrupted`&&e.runtime.prompt.error(`[Interrupted] Rolling back ${t}`))});return l.ok?t({kind:`success`,message:`Updated ${s} components.`}):l}export{w as runUpdateCommand};
|
package/package.json
CHANGED
package/dist/add-iAkEFSHQ.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{n as t,r as n,t as r}from"./result-mJp6ULEQ.mjs";import{i,r as a}from"./config-7w5jSNP5.mjs";import{n as o,t as s}from"./registry-CC3cGX5F.mjs";import c from"node:path";import*as l from"valibot";import u from"node:crypto";async function d(i,a){let o=[],s=!1;return new Promise(async c=>{let l=async()=>{s||(s=!0,a?.(`Interrupted by user (SIGINT). Gracefully rolling back...`,`interrupted`),await f(o,a),process.exit(130))};process.env.NODE_ENV!==`test`&&process.on(`SIGINT`,l);for(let n of i){if(s)break;a?.(n.name,`executing`);let i=await n.execute();if(s)break;if(t(i))return s=!0,a?.(n.name,`failed`),await f(o,a),process.env.NODE_ENV!==`test`&&process.off(`SIGINT`,l),c(r(e(i.error.kind,`Transaction failed at step "${n.name}". Successfully rolled back ${o.length} previous steps.\nOriginal error: ${i.error.message}`,i.error)));a?.(n.name,`completed`),o.push(n)}process.env.NODE_ENV!==`test`&&process.off(`SIGINT`,l),!s&&c(n(void 0))})}async function f(e,n){for(let r=e.length-1;r>=0;r--){let i=e[r];n?.(i.name,`compensating`);let a=await i.compensate();t(a)&&console.error(`[Saga] FATAL: Failed to compensate step "${i.name}":`,a.error.message)}}function p(e){return e.replace(/\\/g,`/`)}function m(t,i,a){let o=`${c.resolve(t)}${c.sep}`,s=c.resolve(i);return a?n(void 0):s!==c.resolve(t)&&!s.startsWith(o)?r(e(`ValidationError`,`Refusing to write outside project: ${s}`)):n(void 0)}function h(e,t,r,i){let a=t.type||e.type||`registry:file`,o=i.targetsByType?.[a],s=i.preferManifestTarget!==!1,l=c.basename(t.path||`${e.name}.txt`),u;u=s&&t.target?t.target:o?c.join(o,l):t.target?t.target:c.join(`src`,l);let d=c.resolve(r,u),f=m(r,d,!!i.allowOutsideProject);return f.ok?n({absoluteTarget:d,relativeTarget:p(c.relative(r,d))}):f}function g(e){return[...new Set(e.filter(Boolean))]}function _(e){return{dependencies:g(e.flatMap(e=>e.dependencies||[])),devDependencies:g(e.flatMap(e=>e.devDependencies||[]))}}function v(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:g(i)}}function y(e,t,r,i=new Set){let a=[],o=[];for(let n of e)for(let e of n.files){let s=h(n,e,t,r);if(!s.ok)return s;let{absoluteTarget:c,relativeTarget:l}=s.value,u={itemName:n.name,sourceFile:e,absoluteTarget:c,relativeTarget:l};a.push(u),i.has(c)&&o.push(u)}return n({selectedItems:e,plannedWrites:a,dependencyPlan:_(e),conflicts:o})}function b(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 x(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 S(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 C(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 w={npm:{manager:`npm`,buildInstallCommands:x},yarn:{manager:`yarn`,buildInstallCommands:S},pnpm:{manager:`pnpm`,buildInstallCommands:C}};function T(e){return w[e]}const E=l.object({dependencies:l.optional(l.record(l.string(),l.string()),{}),devDependencies:l.optional(l.record(l.string(),l.string()),{}),peerDependencies:l.optional(l.record(l.string(),l.string()),{})});function D(e){return[...new Set(e.filter(Boolean))]}function O(e,t,n){let r=c.join(t,`package.json`);if(!n.fs.existsSync(r))return{missingDependencies:[],missingDevDependencies:[]};let i=n.fs.readJsonSync(r),a=i.ok?i.value:{},o=l.safeParse(E,a),s=o.success?o.output:{dependencies:{},devDependencies:{},peerDependencies:{}},u={...s.dependencies,...s.devDependencies,...s.peerDependencies},d=D(e.flatMap(e=>e.dependencies||[])),f=D(e.flatMap(e=>e.devDependencies||[]));return{missingDependencies:d.filter(e=>!u[e]),missingDevDependencies:f.filter(e=>!u[e])}}function k(t,i,a,o,s){if(!a.length&&!o.length)return n(void 0);let c=T(i).buildInstallCommands(a,o);for(let n of c)if(s.process.run(n.command,n.args,t).status!==0)return r(e(`InstallError`,`Dependency install failed: ${n.command} ${n.args.join(` `)}`));return n(void 0)}function A(e,t,n){return t&&t!==`auto`?t:n.fs.existsSync(c.join(e,`pnpm-lock.yaml`))?`pnpm`:n.fs.existsSync(c.join(e,`yarn.lock`))?`yarn`:(n.fs.existsSync(c.join(e,`package-lock.json`)),`npm`)}var j=class{name=`Install dependencies`;packageJsonSnapshot;lockfileSnapshot;constructor(e,t,n){this.plan=e,this.projectPath=t,this.runtime=n}async execute(){let e=A(this.projectPath,`auto`,this.runtime),n=e===`pnpm`?`pnpm-lock.yaml`:e===`yarn`?`yarn.lock`:`package-lock.json`,r=`${this.projectPath}/package.json`,i=`${this.projectPath}/${n}`,a=await this.runtime.fs.readFile(r,`utf8`);t(a)||(this.packageJsonSnapshot=a.value);let o=await this.runtime.fs.readFile(i,`utf8`);return t(o)||(this.lockfileSnapshot=o.value),k(this.projectPath,e,this.plan.dependencies,this.plan.devDependencies,this.runtime)}async compensate(){let e=`${this.projectPath}/package.json`,t=A(this.projectPath,`auto`,this.runtime),r=t===`pnpm`?`pnpm-lock.yaml`:t===`yarn`?`yarn.lock`:`package-lock.json`,i=`${this.projectPath}/${r}`;return this.packageJsonSnapshot!==void 0&&await this.runtime.fs.writeFile(e,this.packageJsonSnapshot,`utf8`),this.lockfileSnapshot!==void 0&&await this.runtime.fs.writeFile(i,this.lockfileSnapshot,`utf8`),n(void 0)}};const M=l.object({version:l.optional(l.string()),source:l.optional(l.string()),hash:l.string()}),N=l.object({components:l.record(l.string(),M)});function P(e){return c.join(e,`regpick-lock.json`)}async function F(e,t){let n=P(e);if(!await t.fs.pathExists(n))return{components:{}};let r=t.fs.readJsonSync(n);if(!r.ok)return{components:{}};try{return l.parse(N,r.value)}catch{return{components:{}}}}async function I(e,t,n){let r=P(e);await n.fs.writeJson(r,t,{spaces:2})}function L(e){return u.createHash(`sha256`).update(e).digest(`hex`)}var R=class{name=`Update lockfile`;priorLockfileState;existedPreviously=!1;constructor(e,t,n){this.itemsToInstall=e,this.projectPath=t,this.runtime=n}async execute(){let e=`${this.projectPath}/regpick-lock.json`;this.existedPreviously=await this.runtime.fs.pathExists(e),this.existedPreviously&&(this.priorLockfileState=await F(this.projectPath,this.runtime),this.priorLockfileState=JSON.parse(JSON.stringify(this.priorLockfileState)));let t=await F(this.projectPath,this.runtime);for(let e of this.itemsToInstall)t.components||={},t.components[e.name]={source:e.sourceMeta?.baseUrl??e.sourceMeta?.baseDir??`unknown`,hash:`pending`};return await I(this.projectPath,t,this.runtime),n(void 0)}async compensate(){let e=`${this.projectPath}/regpick-lock.json`;return!this.existedPreviously&&this.runtime.fs.remove?await this.runtime.fs.remove(e):this.priorLockfileState!==void 0&&await I(this.projectPath,this.priorLockfileState,this.runtime),n(void 0)}},z=class{name;priorContent;existedPreviously=!1;constructor(e,t,n){this.targetPath=e,this.newContent=t,this.runtime=n,this.name=`Write file: ${this.targetPath}`}async execute(){let e=await this.runtime.fs.pathExists(this.targetPath);if(this.existedPreviously=e,e){let e=await this.runtime.fs.readFile(this.targetPath,`utf8`);if(t(e))return r(e.error);this.priorContent=e.value}let n=this.targetPath.substring(0,this.targetPath.lastIndexOf(`/`));return!await this.runtime.fs.pathExists(n)&&this.runtime.fs.ensureDir&&await this.runtime.fs.ensureDir(n),await this.runtime.fs.writeFile(this.targetPath,this.newContent,`utf8`)}async compensate(){if(!this.existedPreviously){if(this.runtime.fs.remove)return await this.runtime.fs.remove(this.targetPath)}else if(this.priorContent!==void 0)return await this.runtime.fs.writeFile(this.targetPath,this.priorContent,`utf8`);return n(void 0)}};function B(e){return e?String(e).split(`,`).map(e=>e.trim()).filter(Boolean):[]}function V(t,i){let{flags:a}=i.args,o=B(a.select);if(a.all)return n(t);if(o.length){let i=t.filter(e=>o.includes(e.name));return i.length?n(i):r(e(`ValidationError`,`No items matched --select=${String(a.select)}`))}return n(null)}async function H(t,a,o){let s=o[1];if(s)return n(i(s,a));let c=Object.entries(a.registries||{}).map(([e,t])=>({label:`${e} -> ${t}`,value:e}));if(c.length){let o=await t.runtime.prompt.multiselect({message:`Pick registry alias (or cancel and provide URL/path manually)`,options:c,maxItems:1,required:!1});if(await t.runtime.prompt.isCancel(o))return r(e(`UserCancelled`,`Operation cancelled.`));if(Array.isArray(o)&&o.length>0)return n(i(String(o[0]),a))}let l=await t.runtime.prompt.text({message:`Registry URL/path:`,placeholder:`https://example.com/registry.json`});return await t.runtime.prompt.isCancel(l)?r(e(`UserCancelled`,`Operation cancelled.`)):n(String(l))}function U(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 W(t,i){if(!i.length)return n([]);let a=await t.runtime.prompt.autocompleteMultiselect({message:`Select items to install`,options:U(i),maxItems:10,required:!0});if(await t.runtime.prompt.isCancel(a))return r(e(`UserCancelled`,`Operation cancelled.`));let o=Array.isArray(a)?a:[],s=new Set(o.map(e=>String(e)));return n(i.filter(e=>s.has(e.name)))}async function G(t){let i=!!t.args.flags.yes,{config:c,configPath:l}=await a(t.cwd);if(!l)return t.runtime.prompt.error(`No regpick.json configuration found. Please run 'init' first.`),r(e(`ValidationError`,`No config file found`));let u=(t.args.positionals[0]===`add`?1:0)+1,f=await H(t,c,t.args.positionals);if(!f.ok)return f;let p=f.value;if(!p)return n({kind:`noop`,message:`No registry source provided.`});let m=await s(p,t.cwd,t.runtime);if(!m.ok)return m;let{items:h}=m.value;if(!h.length)return t.runtime.prompt.warn(`No installable items in registry.`),n({kind:`noop`,message:`No installable items in registry.`});let g=t.args.positionals[u];g&&!t.args.flags.select&&(t.args.flags.select=g);let _=V(h,t),x;if(_.ok&&_.value)x=_.value;else if(_.ok){let e=await W(t,h);if(!e.ok)return e;x=e.value}else return _;let{resolvedItems:S,missingDependencies:C}=v(x,h);x=S;for(let e of C)t.runtime.prompt.warn(`Registry dependency "${e}" not found in current registry.`);if(!x||!x.length)return t.runtime.prompt.warn(`No items selected.`),n({kind:`noop`,message:`No items selected.`});if(!i){let n=await t.runtime.prompt.confirm({message:`Install ${x.length} item(s)?`,initialValue:!0});if(await t.runtime.prompt.isCancel(n)||!n)return r(e(`UserCancelled`,`Operation cancelled.`))}let w=new Set,T=y(x,t.cwd,c);if(!T.ok)return T;let E=T.value,D=await Promise.all(E.plannedWrites.map(async e=>await t.runtime.fs.pathExists(e.absoluteTarget)?e.absoluteTarget:null));for(let e of D)e&&w.add(e);let k=y(x,t.cwd,c,w);if(!k.ok)return k;let M=k.value,N=[];for(let n of M.plannedWrites)if(w.has(n.absoluteTarget))if(i||c.overwritePolicy===`overwrite`)N.push(n);else if(c.overwritePolicy===`skip`)t.runtime.prompt.warn(`Skipped existing file: ${n.absoluteTarget}`);else{let i=await t.runtime.prompt.select({message:`File exists: ${n.absoluteTarget}`,options:[{value:`overwrite`,label:`Overwrite this file`},{value:`skip`,label:`Skip this file`},{value:`abort`,label:`Abort installation`}]});if(await t.runtime.prompt.isCancel(i)||i===`abort`)return r(e(`UserCancelled`,`Installation aborted by user.`));i===`overwrite`&&N.push(n)}else N.push(n);let{missingDependencies:P,missingDevDependencies:F}=O(x,t.cwd,t.runtime),I=!1;if(P.length||F.length)if(i)I=!0;else{let n=A(t.cwd,c.packageManager,t.runtime),i=[];P.length&&i.push(`dependencies: ${P.join(`, `)}`),F.length&&i.push(`devDependencies: ${F.join(`, `)}`);let a=await t.runtime.prompt.confirm({message:`Install missing packages with ${n}? (${i.join(` | `)})`,initialValue:!0});if(await t.runtime.prompt.isCancel(a))return r(e(`UserCancelled`,`Dependency installation cancelled by user.`));I=!!a,I||t.runtime.prompt.warn(`Skipped dependency installation.`)}let L=[],B=[],U=0;for(let e of N){let n=x.find(t=>t.name===e.itemName);if(!n)continue;let r=await o(e.sourceFile,n,t.cwd,t.runtime);if(!r.ok)return r;let i=b(r.value,c);L.push(new z(e.absoluteTarget,i,t.runtime)),B.some(e=>e.name===n.name)||B.push(n),U++}B.length>0&&L.push(new R(B,t.cwd,t.runtime)),I&&L.push(new j(k.value.dependencyPlan,t.cwd,t.runtime));let G=await d(L,(e,n)=>{n===`executing`||(n===`completed`?t.runtime.prompt.success(`[Success] ${e}`):n===`failed`?t.runtime.prompt.error(`[Failed] ${e}`):n===`compensating`?t.runtime.prompt.warn(`[Rollback] ${e}`):n===`interrupted`&&t.runtime.prompt.error(`[Interrupted] Rolling back ${e}`))});return G.ok?(t.runtime.prompt.info(`Installed ${x.length} item(s), wrote ${U} file(s).`),n({kind:`success`,message:`Installed ${x.length} item(s), wrote ${U} file(s).`})):G}export{b as a,I as i,P as n,h as o,F as r,G as runAddCommand,d as s,L as t};
|
package/dist/config-7w5jSNP5.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:path";import*as t from"valibot";import n from"node:fs/promises";import{loadConfig as r}from"unconfig";const i=t.union([t.literal(`prompt`),t.literal(`overwrite`),t.literal(`skip`)]),a=t.union([t.literal(`auto`),t.literal(`npm`),t.literal(`yarn`),t.literal(`pnpm`)]),o=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:i,packageManager:a,preferManifestTarget:t.boolean(),allowOutsideProject:t.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:n,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:s,merge:!0,cwd:e});return{config:t.parse(o,n),configPath:i[0]||null}}async function u(e,t,{overwrite:r=!1}={}){let i=c(e),a=!1;try{await n.access(i),a=!0}catch{}return a&&!r?{filePath:i,written:!1}:(await n.writeFile(i,JSON.stringify(t,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 a,d as i,c as n,l as r,o as t};
|
package/dist/init-BA_GBZmf.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{a as r,n as i,r as a,t as o}from"./config-7w5jSNP5.mjs";import*as s from"valibot";function c(e,t){return e?`cancelled`:t?`overwrite`:`keep`}async function l(l){let u=i(l.cwd),d=await l.runtime.fs.stat(u);if(d.ok){let r=await l.runtime.prompt.confirm({message:`${u} already exists. Overwrite?`,initialValue:!1}),i=c(await l.runtime.prompt.isCancel(r),!!r);if(i===`cancelled`)return n(e(`UserCancelled`,`Operation cancelled.`));if(i===`keep`)return l.runtime.prompt.info(`Keeping existing configuration.`),t({kind:`noop`,message:`Keeping existing configuration.`})}let{config:f}=await a(l.cwd),p=!!l.args.flags.yes,m=p?`auto`:await l.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`}]}),h=await l.runtime.prompt.isCancel(m);if(!p&&h)return n(e(`UserCancelled`,`Operation cancelled.`));let g=p?`src/components/ui`:await l.runtime.prompt.text({message:`W jakim folderze trzymasz komponenty UI?`,placeholder:`src/components/ui`}),_=await l.runtime.prompt.isCancel(g);if(!p&&_)return n(e(`UserCancelled`,`Operation cancelled.`));let v=p?`prompt`:await l.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)`}]}),y=await l.runtime.prompt.isCancel(v);if(!p&&y)return n(e(`UserCancelled`,`Operation cancelled.`));let b={...f,packageManager:String(m),overwritePolicy:String(v),targetsByType:{...f.targetsByType,"registry:component":String(g||`src/components/ui`),"registry:file":String(g||`src/components/ui`),"registry:icon":`${String(g||`src/components/ui`)}/icons`}},x=s.parse(o,b);try{await r(l.cwd,x,{overwrite:!0})}catch(t){let r=`Failed to write config file: ${t instanceof Error?t.message:String(t)}`;return l.runtime.prompt.error(r),n(e(`RuntimeError`,r))}return l.runtime.prompt.success(`${d.ok?`Overwrote`:`Created`} ${u}`),t({kind:`success`,message:`${d.ok?`Overwrote`:`Created`} ${u}`})}export{l as runInitCommand};
|
package/dist/list-Cnec7wHk.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.mjs";import{r}from"./config-7w5jSNP5.mjs";import{t as i}from"./registry-CC3cGX5F.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};
|
package/dist/pack-DoI2-3I9.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./index.mjs";import{r as t,t as n}from"./result-mJp6ULEQ.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;let s=await Promise.all(n.value.map(async n=>{let s=r.join(e,n),c=await i.runtime.fs.stat(s);if(!c.ok)return c;if(c.value.isDirectory()){let e=await o(s);if(!e.ok)return e}else (s.endsWith(`.ts`)||s.endsWith(`.tsx`))&&a.push(s);return t(void 0)}));for(let e of s)if(!e.ok)return e;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=[],p=await Promise.all(d.map(async e=>{let n=await i.runtime.fs.readFile(e,`utf8`);return n.ok?t(a({path:e,content:n.value,targetDir:c})):n}));for(let e of p){if(!e.ok)return n(e.error);f.push(e.value)}let m={items:f},h=r.join(i.cwd,`registry.json`),g=await i.runtime.fs.writeJson(h,m,{spaces:2});return g.ok?(i.runtime.prompt.success(`Packed ${f.length} components into registry.json`),t({kind:`success`,message:`Generated registry.json`})):n(g.error)}export{s as runPackCommand};
|
package/dist/update-Cwr3o07A.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./result-mJp6ULEQ.mjs";import{r as t}from"./config-7w5jSNP5.mjs";import{n,t as r}from"./registry-CC3cGX5F.mjs";import{a as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./add-iAkEFSHQ.mjs";import d from"node:path";import{styleText as f}from"node:util";var p=class{name=`Save lockfile`;previousLockfile=null;existedBefore=!1;constructor(e,t,n){this.cwd=e,this.newLockfile=t,this.runtime=n}async execute(){let t=o(this.cwd);if(this.existedBefore=await this.runtime.fs.pathExists(t),this.existedBefore){let e=await c(this.cwd,this.runtime);this.previousLockfile=JSON.parse(JSON.stringify(e))}return await a(this.cwd,this.newLockfile,this.runtime),e(void 0)}async compensate(){if(this.existedBefore&&this.previousLockfile)await a(this.cwd,this.previousLockfile,this.runtime);else{let e=o(this.cwd),t=await this.runtime.fs.remove(e);if(!t.ok)return t}return e(void 0)}},m=class{name;existedBefore=!1;previousContent=null;constructor(e,t,n){this.targetPath=e,this.newContent=t,this.runtime=n,this.name=`Update file ${e}`}async execute(){let t=await this.runtime.fs.readFile(this.targetPath,`utf8`);t.ok?(this.existedBefore=!0,this.previousContent=t.value):this.existedBefore=!1;let n=await this.runtime.fs.ensureDir(d.dirname(this.targetPath));if(!n.ok)return n;let r=await this.runtime.fs.writeFile(this.targetPath,this.newContent,`utf8`);return r.ok?e(void 0):r}async compensate(){if(this.existedBefore&&this.previousContent!==null){let e=await this.runtime.fs.ensureDir(d.dirname(this.targetPath));if(!e.ok)return e;let t=await this.runtime.fs.writeFile(this.targetPath,this.previousContent,`utf8`);if(!t.ok)return t}else{let e=await this.runtime.fs.remove(this.targetPath);if(!e.ok)return e}return e(void 0)}};function h(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 g(t,n,r,a,o,c){let l=[],d=[];for(let{file:e,content:t}of r){let r=i(t,c);l.push(r);let a=s(n,e,o,c);if(!a.ok)return a;d.push({target:a.value.absoluteTarget,content:r})}let f=u(l.sort().join(``));return e({itemName:t,status:f===a?`up-to-date`:`requires-diff-prompt`,newHash:f,files:d})}async function _(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(f(t,`${n}${e}`))}}async function v(i){let a=await c(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:o}=await t(i.cwd),s=h(a),u=0,d=[],v=JSON.parse(JSON.stringify(a));for(let[e,t]of Object.entries(s)){let s=await r(e,i.cwd,i.runtime);if(!s.ok){i.runtime.prompt.warn(`Failed to load registry ${e}`);continue}let c=s.value.items;for(let e of t){let t=c.find(t=>t.name===e);if(!t)continue;let r=(await Promise.all(t.files.map(async e=>{let r=await n(e,t,i.cwd,i.runtime);return r.ok?{file:e,content:r.value}:null}))).filter(e=>e!==null),s=a.components[e].hash,l=g(e,t,r,s,i.cwd,o);if(!l.ok)continue;let p=l.value;if(p.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 p.files){let t=await i.runtime.fs.readFile(e.target,`utf8`),n=t.ok?t.value:``;console.log(f(`bold`,`\nDiff for ${e.target}:`)),await _(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 p.files)d.push(new m(e.target,e.content,i.runtime));v.components[e].hash=p.newHash,u++}}}if(u>0){d.push(new p(i.cwd,v,i.runtime));let t=await l(d,(e,t)=>{t===`executing`||(t===`completed`?i.runtime.prompt.success(`[Success] ${e}`):t===`failed`?i.runtime.prompt.error(`[Failed] ${e}`):t===`compensating`?i.runtime.prompt.warn(`[Rollback] ${e}`):t===`interrupted`&&i.runtime.prompt.error(`[Interrupted] Rolling back ${e}`))});return t.ok?e({kind:`success`,message:`Updated ${u} components.`}):t}return e({kind:`noop`,message:`All components are up to date.`})}export{v as runUpdateCommand};
|
|
File without changes
|
|
File without changes
|