@seed-design/cli 1.4.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/index.mjs CHANGED
@@ -1,30 +1,30 @@
1
1
  #!/usr/bin/env node
2
- import*as le from"@clack/prompts";import{cosmiconfig as $t}from"cosmiconfig";import{z as ce}from"zod";import*as Z from"@clack/prompts";import{ZodError as ft}from"zod";import dt from"picocolors";var l=e=>dt.cyan(e);var $=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}},D=class extends Error{constructor(t="\uC791\uC5C5\uC774 \uCDE8\uC18C\uB410\uC5B4\uC694."){super(t),this.name="CliCancelError"}};function G(e){return e instanceof D}function W(e){return!e||typeof e!="object"||!("verbose"in e)?!1:e.verbose===!0}function gt(e,t){if(e instanceof $)return{reason:e.message,hint:e.hint??t,details:e.details,stack:ut(e.cause??e)};if(e instanceof ft){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 ut(e){if(e instanceof Error)return e.stack}function Y(e,{defaultMessage:t,defaultHint:r,verbose:n=!1}){let o=gt(e,r);Z.log.error(t),Z.log.error(`\uC6D0\uC778: ${o.reason}`);for(let i of o.details)Z.log.info(i);o.hint&&Z.log.info(`\uD574\uACB0 \uD78C\uD2B8: ${o.hint}`),n&&o.stack&&(Z.log.message(l(`
3
- [verbose] stack trace`)),Z.log.message(o.stack)),Z.outro(l("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as Q from"@clack/prompts";import Ct from"fs-extra";import je from"path";import yt from"findup-sync";import ht from"fs-extra";var wt="package.json";function bt(e=process.cwd()){let t=yt(wt,{cwd:e});if(!t)throw new Error("No package.json file found in the project.");return t}function se(e=process.cwd()){let t=bt(e);return ht.readJSONSync(t)}var H={rsc:!1,tsx:!0,framework:"react",path:"./seed-design",telemetry:!0};function Ee(e){try{let t=se(e),r={...t.dependencies,...t.devDependencies,...t.peerDependencies};if("@lynx-js/react"in r||"@seed-design/lynx-react"in r)return"lynx"}catch{}return"react"}async function Ae(e){let t=Ee(e);return await Q.group({tsx:()=>Q.confirm({message:`${l("TypeScript")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:H.tsx}),rsc:()=>Q.confirm({message:`${l("React Server Components")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:H.rsc}),framework:()=>Q.select({message:`\uC5B4\uB5A4 ${l("\uD504\uB808\uC784\uC6CC\uD06C")}\uB97C \uC0AC\uC6A9\uD558\uC2DC\uB098\uC694?`,initialValue:t,options:[{value:"react",label:"React"},{value:"lynx",label:"Lynx"}]}),path:()=>Q.text({message:`${l("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:H.path,defaultValue:H.path,placeholder:H.path}),telemetry:()=>Q.confirm({message:`\uAC1C\uC120\uC744 \uC704\uD574 ${l("\uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130")}\uB97C \uC218\uC9D1\uD560\uAE4C\uC694?`,initialValue:H.telemetry})},{onCancel:()=>{throw new D}})}async function Ce({cwd:e,config:t}){let r=je.resolve(e,"seed-design.json");return await Ct.writeFile(r,`${JSON.stringify(t,null,2)}
4
- `,"utf-8"),{relativePath:je.relative(process.cwd(),r),targetPath:r}}var De="seed-design",xt=$t(De,{searchPlaces:[`${De}.json`]}),Oe=ce.object({$schema:ce.string().optional(),rsc:ce.coerce.boolean().default(!1),tsx:ce.coerce.boolean().default(!0),framework:ce.enum(["react","lynx"]).default("react"),path:ce.string(),telemetry:ce.coerce.boolean().optional().default(!0)}).strict();async function $e(e){let t=await oe(e);if(t)return t;le.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let r=await le.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(le.isCancel(r)||!r)throw new D;try{return await Ce({cwd:e,config:H}),le.log.message("seed-design.json \uD30C\uC77C\uC774 \uC0DD\uC131\uB410\uC5B4\uC694."),Oe.parse(H)}catch(n){throw new $({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 oe(e){let t=await xt.search(e);if(!t||t.isEmpty)return null;try{return Oe.parse(t.config)}catch(r){throw new $({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 xe({selectedItemKeys:e,publicRegistries:t}){let r=[],n=new Set;function o(i,s){let a=r.find(c=>c.registryId===i);if(!a?.items.some(c=>c.id===s.id)){if(a?a.items.push(s):r.push({registryId:i,items:[s]}),s.dependencies?.length)for(let c of s.dependencies)n.add(c);if(s.innerDependencies?.length)for(let c of s.innerDependencies)for(let m of c.itemIds){let y=t.find(g=>g.id===c.registryId)?.items.find(g=>g.id===m);if(!y)throw new Error(`Cannot find dependency item: ${c.registryId}:${m}`);o(c.registryId,y)}}}for(let i of e){let[s,...a]=i.split(":"),c=a.join(":");if(!s||!c)throw new Error(`Invalid snippet format: "${i}"`);let m=t.find(y=>y.id===s)?.items.find(y=>y.id===c);if(!m)throw new Error(`Cannot find snippet: "${i}"`);o(s,m)}return{registryItemsToAdd:r,npmDependenciesToAdd:n}}import*as ve from"@clack/prompts";import{z as f}from"zod";var Re=f.object({id:f.string(),description:f.string().optional(),deprecated:f.boolean().optional(),hideFromCLICatalog:f.boolean().optional(),dependencies:f.array(f.string()).optional(),innerDependencies:f.array(f.object({registryId:f.string(),itemIds:f.array(f.string())})).optional(),snippets:f.array(f.object({path:f.string(),dependencies:f.record(f.string(),f.string()).optional(),content:f.string()}))}),Te=f.object({id:f.string(),hideFromCLICatalog:f.boolean().optional(),items:f.array(Re.omit({snippets:!0}).extend({snippets:f.array(f.object({path:f.string(),dependencies:f.record(f.string(),f.string()).optional()}))}))}),Me=f.array(f.object({id:f.string()})),It=f.object({label:f.string(),path:f.string()}),kt=f.object({id:f.string(),title:f.string(),description:f.string().optional(),docUrl:f.string(),deprecated:f.boolean().optional(),snippetKey:f.string().optional(),snippets:f.array(It).optional()}),Pt=f.object({id:f.string(),label:f.string(),items:f.array(kt)}),St=f.object({id:f.string(),label:f.string(),sections:f.array(Pt)}),Le=f.object({categories:f.array(St)});var Et=1e4;async function Fe(e,t=Et){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 $({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 _e({baseUrl:e}){let t=await fetch(`${e}/__docs__/index.json`);if(!t.ok)throw new $({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:i}=Le.safeParse(r);if(!n)throw new $({message:`\uBB38\uC11C \uBAA9\uB85D \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694: ${i?.message}`});return o}async function pe({baseUrl:e,framework:t}){let r=await fetch(`${e}/__registry__/${t}/index.json`);if(!r.ok)throw new Error(`Failed to fetch registries: ${r.status} ${r.statusText}`);let n=await r.json(),{success:o,data:i,error:s}=Me.safeParse(n);if(!o)throw new Error(`Failed to parse registries: ${s?.message}`);return i}async function de({baseUrl:e,framework:t,registryId:r}){let n=await fetch(`${e}/__registry__/${t}/${r}/index.json`);if(!n.ok)throw new Error(`Failed to fetch ${r} registry: ${n.status} ${n.statusText}`);let o=await n.json(),{success:i,data:s,error:a}=Te.safeParse(o);if(!i)throw new Error(`Failed to parse ${r} registry: ${a?.message}`);return s}async function Rt({baseUrl:e,framework:t,registryId:r,registryItemId:n}){let o=await fetch(`${e}/__registry__/${t}/${r}/${n}.json`);if(!o.ok)throw new Error(`Failed to fetch ${n}: ${o.status} ${o.statusText}`);let i=await o.json(),{success:s,data:a,error:c}=Re.safeParse(i);if(!s)throw new Error(`Failed to parse ${n}: ${c?.message}`);return a}async function Ue({url:e}){let t=await Fe(e);if(!t.ok)throw new $({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 Ke({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 i of n){let s;try{s=await Fe(i)}catch(a){o=a;continue}if(s.ok)return s.text();if(s.status===404){o=new $({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 $({message:`llms.txt \uC694\uCCAD\uC774 \uC2E4\uD328\uD588\uC5B4\uC694: ${s.status} ${s.statusText}`,hint:`URL: ${i}`})}throw o??new $({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(i=>` - ${i}`).join(`
8
- `)}`})}async function Ne({baseUrl:e,framework:t,registryId:r,registryItemIds:n}){return await Promise.all(n.map(async o=>{try{return await Rt({baseUrl:e,framework:t,registryId:r,registryItemId:o})}catch(i){let s=await fetch(`${e}/__registry__/${t}/${r}/index.json`);if(!s.ok)throw new Error(`${r} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${s.status} ${s.statusText}`);let a=await s.json(),{success:c,data:m}=Te.safeParse(a);throw c?(ve.log.error(`${o} \uC2A4\uB2C8\uD3AB\uC774 ${r} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC5C6\uC5B4\uC694.`),ve.log.info(`${r} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC874\uC7AC\uD558\uB294 \uC2A4\uB2C8\uD3AB:
9
- ${m.items.map(y=>y.id).join(`
10
- `)}`),i):new Error(`Failed to parse registry index for ${r}`)}}))}import{promises as Dt}from"fs";import{tmpdir as Ot}from"os";import Be from"path";import{transformFromAstSync as Tt}from"@babel/core";import vt from"@babel/plugin-transform-typescript";import*as Ie from"recast";import{parse as _t}from"@babel/parser";var jt={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"]},ze=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let n=Ie.parse(r,{parser:{parse:i=>_t(i,jt)}}),o=Tt(n,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[vt],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return Ie.print(o.ast).code};import{SyntaxKind as At}from"ts-morph";var Ve=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(At.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 i=r.getText(),s=r.getFullText();if(i.trim()===s.trim())return e;let c=s.replace(i,"").replace(/^\s*\n/,"").replace(/\n\s*$/,"");return r.replaceWithText(c),e};import{Project as Mt,ScriptKind as Lt}from"ts-morph";var Ft=[Ve],Ut=new Mt({compilerOptions:{}});async function Kt(e){let t=await Dt.mkdtemp(Be.join(Ot(),"seed-design-"));return Be.join(t,e)}async function qe(e){let t=await Kt(e.filename),r=Ut.createSourceFile(t,e.raw,{scriptKind:Lt.TSX});for(let n of Ft)n({sourceFile:r,...e});return await ze({sourceFile:r,...e})}import*as J from"@clack/prompts";import fe from"fs-extra";import X from"path";import{createPatch as Nt}from"diff";import zt from"@npmcli/disparity-colors";async function ke({registryItemsToAdd:e,rootPath:t,cwd:r,baseUrl:n,framework:o,config:i,onDiff:s}){let a=[];for(let{registryId:c,items:m}of e){let y=X.join(t,c);fe.ensureDirSync(y);let g=await Ne({baseUrl:n,framework:o,registryId:c,registryItemIds:m.map(u=>u.id)});for(let{id:u,snippets:k}of g){let I=await Promise.all(k.map(async E=>{let C=await qe({filename:E.path,config:i,raw:E.content}),h=X.join(y,E.path);return i.tsx||(h=h.replace(/\.tsx$/,".jsx"),h=h.replace(/\.ts$/,".js")),{filePath:h,content:C,relativePath:X.relative(r,h),name:`${c}:${u}`}})),S=[];for(let E of I){let{filePath:C,content:h,relativePath:w}=E;if(await fe.ensureDir(X.dirname(C)),fe.existsSync(C)){let b=await fe.readFile(C,"utf-8");if(b===h){J.log.info(`${l(w)}: \uC774\uBBF8 \uCD5C\uC2E0 \uC0C1\uD0DC\uC608\uC694.`);continue}let P=X.basename(C),U=X.extname(C),B=X.basename(C,U),R=Date.now(),q=`legacy-${B}-${R}${U}`,x=await(async()=>{if(s)return s;let p=Nt(w,b,h),d=zt(p);return J.log.message(`
11
- ${l(w)}: \uD604\uC7AC \uD30C\uC77C\uACFC \uBC1B\uC73C\uB824\uB294 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC774 \uB2EC\uB77C\uC694.
12
- `),J.log.message(d),J.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:`${P} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${q}\uC73C\uB85C \uC62E\uAE30\uACE0 ${P} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(J.isCancel(x)||x==="skip"){J.log.info(`${l(w)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(x==="backup"){let p=X.dirname(C),d=X.join(p,q);await fe.rename(C,d),J.log.info(`${l(w)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${l(X.relative(r,d))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await fe.writeFile(C,h),S.push(E)}if(S.length>0){let E=S.map(({name:C,relativePath:h})=>({name:C,path:h}));a.push(...E),J.log.success(`${l(`${c}:${u}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${l(E.map(C=>C.path).join(", "))}`)}}}}import*as j from"@clack/prompts";import mr from"path";import{z as ne}from"zod";var K="https://seed-design.io";import*as He from"@clack/prompts";import{execa as Bt}from"execa";import{detect as Vt}from"@antfu/ni";async function Ge(e){let t=await Vt({programmatic:!0,cwd:e});return t==="yarn@berry"?"yarn":t==="pnpm@6"?"pnpm":t==="bun"?"bun":t==="deno"?"deno":t??"npm"}async function Pe({cwd:e,deps:t,dev:r=!1}){let{start:n,stop:o}=He.spinner(),i=await Ge(e),a={...se(e).dependencies},c=new Set(t.filter(I=>!a[I])),m=new Set(t.filter(I=>a[I]));if(!c.size)return{installed:new Set,filtered:c};n("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let u=[i==="npm"?"install":"add",r?"-D":null,...c].filter(I=>!!I),k=`${i} ${u.join(" ")}`;try{await Bt(i,u,{cwd:e})}catch(I){throw o("\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."),new $({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: ${k}`],cause:I})}return o("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:c,filtered:m}}import{randomUUID as qt}from"node:crypto";import*as We from"@clack/prompts";var Gt="seed_cli";async function Ht(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await oe(e))?.telemetry===!1)return!1}catch{}return!0}function Jt(){return qt()}var Wt=Jt(),Je=!1;function Ye(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Yt(e){return e instanceof Error&&e.name?e.name:typeof e=="object"&&e!==null?e.constructor?.name??"Object":typeof e}async function Qe(e,{event:t,properties:r={}}){if(!await Ht(e))return;let o=`${Gt}.${t}`;Je||(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)"),Je=!0);try{let i="https://us.i.posthog.com/capture",s={"Content-Type":"application/json"},a={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:o,distinct_id:Wt,properties:{...r,$process_person_profile:!1},timestamp:new Date().toISOString()},c=new AbortController,m=setTimeout(()=>c.abort(),5e3);try{await fetch(i,{method:"POST",headers:s,body:JSON.stringify(a),signal:c.signal})}finally{clearTimeout(m)}}catch{}}async function Xe(e,{command:t,status:r,result:n,properties:o={}}){await Qe(e,{event:t,properties:Ye({status:r,result:n,...o})})}async function Qt(e,{command:t,error:r,result:n,properties:o={}}){await Xe(e,{command:t,status:"failed",result:n,properties:Ye({error_type:Yt(r),...o})})}var _={track:Qe,trackCommandFailure:Qt,trackCommandOutcome:Xe};import*as me from"@clack/prompts";import Xt from"fs-extra";import Zt from"path";import{intersects as er,satisfies as tr,valid as et,validRange as tt}from"semver";var rr=["@seed-design/react","@seed-design/css"],sr=["@seed-design/lynx-react","@seed-design/lynx-css"];function ie(e){return e==="lynx"?sr:rr}var Ze="workspace:",or="npm:";function ge(e,t="react"){try{let r=se(e),n={...r.dependencies,...r.devDependencies,...r.peerDependencies,...r.optionalDependencies},o={},i=ie(t);for(let s of i){let a=n[s];typeof a=="string"&&(o[s]=a)}return o}catch{return{}}}function ue({publicRegistries:e,itemKeys:t,projectPackageVersions:r,framework:n="react"}){let o=Array.from(new Set(t)),i=new Map(e.flatMap(c=>c.items.map(m=>[`${c.id}:${m.id}`,m]))),s=[],a=ie(n);for(let c of o){let m=i.get(c);if(!m)continue;let y=ir(m,n);for(let g of a){let u=Array.from(y[g]??[]);if(!u.length)continue;let k=r[g];if(!k){s.push({itemKey:c,packageName:g,requiredRanges:u,type:"missing-package"});continue}let I=nr(k);if(!I){s.push({itemKey:c,packageName:g,requiredRanges:u,installedVersionSpec:k,type:"invalid-version-spec"});continue}u.every(E=>ar({currentVersionSpec:I,requiredRange:E}))||s.push({itemKey:c,packageName:g,requiredRanges:u,installedVersionSpec:k,type:"incompatible-version"})}}return{checkedItemKeys:o,projectPackageVersions:r,issues:s}}function ye({report:e,title:t,framework:r="react"}){if(!e.issues.length)return;let n=ie(r);me.log.warn(t),me.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${n.map(i=>`${i}@${l(e.projectPackageVersions[i]??"\uBBF8\uC124\uCE58")}`).join(", ")}`);let o=new Map;for(let i of e.issues){let s=o.get(i.itemKey)??[];s.push(i),o.set(i.itemKey,s)}for(let[i,s]of o.entries()){me.log.warn(l(i));for(let a of s){let c=a.requiredRanges.join(" | ");if(a.type==="missing-package"){me.log.info(` - ${a.packageName}: \uD328\uD0A4\uC9C0\uAC00 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694. \uD544\uC694 \uBC94\uC704: ${c}`);continue}if(a.type==="invalid-version-spec"){me.log.info(` - ${a.packageName}: \uD604\uC7AC \uBC84\uC804 \uD615\uC2DD\uC744 \uD574\uC11D\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694 (${a.installedVersionSpec}). \uD544\uC694 \uBC94\uC704: ${c}`);continue}me.log.info(` - ${a.packageName}: \uD604\uC7AC ${a.installedVersionSpec}, \uD544\uC694 \uBC94\uC704 ${c}`)}}}function rt({publicRegistries:e,rootPath:t}){let r=[];for(let n of e)for(let o of n.items)o.snippets.some(s=>cr(s.path).some(a=>Xt.existsSync(Zt.join(t,n.id,a))))&&r.push(`${n.id}:${o.id}`);return r}function ir(e,t="react"){let r=ie(t),n=Object.fromEntries(r.map(o=>[o,new Set]));for(let o of e.snippets)for(let[i,s]of Object.entries(o.dependencies??{}))lr(i,t)&&n[i].add(s);return n}function nr(e){let t=e.trim();if(t.startsWith(Ze)&&(t=t.slice(Ze.length).trim()),t.startsWith(or)){let r=t.split("@").at(-1);if(!r)return null;t=r}return!t||t==="*"?null:et(t)||tt(t)?t:null}function ar({currentVersionSpec:e,requiredRange:t}){let r=tt(t);return r?et(e)?tr(e,r,{includePrerelease:!0}):er(e,r,{includePrerelease:!0}):!1}function cr(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 lr(e,t="react"){return ie(t).includes(e)}var pr=ne.object({itemIds:ne.array(ne.string()).optional(),all:ne.boolean(),cwd:ne.string(),baseUrl:ne.string().default(K),framework:ne.enum(["react","lynx"]).optional(),onDiff:ne.enum(["overwrite","backup"]).optional()}),st=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:K}).option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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=W(r),i=typeof r?.cwd=="string"?r.cwd:process.cwd();j.intro("seed-design add");try{let s=pr.safeParse({itemIds:t,...r});if(!s.success)throw s.error;let{data:{all:a,...c}}=s;if(a)throw new $({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,y=c.baseUrl,g=await $e(m),u=c.framework??g.framework,k=mr.resolve(m,g.path),{start:I,stop:S}=j.spinner();I("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let E=await(async()=>{try{let p=await Promise.all((await pe({baseUrl:y,framework:u})).map(async({id:d})=>de({baseUrl:y,framework:u,registryId:d})));return S("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),p}catch(p){throw S("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),p}})(),C=await(async()=>{if(c.itemIds?.length)return c.itemIds;let p=await j.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:E.filter(({hideFromCLICatalog:d})=>!d).flatMap(({id:d,items:T})=>T.filter(({hideFromCLICatalog:M})=>!M).sort((M,v)=>M.id.localeCompare(v.id)).map(({id:M,description:v,deprecated:L})=>({label:`${L?"(deprecated) ":""}${l(d)}:${M}`,value:`${d}:${M}`,hint:v,deprecated:L,registryItemCount:T.length}))).sort((d,T)=>d.deprecated!==T.deprecated?d.deprecated?1:-1:T.registryItemCount-d.registryItemCount)});if(j.isCancel(p))throw new D;return p})();if(!C?.length)throw new D("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694.");j.log.message(`\uC120\uD0DD\uB41C \uD56D\uBAA9: ${l(C.join(", "))}`);let h=[];for(let p of C){let[d,...T]=p.split(":"),M=T.join(":");if(!d||!M)throw new $({message:`${l(p)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${l("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let v=E.find(L=>L.id===d)?.items.find(L=>L.id===M);if(!v)throw new $({message:`${l(p)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(v.deprecated){let L=await j.confirm({message:`${l(v.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(j.isCancel(L))throw new D;if(L===!1){j.log.info(`${l(v.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}h.push(p)}let{registryItemsToAdd:w,npmDependenciesToAdd:b}=xe({selectedItemKeys:h,publicRegistries:E}),P=ue({publicRegistries:E,itemKeys:w.flatMap(({registryId:p,items:d})=>d.map(T=>`${p}:${T.id}`)),projectPackageVersions:ge(c.cwd,u),framework:u});ye({report:P,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.",framework:u}),j.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${l(w.map(p=>p.items.map(d=>`${p.registryId}:${d.id}`).join(", ")).join(", ")||"\uC5C6\uC74C")}
2
+ import*as me from"@clack/prompts";import{cosmiconfig as kt}from"cosmiconfig";import{z as le}from"zod";import*as te from"@clack/prompts";import{ZodError as yt}from"zod";import ut from"picocolors";var l=e=>ut.cyan(e);var k=class extends Error{hint;details;constructor({message:r,hint:t,details:i=[],cause:s}){super(r,{cause:s}),this.name="CliError",this.hint=t,this.details=i}},D=class extends Error{constructor(r="\uC791\uC5C5\uC774 \uCDE8\uC18C\uB410\uC5B4\uC694."){super(r),this.name="CliCancelError"}};function q(e){return e instanceof D}function J(e){return!e||typeof e!="object"||!("verbose"in e)?!1:e.verbose===!0}function ht(e,r){if(e instanceof k)return{reason:e.message,hint:e.hint??r,details:e.details,stack:wt(e.cause??e)};if(e instanceof yt){let t=e.issues.map(i=>`${i.path.join(".")||"(root)"}: ${i.message}`);return{reason:"\uC785\uB825\uAC12 \uB610\uB294 \uC124\uC815 \uD30C\uC77C \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:r,details:t,stack:e.stack}}if(e instanceof Error){let t=e,i=[];return(t.escapedCommand||t.command)&&i.push(`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${t.escapedCommand??t.command}`),typeof t.exitCode=="number"&&i.push(`\uC885\uB8CC \uCF54\uB4DC: ${t.exitCode}`),t.stderr?.trim()?i.push(`stderr: ${t.stderr.trim()}`):t.stdout?.trim()&&i.push(`stdout: ${t.stdout.trim()}`),{reason:t.shortMessage??e.message,hint:r,details:i,stack:e.stack}}return typeof e=="string"?{reason:e,hint:r,details:[]}:{reason:"\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694.",hint:r,details:[]}}function wt(e){if(e instanceof Error)return e.stack}function Y(e,{defaultMessage:r,defaultHint:t,verbose:i=!1}){let s=ht(e,t);te.log.error(r),te.log.error(`\uC6D0\uC778: ${s.reason}`);for(let n of s.details)te.log.info(n);s.hint&&te.log.info(`\uD574\uACB0 \uD78C\uD2B8: ${s.hint}`),i&&s.stack&&(te.log.message(l(`
3
+ [verbose] stack trace`)),te.log.message(s.stack)),te.outro(l("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as Q from"@clack/prompts";import It from"fs-extra";import De from"path";import bt from"findup-sync";import Ct from"fs-extra";var $t="package.json";function xt(e=process.cwd()){let r=bt($t,{cwd:e});if(!r)throw new Error("No package.json file found in the project.");return r}function ne(e=process.cwd()){let r=xt(e);return Ct.readJSONSync(r)}var G={rsc:!1,tsx:!0,framework:"react",path:"./seed-design",telemetry:!0};function ve(e){try{let r=ne(e),t={...r.dependencies,...r.devDependencies,...r.peerDependencies};if("@lynx-js/react"in t||"@seed-design/lynx-react"in t)return"lynx"}catch{}return"react"}async function Oe(e){let r=ve(e);return await Q.group({tsx:()=>Q.confirm({message:`${l("TypeScript")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:G.tsx}),rsc:()=>Q.confirm({message:`${l("React Server Components")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:G.rsc}),framework:()=>Q.select({message:`\uC5B4\uB5A4 ${l("\uD504\uB808\uC784\uC6CC\uD06C")}\uB97C \uC0AC\uC6A9\uD558\uC2DC\uB098\uC694?`,initialValue:r,options:[{value:"react",label:"React"},{value:"lynx",label:"Lynx"}]}),path:()=>Q.text({message:`${l("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:G.path,defaultValue:G.path,placeholder:G.path}),telemetry:()=>Q.confirm({message:`\uAC1C\uC120\uC744 \uC704\uD574 ${l("\uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130")}\uB97C \uC218\uC9D1\uD560\uAE4C\uC694?`,initialValue:G.telemetry})},{onCancel:()=>{throw new D}})}async function Ce({cwd:e,config:r}){let t=De.resolve(e,"seed-design.json");return await It.writeFile(t,`${JSON.stringify(r,null,2)}
4
+ `,"utf-8"),{relativePath:De.relative(process.cwd(),t),targetPath:t}}var Le="seed-design",Pt=kt(Le,{searchPlaces:[`${Le}.json`]}),Me=le.object({$schema:le.string().optional(),rsc:le.coerce.boolean().default(!1),tsx:le.coerce.boolean().default(!0),framework:le.enum(["react","lynx"]).default("react"),path:le.string(),telemetry:le.coerce.boolean().optional().default(!0)}).strict();async function $e(e){let r=await ie(e);if(r)return r;me.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let t=await me.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(me.isCancel(t)||!t)throw new D;try{return await Ce({cwd:e,config:G}),me.log.message("seed-design.json \uD30C\uC77C\uC774 \uC0DD\uC131\uB410\uC5B4\uC694."),Me.parse(G)}catch(i){throw new k({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:i})}}async function ie(e){let r=await Pt.search(e);if(!r||r.isEmpty)return null;try{return Me.parse(r.config)}catch(t){throw new k({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:t})}}function xe({selectedItemKeys:e,publicRegistries:r}){let t=[],i=new Set;function s(n,o){let a=t.find(c=>c.registryId===n);if(!a?.items.some(c=>c.id===o.id)){if(a?a.items.push(o):t.push({registryId:n,items:[o]}),o.dependencies?.length)for(let c of o.dependencies)i.add(c);if(o.innerDependencies?.length)for(let c of o.innerDependencies)for(let m of c.itemIds){let g=r.find(C=>C.id===c.registryId)?.items.find(C=>C.id===m);if(!g)throw new Error(`Cannot find dependency item: ${c.registryId}:${m}`);s(c.registryId,g)}}}for(let n of e){let[o,...a]=n.split(":"),c=a.join(":");if(!o||!c)throw new Error(`Invalid snippet format: "${n}"`);let m=r.find(g=>g.id===o)?.items.find(g=>g.id===c);if(!m)throw new Error(`Cannot find snippet: "${n}"`);s(o,m)}return{registryItemsToAdd:t,npmDependenciesToAdd:i}}import*as je from"@clack/prompts";import{z as d}from"zod";var Te=d.object({id:d.string(),description:d.string().optional(),deprecated:d.boolean().optional(),hideFromCLICatalog:d.boolean().optional(),dependencies:d.array(d.string()).optional(),innerDependencies:d.array(d.object({registryId:d.string(),itemIds:d.array(d.string())})).optional(),snippets:d.array(d.object({path:d.string(),dependencies:d.record(d.string(),d.string()).optional(),content:d.string()}))}),_e=d.object({id:d.string(),hideFromCLICatalog:d.boolean().optional(),items:d.array(Te.omit({snippets:!0}).extend({snippets:d.array(d.object({path:d.string(),dependencies:d.record(d.string(),d.string()).optional()}))}))}),Ue=d.array(d.object({id:d.string()})),St=d.object({label:d.string(),path:d.string()}),Rt=d.object({id:d.string(),title:d.string(),description:d.string().optional(),docUrl:d.string(),deprecated:d.boolean().optional(),snippetKey:d.string().optional(),snippets:d.array(St).optional()}),Et=d.object({id:d.string(),label:d.string(),items:d.array(Rt)}),vt=d.object({id:d.string(),label:d.string(),sections:d.array(Et)}),Fe=d.object({categories:d.array(vt)});var Tt=1e4;async function Ke(e,r=Tt){let t=new AbortController,i=setTimeout(()=>t.abort(),r);try{return await fetch(e,{signal:t.signal})}catch(s){throw s instanceof Error&&s.name==="AbortError"?new k({message:`\uC694\uCCAD \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC5B4\uC694 (${r}ms): ${e}`,hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694."}):s}finally{clearTimeout(i)}}async function Ae({baseUrl:e}){let r=await fetch(`${e}/__docs__/index.json`);if(!r.ok)throw new k({message:`\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${r.status} ${r.statusText}`});let t=await r.json(),{success:i,data:s,error:n}=Fe.safeParse(t);if(!i)throw new k({message:`\uBB38\uC11C \uBAA9\uB85D \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694: ${n?.message}`});return s}async function de({baseUrl:e,framework:r}){let t=await fetch(`${e}/__registry__/${r}/index.json`);if(!t.ok)throw new Error(`Failed to fetch registries: ${t.status} ${t.statusText}`);let i=await t.json(),{success:s,data:n,error:o}=Ue.safeParse(i);if(!s)throw new Error(`Failed to parse registries: ${o?.message}`);return n}async function fe({baseUrl:e,framework:r,registryId:t}){let i=await fetch(`${e}/__registry__/${r}/${t}/index.json`);if(!i.ok)throw new Error(`Failed to fetch ${t} registry: ${i.status} ${i.statusText}`);let s=await i.json(),{success:n,data:o,error:a}=_e.safeParse(s);if(!n)throw new Error(`Failed to parse ${t} registry: ${a?.message}`);return o}async function _t({baseUrl:e,framework:r,registryId:t,registryItemId:i}){let s=await fetch(`${e}/__registry__/${r}/${t}/${i}.json`);if(!s.ok)throw new Error(`Failed to fetch ${i}: ${s.status} ${s.statusText}`);let n=await s.json(),{success:o,data:a,error:c}=Te.safeParse(n);if(!o)throw new Error(`Failed to parse ${i}: ${c?.message}`);return a}async function Ne({url:e}){let r=await Ke(e);if(!r.ok)throw new k({message:`llms.txt\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${r.status} ${r.statusText}`,hint:`${e} \uC5D0 \uC811\uADFC\uD560 \uC218 \uC788\uB294\uC9C0 \uD655\uC778\uD574\uC8FC\uC138\uC694.`});return r.text()}async function Ve({baseUrl:e,query:r}){let t=r.startsWith("/")?r.slice(1):r,i=[`${e}/llms/${t}.txt`,`${e}/llms/${t}/llms.txt`],s;for(let n of i){let o;try{o=await Ke(n)}catch(a){s=a;continue}if(o.ok)return o.text();if(o.status===404){s=new k({message:`llms.txt\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694: ${t}`,hint:`\uB2E4\uC74C \uACBD\uB85C\uB97C \uC2DC\uB3C4\uD588\uC5B4\uC694:
5
+ ${i.map(a=>` - ${a}`).join(`
6
+ `)}`});continue}throw new k({message:`llms.txt \uC694\uCCAD\uC774 \uC2E4\uD328\uD588\uC5B4\uC694: ${o.status} ${o.statusText}`,hint:`URL: ${n}`})}throw s??new k({message:`llms.txt\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694: ${t}`,hint:`\uB2E4\uC74C \uACBD\uB85C\uB97C \uC2DC\uB3C4\uD588\uC5B4\uC694:
7
+ ${i.map(n=>` - ${n}`).join(`
8
+ `)}`})}async function ze({baseUrl:e,framework:r,registryId:t,registryItemIds:i}){return await Promise.all(i.map(async s=>{try{return await _t({baseUrl:e,framework:r,registryId:t,registryItemId:s})}catch(n){let o=await fetch(`${e}/__registry__/${r}/${t}/index.json`);if(!o.ok)throw new Error(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${o.status} ${o.statusText}`);let a=await o.json(),{success:c,data:m}=_e.safeParse(a);throw c?(je.log.error(`${s} \uC2A4\uB2C8\uD3AB\uC774 ${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC5C6\uC5B4\uC694.`),je.log.info(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC874\uC7AC\uD558\uB294 \uC2A4\uB2C8\uD3AB:
9
+ ${m.items.map(g=>g.id).join(`
10
+ `)}`),n):new Error(`Failed to parse registry index for ${t}`)}}))}import{promises as Mt}from"fs";import{tmpdir as Ut}from"os";import Ge from"path";import{transformFromAstSync as jt}from"@babel/core";import At from"@babel/plugin-transform-typescript";import*as Ie from"recast";import{parse as Dt}from"@babel/parser";var Ot={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"]},Be=async({sourceFile:e,config:r})=>{let t=e.getFullText();if(r.tsx)return t;let i=Ie.parse(t,{parser:{parse:n=>Dt(n,Ot)}}),s=jt(i,t,{cloneInputAst:!1,code:!1,ast:!0,plugins:[At],configFile:!1});if(!s||!s.ast)throw new Error("Failed to transform JSX");return Ie.print(s.ast).code};import{SyntaxKind as Lt}from"ts-morph";var qe=async({sourceFile:e,config:r})=>{if(r.rsc)return e;let t=e.getFirstChildByKind(Lt.ExpressionStatement);if(!t)return e;let i=t.getExpression();if(!i)return e;let s=i.getText().trim();if(s!=='"use client"'&&s!=="'use client'")return e;let n=t.getText(),o=t.getFullText();if(n.trim()===o.trim())return e;let c=o.replace(n,"").replace(/^\s*\n/,"").replace(/\n\s*$/,"");return t.replaceWithText(c),e};import{Project as Ft,ScriptKind as Kt}from"ts-morph";var Nt=[qe],Vt=new Ft({compilerOptions:{}});async function zt(e){let r=await Mt.mkdtemp(Ge.join(Ut(),"seed-design-"));return Ge.join(r,e)}async function He(e){let r=await zt(e.filename),t=Vt.createSourceFile(r,e.raw,{scriptKind:Kt.TSX});for(let i of Nt)i({sourceFile:t,...e});return await Be({sourceFile:t,...e})}import*as H from"@clack/prompts";import ge from"fs-extra";import X from"path";import{createPatch as Bt}from"diff";import qt from"@npmcli/disparity-colors";async function ke({registryItemsToAdd:e,rootPath:r,cwd:t,baseUrl:i,framework:s,config:n,onDiff:o}){let a=[];for(let{registryId:c,items:m}of e){let g=X.join(r,c);ge.ensureDirSync(g);let C=await ze({baseUrl:i,framework:s,registryId:c,registryItemIds:m.map(u=>u.id)});for(let{id:u,snippets:$}of C){let I=await Promise.all($.map(async T=>{let x=await He({filename:T.path,config:n,raw:T.content}),y=X.join(g,T.path);return n.tsx||(y=y.replace(/\.tsx$/,".jsx"),y=y.replace(/\.ts$/,".js")),{filePath:y,content:x,relativePath:X.relative(t,y),name:`${c}:${u}`}})),A=[];for(let T of I){let{filePath:x,content:y,relativePath:h}=T;if(await ge.ensureDir(X.dirname(x)),ge.existsSync(x)){let w=await ge.readFile(x,"utf-8");if(w===y){H.log.info(`${l(h)}: \uC774\uBBF8 \uCD5C\uC2E0 \uC0C1\uD0DC\uC608\uC694.`);continue}let P=X.basename(x),F=X.extname(x),ee=X.basename(x,F),S=Date.now(),K=`legacy-${ee}-${S}${F}`,U=await(async()=>{if(o)return o;let W=Bt(h,w,y),b=qt(W);return H.log.message(`
11
+ ${l(h)}: \uD604\uC7AC \uD30C\uC77C\uACFC \uBC1B\uC73C\uB824\uB294 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC774 \uB2EC\uB77C\uC694.
12
+ `),H.log.message(b),H.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:`${P} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${K}\uC73C\uB85C \uC62E\uAE30\uACE0 ${P} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(H.isCancel(U)||U==="skip"){H.log.info(`${l(h)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(U==="backup"){let W=X.dirname(x),b=X.join(W,K);await ge.rename(x,b),H.log.info(`${l(h)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${l(X.relative(t,b))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await ge.writeFile(x,y),A.push(T)}if(A.length>0){let T=A.map(({name:x,relativePath:y})=>({name:x,path:y}));a.push(...T),H.log.success(`${l(`${c}:${u}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${l(T.map(x=>x.path).join(", "))}`)}}}}import*as _ from"@clack/prompts";import fr from"path";import{z as re}from"zod";var N="https://seed-design.io";var We={"1.0":"https://v1-0.seed-design.io","1.1":"https://v1-1.seed-design.io","1.2":"https://v1-2.seed-design.io"};function Pe(e){let r=e.seedReactVersion?.trim();if(!r)return null;let t=We[r];if(!t)throw new k({message:`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 SEED React \uBC84\uC804\uC774\uC5D0\uC694: "${e.seedReactVersion}"`,hint:`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBC84\uC804: ${Object.keys(We).join(", ")}`});return{framework:"react",baseUrl:t}}function Se(e,r){for(let t=0;t<e.length;t++){let i=e[t];if(i===r)return e[t+1];if(i.startsWith(`${r}=`))return i.slice(r.length+1)}}import*as Ye from"@clack/prompts";import{execa as Ht}from"execa";import{detect as Gt}from"@antfu/ni";async function Je(e){let r=await Gt({programmatic:!0,cwd:e});return r==="yarn@berry"?"yarn":r==="pnpm@6"?"pnpm":r==="bun"?"bun":r==="deno"?"deno":r??"npm"}async function Re({cwd:e,deps:r,dev:t=!1}){let{start:i,stop:s}=Ye.spinner(),n=await Je(e),a={...ne(e).dependencies},c=new Set(r.filter(I=>!a[I])),m=new Set(r.filter(I=>a[I]));if(!c.size)return{installed:new Set,filtered:c};i("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let u=[n==="npm"?"install":"add",t?"-D":null,...c].filter(I=>!!I),$=`${n} ${u.join(" ")}`;try{await Ht(n,u,{cwd:e})}catch(I){throw s("\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."),new k({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: ${$}`],cause:I})}return s("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:c,filtered:m}}import{randomUUID as Wt}from"node:crypto";import*as Xe from"@clack/prompts";var Jt="seed_cli";async function Yt(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await ie(e))?.telemetry===!1)return!1}catch{}return!0}function Qt(){return Wt()}var Xt=Qt(),Qe=!1;function Ze(e){return Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0))}function Zt(e){return e instanceof Error&&e.name?e.name:typeof e=="object"&&e!==null?e.constructor?.name??"Object":typeof e}async function et(e,{event:r,properties:t={}}){if(!await Yt(e))return;let s=`${Jt}.${r}`;Qe||(Xe.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 n="https://us.i.posthog.com/capture",o={"Content-Type":"application/json"},a={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:s,distinct_id:Xt,properties:{...t,$process_person_profile:!1},timestamp:new Date().toISOString()},c=new AbortController,m=setTimeout(()=>c.abort(),5e3);try{await fetch(n,{method:"POST",headers:o,body:JSON.stringify(a),signal:c.signal})}finally{clearTimeout(m)}}catch{}}async function tt(e,{command:r,status:t,result:i,properties:s={}}){await et(e,{event:r,properties:Ze({status:t,result:i,...s})})}async function er(e,{command:r,error:t,result:i,properties:s={}}){await tt(e,{command:r,status:"failed",result:i,properties:Ze({error_type:Zt(t),...s})})}var v={track:et,trackCommandFailure:er,trackCommandOutcome:tt};import*as pe from"@clack/prompts";import tr from"fs-extra";import rr from"path";import{intersects as sr,satisfies as or,valid as st,validRange as ot}from"semver";var nr=["@seed-design/react","@seed-design/css"],ir=["@seed-design/lynx-react","@seed-design/lynx-css"];function ae(e){return e==="lynx"?ir:nr}var rt="workspace:",ar="npm:";function ue(e,r="react"){try{let t=ne(e),i={...t.dependencies,...t.devDependencies,...t.peerDependencies,...t.optionalDependencies},s={},n=ae(r);for(let o of n){let a=i[o];typeof a=="string"&&(s[o]=a)}return s}catch{return{}}}function ye({publicRegistries:e,itemKeys:r,projectPackageVersions:t,framework:i="react"}){let s=Array.from(new Set(r)),n=new Map(e.flatMap(c=>c.items.map(m=>[`${c.id}:${m.id}`,m]))),o=[],a=ae(i);for(let c of s){let m=n.get(c);if(!m)continue;let g=cr(m,i);for(let C of a){let u=Array.from(g[C]??[]);if(!u.length)continue;let $=t[C];if(!$){o.push({itemKey:c,packageName:C,requiredRanges:u,type:"missing-package"});continue}let I=lr($);if(!I){o.push({itemKey:c,packageName:C,requiredRanges:u,installedVersionSpec:$,type:"invalid-version-spec"});continue}u.every(T=>mr({currentVersionSpec:I,requiredRange:T}))||o.push({itemKey:c,packageName:C,requiredRanges:u,installedVersionSpec:$,type:"incompatible-version"})}}return{checkedItemKeys:s,projectPackageVersions:t,issues:o}}function he({report:e,title:r,framework:t="react"}){if(!e.issues.length)return;let i=ae(t);pe.log.warn(r),pe.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${i.map(n=>`${n}@${l(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()){pe.log.warn(l(n));for(let a of o){let c=a.requiredRanges.join(" | ");if(a.type==="missing-package"){pe.log.info(` - ${a.packageName}: \uD328\uD0A4\uC9C0\uAC00 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694. \uD544\uC694 \uBC94\uC704: ${c}`);continue}if(a.type==="invalid-version-spec"){pe.log.info(` - ${a.packageName}: \uD604\uC7AC \uBC84\uC804 \uD615\uC2DD\uC744 \uD574\uC11D\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694 (${a.installedVersionSpec}). \uD544\uC694 \uBC94\uC704: ${c}`);continue}pe.log.info(` - ${a.packageName}: \uD604\uC7AC ${a.installedVersionSpec}, \uD544\uC694 \uBC94\uC704 ${c}`)}}}function nt({publicRegistries:e,rootPath:r}){let t=[];for(let i of e)for(let s of i.items)s.snippets.some(o=>pr(o.path).some(a=>tr.existsSync(rr.join(r,i.id,a))))&&t.push(`${i.id}:${s.id}`);return t}function cr(e,r="react"){let t=ae(r),i=Object.fromEntries(t.map(s=>[s,new Set]));for(let s of e.snippets)for(let[n,o]of Object.entries(s.dependencies??{}))dr(n,r)&&i[n].add(o);return i}function lr(e){let r=e.trim();if(r.startsWith(rt)&&(r=r.slice(rt.length).trim()),r.startsWith(ar)){let t=r.split("@").at(-1);if(!t)return null;r=t}return!r||r==="*"?null:st(r)||ot(r)?r:null}function mr({currentVersionSpec:e,requiredRange:r}){let t=ot(r);return t?st(e)?or(e,t,{includePrerelease:!0}):sr(e,t,{includePrerelease:!0}):!1}function pr(e){let r=new Set([e]);return e.endsWith(".tsx")&&r.add(`${e.slice(0,-4)}.jsx`),e.endsWith(".ts")&&r.add(`${e.slice(0,-3)}.js`),e.endsWith(".jsx")&&r.add(`${e.slice(0,-4)}.tsx`),e.endsWith(".js")&&r.add(`${e.slice(0,-3)}.ts`),Array.from(r)}function dr(e,r="react"){return ae(r).includes(e)}var gr=re.object({itemIds:re.array(re.string()).optional(),all:re.boolean(),cwd:re.string(),baseUrl:re.string().default(N),seedReactVersion:re.string().optional(),framework:re.enum(["react","lynx"]).optional(),onDiff:re.enum(["overwrite","backup"]).optional()}),it=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("--seed-react-version <version>","\uC9C0\uC815\uD55C SEED React \uBC84\uC804\uC758 \uB808\uC9C0\uC2A4\uD2B8\uB9AC \uC0AC\uC6A9 (\uC608: 1.2)").option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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(r,t)=>{let i=Date.now(),s=J(t),n=typeof t?.cwd=="string"?t.cwd:process.cwd();_.intro("seed-design add");try{let o=Se(e.rawArgs,"--seed-react-version"),a=gr.safeParse({itemIds:r,...t,seedReactVersion:o});if(!a.success)throw a.error;let{data:{all:c,...m}}=a;if(c)throw new k({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 g=m.cwd,C=Pe(m),u=C?.baseUrl??m.baseUrl,$=await $e(g),I=C?.framework??m.framework??$.framework,A=fr.resolve(g,$.path),{start:T,stop:x}=_.spinner();T("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let y=await(async()=>{try{let p=await Promise.all((await de({baseUrl:u,framework:I})).map(async({id:f})=>fe({baseUrl:u,framework:I,registryId:f})));return x("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),p}catch(p){throw x("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),p}})(),h=await(async()=>{if(m.itemIds?.length)return m.itemIds;let p=await _.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:y.filter(({hideFromCLICatalog:f})=>!f).flatMap(({id:f,items:E})=>E.filter(({hideFromCLICatalog:M})=>!M).sort((M,L)=>M.id.localeCompare(L.id)).map(({id:M,description:L,deprecated:R})=>({label:`${R?"(deprecated) ":""}${l(f)}:${M}`,value:`${f}:${M}`,hint:L,deprecated:R,registryItemCount:E.length}))).sort((f,E)=>f.deprecated!==E.deprecated?f.deprecated?1:-1:E.registryItemCount-f.registryItemCount)});if(_.isCancel(p))throw new D;return p})();if(!h?.length)throw new D("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694.");_.log.message(`\uC120\uD0DD\uB41C \uD56D\uBAA9: ${l(h.join(", "))}`);let w=[];for(let p of h){let[f,...E]=p.split(":"),M=E.join(":");if(!f||!M)throw new k({message:`${l(p)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${l("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let L=y.find(R=>R.id===f)?.items.find(R=>R.id===M);if(!L)throw new k({message:`${l(p)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(L.deprecated){let R=await _.confirm({message:`${l(L.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(_.isCancel(R))throw new D;if(R===!1){_.log.info(`${l(L.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}w.push(p)}let{registryItemsToAdd:P,npmDependenciesToAdd:F}=xe({selectedItemKeys:w,publicRegistries:y}),ee=ye({publicRegistries:y,itemKeys:P.flatMap(({registryId:p,items:f})=>f.map(E=>`${p}:${E.id}`)),projectPackageVersions:ue(m.cwd,I),framework:I});he({report:ee,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.",framework:I}),_.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${l(P.map(p=>p.items.map(f=>`${p.registryId}:${f.id}`).join(", ")).join(", ")||"\uC5C6\uC74C")}
13
13
 
14
- \uC124\uCE58\uD560 \uC758\uC874\uC131: ${l(Array.from(b).join(", ")||"\uC5C6\uC74C")}`),await ke({registryItemsToAdd:w,rootPath:k,cwd:m,baseUrl:y,framework:u,config:g,onDiff:c.onDiff});let{installed:U,filtered:B}=await Pe({cwd:m,deps:Array.from(b)});U.size===0&&j.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),U.size&&(j.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${l(Array.from(U).join(", "))}`),B.size&&j.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${l(Array.from(B).join(", "))}`)),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let R=Date.now()-n,q=new Set(w.map(p=>p.registryId)),x=C.some(p=>{let[d,...T]=p.split(":"),M=T.join(":");return E.find(v=>v.id===d)?.items.find(v=>v.id===M)?.deprecated});try{await _.trackCommandOutcome(c.cwd,{command:"add",status:"completed",properties:{items_count:h.length,registries:Array.from(q),has_deprecated:x,dependencies_count:b.size,duration_ms:R}})}catch(p){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",p)}}catch(s){if(G(s)){try{await _.trackCommandOutcome(i,{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)}j.outro(l(s.message)),process.exit(0)}try{await _.trackCommandFailure(i,{command:"add",error:s,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)}Y(s,{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 O from"@clack/prompts";import dr from"path";import{z as ee}from"zod";var fr=ee.object({registryIds:ee.array(ee.string()).optional(),all:ee.boolean(),includeDeprecated:ee.boolean().optional(),cwd:ee.string(),baseUrl:ee.string().default(K),framework:ee.enum(["react","lynx"]).optional(),onDiff:ee.enum(["overwrite","backup"]).optional()}),ot=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:K}).option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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=W(r),i=typeof r?.cwd=="string"?r.cwd:process.cwd();O.intro("seed-design add-all");try{let s=fr.safeParse({registryIds:t,...r});if(!s.success)throw s.error;let{data:a}=s,c=a.cwd,m=a.baseUrl,y=await $e(c),g=a.framework??y.framework,u=dr.resolve(c,y.path),{start:k,stop:I}=O.spinner();k("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let S=await(async()=>{try{let x=await Promise.all((await pe({baseUrl:m,framework:g})).map(async({id:p})=>de({baseUrl:m,framework:g,registryId:p})));return I("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),x}catch(x){throw I("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),x}})(),E=await(async()=>{if(a.all){let p=S.map(d=>d.id);return O.log.message(`\uBAA8\uB4E0 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${l(p.join(", "))}`),p}if(a.registryIds?.length){let p=S.map(d=>d.id);for(let d of a.registryIds)if(!p.includes(d))throw new $({message:`\uB808\uC9C0\uC2A4\uD2B8\uB9AC '${d}'\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,details:[`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB808\uC9C0\uC2A4\uD2B8\uB9AC: ${p.join(", ")}`]});return O.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${l(a.registryIds.join(", "))}`),a.registryIds}let x=await O.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:S.filter(({hideFromCLICatalog:p})=>!p).sort((p,d)=>d.items.length-p.items.length).map(p=>{let d=p.items[0]?.id,T=d?`${p.items.length}\uAC1C \uD56D\uBAA9 (${d} \uB4F1)`:`${p.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:p.id,value:p.id,hint:T}})});if(O.isCancel(x))throw new D;return O.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${l(x.join(", "))}`),x})(),C=S.filter(x=>E.includes(x.id)),h=C.flatMap(x=>x.items.filter(p=>p.deprecated?a.includeDeprecated:!0).map(p=>`${x.id}:${p.id}`)),w=C.reduce((x,p)=>x+p.items.filter(d=>d.deprecated).length,0);if(!a.includeDeprecated&&w>0&&O.log.info(`${w}\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.`),!h.length)throw new D("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");O.log.message(`\uCD1D ${l(h.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:b,npmDependenciesToAdd:P}=xe({selectedItemKeys:h,publicRegistries:S}),U=ue({publicRegistries:S,itemKeys:b.flatMap(({registryId:x,items:p})=>p.map(d=>`${x}:${d.id}`)),projectPackageVersions:ge(a.cwd,g),framework:g});ye({report:U,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.",framework:g}),await ke({registryItemsToAdd:b,rootPath:u,cwd:c,baseUrl:m,framework:g,config:y,onDiff:a.onDiff});let{installed:B,filtered:R}=await Pe({cwd:c,deps:Array.from(P)});B.size===0&&O.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),B.size&&(O.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${l(Array.from(B).join(", "))}`),R.size&&O.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${l(Array.from(R).join(", "))}`)),O.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let q=Date.now()-n;try{await _.trackCommandOutcome(a.cwd,{command:"add-all",status:"completed",properties:{registries:E,items_count:h.length,include_deprecated:a.includeDeprecated||!1,dependencies_count:P.size,duration_ms:q}})}catch(x){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",x)}}catch(s){if(G(s)){try{await _.trackCommandOutcome(i,{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)}O.outro(l(s.message)),process.exit(0)}try{await _.trackCommandFailure(i,{command:"add-all",error:s,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)}Y(s,{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 N from"@clack/prompts";import it from"path";import{z}from"zod";var gr=z.object({itemIds:z.array(z.string()).optional(),component:z.union([z.string(),z.array(z.string())]).optional(),all:z.boolean(),registry:z.string().optional(),cwd:z.string(),baseUrl:z.string().default(K),framework:z.enum(["react","lynx"]).optional()});function ur({itemIds:e,component:t}){let r=i=>i.trim().replace(/\s+/g,"-"),n=(e??[]).map(r).filter(Boolean),o=(Array.isArray(t)?t:[t]).filter(i=>!!i).flatMap(i=>i.split(",")).map(r).filter(Boolean);return Array.from(new Set([...n,...o]))}function yr({publicRegistries:e,targetInputs:t,defaultRegistry:r}){let n=e.filter(i=>typeof i.id=="string"&&Array.isArray(i.items)).flatMap(i=>i.items.filter(s=>typeof s.id=="string").map(s=>`${i.id}:${s.id}`)),o=new Set;for(let i of t){let s=i.includes(":")?i:r?`${r}:${i}`:(()=>{let a=n.filter(c=>c.endsWith(`:${i}`));if(!a.length)throw new $({message:`${l(i)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${l("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(a.length>1)throw new $({message:`${l(i)}: \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:`${l("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});return a[0]})();if(!n.includes(s))throw new $({message:`${l(s)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});o.add(s)}return Array.from(o)}var nt=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:K}).option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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=W(r),i=typeof r?.cwd=="string"?r.cwd:process.cwd();N.intro("seed-design compat");try{let s=gr.safeParse({itemIds:t,...r});if(!s.success)throw s.error;let{data:a}=s,c=await oe(a.cwd),m=a.framework??c?.framework??"react",{start:y,stop:g}=N.spinner();y("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let u=await(async()=>{try{let w=await Promise.all((await pe({baseUrl:a.baseUrl,framework:m})).map(async({id:b})=>de({baseUrl:a.baseUrl,framework:m,registryId:b})));return g("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),w}catch(w){throw g("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),w}})(),k=ur({itemIds:a.itemIds,component:a.component}),I=a.all?u.flatMap(b=>b.items.map(P=>`${b.id}:${P.id}`)):k.length>0?yr({publicRegistries:u,targetInputs:k,defaultRegistry:a.registry}):oe(a.cwd),S=Array.isArray(I)?I:await(async()=>{let w=await I;if(!w)throw new $({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 b=it.resolve(a.cwd,w.path),P=rt({publicRegistries:u,rootPath:b});return P.length?P:(N.log.info(`${l(it.relative(a.cwd,b)||w.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();if(!S.length){try{await _.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"empty",properties:{duration_ms:Date.now()-n}})}catch(w){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",w)}N.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0)}let E=ge(a.cwd,m),C=ue({publicRegistries:u,itemKeys:S,projectPackageVersions:E,framework:m});if(N.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${l(C.checkedItemKeys.join(", "))}`),!C.issues.length){let w=ie(m);N.outro(`\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC ${w.join(", ")}\uC640 \uD638\uD658\uB3FC\uC694.`);try{await _.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"compatible",properties:{checked_items_count:C.checkedItemKeys.length,incompatible_items_count:0,duration_ms:Date.now()-n}})}catch(b){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",b)}process.exit(0)}ye({report:C,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC558\uC5B4\uC694.",framework:m});let h=ie(m);N.log.info(`\uD544\uC694\uD55C \uBC84\uC804\uC73C\uB85C ${h.join(" \uB610\uB294 ")}\uB97C \uB9DE\uCD98 \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD574\uBCF4\uC138\uC694.`),N.outro("\uD638\uD658\uC131 \uC774\uC288\uAC00 \uC788\uC5B4\uC694.");try{await _.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"incompatible",properties:{checked_items_count:C.checkedItemKeys.length,incompatible_items_count:new Set(C.issues.map(w=>w.itemKey)).size,issue_count:C.issues.length,duration_ms:Date.now()-n}})}catch(w){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",w)}process.exit(1)}catch(s){if(G(s)){try{await _.trackCommandOutcome(i,{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)}N.outro(l(s.message)),process.exit(0)}try{await _.trackCommandFailure(i,{command:"compat",error:s,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)}Y(s,{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 A from"@clack/prompts";import{z as te}from"zod";var hr="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",wr=te.object({query:te.union([te.string(),te.array(te.string())]).optional().transform(e=>{let r=(Array.isArray(e)?e.join(" "):e)?.trim();return r||void 0}),baseUrl:te.string().optional(),cwd:te.string().default(process.cwd()),framework:te.enum(["react","lynx"]).optional(),raw:te.boolean()});function at(e,t){return`${hr}/${e}/${t}`}function br(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[i]=e.snippetKey.split(":");if(i)if(e.snippets.length===1)o.push(`- snippet: ${at(i,e.snippets[0].path)}`);else{o.push("- snippet:");for(let s of e.snippets)o.push(` - ${s.label}: ${at(i,s.path)}`)}}A.log.message(o.join(`
15
- `))}function Cr(e,t){let r=e.length,n=t.length,o=Array.from({length:r+1},(i,s)=>Array.from({length:n+1},(a,c)=>s===0?c:c===0?s:0));for(let i=1;i<=r;i++)for(let s=1;s<=n;s++)o[i][s]=Math.min(o[i-1][s]+1,o[i][s-1]+1,o[i-1][s-1]+(e[i-1]!==t[s-1]?1:0));return o[r][n]}function ae(e,t,r=3){let n=e.toLowerCase();return t.map(o=>({value:o,dist:Cr(n,o.toLowerCase())})).filter(({dist:o})=>o>0&&o<=r).sort((o,i)=>o.dist-i.dist).map(({value:o})=>o)}function $r(e,t){if(e.length===0)return;let r=[],n=t.map(s=>s.id),o=ae(e[0],n);if(o.length===0){let s=t.flatMap(m=>m.sections.flatMap(y=>y.items.map(g=>`${m.id}/${y.id}/${g.id}`))),a=e.join("/"),c=ae(a,s,5);c.length>0&&r.push(...c.slice(0,3))}else{let s=t.find(a=>a.id===o[0]);if(s&&e.length>=2){let a=s.sections.map(m=>m.id),c=ae(e[1],a);if(c.length>0){let m=s.sections.find(y=>y.id===c[0]);if(m&&e.length>=3){let y=m.items.map(u=>u.id),g=ae(e[2],y);for(let u of g.slice(0,3))r.push(`${s.id}/${m.id}/${u}`)}else for(let y of c.slice(0,3))r.push(`${s.id}/${y}`)}else{let m=s.sections.flatMap(g=>g.items.map(u=>({path:`${s.id}/${g.id}/${u.id}`,id:u.id}))),y=ae(e[1],m.map(g=>g.id));for(let g of y.slice(0,3)){let u=m.find(k=>k.id===g);u&&r.push(u.path)}}}else for(let a of o.slice(0,3))r.push(a)}if(r.length===0)return;let i=["","\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?"];for(let s of r)i.push(` - ${s}`);return i.join(`
16
- `)}function lt(e){return e.split(/[\/\s]+/).map(t=>t.trim()).filter(Boolean)}function xr(e){let[,t]=e.split(":");return t??e}function Ir({query:e,framework:t,categoryIds:r}){if(!e)return;let n=lt(e).map(xr);if(!n.length)return;let[o]=n;return!r.includes(o)&&t&&r.includes(t)?[t,...n].join("/"):n.join("/")}function kr(e,t){let r=t.toLowerCase();return e.flatMap(n=>n.sections.flatMap(o=>o.items.filter(i=>i.id.toLowerCase().includes(r)||i.title.toLowerCase().includes(r)).map(i=>({item:i,categoryLabel:n.label,sectionLabel:o.label}))))}async function we(e){let t=await A.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(A.isCancel(t))throw new D;return t}async function ct(e){let t=await A.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(A.isCancel(t))throw new D;return t}async function Pr(e){let t=await A.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(A.isCancel(t))throw new D;return t}var mt=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: ${K})`,{default:K}).option("--cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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 lynx action-button").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=W(r),i=r.raw??!1,s=process.cwd();i||A.intro("seed-design docs");try{let a=wr.safeParse({query:t,...r});if(!a.success)throw a.error;let{data:c}=a;s=c.cwd;let m=c.baseUrl??K,y=await oe(c.cwd).catch(()=>null),g=c.framework??y?.framework;if(c.raw&&!c.query)throw new $({message:"--raw \uBAA8\uB4DC\uC5D0\uC11C\uB294 \uCFFC\uB9AC\uAC00 \uD544\uC694\uD574\uC694.",hint:"\uC608: `seed-design docs react/updates/changelog --raw`"});let u=await(async()=>{if(i)return await _e({baseUrl:m});let{start:h,stop:w}=A.spinner();h("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");try{let b=await _e({baseUrl:m});return w("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC654\uC5B4\uC694."),b}catch(b){throw w("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),b}})(),{categories:k}=u,I=Ir({query:c.query,framework:g,categoryIds:k.map(h=>h.id)}),S,E=async()=>{if(I){let b=lt(I);if(i&&b.length>3)return;let P=k.find(R=>R.id===b[0]);if(P&&b.length>=2){let R=P.sections.find(d=>d.id===b[1]);if(R&&b.length>=3){let d=R.items.find(v=>v.id===b[2]);if(d)return d;let T=b[2].toLowerCase(),M=R.items.filter(v=>v.id.toLowerCase().includes(T)||v.title.toLowerCase().includes(T));if(M.length===0){let v=ae(b[2],R.items.map(he=>he.id)),L=v.length>0?`
14
+ \uC124\uCE58\uD560 \uC758\uC874\uC131: ${l(Array.from(F).join(", ")||"\uC5C6\uC74C")}`),await ke({registryItemsToAdd:P,rootPath:A,cwd:g,baseUrl:u,framework:I,config:$,onDiff:m.onDiff});let{installed:S,filtered:K}=await Re({cwd:g,deps:Array.from(F)});S.size===0&&_.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),S.size&&(_.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${l(Array.from(S).join(", "))}`),K.size&&_.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${l(Array.from(K).join(", "))}`)),_.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let U=Date.now()-i,W=new Set(P.map(p=>p.registryId)),b=h.some(p=>{let[f,...E]=p.split(":"),M=E.join(":");return y.find(L=>L.id===f)?.items.find(L=>L.id===M)?.deprecated});try{await v.trackCommandOutcome(m.cwd,{command:"add",status:"completed",properties:{items_count:w.length,registries:Array.from(W),has_deprecated:b,dependencies_count:F.size,duration_ms:U}})}catch(p){s&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",p)}}catch(o){if(q(o)){try{await v.trackCommandOutcome(n,{command:"add",status:"cancelled",properties:{duration_ms:Date.now()-i}})}catch(a){s&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}_.outro(l(o.message)),process.exit(0)}try{await v.trackCommandFailure(n,{command:"add",error:o,properties:{duration_ms:Date.now()-i}})}catch(a){s&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}Y(o,{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:s}),process.exit(1)}})};import*as O from"@clack/prompts";import ur from"path";import{z as Z}from"zod";var yr=Z.object({registryIds:Z.array(Z.string()).optional(),all:Z.boolean(),includeDeprecated:Z.boolean().optional(),cwd:Z.string(),baseUrl:Z.string().default(N),seedReactVersion:Z.string().optional(),framework:Z.enum(["react","lynx"]).optional(),onDiff:Z.enum(["overwrite","backup"]).optional()}),at=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("--seed-react-version <version>","\uC9C0\uC815\uD55C SEED React \uBC84\uC804\uC758 \uB808\uC9C0\uC2A4\uD2B8\uB9AC \uC0AC\uC6A9 (\uC608: 1.2)").option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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(r,t)=>{let i=Date.now(),s=J(t),n=typeof t?.cwd=="string"?t.cwd:process.cwd();O.intro("seed-design add-all");try{let o=Se(e.rawArgs,"--seed-react-version"),a=yr.safeParse({registryIds:r,...t,seedReactVersion:o});if(!a.success)throw a.error;let{data:c}=a,m=c.cwd,g=Pe(c),C=g?.baseUrl??c.baseUrl,u=await $e(m),$=g?.framework??c.framework??u.framework,I=ur.resolve(m,u.path),{start:A,stop:T}=O.spinner();A("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let x=await(async()=>{try{let b=await Promise.all((await de({baseUrl:C,framework:$})).map(async({id:p})=>fe({baseUrl:C,framework:$,registryId:p})));return T("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),b}catch(b){throw T("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),b}})(),y=await(async()=>{if(c.all){let p=x.map(f=>f.id);return O.log.message(`\uBAA8\uB4E0 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${l(p.join(", "))}`),p}if(c.registryIds?.length){let p=x.map(f=>f.id);for(let f of c.registryIds)if(!p.includes(f))throw new k({message:`\uB808\uC9C0\uC2A4\uD2B8\uB9AC '${f}'\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,details:[`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB808\uC9C0\uC2A4\uD2B8\uB9AC: ${p.join(", ")}`]});return O.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${l(c.registryIds.join(", "))}`),c.registryIds}let b=await O.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:x.filter(({hideFromCLICatalog:p})=>!p).sort((p,f)=>f.items.length-p.items.length).map(p=>{let f=p.items[0]?.id,E=f?`${p.items.length}\uAC1C \uD56D\uBAA9 (${f} \uB4F1)`:`${p.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:p.id,value:p.id,hint:E}})});if(O.isCancel(b))throw new D;return O.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${l(b.join(", "))}`),b})(),h=x.filter(b=>y.includes(b.id)),w=h.flatMap(b=>b.items.filter(p=>p.deprecated?c.includeDeprecated:!0).map(p=>`${b.id}:${p.id}`)),P=h.reduce((b,p)=>b+p.items.filter(f=>f.deprecated).length,0);if(!c.includeDeprecated&&P>0&&O.log.info(`${P}\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.`),!w.length)throw new D("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");O.log.message(`\uCD1D ${l(w.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:F,npmDependenciesToAdd:ee}=xe({selectedItemKeys:w,publicRegistries:x}),S=ye({publicRegistries:x,itemKeys:F.flatMap(({registryId:b,items:p})=>p.map(f=>`${b}:${f.id}`)),projectPackageVersions:ue(c.cwd,$),framework:$});he({report:S,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.",framework:$}),await ke({registryItemsToAdd:F,rootPath:I,cwd:m,baseUrl:C,framework:$,config:u,onDiff:c.onDiff});let{installed:K,filtered:U}=await Re({cwd:m,deps:Array.from(ee)});K.size===0&&O.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),K.size&&(O.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${l(Array.from(K).join(", "))}`),U.size&&O.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${l(Array.from(U).join(", "))}`)),O.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let W=Date.now()-i;try{await v.trackCommandOutcome(c.cwd,{command:"add-all",status:"completed",properties:{registries:y,items_count:w.length,include_deprecated:c.includeDeprecated||!1,dependencies_count:ee.size,duration_ms:W}})}catch(b){s&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",b)}}catch(o){if(q(o)){try{await v.trackCommandOutcome(n,{command:"add-all",status:"cancelled",properties:{duration_ms:Date.now()-i}})}catch(a){s&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}O.outro(l(o.message)),process.exit(0)}try{await v.trackCommandFailure(n,{command:"add-all",error:o,properties:{duration_ms:Date.now()-i}})}catch(a){s&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}Y(o,{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:s}),process.exit(1)}})};import*as V from"@clack/prompts";import ct from"path";import{z}from"zod";var hr=z.object({itemIds:z.array(z.string()).optional(),component:z.union([z.string(),z.array(z.string())]).optional(),all:z.boolean(),registry:z.string().optional(),cwd:z.string(),baseUrl:z.string().default(N),framework:z.enum(["react","lynx"]).optional()});function wr({itemIds:e,component:r}){let t=n=>n.trim().replace(/\s+/g,"-"),i=(e??[]).map(t).filter(Boolean),s=(Array.isArray(r)?r:[r]).filter(n=>!!n).flatMap(n=>n.split(",")).map(t).filter(Boolean);return Array.from(new Set([...i,...s]))}function br({publicRegistries:e,targetInputs:r,defaultRegistry:t}){let i=e.filter(n=>typeof n.id=="string"&&Array.isArray(n.items)).flatMap(n=>n.items.filter(o=>typeof o.id=="string").map(o=>`${n.id}:${o.id}`)),s=new Set;for(let n of r){let o=n.includes(":")?n:t?`${t}:${n}`:(()=>{let a=i.filter(c=>c.endsWith(`:${n}`));if(!a.length)throw new k({message:`${l(n)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${l("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(a.length>1)throw new k({message:`${l(n)}: \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:`${l("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});return a[0]})();if(!i.includes(o))throw new k({message:`${l(o)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});s.add(o)}return Array.from(s)}var lt=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}).option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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(r,t)=>{let i=Date.now(),s=J(t),n=typeof t?.cwd=="string"?t.cwd:process.cwd();V.intro("seed-design compat");try{let o=hr.safeParse({itemIds:r,...t});if(!o.success)throw o.error;let{data:a}=o,c=await ie(a.cwd),m=a.framework??c?.framework??"react",{start:g,stop:C}=V.spinner();g("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let u=await(async()=>{try{let h=await Promise.all((await de({baseUrl:a.baseUrl,framework:m})).map(async({id:w})=>fe({baseUrl:a.baseUrl,framework:m,registryId:w})));return C("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),h}catch(h){throw C("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),h}})(),$=wr({itemIds:a.itemIds,component:a.component}),I=a.all?u.flatMap(w=>w.items.map(P=>`${w.id}:${P.id}`)):$.length>0?br({publicRegistries:u,targetInputs:$,defaultRegistry:a.registry}):ie(a.cwd),A=Array.isArray(I)?I:await(async()=>{let h=await I;if(!h)throw new k({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 w=ct.resolve(a.cwd,h.path),P=nt({publicRegistries:u,rootPath:w});return P.length?P:(V.log.info(`${l(ct.relative(a.cwd,w)||h.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();if(!A.length){try{await v.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"empty",properties:{duration_ms:Date.now()-i}})}catch(h){s&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",h)}V.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0)}let T=ue(a.cwd,m),x=ye({publicRegistries:u,itemKeys:A,projectPackageVersions:T,framework:m});if(V.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${l(x.checkedItemKeys.join(", "))}`),!x.issues.length){let h=ae(m);V.outro(`\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC ${h.join(", ")}\uC640 \uD638\uD658\uB3FC\uC694.`);try{await v.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"compatible",properties:{checked_items_count:x.checkedItemKeys.length,incompatible_items_count:0,duration_ms:Date.now()-i}})}catch(w){s&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",w)}process.exit(0)}he({report:x,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC558\uC5B4\uC694.",framework:m});let y=ae(m);V.log.info(`\uD544\uC694\uD55C \uBC84\uC804\uC73C\uB85C ${y.join(" \uB610\uB294 ")}\uB97C \uB9DE\uCD98 \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD574\uBCF4\uC138\uC694.`),V.outro("\uD638\uD658\uC131 \uC774\uC288\uAC00 \uC788\uC5B4\uC694.");try{await v.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"incompatible",properties:{checked_items_count:x.checkedItemKeys.length,incompatible_items_count:new Set(x.issues.map(h=>h.itemKey)).size,issue_count:x.issues.length,duration_ms:Date.now()-i}})}catch(h){s&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",h)}process.exit(1)}catch(o){if(q(o)){try{await v.trackCommandOutcome(n,{command:"compat",status:"cancelled",properties:{duration_ms:Date.now()-i}})}catch(a){s&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}V.outro(l(o.message)),process.exit(0)}try{await v.trackCommandFailure(n,{command:"compat",error:o,properties:{duration_ms:Date.now()-i}})}catch(a){s&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}Y(o,{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:s}),process.exit(1)}})};import*as j from"@clack/prompts";import{z as se}from"zod";var Cr="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",$r=se.object({query:se.union([se.string(),se.array(se.string())]).optional().transform(e=>{let t=(Array.isArray(e)?e.join(" "):e)?.trim();return t||void 0}),baseUrl:se.string().optional(),cwd:se.string().default(process.cwd()),framework:se.enum(["react","lynx"]).optional(),raw:se.boolean()});function mt(e,r){return`${Cr}/${e}/${r}`}function xr(e,r){let t=`${r}${e.docUrl}`,i=`${r}/llms${e.docUrl}.txt`,s=[e.id,`- docs: ${t}`,`- llms.txt: ${i}`];if(e.snippetKey&&e.snippets&&e.snippets.length>0){let[n]=e.snippetKey.split(":");if(n)if(e.snippets.length===1)s.push(`- snippet: ${mt(n,e.snippets[0].path)}`);else{s.push("- snippet:");for(let o of e.snippets)s.push(` - ${o.label}: ${mt(n,o.path)}`)}}j.log.message(s.join(`
15
+ `))}function Ir(e,r){let t=e.length,i=r.length,s=Array.from({length:t+1},(n,o)=>Array.from({length:i+1},(a,c)=>o===0?c:c===0?o:0));for(let n=1;n<=t;n++)for(let o=1;o<=i;o++)s[n][o]=Math.min(s[n-1][o]+1,s[n][o-1]+1,s[n-1][o-1]+(e[n-1]!==r[o-1]?1:0));return s[t][i]}function ce(e,r,t=3){let i=e.toLowerCase();return r.map(s=>({value:s,dist:Ir(i,s.toLowerCase())})).filter(({dist:s})=>s>0&&s<=t).sort((s,n)=>s.dist-n.dist).map(({value:s})=>s)}function kr(e,r){if(e.length===0)return;let t=[],i=r.map(o=>o.id),s=ce(e[0],i);if(s.length===0){let o=r.flatMap(m=>m.sections.flatMap(g=>g.items.map(C=>`${m.id}/${g.id}/${C.id}`))),a=e.join("/"),c=ce(a,o,5);c.length>0&&t.push(...c.slice(0,3))}else{let o=r.find(a=>a.id===s[0]);if(o&&e.length>=2){let a=o.sections.map(m=>m.id),c=ce(e[1],a);if(c.length>0){let m=o.sections.find(g=>g.id===c[0]);if(m&&e.length>=3){let g=m.items.map(u=>u.id),C=ce(e[2],g);for(let u of C.slice(0,3))t.push(`${o.id}/${m.id}/${u}`)}else for(let g of c.slice(0,3))t.push(`${o.id}/${g}`)}else{let m=o.sections.flatMap(C=>C.items.map(u=>({path:`${o.id}/${C.id}/${u.id}`,id:u.id}))),g=ce(e[1],m.map(C=>C.id));for(let C of g.slice(0,3)){let u=m.find($=>$.id===C);u&&t.push(u.path)}}}else for(let a of s.slice(0,3))t.push(a)}if(t.length===0)return;let n=["","\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?"];for(let o of t)n.push(` - ${o}`);return n.join(`
16
+ `)}function dt(e){return e.split(/[\/\s]+/).map(r=>r.trim()).filter(Boolean)}function Pr(e){let[,r]=e.split(":");return r??e}function Sr({query:e,framework:r,categoryIds:t}){if(!e)return;let i=dt(e).map(Pr);if(!i.length)return;let[s]=i;return!t.includes(s)&&r&&t.includes(r)?[r,...i].join("/"):i.join("/")}function Rr(e,r){let t=r.toLowerCase();return e.flatMap(i=>i.sections.flatMap(s=>s.items.filter(n=>n.id.toLowerCase().includes(t)||n.title.toLowerCase().includes(t)).map(n=>({item:n,categoryLabel:i.label,sectionLabel:s.label}))))}async function we(e){let r=await j.select({message:"\uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(t=>({label:`${t.deprecated?"(deprecated) ":""}${t.title}`,value:t,hint:t.description}))});if(j.isCancel(r))throw new D;return r}async function pt(e){let r=await j.select({message:"\uC139\uC158\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(t=>({label:t.label,value:t,hint:`${t.items.length}\uAC1C \uD56D\uBAA9`}))});if(j.isCancel(r))throw new D;return r}async function Er(e){let r=await j.select({message:"\uCE74\uD14C\uACE0\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(t=>({label:t.label,value:t,hint:`${t.sections.reduce((i,s)=>i+s.items.length,0)}\uAC1C \uD56D\uBAA9`}))});if(j.isCancel(r))throw new D;return r}var ft=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}).option("--cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-f, --framework <framework>","\uD504\uB808\uC784\uC6CC\uD06C (react \uB610\uB294 lynx)").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 lynx action-button").example("seed-design docs react/components").example("seed-design docs react/components/action-button").example("seed-design docs react/updates/changelog --raw").action(async(r,t)=>{let i=Date.now(),s=J(t),n=t.raw??!1,o=process.cwd();n||j.intro("seed-design docs");try{let a=$r.safeParse({query:r,...t});if(!a.success)throw a.error;let{data:c}=a;o=c.cwd;let m=c.baseUrl??N,g=await ie(c.cwd).catch(()=>null),C=c.framework??g?.framework;if(c.raw&&!c.query)throw new k({message:"--raw \uBAA8\uB4DC\uC5D0\uC11C\uB294 \uCFFC\uB9AC\uAC00 \uD544\uC694\uD574\uC694.",hint:"\uC608: `seed-design docs react/updates/changelog --raw`"});let u=await(async()=>{if(n)return await Ae({baseUrl:m});let{start:y,stop:h}=j.spinner();y("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");try{let w=await Ae({baseUrl:m});return h("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC654\uC5B4\uC694."),w}catch(w){throw h("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),w}})(),{categories:$}=u,I=Sr({query:c.query,framework:C,categoryIds:$.map(y=>y.id)}),A,T=async()=>{if(I){let w=dt(I);if(n&&w.length>3)return;let P=$.find(S=>S.id===w[0]);if(P&&w.length>=2){let S=P.sections.find(b=>b.id===w[1]);if(S&&w.length>=3){let b=S.items.find(E=>E.id===w[2]);if(b)return b;let p=w[2].toLowerCase(),f=S.items.filter(E=>E.id.toLowerCase().includes(p)||E.title.toLowerCase().includes(p));if(f.length===0){let E=ce(w[2],S.items.map(L=>L.id)),M=E.length>0?`
17
17
 
18
18
  \u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
19
- ${v.slice(0,3).map(he=>` - ${P.id}/${R.id}/${he}`).join(`
20
- `)}`:"";throw new $({message:`${l(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${L}`,hint:`\`seed-design docs ${P.id}/${R.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}return M.length===1?M[0]:await we(M)}if(R)return await we(R.items);let q=b[1].toLowerCase(),x=P.sections.flatMap(d=>d.items.filter(T=>T.id.toLowerCase().includes(q)||T.title.toLowerCase().includes(q)).map(T=>({item:T,sectionLabel:d.label})));if(x.length===0){let d=P.sections.map(F=>F.id),T=ae(b[1],d),M=P.sections.flatMap(F=>F.items.map(be=>({path:`${P.id}/${F.id}/${be.id}`,id:be.id}))),v=ae(b[1],M.map(F=>F.id)),L=[...T.slice(0,2).map(F=>`${P.id}/${F}`),...v.slice(0,2).map(F=>M.find(be=>be.id===F)?.path).filter(F=>F!=null)],he=L.length>0?`
19
+ ${E.slice(0,3).map(L=>` - ${P.id}/${S.id}/${L}`).join(`
20
+ `)}`:"";throw new k({message:`${l(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${M}`,hint:`\`seed-design docs ${P.id}/${S.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}return f.length===1?f[0]:await we(f)}if(S)return await we(S.items);let K=w[1].toLowerCase(),U=P.sections.flatMap(b=>b.items.filter(p=>p.id.toLowerCase().includes(K)||p.title.toLowerCase().includes(K)).map(p=>({item:p,sectionLabel:b.label})));if(U.length===0){let b=P.sections.map(R=>R.id),p=ce(w[1],b),f=P.sections.flatMap(R=>R.items.map(be=>({path:`${P.id}/${R.id}/${be.id}`,id:be.id}))),E=ce(w[1],f.map(R=>R.id)),M=[...p.slice(0,2).map(R=>`${P.id}/${R}`),...E.slice(0,2).map(R=>f.find(be=>be.id===R)?.path).filter(R=>R!=null)],L=M.length>0?`
21
21
 
22
22
  \u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
23
- ${L.map(F=>` - ${F}`).join(`
24
- `)}`:"";throw new $({message:`${l(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${he}`,hint:`\`seed-design docs ${P.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(x.length===1)return x[0].item;let p=await A.select({message:`${l(b[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:x.map(({item:d,sectionLabel:T})=>({label:`[${T}] ${d.title}`,value:d,hint:d.description}))});if(A.isCancel(p))throw new D;return p}if(P){if(P.sections.length===1)return await we(P.sections[0].items);let R=await ct(P.sections);return await we(R.items)}let U=kr(k,I);if(U.length===0){let R=$r(b,k);throw new $({message:`${l(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${R??""}`,hint:"`seed-design docs`\uB85C \uC804\uCCB4 \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694."})}if(U.length===1)return U[0].item;let B=await A.select({message:`${l(I)}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:U.map(({item:R,categoryLabel:q,sectionLabel:x})=>({label:`[${q} > ${x}] ${R.title}`,value:R,hint:R.description}))});if(A.isCancel(B))throw new D;return B}let h=await Pr(k),w;return h.sections.length===1?w=h.sections[0]:w=await ct(h.sections),await we(w.items)};if(i)try{S=await E()}catch(h){if(G(h))throw h}else S=await E();if(i){let h;if(S){let w=`${m}/llms${S.docUrl}.txt`;h=await Ue({url:w})}else h=await Ke({baseUrl:m,query:I});console.log(h)}else br(S,m),A.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let C=Date.now()-n;try{await _.trackCommandOutcome(s,{command:"docs",status:"completed",properties:{query:c.query??null,item_id:S?.id??c.query??null,has_snippet:!!(S?.snippets&&S.snippets.length>0),raw_mode:i,duration_ms:C}})}catch(h){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",h)}}catch(a){if(G(a)){try{await _.trackCommandOutcome(s,{command:"docs",status:"cancelled",properties:{raw_mode:i,duration_ms:Date.now()-n}})}catch(c){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}i||A.outro(l(a.message)),process.exit(0)}try{await _.trackCommandFailure(s,{command:"docs",error:a,properties:{raw_mode:i,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(i){let c=a instanceof Error?a.message:String(a);console.error(c),process.exit(1)}Y(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 V from"@clack/prompts";import{z as Se}from"zod";import Sr from"dedent";var Er=Se.object({cwd:Se.string(),yes:Se.boolean().optional(),default:Se.boolean().optional()}),pt=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=W(t),o=typeof t?.cwd=="string"?t.cwd:process.cwd();V.intro("seed-design.json \uD30C\uC77C \uC0DD\uC131");try{let i=Er.safeParse(t);if(!i.success)throw i.error;let s=i.data,a=s.yes||s.default,c=a?{...H,framework:Ee(s.cwd)}:await Ae(s.cwd),{start:m,stop:y}=V.spinner();m("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC911...");let g=await(async()=>{try{return(await Ce({cwd:s.cwd,config:c})).relativePath}catch(k){throw y("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC774 \uC911\uB2E8\uB410\uC5B4\uC694."),k}})();y(`seed-design.json \uD30C\uC77C\uC774 ${l(g)}\uC5D0 \uC0DD\uC131\uB410\uC5B4\uC694.`),V.log.info(l("seed-design add {component} \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD574\uBCF4\uC138\uC694!")),V.log.info(l("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.")),V.note(Sr(`SEED Design CLI\uB294 \uAC1C\uC120\uC744 \uC704\uD574 \uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130\uB97C \uC218\uC9D1\uD574\uC694.
23
+ ${M.map(R=>` - ${R}`).join(`
24
+ `)}`:"";throw new k({message:`${l(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${L}`,hint:`\`seed-design docs ${P.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(U.length===1)return U[0].item;let W=await j.select({message:`${l(w[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:U.map(({item:b,sectionLabel:p})=>({label:`[${p}] ${b.title}`,value:b,hint:b.description}))});if(j.isCancel(W))throw new D;return W}if(P){if(P.sections.length===1)return await we(P.sections[0].items);let S=await pt(P.sections);return await we(S.items)}let F=Rr($,I);if(F.length===0){let S=kr(w,$);throw new k({message:`${l(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${S??""}`,hint:"`seed-design docs`\uB85C \uC804\uCCB4 \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694."})}if(F.length===1)return F[0].item;let ee=await j.select({message:`${l(I)}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:F.map(({item:S,categoryLabel:K,sectionLabel:U})=>({label:`[${K} > ${U}] ${S.title}`,value:S,hint:S.description}))});if(j.isCancel(ee))throw new D;return ee}let y=await Er($),h;return y.sections.length===1?h=y.sections[0]:h=await pt(y.sections),await we(h.items)};if(n)try{A=await T()}catch(y){if(q(y))throw y}else A=await T();if(n){let y;if(A){let h=`${m}/llms${A.docUrl}.txt`;y=await Ne({url:h})}else y=await Ve({baseUrl:m,query:I});console.log(y)}else xr(A,m),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let x=Date.now()-i;try{await v.trackCommandOutcome(o,{command:"docs",status:"completed",properties:{query:c.query??null,item_id:A?.id??c.query??null,has_snippet:!!(A?.snippets&&A.snippets.length>0),raw_mode:n,duration_ms:x}})}catch(y){s&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",y)}}catch(a){if(q(a)){try{await v.trackCommandOutcome(o,{command:"docs",status:"cancelled",properties:{raw_mode:n,duration_ms:Date.now()-i}})}catch(c){s&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}n||j.outro(l(a.message)),process.exit(0)}try{await v.trackCommandFailure(o,{command:"docs",error:a,properties:{raw_mode:n,duration_ms:Date.now()-i}})}catch(c){s&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}if(n){let c=a instanceof Error?a.message:String(a);console.error(c),process.exit(1)}Y(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:s}),process.exit(1)}})};import*as B from"@clack/prompts";import{z as Ee}from"zod";import vr from"dedent";var Tr=Ee.object({cwd:Ee.string(),yes:Ee.boolean().optional(),default:Ee.boolean().optional()}),gt=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 r=>{let t=Date.now(),i=J(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();B.intro("seed-design.json \uD30C\uC77C \uC0DD\uC131");try{let n=Tr.safeParse(r);if(!n.success)throw n.error;let o=n.data,a=o.yes||o.default,c=a?{...G,framework:ve(o.cwd)}:await Oe(o.cwd),{start:m,stop:g}=B.spinner();m("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC911...");let C=await(async()=>{try{return(await Ce({cwd:o.cwd,config:c})).relativePath}catch($){throw g("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC774 \uC911\uB2E8\uB410\uC5B4\uC694."),$}})();g(`seed-design.json \uD30C\uC77C\uC774 ${l(C)}\uC5D0 \uC0DD\uC131\uB410\uC5B4\uC694.`),B.log.info(l("seed-design add {component} \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD574\uBCF4\uC138\uC694!")),B.log.info(l("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.")),B.note(vr(`SEED Design CLI\uB294 \uAC1C\uC120\uC744 \uC704\uD574 \uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130\uB97C \uC218\uC9D1\uD574\uC694.
25
25
 
26
26
  \uBE44\uD65C\uC131\uD654\uD558\uB824\uBA74:
27
27
  \u2022 seed-design.json\uC5D0\uC11C ${l('"telemetry": false')}\uB85C \uC124\uC815
28
28
  \u2022 ${l("DISABLE_TELEMETRY=true")} \uD658\uACBD \uBCC0\uC218 \uC124\uC815
29
29
 
30
- \uC790\uC138\uD55C \uB0B4\uC6A9: https://seed-design.com/react/getting-started/cli/configuration#telemetry`),"Telemetry \uC548\uB0B4"),V.outro("\uC791\uC5C5\uC774 \uC644\uB8CC\uB410\uC5B4\uC694.");let u=Date.now()-r;try{await _.trackCommandOutcome(s.cwd,{command:"init",status:"completed",properties:{tsx:c.tsx,rsc:c.rsc,telemetry:c.telemetry,yes_option:a,duration_ms:u}})}catch(k){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",k)}}catch(i){if(G(i)){try{await _.trackCommandOutcome(o,{command:"init",status:"cancelled",properties:{duration_ms:Date.now()-r}})}catch(s){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",s)}V.outro(l(i.message)),process.exit(0)}try{await _.trackCommandFailure(o,{command:"init",error:i,properties:{duration_ms:Date.now()-r}})}catch(s){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",s)}Y(i,{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 Rr}from"cac";var Tr="seed-design",re=Rr(Tr);async function vr(){let e=se();re.option("--verbose","\uC624\uB958 \uC0C1\uC138 \uC815\uBCF4\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4."),st(re),ot(re),nt(re),mt(re),pt(re),re.version(e.version||"1.0.0","-v, --version"),re.help(),re.parse()}vr();
30
+ \uC790\uC138\uD55C \uB0B4\uC6A9: https://seed-design.com/react/getting-started/cli/configuration#telemetry`),"Telemetry \uC548\uB0B4"),B.outro("\uC791\uC5C5\uC774 \uC644\uB8CC\uB410\uC5B4\uC694.");let u=Date.now()-t;try{await v.trackCommandOutcome(o.cwd,{command:"init",status:"completed",properties:{tsx:c.tsx,rsc:c.rsc,telemetry:c.telemetry,yes_option:a,duration_ms:u}})}catch($){i&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",$)}}catch(n){if(q(n)){try{await v.trackCommandOutcome(s,{command:"init",status:"cancelled",properties:{duration_ms:Date.now()-t}})}catch(o){i&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",o)}B.outro(l(n.message)),process.exit(0)}try{await v.trackCommandFailure(s,{command:"init",error:n,properties:{duration_ms:Date.now()-t}})}catch(o){i&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",o)}Y(n,{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:i}),process.exit(1)}})};import{cac as _r}from"cac";var jr="seed-design",oe=_r(jr);async function Ar(){let e=ne();oe.option("--verbose","\uC624\uB958 \uC0C1\uC138 \uC815\uBCF4\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4."),it(oe),at(oe),lt(oe),ft(oe),gt(oe),oe.version(e.version||"1.0.0","-v, --version"),oe.help(),oe.parse()}Ar();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seed-design/cli",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,6 +10,7 @@ import type { CAC } from "cac";
10
10
  import { BASE_URL } from "../constants";
11
11
  import { analytics } from "../utils/analytics";
12
12
  import { highlight } from "../utils/color";
13
+ import { readRawOptionValue, resolveSeedVersion } from "../utils/registry-source";
13
14
  import {
14
15
  analyzeRegistryItemCompatibility,
15
16
  getProjectSeedPackageVersionSpecs,
@@ -30,6 +31,7 @@ const addAllOptionsSchema = z.object({
30
31
  includeDeprecated: z.boolean().optional(),
31
32
  cwd: z.string(),
32
33
  baseUrl: z.string().default(BASE_URL),
34
+ seedReactVersion: z.string().optional(),
33
35
  framework: z.enum(["react", "lynx"]).optional(),
34
36
  onDiff: z.enum(["overwrite", "backup"]).optional(),
35
37
  });
@@ -51,6 +53,7 @@ export const addAllCommand = (cli: CAC) => {
51
53
  "the base url of the registry. defaults to the current directory.",
52
54
  { default: BASE_URL },
53
55
  )
56
+ .option("--seed-react-version <version>", "지정한 SEED React 버전의 레지스트리 사용 (예: 1.2)")
54
57
  .option("-f, --framework <framework>", "프레임워크 (react 또는 lynx)")
55
58
  .option("--on-diff <mode>", "Action when file differs: overwrite or backup")
56
59
  .example("seed-design add-all ui --include-deprecated")
@@ -62,7 +65,9 @@ export const addAllCommand = (cli: CAC) => {
62
65
  p.intro("seed-design add-all");
63
66
 
64
67
  try {
65
- const parsed = addAllOptionsSchema.safeParse({ registryIds, ...opts });
68
+ // CAC가 --seed-react-version 값을 숫자로 뭉개므로 rawArgs에서 원본 문자열을 읽어 덮어쓴다.
69
+ const seedReactVersion = readRawOptionValue(cli.rawArgs, "--seed-react-version");
70
+ const parsed = addAllOptionsSchema.safeParse({ registryIds, ...opts, seedReactVersion });
66
71
  if (!parsed.success) {
67
72
  throw parsed.error;
68
73
  }
@@ -70,9 +75,10 @@ export const addAllCommand = (cli: CAC) => {
70
75
  const { data: options } = parsed;
71
76
 
72
77
  const cwd = options.cwd;
73
- const baseUrl = options.baseUrl;
78
+ const versionSource = resolveSeedVersion(options);
79
+ const baseUrl = versionSource?.baseUrl ?? options.baseUrl;
74
80
  const config = await getConfig(cwd);
75
- const framework = options.framework ?? config.framework;
81
+ const framework = versionSource?.framework ?? options.framework ?? config.framework;
76
82
  const rootPath = path.resolve(cwd, config.path);
77
83
 
78
84
  const { start, stop } = p.spinner();
@@ -9,6 +9,7 @@ import { z } from "zod";
9
9
  import type { CAC } from "cac";
10
10
  import { BASE_URL } from "../constants";
11
11
  import { highlight } from "../utils/color";
12
+ import { readRawOptionValue, resolveSeedVersion } from "../utils/registry-source";
12
13
  import { installDependencies } from "../utils/install";
13
14
  import { analytics } from "../utils/analytics";
14
15
  import {
@@ -32,6 +33,7 @@ const addOptionsSchema = z.object({
32
33
  all: z.boolean(),
33
34
  cwd: z.string(),
34
35
  baseUrl: z.string().default(BASE_URL),
36
+ seedReactVersion: z.string().optional(),
35
37
  framework: z.enum(["react", "lynx"]).optional(),
36
38
  onDiff: z.enum(["overwrite", "backup"]).optional(),
37
39
  });
@@ -50,6 +52,7 @@ export const addCommand = (cli: CAC) => {
50
52
  "the base url of the registry. defaults to the current directory.",
51
53
  { default: BASE_URL },
52
54
  )
55
+ .option("--seed-react-version <version>", "지정한 SEED React 버전의 레지스트리 사용 (예: 1.2)")
53
56
  .option("-f, --framework <framework>", "프레임워크 (react 또는 lynx)")
54
57
  .option("--on-diff <mode>", "Action when file differs: overwrite or backup")
55
58
  .example("seed-design add ui:action-button")
@@ -61,7 +64,9 @@ export const addCommand = (cli: CAC) => {
61
64
  p.intro("seed-design add");
62
65
 
63
66
  try {
64
- const parsed = addOptionsSchema.safeParse({ itemIds, ...opts });
67
+ // CAC가 --seed-react-version 값을 숫자로 뭉개므로 rawArgs에서 원본 문자열을 읽어 덮어쓴다.
68
+ const seedReactVersion = readRawOptionValue(cli.rawArgs, "--seed-react-version");
69
+ const parsed = addOptionsSchema.safeParse({ itemIds, ...opts, seedReactVersion });
65
70
  if (!parsed.success) {
66
71
  throw parsed.error;
67
72
  }
@@ -78,9 +83,10 @@ export const addCommand = (cli: CAC) => {
78
83
  }
79
84
 
80
85
  const cwd = options.cwd;
81
- const baseUrl = options.baseUrl;
86
+ const versionSource = resolveSeedVersion(options);
87
+ const baseUrl = versionSource?.baseUrl ?? options.baseUrl;
82
88
  const config = await getConfig(cwd);
83
- const framework = options.framework ?? config.framework;
89
+ const framework = versionSource?.framework ?? options.framework ?? config.framework;
84
90
  const rootPath = path.resolve(cwd, config.path);
85
91
 
86
92
  const { start, stop } = p.spinner();
@@ -0,0 +1,48 @@
1
+ import { describe, expect, it } from "bun:test";
2
+ import { readRawOptionValue, resolveSeedVersion } from "../utils/registry-source";
3
+
4
+ describe("readRawOptionValue", () => {
5
+ it("`--flag value` 형식에서 원본 문자열을 읽는다", () => {
6
+ // CAC는 이 값을 숫자 1로 뭉개지만 rawArgs엔 "1.0"이 그대로 남아있다.
7
+ expect(
8
+ readRawOptionValue(
9
+ ["node", "cli", "add", "--seed-react-version", "1.0"],
10
+ "--seed-react-version",
11
+ ),
12
+ ).toBe("1.0");
13
+ });
14
+
15
+ it("`--flag=value` 형식에서 원본 문자열을 읽는다", () => {
16
+ expect(
17
+ readRawOptionValue(
18
+ ["node", "cli", "add", "--seed-react-version=1.2"],
19
+ "--seed-react-version",
20
+ ),
21
+ ).toBe("1.2");
22
+ });
23
+
24
+ it("플래그가 없으면 undefined를 반환한다", () => {
25
+ expect(readRawOptionValue(["node", "cli", "add"], "--seed-react-version")).toBeUndefined();
26
+ });
27
+ });
28
+
29
+ describe("resolveSeedVersion", () => {
30
+ it("지원하는 버전을 아카이브 baseUrl로 해석한다", () => {
31
+ expect(resolveSeedVersion({ seedReactVersion: "1.0" })).toEqual({
32
+ framework: "react",
33
+ baseUrl: "https://v1-0.seed-design.io",
34
+ });
35
+ expect(resolveSeedVersion({ seedReactVersion: "1.2" })).toEqual({
36
+ framework: "react",
37
+ baseUrl: "https://v1-2.seed-design.io",
38
+ });
39
+ });
40
+
41
+ it("버전이 없으면 null을 반환한다", () => {
42
+ expect(resolveSeedVersion({})).toBeNull();
43
+ });
44
+
45
+ it("지원하지 않는 버전이면 에러를 던진다", () => {
46
+ expect(() => resolveSeedVersion({ seedReactVersion: "9.9" })).toThrow();
47
+ });
48
+ });
@@ -64,9 +64,7 @@ const sessionId = generateSessionId();
64
64
  let hasShownMessage = false;
65
65
 
66
66
  function omitUndefined(properties: Record<string, unknown>): Record<string, unknown> {
67
- return Object.fromEntries(
68
- Object.entries(properties).filter(([, value]) => value !== undefined),
69
- );
67
+ return Object.fromEntries(Object.entries(properties).filter(([, value]) => value !== undefined));
70
68
  }
71
69
 
72
70
  function getSafeErrorType(error: unknown): string {
@@ -109,7 +107,9 @@ async function track(cwd: string, { event, properties = {} }: TrackOptions): Pro
109
107
  // PostHog API 호출 (fire-and-forget)
110
108
  try {
111
109
  if (!process.env.POSTHOG_HOST || !process.env.POSTHOG_API_KEY) {
112
- console.error("[Telemetry] POSTHOG_HOST 또는 POSTHOG_API_KEY가 없어서 이벤트를 전송하지 않아요.");
110
+ console.error(
111
+ "[Telemetry] POSTHOG_HOST 또는 POSTHOG_API_KEY가 없어서 이벤트를 전송하지 않아요.",
112
+ );
113
113
  return;
114
114
  }
115
115
 
@@ -0,0 +1,54 @@
1
+ import { CliError } from "./error";
2
+
3
+ /**
4
+ * 아카이브된 SEED React 버전별 레지스트리 도메인.
5
+ *
6
+ * 모든 minor 버전이 아니라 보존(아카이브)된 버전만 서브도메인으로 배포되어 있어,
7
+ * 동적으로 URL을 만들지 않고 알려진 버전만 하드코딩한다. 새 버전을 아카이브하면 여기 추가한다.
8
+ */
9
+ const SEED_REACT_VERSION_BASE_URLS: Record<string, string> = {
10
+ "1.0": "https://v1-0.seed-design.io",
11
+ "1.1": "https://v1-1.seed-design.io",
12
+ "1.2": "https://v1-2.seed-design.io",
13
+ };
14
+
15
+ /**
16
+ * `--seed-react-version` 옵션을 레지스트리 소스(framework + baseUrl)로 해석한다.
17
+ * 옵션이 없으면 null을 반환한다 (= 레거시 `--baseUrl` / `--framework` 경로 사용).
18
+ *
19
+ * 지원하지 않는 버전이면 사용 가능한 버전을 안내하며 에러를 던진다.
20
+ * 옵션이 지정되면 framework도 react로 고정한다. (Lynx는 자체 버전 배포가 없어 별도 옵션을
21
+ * 제공하지 않으며, 기본값(latest)을 쓰거나 필요 시 `--baseUrl`로 직접 지정한다.)
22
+ */
23
+ export function resolveSeedVersion(opts: {
24
+ seedReactVersion?: string;
25
+ }): { framework: "react"; baseUrl: string } | null {
26
+ const version = opts.seedReactVersion?.trim();
27
+ if (!version) return null;
28
+
29
+ const baseUrl = SEED_REACT_VERSION_BASE_URLS[version];
30
+ if (!baseUrl) {
31
+ throw new CliError({
32
+ message: `지원하지 않는 SEED React 버전이에요: "${opts.seedReactVersion}"`,
33
+ hint: `사용 가능한 버전: ${Object.keys(SEED_REACT_VERSION_BASE_URLS).join(", ")}`,
34
+ });
35
+ }
36
+
37
+ return { framework: "react", baseUrl };
38
+ }
39
+
40
+ /**
41
+ * CLI rawArgs에서 옵션의 원본 문자열 값을 직접 읽는다.
42
+ *
43
+ * CAC(내부 mri)는 `--seed-react-version 1.0`의 값을 숫자 1로 강제변환해 trailing zero를
44
+ * 잃는다(→ z.string() 검증도 깨진다). 원본 문자열은 rawArgs에 그대로 남아있으므로 여기서
45
+ * 직접 읽어 coercion을 우회한다. `--flag value`와 `--flag=value` 두 형식을 지원한다.
46
+ */
47
+ export function readRawOptionValue(rawArgs: string[], flag: string): string | undefined {
48
+ for (let i = 0; i < rawArgs.length; i++) {
49
+ const arg = rawArgs[i];
50
+ if (arg === flag) return rawArgs[i + 1];
51
+ if (arg.startsWith(`${flag}=`)) return arg.slice(flag.length + 1);
52
+ }
53
+ return undefined;
54
+ }