@seed-design/cli 1.3.1 → 1.3.3

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/bin/index.mjs CHANGED
@@ -1,30 +1,30 @@
1
1
  #!/usr/bin/env node
2
- import*as se from"@clack/prompts";import{cosmiconfig as ut}from"cosmiconfig";import{z as oe}from"zod";import*as Y from"@clack/prompts";import{ZodError as dt}from"zod";import lt from"picocolors";var a=e=>lt.cyan(e);var I=class extends Error{hint;details;constructor({message:t,hint:s,details:n=[],cause:o}){super(t,{cause:o}),this.name="CliError",this.hint=s,this.details=n}},E=class extends Error{constructor(t="\uC791\uC5C5\uC774 \uCDE8\uC18C\uB410\uC5B4\uC694."){super(t),this.name="CliCancelError"}};function L(e){return e instanceof E}function K(e){return!e||typeof e!="object"||!("verbose"in e)?!1:e.verbose===!0}function mt(e,t){if(e instanceof I)return{reason:e.message,hint:e.hint??t,details:e.details,stack:gt(e.cause??e)};if(e instanceof dt){let s=e.issues.map(n=>`${n.path.join(".")||"(root)"}: ${n.message}`);return{reason:"\uC785\uB825\uAC12 \uB610\uB294 \uC124\uC815 \uD30C\uC77C \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:t,details:s,stack:e.stack}}if(e instanceof Error){let s=e,n=[];return(s.escapedCommand||s.command)&&n.push(`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${s.escapedCommand??s.command}`),typeof s.exitCode=="number"&&n.push(`\uC885\uB8CC \uCF54\uB4DC: ${s.exitCode}`),s.stderr?.trim()?n.push(`stderr: ${s.stderr.trim()}`):s.stdout?.trim()&&n.push(`stdout: ${s.stdout.trim()}`),{reason:s.shortMessage??e.message,hint:t,details:n,stack:e.stack}}return typeof e=="string"?{reason:e,hint:t,details:[]}:{reason:"\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694.",hint:t,details:[]}}function gt(e){if(e instanceof Error)return e.stack}function O(e,{defaultMessage:t,defaultHint:s,verbose:n=!1}){let o=mt(e,s);Y.log.error(t),Y.log.error(`\uC6D0\uC778: ${o.reason}`);for(let r of o.details)Y.log.info(r);o.hint&&Y.log.info(`\uD574\uACB0 \uD78C\uD2B8: ${o.hint}`),n&&o.stack&&(Y.log.message(a(`
3
- [verbose] stack trace`)),Y.log.message(o.stack)),Y.outro(a("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as Q from"@clack/prompts";import ft from"fs-extra";import je from"path";var q={rsc:!1,tsx:!0,path:"./seed-design",telemetry:!0};async function Te(){return await Q.group({tsx:()=>Q.confirm({message:`${a("TypeScript")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:q.tsx}),rsc:()=>Q.confirm({message:`${a("React Server Components")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:q.rsc}),path:()=>Q.text({message:`${a("seed-design \uD3F4\uB354")} \uACBD\uB85C\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694. (\uAE30\uBCF8\uAC12\uC740 \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uC5D0 \uC0DD\uC131\uB429\uB2C8\uB2E4.)`,initialValue:q.path,defaultValue:q.path,placeholder:q.path}),telemetry:()=>Q.confirm({message:`\uAC1C\uC120\uC744 \uC704\uD574 ${a("\uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130")}\uB97C \uC218\uC9D1\uD560\uAE4C\uC694?`,initialValue:q.telemetry})},{onCancel:()=>{throw new E}})}async function he({cwd:e,config:t}){let s=je.resolve(e,"seed-design.json");return await ft.writeFile(s,`${JSON.stringify(t,null,2)}
4
- `,"utf-8"),{relativePath:je.relative(process.cwd(),s),targetPath:s}}var De="seed-design",ht=ut(De,{searchPlaces:[`${De}.json`]}),Ae=oe.object({$schema:oe.string().optional(),rsc:oe.coerce.boolean().default(!1),tsx:oe.coerce.boolean().default(!0),path:oe.string(),telemetry:oe.coerce.boolean().optional().default(!0)}).strict();async function ye(e){let t=await ge(e);if(t)return t;se.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let s=await se.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(se.isCancel(s)||!s)throw new E;try{return await he({cwd:e,config:q}),se.log.message("seed-design.json \uD30C\uC77C\uC774 \uC0DD\uC131\uB410\uC5B4\uC694."),Ae.parse(q)}catch(n){throw new I({message:"seed-design.json \uD30C\uC77C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB514\uB809\uD1A0\uB9AC \uC4F0\uAE30 \uAD8C\uD55C\uACFC \uACBD\uB85C\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uBCF4\uC138\uC694.",cause:n})}}async function ge(e){let t=await ht.search(e);if(!t||t.isEmpty)return null;try{return Ae.parse(t.config)}catch(s){throw new I({message:"seed-design.json \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:"https://seed-design.com/react/getting-started/cli/configuration \uBB38\uC11C\uB97C \uCC38\uACE0\uD574 \uC8FC\uC138\uC694.",cause:s})}}function we({selectedItemKeys:e,publicRegistries:t}){let s=[],n=new Set;function o(r,i){let c=s.find(m=>m.registryId===r);if(!c?.items.some(m=>m.id===i.id)){if(c?c.items.push(i):s.push({registryId:r,items:[i]}),i.dependencies?.length)for(let m of i.dependencies)n.add(m);if(i.innerDependencies?.length)for(let m of i.innerDependencies)for(let p of m.itemIds){let y=t.find(h=>h.id===m.registryId)?.items.find(h=>h.id===p);if(!y)throw new Error(`Cannot find dependency item: ${m.registryId}:${p}`);o(m.registryId,y)}}}for(let r of e){let[i,...c]=r.split(":"),m=c.join(":");if(!i||!m)throw new Error(`Invalid snippet format: "${r}"`);let p=t.find(y=>y.id===i)?.items.find(y=>y.id===m);if(!p)throw new Error(`Cannot find snippet: "${r}"`);o(i,p)}return{registryItemsToAdd:s,npmDependenciesToAdd:n}}import*as Ee from"@clack/prompts";import{z as u}from"zod";var Se=u.object({id:u.string(),description:u.string().optional(),deprecated:u.boolean().optional(),hideFromCLICatalog:u.boolean().optional(),dependencies:u.array(u.string()).optional(),innerDependencies:u.array(u.object({registryId:u.string(),itemIds:u.array(u.string())})).optional(),snippets:u.array(u.object({path:u.string(),dependencies:u.record(u.string(),u.string()).optional(),content:u.string()}))}),Re=u.object({id:u.string(),hideFromCLICatalog:u.boolean().optional(),items:u.array(Se.omit({snippets:!0}).extend({snippets:u.array(u.object({path:u.string(),dependencies:u.record(u.string(),u.string()).optional()}))}))}),_e=u.array(u.object({id:u.string()})),yt=u.object({label:u.string(),path:u.string()}),wt=u.object({id:u.string(),title:u.string(),description:u.string().optional(),docUrl:u.string(),deprecated:u.boolean().optional(),snippetKey:u.string().optional(),snippets:u.array(yt).optional()}),bt=u.object({id:u.string(),label:u.string(),items:u.array(wt)}),$t=u.object({id:u.string(),label:u.string(),sections:u.array(bt)}),Oe=u.object({categories:u.array($t)});var Ct=1e4;async function Ue(e,t=Ct){let s=new AbortController,n=setTimeout(()=>s.abort(),t);try{return await fetch(e,{signal:s.signal})}catch(o){throw o instanceof Error&&o.name==="AbortError"?new I({message:`\uC694\uCCAD \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC5B4\uC694 (${t}ms): ${e}`,hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694."}):o}finally{clearTimeout(n)}}async function Me({baseUrl:e}){let t=await fetch(`${e}/__docs__/index.json`);if(!t.ok)throw new I({message:`\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${t.status} ${t.statusText}`});let s=await t.json(),{success:n,data:o,error:r}=Oe.safeParse(s);if(!n)throw new I({message:`\uBB38\uC11C \uBAA9\uB85D \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694: ${r?.message}`});return o}async function ne({baseUrl:e}){let t=await fetch(`${e}/__registry__/index.json`);if(!t.ok)throw new Error(`Failed to fetch registries: ${t.status} ${t.statusText}`);let s=await t.json(),{success:n,data:o,error:r}=_e.safeParse(s);if(!n)throw new Error(`Failed to parse registries: ${r?.message}`);return o}async function ae({baseUrl:e,registryId:t}){let s=await fetch(`${e}/__registry__/${t}/index.json`);if(!s.ok)throw new Error(`Failed to fetch ${t} registry: ${s.status} ${s.statusText}`);let n=await s.json(),{success:o,data:r,error:i}=Re.safeParse(n);if(!o)throw new Error(`Failed to parse ${t} registry: ${i?.message}`);return r}async function It({baseUrl:e,registryId:t,registryItemId:s}){let n=await fetch(`${e}/__registry__/${t}/${s}.json`);if(!n.ok)throw new Error(`Failed to fetch ${s}: ${n.status} ${n.statusText}`);let o=await n.json(),{success:r,data:i,error:c}=Se.safeParse(o);if(!r)throw new Error(`Failed to parse ${s}: ${c?.message}`);return i}async function Ve(e){let t=await Ue(`https://registry.npmjs.org/${e}/latest`);if(!t.ok)throw new I({message:`${e}\uC758 \uCD5C\uC2E0 \uBC84\uC804\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${t.status} ${t.statusText}`});let s=await t.json();if(!s||typeof s!="object"||typeof s.version!="string")throw new I({message:`${e} \uCD5C\uC2E0 \uBC84\uC804 \uC751\uB2F5 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.`});return s.version}async function Le({baseUrl:e,packageSlug:t,version:s}){let n=`${e}/llms/react/updates/changelog/${t}/${encodeURIComponent(s)}.txt`,o=await Ue(n);if(!o.ok)throw new I({message:`\uBCC0\uACBD\uC0AC\uD56D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${o.status} ${o.statusText}`,hint:`${n} \uC5D0 \uC811\uADFC\uD560 \uC218 \uC788\uB294\uC9C0 \uD655\uC778\uD574\uC8FC\uC138\uC694.`});return o.text()}async function Ke({baseUrl:e,registryId:t,registryItemIds:s}){return await Promise.all(s.map(async n=>{try{return await It({baseUrl:e,registryId:t,registryItemId:n})}catch(o){let r=await fetch(`${e}/__registry__/${t}/index.json`);if(!r.ok)throw new Error(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${r.status} ${r.statusText}`);let i=await r.json(),{success:c,data:m}=Re.safeParse(i);throw c?(Ee.log.error(`${n} \uC2A4\uB2C8\uD3AB\uC774 ${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC5C6\uC5B4\uC694.`),Ee.log.info(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC874\uC7AC\uD558\uB294 \uC2A4\uB2C8\uD3AB:
5
- ${m.items.map(p=>p.id).join(`
6
- `)}`),o):new Error(`Failed to parse registry index for ${t}`)}}))}import{promises as Et}from"fs";import{tmpdir as vt}from"os";import Fe from"path";import{transformFromAstSync as xt}from"@babel/core";import Pt from"@babel/plugin-transform-typescript";import*as be from"recast";import{parse as kt}from"@babel/parser";var St={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Ne=async({sourceFile:e,config:t})=>{let s=e.getFullText();if(t.tsx)return s;let n=be.parse(s,{parser:{parse:r=>kt(r,St)}}),o=xt(n,s,{cloneInputAst:!1,code:!1,ast:!0,plugins:[Pt],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return be.print(o.ast).code};import{SyntaxKind as Rt}from"ts-morph";var ze=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let s=e.getFirstChildByKind(Rt.ExpressionStatement);if(!s)return e;let n=s.getExpression();if(!n)return e;let o=n.getText().trim();if(o!=='"use client"'&&o!=="'use client'")return e;let r=s.getText(),i=s.getFullText();if(r.trim()===i.trim())return e;let m=i.replace(r,"").replace(/^\s*\n/,"").replace(/\n\s*$/,"");return s.replaceWithText(m),e};import{Project as jt,ScriptKind as Tt}from"ts-morph";var Dt=[ze],At=new jt({compilerOptions:{}});async function _t(e){let t=await Et.mkdtemp(Fe.join(vt(),"seed-design-"));return Fe.join(t,e)}async function qe(e){let t=await _t(e.filename),s=At.createSourceFile(t,e.raw,{scriptKind:Tt.TSX});for(let n of Dt)n({sourceFile:s,...e});return await Ne({sourceFile:s,...e})}import*as B from"@clack/prompts";import ce from"fs-extra";import G from"path";import{createPatch as Ot}from"diff";import Ut from"@npmcli/disparity-colors";async function $e({registryItemsToAdd:e,rootPath:t,cwd:s,baseUrl:n,config:o,onDiff:r}){let i=[];for(let{registryId:c,items:m}of e){let p=G.join(t,c);ce.ensureDirSync(p);let y=await Ke({baseUrl:n,registryId:c,registryItemIds:m.map(h=>h.id)});for(let{id:h,snippets:w}of y){let R=await Promise.all(w.map(async d=>{let g=await qe({filename:d.path,config:o,raw:d.content}),$=G.join(p,d.path);return o.tsx||($=$.replace(/\.tsx$/,".jsx"),$=$.replace(/\.ts$/,".js")),{filePath:$,content:g,relativePath:G.relative(s,$),name:`${c}:${h}`}})),f=[];for(let d of R){let{filePath:g,content:$,relativePath:P}=d;if(await ce.ensureDir(G.dirname(g)),ce.existsSync(g)){let C=await ce.readFile(g,"utf-8");if(C===$){B.log.info(`${a(P)}: \uC774\uBBF8 \uCD5C\uC2E0 \uC0C1\uD0DC\uC608\uC694.`);continue}let x=G.basename(g),k=G.extname(g),_=G.basename(g,k),X=Date.now(),S=`legacy-${_}-${X}${k}`,l=await(async()=>{if(r)return r;let b=Ot(P,C,$),A=Ut(b);return B.log.message(`
7
- ${a(P)}: \uD604\uC7AC \uD30C\uC77C\uACFC \uBC1B\uC73C\uB824\uB294 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC774 \uB2EC\uB77C\uC694.
8
- `),B.log.message(A),B.select({message:"\uD604\uC7AC \uD30C\uC77C\uC5D0 \uC2A4\uD0C0\uC77C \uBCC0\uACBD, \uB85C\uAE45 \uB4F1 \uCEE4\uC2A4\uD130\uB9C8\uC774\uC9D5\uC774 \uC801\uC6A9\uB418\uC5B4 \uC788\uB294 \uACBD\uC6B0 \uC2E0\uADDC \uD30C\uC77C\uC5D0 \uB3D9\uC77C\uD55C \uCEE4\uC2A4\uD130\uB9C8\uC774\uC9D5\uC744 \uC801\uC6A9\uD558\uB294 \uAC83\uC744 \uAC80\uD1A0\uD574\uBCF4\uC138\uC694.",options:[{value:"overwrite",label:`${x} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${S}\uC73C\uB85C \uC62E\uAE30\uACE0 ${x} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(B.isCancel(l)||l==="skip"){B.log.info(`${a(P)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(l==="backup"){let b=G.dirname(g),A=G.join(b,S);await ce.rename(g,A),B.log.info(`${a(P)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${a(G.relative(s,A))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await ce.writeFile(g,$),f.push(d)}if(f.length>0){let d=f.map(({name:g,relativePath:$})=>({name:g,path:$}));i.push(...d),B.log.success(`${a(`${c}:${h}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${a(d.map(g=>g.path).join(", "))}`)}}}}import*as v from"@clack/prompts";import os from"path";import{z as ie}from"zod";var N="https://seed-design.io";import*as He from"@clack/prompts";import{execa as zt}from"execa";import{detect as Mt}from"@antfu/ni";async function Be(e){let t=await Mt({programmatic:!0,cwd:e});return t==="yarn@berry"?"yarn":t==="pnpm@6"?"pnpm":t==="bun"?"bun":t==="deno"?"deno":t??"npm"}import Vt from"findup-sync";import Lt from"fs-extra";var Kt="package.json";function Nt(e=process.cwd()){let t=Vt(Kt,{cwd:e});if(!t)throw new Error("No package.json file found in the project.");return t}function Z(e=process.cwd()){let t=Nt(e);return Lt.readJSONSync(t)}async function Ce({cwd:e,deps:t,dev:s=!1}){let{start:n,stop:o}=He.spinner(),r=await Be(e),c={...Z(e).dependencies},m=new Set(t.filter(f=>!c[f])),p=new Set(t.filter(f=>c[f]));if(!m.size)return{installed:new Set,filtered:m};n("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let w=[r==="npm"?"install":"add",s?"-D":null,...m].filter(Boolean),R=`${r} ${w.join(" ")}`;try{await zt(r,w,{cwd:e})}catch(f){throw o("\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."),new I({message:"\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0, \uC124\uCE58 \uBA85\uB839\uC5B4\uB97C \uC9C1\uC811 \uC2E4\uD589\uD574 \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",details:[`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${R}`],cause:f})}return o("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:m,filtered:p}}import{randomUUID as Ft}from"node:crypto";import*as We from"@clack/prompts";var qt="seed_cli";async function Bt(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await ge(e))?.telemetry===!1)return!1}catch{}return!0}function Ht(){return Ft()}var Gt=Ht(),Ge=!1;async function Wt(e,{event:t,properties:s={}}){if(!await Bt(e))return;let o=`${qt}.${t}`;Ge||(We.log.info("\u{1F4CA} \uC0AC\uC6A9 \uB370\uC774\uD130 \uC218\uC9D1 \uC911 (\uBE44\uD65C\uC131\uD654: seed-design.json \uB610\uB294 DISABLE_TELEMETRY \uD658\uACBD \uBCC0\uC218)"),Ge=!0);try{let r="https://us.i.posthog.com/capture",i={"Content-Type":"application/json"},c={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:o,distinct_id:Gt,properties:{...s,$process_person_profile:!1},timestamp:new Date().toISOString()},m=new AbortController,p=setTimeout(()=>m.abort(),5e3);try{await fetch(r,{method:"POST",headers:i,body:JSON.stringify(c),signal:m.signal})}finally{clearTimeout(p)}}catch{}}var U={track:Wt};import*as re from"@clack/prompts";import Jt from"fs-extra";import Yt from"path";import{intersects as Xt,satisfies as Qt,valid as Ye,validRange as Xe}from"semver";var fe=["@seed-design/react","@seed-design/css"],Je="workspace:",Zt="npm:";function pe(e){try{let t=Z(e),s={...t.dependencies,...t.devDependencies,...t.peerDependencies,...t.optionalDependencies},n={};for(let o of fe){let r=s[o];typeof r=="string"&&(n[o]=r)}return n}catch{return{}}}function le({publicRegistries:e,itemKeys:t,projectPackageVersions:s}){let n=Array.from(new Set(t)),o=new Map(e.flatMap(i=>i.items.map(c=>[`${i.id}:${c.id}`,c]))),r=[];for(let i of n){let c=o.get(i);if(!c)continue;let m=es(c);for(let p of fe){let y=Array.from(m[p]??[]);if(!y.length)continue;let h=s[p];if(!h){r.push({itemKey:i,packageName:p,requiredRanges:y,type:"missing-package"});continue}let w=ts(h);if(!w){r.push({itemKey:i,packageName:p,requiredRanges:y,installedVersionSpec:h,type:"invalid-version-spec"});continue}y.every(f=>ss({currentVersionSpec:w,requiredRange:f}))||r.push({itemKey:i,packageName:p,requiredRanges:y,installedVersionSpec:h,type:"incompatible-version"})}}return{checkedItemKeys:n,projectPackageVersions:s,issues:r}}function de({report:e,title:t}){if(!e.issues.length)return;re.log.warn(t),re.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${fe.map(n=>`${n}@${a(e.projectPackageVersions[n]??"\uBBF8\uC124\uCE58")}`).join(", ")}`);let s=new Map;for(let n of e.issues){let o=s.get(n.itemKey)??[];o.push(n),s.set(n.itemKey,o)}for(let[n,o]of s.entries()){re.log.warn(a(n));for(let r of o){let i=r.requiredRanges.join(" | ");if(r.type==="missing-package"){re.log.info(` - ${r.packageName}: \uD328\uD0A4\uC9C0\uAC00 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694. \uD544\uC694 \uBC94\uC704: ${i}`);continue}if(r.type==="invalid-version-spec"){re.log.info(` - ${r.packageName}: \uD604\uC7AC \uBC84\uC804 \uD615\uC2DD\uC744 \uD574\uC11D\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694 (${r.installedVersionSpec}). \uD544\uC694 \uBC94\uC704: ${i}`);continue}re.log.info(` - ${r.packageName}: \uD604\uC7AC ${r.installedVersionSpec}, \uD544\uC694 \uBC94\uC704 ${i}`)}}}function Qe({publicRegistries:e,rootPath:t}){let s=[];for(let n of e)for(let o of n.items)o.snippets.some(i=>rs(i.path).some(c=>Jt.existsSync(Yt.join(t,n.id,c))))&&s.push(`${n.id}:${o.id}`);return s}function es(e){let t=Object.fromEntries(fe.map(s=>[s,new Set]));for(let s of e.snippets)for(let[n,o]of Object.entries(s.dependencies??{}))is(n)&&t[n].add(o);return t}function ts(e){let t=e.trim();if(t.startsWith(Je)&&(t=t.slice(Je.length).trim()),t.startsWith(Zt)){let s=t.split("@").at(-1);if(!s)return null;t=s}return!t||t==="*"?null:Ye(t)||Xe(t)?t:null}function ss({currentVersionSpec:e,requiredRange:t}){let s=Xe(t);return s?Ye(e)?Qt(e,s,{includePrerelease:!0}):Xt(e,s,{includePrerelease:!0}):!1}function rs(e){let t=new Set([e]);return e.endsWith(".tsx")&&t.add(`${e.slice(0,-4)}.jsx`),e.endsWith(".ts")&&t.add(`${e.slice(0,-3)}.js`),e.endsWith(".jsx")&&t.add(`${e.slice(0,-4)}.tsx`),e.endsWith(".js")&&t.add(`${e.slice(0,-3)}.ts`),Array.from(t)}function is(e){return fe.includes(e)}var ns=ie.object({itemIds:ie.array(ie.string()).optional(),all:ie.boolean(),cwd:ie.string(),baseUrl:ie.string().optional(),onDiff:ie.enum(["overwrite","backup"]).optional()}),Ze=e=>{e.command("add [...item-ids]","add items").option("-a, --all","[Deprecated] Add all items",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:N}).option("--on-diff <mode>","Action when file differs: overwrite or backup").example("seed-design add ui:action-button").example("seed-design add ui:alert-dialog").action(async(t,s)=>{let n=Date.now(),o=K(s);v.intro("seed-design add");try{let r=ns.safeParse({itemIds:t,...s});if(!r.success)throw r.error;let{data:{all:i,...c}}=r;if(i)throw new I({message:"`--all` \uC635\uC158\uC740 \uB354 \uC774\uC0C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC544\uC694. \uB300\uC2E0 `seed-design add-all` \uBA85\uB839\uC5B4\uB97C \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694."});let m=c.cwd,p=c.baseUrl,y=await ye(m),h=os.resolve(m,y.path),{start:w,stop:R}=v.spinner();w("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let f=await(async()=>{try{let l=await Promise.all((await ne({baseUrl:p})).map(async({id:b})=>ae({baseUrl:p,registryId:b})));return R("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),l}catch(l){throw R("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),l}})(),d=await(async()=>{if(c.itemIds?.length)return c.itemIds;let l=await v.multiselect({message:"\uCD94\uAC00\uD560 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:f.filter(({hideFromCLICatalog:b})=>!b).flatMap(({id:b,items:A})=>A.filter(({hideFromCLICatalog:F})=>!F).sort((F,V)=>F.id.localeCompare(V.id)).map(({id:F,description:V,deprecated:J})=>({label:`${J?"(deprecated) ":""}${a(b)}:${F}`,value:`${b}:${F}`,hint:V,deprecated:J,registryItemCount:A.length}))).sort((b,A)=>b.deprecated!==A.deprecated?b.deprecated?1:-1:A.registryItemCount-b.registryItemCount)});if(v.isCancel(l))throw new E;return l})();if(!d?.length)throw new E("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694.");v.log.message(`\uC120\uD0DD\uB41C \uD56D\uBAA9: ${a(d.join(", "))}`);let g=[];for(let l of d){let[b,...A]=l.split(":"),F=A.join(":");if(!b||!F)throw new I({message:`${a(l)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${a("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let V=f.find(J=>J.id===b)?.items.find(J=>J.id===F);if(!V)throw new I({message:`${a(l)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(V.deprecated){let J=await v.confirm({message:`${a(V.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(v.isCancel(J))throw new E;if(J===!1){v.log.info(`${a(V.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}g.push(l)}let{registryItemsToAdd:$,npmDependenciesToAdd:P}=we({selectedItemKeys:g,publicRegistries:f}),C=le({publicRegistries:f,itemKeys:$.flatMap(({registryId:l,items:b})=>b.map(A=>`${l}:${A.id}`)),projectPackageVersions:pe(c.cwd)});de({report:C,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),v.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${a($.map(l=>l.items.map(b=>`${l.registryId}:${b.id}`).join(", ")).join(", ")||"\uC5C6\uC74C")}
2
+ import*as te from"@clack/prompts";import{cosmiconfig as dt}from"cosmiconfig";import{z as oe}from"zod";import*as Y from"@clack/prompts";import{ZodError as ct}from"zod";import at from"picocolors";var p=e=>at.cyan(e);var I=class extends Error{hint;details;constructor({message:t,hint:r,details:n=[],cause:o}){super(t,{cause:o}),this.name="CliError",this.hint=r,this.details=n}},_=class extends Error{constructor(t="\uC791\uC5C5\uC774 \uCDE8\uC18C\uB410\uC5B4\uC694."){super(t),this.name="CliCancelError"}};function K(e){return e instanceof _}function B(e){return!e||typeof e!="object"||!("verbose"in e)?!1:e.verbose===!0}function lt(e,t){if(e instanceof I)return{reason:e.message,hint:e.hint??t,details:e.details,stack:pt(e.cause??e)};if(e instanceof ct){let r=e.issues.map(n=>`${n.path.join(".")||"(root)"}: ${n.message}`);return{reason:"\uC785\uB825\uAC12 \uB610\uB294 \uC124\uC815 \uD30C\uC77C \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:t,details:r,stack:e.stack}}if(e instanceof Error){let r=e,n=[];return(r.escapedCommand||r.command)&&n.push(`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${r.escapedCommand??r.command}`),typeof r.exitCode=="number"&&n.push(`\uC885\uB8CC \uCF54\uB4DC: ${r.exitCode}`),r.stderr?.trim()?n.push(`stderr: ${r.stderr.trim()}`):r.stdout?.trim()&&n.push(`stdout: ${r.stdout.trim()}`),{reason:r.shortMessage??e.message,hint:t,details:n,stack:e.stack}}return typeof e=="string"?{reason:e,hint:t,details:[]}:{reason:"\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694.",hint:t,details:[]}}function pt(e){if(e instanceof Error)return e.stack}function H(e,{defaultMessage:t,defaultHint:r,verbose:n=!1}){let o=lt(e,r);Y.log.error(t),Y.log.error(`\uC6D0\uC778: ${o.reason}`);for(let s of o.details)Y.log.info(s);o.hint&&Y.log.info(`\uD574\uACB0 \uD78C\uD2B8: ${o.hint}`),n&&o.stack&&(Y.log.message(p(`
3
+ [verbose] stack trace`)),Y.log.message(o.stack)),Y.outro(p("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as Q from"@clack/prompts";import mt from"fs-extra";import Re from"path";var N={rsc:!1,tsx:!0,path:"./seed-design",telemetry:!0};async function Te(){return await Q.group({tsx:()=>Q.confirm({message:`${p("TypeScript")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:N.tsx}),rsc:()=>Q.confirm({message:`${p("React Server Components")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:N.rsc}),path:()=>Q.text({message:`${p("seed-design \uD3F4\uB354")} \uACBD\uB85C\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694. (\uAE30\uBCF8\uAC12\uC740 \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uC5D0 \uC0DD\uC131\uB429\uB2C8\uB2E4.)`,initialValue:N.path,defaultValue:N.path,placeholder:N.path}),telemetry:()=>Q.confirm({message:`\uAC1C\uC120\uC744 \uC704\uD574 ${p("\uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130")}\uB97C \uC218\uC9D1\uD560\uAE4C\uC694?`,initialValue:N.telemetry})},{onCancel:()=>{throw new _}})}async function ye({cwd:e,config:t}){let r=Re.resolve(e,"seed-design.json");return await mt.writeFile(r,`${JSON.stringify(t,null,2)}
4
+ `,"utf-8"),{relativePath:Re.relative(process.cwd(),r),targetPath:r}}var ve="seed-design",ft=dt(ve,{searchPlaces:[`${ve}.json`]}),_e=oe.object({$schema:oe.string().optional(),rsc:oe.coerce.boolean().default(!1),tsx:oe.coerce.boolean().default(!0),path:oe.string(),telemetry:oe.coerce.boolean().optional().default(!0)}).strict();async function he(e){let t=await de(e);if(t)return t;te.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let r=await te.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(te.isCancel(r)||!r)throw new _;try{return await ye({cwd:e,config:N}),te.log.message("seed-design.json \uD30C\uC77C\uC774 \uC0DD\uC131\uB410\uC5B4\uC694."),_e.parse(N)}catch(n){throw new I({message:"seed-design.json \uD30C\uC77C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB514\uB809\uD1A0\uB9AC \uC4F0\uAE30 \uAD8C\uD55C\uACFC \uACBD\uB85C\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uBCF4\uC138\uC694.",cause:n})}}async function de(e){let t=await ft.search(e);if(!t||t.isEmpty)return null;try{return _e.parse(t.config)}catch(r){throw new I({message:"seed-design.json \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:"https://seed-design.com/react/getting-started/cli/configuration \uBB38\uC11C\uB97C \uCC38\uACE0\uD574 \uC8FC\uC138\uC694.",cause:r})}}function we({selectedItemKeys:e,publicRegistries:t}){let r=[],n=new Set;function o(s,i){let a=r.find(c=>c.registryId===s);if(!a?.items.some(c=>c.id===i.id)){if(a?a.items.push(i):r.push({registryId:s,items:[i]}),i.dependencies?.length)for(let c of i.dependencies)n.add(c);if(i.innerDependencies?.length)for(let c of i.innerDependencies)for(let d of c.itemIds){let y=t.find(w=>w.id===c.registryId)?.items.find(w=>w.id===d);if(!y)throw new Error(`Cannot find dependency item: ${c.registryId}:${d}`);o(c.registryId,y)}}}for(let s of e){let[i,...a]=s.split(":"),c=a.join(":");if(!i||!c)throw new Error(`Invalid snippet format: "${s}"`);let d=t.find(y=>y.id===i)?.items.find(y=>y.id===c);if(!d)throw new Error(`Cannot find snippet: "${s}"`);o(i,d)}return{registryItemsToAdd:r,npmDependenciesToAdd:n}}import*as ke from"@clack/prompts";import{z as m}from"zod";var Pe=m.object({id:m.string(),description:m.string().optional(),deprecated:m.boolean().optional(),hideFromCLICatalog:m.boolean().optional(),dependencies:m.array(m.string()).optional(),innerDependencies:m.array(m.object({registryId:m.string(),itemIds:m.array(m.string())})).optional(),snippets:m.array(m.object({path:m.string(),dependencies:m.record(m.string(),m.string()).optional(),content:m.string()}))}),Se=m.object({id:m.string(),hideFromCLICatalog:m.boolean().optional(),items:m.array(Pe.omit({snippets:!0}).extend({snippets:m.array(m.object({path:m.string(),dependencies:m.record(m.string(),m.string()).optional()}))}))}),je=m.array(m.object({id:m.string()})),gt=m.object({label:m.string(),path:m.string()}),ut=m.object({id:m.string(),title:m.string(),description:m.string().optional(),docUrl:m.string(),deprecated:m.boolean().optional(),snippetKey:m.string().optional(),snippets:m.array(gt).optional()}),yt=m.object({id:m.string(),label:m.string(),items:m.array(ut)}),ht=m.object({id:m.string(),label:m.string(),sections:m.array(yt)}),De=m.object({categories:m.array(ht)});var wt=1e4;async function Ae(e,t=wt){let r=new AbortController,n=setTimeout(()=>r.abort(),t);try{return await fetch(e,{signal:r.signal})}catch(o){throw o instanceof Error&&o.name==="AbortError"?new I({message:`\uC694\uCCAD \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC5B4\uC694 (${t}ms): ${e}`,hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694."}):o}finally{clearTimeout(n)}}async function Ee({baseUrl:e}){let t=await fetch(`${e}/__docs__/index.json`);if(!t.ok)throw new I({message:`\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${t.status} ${t.statusText}`});let r=await t.json(),{success:n,data:o,error:s}=De.safeParse(r);if(!n)throw new I({message:`\uBB38\uC11C \uBAA9\uB85D \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694: ${s?.message}`});return o}async function ie({baseUrl:e}){let t=await fetch(`${e}/__registry__/index.json`);if(!t.ok)throw new Error(`Failed to fetch registries: ${t.status} ${t.statusText}`);let r=await t.json(),{success:n,data:o,error:s}=je.safeParse(r);if(!n)throw new Error(`Failed to parse registries: ${s?.message}`);return o}async function ne({baseUrl:e,registryId:t}){let r=await fetch(`${e}/__registry__/${t}/index.json`);if(!r.ok)throw new Error(`Failed to fetch ${t} registry: ${r.status} ${r.statusText}`);let n=await r.json(),{success:o,data:s,error:i}=Se.safeParse(n);if(!o)throw new Error(`Failed to parse ${t} registry: ${i?.message}`);return s}async function bt({baseUrl:e,registryId:t,registryItemId:r}){let n=await fetch(`${e}/__registry__/${t}/${r}.json`);if(!n.ok)throw new Error(`Failed to fetch ${r}: ${n.status} ${n.statusText}`);let o=await n.json(),{success:s,data:i,error:a}=Pe.safeParse(o);if(!s)throw new Error(`Failed to parse ${r}: ${a?.message}`);return i}async function Oe({url:e}){let t=await Ae(e);if(!t.ok)throw new I({message:`llms.txt\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${t.status} ${t.statusText}`,hint:`${e} \uC5D0 \uC811\uADFC\uD560 \uC218 \uC788\uB294\uC9C0 \uD655\uC778\uD574\uC8FC\uC138\uC694.`});return t.text()}async function Me({baseUrl:e,query:t}){let r=t.startsWith("/")?t.slice(1):t,n=[`${e}/llms/${r}.txt`,`${e}/llms/${r}/llms.txt`],o;for(let s of n){let i;try{i=await Ae(s)}catch(a){o=a;continue}if(i.ok)return i.text();if(i.status===404){o=new I({message:`llms.txt\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694: ${r}`,hint:`\uB2E4\uC74C \uACBD\uB85C\uB97C \uC2DC\uB3C4\uD588\uC5B4\uC694:
5
+ ${n.map(a=>` - ${a}`).join(`
6
+ `)}`});continue}throw new I({message:`llms.txt \uC694\uCCAD\uC774 \uC2E4\uD328\uD588\uC5B4\uC694: ${i.status} ${i.statusText}`,hint:`URL: ${s}`})}throw o??new I({message:`llms.txt\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694: ${r}`,hint:`\uB2E4\uC74C \uACBD\uB85C\uB97C \uC2DC\uB3C4\uD588\uC5B4\uC694:
7
+ ${n.map(s=>` - ${s}`).join(`
8
+ `)}`})}async function Le({baseUrl:e,registryId:t,registryItemIds:r}){return await Promise.all(r.map(async n=>{try{return await bt({baseUrl:e,registryId:t,registryItemId:n})}catch(o){let s=await fetch(`${e}/__registry__/${t}/index.json`);if(!s.ok)throw new Error(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${s.status} ${s.statusText}`);let i=await s.json(),{success:a,data:c}=Se.safeParse(i);throw a?(ke.log.error(`${n} \uC2A4\uB2C8\uD3AB\uC774 ${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC5C6\uC5B4\uC694.`),ke.log.info(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC874\uC7AC\uD558\uB294 \uC2A4\uB2C8\uD3AB:
9
+ ${c.items.map(d=>d.id).join(`
10
+ `)}`),o):new Error(`Failed to parse registry index for ${t}`)}}))}import{promises as St}from"fs";import{tmpdir as kt}from"os";import Ke from"path";import{transformFromAstSync as Ct}from"@babel/core";import $t from"@babel/plugin-transform-typescript";import*as be from"recast";import{parse as It}from"@babel/parser";var xt={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Fe=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let n=be.parse(r,{parser:{parse:s=>It(s,xt)}}),o=Ct(n,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[$t],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return be.print(o.ast).code};import{SyntaxKind as Pt}from"ts-morph";var Ue=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(Pt.ExpressionStatement);if(!r)return e;let n=r.getExpression();if(!n)return e;let o=n.getText().trim();if(o!=='"use client"'&&o!=="'use client'")return e;let s=r.getText(),i=r.getFullText();if(s.trim()===i.trim())return e;let c=i.replace(s,"").replace(/^\s*\n/,"").replace(/\n\s*$/,"");return r.replaceWithText(c),e};import{Project as Et,ScriptKind as Rt}from"ts-morph";var Tt=[Ue],vt=new Et({compilerOptions:{}});async function _t(e){let t=await St.mkdtemp(Ke.join(kt(),"seed-design-"));return Ke.join(t,e)}async function Ne(e){let t=await _t(e.filename),r=vt.createSourceFile(t,e.raw,{scriptKind:Rt.TSX});for(let n of Tt)n({sourceFile:r,...e});return await Fe({sourceFile:r,...e})}import*as z from"@clack/prompts";import ae from"fs-extra";import G from"path";import{createPatch as jt}from"diff";import Dt from"@npmcli/disparity-colors";async function Ce({registryItemsToAdd:e,rootPath:t,cwd:r,baseUrl:n,config:o,onDiff:s}){let i=[];for(let{registryId:a,items:c}of e){let d=G.join(t,a);ae.ensureDirSync(d);let y=await Le({baseUrl:n,registryId:a,registryItemIds:c.map(w=>w.id)});for(let{id:w,snippets:C}of y){let E=await Promise.all(C.map(async h=>{let f=await Ne({filename:h.path,config:o,raw:h.content}),u=G.join(d,h.path);return o.tsx||(u=u.replace(/\.tsx$/,".jsx"),u=u.replace(/\.ts$/,".js")),{filePath:u,content:f,relativePath:G.relative(r,u),name:`${a}:${w}`}})),P=[];for(let h of E){let{filePath:f,content:u,relativePath:$}=h;if(await ae.ensureDir(G.dirname(f)),ae.existsSync(f)){let O=await ae.readFile(f,"utf-8");if(O===u){z.log.info(`${p($)}: \uC774\uBBF8 \uCD5C\uC2E0 \uC0C1\uD0DC\uC608\uC694.`);continue}let q=G.basename(f),x=G.extname(f),M=G.basename(f,x),L=Date.now(),W=`legacy-${M}-${L}${x}`,b=await(async()=>{if(s)return s;let l=jt($,O,u),g=Dt(l);return z.log.message(`
11
+ ${p($)}: \uD604\uC7AC \uD30C\uC77C\uACFC \uBC1B\uC73C\uB824\uB294 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC774 \uB2EC\uB77C\uC694.
12
+ `),z.log.message(g),z.select({message:"\uD604\uC7AC \uD30C\uC77C\uC5D0 \uC2A4\uD0C0\uC77C \uBCC0\uACBD, \uB85C\uAE45 \uB4F1 \uCEE4\uC2A4\uD130\uB9C8\uC774\uC9D5\uC774 \uC801\uC6A9\uB418\uC5B4 \uC788\uB294 \uACBD\uC6B0 \uC2E0\uADDC \uD30C\uC77C\uC5D0 \uB3D9\uC77C\uD55C \uCEE4\uC2A4\uD130\uB9C8\uC774\uC9D5\uC744 \uC801\uC6A9\uD558\uB294 \uAC83\uC744 \uAC80\uD1A0\uD574\uBCF4\uC138\uC694.",options:[{value:"overwrite",label:`${q} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${W}\uC73C\uB85C \uC62E\uAE30\uACE0 ${q} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(z.isCancel(b)||b==="skip"){z.log.info(`${p($)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(b==="backup"){let l=G.dirname(f),g=G.join(l,W);await ae.rename(f,g),z.log.info(`${p($)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${p(G.relative(r,g))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await ae.writeFile(f,u),P.push(h)}if(P.length>0){let h=P.map(({name:f,relativePath:u})=>({name:f,path:u}));i.push(...h),z.log.success(`${p(`${a}:${w}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${p(h.map(f=>f.path).join(", "))}`)}}}}import*as T from"@clack/prompts";import sr from"path";import{z as se}from"zod";var J="https://seed-design.io";import*as Ve from"@clack/prompts";import{execa as Ut}from"execa";import{detect as At}from"@antfu/ni";async function ze(e){let t=await At({programmatic:!0,cwd:e});return t==="yarn@berry"?"yarn":t==="pnpm@6"?"pnpm":t==="bun"?"bun":t==="deno"?"deno":t??"npm"}import Ot from"findup-sync";import Mt from"fs-extra";var Lt="package.json";function Ft(e=process.cwd()){let t=Ot(Lt,{cwd:e});if(!t)throw new Error("No package.json file found in the project.");return t}function ce(e=process.cwd()){let t=Ft(e);return Mt.readJSONSync(t)}async function $e({cwd:e,deps:t,dev:r=!1}){let{start:n,stop:o}=Ve.spinner(),s=await ze(e),a={...ce(e).dependencies},c=new Set(t.filter(P=>!a[P])),d=new Set(t.filter(P=>a[P]));if(!c.size)return{installed:new Set,filtered:c};n("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let C=[s==="npm"?"install":"add",r?"-D":null,...c].filter(Boolean),E=`${s} ${C.join(" ")}`;try{await Ut(s,C,{cwd:e})}catch(P){throw o("\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."),new I({message:"\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0, \uC124\uCE58 \uBA85\uB839\uC5B4\uB97C \uC9C1\uC811 \uC2E4\uD589\uD574 \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",details:[`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${E}`],cause:P})}return o("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:c,filtered:d}}import{randomUUID as Kt}from"node:crypto";import*as Be from"@clack/prompts";var Nt="seed_cli";async function zt(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await de(e))?.telemetry===!1)return!1}catch{}return!0}function Vt(){return Kt()}var qt=Vt(),qe=!1;function He(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Bt(e){return e instanceof Error&&e.name?e.name:typeof e=="object"&&e!==null?e.constructor?.name??"Object":typeof e}async function Ge(e,{event:t,properties:r={}}){if(!await zt(e))return;let o=`${Nt}.${t}`;qe||(Be.log.info("\u{1F4CA} \uC0AC\uC6A9 \uB370\uC774\uD130 \uC218\uC9D1 \uC911 (\uBE44\uD65C\uC131\uD654: seed-design.json \uB610\uB294 DISABLE_TELEMETRY \uD658\uACBD \uBCC0\uC218)"),qe=!0);try{let s="https://us.i.posthog.com/capture",i={"Content-Type":"application/json"},a={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:o,distinct_id:qt,properties:{...r,$process_person_profile:!1},timestamp:new Date().toISOString()},c=new AbortController,d=setTimeout(()=>c.abort(),5e3);try{await fetch(s,{method:"POST",headers:i,body:JSON.stringify(a),signal:c.signal})}finally{clearTimeout(d)}}catch{}}async function Je(e,{command:t,status:r,result:n,properties:o={}}){await Ge(e,{event:t,properties:He({status:r,result:n,...o})})}async function Ht(e,{command:t,error:r,result:n,properties:o={}}){await Je(e,{command:t,status:"failed",result:n,properties:He({error_type:Bt(r),...o})})}var R={track:Ge,trackCommandFailure:Ht,trackCommandOutcome:Je};import*as re from"@clack/prompts";import Gt from"fs-extra";import Jt from"path";import{intersects as Wt,satisfies as Yt,valid as Ye,validRange as Xe}from"semver";var fe=["@seed-design/react","@seed-design/css"],We="workspace:",Xt="npm:";function le(e){try{let t=ce(e),r={...t.dependencies,...t.devDependencies,...t.peerDependencies,...t.optionalDependencies},n={};for(let o of fe){let s=r[o];typeof s=="string"&&(n[o]=s)}return n}catch{return{}}}function pe({publicRegistries:e,itemKeys:t,projectPackageVersions:r}){let n=Array.from(new Set(t)),o=new Map(e.flatMap(i=>i.items.map(a=>[`${i.id}:${a.id}`,a]))),s=[];for(let i of n){let a=o.get(i);if(!a)continue;let c=Qt(a);for(let d of fe){let y=Array.from(c[d]??[]);if(!y.length)continue;let w=r[d];if(!w){s.push({itemKey:i,packageName:d,requiredRanges:y,type:"missing-package"});continue}let C=Zt(w);if(!C){s.push({itemKey:i,packageName:d,requiredRanges:y,installedVersionSpec:w,type:"invalid-version-spec"});continue}y.every(P=>er({currentVersionSpec:C,requiredRange:P}))||s.push({itemKey:i,packageName:d,requiredRanges:y,installedVersionSpec:w,type:"incompatible-version"})}}return{checkedItemKeys:n,projectPackageVersions:r,issues:s}}function me({report:e,title:t}){if(!e.issues.length)return;re.log.warn(t),re.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${fe.map(n=>`${n}@${p(e.projectPackageVersions[n]??"\uBBF8\uC124\uCE58")}`).join(", ")}`);let r=new Map;for(let n of e.issues){let o=r.get(n.itemKey)??[];o.push(n),r.set(n.itemKey,o)}for(let[n,o]of r.entries()){re.log.warn(p(n));for(let s of o){let i=s.requiredRanges.join(" | ");if(s.type==="missing-package"){re.log.info(` - ${s.packageName}: \uD328\uD0A4\uC9C0\uAC00 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694. \uD544\uC694 \uBC94\uC704: ${i}`);continue}if(s.type==="invalid-version-spec"){re.log.info(` - ${s.packageName}: \uD604\uC7AC \uBC84\uC804 \uD615\uC2DD\uC744 \uD574\uC11D\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694 (${s.installedVersionSpec}). \uD544\uC694 \uBC94\uC704: ${i}`);continue}re.log.info(` - ${s.packageName}: \uD604\uC7AC ${s.installedVersionSpec}, \uD544\uC694 \uBC94\uC704 ${i}`)}}}function Qe({publicRegistries:e,rootPath:t}){let r=[];for(let n of e)for(let o of n.items)o.snippets.some(i=>tr(i.path).some(a=>Gt.existsSync(Jt.join(t,n.id,a))))&&r.push(`${n.id}:${o.id}`);return r}function Qt(e){let t=Object.fromEntries(fe.map(r=>[r,new Set]));for(let r of e.snippets)for(let[n,o]of Object.entries(r.dependencies??{}))rr(n)&&t[n].add(o);return t}function Zt(e){let t=e.trim();if(t.startsWith(We)&&(t=t.slice(We.length).trim()),t.startsWith(Xt)){let r=t.split("@").at(-1);if(!r)return null;t=r}return!t||t==="*"?null:Ye(t)||Xe(t)?t:null}function er({currentVersionSpec:e,requiredRange:t}){let r=Xe(t);return r?Ye(e)?Yt(e,r,{includePrerelease:!0}):Wt(e,r,{includePrerelease:!0}):!1}function tr(e){let t=new Set([e]);return e.endsWith(".tsx")&&t.add(`${e.slice(0,-4)}.jsx`),e.endsWith(".ts")&&t.add(`${e.slice(0,-3)}.js`),e.endsWith(".jsx")&&t.add(`${e.slice(0,-4)}.tsx`),e.endsWith(".js")&&t.add(`${e.slice(0,-3)}.ts`),Array.from(t)}function rr(e){return fe.includes(e)}var or=se.object({itemIds:se.array(se.string()).optional(),all:se.boolean(),cwd:se.string(),baseUrl:se.string().optional(),onDiff:se.enum(["overwrite","backup"]).optional()}),Ze=e=>{e.command("add [...item-ids]","add items").option("-a, --all","[Deprecated] Add all items",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:J}).option("--on-diff <mode>","Action when file differs: overwrite or backup").example("seed-design add ui:action-button").example("seed-design add ui:alert-dialog").action(async(t,r)=>{let n=Date.now(),o=B(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();T.intro("seed-design add");try{let i=or.safeParse({itemIds:t,...r});if(!i.success)throw i.error;let{data:{all:a,...c}}=i;if(a)throw new I({message:"`--all` \uC635\uC158\uC740 \uB354 \uC774\uC0C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC544\uC694. \uB300\uC2E0 `seed-design add-all` \uBA85\uB839\uC5B4\uB97C \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694."});let d=c.cwd,y=c.baseUrl,w=await he(d),C=sr.resolve(d,w.path),{start:E,stop:P}=T.spinner();E("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let h=await(async()=>{try{let l=await Promise.all((await ie({baseUrl:y})).map(async({id:g})=>ne({baseUrl:y,registryId:g})));return P("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),l}catch(l){throw P("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),l}})(),f=await(async()=>{if(c.itemIds?.length)return c.itemIds;let l=await T.multiselect({message:"\uCD94\uAC00\uD560 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:h.filter(({hideFromCLICatalog:g})=>!g).flatMap(({id:g,items:k})=>k.filter(({hideFromCLICatalog:A})=>!A).sort((A,D)=>A.id.localeCompare(D.id)).map(({id:A,description:D,deprecated:S})=>({label:`${S?"(deprecated) ":""}${p(g)}:${A}`,value:`${g}:${A}`,hint:D,deprecated:S,registryItemCount:k.length}))).sort((g,k)=>g.deprecated!==k.deprecated?g.deprecated?1:-1:k.registryItemCount-g.registryItemCount)});if(T.isCancel(l))throw new _;return l})();if(!f?.length)throw new _("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694.");T.log.message(`\uC120\uD0DD\uB41C \uD56D\uBAA9: ${p(f.join(", "))}`);let u=[];for(let l of f){let[g,...k]=l.split(":"),A=k.join(":");if(!g||!A)throw new I({message:`${p(l)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${p("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let D=h.find(S=>S.id===g)?.items.find(S=>S.id===A);if(!D)throw new I({message:`${p(l)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(D.deprecated){let S=await T.confirm({message:`${p(D.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(T.isCancel(S))throw new _;if(S===!1){T.log.info(`${p(D.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}u.push(l)}let{registryItemsToAdd:$,npmDependenciesToAdd:O}=we({selectedItemKeys:u,publicRegistries:h}),q=pe({publicRegistries:h,itemKeys:$.flatMap(({registryId:l,items:g})=>g.map(k=>`${l}:${k.id}`)),projectPackageVersions:le(c.cwd)});me({report:q,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),T.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${p($.map(l=>l.items.map(g=>`${l.registryId}:${g.id}`).join(", ")).join(", ")||"\uC5C6\uC74C")}
9
13
 
10
- \uC124\uCE58\uD560 \uC758\uC874\uC131: ${a(Array.from(P).join(", ")||"\uC5C6\uC74C")}`),await $e({registryItemsToAdd:$,rootPath:h,cwd:m,baseUrl:p,config:y,onDiff:c.onDiff});let{installed:x,filtered:k}=await Ce({cwd:m,deps:Array.from(P)});x.size===0&&v.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),x.size&&(v.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${a(Array.from(x).join(", "))}`),k.size&&v.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${a(Array.from(k).join(", "))}`)),v.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let _=Date.now()-n,X=new Set($.map(l=>l.registryId)),S=d.some(l=>{let[b,...A]=l.split(":"),F=A.join(":");return f.find(V=>V.id===b)?.items.find(V=>V.id===F)?.deprecated});try{await U.track(c.cwd,{event:"add",properties:{items_count:g.length,registries:Array.from(X),has_deprecated:S,dependencies_count:P.size,duration_ms:_}})}catch(l){o&&console.error("[Telemetry] add tracking failed:",l)}}catch(r){L(r)&&(v.outro(a(r.message)),process.exit(0)),O(r,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as T from"@clack/prompts";import as from"path";import{z as ee}from"zod";var cs=ee.object({registryIds:ee.array(ee.string()).optional(),all:ee.boolean(),includeDeprecated:ee.boolean().optional(),cwd:ee.string(),baseUrl:ee.string().optional(),onDiff:ee.enum(["overwrite","backup"]).optional()}),et=e=>{e.command("add-all [...registry-ids]","add all items from registries").option("-a, --all","Add all items from all registries",{default:!1}).option("--include-deprecated","Include deprecated items when used with `--all`",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:N}).option("--on-diff <mode>","Action when file differs: overwrite or backup").example("seed-design add-all ui --include-deprecated").example("seed-design add-all ui lib breeze").action(async(t,s)=>{let n=Date.now(),o=K(s);T.intro("seed-design add-all");try{let r=cs.safeParse({registryIds:t,...s});if(!r.success)throw r.error;let{data:i}=r,c=i.cwd,m=i.baseUrl,p=await ye(c),y=as.resolve(c,p.path),{start:h,stop:w}=T.spinner();h("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let R=await(async()=>{try{let S=await Promise.all((await ne({baseUrl:m})).map(async({id:l})=>ae({baseUrl:m,registryId:l})));return w("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),S}catch(S){throw w("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),S}})(),f=await(async()=>{if(i.all){let l=R.map(b=>b.id);return T.log.message(`\uBAA8\uB4E0 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${a(l.join(", "))}`),l}if(i.registryIds?.length){let l=R.map(b=>b.id);for(let b of i.registryIds)if(!l.includes(b))throw new I({message:`\uB808\uC9C0\uC2A4\uD2B8\uB9AC '${b}'\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,details:[`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB808\uC9C0\uC2A4\uD2B8\uB9AC: ${l.join(", ")}`]});return T.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${a(i.registryIds.join(", "))}`),i.registryIds}let S=await T.multiselect({message:"\uCD94\uAC00\uD560 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:R.filter(({hideFromCLICatalog:l})=>!l).sort((l,b)=>b.items.length-l.items.length).map(l=>{let b=l.items[0]?.id,A=b?`${l.items.length}\uAC1C \uD56D\uBAA9 (${b} \uB4F1)`:`${l.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:l.id,value:l.id,hint:A}})});if(T.isCancel(S))throw new E;return T.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${a(S.join(", "))}`),S})(),d=R.filter(S=>f.includes(S.id)),g=d.flatMap(S=>S.items.filter(l=>l.deprecated?i.includeDeprecated:!0).map(l=>`${S.id}:${l.id}`)),$=d.reduce((S,l)=>S+l.items.filter(b=>b.deprecated).length,0);if(!i.includeDeprecated&&$>0&&T.log.info(`${$}\uAC1C\uC758 deprecated \uD56D\uBAA9\uC740 \uC81C\uC678\uB418\uC5C8\uC5B4\uC694. --include-deprecated \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 \uCD94\uAC00\uD560 \uC218 \uC788\uC5B4\uC694.`),!g.length)throw new E("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");T.log.message(`\uCD1D ${a(g.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:P,npmDependenciesToAdd:C}=we({selectedItemKeys:g,publicRegistries:R}),x=le({publicRegistries:R,itemKeys:P.flatMap(({registryId:S,items:l})=>l.map(b=>`${S}:${b.id}`)),projectPackageVersions:pe(i.cwd)});de({report:x,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),await $e({registryItemsToAdd:P,rootPath:y,cwd:c,baseUrl:m,config:p,onDiff:i.onDiff});let{installed:k,filtered:_}=await Ce({cwd:c,deps:Array.from(C)});k.size===0&&T.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),k.size&&(T.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${a(Array.from(k).join(", "))}`),_.size&&T.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${a(Array.from(_).join(", "))}`)),T.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let X=Date.now()-n;try{await U.track(i.cwd,{event:"add-all",properties:{registries:f,items_count:g.length,include_deprecated:i.includeDeprecated||!1,dependencies_count:C.size,duration_ms:X}})}catch(S){o&&console.error("[Telemetry] add-all tracking failed:",S)}}catch(r){L(r)&&(T.outro(a(r.message)),process.exit(0)),O(r,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as M from"@clack/prompts";import tt from"path";import{z as H}from"zod";var ps=H.object({itemIds:H.array(H.string()).optional(),component:H.union([H.string(),H.array(H.string())]).optional(),all:H.boolean(),registry:H.string().optional(),cwd:H.string(),baseUrl:H.string().optional()});function ls({itemIds:e,component:t}){let s=r=>r.trim().replace(/\s+/g,"-"),n=(e??[]).map(s).filter(Boolean),o=(Array.isArray(t)?t:[t]).filter(r=>!!r).flatMap(r=>r.split(",")).map(s).filter(Boolean);return Array.from(new Set([...n,...o]))}function ds({publicRegistries:e,targetInputs:t,defaultRegistry:s}){let n=e.filter(r=>typeof r.id=="string"&&Array.isArray(r.items)).flatMap(r=>r.items.filter(i=>typeof i.id=="string").map(i=>`${r.id}:${i.id}`)),o=new Set;for(let r of t){let i=r.includes(":")?r:s?`${s}:${r}`:(()=>{let c=n.filter(m=>m.endsWith(`:${r}`));if(!c.length)throw new I({message:`${a(r)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${a("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(c.length>1)throw new I({message:`${a(r)}: \uAC19\uC740 \uC774\uB984\uC758 \uD56D\uBAA9\uC774 \uC5EC\uB7EC \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC788\uC5B4\uC694.`,details:c.map(m=>`- ${m}`),hint:`${a("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});return c[0]})();if(!n.includes(i))throw new I({message:`${a(i)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});o.add(i)}return Array.from(o)}var st=e=>{e.command("compat [...item-ids]","check snippet compatibility").option("-c, --component <component>","\uAC80\uC0AC\uD560 \uCEF4\uD3EC\uB10C\uD2B8. \uC5EC\uB7EC \uBC88 \uB610\uB294 \uC27C\uD45C\uB85C \uC9C0\uC815 \uAC00\uB2A5").option("-a, --all","\uBAA8\uB4E0 registry \uD56D\uBAA9\uC744 \uAC80\uC0AC",{default:!1}).option("-r, --registry <registryId>","\uCEF4\uD3EC\uB10C\uD2B8 shorthand \uC785\uB825 \uC2DC \uAE30\uBCF8 registry").option("--cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:N}).example("seed-design compat").example("seed-design compat -c action-button").example("seed-design compat ui:action-button ui:alert-dialog").example("seed-design compat --all").action(async(t,s)=>{let n=Date.now(),o=K(s);M.intro("seed-design compat");try{let r=ps.safeParse({itemIds:t,...s});if(!r.success)throw r.error;let{data:i}=r,{start:c,stop:m}=M.spinner();c("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let p=await(async()=>{try{let d=await Promise.all((await ne({baseUrl:i.baseUrl})).map(async({id:g})=>ae({baseUrl:i.baseUrl,registryId:g})));return m("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),d}catch(d){throw m("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),d}})(),y=ls({itemIds:i.itemIds,component:i.component}),h=i.all?p.flatMap(g=>g.items.map($=>`${g.id}:${$.id}`)):y.length>0?ds({publicRegistries:p,targetInputs:y,defaultRegistry:i.registry}):ge(i.cwd),w=Array.isArray(h)?h:await(async()=>{let d=await h;if(!d)throw new I({message:"seed-design.json \uD30C\uC77C\uC774 \uC5C6\uC5B4 \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB \uACBD\uB85C\uB97C \uC54C \uC218 \uC5C6\uC5B4\uC694.",hint:"`seed-design init`\uC73C\uB85C \uC124\uC815\uC744 \uB9CC\uB4E0 \uB4A4 \uC2E4\uD589\uD558\uAC70\uB098, `--all`/`-c`\uB85C \uAC80\uC0AC \uB300\uC0C1\uC744 \uC9C1\uC811 \uC9C0\uC815\uD574\uC8FC\uC138\uC694."});let g=tt.resolve(i.cwd,d.path),$=Qe({publicRegistries:p,rootPath:g});return $.length?$:(M.log.info(`${a(tt.relative(i.cwd,g)||d.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();w.length||(M.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0));let R=pe(i.cwd),f=le({publicRegistries:p,itemKeys:w,projectPackageVersions:R});if(M.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${a(f.checkedItemKeys.join(", "))}`),!f.issues.length){M.outro("\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC @seed-design/react, @seed-design/css\uC640 \uD638\uD658\uB3FC\uC694.");try{await U.track(i.cwd,{event:"compat",properties:{checked_items_count:f.checkedItemKeys.length,incompatible_items_count:0,duration_ms:Date.now()-n}})}catch(d){o&&console.error("[Telemetry] compat tracking failed:",d)}process.exit(0)}de({report:f,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC558\uC5B4\uC694."}),M.log.info("\uD544\uC694\uD55C \uBC84\uC804\uC73C\uB85C @seed-design/react \uB610\uB294 @seed-design/css\uB97C \uB9DE\uCD98 \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD574\uBCF4\uC138\uC694."),M.outro("\uD638\uD658\uC131 \uC774\uC288\uAC00 \uC788\uC5B4\uC694.");try{await U.track(i.cwd,{event:"compat",properties:{checked_items_count:f.checkedItemKeys.length,incompatible_items_count:new Set(f.issues.map(d=>d.itemKey)).size,issue_count:f.issues.length,duration_ms:Date.now()-n}})}catch(d){o&&console.error("[Telemetry] compat tracking failed:",d)}process.exit(1)}catch(r){L(r)&&(M.outro(a(r.message)),process.exit(0)),O(r,{defaultMessage:"\uD638\uD658\uC131 \uAC80\uC0AC\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as j from"@clack/prompts";import{z as ve}from"zod";var ms="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",gs=ve.object({query:ve.string().optional(),baseUrl:ve.string().optional()});function rt(e,t){return`${ms}/${e}/${t}`}function fs(e,t){let s=`${t}${e.docUrl}`,n=`${t}/llms${e.docUrl}.txt`,o=[e.id,`- docs: ${s}`,`- llms.txt: ${n}`];if(e.snippetKey&&e.snippets&&e.snippets.length>0){let[r]=e.snippetKey.split(":");if(r==="ui"||r==="breeze")if(e.snippets.length===1)o.push(`- snippet: ${rt(r,e.snippets[0].path)}`);else{o.push("- snippet:");for(let i of e.snippets)o.push(` - ${i.label}: ${rt(r,i.path)}`)}}j.log.message(o.join(`
11
- `))}function us(e,t){let s=e.length,n=t.length,o=Array.from({length:s+1},(r,i)=>Array.from({length:n+1},(c,m)=>i===0?m:m===0?i:0));for(let r=1;r<=s;r++)for(let i=1;i<=n;i++)o[r][i]=Math.min(o[r-1][i]+1,o[r][i-1]+1,o[r-1][i-1]+(e[r-1]!==t[i-1]?1:0));return o[s][n]}function te(e,t,s=3){let n=e.toLowerCase();return t.map(o=>({value:o,dist:us(n,o.toLowerCase())})).filter(({dist:o})=>o>0&&o<=s).sort((o,r)=>o.dist-r.dist).map(({value:o})=>o)}function hs(e,t){if(e.length===0)return;let s=[],n=t.map(i=>i.id),o=te(e[0],n);if(o.length===0){let i=t.flatMap(p=>p.sections.flatMap(y=>y.items.map(h=>`${p.id}/${y.id}/${h.id}`))),c=e.join("/"),m=te(c,i,5);m.length>0&&s.push(...m.slice(0,3))}else{let i=t.find(c=>c.id===o[0]);if(i&&e.length>=2){let c=i.sections.map(p=>p.id),m=te(e[1],c);if(m.length>0){let p=i.sections.find(y=>y.id===m[0]);if(p&&e.length>=3){let y=p.items.map(w=>w.id),h=te(e[2],y);for(let w of h.slice(0,3))s.push(`${i.id}/${p.id}/${w}`)}else for(let y of m.slice(0,3))s.push(`${i.id}/${y}`)}else{let p=i.sections.flatMap(h=>h.items.map(w=>({path:`${i.id}/${h.id}/${w.id}`,id:w.id}))),y=te(e[1],p.map(h=>h.id));for(let h of y.slice(0,3)){let w=p.find(R=>R.id===h);w&&s.push(w.path)}}}else for(let c of o.slice(0,3))s.push(c)}if(s.length===0)return;let r=["","\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?"];for(let i of s)r.push(` - ${i}`);return r.join(`
12
- `)}function ys(e){return e.split("/").map(t=>t.trim()).filter(Boolean)}function ws(e,t){let s=t.toLowerCase();return e.flatMap(n=>n.sections.flatMap(o=>o.items.filter(r=>r.id.toLowerCase().includes(s)||r.title.toLowerCase().includes(s)).map(r=>({item:r,categoryLabel:n.label,sectionLabel:o.label}))))}async function ue(e){let t=await j.select({message:"\uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(s=>({label:`${s.deprecated?"(deprecated) ":""}${s.title}`,value:s,hint:s.description}))});if(j.isCancel(t))throw new E;return t}async function it(e){let t=await j.select({message:"\uC139\uC158\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(s=>({label:s.label,value:s,hint:`${s.items.length}\uAC1C \uD56D\uBAA9`}))});if(j.isCancel(t))throw new E;return t}async function bs(e){let t=await j.select({message:"\uCE74\uD14C\uACE0\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(s=>({label:s.label,value:s,hint:`${s.sections.reduce((n,o)=>n+o.items.length,0)}\uAC1C \uD56D\uBAA9`}))});if(j.isCancel(t))throw new E;return t}var ot=e=>{e.command("docs [query]","\uBB38\uC11C \uB9C1\uD06C, llms.txt \uB9C1\uD06C, \uC2A4\uB2C8\uD3AB \uB9C1\uD06C\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4").option("-u, --baseUrl <baseUrl>",`\uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uAE30\uBCF8 URL (\uAE30\uBCF8\uAC12: ${N})`,{default:N}).example("seed-design docs").example("seed-design docs action-button").example("seed-design docs react").example("seed-design docs react/components").example("seed-design docs react/components/action-button").action(async(t,s)=>{let n=Date.now(),o=K(s);j.intro("seed-design docs");try{let r=gs.safeParse({query:t,...s});if(!r.success)throw r.error;let{data:i}=r,c=i.baseUrl??N,{start:m,stop:p}=j.spinner();m("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let y=await(async()=>{try{let f=await Me({baseUrl:c});return p("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC654\uC5B4\uC694."),f}catch(f){throw p("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),f}})(),{categories:h}=y,w;if(i.query){let f=ys(i.query),d=h.find(g=>g.id===f[0]);if(d&&f.length>=2){let g=d.sections.find($=>$.id===f[1]);if(g&&f.length>=3){let $=g.items.find(P=>P.id===f[2]);if($)w=$;else{let P=f[2].toLowerCase(),C=g.items.filter(x=>x.id.toLowerCase().includes(P)||x.title.toLowerCase().includes(P));if(C.length===0){let x=te(f[2],g.items.map(_=>_.id)),k=x.length>0?`
14
+ \uC124\uCE58\uD560 \uC758\uC874\uC131: ${p(Array.from(O).join(", ")||"\uC5C6\uC74C")}`),await Ce({registryItemsToAdd:$,rootPath:C,cwd:d,baseUrl:y,config:w,onDiff:c.onDiff});let{installed:x,filtered:M}=await $e({cwd:d,deps:Array.from(O)});x.size===0&&T.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),x.size&&(T.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${p(Array.from(x).join(", "))}`),M.size&&T.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${p(Array.from(M).join(", "))}`)),T.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let L=Date.now()-n,W=new Set($.map(l=>l.registryId)),b=f.some(l=>{let[g,...k]=l.split(":"),A=k.join(":");return h.find(D=>D.id===g)?.items.find(D=>D.id===A)?.deprecated});try{await R.trackCommandOutcome(c.cwd,{command:"add",status:"completed",properties:{items_count:u.length,registries:Array.from(W),has_deprecated:b,dependencies_count:O.size,duration_ms:L}})}catch(l){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",l)}}catch(i){if(K(i)){try{await R.trackCommandOutcome(s,{command:"add",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}T.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"add",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}H(i,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as j from"@clack/prompts";import ir from"path";import{z as Z}from"zod";var nr=Z.object({registryIds:Z.array(Z.string()).optional(),all:Z.boolean(),includeDeprecated:Z.boolean().optional(),cwd:Z.string(),baseUrl:Z.string().optional(),onDiff:Z.enum(["overwrite","backup"]).optional()}),et=e=>{e.command("add-all [...registry-ids]","add all items from registries").option("-a, --all","Add all items from all registries",{default:!1}).option("--include-deprecated","Include deprecated items when used with `--all`",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:J}).option("--on-diff <mode>","Action when file differs: overwrite or backup").example("seed-design add-all ui --include-deprecated").example("seed-design add-all ui lib breeze").action(async(t,r)=>{let n=Date.now(),o=B(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();j.intro("seed-design add-all");try{let i=nr.safeParse({registryIds:t,...r});if(!i.success)throw i.error;let{data:a}=i,c=a.cwd,d=a.baseUrl,y=await he(c),w=ir.resolve(c,y.path),{start:C,stop:E}=j.spinner();C("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let P=await(async()=>{try{let b=await Promise.all((await ie({baseUrl:d})).map(async({id:l})=>ne({baseUrl:d,registryId:l})));return E("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),b}catch(b){throw E("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),b}})(),h=await(async()=>{if(a.all){let l=P.map(g=>g.id);return j.log.message(`\uBAA8\uB4E0 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(l.join(", "))}`),l}if(a.registryIds?.length){let l=P.map(g=>g.id);for(let g of a.registryIds)if(!l.includes(g))throw new I({message:`\uB808\uC9C0\uC2A4\uD2B8\uB9AC '${g}'\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,details:[`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB808\uC9C0\uC2A4\uD2B8\uB9AC: ${l.join(", ")}`]});return j.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(a.registryIds.join(", "))}`),a.registryIds}let b=await j.multiselect({message:"\uCD94\uAC00\uD560 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:P.filter(({hideFromCLICatalog:l})=>!l).sort((l,g)=>g.items.length-l.items.length).map(l=>{let g=l.items[0]?.id,k=g?`${l.items.length}\uAC1C \uD56D\uBAA9 (${g} \uB4F1)`:`${l.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:l.id,value:l.id,hint:k}})});if(j.isCancel(b))throw new _;return j.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(b.join(", "))}`),b})(),f=P.filter(b=>h.includes(b.id)),u=f.flatMap(b=>b.items.filter(l=>l.deprecated?a.includeDeprecated:!0).map(l=>`${b.id}:${l.id}`)),$=f.reduce((b,l)=>b+l.items.filter(g=>g.deprecated).length,0);if(!a.includeDeprecated&&$>0&&j.log.info(`${$}\uAC1C\uC758 deprecated \uD56D\uBAA9\uC740 \uC81C\uC678\uB418\uC5C8\uC5B4\uC694. --include-deprecated \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 \uCD94\uAC00\uD560 \uC218 \uC788\uC5B4\uC694.`),!u.length)throw new _("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");j.log.message(`\uCD1D ${p(u.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:O,npmDependenciesToAdd:q}=we({selectedItemKeys:u,publicRegistries:P}),x=pe({publicRegistries:P,itemKeys:O.flatMap(({registryId:b,items:l})=>l.map(g=>`${b}:${g.id}`)),projectPackageVersions:le(a.cwd)});me({report:x,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),await Ce({registryItemsToAdd:O,rootPath:w,cwd:c,baseUrl:d,config:y,onDiff:a.onDiff});let{installed:M,filtered:L}=await $e({cwd:c,deps:Array.from(q)});M.size===0&&j.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),M.size&&(j.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${p(Array.from(M).join(", "))}`),L.size&&j.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${p(Array.from(L).join(", "))}`)),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let W=Date.now()-n;try{await R.trackCommandOutcome(a.cwd,{command:"add-all",status:"completed",properties:{registries:h,items_count:u.length,include_deprecated:a.includeDeprecated||!1,dependencies_count:q.size,duration_ms:W}})}catch(b){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",b)}}catch(i){if(K(i)){try{await R.trackCommandOutcome(s,{command:"add-all",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}j.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"add-all",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}H(i,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as F from"@clack/prompts";import tt from"path";import{z as V}from"zod";var ar=V.object({itemIds:V.array(V.string()).optional(),component:V.union([V.string(),V.array(V.string())]).optional(),all:V.boolean(),registry:V.string().optional(),cwd:V.string(),baseUrl:V.string().optional()});function cr({itemIds:e,component:t}){let r=s=>s.trim().replace(/\s+/g,"-"),n=(e??[]).map(r).filter(Boolean),o=(Array.isArray(t)?t:[t]).filter(s=>!!s).flatMap(s=>s.split(",")).map(r).filter(Boolean);return Array.from(new Set([...n,...o]))}function lr({publicRegistries:e,targetInputs:t,defaultRegistry:r}){let n=e.filter(s=>typeof s.id=="string"&&Array.isArray(s.items)).flatMap(s=>s.items.filter(i=>typeof i.id=="string").map(i=>`${s.id}:${i.id}`)),o=new Set;for(let s of t){let i=s.includes(":")?s:r?`${r}:${s}`:(()=>{let a=n.filter(c=>c.endsWith(`:${s}`));if(!a.length)throw new I({message:`${p(s)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${p("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(a.length>1)throw new I({message:`${p(s)}: \uAC19\uC740 \uC774\uB984\uC758 \uD56D\uBAA9\uC774 \uC5EC\uB7EC \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC788\uC5B4\uC694.`,details:a.map(c=>`- ${c}`),hint:`${p("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});return a[0]})();if(!n.includes(i))throw new I({message:`${p(i)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});o.add(i)}return Array.from(o)}var rt=e=>{e.command("compat [...item-ids]","check snippet compatibility").option("-c, --component <component>","\uAC80\uC0AC\uD560 \uCEF4\uD3EC\uB10C\uD2B8. \uC5EC\uB7EC \uBC88 \uB610\uB294 \uC27C\uD45C\uB85C \uC9C0\uC815 \uAC00\uB2A5").option("-a, --all","\uBAA8\uB4E0 registry \uD56D\uBAA9\uC744 \uAC80\uC0AC",{default:!1}).option("-r, --registry <registryId>","\uCEF4\uD3EC\uB10C\uD2B8 shorthand \uC785\uB825 \uC2DC \uAE30\uBCF8 registry").option("--cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:J}).example("seed-design compat").example("seed-design compat -c action-button").example("seed-design compat ui:action-button ui:alert-dialog").example("seed-design compat --all").action(async(t,r)=>{let n=Date.now(),o=B(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();F.intro("seed-design compat");try{let i=ar.safeParse({itemIds:t,...r});if(!i.success)throw i.error;let{data:a}=i,{start:c,stop:d}=F.spinner();c("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let y=await(async()=>{try{let f=await Promise.all((await ie({baseUrl:a.baseUrl})).map(async({id:u})=>ne({baseUrl:a.baseUrl,registryId:u})));return d("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),f}catch(f){throw d("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),f}})(),w=cr({itemIds:a.itemIds,component:a.component}),C=a.all?y.flatMap(u=>u.items.map($=>`${u.id}:${$.id}`)):w.length>0?lr({publicRegistries:y,targetInputs:w,defaultRegistry:a.registry}):de(a.cwd),E=Array.isArray(C)?C:await(async()=>{let f=await C;if(!f)throw new I({message:"seed-design.json \uD30C\uC77C\uC774 \uC5C6\uC5B4 \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB \uACBD\uB85C\uB97C \uC54C \uC218 \uC5C6\uC5B4\uC694.",hint:"`seed-design init`\uC73C\uB85C \uC124\uC815\uC744 \uB9CC\uB4E0 \uB4A4 \uC2E4\uD589\uD558\uAC70\uB098, `--all`/`-c`\uB85C \uAC80\uC0AC \uB300\uC0C1\uC744 \uC9C1\uC811 \uC9C0\uC815\uD574\uC8FC\uC138\uC694."});let u=tt.resolve(a.cwd,f.path),$=Qe({publicRegistries:y,rootPath:u});return $.length?$:(F.log.info(`${p(tt.relative(a.cwd,u)||f.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();if(!E.length){try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"empty",properties:{duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}F.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0)}let P=le(a.cwd),h=pe({publicRegistries:y,itemKeys:E,projectPackageVersions:P});if(F.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${p(h.checkedItemKeys.join(", "))}`),!h.issues.length){F.outro("\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC @seed-design/react, @seed-design/css\uC640 \uD638\uD658\uB3FC\uC694.");try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"compatible",properties:{checked_items_count:h.checkedItemKeys.length,incompatible_items_count:0,duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}process.exit(0)}me({report:h,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC558\uC5B4\uC694."}),F.log.info("\uD544\uC694\uD55C \uBC84\uC804\uC73C\uB85C @seed-design/react \uB610\uB294 @seed-design/css\uB97C \uB9DE\uCD98 \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD574\uBCF4\uC138\uC694."),F.outro("\uD638\uD658\uC131 \uC774\uC288\uAC00 \uC788\uC5B4\uC694.");try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"incompatible",properties:{checked_items_count:h.checkedItemKeys.length,incompatible_items_count:new Set(h.issues.map(f=>f.itemKey)).size,issue_count:h.issues.length,duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}process.exit(1)}catch(i){if(K(i)){try{await R.trackCommandOutcome(s,{command:"compat",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}F.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"compat",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}H(i,{defaultMessage:"\uD638\uD658\uC131 \uAC80\uC0AC\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as v from"@clack/prompts";import{z as Ie}from"zod";var pr="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",mr=Ie.object({query:Ie.string().optional(),baseUrl:Ie.string().optional(),raw:Ie.boolean()});function st(e,t){return`${pr}/${e}/${t}`}function dr(e,t){let r=`${t}${e.docUrl}`,n=`${t}/llms${e.docUrl}.txt`,o=[e.id,`- docs: ${r}`,`- llms.txt: ${n}`];if(e.snippetKey&&e.snippets&&e.snippets.length>0){let[s]=e.snippetKey.split(":");if(s==="ui"||s==="breeze")if(e.snippets.length===1)o.push(`- snippet: ${st(s,e.snippets[0].path)}`);else{o.push("- snippet:");for(let i of e.snippets)o.push(` - ${i.label}: ${st(s,i.path)}`)}}v.log.message(o.join(`
15
+ `))}function fr(e,t){let r=e.length,n=t.length,o=Array.from({length:r+1},(s,i)=>Array.from({length:n+1},(a,c)=>i===0?c:c===0?i:0));for(let s=1;s<=r;s++)for(let i=1;i<=n;i++)o[s][i]=Math.min(o[s-1][i]+1,o[s][i-1]+1,o[s-1][i-1]+(e[s-1]!==t[i-1]?1:0));return o[r][n]}function ee(e,t,r=3){let n=e.toLowerCase();return t.map(o=>({value:o,dist:fr(n,o.toLowerCase())})).filter(({dist:o})=>o>0&&o<=r).sort((o,s)=>o.dist-s.dist).map(({value:o})=>o)}function gr(e,t){if(e.length===0)return;let r=[],n=t.map(i=>i.id),o=ee(e[0],n);if(o.length===0){let i=t.flatMap(d=>d.sections.flatMap(y=>y.items.map(w=>`${d.id}/${y.id}/${w.id}`))),a=e.join("/"),c=ee(a,i,5);c.length>0&&r.push(...c.slice(0,3))}else{let i=t.find(a=>a.id===o[0]);if(i&&e.length>=2){let a=i.sections.map(d=>d.id),c=ee(e[1],a);if(c.length>0){let d=i.sections.find(y=>y.id===c[0]);if(d&&e.length>=3){let y=d.items.map(C=>C.id),w=ee(e[2],y);for(let C of w.slice(0,3))r.push(`${i.id}/${d.id}/${C}`)}else for(let y of c.slice(0,3))r.push(`${i.id}/${y}`)}else{let d=i.sections.flatMap(w=>w.items.map(C=>({path:`${i.id}/${w.id}/${C.id}`,id:C.id}))),y=ee(e[1],d.map(w=>w.id));for(let w of y.slice(0,3)){let C=d.find(E=>E.id===w);C&&r.push(C.path)}}}else for(let a of o.slice(0,3))r.push(a)}if(r.length===0)return;let s=["","\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?"];for(let i of r)s.push(` - ${i}`);return s.join(`
16
+ `)}function ur(e){return e.split("/").map(t=>t.trim()).filter(Boolean)}function yr(e,t){let r=t.toLowerCase();return e.flatMap(n=>n.sections.flatMap(o=>o.items.filter(s=>s.id.toLowerCase().includes(r)||s.title.toLowerCase().includes(r)).map(s=>({item:s,categoryLabel:n.label,sectionLabel:o.label}))))}async function ge(e){let t=await v.select({message:"\uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:`${r.deprecated?"(deprecated) ":""}${r.title}`,value:r,hint:r.description}))});if(v.isCancel(t))throw new _;return t}async function ot(e){let t=await v.select({message:"\uC139\uC158\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:r.label,value:r,hint:`${r.items.length}\uAC1C \uD56D\uBAA9`}))});if(v.isCancel(t))throw new _;return t}async function hr(e){let t=await v.select({message:"\uCE74\uD14C\uACE0\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:r.label,value:r,hint:`${r.sections.reduce((n,o)=>n+o.items.length,0)}\uAC1C \uD56D\uBAA9`}))});if(v.isCancel(t))throw new _;return t}var it=e=>{e.command("docs [query]","\uBB38\uC11C \uB9C1\uD06C, llms.txt \uB9C1\uD06C, \uC2A4\uB2C8\uD3AB \uB9C1\uD06C\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4").option("-u, --baseUrl <baseUrl>",`\uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uAE30\uBCF8 URL (\uAE30\uBCF8\uAC12: ${J})`,{default:J}).option("--raw","llms.txt \uB0B4\uC6A9\uC744 \uC9C1\uC811 \uAC00\uC838\uC640 \uCD9C\uB825\uD569\uB2C8\uB2E4. LLM \uD30C\uC774\uD504\uC5D0 \uC720\uC6A9\uD569\uB2C8\uB2E4.",{default:!1}).example("seed-design docs").example("seed-design docs action-button").example("seed-design docs react").example("seed-design docs react/components").example("seed-design docs react/components/action-button").example("seed-design docs react/updates/changelog --raw").action(async(t,r)=>{let n=Date.now(),o=B(r),s=r.raw??!1,i=process.cwd();s||v.intro("seed-design docs");try{let a=mr.safeParse({query:t,...r});if(!a.success)throw a.error;let{data:c}=a,d=c.baseUrl??J;if(c.raw&&!c.query)throw new I({message:"--raw \uBAA8\uB4DC\uC5D0\uC11C\uB294 \uCFFC\uB9AC\uAC00 \uD544\uC694\uD574\uC694.",hint:"\uC608: `seed-design docs react/updates/changelog --raw`"});let y=await(async()=>{if(s)return await Ee({baseUrl:d});let{start:h,stop:f}=v.spinner();h("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");try{let u=await Ee({baseUrl:d});return f("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC654\uC5B4\uC694."),u}catch(u){throw f("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),u}})(),{categories:w}=y,C,E=async()=>{if(c.query){let u=ur(c.query);if(s&&u.length>3)return;let $=w.find(x=>x.id===u[0]);if($&&u.length>=2){let x=$.sections.find(b=>b.id===u[1]);if(x&&u.length>=3){let b=x.items.find(k=>k.id===u[2]);if(b)return b;let l=u[2].toLowerCase(),g=x.items.filter(k=>k.id.toLowerCase().includes(l)||k.title.toLowerCase().includes(l));if(g.length===0){let k=ee(u[2],x.items.map(D=>D.id)),A=k.length>0?`
13
17
 
14
18
  \u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
15
- ${x.slice(0,3).map(_=>` - ${d.id}/${g.id}/${_}`).join(`
16
- `)}`:"";throw new I({message:`${a(i.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${k}`,hint:`\`seed-design docs ${d.id}/${g.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}C.length===1?w=C[0]:w=await ue(C)}}else if(g)w=await ue(g.items);else{let $=f[1].toLowerCase(),P=d.sections.flatMap(C=>C.items.filter(x=>x.id.toLowerCase().includes($)||x.title.toLowerCase().includes($)).map(x=>({item:x,sectionLabel:C.label})));if(P.length===0){let C=d.sections.map(l=>l.id),x=te(f[1],C),k=d.sections.flatMap(l=>l.items.map(b=>({path:`${d.id}/${l.id}/${b.id}`,id:b.id}))),_=te(f[1],k.map(l=>l.id)),X=[...x.slice(0,2).map(l=>`${d.id}/${l}`),..._.slice(0,2).map(l=>k.find(b=>b.id===l)?.path).filter(l=>l!=null)],S=X.length>0?`
19
+ ${k.slice(0,3).map(D=>` - ${$.id}/${x.id}/${D}`).join(`
20
+ `)}`:"";throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${A}`,hint:`\`seed-design docs ${$.id}/${x.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}return g.length===1?g[0]:await ge(g)}if(x)return await ge(x.items);let M=u[1].toLowerCase(),L=$.sections.flatMap(b=>b.items.filter(l=>l.id.toLowerCase().includes(M)||l.title.toLowerCase().includes(M)).map(l=>({item:l,sectionLabel:b.label})));if(L.length===0){let b=$.sections.map(S=>S.id),l=ee(u[1],b),g=$.sections.flatMap(S=>S.items.map(ue=>({path:`${$.id}/${S.id}/${ue.id}`,id:ue.id}))),k=ee(u[1],g.map(S=>S.id)),A=[...l.slice(0,2).map(S=>`${$.id}/${S}`),...k.slice(0,2).map(S=>g.find(ue=>ue.id===S)?.path).filter(S=>S!=null)],D=A.length>0?`
17
21
 
18
22
  \u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
19
- ${X.map(l=>` - ${l}`).join(`
20
- `)}`:"";throw new I({message:`${a(i.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${S}`,hint:`\`seed-design docs ${d.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(P.length===1)w=P[0].item;else{let C=await j.select({message:`${a(f[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:P.map(({item:x,sectionLabel:k})=>({label:`[${k}] ${x.title}`,value:x,hint:x.description}))});if(j.isCancel(C))throw new E;w=C}}}else if(d)if(d.sections.length===1)w=await ue(d.sections[0].items);else{let g=await it(d.sections);w=await ue(g.items)}else{let g=ws(h,i.query);if(g.length===0){let $=hs(f,h);throw new I({message:`${a(i.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${$??""}`,hint:"`seed-design docs`\uB85C \uC804\uCCB4 \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694."})}if(g.length===1)w=g[0].item;else{let $=await j.select({message:`${a(i.query)}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:g.map(({item:P,categoryLabel:C,sectionLabel:x})=>({label:`[${C} > ${x}] ${P.title}`,value:P,hint:P.description}))});if(j.isCancel($))throw new E;w=$}}}else{let f=await bs(h),d;f.sections.length===1?d=f.sections[0]:d=await it(f.sections),w=await ue(d.items)}fs(w,c),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let R=Date.now()-n;try{await U.track(process.cwd(),{event:"docs",properties:{query:i.query??null,item_id:w.id,has_snippet:!!(w.snippets&&w.snippets.length>0),duration_ms:R}})}catch(f){o&&console.error("[Telemetry] docs tracking failed:",f)}}catch(r){L(r)&&(j.outro(a(r.message)),process.exit(0)),O(r,{defaultMessage:"\uBB38\uC11C \uC870\uD68C\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as z from"@clack/prompts";import{z as Ie}from"zod";import $s from"dedent";var Cs=Ie.object({cwd:Ie.string(),yes:Ie.boolean().optional(),default:Ie.boolean().optional()}),nt=e=>{e.command("init","seed-design.json \uD30C\uC77C \uC0DD\uC131").option("-c, --cwd <cwd>","\uC791\uC5C5 \uB514\uB809\uD1A0\uB9AC. \uAE30\uBCF8\uAC12\uC740 \uD604\uC7AC \uB514\uB809\uD1A0\uB9AC.",{default:process.cwd()}).option("-y, --yes","\uBAA8\uB4E0 \uC9C8\uBB38\uC5D0 \uB300\uD574 \uAE30\uBCF8\uAC12\uC73C\uB85C \uB2F5\uBCC0\uD569\uB2C8\uB2E4.").option("--default","Deprecated. --yes\uC640 \uB3D9\uC77C\uD558\uAC8C \uAE30\uBCF8\uAC12\uC73C\uB85C \uC0DD\uC131\uD569\uB2C8\uB2E4.").action(async t=>{let s=Date.now(),n=K(t);z.intro("seed-design.json \uD30C\uC77C \uC0DD\uC131");try{let o=Cs.safeParse(t);if(!o.success)throw o.error;let r=o.data,i=r.yes||r.default,c=i?q:await Te(),{start:m,stop:p}=z.spinner();m("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC911...");let y=await(async()=>{try{return(await he({cwd:r.cwd,config:c})).relativePath}catch(w){throw p("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC774 \uC911\uB2E8\uB410\uC5B4\uC694."),w}})();p(`seed-design.json \uD30C\uC77C\uC774 ${a(y)}\uC5D0 \uC0DD\uC131\uB410\uC5B4\uC694.`),z.log.info(a("seed-design add {component} \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD574\uBCF4\uC138\uC694!")),z.log.info(a("seed-design add \uBA85\uB839\uC5B4\uB85C \uCD94\uAC00\uD560 \uC218 \uC788\uB294 \uBAA8\uB4E0 \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.")),z.note($s(`SEED Design CLI\uB294 \uAC1C\uC120\uC744 \uC704\uD574 \uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130\uB97C \uC218\uC9D1\uD574\uC694.
23
+ ${A.map(S=>` - ${S}`).join(`
24
+ `)}`:"";throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${D}`,hint:`\`seed-design docs ${$.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(L.length===1)return L[0].item;let W=await v.select({message:`${p(u[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:L.map(({item:b,sectionLabel:l})=>({label:`[${l}] ${b.title}`,value:b,hint:b.description}))});if(v.isCancel(W))throw new _;return W}if($){if($.sections.length===1)return await ge($.sections[0].items);let x=await ot($.sections);return await ge(x.items)}let O=yr(w,c.query);if(O.length===0){let x=gr(u,w);throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${x??""}`,hint:"`seed-design docs`\uB85C \uC804\uCCB4 \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694."})}if(O.length===1)return O[0].item;let q=await v.select({message:`${p(c.query)}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:O.map(({item:x,categoryLabel:M,sectionLabel:L})=>({label:`[${M} > ${L}] ${x.title}`,value:x,hint:x.description}))});if(v.isCancel(q))throw new _;return q}let h=await hr(w),f;return h.sections.length===1?f=h.sections[0]:f=await ot(h.sections),await ge(f.items)};if(s)try{C=await E()}catch(h){if(K(h))throw h}else C=await E();if(s){let h;if(C){let f=`${d}/llms${C.docUrl}.txt`;h=await Oe({url:f})}else h=await Me({baseUrl:d,query:c.query});console.log(h)}else dr(C,d),v.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let P=Date.now()-n;try{await R.trackCommandOutcome(i,{command:"docs",status:"completed",properties:{query:c.query??null,item_id:C?.id??c.query??null,has_snippet:!!(C?.snippets&&C.snippets.length>0),raw_mode:s,duration_ms:P}})}catch(h){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",h)}}catch(a){if(K(a)){try{await R.trackCommandOutcome(i,{command:"docs",status:"cancelled",properties:{raw_mode:s,duration_ms:Date.now()-n}})}catch(c){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}s||v.outro(p(a.message)),process.exit(0)}try{await R.trackCommandFailure(i,{command:"docs",error:a,properties:{raw_mode:s,duration_ms:Date.now()-n}})}catch(c){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}if(s){let c=a instanceof Error?a.message:String(a);console.error(c),process.exit(1)}H(a,{defaultMessage:"\uBB38\uC11C \uC870\uD68C\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as U from"@clack/prompts";import{z as xe}from"zod";import wr from"dedent";var br=xe.object({cwd:xe.string(),yes:xe.boolean().optional(),default:xe.boolean().optional()}),nt=e=>{e.command("init","seed-design.json \uD30C\uC77C \uC0DD\uC131").option("-c, --cwd <cwd>","\uC791\uC5C5 \uB514\uB809\uD1A0\uB9AC. \uAE30\uBCF8\uAC12\uC740 \uD604\uC7AC \uB514\uB809\uD1A0\uB9AC.",{default:process.cwd()}).option("-y, --yes","\uBAA8\uB4E0 \uC9C8\uBB38\uC5D0 \uB300\uD574 \uAE30\uBCF8\uAC12\uC73C\uB85C \uB2F5\uBCC0\uD569\uB2C8\uB2E4.").option("--default","Deprecated. --yes\uC640 \uB3D9\uC77C\uD558\uAC8C \uAE30\uBCF8\uAC12\uC73C\uB85C \uC0DD\uC131\uD569\uB2C8\uB2E4.").action(async t=>{let r=Date.now(),n=B(t),o=typeof t?.cwd=="string"?t.cwd:process.cwd();U.intro("seed-design.json \uD30C\uC77C \uC0DD\uC131");try{let s=br.safeParse(t);if(!s.success)throw s.error;let i=s.data,a=i.yes||i.default,c=a?N:await Te(),{start:d,stop:y}=U.spinner();d("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC911...");let w=await(async()=>{try{return(await ye({cwd:i.cwd,config:c})).relativePath}catch(E){throw y("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC774 \uC911\uB2E8\uB410\uC5B4\uC694."),E}})();y(`seed-design.json \uD30C\uC77C\uC774 ${p(w)}\uC5D0 \uC0DD\uC131\uB410\uC5B4\uC694.`),U.log.info(p("seed-design add {component} \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD574\uBCF4\uC138\uC694!")),U.log.info(p("seed-design add \uBA85\uB839\uC5B4\uB85C \uCD94\uAC00\uD560 \uC218 \uC788\uB294 \uBAA8\uB4E0 \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.")),U.note(wr(`SEED Design CLI\uB294 \uAC1C\uC120\uC744 \uC704\uD574 \uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130\uB97C \uC218\uC9D1\uD574\uC694.
21
25
 
22
26
  \uBE44\uD65C\uC131\uD654\uD558\uB824\uBA74:
23
- \u2022 seed-design.json\uC5D0\uC11C ${a('"telemetry": false')}\uB85C \uC124\uC815
24
- \u2022 ${a("DISABLE_TELEMETRY=true")} \uD658\uACBD \uBCC0\uC218 \uC124\uC815
27
+ \u2022 seed-design.json\uC5D0\uC11C ${p('"telemetry": false')}\uB85C \uC124\uC815
28
+ \u2022 ${p("DISABLE_TELEMETRY=true")} \uD658\uACBD \uBCC0\uC218 \uC124\uC815
25
29
 
26
- \uC790\uC138\uD55C \uB0B4\uC6A9: https://seed-design.com/react/getting-started/cli/configuration#telemetry`),"Telemetry \uC548\uB0B4"),z.outro("\uC791\uC5C5\uC774 \uC644\uB8CC\uB410\uC5B4\uC694.");let h=Date.now()-s;try{await U.track(r.cwd,{event:"init",properties:{tsx:c.tsx,rsc:c.rsc,telemetry:c.telemetry,yes_option:i,duration_ms:h}})}catch(w){n&&console.error("[Telemetry] init tracking failed:",w)}}catch(o){L(o)&&(z.outro(a(o.message)),process.exit(0)),O(o,{defaultMessage:"seed-design.json \uD30C\uC77C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:n}),process.exit(1)}})};import*as D from"@clack/prompts";import{coerce as Is,valid as xs}from"semver";import{z as me}from"zod";var ke="@seed-design/",Ps=me.object({packageName:me.string().optional(),cwd:me.string(),baseUrl:me.string(),raw:me.boolean(),all:me.boolean()});function ks(e){return e.startsWith(ke)?e:`${ke}${e}`}function Ss(e){return e.replace(ke,"")}function Rs(e){let t=Z(e),s={...t.dependencies,...t.devDependencies,...t.peerDependencies,...t.optionalDependencies},n={};for(let[o,r]of Object.entries(s))o.startsWith(ke)&&r&&(n[o]=r);return n}function Es(e){let t=e.trim();if(t.startsWith("workspace:")&&(t=t.slice(10).trim()),t.startsWith("npm:")){let n=t.lastIndexOf("@");n>4&&(t=t.slice(n+1))}if(xs(t))return t;let s=Is(t);return s?s.version:null}async function xe({targetPackage:e,currentVersionSpec:t,baseUrl:s}){let n=Es(t);if(!n)throw new I({message:`${e}\uC758 \uBC84\uC804\uC744 \uD30C\uC2F1\uD560 \uC218 \uC5C6\uC5B4\uC694: ${t}`,hint:"package.json\uC5D0\uC11C \uBC84\uC804 \uD615\uC2DD\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694."});let o=await Ve(e);if(n===o)return{package:e,currentVersion:n,latestVersion:o,upToDate:!0,changelog:null};let r=Ss(e),i=await Le({baseUrl:s,packageSlug:r,version:n});return{package:e,currentVersion:n,latestVersion:o,upToDate:!1,changelog:i}}function at(e){e.error?console.error(`## ${e.package}
27
-
28
- Error: ${e.error}
29
- `):e.upToDate?console.log(`${e.package}@${e.currentVersion} is already up to date.
30
- `):(console.log(e.changelog),console.log(""))}function ct(e){e.error?D.log.error(`${a(e.package)}: ${e.error}`):e.upToDate?D.log.info(`${a(e.package)}: ${a(e.currentVersion)} \u2014 \uC774\uBBF8 \uCD5C\uC2E0 \uBC84\uC804\uC774\uC5D0\uC694.`):(D.log.info(`${a(e.package)}: ${a(e.currentVersion)} \u2192 ${a(e.latestVersion)}`),D.log.message(e.changelog??""),D.log.info(`\uC5C5\uADF8\uB808\uC774\uB4DC\uD558\uB824\uBA74: ${a(`bun add ${e.package}@${e.latestVersion}`)}`))}async function Pe(e,t,s){try{for(let n of t)await U.track(e,{event:"upgrade",properties:{package:n.package,current_version:n.currentVersion,latest_version:n.latestVersion,up_to_date:n.upToDate,duration_ms:Date.now()-s}})}catch{}}var pt=e=>{e.command("upgrade [package-name]","\uD328\uD0A4\uC9C0\uC758 \uD604\uC7AC \uBC84\uC804\uACFC \uCD5C\uC2E0 \uBC84\uC804 \uC0AC\uC774\uC758 \uBCC0\uACBD\uC0AC\uD56D\uC744 \uD655\uC778\uD569\uB2C8\uB2E4").option("-c, --cwd <cwd>","\uC791\uC5C5 \uB514\uB809\uD1A0\uB9AC. \uAE30\uBCF8\uAC12\uC740 \uD604\uC7AC \uB514\uB809\uD1A0\uB9AC\uC785\uB2C8\uB2E4.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","changelog\uB97C \uC870\uD68C\uD560 base URL\uC785\uB2C8\uB2E4.",{default:N}).option("--raw","UI \uC5C6\uC774 \uC21C\uC218 \uB9C8\uD06C\uB2E4\uC6B4\uB9CC \uCD9C\uB825\uD569\uB2C8\uB2E4. LLM \uD30C\uC774\uD504\uC5D0 \uC720\uC6A9\uD569\uB2C8\uB2E4.",{default:!1}).option("-a, --all","\uC124\uCE58\uB41C \uBAA8\uB4E0 @seed-design \uD328\uD0A4\uC9C0\uC758 \uBCC0\uACBD\uC0AC\uD56D\uC744 \uD655\uC778\uD569\uB2C8\uB2E4.",{default:!1}).example("seed-design upgrade").example("seed-design upgrade react").example("seed-design upgrade --all").example("seed-design upgrade --all --raw").action(async(t,s)=>{let n=Date.now(),o=K(s),r=Ps.safeParse({packageName:t,...s});r.success||(s.raw&&(console.error(r.error.message),process.exit(1)),D.intro("seed-design upgrade"),O(r.error,{defaultMessage:"\uC5C5\uADF8\uB808\uC774\uB4DC \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1));let{data:i}=r,{raw:c,all:m}=i;c||D.intro("seed-design upgrade");try{let p=Rs(i.cwd),y=Object.keys(p);if(y.length===0)throw new I({message:"\uD504\uB85C\uC81D\uD2B8\uC5D0 \uC124\uCE58\uB41C @seed-design \uD328\uD0A4\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.",hint:"`bun add @seed-design/react`\uB85C \uD328\uD0A4\uC9C0\uB97C \uC124\uCE58\uD574\uBCF4\uC138\uC694."});if(i.packageName&&m)throw new I({message:"\uD328\uD0A4\uC9C0\uBA85\uACFC --all \uC635\uC158\uC744 \uB3D9\uC2DC\uC5D0 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC5B4\uC694.",hint:"`seed-design upgrade --all` \uB610\uB294 `seed-design upgrade react` \uC911 \uD558\uB098\uB9CC \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694."});if(m){if(c){let C=await Promise.all(y.map(k=>xe({targetPackage:k,currentVersionSpec:p[k],baseUrl:i.baseUrl}).catch(_=>({package:k,currentVersion:p[k],latestVersion:"unknown",upToDate:!1,changelog:null,error:_ instanceof Error?_.message:String(_)}))));for(let k of C)at(k);await Pe(i.cwd,C,n);let x=C.some(k=>"error"in k&&!!k.error);process.exit(x?1:0)}let{start:d,stop:g}=D.spinner();d("\uBAA8\uB4E0 \uD328\uD0A4\uC9C0\uC758 \uBCC0\uACBD\uC0AC\uD56D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let $=await Promise.all(y.map(C=>xe({targetPackage:C,currentVersionSpec:p[C],baseUrl:i.baseUrl}).catch(x=>({package:C,currentVersion:p[C],latestVersion:"unknown",upToDate:!1,changelog:null,error:x instanceof Error?x.message:String(x)}))));g("\uBCC0\uACBD\uC0AC\uD56D\uC744 \uAC00\uC838\uC654\uC5B4\uC694.");for(let C of $)ct(C);D.outro("\uC644\uB8CC\uD588\uC5B4\uC694."),await Pe(i.cwd,$,n);let P=$.some(C=>"error"in C&&!!C.error);process.exit(P?1:0)}let h;if(i.packageName){if(h=ks(i.packageName),!p[h])throw new I({message:`${a(h)}: \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694.`,hint:`\uC124\uCE58\uB41C \uD328\uD0A4\uC9C0: ${y.map(d=>a(d)).join(", ")}`})}else{if(c)throw new I({message:"--raw \uBAA8\uB4DC\uC5D0\uC11C\uB294 \uD328\uD0A4\uC9C0\uBA85 \uB610\uB294 --all \uC635\uC158\uC774 \uD544\uC694\uD574\uC694.",hint:"\uC608: `seed-design upgrade react --raw` \uB610\uB294 `seed-design upgrade --all --raw`"});if(y.length===1)h=y[0];else{let d=await D.select({message:"\uBCC0\uACBD\uC0AC\uD56D\uC744 \uD655\uC778\uD560 \uD328\uD0A4\uC9C0\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:y.map(g=>({label:g,value:g,hint:p[g]}))});if(D.isCancel(d))throw new E;h=d}}if(c){let d=await xe({targetPackage:h,currentVersionSpec:p[h],baseUrl:i.baseUrl});at(d),await Pe(i.cwd,[d],n),process.exit(0)}let{start:w,stop:R}=D.spinner();w("\uCD5C\uC2E0 \uBC84\uC804\uC744 \uD655\uC778\uD558\uACE0 \uC788\uC5B4\uC694...");let f;try{f=await xe({targetPackage:h,currentVersionSpec:p[h],baseUrl:i.baseUrl}),R("\uBCC0\uACBD\uC0AC\uD56D\uC744 \uAC00\uC838\uC654\uC5B4\uC694.")}catch(d){throw R("\uBCC0\uACBD\uC0AC\uD56D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),d}ct(f),D.outro("\uC644\uB8CC\uD588\uC5B4\uC694."),await Pe(i.cwd,[f],n)}catch(p){if(L(p)&&(c||D.outro(a(p.message)),process.exit(0)),c){let y=p instanceof Error?p.message:String(p);console.error(y),process.exit(1)}O(p,{defaultMessage:"\uC5C5\uADF8\uB808\uC774\uB4DC \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import{cac as vs}from"cac";var js="seed-design",W=vs(js);async function Ts(){let e=Z();W.option("--verbose","\uC624\uB958 \uC0C1\uC138 \uC815\uBCF4\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4."),Ze(W),et(W),st(W),ot(W),nt(W),pt(W),W.version(e.version||"1.0.0","-v, --version"),W.help(),W.parse()}Ts();
30
+ \uC790\uC138\uD55C \uB0B4\uC6A9: https://seed-design.com/react/getting-started/cli/configuration#telemetry`),"Telemetry \uC548\uB0B4"),U.outro("\uC791\uC5C5\uC774 \uC644\uB8CC\uB410\uC5B4\uC694.");let C=Date.now()-r;try{await R.trackCommandOutcome(i.cwd,{command:"init",status:"completed",properties:{tsx:c.tsx,rsc:c.rsc,telemetry:c.telemetry,yes_option:a,duration_ms:C}})}catch(E){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",E)}}catch(s){if(K(s)){try{await R.trackCommandOutcome(o,{command:"init",status:"cancelled",properties:{duration_ms:Date.now()-r}})}catch(i){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",i)}U.outro(p(s.message)),process.exit(0)}try{await R.trackCommandFailure(o,{command:"init",error:s,properties:{duration_ms:Date.now()-r}})}catch(i){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",i)}H(s,{defaultMessage:"seed-design.json \uD30C\uC77C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:n}),process.exit(1)}})};import{cac as Cr}from"cac";var $r="seed-design",X=Cr($r);async function Ir(){let e=ce();X.option("--verbose","\uC624\uB958 \uC0C1\uC138 \uC815\uBCF4\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4."),Ze(X),et(X),rt(X),it(X),nt(X),X.version(e.version||"1.0.0","-v, --version"),X.help(),X.parse()}Ir();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seed-design/cli",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -56,6 +56,7 @@ export const addAllCommand = (cli: CAC) => {
56
56
  .action(async (registryIds, opts) => {
57
57
  const startTime = Date.now();
58
58
  const verbose = isVerboseMode(opts);
59
+ const trackCwd = typeof opts?.cwd === "string" ? opts.cwd : process.cwd();
59
60
  p.intro("seed-design add-all");
60
61
 
61
62
  try {
@@ -227,8 +228,9 @@ export const addAllCommand = (cli: CAC) => {
227
228
  // add-all 성공 이벤트 추적
228
229
  const duration = Date.now() - startTime;
229
230
  try {
230
- await analytics.track(options.cwd, {
231
- event: "add-all",
231
+ await analytics.trackCommandOutcome(options.cwd, {
232
+ command: "add-all",
233
+ status: "completed",
232
234
  properties: {
233
235
  registries: selectedRegistryIds,
234
236
  items_count: itemKeys.length,
@@ -239,15 +241,42 @@ export const addAllCommand = (cli: CAC) => {
239
241
  });
240
242
  } catch (telemetryError) {
241
243
  if (verbose) {
242
- console.error("[Telemetry] add-all tracking failed:", telemetryError);
244
+ console.error("[Telemetry] add-all 이벤트 전송에 실패했어요:", telemetryError);
243
245
  }
244
246
  }
245
247
  } catch (error) {
246
248
  if (isCliCancelError(error)) {
249
+ try {
250
+ await analytics.trackCommandOutcome(trackCwd, {
251
+ command: "add-all",
252
+ status: "cancelled",
253
+ properties: {
254
+ duration_ms: Date.now() - startTime,
255
+ },
256
+ });
257
+ } catch (telemetryError) {
258
+ if (verbose) {
259
+ console.error("[Telemetry] add-all 이벤트 전송에 실패했어요:", telemetryError);
260
+ }
261
+ }
247
262
  p.outro(highlight(error.message));
248
263
  process.exit(0);
249
264
  }
250
265
 
266
+ try {
267
+ await analytics.trackCommandFailure(trackCwd, {
268
+ command: "add-all",
269
+ error,
270
+ properties: {
271
+ duration_ms: Date.now() - startTime,
272
+ },
273
+ });
274
+ } catch (telemetryError) {
275
+ if (verbose) {
276
+ console.error("[Telemetry] add-all 이벤트 전송에 실패했어요:", telemetryError);
277
+ }
278
+ }
279
+
251
280
  handleCliError(error, {
252
281
  defaultMessage: "추가에 실패했어요.",
253
282
  defaultHint: "`--verbose` 옵션으로 상세 오류를 확인해보세요.",
@@ -55,6 +55,7 @@ export const addCommand = (cli: CAC) => {
55
55
  .action(async (itemIds, opts) => {
56
56
  const startTime = Date.now();
57
57
  const verbose = isVerboseMode(opts);
58
+ const trackCwd = typeof opts?.cwd === "string" ? opts.cwd : process.cwd();
58
59
  p.intro("seed-design add");
59
60
 
60
61
  try {
@@ -248,8 +249,9 @@ export const addCommand = (cli: CAC) => {
248
249
  });
249
250
 
250
251
  try {
251
- await analytics.track(options.cwd, {
252
- event: "add",
252
+ await analytics.trackCommandOutcome(options.cwd, {
253
+ command: "add",
254
+ status: "completed",
253
255
  properties: {
254
256
  items_count: filteredItemKeys.length,
255
257
  registries: Array.from(uniqueRegistries),
@@ -260,15 +262,42 @@ export const addCommand = (cli: CAC) => {
260
262
  });
261
263
  } catch (telemetryError) {
262
264
  if (verbose) {
263
- console.error("[Telemetry] add tracking failed:", telemetryError);
265
+ console.error("[Telemetry] add 이벤트 전송에 실패했어요:", telemetryError);
264
266
  }
265
267
  }
266
268
  } catch (error) {
267
269
  if (isCliCancelError(error)) {
270
+ try {
271
+ await analytics.trackCommandOutcome(trackCwd, {
272
+ command: "add",
273
+ status: "cancelled",
274
+ properties: {
275
+ duration_ms: Date.now() - startTime,
276
+ },
277
+ });
278
+ } catch (telemetryError) {
279
+ if (verbose) {
280
+ console.error("[Telemetry] add 이벤트 전송에 실패했어요:", telemetryError);
281
+ }
282
+ }
268
283
  p.outro(highlight(error.message));
269
284
  process.exit(0);
270
285
  }
271
286
 
287
+ try {
288
+ await analytics.trackCommandFailure(trackCwd, {
289
+ command: "add",
290
+ error,
291
+ properties: {
292
+ duration_ms: Date.now() - startTime,
293
+ },
294
+ });
295
+ } catch (telemetryError) {
296
+ if (verbose) {
297
+ console.error("[Telemetry] add 이벤트 전송에 실패했어요:", telemetryError);
298
+ }
299
+ }
300
+
272
301
  handleCliError(error, {
273
302
  defaultMessage: "추가에 실패했어요.",
274
303
  defaultHint: "`--verbose` 옵션으로 상세 오류를 확인해보세요.",
@@ -123,6 +123,7 @@ export const compatCommand = (cli: CAC) => {
123
123
  .action(async (itemIds, opts) => {
124
124
  const startTime = Date.now();
125
125
  const verbose = isVerboseMode(opts);
126
+ const trackCwd = typeof opts?.cwd === "string" ? opts.cwd : process.cwd();
126
127
  p.intro("seed-design compat");
127
128
 
128
129
  try {
@@ -202,6 +203,20 @@ export const compatCommand = (cli: CAC) => {
202
203
  })();
203
204
 
204
205
  if (!resolvedTargetItemKeys.length) {
206
+ try {
207
+ await analytics.trackCommandOutcome(options.cwd, {
208
+ command: "compat",
209
+ status: "completed",
210
+ result: "empty",
211
+ properties: {
212
+ duration_ms: Date.now() - startTime,
213
+ },
214
+ });
215
+ } catch (telemetryError) {
216
+ if (verbose) {
217
+ console.error("[Telemetry] compat 이벤트 전송에 실패했어요:", telemetryError);
218
+ }
219
+ }
205
220
  p.outro("검사할 스니펫이 없어요.");
206
221
  process.exit(0);
207
222
  }
@@ -219,8 +234,10 @@ export const compatCommand = (cli: CAC) => {
219
234
  p.outro("모든 스니펫이 현재 @seed-design/react, @seed-design/css와 호환돼요.");
220
235
 
221
236
  try {
222
- await analytics.track(options.cwd, {
223
- event: "compat",
237
+ await analytics.trackCommandOutcome(options.cwd, {
238
+ command: "compat",
239
+ status: "completed",
240
+ result: "compatible",
224
241
  properties: {
225
242
  checked_items_count: compatibilityReport.checkedItemKeys.length,
226
243
  incompatible_items_count: 0,
@@ -229,7 +246,7 @@ export const compatCommand = (cli: CAC) => {
229
246
  });
230
247
  } catch (telemetryError) {
231
248
  if (verbose) {
232
- console.error("[Telemetry] compat tracking failed:", telemetryError);
249
+ console.error("[Telemetry] compat 이벤트 전송에 실패했어요:", telemetryError);
233
250
  }
234
251
  }
235
252
 
@@ -246,8 +263,10 @@ export const compatCommand = (cli: CAC) => {
246
263
  p.outro("호환성 이슈가 있어요.");
247
264
 
248
265
  try {
249
- await analytics.track(options.cwd, {
250
- event: "compat",
266
+ await analytics.trackCommandOutcome(options.cwd, {
267
+ command: "compat",
268
+ status: "completed",
269
+ result: "incompatible",
251
270
  properties: {
252
271
  checked_items_count: compatibilityReport.checkedItemKeys.length,
253
272
  incompatible_items_count: new Set(
@@ -259,17 +278,44 @@ export const compatCommand = (cli: CAC) => {
259
278
  });
260
279
  } catch (telemetryError) {
261
280
  if (verbose) {
262
- console.error("[Telemetry] compat tracking failed:", telemetryError);
281
+ console.error("[Telemetry] compat 이벤트 전송에 실패했어요:", telemetryError);
263
282
  }
264
283
  }
265
284
 
266
285
  process.exit(1);
267
286
  } catch (error) {
268
287
  if (isCliCancelError(error)) {
288
+ try {
289
+ await analytics.trackCommandOutcome(trackCwd, {
290
+ command: "compat",
291
+ status: "cancelled",
292
+ properties: {
293
+ duration_ms: Date.now() - startTime,
294
+ },
295
+ });
296
+ } catch (telemetryError) {
297
+ if (verbose) {
298
+ console.error("[Telemetry] compat 이벤트 전송에 실패했어요:", telemetryError);
299
+ }
300
+ }
269
301
  p.outro(highlight(error.message));
270
302
  process.exit(0);
271
303
  }
272
304
 
305
+ try {
306
+ await analytics.trackCommandFailure(trackCwd, {
307
+ command: "compat",
308
+ error,
309
+ properties: {
310
+ duration_ms: Date.now() - startTime,
311
+ },
312
+ });
313
+ } catch (telemetryError) {
314
+ if (verbose) {
315
+ console.error("[Telemetry] compat 이벤트 전송에 실패했어요:", telemetryError);
316
+ }
317
+ }
318
+
273
319
  handleCliError(error, {
274
320
  defaultMessage: "호환성 검사에 실패했어요.",
275
321
  defaultHint: "`--verbose` 옵션으로 상세 오류를 확인해보세요.",