@jongh/cli 1.5.0 → 1.6.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.
Files changed (2) hide show
  1. package/dist/index.js +108 -5
  2. package/package.json +4 -3
package/dist/index.js CHANGED
@@ -1,8 +1,111 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import {intro,confirm,outro,spinner,log}from'@clack/prompts';import Y from'chalk';import F from'fs-extra';import S from'path';import {z as z$1,ZodError}from'zod';import pe from'fast-glob';import {loadConfig,createMatchPath}from'tsconfig-paths';import {Project,SyntaxKind}from'ts-morph';import {detect,resolveCommand}from'package-manager-detector';import {packageDirectory}from'pkg-dir';var D=t=>{let e={};for(let o of t)e[o]=o;return e},M=D(["config_not_found","resolve_path_fail","failed_to_fetch"]);D(["components.json","tsconfig.json","panda.config.*","package.json"]);var x=class extends Error{issue;constructor(e){super(),this.name="NewError",this.issue=e;}get format(){return this.issue.code+`
2
+ import {Command}from'commander';import {intro,confirm,outro,spinner,select,log}from'@clack/prompts';import X from'chalk';import $ from'fs-extra';import C from'path';import {z,ZodError}from'zod';import ue from'fast-glob';import {loadConfig,createMatchPath}from'tsconfig-paths';import {Project,SyntaxKind}from'ts-morph';import {detect,resolveCommand}from'package-manager-detector';import {packageDirectory}from'pkg-dir';import je from'handlebars';var B=t=>{let e={};for(let o of t)e[o]=o;return e},M=B(["config_not_found","resolve_path_fail","failed_to_fetch"]);B(["components.json","tsconfig.json","panda.config.*","package.json"]);var x=class extends Error{issue;constructor(e){super(),this.name="NewError",this.issue=e;}get format(){return this.issue.code+`
3
3
  `+this.issue.message?.join(`
4
- `)}},d=t=>{let e;switch(t.code){case M.config_not_found:e=`error occured while config ${t.configFile}`;break;case M.resolve_path_fail:e=`failed to resolve your path, current ${t.cwd}`;break;case M.failed_to_fetch:e=`failed to fetch ${t.target} [${t.statusCode}]`;break;default:e="error occured";}return new x({...t,message:[...t.message||"",e]})};var w={fileName:"components.json",schema:z$1.object({utils:z$1.string(),components:z$1.string(),hooks:z$1.string(),styledsystem:z$1.string()}).strict()},ie=["ui","hooks","utils"],ce=z$1.object({name:z$1.string(),content:z$1.string(),type:z$1.enum(ie)}),R=z$1.object({name:z$1.string(),dependencies:z$1.array(z$1.string()).optional(),files:z$1.array(ce).optional()}),z=z$1.object({name:z$1.string(),dependencies:z$1.array(z$1.string()).optional(),file:z$1.string()});function B(t){try{return F.readJsonSync(S.resolve(t,w.fileName))}catch(e){return d({code:"config_not_found",configFile:w.fileName,message:[e instanceof Error?e.message:""]})}}function P(t){let e=loadConfig(t);if(e.resultType==="failed")throw d({code:"config_not_found",configFile:"tsconfig.json",message:["cannot found tsconfig.json"]});return e}async function U(t){return await F.pathExists(S.join(t,"components.json"))}function J(t,e){let o=["./","./src/","./app/","./src/app"].map(n=>S.resolve(t,n));for(let[n,r]of Object.entries(e.paths)){let s=S.join(t,e.baseUrl||"",r[0].replace(/\/\*$/,""));if(o.some(c=>c===s||c.includes(s)))return n.replace(/\/\*$/,"")}return null}function K(t,e,o){let n=S.join(t,e);for(let[r,s]of Object.entries(o.paths)){let c=s[0].replace(/\/\*$/,"");if(n===S.join(t,o.baseUrl||"",c))return r.replace(/\/\*$/,"")}return null}async function _(t){try{let e=await pe.glob(["panda.config.*"],{cwd:t,deep:3});if(!e.length)throw d({code:"config_not_found",configFile:"panda.config.*",message:["failed to find panda.config file"]});return e[0]}catch(e){throw d({code:"config_not_found",configFile:"panda.config.*",message:[e instanceof Error?e.message:"unknown error occured finding panda.config"]})}}async function v(t,e){let o=createMatchPath(e.absoluteBaseUrl,e.paths)(t,void 0,()=>true);if(!o)throw d({code:"resolve_path_fail",target:t,cwd:process.cwd(),message:["resolve error"]});return o}async function T(t){let e=t.match(/outdir:\s*["']([^"']+)["']/),o=t.match(/importMap:\s*({[^}]+}|["'][^"']+["'])/),n=e?e[1]:null,r=null;if(o){let s=o[1];if(s.startsWith("{")){let c=s.match(/css:\s*["']([^"']+)["']/);r=c?c[1].replace(/\/css$/,""):null;}else r=s.replace(/["']/g,"");}return {outdir:n,importMap:r}}function W(t,e){let o=t;return [{from:/@utils\//g,to:`${e.utils}/`},{from:/@hooks\//g,to:`${e.hooks}/`},{from:/@styled-system\//g,to:`${e.styledsystem}/`},{from:/@components\//g,to:`${e.components}/`}].forEach(({from:r,to:s})=>{o=o.replace(r,s);}),o}function V(t){let o=new Project().addSourceFileAtPath(t),n=[{namedImports:[{name:"preset"}],moduleSpecifier:"panda-animation"},{namedImports:[{name:"defaultPreset"}],moduleSpecifier:"./preset"}];o.addImportDeclarations(n);let s=o.getFirstDescendantByKind(SyntaxKind.CallExpression)?.getArguments()[0];s?(s.getProperty("presets")||s.addPropertyAssignment({name:"presets",initializer:'[preset(), "@pandacss/preset-panda", defaultPreset"]'}),o.saveSync()):console.warn("Could not modify panda.config.ts. add presets : [preset(), @pandacss/preset-panda, defaultPreset] in your panda.config");}async function G(t,e){let o=await detect({cwd:t}),n=resolveCommand(o?.agent||"npm","add",e);if(n)return n}var Ce=z$1.object({components:z$1.array(z$1.string()).optional(),cwd:z$1.string()}),be="https://whdgur.shop",Q=new Command().name("add").argument("[components...]").option("-c, --cwd <cwd>","current working directory, default to process.cwd()",process.cwd()).action(async(t,e)=>{let o=Y.bold.red,n=Y.bold.blue;try{let r=Ce.parse({components:t,...e});intro(n("install components..."));let s=w.schema.parse(B(r.cwd)),c=P(r.cwd),f=await _(r.cwd),y=await F.readFile(S.resolve(r.cwd,f),"utf-8"),{outdir:l}=await T(y),g=w.schema.parse({utils:await v(s.utils,c),components:await v(s.components,c),hooks:await v(s.hooks,c),styledsystem:S.join(r.cwd,l||"styled-system")}),m=r.components?.map(i=>i.toLowerCase());if(!m?.length)return;(await Promise.allSettled(m?.map(async i=>{try{let a=await fetch(`${be}/${i}.json`);if(!a.ok)throw new Error("fetch error",{cause:{code:"failed_to_fetch",target:i,statusCode:a.status,message:[a.statusText]}});return await a.json()}catch(a){if(a instanceof TypeError)throw d({code:"failed_to_fetch",target:i,statusCode:null,message:[o(a.message),o(a.cause?JSON.stringify(a.cause):"cause by typeError")]});if(a instanceof Error)throw d(a.cause)}}))).forEach(async(i,a)=>{if(i.status==="rejected"){i.reason instanceof x&&console.log(o(i.reason.format));return}try{let h=R.parse(i.value),E=S.join(g.components,m[a]);if(F.pathExistsSync(E)&&!await confirm({message:`Component ${m[a]} already exists. Do you want to overwrite it?`}))return;h.files?.forEach(b=>{let O=W(b.content,s);b.type==="ui"?F.outputFileSync(S.join(E,b.name),O):F.outputFileSync(S.join(g[b.type],b.name),O,"utf-8");});let j=await G(r.cwd,h.dependencies||[]),ae=j?`Run this command in the terminal : ${j.command} ${j.args.join(" ")}`:`Cannot find your package manager, install this dependencies: ${h.dependencies?.join(" ")}`;outro(n(`${m[a]} completed successfully
5
- ${ae}`));}catch(h){console.log(h);}});}catch(r){console.log(r),r instanceof ZodError&&o(r.message),r instanceof x&&o(r.format),r instanceof Error&&o(r.message),outro(n("error occured")),process.exit(1);}});var Se="https://whdgur.shop";async function Z(){let t=await fetch(`${Se}/preset.json`);if(!t.ok)throw d({code:"failed_to_fetch",target:"preset.json",statusCode:t.status});let e=await t.json();return z.parse(e)}var Pe=z$1.object({cwd:z$1.string()}),X=new Command().name("init").description("Initialize the project").option("-c, --cwd <cwd>","current working directory, default to process.cwd()",process.cwd()).action(async t=>{let e=spinner();e.start("Initializing");try{let o=Pe.parse({cwd:S.resolve(t.cwd)});await _e(o),e.stop("successfully Initialized!");}catch(o){o instanceof x&&console.error(o.format),e.stop("Failed to initialize"),process.exit(0);}});async function _e(t){let e=t.cwd||await packageDirectory();if(!e)throw d({code:"config_not_found",configFile:"package.json",message:[`cannot find package.json in ${e}`]});let o=P(e);await U(e)&&(await confirm({message:"you already initialize,are you want to overwrite it?"})||process.exit(1));let r=await _(e),s=await F.readFile(S.join(e,r),"utf-8"),c=J(e,o),f="styled-system",{outdir:y,importMap:l}=await T(s);l?f=l:f=K(e,y||"styled-system",o)||".",y&&(f=y);let g=w.schema.parse({utils:`${c}/utils`,components:`${c}/components`,hooks:`${c}/hooks`,styledsystem:f}),m=await Z();return F.writeFile(S.join(e,m.name),JSON.parse(m.file)),V(S.resolve(e,r)),await F.writeFile(S.resolve(e,"components.json"),JSON.stringify(g),"utf-8"),g}var ee={"@radix-ui/react-accessible-icon":"AccessibleIcon","@radix-ui/react-accordion":"Accordion","@radix-ui/react-alert-dialog":"AlertDialog","@radix-ui/react-aspect-ratio":"AspectRatio","@radix-ui/react-avatar":"Avatar","@radix-ui/react-checkbox":"Checkbox","@radix-ui/react-collapsible":"Collapsible","@radix-ui/react-context-menu":"ContextMenu","@radix-ui/react-dialog":"Dialog","@radix-ui/react-direction":"Direction","@radix-ui/react-dropdown-menu":"DropdownMenu","@radix-ui/react-form":"Form","@radix-ui/react-hover-card":"HoverCard","@radix-ui/react-label":"Label","@radix-ui/react-menubar":"Menubar","@radix-ui/react-navigation-menu":"NavigationMenu","@radix-ui/react-popover":"Popover","@radix-ui/react-portal":"Portal","@radix-ui/react-progress":"Progress","@radix-ui/react-radio-group":"RadioGroup","@radix-ui/react-scroll-area":"ScrollArea","@radix-ui/react-select":"Select","@radix-ui/react-separator":"Separator","@radix-ui/react-slider":"Slider","@radix-ui/react-slot":"Slot","@radix-ui/react-switch":"Switch","@radix-ui/react-tabs":"Tabs","@radix-ui/react-toast":"Toast","@radix-ui/react-toggle":"Toggle","@radix-ui/react-toggle-group":"ToggleGroup","@radix-ui/react-toolbar":"Toolbar","@radix-ui/react-tooltip":"Tooltip","@radix-ui/react-visually-hidden":"VisuallyHidden"};function N(t,e,o){return o?t===o:t===e}function te(t){return `import {${t}} from "radix-ui"`}function oe(t){let e=[];return t.getImportDeclarations().forEach(o=>{let n=o.getModuleSpecifierValue();if(!(n in ee))return;let r=ee[n];e.push(n);let s=o.getNamespaceImport();if(s){let f=s.getText();r!==f&&(r+=` as ${f}`),o.replaceWithText(te(r));return}let c=o.getNamedImports();if(c.length){let f=r;c.forEach(y=>{let l=y.getName(),g=y.getAliasNode()?.getText(),m=`${f}.${l}`;for(let u of [SyntaxKind.JsxOpeningElement,SyntaxKind.JsxClosingElement,SyntaxKind.JsxSelfClosingElement])t.getDescendantsOfKind(u).forEach(i=>{let a=i.getTagNameNode().getText();N(a,l,g)&&i.getTagNameNode().replaceWithText(m);});t.getDescendantsOfKind(SyntaxKind.TypeQuery).forEach(u=>{u.getChildren().forEach(i=>{let a=i.getText();N(a,l,g)&&i.replaceWithText(m);});}),t.getDescendantsOfKind(SyntaxKind.ExpressionStatement).forEach(u=>{u.getChildrenOfKind(SyntaxKind.BinaryExpression).forEach(a=>{a.getRight().getChildren().forEach(E=>{let j=E.getText();N(j,l,g)&&E.replaceWithText(m);});});}),t.getDescendantsOfKind(SyntaxKind.VariableDeclaration).forEach(u=>{let i=u.getInitializer();i&&i.getChildren().forEach(a=>{let h=a.getText();N(h,l,g)&&a.replaceWithText(m);});});}),o.replaceWithText(te(f));}}),{source:t.getFullText(),packages:e}}var se=new Command().name("radix-ui-import").action(()=>{intro("find .tsx files...");let t=pe.sync("**/*.tsx",{ignore:["**/node_modules/**"],dot:false}),e=new Project,o="";t.forEach(n=>{let r=e.addSourceFileAtPathIfExists(S.join(process.cwd(),n));if(r)try{let{packages:s}=oe(r);o+=s.join(" "),r.save();}catch(s){log.error(`failed to transform ${n} ${s}`);}}),o.length?`copy this to delete and install new package
4
+ `)}},f=t=>{let e;switch(t.code){case M.config_not_found:e=`error occured while config ${t.configFile}`;break;case M.resolve_path_fail:e=`failed to resolve your path, current ${t.cwd}`;break;case M.failed_to_fetch:e=`failed to fetch ${t.target} [${t.statusCode}]`;break;default:e="error occured";}return new x({...t,message:[...t.message||"",e]})};var b={fileName:"components.json",schema:z.object({utils:z.string(),components:z.string(),hooks:z.string(),styledsystem:z.string()}).strict()},me=["ui","hooks","utils"],fe=z.object({name:z.string(),content:z.string(),type:z.enum(me)}),J=z.object({name:z.string(),dependencies:z.array(z.string()).optional(),files:z.array(fe).optional()});z.object({name:z.string(),dependencies:z.array(z.string()).optional(),file:z.string()});function V(t){try{return $.readJsonSync(C.resolve(t,b.fileName))}catch(e){return f({code:"config_not_found",configFile:b.fileName,message:[e instanceof Error?e.message:""]})}}function I(t){let e=loadConfig(t);if(e.resultType==="failed")throw f({code:"config_not_found",configFile:"tsconfig.json",message:["cannot found tsconfig.json"]});return e}async function W(t){return await $.pathExists(C.join(t,"components.json"))}function G(t,e){let o=["./","./src/","./app/","./src/app"].map(n=>C.resolve(t,n));for(let[n,r]of Object.entries(e.paths)){let s=C.join(t,e.baseUrl||"",r[0].replace(/\/\*$/,""));if(o.some(c=>c===s||c.includes(s)))return n.replace(/\/\*$/,"")}return null}function H(t,e,o){let n=C.join(t,e);for(let[r,s]of Object.entries(o.paths)){let c=s[0].replace(/\/\*$/,"");if(n===C.join(t,o.baseUrl||"",c))return r.replace(/\/\*$/,"")}return null}async function P(t){try{let e=await ue.glob(["panda.config.*"],{cwd:t,deep:3});if(!e.length)throw f({code:"config_not_found",configFile:"panda.config.*",message:["failed to find panda.config file"]});return e[0]}catch(e){throw f({code:"config_not_found",configFile:"panda.config.*",message:[e instanceof Error?e.message:"unknown error occured finding panda.config"]})}}async function T(t,e){let o=createMatchPath(e.absoluteBaseUrl,e.paths)(t,void 0,()=>true);if(!o)throw f({code:"resolve_path_fail",target:t,cwd:process.cwd(),message:["resolve error"]});return o}async function F(t){let e=t.match(/outdir:\s*["']([^"']+)["']/),o=t.match(/importMap:\s*({[^}]+}|["'][^"']+["'])/),n=e?e[1]:null,r=null;if(o){let s=o[1];if(s.startsWith("{")){let c=s.match(/css:\s*["']([^"']+)["']/);r=c?c[1].replace(/\/css$/,""):null;}else r=s.replace(/["']/g,"");}return {outdir:n,importMap:r}}function Y(t,e){let o=t;return [{from:/@utils\//g,to:`${e.utils}/`},{from:/@hooks\//g,to:`${e.hooks}/`},{from:/@styled-system\//g,to:`${e.styledsystem}/`},{from:/@components\//g,to:`${e.components}/`}].forEach(({from:r,to:s})=>{o=o.replace(r,s);}),o}function Q(t){let o=new Project().addSourceFileAtPath(t),n=[{namedImports:[{name:"preset"}],moduleSpecifier:"panda-animation"},{namedImports:[{name:"defaultPreset"}],moduleSpecifier:"./preset"}];o.addImportDeclarations(n);let s=o.getFirstDescendantByKind(SyntaxKind.CallExpression)?.getArguments()[0];s?(s.getProperty("presets")||s.addPropertyAssignment({name:"presets",initializer:'[preset(), "@pandacss/preset-panda", defaultPreset]'}),o.saveSync()):console.warn("Could not modify panda.config.ts. add presets : [preset(), @pandacss/preset-panda, defaultPreset] in your panda.config");}async function Z(t,e){let o=await detect({cwd:t}),n=resolveCommand(o?.agent||"npm","add",e);if(n)return n}var Ee=z.object({components:z.array(z.string()).optional(),cwd:z.string()}),_e="https://whdgur.shop",ee=new Command().name("add").argument("[components...]").option("-c, --cwd <cwd>","current working directory, default to process.cwd()",process.cwd()).action(async(t,e)=>{let o=X.bold.red,n=X.bold.blue;try{let r=Ee.parse({components:t,...e});intro(n("install components..."));let s=b.schema.parse(V(r.cwd)),c=I(r.cwd),m=await P(r.cwd),h=await $.readFile(C.resolve(r.cwd,m),"utf-8"),{outdir:g}=await F(h),y=b.schema.parse({utils:await T(s.utils,c),components:await T(s.components,c),hooks:await T(s.hooks,c),styledsystem:C.join(r.cwd,g||"styled-system")}),p=r.components?.map(i=>i.toLowerCase());if(!p?.length)return;(await Promise.allSettled(p?.map(async i=>{try{let a=await fetch(`${_e}/${i}.json`);if(!a.ok)throw new Error("fetch error",{cause:{code:"failed_to_fetch",target:i,statusCode:a.status,message:[a.statusText]}});return await a.json()}catch(a){if(a instanceof TypeError)throw f({code:"failed_to_fetch",target:i,statusCode:null,message:[o(a.message),o(a.cause?JSON.stringify(a.cause):"cause by typeError")]});if(a instanceof Error)throw f(a.cause)}}))).forEach(async(i,a)=>{if(i.status==="rejected"){i.reason instanceof x&&console.log(o(i.reason.format));return}try{let l=J.parse(i.value),v=C.join(y.components,p[a]);if($.pathExistsSync(v)&&!await confirm({message:`Component ${p[a]} already exists. Do you want to overwrite it?`}))return;l.files?.forEach(k=>{let R=Y(k.content,s);k.type==="ui"?$.outputFileSync(C.join(v,k.name),R):$.outputFileSync(C.join(y[k.type],k.name),R,"utf-8");});let S=await Z(r.cwd,l.dependencies||[]),pe=S?`Run this command in the terminal : ${S.command} ${S.args.join(" ")}`:`Cannot find your package manager, install this dependencies: ${l.dependencies?.join(" ")}`;outro(n(`${p[a]} completed successfully
5
+ ${pe}`));}catch(l){console.log(l);}});}catch(r){console.log(r),r instanceof ZodError&&o(r.message),r instanceof x&&o(r.format),r instanceof Error&&o(r.message),outro(n("error occured")),process.exit(1);}});var te=`
6
+ import { defineSemanticTokens, definePreset } from "@pandacss/dev"
7
+
8
+ const colors = defineSemanticTokens.colors({
9
+ "background": {
10
+ "value": { "base": "{colors.white}", "_dark": "{colors.{{gray}}.950}" }
11
+ },
12
+ "foreground": {
13
+ "value": { "base": "{colors.{{gray}}.950}", "_dark": "{colors.{{gray}}.50}" }
14
+ },
15
+ "card": {
16
+ "DEFAULT": {
17
+ "value": { "base": "{colors.white}", "_dark": "{colors.{{gray}}.900}" }
18
+ },
19
+ "foreground": {
20
+ "value": { "base": "{colors.{{gray}}.950}", "_dark": "{colors.{{gray}}.50}" }
21
+ }
22
+ },
23
+ "popover": {
24
+ "DEFAULT": {
25
+ "value": { "base": "{colors.white}", "_dark": "{colors.{{gray}}.900}" }
26
+ },
27
+ "foreground": {
28
+ "value": { "base": "{colors.{{gray}}.950}", "_dark": "{colors.{{gray}}.50}" }
29
+ }
30
+ },
31
+ "primary": {
32
+ "DEFAULT": {
33
+ "value": { "base": "{colors.{{primary}}.600}", "_dark": "{colors.{{primary}}.400}" }
34
+ },
35
+ "foreground": {
36
+ "value": { "base": "{colors.white}", "_dark": "{colors.{{gray}}.950}" }
37
+ }
38
+ },
39
+ "secondary": {
40
+ "DEFAULT": {
41
+ "value": { "base": "{colors.{{secondary}}.600}", "_dark": "{colors.{{secondary}}.400}" }
42
+ },
43
+ "foreground": {
44
+ "value": { "base": "{colors.white}", "_dark": "{colors.{{gray}}.950}" }
45
+ }
46
+ },
47
+ "muted": {
48
+ "DEFAULT": {
49
+ "value": { "base": "{colors.{{gray}}.100}", "_dark": "{colors.{{gray}}.800}" }
50
+ },
51
+ "foreground": {
52
+ "value": { "base": "{colors.{{gray}}.500}", "_dark": "{colors.{{gray}}.400}" }
53
+ }
54
+ },
55
+ "accent": {
56
+ "DEFAULT": {
57
+ "value": { "base": "{colors.{{secondary}}.100}", "_dark": "{colors.{{secondary}}.800}" }
58
+ },
59
+ "foreground": {
60
+ "value": { "base": "{colors.{{secondary}}.900}", "_dark": "{colors.{{secondary}}.50}" }
61
+ }
62
+ },
63
+ "destructive": {
64
+ "DEFAULT": {
65
+ "value": { "base": "{colors.red.500}", "_dark": "{colors.red.400}" }
66
+ },
67
+ "foreground": {
68
+ "value": { "base": "{colors.white}", "_dark": "{colors.{{gray}}.950}" }
69
+ }
70
+ },
71
+ "border": {
72
+ "value": { "base": "{colors.{{gray}}.200}", "_dark": "{colors.{{gray}}.800}" }
73
+ },
74
+ "input": {
75
+ "value": { "base": "{colors.{{gray}}.200}", "_dark": "{colors.{{gray}}.800}" }
76
+ },
77
+ "ring": {
78
+ "value": { "base": "{colors.{{primary}}.500}", "_dark": "{colors.{{primary}}.400}" }
79
+ }})
80
+
81
+ const borders = defineSemanticTokens.borders({
82
+ base: { value: "1px solid {colors.border}" },
83
+ input: { value: "1px solid {colors.input}" },
84
+ primary: { value: "1px solid {colors.primary}" },
85
+ destructive: { value: "1px solid {colors.destructive}" },
86
+ })
87
+
88
+ export const defaultPreset = definePreset({
89
+ name: "default",
90
+ globalCss: {
91
+ html: {
92
+ background: 'background',
93
+ color: 'foreground'
94
+ },
95
+ },
96
+ theme: {
97
+ extend: {
98
+ semanticTokens: {
99
+ colors,
100
+ borders,
101
+
102
+ },
103
+ },
104
+ },
105
+ })
106
+
107
+
108
+ `;var _=["rose","pink","fuchsia","purple","violet","indigo","blue","sky","cyan","teal","emerald","green","lime","yellow","amber","orange","red","neutral","stone","zinc","gray","slate"],O=["neutral","stone","zinc","gray","slate"],oe=z.object({primary:z.enum(_),secondary:z.enum(_),gray:z.enum(O)}),re=t=>je.compile(te)(t);var $e=z.object({cwd:z.string(),default:z.boolean()}),se=new Command().name("init").description("Initialize the project").option("-c, --cwd <cwd>","current working directory, default to process.cwd()",process.cwd()).option("-d, --default","use default color",false).action(async t=>{let e=spinner();e.start("Initializing");try{let o=$e.parse({cwd:C.resolve(t.cwd),default:t.default});await Ae(o),e.stop("successfully Initialized!");}catch(o){o instanceof x&&console.error(o.format),o instanceof Error&&console.log(o.message,o.cause),e.stop("Failed to initialize"),process.exit(0);}});async function Ae(t){let e=t.cwd||await packageDirectory();if(!e)throw f({code:"config_not_found",configFile:"package.json",message:[`cannot find package.json in ${e}`]});let o=I(e);await W(e)&&(await confirm({message:"you already initialize,are you want to overwrite it?"})||process.exit(1));let r=await P(e),s=await $.readFile(C.join(e,r),"utf-8"),c=G(e,o),m="styled-system",{outdir:h,importMap:g}=await F(s);g?m=g:m=H(e,h||"styled-system",o)||".",h&&(m=h);let y=b.schema.parse({utils:`${c}/utils`,components:`${c}/components`,hooks:`${c}/hooks`,styledsystem:m});$.writeFile(C.resolve(e,"components.json"),JSON.stringify(y),"utf-8");let p="neutral",u="slate",i="gray";t.default||(p=await select({message:"Pick primary color",initialValue:"neutral",options:_.map(l=>({value:l,label:l}))}),u=await select({message:"Pick secondary color",initialValue:"slate",options:_.map(l=>({value:l,label:l}))}),i=await select({message:"Pick gray color",initialValue:"gray",options:O.map(l=>({value:l,label:l}))}));let a=re(oe.parse({primary:p,secondary:u,gray:i}));return $.writeFile(C.join(e,"preset.ts"),a),Q(C.resolve(e,r)),y}var ae={"@radix-ui/react-accessible-icon":"AccessibleIcon","@radix-ui/react-accordion":"Accordion","@radix-ui/react-alert-dialog":"AlertDialog","@radix-ui/react-aspect-ratio":"AspectRatio","@radix-ui/react-avatar":"Avatar","@radix-ui/react-checkbox":"Checkbox","@radix-ui/react-collapsible":"Collapsible","@radix-ui/react-context-menu":"ContextMenu","@radix-ui/react-dialog":"Dialog","@radix-ui/react-direction":"Direction","@radix-ui/react-dropdown-menu":"DropdownMenu","@radix-ui/react-form":"Form","@radix-ui/react-hover-card":"HoverCard","@radix-ui/react-label":"Label","@radix-ui/react-menubar":"Menubar","@radix-ui/react-navigation-menu":"NavigationMenu","@radix-ui/react-popover":"Popover","@radix-ui/react-portal":"Portal","@radix-ui/react-progress":"Progress","@radix-ui/react-radio-group":"RadioGroup","@radix-ui/react-scroll-area":"ScrollArea","@radix-ui/react-select":"Select","@radix-ui/react-separator":"Separator","@radix-ui/react-slider":"Slider","@radix-ui/react-slot":"Slot","@radix-ui/react-switch":"Switch","@radix-ui/react-tabs":"Tabs","@radix-ui/react-toast":"Toast","@radix-ui/react-toggle":"Toggle","@radix-ui/react-toggle-group":"ToggleGroup","@radix-ui/react-toolbar":"Toolbar","@radix-ui/react-tooltip":"Tooltip","@radix-ui/react-visually-hidden":"VisuallyHidden"};function N(t,e,o){return o?t===o:t===e}function ne(t){return `import {${t}} from "radix-ui"`}function ie(t){let e=[];return t.getImportDeclarations().forEach(o=>{let n=o.getModuleSpecifierValue();if(!(n in ae))return;let r=ae[n];e.push(n);let s=o.getNamespaceImport();if(s){let m=s.getText();r!==m&&(r+=` as ${m}`),o.replaceWithText(ne(r));return}let c=o.getNamedImports();if(c.length){let m=r;c.forEach(h=>{let g=h.getName(),y=h.getAliasNode()?.getText(),p=`${m}.${g}`;for(let u of [SyntaxKind.JsxOpeningElement,SyntaxKind.JsxClosingElement,SyntaxKind.JsxSelfClosingElement])t.getDescendantsOfKind(u).forEach(i=>{let a=i.getTagNameNode().getText();N(a,g,y)&&i.getTagNameNode().replaceWithText(p);});t.getDescendantsOfKind(SyntaxKind.TypeQuery).forEach(u=>{u.getChildren().forEach(i=>{let a=i.getText();N(a,g,y)&&i.replaceWithText(p);});}),t.getDescendantsOfKind(SyntaxKind.ExpressionStatement).forEach(u=>{u.getChildrenOfKind(SyntaxKind.BinaryExpression).forEach(a=>{a.getRight().getChildren().forEach(v=>{let S=v.getText();N(S,g,y)&&v.replaceWithText(p);});});}),t.getDescendantsOfKind(SyntaxKind.VariableDeclaration).forEach(u=>{let i=u.getInitializer();i&&i.getChildren().forEach(a=>{let l=a.getText();N(l,g,y)&&a.replaceWithText(p);});});}),o.replaceWithText(ne(m));}}),{source:t.getFullText(),packages:e}}var le=new Command().name("radix-ui-import").action(()=>{intro("find .tsx files...");let t=ue.sync("**/*.tsx",{ignore:["**/node_modules/**"],dot:false}),e=new Project,o="";t.forEach(n=>{let r=e.addSourceFileAtPathIfExists(C.join(process.cwd(),n));if(r)try{let{packages:s}=ie(r);o+=s.join(" "),r.save();}catch(s){log.error(`failed to transform ${n} ${s}`);}}),o.length?`copy this to delete and install new package
6
109
  <your package manager's delete command> ${o}
7
- <your package manager's install command> ${Y.bgGreen("radix-ui")}`.split(`
8
- `).forEach(log.step):outro("no transform occured");});var ne={version:"1.5.0"};async function Re(){new Command().name("design-system").version(ne.version).addCommand(X).addCommand(Q).addCommand(se).parse();}Re();
110
+ <your package manager's install command> ${X.bgGreen("radix-ui")}`.split(`
111
+ `).forEach(log.step):outro("no transform occured");});var de={version:"1.6.0"};async function Je(){new Command().name("design-system").version(de.version).addCommand(se).addCommand(ee).addCommand(le).parse();}Je();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jongh/cli",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "",
5
5
  "bin": "./dist/index.js",
6
6
  "type": "module",
@@ -31,6 +31,7 @@
31
31
  "execa": "^9.5.2",
32
32
  "fast-glob": "^3.3.2",
33
33
  "fs-extra": "^11.2.0",
34
+ "handlebars": "^4.7.8",
34
35
  "package-manager-detector": "^0.2.8",
35
36
  "pkg-dir": "^8.0.0",
36
37
  "ts-morph": "^25.0.0",
@@ -46,8 +47,8 @@
46
47
  "ts-node": "^10.9.2",
47
48
  "tsup": "^8.3.0",
48
49
  "tsx": "^4.19.2",
49
- "@jongh/tsconfig": "0.0.0",
50
- "@jongh/eslint": "0.0.0"
50
+ "@jongh/eslint": "0.0.0",
51
+ "@jongh/tsconfig": "0.0.0"
51
52
  },
52
53
  "scripts": {
53
54
  "build": "tsup && npx tsx ./src/build-script.ts --all",