@seed-design/cli 1.3.3 → 1.3.5
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 +11 -11
- package/package.json +6 -4
- package/src/commands/add-all.ts +1 -1
- package/src/commands/add.ts +1 -1
- package/src/commands/compat.ts +1 -1
- package/src/tests/analytics.test.ts +4 -4
- package/src/tests/command-telemetry.test.ts +10 -0
- package/src/types/shims.d.ts +11 -0
- package/src/utils/install.ts +1 -1
- package/src/utils/resolve-dependencies.ts +2 -2
package/bin/index.mjs
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import*as te from"@clack/prompts";import{cosmiconfig as dt}from"cosmiconfig";import{z as oe}from"zod";import*as Y from"@clack/prompts";import{ZodError as ct}from"zod";import at from"picocolors";var p=e=>at.cyan(e);var I=class extends Error{hint;details;constructor({message:t,hint:r,details:n=[],cause:o}){super(t,{cause:o}),this.name="CliError",this.hint=r,this.details=n}},_=class extends Error{constructor(t="\uC791\uC5C5\uC774 \uCDE8\uC18C\uB410\uC5B4\uC694."){super(t),this.name="CliCancelError"}};function
|
|
3
|
-
[verbose] stack trace`)),Y.log.message(o.stack)),Y.outro(p("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as Q from"@clack/prompts";import mt from"fs-extra";import Re from"path";var
|
|
4
|
-
`,"utf-8"),{relativePath:Re.relative(process.cwd(),r),targetPath:r}}var ve="seed-design",ft=dt(ve,{searchPlaces:[`${ve}.json`]}),_e=oe.object({$schema:oe.string().optional(),rsc:oe.coerce.boolean().default(!1),tsx:oe.coerce.boolean().default(!0),path:oe.string(),telemetry:oe.coerce.boolean().optional().default(!0)}).strict();async function he(e){let t=await de(e);if(t)return t;te.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let r=await te.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(te.isCancel(r)||!r)throw new _;try{return await ye({cwd:e,config:
|
|
2
|
+
import*as te from"@clack/prompts";import{cosmiconfig as dt}from"cosmiconfig";import{z as oe}from"zod";import*as Y from"@clack/prompts";import{ZodError as ct}from"zod";import at from"picocolors";var p=e=>at.cyan(e);var I=class extends Error{hint;details;constructor({message:t,hint:r,details:n=[],cause:o}){super(t,{cause:o}),this.name="CliError",this.hint=r,this.details=n}},_=class extends Error{constructor(t="\uC791\uC5C5\uC774 \uCDE8\uC18C\uB410\uC5B4\uC694."){super(t),this.name="CliCancelError"}};function N(e){return e instanceof _}function H(e){return!e||typeof e!="object"||!("verbose"in e)?!1:e.verbose===!0}function lt(e,t){if(e instanceof I)return{reason:e.message,hint:e.hint??t,details:e.details,stack:pt(e.cause??e)};if(e instanceof ct){let r=e.issues.map(n=>`${n.path.join(".")||"(root)"}: ${n.message}`);return{reason:"\uC785\uB825\uAC12 \uB610\uB294 \uC124\uC815 \uD30C\uC77C \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:t,details:r,stack:e.stack}}if(e instanceof Error){let r=e,n=[];return(r.escapedCommand||r.command)&&n.push(`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${r.escapedCommand??r.command}`),typeof r.exitCode=="number"&&n.push(`\uC885\uB8CC \uCF54\uB4DC: ${r.exitCode}`),r.stderr?.trim()?n.push(`stderr: ${r.stderr.trim()}`):r.stdout?.trim()&&n.push(`stdout: ${r.stdout.trim()}`),{reason:r.shortMessage??e.message,hint:t,details:n,stack:e.stack}}return typeof e=="string"?{reason:e,hint:t,details:[]}:{reason:"\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694.",hint:t,details:[]}}function pt(e){if(e instanceof Error)return e.stack}function G(e,{defaultMessage:t,defaultHint:r,verbose:n=!1}){let o=lt(e,r);Y.log.error(t),Y.log.error(`\uC6D0\uC778: ${o.reason}`);for(let s of o.details)Y.log.info(s);o.hint&&Y.log.info(`\uD574\uACB0 \uD78C\uD2B8: ${o.hint}`),n&&o.stack&&(Y.log.message(p(`
|
|
3
|
+
[verbose] stack trace`)),Y.log.message(o.stack)),Y.outro(p("\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."))}import*as Q from"@clack/prompts";import mt from"fs-extra";import Re from"path";var z={rsc:!1,tsx:!0,path:"./seed-design",telemetry:!0};async function Te(){return await Q.group({tsx:()=>Q.confirm({message:`${p("TypeScript")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:z.tsx}),rsc:()=>Q.confirm({message:`${p("React Server Components")}\uB97C \uC0AC\uC6A9\uC911\uC774\uC2E0\uAC00\uC694?`,initialValue:z.rsc}),path:()=>Q.text({message:`${p("seed-design \uD3F4\uB354")} \uACBD\uB85C\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694. (\uAE30\uBCF8\uAC12\uC740 \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8\uC5D0 \uC0DD\uC131\uB429\uB2C8\uB2E4.)`,initialValue:z.path,defaultValue:z.path,placeholder:z.path}),telemetry:()=>Q.confirm({message:`\uAC1C\uC120\uC744 \uC704\uD574 ${p("\uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130")}\uB97C \uC218\uC9D1\uD560\uAE4C\uC694?`,initialValue:z.telemetry})},{onCancel:()=>{throw new _}})}async function ye({cwd:e,config:t}){let r=Re.resolve(e,"seed-design.json");return await mt.writeFile(r,`${JSON.stringify(t,null,2)}
|
|
4
|
+
`,"utf-8"),{relativePath:Re.relative(process.cwd(),r),targetPath:r}}var ve="seed-design",ft=dt(ve,{searchPlaces:[`${ve}.json`]}),_e=oe.object({$schema:oe.string().optional(),rsc:oe.coerce.boolean().default(!1),tsx:oe.coerce.boolean().default(!0),path:oe.string(),telemetry:oe.coerce.boolean().optional().default(!0)}).strict();async function he(e){let t=await de(e);if(t)return t;te.log.error("\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8 \uACBD\uB85C\uC5D0 `seed-design.json` \uD30C\uC77C\uC774 \uC5C6\uC5B4\uC694.");let r=await te.confirm({message:"seed-design.json \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC2DC\uACA0\uC5B4\uC694?"});if(te.isCancel(r)||!r)throw new _;try{return await ye({cwd:e,config:z}),te.log.message("seed-design.json \uD30C\uC77C\uC774 \uC0DD\uC131\uB410\uC5B4\uC694."),_e.parse(z)}catch(n){throw new I({message:"seed-design.json \uD30C\uC77C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB514\uB809\uD1A0\uB9AC \uC4F0\uAE30 \uAD8C\uD55C\uACFC \uACBD\uB85C\uB97C \uD655\uC778\uD55C \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uBCF4\uC138\uC694.",cause:n})}}async function de(e){let t=await ft.search(e);if(!t||t.isEmpty)return null;try{return _e.parse(t.config)}catch(r){throw new I({message:"seed-design.json \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694.",hint:"https://seed-design.com/react/getting-started/cli/configuration \uBB38\uC11C\uB97C \uCC38\uACE0\uD574 \uC8FC\uC138\uC694.",cause:r})}}function we({selectedItemKeys:e,publicRegistries:t}){let r=[],n=new Set;function o(s,i){let a=r.find(c=>c.registryId===s);if(!a?.items.some(c=>c.id===i.id)){if(a?a.items.push(i):r.push({registryId:s,items:[i]}),i.dependencies?.length)for(let c of i.dependencies)n.add(c);if(i.innerDependencies?.length)for(let c of i.innerDependencies)for(let d of c.itemIds){let y=t.find(w=>w.id===c.registryId)?.items.find(w=>w.id===d);if(!y)throw new Error(`Cannot find dependency item: ${c.registryId}:${d}`);o(c.registryId,y)}}}for(let s of e){let[i,...a]=s.split(":"),c=a.join(":");if(!i||!c)throw new Error(`Invalid snippet format: "${s}"`);let d=t.find(y=>y.id===i)?.items.find(y=>y.id===c);if(!d)throw new Error(`Cannot find snippet: "${s}"`);o(i,d)}return{registryItemsToAdd:r,npmDependenciesToAdd:n}}import*as ke from"@clack/prompts";import{z as m}from"zod";var Pe=m.object({id:m.string(),description:m.string().optional(),deprecated:m.boolean().optional(),hideFromCLICatalog:m.boolean().optional(),dependencies:m.array(m.string()).optional(),innerDependencies:m.array(m.object({registryId:m.string(),itemIds:m.array(m.string())})).optional(),snippets:m.array(m.object({path:m.string(),dependencies:m.record(m.string(),m.string()).optional(),content:m.string()}))}),Se=m.object({id:m.string(),hideFromCLICatalog:m.boolean().optional(),items:m.array(Pe.omit({snippets:!0}).extend({snippets:m.array(m.object({path:m.string(),dependencies:m.record(m.string(),m.string()).optional()}))}))}),je=m.array(m.object({id:m.string()})),gt=m.object({label:m.string(),path:m.string()}),ut=m.object({id:m.string(),title:m.string(),description:m.string().optional(),docUrl:m.string(),deprecated:m.boolean().optional(),snippetKey:m.string().optional(),snippets:m.array(gt).optional()}),yt=m.object({id:m.string(),label:m.string(),items:m.array(ut)}),ht=m.object({id:m.string(),label:m.string(),sections:m.array(yt)}),De=m.object({categories:m.array(ht)});var wt=1e4;async function Ae(e,t=wt){let r=new AbortController,n=setTimeout(()=>r.abort(),t);try{return await fetch(e,{signal:r.signal})}catch(o){throw o instanceof Error&&o.name==="AbortError"?new I({message:`\uC694\uCCAD \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC5B4\uC694 (${t}ms): ${e}`,hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694."}):o}finally{clearTimeout(n)}}async function Ee({baseUrl:e}){let t=await fetch(`${e}/__docs__/index.json`);if(!t.ok)throw new I({message:`\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${t.status} ${t.statusText}`});let r=await t.json(),{success:n,data:o,error:s}=De.safeParse(r);if(!n)throw new I({message:`\uBB38\uC11C \uBAA9\uB85D \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694: ${s?.message}`});return o}async function ie({baseUrl:e}){let t=await fetch(`${e}/__registry__/index.json`);if(!t.ok)throw new Error(`Failed to fetch registries: ${t.status} ${t.statusText}`);let r=await t.json(),{success:n,data:o,error:s}=je.safeParse(r);if(!n)throw new Error(`Failed to parse registries: ${s?.message}`);return o}async function ne({baseUrl:e,registryId:t}){let r=await fetch(`${e}/__registry__/${t}/index.json`);if(!r.ok)throw new Error(`Failed to fetch ${t} registry: ${r.status} ${r.statusText}`);let n=await r.json(),{success:o,data:s,error:i}=Se.safeParse(n);if(!o)throw new Error(`Failed to parse ${t} registry: ${i?.message}`);return s}async function bt({baseUrl:e,registryId:t,registryItemId:r}){let n=await fetch(`${e}/__registry__/${t}/${r}.json`);if(!n.ok)throw new Error(`Failed to fetch ${r}: ${n.status} ${n.statusText}`);let o=await n.json(),{success:s,data:i,error:a}=Pe.safeParse(o);if(!s)throw new Error(`Failed to parse ${r}: ${a?.message}`);return i}async function Oe({url:e}){let t=await Ae(e);if(!t.ok)throw new I({message:`llms.txt\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${t.status} ${t.statusText}`,hint:`${e} \uC5D0 \uC811\uADFC\uD560 \uC218 \uC788\uB294\uC9C0 \uD655\uC778\uD574\uC8FC\uC138\uC694.`});return t.text()}async function Me({baseUrl:e,query:t}){let r=t.startsWith("/")?t.slice(1):t,n=[`${e}/llms/${r}.txt`,`${e}/llms/${r}/llms.txt`],o;for(let s of n){let i;try{i=await Ae(s)}catch(a){o=a;continue}if(i.ok)return i.text();if(i.status===404){o=new I({message:`llms.txt\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694: ${r}`,hint:`\uB2E4\uC74C \uACBD\uB85C\uB97C \uC2DC\uB3C4\uD588\uC5B4\uC694:
|
|
5
5
|
${n.map(a=>` - ${a}`).join(`
|
|
6
6
|
`)}`});continue}throw new I({message:`llms.txt \uC694\uCCAD\uC774 \uC2E4\uD328\uD588\uC5B4\uC694: ${i.status} ${i.statusText}`,hint:`URL: ${s}`})}throw o??new I({message:`llms.txt\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694: ${r}`,hint:`\uB2E4\uC74C \uACBD\uB85C\uB97C \uC2DC\uB3C4\uD588\uC5B4\uC694:
|
|
7
7
|
${n.map(s=>` - ${s}`).join(`
|
|
8
8
|
`)}`})}async function Le({baseUrl:e,registryId:t,registryItemIds:r}){return await Promise.all(r.map(async n=>{try{return await bt({baseUrl:e,registryId:t,registryItemId:n})}catch(o){let s=await fetch(`${e}/__registry__/${t}/index.json`);if(!s.ok)throw new Error(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694: ${s.status} ${s.statusText}`);let i=await s.json(),{success:a,data:c}=Se.safeParse(i);throw a?(ke.log.error(`${n} \uC2A4\uB2C8\uD3AB\uC774 ${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC5C6\uC5B4\uC694.`),ke.log.info(`${t} \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC874\uC7AC\uD558\uB294 \uC2A4\uB2C8\uD3AB:
|
|
9
9
|
${c.items.map(d=>d.id).join(`
|
|
10
|
-
`)}`),o):new Error(`Failed to parse registry index for ${t}`)}}))}import{promises as St}from"fs";import{tmpdir as kt}from"os";import Ke from"path";import{transformFromAstSync as Ct}from"@babel/core";import $t from"@babel/plugin-transform-typescript";import*as be from"recast";import{parse as It}from"@babel/parser";var xt={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Fe=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let n=be.parse(r,{parser:{parse:s=>It(s,xt)}}),o=Ct(n,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[$t],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return be.print(o.ast).code};import{SyntaxKind as Pt}from"ts-morph";var Ue=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(Pt.ExpressionStatement);if(!r)return e;let n=r.getExpression();if(!n)return e;let o=n.getText().trim();if(o!=='"use client"'&&o!=="'use client'")return e;let s=r.getText(),i=r.getFullText();if(s.trim()===i.trim())return e;let c=i.replace(s,"").replace(/^\s*\n/,"").replace(/\n\s*$/,"");return r.replaceWithText(c),e};import{Project as Et,ScriptKind as Rt}from"ts-morph";var Tt=[Ue],vt=new Et({compilerOptions:{}});async function _t(e){let t=await St.mkdtemp(Ke.join(kt(),"seed-design-"));return Ke.join(t,e)}async function Ne(e){let t=await _t(e.filename),r=vt.createSourceFile(t,e.raw,{scriptKind:Rt.TSX});for(let n of Tt)n({sourceFile:r,...e});return await Fe({sourceFile:r,...e})}import*as
|
|
10
|
+
`)}`),o):new Error(`Failed to parse registry index for ${t}`)}}))}import{promises as St}from"fs";import{tmpdir as kt}from"os";import Ke from"path";import{transformFromAstSync as Ct}from"@babel/core";import $t from"@babel/plugin-transform-typescript";import*as be from"recast";import{parse as It}from"@babel/parser";var xt={sourceType:"module",allowImportExportEverywhere:!0,allowReturnOutsideFunction:!0,startLine:1,tokens:!0,plugins:["asyncGenerators","bigInt","classPrivateMethods","classPrivateProperties","classProperties","classStaticBlock","decimal","decorators-legacy","doExpressions","dynamicImport","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importAssertions","importMeta","nullishCoalescingOperator","numericSeparator","objectRestSpread","optionalCatchBinding","optionalChaining",["pipelineOperator",{proposal:"minimal"}],["recordAndTuple",{syntaxType:"hash"}],"throwExpressions","topLevelAwait","v8intrinsic","typescript","jsx"]},Fe=async({sourceFile:e,config:t})=>{let r=e.getFullText();if(t.tsx)return r;let n=be.parse(r,{parser:{parse:s=>It(s,xt)}}),o=Ct(n,r,{cloneInputAst:!1,code:!1,ast:!0,plugins:[$t],configFile:!1});if(!o||!o.ast)throw new Error("Failed to transform JSX");return be.print(o.ast).code};import{SyntaxKind as Pt}from"ts-morph";var Ue=async({sourceFile:e,config:t})=>{if(t.rsc)return e;let r=e.getFirstChildByKind(Pt.ExpressionStatement);if(!r)return e;let n=r.getExpression();if(!n)return e;let o=n.getText().trim();if(o!=='"use client"'&&o!=="'use client'")return e;let s=r.getText(),i=r.getFullText();if(s.trim()===i.trim())return e;let c=i.replace(s,"").replace(/^\s*\n/,"").replace(/\n\s*$/,"");return r.replaceWithText(c),e};import{Project as Et,ScriptKind as Rt}from"ts-morph";var Tt=[Ue],vt=new Et({compilerOptions:{}});async function _t(e){let t=await St.mkdtemp(Ke.join(kt(),"seed-design-"));return Ke.join(t,e)}async function Ne(e){let t=await _t(e.filename),r=vt.createSourceFile(t,e.raw,{scriptKind:Rt.TSX});for(let n of Tt)n({sourceFile:r,...e});return await Fe({sourceFile:r,...e})}import*as V from"@clack/prompts";import ae from"fs-extra";import J from"path";import{createPatch as jt}from"diff";import Dt from"@npmcli/disparity-colors";async function Ce({registryItemsToAdd:e,rootPath:t,cwd:r,baseUrl:n,config:o,onDiff:s}){let i=[];for(let{registryId:a,items:c}of e){let d=J.join(t,a);ae.ensureDirSync(d);let y=await Le({baseUrl:n,registryId:a,registryItemIds:c.map(w=>w.id)});for(let{id:w,snippets:C}of y){let E=await Promise.all(C.map(async h=>{let f=await Ne({filename:h.path,config:o,raw:h.content}),u=J.join(d,h.path);return o.tsx||(u=u.replace(/\.tsx$/,".jsx"),u=u.replace(/\.ts$/,".js")),{filePath:u,content:f,relativePath:J.relative(r,u),name:`${a}:${w}`}})),x=[];for(let h of E){let{filePath:f,content:u,relativePath:$}=h;if(await ae.ensureDir(J.dirname(f)),ae.existsSync(f)){let O=await ae.readFile(f,"utf-8");if(O===u){V.log.info(`${p($)}: \uC774\uBBF8 \uCD5C\uC2E0 \uC0C1\uD0DC\uC608\uC694.`);continue}let B=J.basename(f),P=J.extname(f),M=J.basename(f,P),L=Date.now(),W=`legacy-${M}-${L}${P}`,b=await(async()=>{if(s)return s;let l=jt($,O,u),g=Dt(l);return V.log.message(`
|
|
11
11
|
${p($)}: \uD604\uC7AC \uD30C\uC77C\uACFC \uBC1B\uC73C\uB824\uB294 \uD30C\uC77C\uC758 \uB0B4\uC6A9\uC774 \uB2EC\uB77C\uC694.
|
|
12
|
-
`),z.log.message(g),z.select({message:"\uD604\uC7AC \uD30C\uC77C\uC5D0 \uC2A4\uD0C0\uC77C \uBCC0\uACBD, \uB85C\uAE45 \uB4F1 \uCEE4\uC2A4\uD130\uB9C8\uC774\uC9D5\uC774 \uC801\uC6A9\uB418\uC5B4 \uC788\uB294 \uACBD\uC6B0 \uC2E0\uADDC \uD30C\uC77C\uC5D0 \uB3D9\uC77C\uD55C \uCEE4\uC2A4\uD130\uB9C8\uC774\uC9D5\uC744 \uC801\uC6A9\uD558\uB294 \uAC83\uC744 \uAC80\uD1A0\uD574\uBCF4\uC138\uC694.",options:[{value:"overwrite",label:`${q} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${W}\uC73C\uB85C \uC62E\uAE30\uACE0 ${q} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(z.isCancel(b)||b==="skip"){z.log.info(`${p($)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(b==="backup"){let l=G.dirname(f),g=G.join(l,W);await ae.rename(f,g),z.log.info(`${p($)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${p(G.relative(r,g))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await ae.writeFile(f,u),P.push(h)}if(P.length>0){let h=P.map(({name:f,relativePath:u})=>({name:f,path:u}));i.push(...h),z.log.success(`${p(`${a}:${w}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${p(h.map(f=>f.path).join(", "))}`)}}}}import*as T from"@clack/prompts";import sr from"path";import{z as se}from"zod";var J="https://seed-design.io";import*as Ve from"@clack/prompts";import{execa as Ut}from"execa";import{detect as At}from"@antfu/ni";async function ze(e){let t=await At({programmatic:!0,cwd:e});return t==="yarn@berry"?"yarn":t==="pnpm@6"?"pnpm":t==="bun"?"bun":t==="deno"?"deno":t??"npm"}import Ot from"findup-sync";import Mt from"fs-extra";var Lt="package.json";function Ft(e=process.cwd()){let t=Ot(Lt,{cwd:e});if(!t)throw new Error("No package.json file found in the project.");return t}function ce(e=process.cwd()){let t=Ft(e);return Mt.readJSONSync(t)}async function $e({cwd:e,deps:t,dev:r=!1}){let{start:n,stop:o}=Ve.spinner(),s=await ze(e),a={...ce(e).dependencies},c=new Set(t.filter(P=>!a[P])),d=new Set(t.filter(P=>a[P]));if(!c.size)return{installed:new Set,filtered:c};n("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let C=[s==="npm"?"install":"add",r?"-D":null,...c].filter(Boolean),E=`${s} ${C.join(" ")}`;try{await Ut(s,C,{cwd:e})}catch(P){throw o("\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."),new I({message:"\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0, \uC124\uCE58 \uBA85\uB839\uC5B4\uB97C \uC9C1\uC811 \uC2E4\uD589\uD574 \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",details:[`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${E}`],cause:P})}return o("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:c,filtered:d}}import{randomUUID as Kt}from"node:crypto";import*as Be from"@clack/prompts";var Nt="seed_cli";async function zt(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await de(e))?.telemetry===!1)return!1}catch{}return!0}function Vt(){return Kt()}var qt=Vt(),qe=!1;function He(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Bt(e){return e instanceof Error&&e.name?e.name:typeof e=="object"&&e!==null?e.constructor?.name??"Object":typeof e}async function Ge(e,{event:t,properties:r={}}){if(!await zt(e))return;let o=`${Nt}.${t}`;qe||(Be.log.info("\u{1F4CA} \uC0AC\uC6A9 \uB370\uC774\uD130 \uC218\uC9D1 \uC911 (\uBE44\uD65C\uC131\uD654: seed-design.json \uB610\uB294 DISABLE_TELEMETRY \uD658\uACBD \uBCC0\uC218)"),qe=!0);try{let s="https://us.i.posthog.com/capture",i={"Content-Type":"application/json"},a={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:o,distinct_id:qt,properties:{...r,$process_person_profile:!1},timestamp:new Date().toISOString()},c=new AbortController,d=setTimeout(()=>c.abort(),5e3);try{await fetch(s,{method:"POST",headers:i,body:JSON.stringify(a),signal:c.signal})}finally{clearTimeout(d)}}catch{}}async function Je(e,{command:t,status:r,result:n,properties:o={}}){await Ge(e,{event:t,properties:He({status:r,result:n,...o})})}async function Ht(e,{command:t,error:r,result:n,properties:o={}}){await Je(e,{command:t,status:"failed",result:n,properties:He({error_type:Bt(r),...o})})}var R={track:Ge,trackCommandFailure:Ht,trackCommandOutcome:Je};import*as re from"@clack/prompts";import Gt from"fs-extra";import Jt from"path";import{intersects as Wt,satisfies as Yt,valid as Ye,validRange as Xe}from"semver";var fe=["@seed-design/react","@seed-design/css"],We="workspace:",Xt="npm:";function le(e){try{let t=ce(e),r={...t.dependencies,...t.devDependencies,...t.peerDependencies,...t.optionalDependencies},n={};for(let o of fe){let s=r[o];typeof s=="string"&&(n[o]=s)}return n}catch{return{}}}function pe({publicRegistries:e,itemKeys:t,projectPackageVersions:r}){let n=Array.from(new Set(t)),o=new Map(e.flatMap(i=>i.items.map(a=>[`${i.id}:${a.id}`,a]))),s=[];for(let i of n){let a=o.get(i);if(!a)continue;let c=Qt(a);for(let d of fe){let y=Array.from(c[d]??[]);if(!y.length)continue;let w=r[d];if(!w){s.push({itemKey:i,packageName:d,requiredRanges:y,type:"missing-package"});continue}let C=Zt(w);if(!C){s.push({itemKey:i,packageName:d,requiredRanges:y,installedVersionSpec:w,type:"invalid-version-spec"});continue}y.every(P=>er({currentVersionSpec:C,requiredRange:P}))||s.push({itemKey:i,packageName:d,requiredRanges:y,installedVersionSpec:w,type:"incompatible-version"})}}return{checkedItemKeys:n,projectPackageVersions:r,issues:s}}function me({report:e,title:t}){if(!e.issues.length)return;re.log.warn(t),re.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${fe.map(n=>`${n}@${p(e.projectPackageVersions[n]??"\uBBF8\uC124\uCE58")}`).join(", ")}`);let r=new Map;for(let n of e.issues){let o=r.get(n.itemKey)??[];o.push(n),r.set(n.itemKey,o)}for(let[n,o]of r.entries()){re.log.warn(p(n));for(let s of o){let i=s.requiredRanges.join(" | ");if(s.type==="missing-package"){re.log.info(` - ${s.packageName}: \uD328\uD0A4\uC9C0\uAC00 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694. \uD544\uC694 \uBC94\uC704: ${i}`);continue}if(s.type==="invalid-version-spec"){re.log.info(` - ${s.packageName}: \uD604\uC7AC \uBC84\uC804 \uD615\uC2DD\uC744 \uD574\uC11D\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694 (${s.installedVersionSpec}). \uD544\uC694 \uBC94\uC704: ${i}`);continue}re.log.info(` - ${s.packageName}: \uD604\uC7AC ${s.installedVersionSpec}, \uD544\uC694 \uBC94\uC704 ${i}`)}}}function Qe({publicRegistries:e,rootPath:t}){let r=[];for(let n of e)for(let o of n.items)o.snippets.some(i=>tr(i.path).some(a=>Gt.existsSync(Jt.join(t,n.id,a))))&&r.push(`${n.id}:${o.id}`);return r}function Qt(e){let t=Object.fromEntries(fe.map(r=>[r,new Set]));for(let r of e.snippets)for(let[n,o]of Object.entries(r.dependencies??{}))rr(n)&&t[n].add(o);return t}function Zt(e){let t=e.trim();if(t.startsWith(We)&&(t=t.slice(We.length).trim()),t.startsWith(Xt)){let r=t.split("@").at(-1);if(!r)return null;t=r}return!t||t==="*"?null:Ye(t)||Xe(t)?t:null}function er({currentVersionSpec:e,requiredRange:t}){let r=Xe(t);return r?Ye(e)?Yt(e,r,{includePrerelease:!0}):Wt(e,r,{includePrerelease:!0}):!1}function tr(e){let t=new Set([e]);return e.endsWith(".tsx")&&t.add(`${e.slice(0,-4)}.jsx`),e.endsWith(".ts")&&t.add(`${e.slice(0,-3)}.js`),e.endsWith(".jsx")&&t.add(`${e.slice(0,-4)}.tsx`),e.endsWith(".js")&&t.add(`${e.slice(0,-3)}.ts`),Array.from(t)}function rr(e){return fe.includes(e)}var or=se.object({itemIds:se.array(se.string()).optional(),all:se.boolean(),cwd:se.string(),baseUrl:se.string().optional(),onDiff:se.enum(["overwrite","backup"]).optional()}),Ze=e=>{e.command("add [...item-ids]","add items").option("-a, --all","[Deprecated] Add all items",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:J}).option("--on-diff <mode>","Action when file differs: overwrite or backup").example("seed-design add ui:action-button").example("seed-design add ui:alert-dialog").action(async(t,r)=>{let n=Date.now(),o=B(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();T.intro("seed-design add");try{let i=or.safeParse({itemIds:t,...r});if(!i.success)throw i.error;let{data:{all:a,...c}}=i;if(a)throw new I({message:"`--all` \uC635\uC158\uC740 \uB354 \uC774\uC0C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC544\uC694. \uB300\uC2E0 `seed-design add-all` \uBA85\uB839\uC5B4\uB97C \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694."});let d=c.cwd,y=c.baseUrl,w=await he(d),C=sr.resolve(d,w.path),{start:E,stop:P}=T.spinner();E("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let h=await(async()=>{try{let l=await Promise.all((await ie({baseUrl:y})).map(async({id:g})=>ne({baseUrl:y,registryId:g})));return P("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),l}catch(l){throw P("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),l}})(),f=await(async()=>{if(c.itemIds?.length)return c.itemIds;let l=await T.multiselect({message:"\uCD94\uAC00\uD560 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:h.filter(({hideFromCLICatalog:g})=>!g).flatMap(({id:g,items:k})=>k.filter(({hideFromCLICatalog:A})=>!A).sort((A,D)=>A.id.localeCompare(D.id)).map(({id:A,description:D,deprecated:S})=>({label:`${S?"(deprecated) ":""}${p(g)}:${A}`,value:`${g}:${A}`,hint:D,deprecated:S,registryItemCount:k.length}))).sort((g,k)=>g.deprecated!==k.deprecated?g.deprecated?1:-1:k.registryItemCount-g.registryItemCount)});if(T.isCancel(l))throw new _;return l})();if(!f?.length)throw new _("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694.");T.log.message(`\uC120\uD0DD\uB41C \uD56D\uBAA9: ${p(f.join(", "))}`);let u=[];for(let l of f){let[g,...k]=l.split(":"),A=k.join(":");if(!g||!A)throw new I({message:`${p(l)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${p("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let D=h.find(S=>S.id===g)?.items.find(S=>S.id===A);if(!D)throw new I({message:`${p(l)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(D.deprecated){let S=await T.confirm({message:`${p(D.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(T.isCancel(S))throw new _;if(S===!1){T.log.info(`${p(D.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}u.push(l)}let{registryItemsToAdd:$,npmDependenciesToAdd:O}=we({selectedItemKeys:u,publicRegistries:h}),q=pe({publicRegistries:h,itemKeys:$.flatMap(({registryId:l,items:g})=>g.map(k=>`${l}:${k.id}`)),projectPackageVersions:le(c.cwd)});me({report:q,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),T.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${p($.map(l=>l.items.map(g=>`${l.registryId}:${g.id}`).join(", ")).join(", ")||"\uC5C6\uC74C")}
|
|
12
|
+
`),V.log.message(g),V.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:`${B} \uB36E\uC5B4\uC4F0\uAE30`},{value:"backup",label:`\uAE30\uC874 \uD30C\uC77C \uB0B4\uC6A9\uC744 ${W}\uC73C\uB85C \uC62E\uAE30\uACE0 ${B} \uBC1B\uAE30`},{value:"skip",label:"\uC0C8 \uD30C\uC77C \uBC1B\uC9C0 \uC54A\uACE0 \uADF8\uB300\uB85C \uB450\uAE30"}]})})();if(V.isCancel(b)||b==="skip"){V.log.info(`${p($)}: \uD30C\uC77C\uC744 \uBC1B\uC9C0 \uC54A\uACE0 \uAC74\uB108\uB6F0\uC5C8\uC5B4\uC694.`);continue}if(b==="backup"){let l=J.dirname(f),g=J.join(l,W);await ae.rename(f,g),V.log.info(`${p($)}: \uAE30\uC874 \uD30C\uC77C\uC744 ${p(J.relative(r,g))}\uB85C \uC62E\uACBC\uC5B4\uC694.`)}}await ae.writeFile(f,u),x.push(h)}if(x.length>0){let h=x.map(({name:f,relativePath:u})=>({name:f,path:u}));i.push(...h),V.log.success(`${p(`${a}:${w}`)} \uAD00\uB828 \uC2A4\uB2C8\uD3AB \uB2E4\uC6B4\uB85C\uB4DC \uC644\uB8CC: ${p(h.map(f=>f.path).join(", "))}`)}}}}import*as T from"@clack/prompts";import sr from"path";import{z as se}from"zod";var F="https://seed-design.io";import*as Ve from"@clack/prompts";import{execa as Ut}from"execa";import{detect as At}from"@antfu/ni";async function ze(e){let t=await At({programmatic:!0,cwd:e});return t==="yarn@berry"?"yarn":t==="pnpm@6"?"pnpm":t==="bun"?"bun":t==="deno"?"deno":t??"npm"}import Ot from"findup-sync";import Mt from"fs-extra";var Lt="package.json";function Ft(e=process.cwd()){let t=Ot(Lt,{cwd:e});if(!t)throw new Error("No package.json file found in the project.");return t}function ce(e=process.cwd()){let t=Ft(e);return Mt.readJSONSync(t)}async function $e({cwd:e,deps:t,dev:r=!1}){let{start:n,stop:o}=Ve.spinner(),s=await ze(e),a={...ce(e).dependencies},c=new Set(t.filter(x=>!a[x])),d=new Set(t.filter(x=>a[x]));if(!c.size)return{installed:new Set,filtered:c};n("\uC758\uC874\uC131 \uC124\uCE58\uC911...");let C=[s==="npm"?"install":"add",r?"-D":null,...c].filter(x=>!!x),E=`${s} ${C.join(" ")}`;try{await Ut(s,C,{cwd:e})}catch(x){throw o("\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694."),new I({message:"\uC758\uC874\uC131 \uC124\uCE58\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",hint:"\uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0, \uC124\uCE58 \uBA85\uB839\uC5B4\uB97C \uC9C1\uC811 \uC2E4\uD589\uD574 \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",details:[`\uC2E4\uD589 \uBA85\uB839\uC5B4: ${E}`],cause:x})}return o("\uC758\uC874\uC131 \uC124\uCE58\uAC00 \uC644\uB8CC\uB410\uC5B4\uC694."),{installed:c,filtered:d}}import{randomUUID as Kt}from"node:crypto";import*as Be from"@clack/prompts";var Nt="seed_cli";async function zt(e){if(process.env.DISABLE_TELEMETRY==="true"||process.env.SEED_DISABLE_TELEMETRY==="true")return!1;try{if((await de(e))?.telemetry===!1)return!1}catch{}return!0}function Vt(){return Kt()}var qt=Vt(),qe=!1;function He(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Bt(e){return e instanceof Error&&e.name?e.name:typeof e=="object"&&e!==null?e.constructor?.name??"Object":typeof e}async function Ge(e,{event:t,properties:r={}}){if(!await zt(e))return;let o=`${Nt}.${t}`;qe||(Be.log.info("\u{1F4CA} \uC0AC\uC6A9 \uB370\uC774\uD130 \uC218\uC9D1 \uC911 (\uBE44\uD65C\uC131\uD654: seed-design.json \uB610\uB294 DISABLE_TELEMETRY \uD658\uACBD \uBCC0\uC218)"),qe=!0);try{let s="https://us.i.posthog.com/capture",i={"Content-Type":"application/json"},a={api_key:"phc_seod8HhifElOP1R92KmvsQybrtUmkOTgZBsq0mfCelR",event:o,distinct_id:qt,properties:{...r,$process_person_profile:!1},timestamp:new Date().toISOString()},c=new AbortController,d=setTimeout(()=>c.abort(),5e3);try{await fetch(s,{method:"POST",headers:i,body:JSON.stringify(a),signal:c.signal})}finally{clearTimeout(d)}}catch{}}async function Je(e,{command:t,status:r,result:n,properties:o={}}){await Ge(e,{event:t,properties:He({status:r,result:n,...o})})}async function Ht(e,{command:t,error:r,result:n,properties:o={}}){await Je(e,{command:t,status:"failed",result:n,properties:He({error_type:Bt(r),...o})})}var R={track:Ge,trackCommandFailure:Ht,trackCommandOutcome:Je};import*as re from"@clack/prompts";import Gt from"fs-extra";import Jt from"path";import{intersects as Wt,satisfies as Yt,valid as Ye,validRange as Xe}from"semver";var fe=["@seed-design/react","@seed-design/css"],We="workspace:",Xt="npm:";function le(e){try{let t=ce(e),r={...t.dependencies,...t.devDependencies,...t.peerDependencies,...t.optionalDependencies},n={};for(let o of fe){let s=r[o];typeof s=="string"&&(n[o]=s)}return n}catch{return{}}}function pe({publicRegistries:e,itemKeys:t,projectPackageVersions:r}){let n=Array.from(new Set(t)),o=new Map(e.flatMap(i=>i.items.map(a=>[`${i.id}:${a.id}`,a]))),s=[];for(let i of n){let a=o.get(i);if(!a)continue;let c=Qt(a);for(let d of fe){let y=Array.from(c[d]??[]);if(!y.length)continue;let w=r[d];if(!w){s.push({itemKey:i,packageName:d,requiredRanges:y,type:"missing-package"});continue}let C=Zt(w);if(!C){s.push({itemKey:i,packageName:d,requiredRanges:y,installedVersionSpec:w,type:"invalid-version-spec"});continue}y.every(x=>er({currentVersionSpec:C,requiredRange:x}))||s.push({itemKey:i,packageName:d,requiredRanges:y,installedVersionSpec:w,type:"incompatible-version"})}}return{checkedItemKeys:n,projectPackageVersions:r,issues:s}}function me({report:e,title:t}){if(!e.issues.length)return;re.log.warn(t),re.log.info(`\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804: ${fe.map(n=>`${n}@${p(e.projectPackageVersions[n]??"\uBBF8\uC124\uCE58")}`).join(", ")}`);let r=new Map;for(let n of e.issues){let o=r.get(n.itemKey)??[];o.push(n),r.set(n.itemKey,o)}for(let[n,o]of r.entries()){re.log.warn(p(n));for(let s of o){let i=s.requiredRanges.join(" | ");if(s.type==="missing-package"){re.log.info(` - ${s.packageName}: \uD328\uD0A4\uC9C0\uAC00 \uC124\uCE58\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC544\uC694. \uD544\uC694 \uBC94\uC704: ${i}`);continue}if(s.type==="invalid-version-spec"){re.log.info(` - ${s.packageName}: \uD604\uC7AC \uBC84\uC804 \uD615\uC2DD\uC744 \uD574\uC11D\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694 (${s.installedVersionSpec}). \uD544\uC694 \uBC94\uC704: ${i}`);continue}re.log.info(` - ${s.packageName}: \uD604\uC7AC ${s.installedVersionSpec}, \uD544\uC694 \uBC94\uC704 ${i}`)}}}function Qe({publicRegistries:e,rootPath:t}){let r=[];for(let n of e)for(let o of n.items)o.snippets.some(i=>tr(i.path).some(a=>Gt.existsSync(Jt.join(t,n.id,a))))&&r.push(`${n.id}:${o.id}`);return r}function Qt(e){let t=Object.fromEntries(fe.map(r=>[r,new Set]));for(let r of e.snippets)for(let[n,o]of Object.entries(r.dependencies??{}))rr(n)&&t[n].add(o);return t}function Zt(e){let t=e.trim();if(t.startsWith(We)&&(t=t.slice(We.length).trim()),t.startsWith(Xt)){let r=t.split("@").at(-1);if(!r)return null;t=r}return!t||t==="*"?null:Ye(t)||Xe(t)?t:null}function er({currentVersionSpec:e,requiredRange:t}){let r=Xe(t);return r?Ye(e)?Yt(e,r,{includePrerelease:!0}):Wt(e,r,{includePrerelease:!0}):!1}function tr(e){let t=new Set([e]);return e.endsWith(".tsx")&&t.add(`${e.slice(0,-4)}.jsx`),e.endsWith(".ts")&&t.add(`${e.slice(0,-3)}.js`),e.endsWith(".jsx")&&t.add(`${e.slice(0,-4)}.tsx`),e.endsWith(".js")&&t.add(`${e.slice(0,-3)}.ts`),Array.from(t)}function rr(e){return fe.includes(e)}var or=se.object({itemIds:se.array(se.string()).optional(),all:se.boolean(),cwd:se.string(),baseUrl:se.string().default(F),onDiff:se.enum(["overwrite","backup"]).optional()}),Ze=e=>{e.command("add [...item-ids]","add items").option("-a, --all","[Deprecated] Add all items",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:F}).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=H(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();T.intro("seed-design add");try{let i=or.safeParse({itemIds:t,...r});if(!i.success)throw i.error;let{data:{all:a,...c}}=i;if(a)throw new I({message:"`--all` \uC635\uC158\uC740 \uB354 \uC774\uC0C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC544\uC694. \uB300\uC2E0 `seed-design add-all` \uBA85\uB839\uC5B4\uB97C \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694."});let d=c.cwd,y=c.baseUrl,w=await he(d),C=sr.resolve(d,w.path),{start:E,stop:x}=T.spinner();E("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let h=await(async()=>{try{let l=await Promise.all((await ie({baseUrl:y})).map(async({id:g})=>ne({baseUrl:y,registryId:g})));return x("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),l}catch(l){throw x("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),l}})(),f=await(async()=>{if(c.itemIds?.length)return c.itemIds;let l=await T.multiselect({message:"\uCD94\uAC00\uD560 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:h.filter(({hideFromCLICatalog:g})=>!g).flatMap(({id:g,items:k})=>k.filter(({hideFromCLICatalog:A})=>!A).sort((A,D)=>A.id.localeCompare(D.id)).map(({id:A,description:D,deprecated:S})=>({label:`${S?"(deprecated) ":""}${p(g)}:${A}`,value:`${g}:${A}`,hint:D,deprecated:S,registryItemCount:k.length}))).sort((g,k)=>g.deprecated!==k.deprecated?g.deprecated?1:-1:k.registryItemCount-g.registryItemCount)});if(T.isCancel(l))throw new _;return l})();if(!f?.length)throw new _("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694.");T.log.message(`\uC120\uD0DD\uB41C \uD56D\uBAA9: ${p(f.join(", "))}`);let u=[];for(let l of f){let[g,...k]=l.split(":"),A=k.join(":");if(!g||!A)throw new I({message:`${p(l)}: \uD56D\uBAA9 \uC774\uB984\uC774 \uC798\uBABB\uB418\uC5C8\uC5B4\uC694.`,hint:`${p("ui:action-button")}\uACFC \uAC19\uC740 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});let D=h.find(S=>S.id===g)?.items.find(S=>S.id===A);if(!D)throw new I({message:`${p(l)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});if(D.deprecated){let S=await T.confirm({message:`${p(D.id)}: deprecated \uB418\uC5C8\uC5B4\uC694. \uCD94\uAC00\uD560\uAE4C\uC694?`,initialValue:!1});if(T.isCancel(S))throw new _;if(S===!1){T.log.info(`${p(D.id)}: \uCD94\uAC00\uD558\uC9C0 \uC54A\uC744\uAC8C\uC694.`);continue}}u.push(l)}let{registryItemsToAdd:$,npmDependenciesToAdd:O}=we({selectedItemKeys:u,publicRegistries:h}),B=pe({publicRegistries:h,itemKeys:$.flatMap(({registryId:l,items:g})=>g.map(k=>`${l}:${k.id}`)),projectPackageVersions:le(c.cwd)});me({report:B,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),T.log.info(`\uCD94\uAC00\uD560 \uD56D\uBAA9: ${p($.map(l=>l.items.map(g=>`${l.registryId}:${g.id}`).join(", ")).join(", ")||"\uC5C6\uC74C")}
|
|
13
13
|
|
|
14
|
-
\uC124\uCE58\uD560 \uC758\uC874\uC131: ${p(Array.from(O).join(", ")||"\uC5C6\uC74C")}`),await Ce({registryItemsToAdd:$,rootPath:C,cwd:d,baseUrl:y,config:w,onDiff:c.onDiff});let{installed:x,filtered:M}=await $e({cwd:d,deps:Array.from(O)});x.size===0&&T.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),x.size&&(T.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${p(Array.from(x).join(", "))}`),M.size&&T.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${p(Array.from(M).join(", "))}`)),T.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let L=Date.now()-n,W=new Set($.map(l=>l.registryId)),b=f.some(l=>{let[g,...k]=l.split(":"),A=k.join(":");return h.find(D=>D.id===g)?.items.find(D=>D.id===A)?.deprecated});try{await R.trackCommandOutcome(c.cwd,{command:"add",status:"completed",properties:{items_count:u.length,registries:Array.from(W),has_deprecated:b,dependencies_count:O.size,duration_ms:L}})}catch(l){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",l)}}catch(i){if(K(i)){try{await R.trackCommandOutcome(s,{command:"add",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}T.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"add",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}H(i,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as j from"@clack/prompts";import ir from"path";import{z as Z}from"zod";var nr=Z.object({registryIds:Z.array(Z.string()).optional(),all:Z.boolean(),includeDeprecated:Z.boolean().optional(),cwd:Z.string(),baseUrl:Z.string().optional(),onDiff:Z.enum(["overwrite","backup"]).optional()}),et=e=>{e.command("add-all [...registry-ids]","add all items from registries").option("-a, --all","Add all items from all registries",{default:!1}).option("--include-deprecated","Include deprecated items when used with `--all`",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:J}).option("--on-diff <mode>","Action when file differs: overwrite or backup").example("seed-design add-all ui --include-deprecated").example("seed-design add-all ui lib breeze").action(async(t,r)=>{let n=Date.now(),o=B(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();j.intro("seed-design add-all");try{let i=nr.safeParse({registryIds:t,...r});if(!i.success)throw i.error;let{data:a}=i,c=a.cwd,d=a.baseUrl,y=await he(c),w=ir.resolve(c,y.path),{start:C,stop:E}=j.spinner();C("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let P=await(async()=>{try{let b=await Promise.all((await ie({baseUrl:d})).map(async({id:l})=>ne({baseUrl:d,registryId:l})));return E("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),b}catch(b){throw E("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),b}})(),h=await(async()=>{if(a.all){let l=P.map(g=>g.id);return j.log.message(`\uBAA8\uB4E0 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(l.join(", "))}`),l}if(a.registryIds?.length){let l=P.map(g=>g.id);for(let g of a.registryIds)if(!l.includes(g))throw new I({message:`\uB808\uC9C0\uC2A4\uD2B8\uB9AC '${g}'\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,details:[`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB808\uC9C0\uC2A4\uD2B8\uB9AC: ${l.join(", ")}`]});return j.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(a.registryIds.join(", "))}`),a.registryIds}let b=await j.multiselect({message:"\uCD94\uAC00\uD560 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:P.filter(({hideFromCLICatalog:l})=>!l).sort((l,g)=>g.items.length-l.items.length).map(l=>{let g=l.items[0]?.id,k=g?`${l.items.length}\uAC1C \uD56D\uBAA9 (${g} \uB4F1)`:`${l.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:l.id,value:l.id,hint:k}})});if(j.isCancel(b))throw new _;return j.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(b.join(", "))}`),b})(),f=P.filter(b=>h.includes(b.id)),u=f.flatMap(b=>b.items.filter(l=>l.deprecated?a.includeDeprecated:!0).map(l=>`${b.id}:${l.id}`)),$=f.reduce((b,l)=>b+l.items.filter(g=>g.deprecated).length,0);if(!a.includeDeprecated&&$>0&&j.log.info(`${$}\uAC1C\uC758 deprecated \uD56D\uBAA9\uC740 \uC81C\uC678\uB418\uC5C8\uC5B4\uC694. --include-deprecated \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 \uCD94\uAC00\uD560 \uC218 \uC788\uC5B4\uC694.`),!u.length)throw new _("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");j.log.message(`\uCD1D ${p(u.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:O,npmDependenciesToAdd:q}=we({selectedItemKeys:u,publicRegistries:P}),x=pe({publicRegistries:P,itemKeys:O.flatMap(({registryId:b,items:l})=>l.map(g=>`${b}:${g.id}`)),projectPackageVersions:le(a.cwd)});me({report:x,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uB294 \uC2A4\uB2C8\uD3AB\uC774 \uC788\uC5B4\uC694."}),await Ce({registryItemsToAdd:O,rootPath:w,cwd:c,baseUrl:d,config:y,onDiff:a.onDiff});let{installed:M,filtered:L}=await $e({cwd:c,deps:Array.from(q)});M.size===0&&j.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),M.size&&(j.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${p(Array.from(M).join(", "))}`),L.size&&j.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${p(Array.from(L).join(", "))}`)),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let W=Date.now()-n;try{await R.trackCommandOutcome(a.cwd,{command:"add-all",status:"completed",properties:{registries:h,items_count:u.length,include_deprecated:a.includeDeprecated||!1,dependencies_count:q.size,duration_ms:W}})}catch(b){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",b)}}catch(i){if(K(i)){try{await R.trackCommandOutcome(s,{command:"add-all",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}j.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"add-all",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}H(i,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as F from"@clack/prompts";import tt from"path";import{z as V}from"zod";var ar=V.object({itemIds:V.array(V.string()).optional(),component:V.union([V.string(),V.array(V.string())]).optional(),all:V.boolean(),registry:V.string().optional(),cwd:V.string(),baseUrl:V.string().optional()});function cr({itemIds:e,component:t}){let r=s=>s.trim().replace(/\s+/g,"-"),n=(e??[]).map(r).filter(Boolean),o=(Array.isArray(t)?t:[t]).filter(s=>!!s).flatMap(s=>s.split(",")).map(r).filter(Boolean);return Array.from(new Set([...n,...o]))}function lr({publicRegistries:e,targetInputs:t,defaultRegistry:r}){let n=e.filter(s=>typeof s.id=="string"&&Array.isArray(s.items)).flatMap(s=>s.items.filter(i=>typeof i.id=="string").map(i=>`${s.id}:${i.id}`)),o=new Set;for(let s of t){let i=s.includes(":")?s:r?`${r}:${s}`:(()=>{let a=n.filter(c=>c.endsWith(`:${s}`));if(!a.length)throw new I({message:`${p(s)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${p("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(a.length>1)throw new I({message:`${p(s)}: \uAC19\uC740 \uC774\uB984\uC758 \uD56D\uBAA9\uC774 \uC5EC\uB7EC \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC788\uC5B4\uC694.`,details:a.map(c=>`- ${c}`),hint:`${p("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});return a[0]})();if(!n.includes(i))throw new I({message:`${p(i)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});o.add(i)}return Array.from(o)}var rt=e=>{e.command("compat [...item-ids]","check snippet compatibility").option("-c, --component <component>","\uAC80\uC0AC\uD560 \uCEF4\uD3EC\uB10C\uD2B8. \uC5EC\uB7EC \uBC88 \uB610\uB294 \uC27C\uD45C\uB85C \uC9C0\uC815 \uAC00\uB2A5").option("-a, --all","\uBAA8\uB4E0 registry \uD56D\uBAA9\uC744 \uAC80\uC0AC",{default:!1}).option("-r, --registry <registryId>","\uCEF4\uD3EC\uB10C\uD2B8 shorthand \uC785\uB825 \uC2DC \uAE30\uBCF8 registry").option("--cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:J}).example("seed-design compat").example("seed-design compat -c action-button").example("seed-design compat ui:action-button ui:alert-dialog").example("seed-design compat --all").action(async(t,r)=>{let n=Date.now(),o=B(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();F.intro("seed-design compat");try{let i=ar.safeParse({itemIds:t,...r});if(!i.success)throw i.error;let{data:a}=i,{start:c,stop:d}=F.spinner();c("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let y=await(async()=>{try{let f=await Promise.all((await ie({baseUrl:a.baseUrl})).map(async({id:u})=>ne({baseUrl:a.baseUrl,registryId:u})));return d("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),f}catch(f){throw d("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),f}})(),w=cr({itemIds:a.itemIds,component:a.component}),C=a.all?y.flatMap(u=>u.items.map($=>`${u.id}:${$.id}`)):w.length>0?lr({publicRegistries:y,targetInputs:w,defaultRegistry:a.registry}):de(a.cwd),E=Array.isArray(C)?C:await(async()=>{let f=await C;if(!f)throw new I({message:"seed-design.json \uD30C\uC77C\uC774 \uC5C6\uC5B4 \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB \uACBD\uB85C\uB97C \uC54C \uC218 \uC5C6\uC5B4\uC694.",hint:"`seed-design init`\uC73C\uB85C \uC124\uC815\uC744 \uB9CC\uB4E0 \uB4A4 \uC2E4\uD589\uD558\uAC70\uB098, `--all`/`-c`\uB85C \uAC80\uC0AC \uB300\uC0C1\uC744 \uC9C1\uC811 \uC9C0\uC815\uD574\uC8FC\uC138\uC694."});let u=tt.resolve(a.cwd,f.path),$=Qe({publicRegistries:y,rootPath:u});return $.length?$:(F.log.info(`${p(tt.relative(a.cwd,u)||f.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();if(!E.length){try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"empty",properties:{duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}F.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0)}let P=le(a.cwd),h=pe({publicRegistries:y,itemKeys:E,projectPackageVersions:P});if(F.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${p(h.checkedItemKeys.join(", "))}`),!h.issues.length){F.outro("\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC @seed-design/react, @seed-design/css\uC640 \uD638\uD658\uB3FC\uC694.");try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"compatible",properties:{checked_items_count:h.checkedItemKeys.length,incompatible_items_count:0,duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}process.exit(0)}me({report:h,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC558\uC5B4\uC694."}),F.log.info("\uD544\uC694\uD55C \uBC84\uC804\uC73C\uB85C @seed-design/react \uB610\uB294 @seed-design/css\uB97C \uB9DE\uCD98 \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD574\uBCF4\uC138\uC694."),F.outro("\uD638\uD658\uC131 \uC774\uC288\uAC00 \uC788\uC5B4\uC694.");try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"incompatible",properties:{checked_items_count:h.checkedItemKeys.length,incompatible_items_count:new Set(h.issues.map(f=>f.itemKey)).size,issue_count:h.issues.length,duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}process.exit(1)}catch(i){if(K(i)){try{await R.trackCommandOutcome(s,{command:"compat",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}F.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"compat",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}H(i,{defaultMessage:"\uD638\uD658\uC131 \uAC80\uC0AC\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as v from"@clack/prompts";import{z as Ie}from"zod";var pr="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",mr=Ie.object({query:Ie.string().optional(),baseUrl:Ie.string().optional(),raw:Ie.boolean()});function st(e,t){return`${pr}/${e}/${t}`}function dr(e,t){let r=`${t}${e.docUrl}`,n=`${t}/llms${e.docUrl}.txt`,o=[e.id,`- docs: ${r}`,`- llms.txt: ${n}`];if(e.snippetKey&&e.snippets&&e.snippets.length>0){let[s]=e.snippetKey.split(":");if(s==="ui"||s==="breeze")if(e.snippets.length===1)o.push(`- snippet: ${st(s,e.snippets[0].path)}`);else{o.push("- snippet:");for(let i of e.snippets)o.push(` - ${i.label}: ${st(s,i.path)}`)}}v.log.message(o.join(`
|
|
14
|
+
\uC124\uCE58\uD560 \uC758\uC874\uC131: ${p(Array.from(O).join(", ")||"\uC5C6\uC74C")}`),await Ce({registryItemsToAdd:$,rootPath:C,cwd:d,baseUrl:y,config:w,onDiff:c.onDiff});let{installed:P,filtered:M}=await $e({cwd:d,deps:Array.from(O)});P.size===0&&T.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),P.size&&(T.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${p(Array.from(P).join(", "))}`),M.size&&T.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${p(Array.from(M).join(", "))}`)),T.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let L=Date.now()-n,W=new Set($.map(l=>l.registryId)),b=f.some(l=>{let[g,...k]=l.split(":"),A=k.join(":");return h.find(D=>D.id===g)?.items.find(D=>D.id===A)?.deprecated});try{await R.trackCommandOutcome(c.cwd,{command:"add",status:"completed",properties:{items_count:u.length,registries:Array.from(W),has_deprecated:b,dependencies_count:O.size,duration_ms:L}})}catch(l){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",l)}}catch(i){if(N(i)){try{await R.trackCommandOutcome(s,{command:"add",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}T.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"add",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}G(i,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as j from"@clack/prompts";import ir from"path";import{z as Z}from"zod";var nr=Z.object({registryIds:Z.array(Z.string()).optional(),all:Z.boolean(),includeDeprecated:Z.boolean().optional(),cwd:Z.string(),baseUrl:Z.string().default(F),onDiff:Z.enum(["overwrite","backup"]).optional()}),et=e=>{e.command("add-all [...registry-ids]","add all items from registries").option("-a, --all","Add all items from all registries",{default:!1}).option("--include-deprecated","Include deprecated items when used with `--all`",{default:!1}).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:F}).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=H(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();j.intro("seed-design add-all");try{let i=nr.safeParse({registryIds:t,...r});if(!i.success)throw i.error;let{data:a}=i,c=a.cwd,d=a.baseUrl,y=await he(c),w=ir.resolve(c,y.path),{start:C,stop:E}=j.spinner();C("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let x=await(async()=>{try{let b=await Promise.all((await ie({baseUrl:d})).map(async({id:l})=>ne({baseUrl:d,registryId:l})));return E("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),b}catch(b){throw E("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),b}})(),h=await(async()=>{if(a.all){let l=x.map(g=>g.id);return j.log.message(`\uBAA8\uB4E0 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(l.join(", "))}`),l}if(a.registryIds?.length){let l=x.map(g=>g.id);for(let g of a.registryIds)if(!l.includes(g))throw new I({message:`\uB808\uC9C0\uC2A4\uD2B8\uB9AC '${g}'\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,details:[`\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB808\uC9C0\uC2A4\uD2B8\uB9AC: ${l.join(", ")}`]});return j.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(a.registryIds.join(", "))}`),a.registryIds}let b=await j.multiselect({message:"\uCD94\uAC00\uD560 \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694 (\uC2A4\uD398\uC774\uC2A4 \uBC14\uB85C \uC5EC\uB7EC \uAC1C \uC120\uD0DD \uAC00\uB2A5)",options:x.filter(({hideFromCLICatalog:l})=>!l).sort((l,g)=>g.items.length-l.items.length).map(l=>{let g=l.items[0]?.id,k=g?`${l.items.length}\uAC1C \uD56D\uBAA9 (${g} \uB4F1)`:`${l.items.length}\uAC1C \uD56D\uBAA9 (\uD56D\uBAA9 \uC5C6\uC74C)`;return{label:l.id,value:l.id,hint:k}})});if(j.isCancel(b))throw new _;return j.log.message(`\uC120\uD0DD\uB41C \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4: ${p(b.join(", "))}`),b})(),f=x.filter(b=>h.includes(b.id)),u=f.flatMap(b=>b.items.filter(l=>l.deprecated?a.includeDeprecated:!0).map(l=>`${b.id}:${l.id}`)),$=f.reduce((b,l)=>b+l.items.filter(g=>g.deprecated).length,0);if(!a.includeDeprecated&&$>0&&j.log.info(`${$}\uAC1C\uC758 deprecated \uD56D\uBAA9\uC740 \uC81C\uC678\uB418\uC5C8\uC5B4\uC694. --include-deprecated \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 \uCD94\uAC00\uD560 \uC218 \uC788\uC5B4\uC694.`),!u.length)throw new _("\uCD94\uAC00\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC5B4\uC694.");j.log.message(`\uCD1D ${p(u.length.toString())}\uAC1C\uC758 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.`);let{registryItemsToAdd:O,npmDependenciesToAdd:B}=we({selectedItemKeys:u,publicRegistries:x}),P=pe({publicRegistries:x,itemKeys:O.flatMap(({registryId:b,items:l})=>l.map(g=>`${b}:${g.id}`)),projectPackageVersions:le(a.cwd)});me({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."}),await Ce({registryItemsToAdd:O,rootPath:w,cwd:c,baseUrl:d,config:y,onDiff:a.onDiff});let{installed:M,filtered:L}=await $e({cwd:c,deps:Array.from(B)});M.size===0&&j.log.message("\uBAA8\uB4E0 \uC758\uC874\uC131\uC774 \uC774\uBBF8 \uC124\uCE58\uB418\uC5B4 \uC788\uC5B4\uC694."),M.size&&(j.log.message(`\uC758\uC874\uC131 \uC124\uCE58 \uC644\uB8CC: ${p(Array.from(M).join(", "))}`),L.size&&j.log.message(`\uC124\uCE58\uD558\uC9C0 \uC54A\uC740 \uC758\uC874\uC131 (\uC774\uBBF8 \uC124\uCE58\uB428): ${p(Array.from(L).join(", "))}`)),j.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let W=Date.now()-n;try{await R.trackCommandOutcome(a.cwd,{command:"add-all",status:"completed",properties:{registries:h,items_count:u.length,include_deprecated:a.includeDeprecated||!1,dependencies_count:B.size,duration_ms:W}})}catch(b){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",b)}}catch(i){if(N(i)){try{await R.trackCommandOutcome(s,{command:"add-all",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}j.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"add-all",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] add-all \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}G(i,{defaultMessage:"\uCD94\uAC00\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as U from"@clack/prompts";import tt from"path";import{z as q}from"zod";var ar=q.object({itemIds:q.array(q.string()).optional(),component:q.union([q.string(),q.array(q.string())]).optional(),all:q.boolean(),registry:q.string().optional(),cwd:q.string(),baseUrl:q.string().default(F)});function cr({itemIds:e,component:t}){let r=s=>s.trim().replace(/\s+/g,"-"),n=(e??[]).map(r).filter(Boolean),o=(Array.isArray(t)?t:[t]).filter(s=>!!s).flatMap(s=>s.split(",")).map(r).filter(Boolean);return Array.from(new Set([...n,...o]))}function lr({publicRegistries:e,targetInputs:t,defaultRegistry:r}){let n=e.filter(s=>typeof s.id=="string"&&Array.isArray(s.items)).flatMap(s=>s.items.filter(i=>typeof i.id=="string").map(i=>`${s.id}:${i.id}`)),o=new Set;for(let s of t){let i=s.includes(":")?s:r?`${r}:${s}`:(()=>{let a=n.filter(c=>c.endsWith(`:${s}`));if(!a.length)throw new I({message:`${p(s)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`,hint:`${p("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});if(a.length>1)throw new I({message:`${p(s)}: \uAC19\uC740 \uC774\uB984\uC758 \uD56D\uBAA9\uC774 \uC5EC\uB7EC \uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC5D0 \uC788\uC5B4\uC694.`,details:a.map(c=>`- ${c}`),hint:`${p("ui:action-button")}\uCC98\uB7FC registry\uB97C \uD3EC\uD568\uD574\uC11C \uC785\uB825\uD574\uBCF4\uC138\uC694.`});return a[0]})();if(!n.includes(i))throw new I({message:`${p(i)}: \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.`});o.add(i)}return Array.from(o)}var rt=e=>{e.command("compat [...item-ids]","check snippet compatibility").option("-c, --component <component>","\uAC80\uC0AC\uD560 \uCEF4\uD3EC\uB10C\uD2B8. \uC5EC\uB7EC \uBC88 \uB610\uB294 \uC27C\uD45C\uB85C \uC9C0\uC815 \uAC00\uB2A5").option("-a, --all","\uBAA8\uB4E0 registry \uD56D\uBAA9\uC744 \uAC80\uC0AC",{default:!1}).option("-r, --registry <registryId>","\uCEF4\uD3EC\uB10C\uD2B8 shorthand \uC785\uB825 \uC2DC \uAE30\uBCF8 registry").option("--cwd <cwd>","the working directory. defaults to the current directory.",{default:process.cwd()}).option("-u, --baseUrl <baseUrl>","the base url of the registry. defaults to the current directory.",{default:F}).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=H(r),s=typeof r?.cwd=="string"?r.cwd:process.cwd();U.intro("seed-design compat");try{let i=ar.safeParse({itemIds:t,...r});if(!i.success)throw i.error;let{data:a}=i,{start:c,stop:d}=U.spinner();c("Registry\uB97C \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");let y=await(async()=>{try{let f=await Promise.all((await ie({baseUrl:a.baseUrl})).map(async({id:u})=>ne({baseUrl:a.baseUrl,registryId:u})));return d("Registry\uB97C \uAC00\uC838\uC654\uC5B4\uC694."),f}catch(f){throw d("Registry\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),f}})(),w=cr({itemIds:a.itemIds,component:a.component}),C=a.all?y.flatMap(u=>u.items.map($=>`${u.id}:${$.id}`)):w.length>0?lr({publicRegistries:y,targetInputs:w,defaultRegistry:a.registry}):de(a.cwd),E=Array.isArray(C)?C:await(async()=>{let f=await C;if(!f)throw new I({message:"seed-design.json \uD30C\uC77C\uC774 \uC5C6\uC5B4 \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB \uACBD\uB85C\uB97C \uC54C \uC218 \uC5C6\uC5B4\uC694.",hint:"`seed-design init`\uC73C\uB85C \uC124\uC815\uC744 \uB9CC\uB4E0 \uB4A4 \uC2E4\uD589\uD558\uAC70\uB098, `--all`/`-c`\uB85C \uAC80\uC0AC \uB300\uC0C1\uC744 \uC9C1\uC811 \uC9C0\uC815\uD574\uC8FC\uC138\uC694."});let u=tt.resolve(a.cwd,f.path),$=Qe({publicRegistries:y,rootPath:u});return $.length?$:(U.log.info(`${p(tt.relative(a.cwd,u)||f.path)}\uC5D0\uC11C \uC124\uCE58\uB41C \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694.`),[])})();if(!E.length){try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"empty",properties:{duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}U.outro("\uAC80\uC0AC\uD560 \uC2A4\uB2C8\uD3AB\uC774 \uC5C6\uC5B4\uC694."),process.exit(0)}let x=le(a.cwd),h=pe({publicRegistries:y,itemKeys:E,projectPackageVersions:x});if(U.log.info(`\uAC80\uC0AC \uB300\uC0C1: ${p(h.checkedItemKeys.join(", "))}`),!h.issues.length){U.outro("\uBAA8\uB4E0 \uC2A4\uB2C8\uD3AB\uC774 \uD604\uC7AC @seed-design/react, @seed-design/css\uC640 \uD638\uD658\uB3FC\uC694.");try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"compatible",properties:{checked_items_count:h.checkedItemKeys.length,incompatible_items_count:0,duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}process.exit(0)}me({report:h,title:"\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8 \uBC84\uC804\uACFC \uD638\uD658\uB418\uC9C0 \uC54A\uB294 \uC2A4\uB2C8\uD3AB\uC744 \uCC3E\uC558\uC5B4\uC694."}),U.log.info("\uD544\uC694\uD55C \uBC84\uC804\uC73C\uB85C @seed-design/react \uB610\uB294 @seed-design/css\uB97C \uB9DE\uCD98 \uB4A4 \uB2E4\uC2DC \uC2E4\uD589\uD574\uBCF4\uC138\uC694."),U.outro("\uD638\uD658\uC131 \uC774\uC288\uAC00 \uC788\uC5B4\uC694.");try{await R.trackCommandOutcome(a.cwd,{command:"compat",status:"completed",result:"incompatible",properties:{checked_items_count:h.checkedItemKeys.length,incompatible_items_count:new Set(h.issues.map(f=>f.itemKey)).size,issue_count:h.issues.length,duration_ms:Date.now()-n}})}catch(f){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",f)}process.exit(1)}catch(i){if(N(i)){try{await R.trackCommandOutcome(s,{command:"compat",status:"cancelled",properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}U.outro(p(i.message)),process.exit(0)}try{await R.trackCommandFailure(s,{command:"compat",error:i,properties:{duration_ms:Date.now()-n}})}catch(a){o&&console.error("[Telemetry] compat \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",a)}G(i,{defaultMessage:"\uD638\uD658\uC131 \uAC80\uC0AC\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:o}),process.exit(1)}})};import*as v from"@clack/prompts";import{z as Ie}from"zod";var pr="https://raw.githubusercontent.com/daangn/seed-design/refs/heads/dev/docs/registry",mr=Ie.object({query:Ie.string().optional(),baseUrl:Ie.string().optional(),raw:Ie.boolean()});function st(e,t){return`${pr}/${e}/${t}`}function dr(e,t){let r=`${t}${e.docUrl}`,n=`${t}/llms${e.docUrl}.txt`,o=[e.id,`- docs: ${r}`,`- llms.txt: ${n}`];if(e.snippetKey&&e.snippets&&e.snippets.length>0){let[s]=e.snippetKey.split(":");if(s==="ui"||s==="breeze")if(e.snippets.length===1)o.push(`- snippet: ${st(s,e.snippets[0].path)}`);else{o.push("- snippet:");for(let i of e.snippets)o.push(` - ${i.label}: ${st(s,i.path)}`)}}v.log.message(o.join(`
|
|
15
15
|
`))}function fr(e,t){let r=e.length,n=t.length,o=Array.from({length:r+1},(s,i)=>Array.from({length:n+1},(a,c)=>i===0?c:c===0?i:0));for(let s=1;s<=r;s++)for(let i=1;i<=n;i++)o[s][i]=Math.min(o[s-1][i]+1,o[s][i-1]+1,o[s-1][i-1]+(e[s-1]!==t[i-1]?1:0));return o[r][n]}function ee(e,t,r=3){let n=e.toLowerCase();return t.map(o=>({value:o,dist:fr(n,o.toLowerCase())})).filter(({dist:o})=>o>0&&o<=r).sort((o,s)=>o.dist-s.dist).map(({value:o})=>o)}function gr(e,t){if(e.length===0)return;let r=[],n=t.map(i=>i.id),o=ee(e[0],n);if(o.length===0){let i=t.flatMap(d=>d.sections.flatMap(y=>y.items.map(w=>`${d.id}/${y.id}/${w.id}`))),a=e.join("/"),c=ee(a,i,5);c.length>0&&r.push(...c.slice(0,3))}else{let i=t.find(a=>a.id===o[0]);if(i&&e.length>=2){let a=i.sections.map(d=>d.id),c=ee(e[1],a);if(c.length>0){let d=i.sections.find(y=>y.id===c[0]);if(d&&e.length>=3){let y=d.items.map(C=>C.id),w=ee(e[2],y);for(let C of w.slice(0,3))r.push(`${i.id}/${d.id}/${C}`)}else for(let y of c.slice(0,3))r.push(`${i.id}/${y}`)}else{let d=i.sections.flatMap(w=>w.items.map(C=>({path:`${i.id}/${w.id}/${C.id}`,id:C.id}))),y=ee(e[1],d.map(w=>w.id));for(let w of y.slice(0,3)){let C=d.find(E=>E.id===w);C&&r.push(C.path)}}}else for(let a of o.slice(0,3))r.push(a)}if(r.length===0)return;let s=["","\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?"];for(let i of r)s.push(` - ${i}`);return s.join(`
|
|
16
|
-
`)}function ur(e){return e.split("/").map(t=>t.trim()).filter(Boolean)}function yr(e,t){let r=t.toLowerCase();return e.flatMap(n=>n.sections.flatMap(o=>o.items.filter(s=>s.id.toLowerCase().includes(r)||s.title.toLowerCase().includes(r)).map(s=>({item:s,categoryLabel:n.label,sectionLabel:o.label}))))}async function ge(e){let t=await v.select({message:"\uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:`${r.deprecated?"(deprecated) ":""}${r.title}`,value:r,hint:r.description}))});if(v.isCancel(t))throw new _;return t}async function ot(e){let t=await v.select({message:"\uC139\uC158\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:r.label,value:r,hint:`${r.items.length}\uAC1C \uD56D\uBAA9`}))});if(v.isCancel(t))throw new _;return t}async function hr(e){let t=await v.select({message:"\uCE74\uD14C\uACE0\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:r.label,value:r,hint:`${r.sections.reduce((n,o)=>n+o.items.length,0)}\uAC1C \uD56D\uBAA9`}))});if(v.isCancel(t))throw new _;return t}var it=e=>{e.command("docs [query]","\uBB38\uC11C \uB9C1\uD06C, llms.txt \uB9C1\uD06C, \uC2A4\uB2C8\uD3AB \uB9C1\uD06C\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4").option("-u, --baseUrl <baseUrl>",`\uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uAE30\uBCF8 URL (\uAE30\uBCF8\uAC12: ${
|
|
16
|
+
`)}function ur(e){return e.split("/").map(t=>t.trim()).filter(Boolean)}function yr(e,t){let r=t.toLowerCase();return e.flatMap(n=>n.sections.flatMap(o=>o.items.filter(s=>s.id.toLowerCase().includes(r)||s.title.toLowerCase().includes(r)).map(s=>({item:s,categoryLabel:n.label,sectionLabel:o.label}))))}async function ge(e){let t=await v.select({message:"\uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:`${r.deprecated?"(deprecated) ":""}${r.title}`,value:r,hint:r.description}))});if(v.isCancel(t))throw new _;return t}async function ot(e){let t=await v.select({message:"\uC139\uC158\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:r.label,value:r,hint:`${r.items.length}\uAC1C \uD56D\uBAA9`}))});if(v.isCancel(t))throw new _;return t}async function hr(e){let t=await v.select({message:"\uCE74\uD14C\uACE0\uB9AC\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694",options:e.map(r=>({label:r.label,value:r,hint:`${r.sections.reduce((n,o)=>n+o.items.length,0)}\uAC1C \uD56D\uBAA9`}))});if(v.isCancel(t))throw new _;return t}var it=e=>{e.command("docs [query]","\uBB38\uC11C \uB9C1\uD06C, llms.txt \uB9C1\uD06C, \uC2A4\uB2C8\uD3AB \uB9C1\uD06C\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4").option("-u, --baseUrl <baseUrl>",`\uB808\uC9C0\uC2A4\uD2B8\uB9AC\uC758 \uAE30\uBCF8 URL (\uAE30\uBCF8\uAC12: ${F})`,{default:F}).option("--raw","llms.txt \uB0B4\uC6A9\uC744 \uC9C1\uC811 \uAC00\uC838\uC640 \uCD9C\uB825\uD569\uB2C8\uB2E4. LLM \uD30C\uC774\uD504\uC5D0 \uC720\uC6A9\uD569\uB2C8\uB2E4.",{default:!1}).example("seed-design docs").example("seed-design docs action-button").example("seed-design docs react").example("seed-design docs react/components").example("seed-design docs react/components/action-button").example("seed-design docs react/updates/changelog --raw").action(async(t,r)=>{let n=Date.now(),o=H(r),s=r.raw??!1,i=process.cwd();s||v.intro("seed-design docs");try{let a=mr.safeParse({query:t,...r});if(!a.success)throw a.error;let{data:c}=a,d=c.baseUrl??F;if(c.raw&&!c.query)throw new I({message:"--raw \uBAA8\uB4DC\uC5D0\uC11C\uB294 \uCFFC\uB9AC\uAC00 \uD544\uC694\uD574\uC694.",hint:"\uC608: `seed-design docs react/updates/changelog --raw`"});let y=await(async()=>{if(s)return await Ee({baseUrl:d});let{start:h,stop:f}=v.spinner();h("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uACE0 \uC788\uC5B4\uC694...");try{let u=await Ee({baseUrl:d});return f("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC654\uC5B4\uC694."),u}catch(u){throw f("\uBB38\uC11C \uBAA9\uB85D\uC744 \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694."),u}})(),{categories:w}=y,C,E=async()=>{if(c.query){let u=ur(c.query);if(s&&u.length>3)return;let $=w.find(P=>P.id===u[0]);if($&&u.length>=2){let P=$.sections.find(b=>b.id===u[1]);if(P&&u.length>=3){let b=P.items.find(k=>k.id===u[2]);if(b)return b;let l=u[2].toLowerCase(),g=P.items.filter(k=>k.id.toLowerCase().includes(l)||k.title.toLowerCase().includes(l));if(g.length===0){let k=ee(u[2],P.items.map(D=>D.id)),A=k.length>0?`
|
|
17
17
|
|
|
18
18
|
\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
|
|
19
|
-
${k.slice(0,3).map(D=>` - ${$.id}/${
|
|
20
|
-
`)}`:"";throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${A}`,hint:`\`seed-design docs ${$.id}/${
|
|
19
|
+
${k.slice(0,3).map(D=>` - ${$.id}/${P.id}/${D}`).join(`
|
|
20
|
+
`)}`:"";throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${A}`,hint:`\`seed-design docs ${$.id}/${P.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}return g.length===1?g[0]:await ge(g)}if(P)return await ge(P.items);let M=u[1].toLowerCase(),L=$.sections.flatMap(b=>b.items.filter(l=>l.id.toLowerCase().includes(M)||l.title.toLowerCase().includes(M)).map(l=>({item:l,sectionLabel:b.label})));if(L.length===0){let b=$.sections.map(S=>S.id),l=ee(u[1],b),g=$.sections.flatMap(S=>S.items.map(ue=>({path:`${$.id}/${S.id}/${ue.id}`,id:ue.id}))),k=ee(u[1],g.map(S=>S.id)),A=[...l.slice(0,2).map(S=>`${$.id}/${S}`),...k.slice(0,2).map(S=>g.find(ue=>ue.id===S)?.path).filter(S=>S!=null)],D=A.length>0?`
|
|
21
21
|
|
|
22
22
|
\u{1F4A1} \uC774\uAC83\uC744 \uC758\uBBF8\uD588\uB098\uC694?
|
|
23
23
|
${A.map(S=>` - ${S}`).join(`
|
|
24
|
-
`)}`:"";throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${D}`,hint:`\`seed-design docs ${$.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(L.length===1)return L[0].item;let W=await v.select({message:`${p(u[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:L.map(({item:b,sectionLabel:l})=>({label:`[${l}] ${b.title}`,value:b,hint:b.description}))});if(v.isCancel(W))throw new _;return W}if($){if($.sections.length===1)return await ge($.sections[0].items);let
|
|
24
|
+
`)}`:"";throw new I({message:`${p(c.query)}: \uBB38\uC11C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694.${D}`,hint:`\`seed-design docs ${$.id}\`\uB85C \uBAA9\uB85D\uC744 \uD655\uC778\uD574\uBCF4\uC138\uC694.`})}if(L.length===1)return L[0].item;let W=await v.select({message:`${p(u[1])}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:L.map(({item:b,sectionLabel:l})=>({label:`[${l}] ${b.title}`,value:b,hint:b.description}))});if(v.isCancel(W))throw new _;return W}if($){if($.sections.length===1)return await ge($.sections[0].items);let P=await ot($.sections);return await ge(P.items)}let O=yr(w,c.query);if(O.length===0){let P=gr(u,w);throw new I({message:`${p(c.query)}: \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(O.length===1)return O[0].item;let B=await v.select({message:`${p(c.query)}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD56D\uBAA9\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`,options:O.map(({item:P,categoryLabel:M,sectionLabel:L})=>({label:`[${M} > ${L}] ${P.title}`,value:P,hint:P.description}))});if(v.isCancel(B))throw new _;return B}let h=await hr(w),f;return h.sections.length===1?f=h.sections[0]:f=await ot(h.sections),await ge(f.items)};if(s)try{C=await E()}catch(h){if(N(h))throw h}else C=await E();if(s){let h;if(C){let f=`${d}/llms${C.docUrl}.txt`;h=await Oe({url:f})}else h=await Me({baseUrl:d,query:c.query});console.log(h)}else dr(C,d),v.outro("\uC644\uB8CC\uD588\uC5B4\uC694.");let x=Date.now()-n;try{await R.trackCommandOutcome(i,{command:"docs",status:"completed",properties:{query:c.query??null,item_id:C?.id??c.query??null,has_snippet:!!(C?.snippets&&C.snippets.length>0),raw_mode:s,duration_ms:x}})}catch(h){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",h)}}catch(a){if(N(a)){try{await R.trackCommandOutcome(i,{command:"docs",status:"cancelled",properties:{raw_mode:s,duration_ms:Date.now()-n}})}catch(c){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}s||v.outro(p(a.message)),process.exit(0)}try{await R.trackCommandFailure(i,{command:"docs",error:a,properties:{raw_mode:s,duration_ms:Date.now()-n}})}catch(c){o&&console.error("[Telemetry] docs \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",c)}if(s){let c=a instanceof Error?a.message:String(a);console.error(c),process.exit(1)}G(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 K from"@clack/prompts";import{z as xe}from"zod";import wr from"dedent";var br=xe.object({cwd:xe.string(),yes:xe.boolean().optional(),default:xe.boolean().optional()}),nt=e=>{e.command("init","seed-design.json \uD30C\uC77C \uC0DD\uC131").option("-c, --cwd <cwd>","\uC791\uC5C5 \uB514\uB809\uD1A0\uB9AC. \uAE30\uBCF8\uAC12\uC740 \uD604\uC7AC \uB514\uB809\uD1A0\uB9AC.",{default:process.cwd()}).option("-y, --yes","\uBAA8\uB4E0 \uC9C8\uBB38\uC5D0 \uB300\uD574 \uAE30\uBCF8\uAC12\uC73C\uB85C \uB2F5\uBCC0\uD569\uB2C8\uB2E4.").option("--default","Deprecated. --yes\uC640 \uB3D9\uC77C\uD558\uAC8C \uAE30\uBCF8\uAC12\uC73C\uB85C \uC0DD\uC131\uD569\uB2C8\uB2E4.").action(async t=>{let r=Date.now(),n=H(t),o=typeof t?.cwd=="string"?t.cwd:process.cwd();K.intro("seed-design.json \uD30C\uC77C \uC0DD\uC131");try{let s=br.safeParse(t);if(!s.success)throw s.error;let i=s.data,a=i.yes||i.default,c=a?z:await Te(),{start:d,stop:y}=K.spinner();d("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC911...");let w=await(async()=>{try{return(await ye({cwd:i.cwd,config:c})).relativePath}catch(E){throw y("seed-design.json \uD30C\uC77C \uC0DD\uC131\uC774 \uC911\uB2E8\uB410\uC5B4\uC694."),E}})();y(`seed-design.json \uD30C\uC77C\uC774 ${p(w)}\uC5D0 \uC0DD\uC131\uB410\uC5B4\uC694.`),K.log.info(p("seed-design add {component} \uBA85\uB839\uC5B4\uB85C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uCD94\uAC00\uD574\uBCF4\uC138\uC694!")),K.log.info(p("seed-design add \uBA85\uB839\uC5B4\uB85C \uCD94\uAC00\uD560 \uC218 \uC788\uB294 \uBAA8\uB4E0 \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.")),K.note(wr(`SEED Design CLI\uB294 \uAC1C\uC120\uC744 \uC704\uD574 \uC775\uBA85 \uC0AC\uC6A9 \uB370\uC774\uD130\uB97C \uC218\uC9D1\uD574\uC694.
|
|
25
25
|
|
|
26
26
|
\uBE44\uD65C\uC131\uD654\uD558\uB824\uBA74:
|
|
27
27
|
\u2022 seed-design.json\uC5D0\uC11C ${p('"telemetry": false')}\uB85C \uC124\uC815
|
|
28
28
|
\u2022 ${p("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"),
|
|
30
|
+
\uC790\uC138\uD55C \uB0B4\uC6A9: https://seed-design.com/react/getting-started/cli/configuration#telemetry`),"Telemetry \uC548\uB0B4"),K.outro("\uC791\uC5C5\uC774 \uC644\uB8CC\uB410\uC5B4\uC694.");let C=Date.now()-r;try{await R.trackCommandOutcome(i.cwd,{command:"init",status:"completed",properties:{tsx:c.tsx,rsc:c.rsc,telemetry:c.telemetry,yes_option:a,duration_ms:C}})}catch(E){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",E)}}catch(s){if(N(s)){try{await R.trackCommandOutcome(o,{command:"init",status:"cancelled",properties:{duration_ms:Date.now()-r}})}catch(i){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",i)}K.outro(p(s.message)),process.exit(0)}try{await R.trackCommandFailure(o,{command:"init",error:s,properties:{duration_ms:Date.now()-r}})}catch(i){n&&console.error("[Telemetry] init \uC774\uBCA4\uD2B8 \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694:",i)}G(s,{defaultMessage:"seed-design.json \uD30C\uC77C \uC0DD\uC131\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694.",defaultHint:"`--verbose` \uC635\uC158\uC73C\uB85C \uC0C1\uC138 \uC624\uB958\uB97C \uD655\uC778\uD574\uBCF4\uC138\uC694.",verbose:n}),process.exit(1)}})};import{cac as Cr}from"cac";var $r="seed-design",X=Cr($r);async function Ir(){let e=ce();X.option("--verbose","\uC624\uB958 \uC0C1\uC138 \uC815\uBCF4\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4."),Ze(X),et(X),rt(X),it(X),nt(X),X.version(e.version||"1.0.0","-v, --version"),X.help(),X.parse()}Ir();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seed-design/cli",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"engines": {
|
|
19
|
-
"node": ">=
|
|
19
|
+
"node": ">=20.19.0"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "ENV=prod bun ./build.mjs",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@babel/plugin-transform-typescript": "^7.27.0",
|
|
31
31
|
"@clack/prompts": "^1.0.0",
|
|
32
32
|
"@npmcli/disparity-colors": "^3.0.1",
|
|
33
|
-
"cac": "^
|
|
33
|
+
"cac": "^7.0.0",
|
|
34
34
|
"cosmiconfig": "^9.0.0",
|
|
35
35
|
"dedent": "^1.7.0",
|
|
36
36
|
"diff": "^8.0.3",
|
|
@@ -45,11 +45,13 @@
|
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/babel__core": "^7.20.5",
|
|
48
|
+
"@types/findup-sync": "^4.0.5",
|
|
48
49
|
"@types/fs-extra": "^11.0.4",
|
|
50
|
+
"@types/node": "^25.0.0",
|
|
49
51
|
"dotenv": "^17.2.3",
|
|
50
52
|
"esbuild": "^0.27.0",
|
|
51
53
|
"type-fest": "^5.0.0",
|
|
52
|
-
"typescript": "^
|
|
54
|
+
"typescript": "^6.0.0"
|
|
53
55
|
},
|
|
54
56
|
"publishConfig": {
|
|
55
57
|
"access": "public"
|
package/src/commands/add-all.ts
CHANGED
|
@@ -29,7 +29,7 @@ const addAllOptionsSchema = z.object({
|
|
|
29
29
|
all: z.boolean(),
|
|
30
30
|
includeDeprecated: z.boolean().optional(),
|
|
31
31
|
cwd: z.string(),
|
|
32
|
-
baseUrl: z.string().
|
|
32
|
+
baseUrl: z.string().default(BASE_URL),
|
|
33
33
|
onDiff: z.enum(["overwrite", "backup"]).optional(),
|
|
34
34
|
});
|
|
35
35
|
|
package/src/commands/add.ts
CHANGED
package/src/commands/compat.ts
CHANGED
|
@@ -37,8 +37,8 @@ describe("analytics command outcome tracking", () => {
|
|
|
37
37
|
|
|
38
38
|
it("command outcome payload에 status를 포함해야 한다", async () => {
|
|
39
39
|
const cwd = await createTempCwd();
|
|
40
|
-
const fetchSpy = spyOn(globalThis, "fetch").
|
|
41
|
-
|
|
40
|
+
const fetchSpy = spyOn(globalThis, "fetch").mockResolvedValue(
|
|
41
|
+
new Response(null, { status: 200 }),
|
|
42
42
|
);
|
|
43
43
|
const infoSpy = spyOn(prompts.log, "info").mockImplementation(() => {});
|
|
44
44
|
|
|
@@ -66,8 +66,8 @@ describe("analytics command outcome tracking", () => {
|
|
|
66
66
|
|
|
67
67
|
it("failed outcome payload에는 error_type만 포함하고 message는 포함하지 않아야 한다", async () => {
|
|
68
68
|
const cwd = await createTempCwd();
|
|
69
|
-
const fetchSpy = spyOn(globalThis, "fetch").
|
|
70
|
-
|
|
69
|
+
const fetchSpy = spyOn(globalThis, "fetch").mockResolvedValue(
|
|
70
|
+
new Response(null, { status: 200 }),
|
|
71
71
|
);
|
|
72
72
|
spyOn(prompts.log, "info").mockImplementation(() => {});
|
|
73
73
|
|
|
@@ -52,6 +52,15 @@ mock.module("../utils/init-config", () => ({
|
|
|
52
52
|
const { addCommand } = await import("../commands/add");
|
|
53
53
|
const { initCommand } = await import("../commands/init");
|
|
54
54
|
|
|
55
|
+
function assertHasCommandAction<T extends { commandAction?: unknown }>(
|
|
56
|
+
command: T,
|
|
57
|
+
name: string,
|
|
58
|
+
): asserts command is T & { commandAction: NonNullable<T["commandAction"]> } {
|
|
59
|
+
if (!command.commandAction) {
|
|
60
|
+
throw new Error(`Command has no action handler: ${name}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
55
64
|
function getCommand(cli: CAC, name: string) {
|
|
56
65
|
const command = cli.commands.find((item) => item.name === name);
|
|
57
66
|
|
|
@@ -59,6 +68,7 @@ function getCommand(cli: CAC, name: string) {
|
|
|
59
68
|
throw new Error(`Command not found: ${name}`);
|
|
60
69
|
}
|
|
61
70
|
|
|
71
|
+
assertHasCommandAction(command, name);
|
|
62
72
|
return command;
|
|
63
73
|
}
|
|
64
74
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare module "@babel/plugin-transform-typescript";
|
|
2
|
+
|
|
3
|
+
declare module "@npmcli/disparity-colors" {
|
|
4
|
+
/**
|
|
5
|
+
* Colorizes unified diff output with ANSI escape codes.
|
|
6
|
+
*
|
|
7
|
+
* @param str - A unified diff format string.
|
|
8
|
+
* @param opts.headerLength - Number of lines at the start of the diff to colorize as header.
|
|
9
|
+
*/
|
|
10
|
+
export default function colorize(str: string, opts?: { headerLength?: number }): string;
|
|
11
|
+
}
|
package/src/utils/install.ts
CHANGED
|
@@ -31,7 +31,7 @@ export async function installDependencies({ cwd, deps, dev = false }: InstallDep
|
|
|
31
31
|
|
|
32
32
|
const isDev = dev ? "-D" : null;
|
|
33
33
|
const addCommand = packageManager === "npm" ? "install" : "add";
|
|
34
|
-
const command = [addCommand, isDev, ...depsToInstall].filter(Boolean);
|
|
34
|
+
const command = [addCommand, isDev, ...depsToInstall].filter((v): v is string => Boolean(v));
|
|
35
35
|
const commandLabel = `${packageManager} ${command.join(" ")}`;
|
|
36
36
|
|
|
37
37
|
try {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PublicRegistry
|
|
1
|
+
import type { PublicRegistry } from "@/src/schema";
|
|
2
2
|
|
|
3
3
|
export function resolveDependencies({
|
|
4
4
|
selectedItemKeys,
|
|
@@ -13,7 +13,7 @@ export function resolveDependencies({
|
|
|
13
13
|
const registryItemsToAdd: { registryId: string; items: PublicRegistry["items"] }[] = [];
|
|
14
14
|
const npmDependenciesToAdd = new Set<string>();
|
|
15
15
|
|
|
16
|
-
function collectRegistryItemsToAdd(registryId: string, item:
|
|
16
|
+
function collectRegistryItemsToAdd(registryId: string, item: PublicRegistry["items"][number]) {
|
|
17
17
|
const registryFoundToAdd = registryItemsToAdd.find((r) => r.registryId === registryId);
|
|
18
18
|
|
|
19
19
|
// if already added, skip
|