@seed-design/cli 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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:
2
+ import*as me from"@clack/prompts";import{cosmiconfig as It}from"cosmiconfig";import{z as le}from"zod";import*as te from"@clack/prompts";import{ZodError as ut}from"zod";import gt from"picocolors";var m=e=>gt.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 Y(e){return!e||typeof e!="object"||!("verbose"in e)?!1:e.verbose===!0}function yt(e,t){if(e instanceof $)return{reason:e.message,hint:e.hint??t,details:e.details,stack:ht(e.cause??e)};if(e instanceof ut){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 ht(e){if(e instanceof Error)return e.stack}function Q(e,{defaultMessage:t,defaultHint:r,verbose:n=!1}){let o=yt(e,r);te.log.error(t),te.log.error(`\uC6D0\uC778: ${o.reason}`);for(let i of o.details)te.log.info(i);o.hint&&te.log.info(`\uD574\uACB0 \uD78C\uD2B8: ${o.hint}`),n&&o.stack&&(te.log.message(m(`
3
+ [verbose] stack trace`)),te.log.message(o.stack)),te.outro(m("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as X from"@clack/prompts";import xt from"fs-extra";import Ae from"path";import wt from"findup-sync";import bt from"fs-extra";var Ct="package.json";function $t(e=process.cwd()){let t=wt(Ct,{cwd:e});if(!t)throw new Error("No package.json file found in the project.");return t}function ie(e=process.cwd()){let t=$t(e);return bt.readJSONSync(t)}var H={rsc:!1,tsx:!0,framework:"react",path:"./seed-design",telemetry:!0};function Re(e){try{let t=ie(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 De(e){let t=Re(e);return await X.group({tsx:()=>X.confirm({message:`${m("TypeScript")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:H.tsx}),rsc:()=>X.confirm({message:`${m("React Server Components")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:H.rsc}),framework:()=>X.select({message:`\uC5B4\uB5A4 ${m("\uD504\uB808\uC784\uC6CC\uD06C")}\uB97C \uC0AC\uC6A9\uD558\uC2DC\uB098\uC694?`,initialValue:t,options:[{value:"react",label:"React"},{value:"lynx",label:"Lynx"}]}),path:()=>X.text({message:`${m("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:()=>X.confirm({message:`\uAC1C\uC120\uC744 \uC704\uD574 ${m("\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=Ae.resolve(e,"seed-design.json");return await xt.writeFile(r,`${JSON.stringify(t,null,2)}
4
+ `,"utf-8"),{relativePath:Ae.relative(process.cwd(),r),targetPath:r}}var Oe="seed-design",kt=It(Oe,{searchPlaces:[`${Oe}.json`]}),Le=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 t=await ne(e);if(t)return t;me.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let r=await me.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(me.isCancel(r)||!r)throw new D;try{return await Ce({cwd:e,config:H}),me.log.message("seed-design.json \uD30C\uC77C\uC774 \uC0DD\uC131\uB410\uC5B4\uC694."),Le.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 ne(e){let t=await kt.search(e);if(!t||t.isEmpty)return null;try{return Le.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 p of c.itemIds){let y=t.find(w=>w.id===c.registryId)?.items.find(w=>w.id===p);if(!y)throw new Error(`Cannot find dependency item: ${c.registryId}:${p}`);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 p=t.find(y=>y.id===s)?.items.find(y=>y.id===c);if(!p)throw new Error(`Cannot find snippet: "${i}"`);o(s,p)}return{registryItemsToAdd:r,npmDependenciesToAdd:n}}import*as _e from"@clack/prompts";import{z as d}from"zod";var ve=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()}))}),Te=d.object({id:d.string(),hideFromCLICatalog:d.boolean().optional(),items:d.array(ve.omit({snippets:!0}).extend({snippets:d.array(d.object({path:d.string(),dependencies:d.record(d.string(),d.string()).optional()}))}))}),Me=d.array(d.object({id:d.string()})),Pt=d.object({label:d.string(),path:d.string()}),St=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(Pt).optional()}),Et=d.object({id:d.string(),label:d.string(),items:d.array(St)}),Rt=d.object({id:d.string(),label:d.string(),sections:d.array(Et)}),Ue=d.object({categories:d.array(Rt)});var vt=1e4;async function Fe(e,t=vt){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 je({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}=Ue.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 de({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 fe({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 Tt({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}=ve.safeParse(i);if(!s)throw new Error(`Failed to parse ${n}: ${c?.message}`);return a}async function Ke({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 Ne({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
5
  ${n.map(a=>` - ${a}`).join(`
6
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
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")}
8
+ `)}`})}async function ze({baseUrl:e,framework:t,registryId:r,registryItemIds:n}){return await Promise.all(n.map(async o=>{try{return await Tt({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:p}=Te.safeParse(a);throw c?(_e.log.error(`${o} \uC2A4\uB2C8\uD3AB\uC774 ${r} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC5C6\uC5B4\uC694.`),_e.log.info(`${r} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC874\uC7AC\uD558\uB294 \uC2A4\uB2C8\uD3AB:
9
+ ${p.items.map(y=>y.id).join(`
10
+ `)}`),i):new Error(`Failed to parse registry index for ${r}`)}}))}import{promises as Lt}from"fs";import{tmpdir as Mt}from"os";import qe from"path";import{transformFromAstSync as _t}from"@babel/core";import jt from"@babel/plugin-transform-typescript";import*as Ie from"recast";import{parse as At}from"@babel/parser";var Dt={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"]},Ve=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let n=Ie.parse(r,{parser:{parse:i=>At(i,Dt)}}),o=_t(n,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[jt],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return Ie.print(o.ast).code};import{SyntaxKind as Ot}from"ts-morph";var Be=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(Ot.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 Ut,ScriptKind as Ft}from"ts-morph";var Kt=[Be],Nt=new Ut({compilerOptions:{}});async function zt(e){let t=await Lt.mkdtemp(qe.join(Mt(),"seed-design-"));return qe.join(t,e)}async function Ge(e){let t=await zt(e.filename),r=Nt.createSourceFile(t,e.raw,{scriptKind:Ft.TSX});for(let n of Kt)n({sourceFile:r,...e});return await Ve({sourceFile:r,...e})}import*as J from"@clack/prompts";import ge from"fs-extra";import Z from"path";import{createPatch as Vt}from"diff";import Bt 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:p}of e){let y=Z.join(t,c);ge.ensureDirSync(y);let w=await ze({baseUrl:n,framework:o,registryId:c,registryItemIds:p.map(g=>g.id)});for(let{id:g,snippets:x}of w){let I=await Promise.all(x.map(async E=>{let C=await Ge({filename:E.path,config:i,raw:E.content}),h=Z.join(y,E.path);return i.tsx||(h=h.replace(/\.tsx$/,".jsx"),h=h.replace(/\.ts$/,".js")),{filePath:h,content:C,relativePath:Z.relative(r,h),name:`${c}:${g}`}})),v=[];for(let E of I){let{filePath:C,content:h,relativePath:u}=E;if(await ge.ensureDir(Z.dirname(C)),ge.existsSync(C)){let b=await ge.readFile(C,"utf-8");if(b===h){J.log.info(`${m(u)}: \uC774\uBBF8 \uCD5C\uC2E0 \uC0C1\uD0DC\uC608\uC694.`);continue}let k=Z.basename(C),z=Z.extname(C),W=Z.basename(C,z),P=Date.now(),V=`legacy-${W}-${P}${z}`,U=await(async()=>{if(s)return s;let S=Vt(u,b,h),l=Bt(S);return J.log.message(`
11
+ ${m(u)}: \uD604\uC7AC \uD30C\uC77C\uACFC \uBC1B\uC73C\uB824\uB294 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC774 \uB2EC\uB77C\uC694.
12
+ `),J.log.message(l),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:`${k} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${V}\uC73C\uB85C \uC62E\uAE30\uACE0 ${k} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(J.isCancel(U)||U==="skip"){J.log.info(`${m(u)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(U==="backup"){let S=Z.dirname(C),l=Z.join(S,V);await ge.rename(C,l),J.log.info(`${m(u)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${m(Z.relative(r,l))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await ge.writeFile(C,h),v.push(E)}if(v.length>0){let E=v.map(({name:C,relativePath:h})=>({name:C,path:h}));a.push(...E),J.log.success(`${m(`${c}:${g}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${m(E.map(C=>C.path).join(", "))}`)}}}}import*as j from"@clack/prompts";import dr from"path";import{z as re}from"zod";var K="https://seed-design.io";var He={"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 t=e.seedReactVersion?.trim();if(!t)return null;let r=He[t];if(!r)throw new $({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(He).join(", ")}`});return{framework:"react",baseUrl:r}}import*as We from"@clack/prompts";import{execa as Gt}from"execa";import{detect as qt}from"@antfu/ni";async function Je(e){let t=await qt({programmatic:!0,cwd:e});return t==="yarn@berry"?"yarn":t==="pnpm@6"?"pnpm":t==="bun"?"bun":t==="deno"?"deno":t??"npm"}async function Se({cwd:e,deps:t,dev:r=!1}){let{start:n,stop:o}=We.spinner(),i=await Je(e),a={...ie(e).dependencies},c=new Set(t.filter(I=>!a[I])),p=new Set(t.filter(I=>a[I]));if(!c.size)return{installed:new Set,filtered:c};n("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let g=[i==="npm"?"install":"add",r?"-D":null,...c].filter(I=>!!I),x=`${i} ${g.join(" ")}`;try{await Gt(i,g,{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: ${x}`],cause:I})}return o("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:c,filtered:p}}import{randomUUID as Ht}from"node:crypto";import*as Qe from"@clack/prompts";var Jt="seed_cli";async function Wt(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await ne(e))?.telemetry===!1)return!1}catch{}return!0}function Yt(){return Ht()}var Qt=Yt(),Ye=!1;function Xe(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Xt(e){return e instanceof Error&&e.name?e.name:typeof e=="object"&&e!==null?e.constructor?.name??"Object":typeof e}async function Ze(e,{event:t,properties:r={}}){if(!await Wt(e))return;let o=`${Jt}.${t}`;Ye||(Qe.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)"),Ye=!0);try{let i="https://us.i.posthog.com/capture",s={"Content-Type":"application/json"},a={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:o,distinct_id:Qt,properties:{...r,$process_person_profile:!1},timestamp:new Date().toISOString()},c=new AbortController,p=setTimeout(()=>c.abort(),5e3);try{await fetch(i,{method:"POST",headers:s,body:JSON.stringify(a),signal:c.signal})}finally{clearTimeout(p)}}catch{}}async function et(e,{command:t,status:r,result:n,properties:o={}}){await Ze(e,{event:t,properties:Xe({status:r,result:n,...o})})}async function Zt(e,{command:t,error:r,result:n,properties:o={}}){await et(e,{command:t,status:"failed",result:n,properties:Xe({error_type:Xt(r),...o})})}var R={track:Ze,trackCommandFailure:Zt,trackCommandOutcome:et};import*as pe from"@clack/prompts";import er from"fs-extra";import tr from"path";import{intersects as rr,satisfies as sr,valid as rt,validRange as st}from"semver";var or=["@seed-design/react","@seed-design/css"],ir=["@seed-design/lynx-react","@seed-design/lynx-css"];function ae(e){return e==="lynx"?ir:or}var tt="workspace:",nr="npm:";function ue(e,t="react"){try{let r=ie(e),n={...r.dependencies,...r.devDependencies,...r.peerDependencies,...r.optionalDependencies},o={},i=ae(t);for(let s of i){let a=n[s];typeof a=="string"&&(o[s]=a)}return o}catch{return{}}}function ye({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(p=>[`${c.id}:${p.id}`,p]))),s=[],a=ae(n);for(let c of o){let p=i.get(c);if(!p)continue;let y=ar(p,n);for(let w of a){let g=Array.from(y[w]??[]);if(!g.length)continue;let x=r[w];if(!x){s.push({itemKey:c,packageName:w,requiredRanges:g,type:"missing-package"});continue}let I=cr(x);if(!I){s.push({itemKey:c,packageName:w,requiredRanges:g,installedVersionSpec:x,type:"invalid-version-spec"});continue}g.every(E=>lr({currentVersionSpec:I,requiredRange:E}))||s.push({itemKey:c,packageName:w,requiredRanges:g,installedVersionSpec:x,type:"incompatible-version"})}}return{checkedItemKeys:o,projectPackageVersions:r,issues:s}}function he({report:e,title:t,framework:r="react"}){if(!e.issues.length)return;let n=ae(r);pe.log.warn(t),pe.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${n.map(i=>`${i}@${m(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()){pe.log.warn(m(i));for(let a of s){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 ot({publicRegistries:e,rootPath:t}){let r=[];for(let n of e)for(let o of n.items)o.snippets.some(s=>mr(s.path).some(a=>er.existsSync(tr.join(t,n.id,a))))&&r.push(`${n.id}:${o.id}`);return r}function ar(e,t="react"){let r=ae(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??{}))pr(i,t)&&n[i].add(s);return n}function cr(e){let t=e.trim();if(t.startsWith(tt)&&(t=t.slice(tt.length).trim()),t.startsWith(nr)){let r=t.split("@").at(-1);if(!r)return null;t=r}return!t||t==="*"?null:rt(t)||st(t)?t:null}function lr({currentVersionSpec:e,requiredRange:t}){let r=st(t);return r?rt(e)?sr(e,r,{includePrerelease:!0}):rr(e,r,{includePrerelease:!0}):!1}function mr(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 pr(e,t="react"){return ae(t).includes(e)}var fr=re.object({itemIds:re.array(re.string()).optional(),all:re.boolean(),cwd:re.string(),baseUrl:re.string().default(K),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:K}).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(t,r)=>{let n=Date.now(),o=Y(r),i=typeof r?.cwd=="string"?r.cwd:process.cwd();j.intro("seed-design add");try{let s=fr.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 p=c.cwd,y=Pe(c),w=y?.baseUrl??c.baseUrl,g=await $e(p),x=y?.framework??c.framework??g.framework,I=dr.resolve(p,g.path),{start:v,stop:E}=j.spinner();v("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let C=await(async()=>{try{let l=await Promise.all((await de({baseUrl:w,framework:x})).map(async({id:f})=>fe({baseUrl:w,framework:x,registryId:f})));return E("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),l}catch(l){throw E("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),l}})(),h=await(async()=>{if(c.itemIds?.length)return c.itemIds;let l=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:C.filter(({hideFromCLICatalog:f})=>!f).flatMap(({id:f,items:T})=>T.filter(({hideFromCLICatalog:_})=>!_).sort((_,L)=>_.id.localeCompare(L.id)).map(({id:_,description:L,deprecated:M})=>({label:`${M?"(deprecated) ":""}${m(f)}:${_}`,value:`${f}:${_}`,hint:L,deprecated:M,registryItemCount:T.length}))).sort((f,T)=>f.deprecated!==T.deprecated?f.deprecated?1:-1:T.registryItemCount-f.registryItemCount)});if(j.isCancel(l))throw new D;return l})();if(!h?.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: ${m(h.join(", "))}`);let u=[];for(let l of h){let[f,...T]=l.split(":"),_=T.join(":");if(!f||!_)throw new $({message:`${m(l)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${m("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let L=C.find(M=>M.id===f)?.items.find(M=>M.id===_);if(!L)throw new $({message:`${m(l)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(L.deprecated){let M=await j.confirm({message:`${m(L.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(j.isCancel(M))throw new D;if(M===!1){j.log.info(`${m(L.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}u.push(l)}let{registryItemsToAdd:b,npmDependenciesToAdd:k}=xe({selectedItemKeys:u,publicRegistries:C}),z=ye({publicRegistries:C,itemKeys:b.flatMap(({registryId:l,items:f})=>f.map(T=>`${l}:${T.id}`)),projectPackageVersions:ue(c.cwd,x),framework:x});he({report:z,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:x}),j.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${m(b.map(l=>l.items.map(f=>`${l.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: ${m(Array.from(k).join(", ")||"\uC5C6\uC74C")}`),await ke({registryItemsToAdd:b,rootPath:I,cwd:p,baseUrl:w,framework:x,config:g,onDiff:c.onDiff});let{installed:W,filtered:P}=await Se({cwd:p,deps:Array.from(k)});W.size===0&&j.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),W.size&&(j.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${m(Array.from(W).join(", "))}`),P.size&&j.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${m(Array.from(P).join(", "))}`)),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let V=Date.now()-n,U=new Set(b.map(l=>l.registryId)),S=h.some(l=>{let[f,...T]=l.split(":"),_=T.join(":");return C.find(L=>L.id===f)?.items.find(L=>L.id===_)?.deprecated});try{await R.trackCommandOutcome(c.cwd,{command:"add",status:"completed",properties:{items_count:u.length,registries:Array.from(U),has_deprecated:S,dependencies_count:k.size,duration_ms:V}})}catch(l){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",l)}}catch(s){if(G(s)){try{await R.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(m(s.message)),process.exit(0)}try{await R.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)}Q(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 gr from"path";import{z as ee}from"zod";var ur=ee.object({registryIds:ee.array(ee.string()).optional(),all:ee.boolean(),includeDeprecated:ee.boolean().optional(),cwd:ee.string(),baseUrl:ee.string().default(K),seedReactVersion:ee.string().optional(),framework:ee.enum(["react","lynx"]).optional(),onDiff:ee.enum(["overwrite","backup"]).optional()}),nt=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("--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(t,r)=>{let n=Date.now(),o=Y(r),i=typeof r?.cwd=="string"?r.cwd:process.cwd();O.intro("seed-design add-all");try{let s=ur.safeParse({registryIds:t,...r});if(!s.success)throw s.error;let{data:a}=s,c=a.cwd,p=Pe(a),y=p?.baseUrl??a.baseUrl,w=await $e(c),g=p?.framework??a.framework??w.framework,x=gr.resolve(c,w.path),{start:I,stop:v}=O.spinner();I("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let E=await(async()=>{try{let S=await Promise.all((await de({baseUrl:y,framework:g})).map(async({id:l})=>fe({baseUrl:y,framework:g,registryId:l})));return v("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),S}catch(S){throw v("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),S}})(),C=await(async()=>{if(a.all){let l=E.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: ${m(l.join(", "))}`),l}if(a.registryIds?.length){let l=E.map(f=>f.id);for(let f of a.registryIds)if(!l.includes(f))throw new $({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: ${l.join(", ")}`]});return O.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${m(a.registryIds.join(", "))}`),a.registryIds}let S=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:E.filter(({hideFromCLICatalog:l})=>!l).sort((l,f)=>f.items.length-l.items.length).map(l=>{let f=l.items[0]?.id,T=f?`${l.items.length}\uAC1C \uD56D\uBAA9 (${f} \uB4F1)`:`${l.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:l.id,value:l.id,hint:T}})});if(O.isCancel(S))throw new D;return O.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${m(S.join(", "))}`),S})(),h=E.filter(S=>C.includes(S.id)),u=h.flatMap(S=>S.items.filter(l=>l.deprecated?a.includeDeprecated:!0).map(l=>`${S.id}:${l.id}`)),b=h.reduce((S,l)=>S+l.items.filter(f=>f.deprecated).length,0);if(!a.includeDeprecated&&b>0&&O.log.info(`${b}\uAC1C\uC758 deprecated \uD56D\uBAA9\uC740 \uC81C\uC678\uB418\uC5C8\uC5B4\uC694. --include-deprecated \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 \uCD94\uAC00\uD560 \uC218 \uC788\uC5B4\uC694.`),!u.length)throw new D("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");O.log.message(`\uCD1D ${m(u.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:k,npmDependenciesToAdd:z}=xe({selectedItemKeys:u,publicRegistries:E}),W=ye({publicRegistries:E,itemKeys:k.flatMap(({registryId:S,items:l})=>l.map(f=>`${S}:${f.id}`)),projectPackageVersions:ue(a.cwd,g),framework:g});he({report:W,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:k,rootPath:x,cwd:c,baseUrl:y,framework:g,config:w,onDiff:a.onDiff});let{installed:P,filtered:V}=await Se({cwd:c,deps:Array.from(z)});P.size===0&&O.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),P.size&&(O.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${m(Array.from(P).join(", "))}`),V.size&&O.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${m(Array.from(V).join(", "))}`)),O.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let U=Date.now()-n;try{await R.trackCommandOutcome(a.cwd,{command:"add-all",status:"completed",properties:{registries:C,items_count:u.length,include_deprecated:a.includeDeprecated||!1,dependencies_count:z.size,duration_ms:U}})}catch(S){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",S)}}catch(s){if(G(s)){try{await R.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(m(s.message)),process.exit(0)}try{await R.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)}Q(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 at from"path";import{z as B}from"zod";var yr=B.object({itemIds:B.array(B.string()).optional(),component:B.union([B.string(),B.array(B.string())]).optional(),all:B.boolean(),registry:B.string().optional(),cwd:B.string(),baseUrl:B.string().default(K),framework:B.enum(["react","lynx"]).optional()});function hr({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 wr({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:`${m(i)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${m("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(a.length>1)throw new $({message:`${m(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:`${m("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:`${m(s)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});o.add(s)}return Array.from(o)}var ct=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=Y(r),i=typeof r?.cwd=="string"?r.cwd:process.cwd();N.intro("seed-design compat");try{let s=yr.safeParse({itemIds:t,...r});if(!s.success)throw s.error;let{data:a}=s,c=await ne(a.cwd),p=a.framework??c?.framework??"react",{start:y,stop:w}=N.spinner();y("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let g=await(async()=>{try{let u=await Promise.all((await de({baseUrl:a.baseUrl,framework:p})).map(async({id:b})=>fe({baseUrl:a.baseUrl,framework:p,registryId:b})));return w("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),u}catch(u){throw w("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),u}})(),x=hr({itemIds:a.itemIds,component:a.component}),I=a.all?g.flatMap(b=>b.items.map(k=>`${b.id}:${k.id}`)):x.length>0?wr({publicRegistries:g,targetInputs:x,defaultRegistry:a.registry}):ne(a.cwd),v=Array.isArray(I)?I:await(async()=>{let u=await I;if(!u)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=at.resolve(a.cwd,u.path),k=ot({publicRegistries:g,rootPath:b});return k.length?k:(N.log.info(`${m(at.relative(a.cwd,b)||u.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();if(!v.length){try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"empty",properties:{duration_ms:Date.now()-n}})}catch(u){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",u)}N.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0)}let E=ue(a.cwd,p),C=ye({publicRegistries:g,itemKeys:v,projectPackageVersions:E,framework:p});if(N.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${m(C.checkedItemKeys.join(", "))}`),!C.issues.length){let u=ae(p);N.outro(`\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC ${u.join(", ")}\uC640 \uD638\uD658\uB3FC\uC694.`);try{await R.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)}he({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:p});let h=ae(p);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 R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"incompatible",properties:{checked_items_count:C.checkedItemKeys.length,incompatible_items_count:new Set(C.issues.map(u=>u.itemKey)).size,issue_count:C.issues.length,duration_ms:Date.now()-n}})}catch(u){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",u)}process.exit(1)}catch(s){if(G(s)){try{await R.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(m(s.message)),process.exit(0)}try{await R.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)}Q(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 se}from"zod";var br="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",Cr=se.object({query:se.union([se.string(),se.array(se.string())]).optional().transform(e=>{let r=(Array.isArray(e)?e.join(" "):e)?.trim();return r||void 0}),baseUrl:se.string().optional(),cwd:se.string().default(process.cwd()),framework:se.enum(["react","lynx"]).optional(),raw:se.boolean()});function lt(e,t){return`${br}/${e}/${t}`}function $r(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: ${lt(i,e.snippets[0].path)}`);else{o.push("- snippet:");for(let s of e.snippets)o.push(` - ${s.label}: ${lt(i,s.path)}`)}}A.log.message(o.join(`
15
+ `))}function xr(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 ce(e,t,r=3){let n=e.toLowerCase();return t.map(o=>({value:o,dist:xr(n,o.toLowerCase())})).filter(({dist:o})=>o>0&&o<=r).sort((o,i)=>o.dist-i.dist).map(({value:o})=>o)}function Ir(e,t){if(e.length===0)return;let r=[],n=t.map(s=>s.id),o=ce(e[0],n);if(o.length===0){let s=t.flatMap(p=>p.sections.flatMap(y=>y.items.map(w=>`${p.id}/${y.id}/${w.id}`))),a=e.join("/"),c=ce(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(p=>p.id),c=ce(e[1],a);if(c.length>0){let p=s.sections.find(y=>y.id===c[0]);if(p&&e.length>=3){let y=p.items.map(g=>g.id),w=ce(e[2],y);for(let g of w.slice(0,3))r.push(`${s.id}/${p.id}/${g}`)}else for(let y of c.slice(0,3))r.push(`${s.id}/${y}`)}else{let p=s.sections.flatMap(w=>w.items.map(g=>({path:`${s.id}/${w.id}/${g.id}`,id:g.id}))),y=ce(e[1],p.map(w=>w.id));for(let w of y.slice(0,3)){let g=p.find(x=>x.id===w);g&&r.push(g.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 pt(e){return e.split(/[\/\s]+/).map(t=>t.trim()).filter(Boolean)}function kr(e){let[,t]=e.split(":");return t??e}function Pr({query:e,framework:t,categoryIds:r}){if(!e)return;let n=pt(e).map(kr);if(!n.length)return;let[o]=n;return!r.includes(o)&&t&&r.includes(t)?[t,...n].join("/"):n.join("/")}function Sr(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 mt(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 Er(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 dt=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=Y(r),i=r.raw??!1,s=process.cwd();i||A.intro("seed-design docs");try{let a=Cr.safeParse({query:t,...r});if(!a.success)throw a.error;let{data:c}=a;s=c.cwd;let p=c.baseUrl??K,y=await ne(c.cwd).catch(()=>null),w=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 g=await(async()=>{if(i)return await je({baseUrl:p});let{start:h,stop:u}=A.spinner();h("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");try{let b=await je({baseUrl:p});return u("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC654\uC5B4\uC694."),b}catch(b){throw u("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),b}})(),{categories:x}=g,I=Pr({query:c.query,framework:w,categoryIds:x.map(h=>h.id)}),v,E=async()=>{if(I){let b=pt(I);if(i&&b.length>3)return;let k=x.find(P=>P.id===b[0]);if(k&&b.length>=2){let P=k.sections.find(l=>l.id===b[1]);if(P&&b.length>=3){let l=P.items.find(_=>_.id===b[2]);if(l)return l;let f=b[2].toLowerCase(),T=P.items.filter(_=>_.id.toLowerCase().includes(f)||_.title.toLowerCase().includes(f));if(T.length===0){let _=ce(b[2],P.items.map(M=>M.id)),L=_.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
+ ${_.slice(0,3).map(M=>` - ${k.id}/${P.id}/${M}`).join(`
20
+ `)}`:"";throw new $({message:`${m(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${L}`,hint:`\`seed-design docs ${k.id}/${P.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}return T.length===1?T[0]:await we(T)}if(P)return await we(P.items);let V=b[1].toLowerCase(),U=k.sections.flatMap(l=>l.items.filter(f=>f.id.toLowerCase().includes(V)||f.title.toLowerCase().includes(V)).map(f=>({item:f,sectionLabel:l.label})));if(U.length===0){let l=k.sections.map(F=>F.id),f=ce(b[1],l),T=k.sections.flatMap(F=>F.items.map(be=>({path:`${k.id}/${F.id}/${be.id}`,id:be.id}))),_=ce(b[1],T.map(F=>F.id)),L=[...f.slice(0,2).map(F=>`${k.id}/${F}`),..._.slice(0,2).map(F=>T.find(be=>be.id===F)?.path).filter(F=>F!=null)],M=L.length>0?`
21
21
 
22
22
  \u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
23
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.
24
+ `)}`:"";throw new $({message:`${m(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${M}`,hint:`\`seed-design docs ${k.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(U.length===1)return U[0].item;let S=await A.select({message:`${m(b[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:U.map(({item:l,sectionLabel:f})=>({label:`[${f}] ${l.title}`,value:l,hint:l.description}))});if(A.isCancel(S))throw new D;return S}if(k){if(k.sections.length===1)return await we(k.sections[0].items);let P=await mt(k.sections);return await we(P.items)}let z=Sr(x,I);if(z.length===0){let P=Ir(b,x);throw new $({message:`${m(I)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${P??""}`,hint:"`seed-design docs`\uB85C \uC804\uCCB4 \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694."})}if(z.length===1)return z[0].item;let W=await A.select({message:`${m(I)}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:z.map(({item:P,categoryLabel:V,sectionLabel:U})=>({label:`[${V} > ${U}] ${P.title}`,value:P,hint:P.description}))});if(A.isCancel(W))throw new D;return W}let h=await Er(x),u;return h.sections.length===1?u=h.sections[0]:u=await mt(h.sections),await we(u.items)};if(i)try{v=await E()}catch(h){if(G(h))throw h}else v=await E();if(i){let h;if(v){let u=`${p}/llms${v.docUrl}.txt`;h=await Ke({url:u})}else h=await Ne({baseUrl:p,query:I});console.log(h)}else $r(v,p),A.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let C=Date.now()-n;try{await R.trackCommandOutcome(s,{command:"docs",status:"completed",properties:{query:c.query??null,item_id:v?.id??c.query??null,has_snippet:!!(v?.snippets&&v.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 R.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(m(a.message)),process.exit(0)}try{await R.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)}Q(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 q from"@clack/prompts";import{z as Ee}from"zod";import Rr from"dedent";var vr=Ee.object({cwd:Ee.string(),yes:Ee.boolean().optional(),default:Ee.boolean().optional()}),ft=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=Y(t),o=typeof t?.cwd=="string"?t.cwd:process.cwd();q.intro("seed-design.json \uD30C\uC77C \uC0DD\uC131");try{let i=vr.safeParse(t);if(!i.success)throw i.error;let s=i.data,a=s.yes||s.default,c=a?{...H,framework:Re(s.cwd)}:await De(s.cwd),{start:p,stop:y}=q.spinner();p("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC911...");let w=await(async()=>{try{return(await Ce({cwd:s.cwd,config:c})).relativePath}catch(x){throw y("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC774 \uC911\uB2E8\uB410\uC5B4\uC694."),x}})();y(`seed-design.json \uD30C\uC77C\uC774 ${m(w)}\uC5D0 \uC0DD\uC131\uB410\uC5B4\uC694.`),q.log.info(m("seed-design add {component} \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD574\uBCF4\uC138\uC694!")),q.log.info(m("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.")),q.note(Rr(`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
- \u2022 seed-design.json\uC5D0\uC11C ${l('"telemetry": false')}\uB85C \uC124\uC815
28
- \u2022 ${l("DISABLE_TELEMETRY=true")} \uD658\uACBD \uBCC0\uC218 \uC124\uC815
27
+ \u2022 seed-design.json\uC5D0\uC11C ${m('"telemetry": false')}\uB85C \uC124\uC815
28
+ \u2022 ${m("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"),q.outro("\uC791\uC5C5\uC774 \uC644\uB8CC\uB410\uC5B4\uC694.");let g=Date.now()-r;try{await R.trackCommandOutcome(s.cwd,{command:"init",status:"completed",properties:{tsx:c.tsx,rsc:c.rsc,telemetry:c.telemetry,yes_option:a,duration_ms:g}})}catch(x){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",x)}}catch(i){if(G(i)){try{await R.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)}q.outro(m(i.message)),process.exit(0)}try{await R.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)}Q(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 Tr}from"cac";var _r="seed-design",oe=Tr(_r);async function jr(){let e=ie();oe.option("--verbose","\uC624\uB958 \uC0C1\uC138 \uC815\uBCF4\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4."),it(oe),nt(oe),ct(oe),dt(oe),ft(oe),oe.version(e.version||"1.0.0","-v, --version"),oe.help(),oe.parse()}jr();
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.0",
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 { 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")
@@ -70,9 +73,10 @@ export const addAllCommand = (cli: CAC) => {
70
73
  const { data: options } = parsed;
71
74
 
72
75
  const cwd = options.cwd;
73
- const baseUrl = options.baseUrl;
76
+ const versionSource = resolveSeedVersion(options);
77
+ const baseUrl = versionSource?.baseUrl ?? options.baseUrl;
74
78
  const config = await getConfig(cwd);
75
- const framework = options.framework ?? config.framework;
79
+ const framework = versionSource?.framework ?? options.framework ?? config.framework;
76
80
  const rootPath = path.resolve(cwd, config.path);
77
81
 
78
82
  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 { 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")
@@ -78,9 +81,10 @@ export const addCommand = (cli: CAC) => {
78
81
  }
79
82
 
80
83
  const cwd = options.cwd;
81
- const baseUrl = options.baseUrl;
84
+ const versionSource = resolveSeedVersion(options);
85
+ const baseUrl = versionSource?.baseUrl ?? options.baseUrl;
82
86
  const config = await getConfig(cwd);
83
- const framework = options.framework ?? config.framework;
87
+ const framework = versionSource?.framework ?? options.framework ?? config.framework;
84
88
  const rootPath = path.resolve(cwd, config.path);
85
89
 
86
90
  const { start, stop } = p.spinner();
@@ -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,38 @@
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
+ }