@idem.agency/idem-ui 0.4.0 → 0.5.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/README.md +50 -6
- package/dist/bin.js +26 -15
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -28,17 +28,18 @@ idem-ui web
|
|
|
28
28
|
|
|
29
29
|
## Команды
|
|
30
30
|
|
|
31
|
-
### get — забрать
|
|
31
|
+
### get — забрать компоненты по имени
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
idem-ui get <slug
|
|
34
|
+
idem-ui get <slug[@label]>... [--path <dir>] [--force]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
| Флаг | Что делает |
|
|
38
38
|
| --- | --- |
|
|
39
|
-
| `--variant <label>` | взять конкретный вариант |
|
|
40
39
|
| `--path <dir>` | куда класть (по умолчанию — текущая папка) |
|
|
41
|
-
| `--force` | перезаписать
|
|
40
|
+
| `--force` | перезаписать существующие папки |
|
|
41
|
+
|
|
42
|
+
Вариант задаётся у слага: `idem-ui get two-variants@vite` берёт вариант `vite` без вопроса. Без `@label` и при нескольких вариантах CLI спросит, какой взять.
|
|
42
43
|
|
|
43
44
|
`--path` задаёт **родителя**: имя компонента дописывается всегда.
|
|
44
45
|
|
|
@@ -46,11 +47,43 @@ idem-ui get <slug> [--variant <label>] [--path <dir>] [--force]
|
|
|
46
47
|
idem-ui get checkbox --path src/shared/ui # → src/shared/ui/checkbox
|
|
47
48
|
```
|
|
48
49
|
|
|
50
|
+
Слагов можно передать несколько — у каждого свой `@label`, `--path` и `--force` общие на всех:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
idem-ui get carousel@next tags-inline --path src/ui # → src/ui/carousel, src/ui/tags-inline
|
|
54
|
+
```
|
|
55
|
+
|
|
49
56
|
Папка уже занята — CLI спросит, перезаписывать ли (по умолчанию «нет»). Согласие или `--force` заменяет папку **целиком**: она сносится и пишется заново, твоих правок в ней не останется.
|
|
50
57
|
|
|
51
|
-
Из пайпа или CI спрашивать некого — там сразу передавай
|
|
58
|
+
Из пайпа или CI спрашивать некого — там сразу передавай `slug@label` (если вариантов несколько) и `--force` (если папка может быть занята), иначе команда упадёт.
|
|
59
|
+
|
|
60
|
+
После копирования CLI печатает описание компонента и, если автор его оставил, постскриптум под заголовком `P.S. (<slug>)` — читай, там бывает важное.
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
### info — подробности о компонентах без скачивания
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
idem-ui info <slug[@label]>... [--json]
|
|
66
|
+
idem-ui info --all [--json]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
| Флаг | Что делает |
|
|
70
|
+
| --- | --- |
|
|
71
|
+
| `--all` | все компоненты хранилища |
|
|
72
|
+
| `--json` | вывод в JSON — для скриптов и AI-агентов |
|
|
73
|
+
|
|
74
|
+
Помогает решить, брать ли компонент: показывает описание, теги, варианты, картинку и P.S., ничего не записывая на диск и ничего не спрашивая.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
idem-ui info carousel # описание, теги, варианты, картинка
|
|
78
|
+
idem-ui info page-scrollbar@next-lenis # то же плюс readme варианта next-lenis
|
|
79
|
+
idem-ui info --all --json # всё хранилище одним JSON
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Readme варианта показывается, только если вариант назван через `@`. Слагов можно передать несколько, в том числе два варианта одного компонента — чтобы сравнить их readme: `idem-ui info icon@next icon@generate-sprite`.
|
|
83
|
+
|
|
84
|
+
Хоть один слаг не найден — команда падает целиком и ничего не печатает в stdout, ошибка уходит в stderr.
|
|
85
|
+
|
|
86
|
+
`--json` — для скриптов и AI-агентов: один объект `{ "components": [...], "skipped": [...] }`, ошибки только в stderr, сигнал — код выхода. Агенту `info` удобна тем, что только читает: её можно разрешить заранее, в отличие от `get`, который пишет на диск.
|
|
54
87
|
|
|
55
88
|
### list — витрина в терминале
|
|
56
89
|
|
|
@@ -81,6 +114,17 @@ idem-ui get --help # по конкретной команде
|
|
|
81
114
|
idem-ui help get
|
|
82
115
|
```
|
|
83
116
|
|
|
117
|
+
Без аргументов печатает перечень команд:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
Команды:
|
|
121
|
+
get скопировать компоненты
|
|
122
|
+
list показать перечень компонентов
|
|
123
|
+
info показать инфо о компонентах без скачивания
|
|
124
|
+
web поднять локальную веб-витрину
|
|
125
|
+
help показать справку
|
|
126
|
+
```
|
|
127
|
+
|
|
84
128
|
---
|
|
85
129
|
|
|
86
130
|
Актуальный список команд и флагов всегда отдаёт сам CLI: `idem-ui help`.
|
package/dist/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{access as
|
|
2
|
+
import{access as Ve,mkdir as Y,readdir as He,rm as De,writeFile as Be}from"fs/promises";import{dirname as Ge,join as qe}from"path";var c={UnknownCommand:"ERR_UNKNOWN_COMMAND",SlugRequired:"ERR_SLUG_REQUIRED",AllWithSlugs:"ERR_ALL_WITH_SLUGS",UnknownOption:"ERR_UNKNOWN_OPTION",MalformedSlug:"ERR_MALFORMED_SLUG",SlugConflict:"ERR_SLUG_CONFLICT",VariantNotFound:"ERR_VARIANT_NOT_FOUND",VariantRequired:"ERR_VARIANT_REQUIRED",StorageUnreachable:"ERR_STORAGE_UNREACHABLE",StorageTimeout:"ERR_STORAGE_TIMEOUT",StorageHttp:"ERR_STORAGE_HTTP",StorageEmptyArchive:"ERR_STORAGE_EMPTY_ARCHIVE",StorageNotFound:"ERR_STORAGE_NOT_FOUND",StorageQueryRejected:"ERR_STORAGE_QUERY_REJECTED",ComponentNotFound:"ERR_COMPONENT_NOT_FOUND",MetaInvalid:"ERR_META_INVALID",ComponentHasNoVariants:"ERR_COMPONENT_HAS_NO_VARIANTS",TargetExists:"ERR_TARGET_EXISTS",WriteFailed:"ERR_WRITE_FAILED",NoFreePort:"ERR_NO_FREE_PORT",Cancelled:"ERR_CANCELLED"},S=class extends Error{constructor(r){super(r.code);this.details=r;this.name=new.target.name,this.code=r.code}code},h=class extends S{constructor(r,o){super(r);this.hint=o}exitCode=2},w=class extends S{exitCode=1},T=class extends S{exitCode=1},$=class extends S{exitCode=1},N=class extends S{exitCode=1},j=class extends S{exitCode=130;constructor(){super({code:c.Cancelled})}};function K(){return{exists:async e=>{try{return await Ve(e),!0}catch{return!1}},writeFiles:async(e,t)=>{try{await De(e,{recursive:!0,force:!0}),await Y(e,{recursive:!0});for(let r of t){let o=qe(e,r.path);await Y(Ge(o),{recursive:!0}),await Be(o,r.data)}}catch(r){throw new $({code:c.WriteFailed,target:e,reason:r instanceof Error?r.message:String(r)})}},readSubdirs:async(e,t)=>(await He(e,{withFileTypes:!0})).filter(o=>o.isDirectory()).map(o=>o.name).filter(o=>!t(o)).toSorted()}}function _(e){return`components/${e}`}function M(e){return`${_(e)}/meta.json`}function Z(e,t){return`${_(e)}/${t}`}function ee(e,t,r){if(r.thumbnail!==void 0)return e.fileUrl(`${_(t)}/${r.thumbnail}`)}function te(e){return{async loadComponent(t){let r=await We(e,t),o=await Ye(e,t);if(o.length===0)throw new T({code:c.ComponentHasNoVariants,slug:t,name:r.name});let n=o.toSorted().map(i=>({label:i}));return{slug:t,meta:r,variants:n,thumbnailUrl:ee(e,t,r)}},async loadVariantFiles(t,r){return e.fetchArchive(Z(t,r))},async loadReadme(t,r){let o=Z(t,r),i=(await e.fetchFileNames(o)).toSorted().find(s=>s.toLowerCase()==="readme.md");return i===void 0?null:e.fetchFile(`${o}/${i}`)},async listComponents(){let t=await z(e),r=await X(e,t),o=t.map(s=>oe(s,r.get(M(s)))),n=[],i=[];for(let s of o)s.kind==="component"?n.push({slug:s.slug,meta:s.meta}):i.push(s.skipped);return{components:n.toSorted(I),skipped:i.toSorted(I)}},async listAll(){let t=await z(e),[r,o]=await Promise.all([X(e,t),e.fetchFoldersBatch(t.map(p=>_(p)))]),n=t.map(p=>Qe(e,p,r.get(M(p)),o.get(_(p))??[])),i=[],s=[];for(let p of n)p.kind==="component"?i.push(p.component):s.push(p.skipped);return{components:i.toSorted(I),skipped:s.toSorted(I)}}}}async function We(e,t){let r=await Je(e,t);return re(r,t)}function re(e,t){let r;try{r=JSON.parse(e)}catch{throw new T({code:c.MetaInvalid,slug:t})}if(typeof r!="object"||r===null||Array.isArray(r))throw new T({code:c.MetaInvalid,slug:t});return r}async function z(e){try{return await e.fetchFolders("components")}catch(t){if(t instanceof w&&t.code===c.StorageNotFound)return[];throw t}}async function X(e,t){return e.fetchFilesBatch(t.map(r=>M(r)))}function oe(e,t){if(t===void 0)return{kind:"skipped",skipped:{slug:e,reason:"missing"}};try{let r=re(t,e);return{kind:"component",slug:e,meta:r}}catch(r){if(r instanceof T&&r.code===c.MetaInvalid)return{kind:"skipped",skipped:{slug:e,reason:"invalid"}};throw r}}function Qe(e,t,r,o){let n=oe(t,r);if(n.kind==="skipped")return n;if(o.length===0)return{kind:"skipped",skipped:{slug:t,reason:"no-variants"}};let i=o.toSorted().map(s=>({label:s}));return{kind:"component",component:{slug:t,meta:n.meta,variants:i,thumbnailUrl:ee(e,t,n.meta)}}}function I(e,t){return e.slug.localeCompare(t.slug)}async function Je(e,t){try{return await e.fetchFile(M(t))}catch(r){throw r instanceof w&&r.code===c.StorageNotFound?new T({code:c.ComponentNotFound,slug:t}):r}}async function Ye(e,t){try{return await e.fetchFolders(_(t))}catch(r){if(r instanceof w&&r.code===c.StorageNotFound)return[];throw r}}var H={host:"gitlab.idem.agency",projectPath:"barabel/component-storage",ref:"main"};function ne(e=process.env){return{host:e.IDEM_STORAGE_HOST||H.host,projectPath:e.IDEM_STORAGE_PROJECT_PATH||H.projectPath,ref:e.IDEM_STORAGE_REF||H.ref}}import{gunzipSync as nt}from"zlib";var Ke={offset:0,length:100},Ze={offset:124,length:12},ze={offset:156,length:1},Xe={offset:345,length:155},et=["0","\0"];function se(e){let t=[],r=0;for(;r+512<=e.length;){let o=e.subarray(r,r+512);if(ot(o))break;let n=rt(o),i=U(o,ze),s=r+512;et.includes(i)&&t.push({name:tt(o),data:e.slice(s,s+n)}),r=s+Math.ceil(n/512)*512}return t}function tt(e){let t=U(e,Ke),r=U(e,Xe);return r===""?t:`${r}/${t}`}function rt(e){return parseInt(U(e,Ze),8)||0}function U(e,t){let r=e.subarray(t.offset,t.offset+t.length),o=r.indexOf(0);return new TextDecoder().decode(o===-1?r:r.subarray(0,o)).trim()}function ot(e){return e.every(t=>t===0)}var ie=1e4,st=70,it=25,at=`
|
|
3
3
|
query($project: ID!, $ref: String!, $paths: [String!]!) {
|
|
4
4
|
project(fullPath: $project) {
|
|
5
5
|
repository {
|
|
@@ -12,8 +12,8 @@ import{access as $e,mkdir as W,readdir as Oe,rm as Ae,writeFile as xe}from"fs/pr
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
`;function
|
|
16
|
-
query($project: ID!, $ref: String!, ${
|
|
15
|
+
`;function ct(e){let t=Array.from({length:e},(n,i)=>i),r=t.map(n=>`$p${n}: String!`),o=t.map(n=>`t${n}: paginatedTree(path: $p${n}, ref: $ref) { nodes { trees { nodes { name } } } }`);return`
|
|
16
|
+
query($project: ID!, $ref: String!, ${r.join(", ")}) {
|
|
17
17
|
project(fullPath: $project) {
|
|
18
18
|
repository {
|
|
19
19
|
${o.join(`
|
|
@@ -21,20 +21,31 @@ import{access as $e,mkdir as W,readdir as Oe,rm as Ae,writeFile as xe}from"fs/pr
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
`}function
|
|
24
|
+
`}function pe(e,t=globalThis.fetch){let r=encodeURIComponent(e.projectPath),o=`https://${e.host}/api/v4/projects/${r}/repository`;function n(a){return`${o}/files/${encodeURIComponent(a)}/raw?ref=${e.ref}`}return{fileUrl:n,async fetchFile(a){let g=n(a),m=await p(g);if(!m.ok)throw D(m.status,a);return m.text()},async fetchArchive(a){let g=`${o}/archive.tar.gz?sha=${e.ref}&path=${a}`,m=await p(g,{mode:"same-origin"});if(!m.ok)throw D(m.status,a);let d=new Uint8Array(await m.arrayBuffer());if(d.length===0)throw ce(a);let l=[];for(let u of se(nt(d))){let C=pt(a,u.name);C!==void 0&&l.push({path:C,data:u.data})}if(l.length===0)throw ce(a);return l},async fetchFolders(a){return(await i(a)).filter(m=>m.type==="tree").map(m=>m.name)},async fetchFileNames(a){return(await i(a)).filter(m=>m.type==="blob").map(m=>m.name)},async fetchFilesBatch(a){let g=await Promise.all(ae(a,st).map(d=>s(at,{paths:d}))),m=new Map;for(let d of g)for(let l of d.project.repository.blobs.nodes)m.set(l.path,l.rawTextBlob);return m},async fetchFoldersBatch(a){let g=await Promise.all(ae(a,it).map(async d=>{let l=await s(ct(d.length),mt(d));return{batch:d,data:l}})),m=new Map;for(let{batch:d,data:l}of g)d.forEach((u,C)=>{let R=l.project.repository[`t${C}`];m.set(u,(R?.nodes??[]).flatMap(x=>x.trees.nodes.map(Le=>Le.name)))});return m}};async function i(a){let g=`${o}/tree?path=${encodeURIComponent(a)}&ref=${e.ref}&per_page=100`,m=[],d="";do{let l=await p(d===""?g:`${g}&page=${encodeURIComponent(d)}`);if(!l.ok)throw D(l.status,a);d=l.headers.get("x-next-page")??"",m.push(...await l.json())}while(d!=="");return m}async function s(a,g){let m=await p(`https://${e.host}/api/graphql`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:a,variables:{...g,project:e.projectPath,ref:e.ref}})});if(!m.ok)throw new w({code:c.StorageHttp,status:m.status});let d=await m.json(),[l]=d.errors??[];if(l!==void 0)throw new w({code:c.StorageQueryRejected,reason:l.message});return d.data}async function p(a,g={}){try{return await t(a,{...g,signal:AbortSignal.timeout(ie)})}catch(m){throw m instanceof Error&&m.name==="TimeoutError"?new w({code:c.StorageTimeout,host:e.host,ms:ie}):new w({code:c.StorageUnreachable,host:e.host})}}}function pt(e,t){let r=`${e}/`,o=t.lastIndexOf(r);if(o!==-1)return t.slice(o+r.length)}function mt(e){return Object.fromEntries(e.map((t,r)=>[`p${r}`,t]))}function ae(e,t){let r=[];for(let o=0;o<e.length;o+=t)r.push(e.slice(o,o+t));return r}function D(e,t){return e===404?new w({code:c.StorageNotFound,path:t}):new w({code:c.StorageHttp,status:e})}function ce(e){return new w({code:c.StorageEmptyArchive,path:e})}function me(e){return{command:e[0],rest:e.slice(1)}}function v(e){return e.includes("--help")||e.includes("-h")}function L(e,t){let r=e.indexOf("@");if(r===-1)return{slug:e};let o=e.slice(0,r),n=e.slice(r+1);if(!o||!n)throw new h({code:c.MalformedSlug,arg:e,command:t});return{slug:o,label:n}}function B(e,t){let r=e.variants.find(o=>o.label===t);if(!r)throw new h({code:c.VariantNotFound,slug:e.slug,name:e.meta.name,requested:t,available:e.variants.map(o=>o.label)});return r}async function A(e,t,r){return t!==void 0?B(e,t):e.variants.length===1?e.variants[0]:r.pick(e.slug,e.meta.name,e.variants)}import le from"path";function G(e,t,r){let o=le.resolve(e,t??".");return le.join(o,r)}async function V(e,t,r,o,n,i){let s=e.map(a=>G(o,t,a)),p=[];for(let a of s)await n.exists(a)&&p.push(a);return p.length>0&&!r&&await i.confirm(p),s}import{parseArgs as lt}from"util";function ge(e){let t,r;try{({values:t,positionals:r}=lt({args:e,allowPositionals:!0,options:{path:{type:"string"},force:{type:"boolean",default:!1}}}))}catch(s){let p=s instanceof Error?s.message:String(s);throw new h({code:c.UnknownOption,detail:p,command:"get"})}if(r.length===0)throw new h({code:c.SlugRequired,command:"get"});let o=[...new Set(r)],n=o.map(s=>L(s,"get")),i=new Map;for(let[s,{slug:p}]of n.entries()){let a=i.get(p)??[];a.push(o[s]),i.set(p,a)}for(let[s,p]of i)if(p.length>1)throw new h({code:c.SlugConflict,slug:s,forms:p,command:"get"});return{refs:n,path:t.path,force:t.force}}var q={get:{summary:"\u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B",usage:"idem-ui get <slug[@label]>... [--path <dir>] [--force]",args:[{name:"<slug>",describes:"\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442; \u0435\u0441\u043B\u0438 \u0443 \u043D\u0435\u0433\u043E \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432, CLI \u0441\u043F\u0440\u043E\u0441\u0438\u0442, \u043A\u0430\u043A\u043E\u0439 \u0432\u0437\u044F\u0442\u044C, \u0430 \u0431\u0435\u0437 \u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u0430 \u0432\u044B\u0434\u0430\u0441\u0442 \u043E\u0448\u0438\u0431\u043A\u0443 \u0441\u043E \u0441\u043F\u0438\u0441\u043A\u043E\u043C \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432"},{name:"<slug>@<label>",describes:"\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0432 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0435 <label>"}],flags:[{name:"--path <dir>",describes:"\u043A\u0443\u0434\u0430 \u043F\u043E\u043B\u043E\u0436\u0438\u0442\u044C \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u2014 \u0442\u0435\u043A\u0443\u0449\u0430\u044F \u043F\u0430\u043F\u043A\u0430)"},{name:"--force",describes:"\u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u043F\u0430\u043F\u043A\u0438"}]},list:{summary:"\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u0435\u0440\u0435\u0447\u0435\u043D\u044C \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432",usage:"idem-ui list",flags:[]},info:{summary:"\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0438\u043D\u0444\u043E \u043E \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430\u0445 \u0431\u0435\u0437 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u044F",usage:`idem-ui info <slug[@label]>... [--json]
|
|
25
|
+
idem-ui info --all [--json]`,args:[{name:"<slug>",describes:"\u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435, \u0442\u0435\u0433\u0438, \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B \u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430"},{name:"<slug>@<label>",describes:"\u0442\u043E \u0436\u0435 \u043F\u043B\u044E\u0441 readme \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430 <label>"}],flags:[{name:"--all",describes:"\u0432\u0441\u0435 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430"},{name:"--json",describes:"\u0432\u044B\u0432\u043E\u0434 \u0432 JSON \u2014 \u0434\u043B\u044F \u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0432 \u0438 AI-\u0430\u0433\u0435\u043D\u0442\u043E\u0432"}]},web:{summary:"\u043F\u043E\u0434\u043D\u044F\u0442\u044C \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u0443\u044E \u0432\u0435\u0431-\u0432\u0438\u0442\u0440\u0438\u043D\u0443",usage:"idem-ui web",flags:[]},help:{summary:"\u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0441\u043F\u0440\u0430\u0432\u043A\u0443",usage:"idem-ui help [command]",flags:[]}},fe=e=>e.map(({name:r,describes:o})=>` ${r.padEnd(20)} ${o}`).join(`
|
|
26
|
+
`),b={general:()=>`idem-ui \u2014 \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043B\u044C\u0449\u0438\u043A \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432.
|
|
25
27
|
|
|
26
28
|
\u041A\u043E\u043C\u0430\u043D\u0434\u044B:
|
|
27
|
-
${Object.entries(
|
|
28
|
-
`)}`,forCommand:e=>{let{summary:
|
|
29
|
+
${Object.entries(q).map(([t,{summary:r}])=>` ${t.padEnd(6)} ${r}`).join(`
|
|
30
|
+
`)}`,forCommand:e=>{let{summary:t,usage:r,args:o=[],flags:n}=q[e],i=[`\u0414\u043B\u044F \u0447\u0435\u0433\u043E: ${t}`,`\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435: ${r}`];return o.length>0&&i.push(`\u0410\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u044B:
|
|
31
|
+
${fe(o)}`),n.length>0&&i.push(`\u0424\u043B\u0430\u0433\u0438:
|
|
32
|
+
${fe(n)}`),i.join(`
|
|
29
33
|
|
|
30
|
-
\
|
|
34
|
+
`)},isCommand:e=>e in q};var O=(e,t)=>`${t} (${e})`,de=e=>{let t=Math.max(40,e.length+2);return e.padEnd(t,"\u2500")},f={error:e=>{switch(e.code){case c.UnknownCommand:return`\u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u0430 ${e.got}. \u0421\u043F\u0438\u0441\u043E\u043A \u043A\u043E\u043C\u0430\u043D\u0434 \u2014 idem-ui help.`;case c.SlugRequired:return e.command==="info"?"\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0438\u043C\u044F \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430. \u0423\u043A\u0430\u0436\u0438 \u0441\u043B\u0430\u0433 \u0438\u043B\u0438 --all.":"\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0438\u043C\u044F \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430.";case c.AllWithSlugs:return`--all \u043D\u0435 \u0441\u043E\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044F \u0441\u043E \u0441\u043B\u0430\u0433\u0430\u043C\u0438: ${e.slugs.join(", ")}. \u0423\u043A\u0430\u0436\u0438 \u043B\u0438\u0431\u043E \u0441\u043B\u0430\u0433\u0438, \u043B\u0438\u0431\u043E --all.`;case c.UnknownOption:return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u044B: ${e.detail}`;case c.MalformedSlug:return`\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0437\u0430\u043F\u0438\u0441\u044C ${e.arg}: \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F <slug> \u0438\u043B\u0438 <slug>@<label>.`;case c.SlugConflict:{let{slug:t,forms:r}=e;return[`\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 ${t} \u0443\u043A\u0430\u0437\u0430\u043D \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u0430\u0437: ${r.join(", ")}.`,`\u0412\u0441\u0435 \u043E\u043D\u0438 \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043B\u0438\u0441\u044C \u0431\u044B \u0432 \u043E\u0434\u043D\u0443 \u043F\u0430\u043F\u043A\u0443 ${t}, \u043F\u043E\u0442\u043E\u043C\u0443 \u0447\u0442\u043E --path \u043E\u0431\u0449\u0438\u0439 \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432.`,"\u0427\u0442\u043E\u0431\u044B \u0432\u0437\u044F\u0442\u044C \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432, \u0437\u0430\u043F\u0443\u0441\u0442\u0438 get \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0441 \u0440\u0430\u0437\u043D\u044B\u043C\u0438 --path."].join(" ")}case c.VariantNotFound:return`\u0423 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${O(e.slug,e.name)} \u043D\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430 ${e.requested}. \u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435: ${e.available.join(", ")}`;case c.VariantRequired:return`\u0423 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${O(e.slug,e.name)} \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432: ${e.available.join(", ")}. \u0423\u043A\u0430\u0436\u0438 \u044F\u0440\u043B\u044B\u043A: ${e.slug}@<label>.`;case c.StorageUnreachable:return`\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0443 ${e.host}. \u041F\u0440\u043E\u0432\u0435\u0440\u044C, \u043F\u043E\u0434\u043D\u044F\u0442 \u043B\u0438 VPN.`;case c.StorageTimeout:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 ${e.host} \u043D\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u0437\u0430 ${e.ms/1e3} \u0441. \u041F\u0440\u043E\u0432\u0435\u0440\u044C VPN; \u0435\u0441\u043B\u0438 \u043E\u043D \u043F\u043E\u0434\u043D\u044F\u0442 \u2014 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E, GitLab \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D.`;case c.StorageHttp:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u043E\u0448\u0438\u0431\u043A\u043E\u0439 ${e.status}. \u041F\u043E\u0434\u043E\u0436\u0434\u0438 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430; \u0435\u0441\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0441\u044F \u2014 \u0441\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443.`;case c.StorageEmptyArchive:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0434\u0430\u043B\u043E \u043F\u0443\u0441\u0442\u043E\u0439 \u0430\u0440\u0445\u0438\u0432 \u0434\u043B\u044F ${e.path}. \u041F\u043E\u0434\u043E\u0436\u0434\u0438 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430; \u0435\u0441\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0441\u044F \u2014 \u0441\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443.`;case c.StorageNotFound:return`\u0412 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0442 \u043F\u0443\u0442\u0438 ${e.path}. \u041F\u0440\u043E\u0432\u0435\u0440\u044C \u0438\u043C\u044F.`;case c.StorageQueryRejected:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0432\u0435\u0440\u0433\u043B\u043E \u0437\u0430\u043F\u0440\u043E\u0441, \u0441\u0435\u0442\u044C \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u0446\u0435\u043B\u0430 \u2014 \u0441\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443. \u041E\u0442\u0432\u0435\u0442 GitLab: ${e.reason}`;case c.ComponentNotFound:return`\u0412 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${e.slug}. \u041F\u0440\u043E\u0432\u0435\u0440\u044C \u0438\u043C\u044F.`;case c.MetaInvalid:return`\u041C\u0435\u0442\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${e.slug} \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u043C JSON-\u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C. \u0421\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443.`;case c.ComponentHasNoVariants:return`\u0423 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${O(e.slug,e.name)} \u043D\u0435\u0442 \u043D\u0438 \u043E\u0434\u043D\u043E\u0439 \u043F\u0430\u043F\u043A\u0438-\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430. \u0421\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430.`;case c.TargetExists:return e.targets.length===1?`\u041F\u0430\u043F\u043A\u0430 ${e.targets[0]} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044C \u0442\u0440\u0435\u0431\u0443\u0435\u0442 --force.`:["\u041F\u0430\u043F\u043A\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0442, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044C \u0442\u0440\u0435\u0431\u0443\u0435\u0442 --force:",...e.targets.map(r=>`- ${r}`)].join(`
|
|
35
|
+
`);case c.WriteFailed:{let t=[`\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 ${e.target}: ${e.reason}`];return e.written?.length&&t.push(`\u0417\u0430\u043F\u0438\u0441\u0430\u043D\u044B: ${e.written.join(", ")}`),e.pending?.length&&t.push(`\u041D\u0435 \u0437\u0430\u043F\u0438\u0441\u0430\u043D\u044B: ${e.pending.join(", ")}`),t.join(`
|
|
36
|
+
`)}case c.NoFreePort:return`\u041D\u0435 \u043D\u0430\u0448\u043B\u043E\u0441\u044C \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430: ${e.tried} \u043F\u043E\u0434\u0440\u044F\u0434 \u0437\u0430\u043D\u044F\u0442\u044B, \u043D\u0430\u0447\u0438\u043D\u0430\u044F \u0441 ${e.start}. \u041E\u0441\u0432\u043E\u0431\u043E\u0434\u0438 \u043F\u043E\u0440\u0442 \u0438\u043B\u0438 \u0437\u0430\u043A\u0440\u043E\u0439 \u043B\u0438\u0448\u043D\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044B.`;case c.Cancelled:return"\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E"}},usageHint:e=>{switch(e.kind){case"help":return`\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435: idem-ui ${e.command} --help`;case"info":return`\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435 \u043E \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0435: idem-ui info ${e.args.join(" ")}`}},variantQuestion:(e,t)=>`\u0412\u044B\u0431\u0435\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${O(e,t)}`,componentDescription:(e,t)=>{let r=[`\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442: ${O(e,t.name)}`];return t.description&&r.push(`\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435: ${t.description}`),t.tags?.length&&r.push(`\u0422\u0435\u0433\u0438: ${t.tags.join(", ")}`),r.join(`
|
|
37
|
+
`)},overwriteQuestion:e=>`\u041F\u0430\u043F\u043A\u0430 ${e} \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C?`,pathQuestion:()=>"\u0412 \u043A\u0430\u043A\u0443\u044E \u043F\u0430\u043F\u043A\u0443 \u043F\u043E\u043B\u043E\u0436\u0438\u0442\u044C? (Enter \u2014 \u0442\u0435\u043A\u0443\u0449\u0430\u044F)",chosenVariant:e=>`\u0412\u0430\u0440\u0438\u0430\u043D\u0442: ${e}`,downloading:(e,t)=>`\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u044E ${e}/${t}\u2026`,copied:e=>`\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u0432 ${e}`,note:(e,t)=>`
|
|
38
|
+
P.S. (${e})
|
|
39
|
+
${t}`,infoVariants:e=>`\u0412\u0430\u0440\u0438\u0430\u043D\u0442\u044B: ${e.join(", ")}`,infoThumbnail:e=>`\u041E\u0431\u043B\u043E\u0436\u043A\u0430: ${e}`,infoNote:e=>["P.S.",...e.split(`
|
|
40
|
+
`).map(r=>` ${r}`)].join(`
|
|
41
|
+
`),catalogHeader:()=>"\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B:",catalogLine:(e,t)=>{let r=`- (${e}) ${t.name}`;return t.description&&(r+=` \u2014 ${t.description}`),t.tags?.length&&(r+=` [${t.tags.join(", ")}]`),r},componentQuestion:()=>"\u0412\u044B\u0431\u0435\u0440\u0438 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442",catalogChoiceLabel:(e,t)=>`(${e}) ${t.name}`,catalogChoiceHint:e=>{let t=[];return e.description&&t.push(e.description),e.tags?.length&&t.push(`\u0422\u0435\u0433\u0438: ${e.tags.join(", ")}`),t.length>0?t.join(`
|
|
42
|
+
`):void 0},emptyCatalog:()=>"\u0412 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432",skippedHeader:()=>"\u041F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B:",skippedComponent:(e,t)=>{switch(t){case"missing":return`- ${e}: \u043D\u0435\u0442 meta.json.`;case"invalid":return`- ${e}: \u0431\u0438\u0442\u044B\u0439 meta.json.`;case"no-variants":return`- ${e}: \u043D\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432.`}},readmeSection:(e,t)=>{if(t===null)return de(`\u2500\u2500 \u0420\u0438\u0434\u043C\u0438: ${e} \u2014 \u043D\u0435\u0442 `);let r=de(`\u2500\u2500 \u0420\u0438\u0434\u043C\u0438: ${e} `),o=t.replace(/\r\n/g,`
|
|
43
|
+
`).split(`
|
|
44
|
+
`),n=a=>a.trim()==="",i=o.findIndex(a=>!n(a)),s=o.findLastIndex(a=>!n(a));if(i===-1)return r;let p=o.slice(i,s+1).map(a=>n(a)?"":` ${a}`);return[r,...p].join(`
|
|
45
|
+
`)},cliError:(e,t)=>`error [${e}]: ${t}`,internalError:()=>"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u043E\u0448\u0438\u0431\u043A\u0430:"};function ue(e){let{catalog:t,picker:r,projectFiles:o,confirmer:n}=e;return async i=>{if(v(i)){console.log(b.forCommand("get"));return}let s=ge(i),p=[];for(let{slug:l,label:u}of s.refs){let C=await t.loadComponent(l),R=u===void 0?void 0:await A(C,u,r);p.push({component:C,requested:R})}let a=[];for(let[l,{component:u,requested:C}]of p.entries()){l>0&&console.log(""),console.log(f.componentDescription(u.slug,u.meta));let R=C??await A(u,void 0,r);console.log(f.chosenVariant(R.label)),a.push({component:u,variant:R})}let g=a.map(({component:l})=>l.slug),m=await V(g,s.path,s.force,process.cwd(),o,n),d=[];for(let{component:l,variant:u}of a)console.log(f.downloading(l.slug,u.label)),d.push(await t.loadVariantFiles(l.slug,u.label));for(let[l,u]of m.entries()){try{await o.writeFiles(u,d[l])}catch(C){let R=C instanceof $&&C.details.code===c.WriteFailed;throw a.length===1||!R?C:new $({...C.details,written:g.slice(0,l),pending:g.slice(l)})}console.log(f.copied(u))}for(let{component:l}of a){let u=l.meta.note?.trim();u&&console.log(f.note(l.slug,u))}}}import{parseArgs as gt}from"util";function he(e){try{gt({args:e,options:{},allowPositionals:!1})}catch(t){let r=t instanceof Error?t.message:String(t),n=e.some(i=>i.startsWith("-"))?void 0:{kind:"info",args:e};throw new h({code:c.UnknownOption,detail:r,command:"list"},n)}}import ft from"@inquirer/search";var k=e=>e instanceof Error&&e.name==="ExitPromptError";function dt(e,t){let r=(t??"").trim().toLowerCase();return e.filter(({slug:o,meta:n})=>`${o} ${n.name}`.toLowerCase().includes(r))}async function Ce(e){try{return await ft({message:f.componentQuestion(),pageSize:10,source:t=>dt(e,t).map(({slug:r,meta:o})=>({name:f.catalogChoiceLabel(r,o),value:r,description:f.catalogChoiceHint(o)}))})}catch(t){throw k(t)?new j:t}}import ut from"@inquirer/input";async function we(e){try{return await ut({message:f.pathQuestion(),default:e})}catch(t){throw k(t)?new j:t}}function ye(e){let{catalog:t,picker:r,projectFiles:o,confirmer:n}=e;return async i=>{if(v(i)){console.log(b.forCommand("list"));return}he(i);let{components:s,skipped:p}=await t.listComponents();if(p.length>0&&(console.error(f.skippedHeader()),p.forEach(({slug:R,reason:x})=>{console.error(f.skippedComponent(R,x))}),console.error("")),!process.stdout.isTTY){s.length>0&&(console.log(f.catalogHeader()),s.forEach(({slug:R,meta:x})=>{console.log(f.catalogLine(R,x))}));return}if(s.length===0){console.log(f.emptyCatalog());return}let a=await Ce(s),g=await t.loadComponent(a),m=await A(g,void 0,r);console.log(f.chosenVariant(m.label));let d=await we(process.cwd()),[l]=await V([a],d,!1,process.cwd(),o,n);console.log(f.downloading(a,m.label));let u=await t.loadVariantFiles(a,m.label);await o.writeFiles(l,u),console.log(f.copied(l));let C=g.meta.note?.trim();C&&console.log(f.note(a,C))}}function Ee(){return e=>{let t=e[0];if(t!==void 0&&b.isCommand(t)){console.log(b.forCommand(t));return}console.log(b.general())}}import{parseArgs as ht}from"util";function Re(e){let t,r;try{({values:t,positionals:r}=ht({args:e,allowPositionals:!0,options:{all:{type:"boolean",default:!1},json:{type:"boolean",default:!1}}}))}catch(n){let i=n instanceof Error?n.message:String(n);throw new h({code:c.UnknownOption,detail:i,command:"info"})}if(t.all&&r.length>0)throw new h({code:c.AllWithSlugs,slugs:r,command:"info"});if(t.all)return{all:!0,entries:[],json:t.json};if(r.length===0)throw new h({code:c.SlugRequired,command:"info"});let o=new Map;for(let n of r){let{slug:i,label:s}=L(n,"info"),p=o.get(i)??{slug:i,labels:[]};s!==void 0&&!p.labels.includes(s)&&p.labels.push(s),o.set(i,p)}return{all:!1,entries:[...o.values()],json:t.json}}var Se=e=>{let{slug:t,meta:r,variants:o,thumbnailUrl:n}=e,i=o.map(({label:a})=>a),s=[f.componentDescription(t,r),f.infoVariants(i)];n&&s.push(f.infoThumbnail(n));let p=r.note?.trim();return p&&s.push(f.infoNote(p)),s.join(`
|
|
46
|
+
`)},Ct=(e,t)=>{let r=e.variants.map(o=>{let n=t.get(o.label);return n===void 0?o:{...o,readme:n}});return{...e,variants:r}};function be(e){let{catalog:t}=e;return async r=>{if(v(r)){console.log(b.forCommand("info"));return}let{all:o,entries:n,json:i}=Re(r);if(o){let g=await t.listAll();if(i){console.log(JSON.stringify(g,null,2));return}let{components:m,skipped:d}=g;if(m.length===0&&console.error(f.emptyCatalog()),d.length>0&&(console.error(f.skippedHeader()),d.forEach(({slug:l,reason:u})=>{console.error(f.skippedComponent(l,u))}),console.error("")),m.length>0){let l=m.map(u=>Se(u));console.log(l.join(`
|
|
31
47
|
|
|
32
|
-
|
|
48
|
+
`))}return}let s=[];for(let{slug:g,labels:m}of n){let d=await t.loadComponent(g);for(let l of m)B(d,l);s.push({component:d,labels:m})}let p=[];for(let{component:g,labels:m}of s){let d=new Map;for(let l of m)d.set(l,await t.loadReadme(g.slug,l));p.push({component:g,readmes:d})}if(i){let g=p.map(({component:m,readmes:d})=>Ct(m,d));console.log(JSON.stringify({components:g,skipped:[]},null,2));return}let a=p.map(({component:g,readmes:m})=>{let d=[Se(g)];for(let[l,u]of m)d.push(f.readmeSection(l,u));return d.join(`
|
|
49
|
+
`)});console.log(a.join(`
|
|
33
50
|
|
|
34
|
-
\
|
|
35
|
-
${n.join(`
|
|
36
|
-
`)}`},isCommand:e=>e in B};var L=(e,r)=>`${r} (${e})`,l={error:e=>{switch(e.code){case s.UnknownCommand:return`\u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u0430 ${e.got}. \u0421\u043F\u0438\u0441\u043E\u043A \u043A\u043E\u043C\u0430\u043D\u0434 \u2014 idem-ui help.`;case s.SlugRequired:return"\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E \u0438\u043C\u044F \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430.";case s.TooManySlugs:return`\u041E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u043C\u044F \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E: ${e.got.join(", ")}`;case s.UnknownOption:return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u044B: ${e.detail}`;case s.VariantNotFound:return`\u0423 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${L(e.slug,e.name)} \u043D\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430 ${e.requested}. \u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435: ${e.available.join(", ")}`;case s.VariantRequired:return`\u0423 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${L(e.slug,e.name)} \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432: ${e.available.join(", ")}. \u0423\u043A\u0430\u0436\u0438 --variant <label>.`;case s.StorageUnreachable:return`\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0443 ${e.host}. \u041F\u0440\u043E\u0432\u0435\u0440\u044C, \u043F\u043E\u0434\u043D\u044F\u0442 \u043B\u0438 VPN.`;case s.StorageTimeout:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 ${e.host} \u043D\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u0437\u0430 ${e.ms/1e3} \u0441. \u041F\u0440\u043E\u0432\u0435\u0440\u044C VPN; \u0435\u0441\u043B\u0438 \u043E\u043D \u043F\u043E\u0434\u043D\u044F\u0442 \u2014 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E, GitLab \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D.`;case s.StorageHttp:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u043E\u0448\u0438\u0431\u043A\u043E\u0439 ${e.status}. \u041F\u043E\u0434\u043E\u0436\u0434\u0438 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430; \u0435\u0441\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0441\u044F \u2014 \u0441\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443.`;case s.StorageEmptyArchive:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0434\u0430\u043B\u043E \u043F\u0443\u0441\u0442\u043E\u0439 \u0430\u0440\u0445\u0438\u0432 \u0434\u043B\u044F ${e.path}. \u041F\u043E\u0434\u043E\u0436\u0434\u0438 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430; \u0435\u0441\u043B\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0441\u044F \u2014 \u0441\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443.`;case s.StorageNotFound:return`\u0412 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0442 \u043F\u0443\u0442\u0438 ${e.path}. \u041F\u0440\u043E\u0432\u0435\u0440\u044C \u0438\u043C\u044F.`;case s.StorageQueryRejected:return`\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0432\u0435\u0440\u0433\u043B\u043E \u0437\u0430\u043F\u0440\u043E\u0441, \u0441\u0435\u0442\u044C \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u0446\u0435\u043B\u0430 \u2014 \u0441\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443. \u041E\u0442\u0432\u0435\u0442 GitLab: ${e.reason}`;case s.ComponentNotFound:return`\u0412 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${e.slug}. \u041F\u0440\u043E\u0432\u0435\u0440\u044C \u0438\u043C\u044F.`;case s.MetaInvalid:return`\u041C\u0435\u0442\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${e.slug} \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u043C JSON-\u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C. \u0421\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443.`;case s.ComponentHasNoVariants:return`\u0423 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${L(e.slug,e.name)} \u043D\u0435\u0442 \u043D\u0438 \u043E\u0434\u043D\u043E\u0439 \u043F\u0430\u043F\u043A\u0438-\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430. \u0421\u043E\u043E\u0431\u0449\u0438 \u043C\u0435\u0439\u043D\u0442\u0435\u0439\u043D\u0435\u0440\u0443 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430.`;case s.TargetExists:return`\u041F\u0430\u043F\u043A\u0430 ${e.target} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044C \u0442\u0440\u0435\u0431\u0443\u0435\u0442 --force.`;case s.WriteFailed:return`\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 ${e.target}: ${e.reason}`;case s.NoFreePort:return`\u041D\u0435 \u043D\u0430\u0448\u043B\u043E\u0441\u044C \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430: ${e.tried} \u043F\u043E\u0434\u0440\u044F\u0434 \u0437\u0430\u043D\u044F\u0442\u044B, \u043D\u0430\u0447\u0438\u043D\u0430\u044F \u0441 ${e.start}. \u041E\u0441\u0432\u043E\u0431\u043E\u0434\u0438 \u043F\u043E\u0440\u0442 \u0438\u043B\u0438 \u0437\u0430\u043A\u0440\u043E\u0439 \u043B\u0438\u0448\u043D\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044B.`;case s.Cancelled:return"\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E"}},tryHelp:e=>`\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435: idem-ui ${e} --help`,variantQuestion:(e,r)=>`\u0412\u044B\u0431\u0435\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 ${L(e,r)}`,componentDescription:e=>{let r=[`\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442: ${e.name}`];return e.description&&r.push(`\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435: ${e.description}`),e.tags&&r.push(`\u0422\u0435\u0433\u0438: ${e.tags.join(", ")}`),r.join(`
|
|
37
|
-
`)},overwriteQuestion:e=>`\u041F\u0430\u043F\u043A\u0430 ${e} \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C?`,pathQuestion:()=>"\u0412 \u043A\u0430\u043A\u0443\u044E \u043F\u0430\u043F\u043A\u0443 \u043F\u043E\u043B\u043E\u0436\u0438\u0442\u044C? (Enter \u2014 \u0442\u0435\u043A\u0443\u0449\u0430\u044F)",chosenVariant:e=>`\u0412\u0430\u0440\u0438\u0430\u043D\u0442: ${e}`,downloading:(e,r)=>`\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u044E ${e}/${r}\u2026`,copied:e=>`\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u0432 ${e}`,note:e=>`
|
|
38
|
-
P.S.
|
|
39
|
-
${e}`,catalogHeader:()=>"\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B:",catalogLine:(e,r)=>{let t=`- (${e}) ${r.name}`;return r.description&&(t+=` \u2014 ${r.description}`),r.tags?.length&&(t+=` [${r.tags.join(", ")}]`),t},componentQuestion:()=>"\u0412\u044B\u0431\u0435\u0440\u0438 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442",catalogChoiceLabel:(e,r)=>`(${e}) ${r.name}`,catalogChoiceHint:e=>{let r=[];return e.description&&r.push(e.description),e.tags?.length&&r.push(`\u0422\u0435\u0433\u0438: ${e.tags.join(", ")}`),r.length>0?r.join(`
|
|
40
|
-
`):void 0},emptyCatalog:()=>"\u0412 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0442 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432",skippedHeader:()=>"\u041F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u044B \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B:",skippedComponent:(e,r)=>{switch(r){case"missing":return`- ${e}: \u043D\u0435\u0442 meta.json.`;case"invalid":return`- ${e}: \u0431\u0438\u0442\u044B\u0439 meta.json.`;case"no-variants":return`- ${e}: \u043D\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432.`}},cliError:(e,r)=>`error [${e}]: ${r}`,internalError:()=>"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u043E\u0448\u0438\u0431\u043A\u0430:"};function me(e){let{catalog:r,picker:t,projectFiles:o,confirmer:n}=e;return async c=>{if(v(c)){console.log(R.forCommand("get"));return}let i=pe(c),a=await r.loadComponent(i.slug);console.log(l.componentDescription(a.meta));let m=await I(a,i.variant,t);console.log(l.chosenVariant(m.label));let p=await U(i.slug,i.path,i.force,process.cwd(),o,n);console.log(l.downloading(i.slug,m.label));let g=await r.loadVariantFiles(i.slug,m.label);await o.writeFiles(p,g),console.log(l.copied(p));let d=a.meta.note?.trim();d&&console.log(l.note(d))}}import{parseArgs as nr}from"util";function le(e){try{nr({args:e,options:{},allowPositionals:!1})}catch(r){let t=r instanceof Error?r.message:String(r);throw new f({code:s.UnknownOption,detail:t,command:"list"})}}import sr from"@inquirer/search";var T=e=>e instanceof Error&&e.name==="ExitPromptError";function ir(e,r){let t=(r??"").trim().toLowerCase();return e.filter(({slug:o,meta:n})=>`${o} ${n.name}`.toLowerCase().includes(t))}async function ge(e){try{return await sr({message:l.componentQuestion(),pageSize:10,source:r=>ir(e,r).map(({slug:t,meta:o})=>({name:l.catalogChoiceLabel(t,o),value:t,description:l.catalogChoiceHint(o)}))})}catch(r){throw T(r)?new y:r}}import ar from"@inquirer/input";async function de(e){try{return await ar({message:l.pathQuestion(),default:e})}catch(r){throw T(r)?new y:r}}function fe(e){let{catalog:r,picker:t,projectFiles:o,confirmer:n}=e;return async c=>{if(v(c)){console.log(R.forCommand("list"));return}le(c);let{components:i,skipped:a}=await r.listComponents();if(a.length>0&&(console.error(l.skippedHeader()),a.forEach(({slug:_,reason:k})=>{console.error(l.skippedComponent(_,k))}),console.error("")),!process.stdout.isTTY){i.length>0&&(console.log(l.catalogHeader()),i.forEach(({slug:_,meta:k})=>{console.log(l.catalogLine(_,k))}));return}if(i.length===0){console.log(l.emptyCatalog());return}let m=await ge(i),p=await r.loadComponent(m),g=await I(p,void 0,t);console.log(l.chosenVariant(g.label));let d=await de(process.cwd()),b=await U(m,d,!1,process.cwd(),o,n);console.log(l.downloading(m,g.label));let w=await r.loadVariantFiles(m,g.label);await o.writeFiles(b,w),console.log(l.copied(b));let $=p.meta.note?.trim();$&&console.log(l.note($))}}function ue(){return e=>{let r=e[0];if(r!==void 0&&R.isCommand(r)){console.log(R.forCommand(r));return}console.log(R.general())}}import{createServer as dr}from"http";import{fileURLToPath as fr}from"url";import ur from"open";import{createServer as cr}from"net";var pr=e=>new Promise((r,t)=>{let o=cr();o.once("error",n=>{if(n.code==="EADDRINUSE"){r(!1);return}t(n)}),o.listen(e,"127.0.0.1",()=>{o.close(()=>r(!0))})});async function he(e,r){for(let t=0;t<r;t++){let o=e+t;if(await pr(o))return o}throw new A({code:s.NoFreePort,start:e,tried:r})}var S={BadRequest:"ERR_BAD_REQUEST",NotFound:"ERR_NOT_FOUND",MethodNotAllowed:"ERR_METHOD_NOT_ALLOWED",Internal:"ERR_INTERNAL"},P=class extends Error{constructor(t,o){super(o);this.code=t;this.name="WebRequestError"}};function G(e){switch(e){case"ERR_STORAGE_UNREACHABLE":case"ERR_STORAGE_TIMEOUT":case"ERR_STORAGE_HTTP":case"ERR_STORAGE_EMPTY_ARCHIVE":return 502;case"ERR_COMPONENT_NOT_FOUND":return 404;case"ERR_BAD_REQUEST":return 400;case"ERR_WRITE_FAILED":return 500;default:return 500}}var h={listeningOn:e=>`\u0421\u0435\u0440\u0432\u0435\u0440 \u043D\u0430 ${e}`,error:e=>{switch(e.code){case"ERR_STORAGE_UNREACHABLE":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 VPN.";case"ERR_STORAGE_TIMEOUT":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u0432\u043E\u0432\u0440\u0435\u043C\u044F.";case"ERR_STORAGE_HTTP":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u043E\u0448\u0438\u0431\u043A\u043E\u0439.";case"ERR_STORAGE_EMPTY_ARCHIVE":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0434\u0430\u043B\u043E \u043F\u0443\u0441\u0442\u043E\u0439 \u0430\u0440\u0445\u0438\u0432.";case"ERR_COMPONENT_NOT_FOUND":return"\u041D\u0435\u0442 \u0442\u0430\u043A\u043E\u0433\u043E \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430.";case"ERR_WRITE_FAILED":return"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u043D\u0430 \u0434\u0438\u0441\u043A.";default:return"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441."}},internalError:()=>"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.",badRequest:()=>"\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441.",notFound:()=>"\u041D\u0435\u0442 \u0442\u0430\u043A\u043E\u0433\u043E \u0440\u043E\u0443\u0442\u0430.",methodNotAllowed:()=>"\u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u044D\u0442\u0438\u043C \u0440\u043E\u0443\u0442\u043E\u043C."};async function Ce(e){let r=[];for await(let o of e)r.push(o);let t=Buffer.concat(r).toString("utf8");try{return JSON.parse(t)}catch{throw new P(S.BadRequest,h.badRequest())}}function C(e,r,t){e.writeHead(r,{"Content-Type":"application/json; charset=utf-8"}),e.end(JSON.stringify(t))}function q(e){return typeof e=="string"&&e.length>0}function Ee(e){return async(r,t)=>{let o=await Ce(r);if(o===null||typeof o!="object")throw new P(S.BadRequest,h.badRequest());let{slug:n,label:c,path:i}=o;if(!q(n)||!q(c)||!q(i))throw new P(S.BadRequest,h.badRequest());let a=H(process.cwd(),i,n),m=await e.catalog.loadVariantFiles(n,c);await e.projectFiles.writeFiles(a,m),C(t,200,{ok:!0,target:a})}}import Q from"path";function ye(e){return e==="node_modules"||e.startsWith(".")}function we(e){return async(r,t)=>{let o=process.cwd(),n=new URL(r.url??"/","http://localhost").searchParams.get("path")??"",c=Q.resolve(o,n),a=(await e.projectFiles.readSubdirs(c,ye)).map(m=>({name:m,path:Q.relative(o,Q.join(c,m))}));C(t,200,{dirs:a})}}var mr=6e4;function Re(e){let r;return async(t,o)=>{(r===void 0||Date.now()-r.at>=mr||lr(t))&&(r={at:Date.now(),listing:e.catalog.listAll()});let n;try{n=await r.listing}catch(c){throw r=void 0,c}C(o,200,n)}}function lr(e){let r=e.headers["cache-control"];return typeof r=="string"&&r.includes("no-cache")}function Se(e,r){if(r instanceof E){C(e,G(r.code),{code:r.code,message:h.error(r.details)});return}if(r instanceof P){C(e,G(r.code),{code:r.code,message:r.message});return}console.error(r),C(e,500,{code:S.Internal,message:h.internalError()})}function be(e){let r=Re({catalog:e.catalog}),t=Ee({catalog:e.catalog,projectFiles:e.projectFiles}),o=we({projectFiles:e.projectFiles}),n={"/api/components":{GET:r},"/api/copy":{POST:t},"/api/dirs":{GET:o}};return async(c,i)=>{let a=new URL(c.url??"/","http://localhost").pathname;if(!a.startsWith("/api"))return!1;try{let m=n[a];if(m===void 0)return C(i,404,{code:S.NotFound,message:h.notFound()}),!0;let p=m[c.method??""];if(p===void 0)return C(i,405,{code:S.MethodNotAllowed,message:h.methodNotAllowed()}),!0;await p(c,i)}catch(m){Se(i,m)}return!0}}import gr from"sirv";var Pe=e=>gr(e,{single:!0});var hr=4321,Cr=3,je="127.0.0.1",Er=fr(new URL("./webapp",import.meta.url)),yr=e=>{ur(e).catch(()=>{})};async function Te(e){let r=await he(hr,Cr),t=be(e),o=Pe(Er),n=dr((i,a)=>{(async()=>await t(i,a)||o(i,a))()});await new Promise(i=>{n.listen(r,je,()=>i())});let c=`http://${je}:${r}`;return console.log(h.listeningOn(c)),yr(c),{port:r}}import{parseArgs as wr}from"util";function Fe(e){try{wr({args:e,options:{},allowPositionals:!1})}catch(r){let t=r instanceof Error?r.message:String(r);throw new f({code:s.UnknownOption,detail:t,command:"web"})}}function ve(e){return async r=>{if(v(r)){console.log(R.forCommand("web"));return}Fe(r),await Te(e)}}import Rr from"@inquirer/confirm";function _e(e=process.stdin.isTTY===!0){return{confirm:async r=>{if(!e)throw new f({code:s.TargetExists,target:r});let t;try{t=await Rr({message:l.overwriteQuestion(r),default:!1})}catch(o){throw T(o)?new y:o}if(!t)throw new y}}}import Sr from"@inquirer/select";function ke(e=process.stdin.isTTY===!0){return{pick:async(r,t,o)=>{if(!e)throw new f({code:s.VariantRequired,slug:r,name:t,available:o.map(n=>n.label)});try{return await Sr({message:l.variantQuestion(r,t),choices:o.map(n=>{let{label:c}=n;return{name:c,value:n}})})}catch(n){throw T(n)?new y:n}}}}try{let e=z(ie(re())),r=ke(),t=J(),o=_e(),n=me({catalog:e,picker:r,projectFiles:t,confirmer:o}),c=fe({catalog:e,picker:r,projectFiles:t,confirmer:o}),i=ue(),a=ve({catalog:e,projectFiles:t}),{command:m,rest:p}=ae(process.argv.slice(2));switch(m){case void 0:case"help":case"--help":case"-h":i(p);break;case"get":await n(p);break;case"list":await c(p);break;case"web":await a(p);break;default:throw new f({code:s.UnknownCommand,got:m})}}catch(e){e instanceof E&&(console.error(l.cliError(e.code,l.error(e.details))),"command"in e.details&&console.error(l.tryHelp(e.details.command)),process.exit(e.exitCode)),console.error(l.internalError()),console.error(e),process.exit(1)}
|
|
51
|
+
`))}}import{createServer as bt}from"http";import{fileURLToPath as jt}from"url";import Pt from"open";import{createServer as wt}from"net";var yt=e=>new Promise((t,r)=>{let o=wt();o.once("error",n=>{if(n.code==="EADDRINUSE"){t(!1);return}r(n)}),o.listen(e,"127.0.0.1",()=>{o.close(()=>t(!0))})});async function je(e,t){for(let r=0;r<t;r++){let o=e+r;if(await yt(o))return o}throw new N({code:c.NoFreePort,start:e,tried:t})}var P={BadRequest:"ERR_BAD_REQUEST",NotFound:"ERR_NOT_FOUND",MethodNotAllowed:"ERR_METHOD_NOT_ALLOWED",Internal:"ERR_INTERNAL"},F=class extends Error{constructor(r,o){super(o);this.code=r;this.name="WebRequestError"}};function W(e){switch(e){case"ERR_STORAGE_UNREACHABLE":case"ERR_STORAGE_TIMEOUT":case"ERR_STORAGE_HTTP":case"ERR_STORAGE_EMPTY_ARCHIVE":return 502;case"ERR_COMPONENT_NOT_FOUND":return 404;case"ERR_BAD_REQUEST":return 400;case"ERR_WRITE_FAILED":return 500;default:return 500}}var y={listeningOn:e=>`\u0421\u0435\u0440\u0432\u0435\u0440 \u043D\u0430 ${e}`,error:e=>{switch(e.code){case"ERR_STORAGE_UNREACHABLE":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E. \u041F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 VPN.";case"ERR_STORAGE_TIMEOUT":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043D\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u0432\u043E\u0432\u0440\u0435\u043C\u044F.";case"ERR_STORAGE_HTTP":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0432\u0435\u0442\u0438\u043B\u043E \u043E\u0448\u0438\u0431\u043A\u043E\u0439.";case"ERR_STORAGE_EMPTY_ARCHIVE":return"\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043E\u0442\u0434\u0430\u043B\u043E \u043F\u0443\u0441\u0442\u043E\u0439 \u0430\u0440\u0445\u0438\u0432.";case"ERR_COMPONENT_NOT_FOUND":return"\u041D\u0435\u0442 \u0442\u0430\u043A\u043E\u0433\u043E \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430.";case"ERR_WRITE_FAILED":return"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u043D\u0430 \u0434\u0438\u0441\u043A.";default:return"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441."}},internalError:()=>"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.",badRequest:()=>"\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441.",notFound:()=>"\u041D\u0435\u0442 \u0442\u0430\u043A\u043E\u0433\u043E \u0440\u043E\u0443\u0442\u0430.",methodNotAllowed:()=>"\u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u044D\u0442\u0438\u043C \u0440\u043E\u0443\u0442\u043E\u043C."};async function Pe(e){let t=[];for await(let o of e)t.push(o);let r=Buffer.concat(t).toString("utf8");try{return JSON.parse(r)}catch{throw new F(P.BadRequest,y.badRequest())}}function E(e,t,r){e.writeHead(t,{"Content-Type":"application/json; charset=utf-8"}),e.end(JSON.stringify(r))}function Q(e){return typeof e=="string"&&e.length>0}function Fe(e){return async(t,r)=>{let o=await Pe(t);if(o===null||typeof o!="object")throw new F(P.BadRequest,y.badRequest());let{slug:n,label:i,path:s}=o;if(!Q(n)||!Q(i)||!Q(s))throw new F(P.BadRequest,y.badRequest());let p=G(process.cwd(),s,n),a=await e.catalog.loadVariantFiles(n,i);await e.projectFiles.writeFiles(p,a),E(r,200,{ok:!0,target:p})}}import J from"path";function Te(e){return e==="node_modules"||e.startsWith(".")}function ve(e){return async(t,r)=>{let o=process.cwd(),n=new URL(t.url??"/","http://localhost").searchParams.get("path")??"",i=J.resolve(o,n),p=(await e.projectFiles.readSubdirs(i,Te)).map(a=>({name:a,path:J.relative(o,J.join(i,a))}));E(r,200,{dirs:p})}}var Et=6e4;function ke(e){let t;return async(r,o)=>{(t===void 0||Date.now()-t.at>=Et||Rt(r))&&(t={at:Date.now(),listing:e.catalog.listAll()});let n;try{n=await t.listing}catch(i){throw t=void 0,i}E(o,200,n)}}function Rt(e){let t=e.headers["cache-control"];return typeof t=="string"&&t.includes("no-cache")}function $e(e,t){if(t instanceof S){E(e,W(t.code),{code:t.code,message:y.error(t.details)});return}if(t instanceof F){E(e,W(t.code),{code:t.code,message:t.message});return}console.error(t),E(e,500,{code:P.Internal,message:y.internalError()})}function _e(e){let t=ke({catalog:e.catalog}),r=Fe({catalog:e.catalog,projectFiles:e.projectFiles}),o=ve({projectFiles:e.projectFiles}),n={"/api/components":{GET:t},"/api/copy":{POST:r},"/api/dirs":{GET:o}};return async(i,s)=>{let p=new URL(i.url??"/","http://localhost").pathname;if(!p.startsWith("/api"))return!1;try{let a=n[p];if(a===void 0)return E(s,404,{code:P.NotFound,message:y.notFound()}),!0;let g=a[i.method??""];if(g===void 0)return E(s,405,{code:P.MethodNotAllowed,message:y.methodNotAllowed()}),!0;await g(i,s)}catch(a){$e(s,a)}return!0}}import St from"sirv";var xe=e=>St(e,{single:!0});var Ft=4321,Tt=3,Ae="127.0.0.1",vt=jt(new URL("./webapp",import.meta.url)),kt=e=>{Pt(e).catch(()=>{})};async function Oe(e){let t=await je(Ft,Tt),r=_e(e),o=xe(vt),n=bt((s,p)=>{(async()=>await r(s,p)||o(s,p))()});await new Promise(s=>{n.listen(t,Ae,()=>s())});let i=`http://${Ae}:${t}`;return console.log(y.listeningOn(i)),kt(i),{port:t}}import{parseArgs as $t}from"util";function Ne(e){try{$t({args:e,options:{},allowPositionals:!1})}catch(t){let r=t instanceof Error?t.message:String(t);throw new h({code:c.UnknownOption,detail:r,command:"web"})}}function Ie(e){return async t=>{if(v(t)){console.log(b.forCommand("web"));return}Ne(t),await Oe(e)}}import _t from"@inquirer/confirm";function Me(e=process.stdin.isTTY===!0){return{confirm:async t=>{if(!e)throw new h({code:c.TargetExists,targets:t});for(let r of t){let o;try{o=await _t({message:f.overwriteQuestion(r),default:!1})}catch(n){throw k(n)?new j:n}if(!o)throw new j}}}}import xt from"@inquirer/select";function Ue(e=process.stdin.isTTY===!0){return{pick:async(t,r,o)=>{if(!e)throw new h({code:c.VariantRequired,slug:t,name:r,available:o.map(n=>n.label)});try{return await xt({message:f.variantQuestion(t,r),choices:o.map(n=>{let{label:i}=n;return{name:i,value:n}})})}catch(n){throw k(n)?new j:n}}}}try{let e=te(pe(ne())),t=Ue(),r=K(),o=Me(),n=ue({catalog:e,picker:t,projectFiles:r,confirmer:o}),i=ye({catalog:e,picker:t,projectFiles:r,confirmer:o}),s=Ee(),p=be({catalog:e}),a=Ie({catalog:e,projectFiles:r}),{command:g,rest:m}=me(process.argv.slice(2));switch(g){case void 0:case"help":case"--help":case"-h":s(m);break;case"get":await n(m);break;case"list":await i(m);break;case"info":await p(m);break;case"web":await a(m);break;default:throw new h({code:c.UnknownCommand,got:g})}}catch(e){if(e instanceof S){console.error(f.cliError(e.code,f.error(e.details)));let t=e instanceof h?e.hint:void 0;!t&&"command"in e.details&&(t={kind:"help",command:e.details.command}),t&&console.error(f.usageHint(t)),process.exit(e.exitCode)}console.error(f.internalError()),console.error(e),process.exit(1)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idem.agency/idem-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "CLI-копировальщик компонентов из хранилища idem",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "idem.agency",
|
|
@@ -51,5 +51,6 @@
|
|
|
51
51
|
"typescript": "5.9.3",
|
|
52
52
|
"vite": "^7.3.1",
|
|
53
53
|
"vitest": "4.0.17"
|
|
54
|
-
}
|
|
54
|
+
},
|
|
55
|
+
"gitHead": "668851f73ddabfec81c9c3d2cba50dae1fb3de45"
|
|
55
56
|
}
|