@jongh/cli 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ "use strict";var _e=Object.create;var H=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var $e=Object.getPrototypeOf,Ae=Object.prototype.hasOwnProperty;var Ne=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Fe(e))!Ae.call(t,r)&&r!==o&&H(t,r,{get:()=>e[r],enumerable:!(n=Te(e,r))||n.enumerable});return t};var h=(t,e,o)=>(o=t!=null?_e($e(t)):{},Ne(e||!t||!t.__esModule?H(o,"default",{value:t,enumerable:!0}):o,t));var ke=require("commander");var w=require("@clack/prompts"),K=h(require("chalk"),1),ce=require("commander"),W=require("execa"),T=h(require("fs-extra"),1),pe=require("package-manager-detector"),S=h(require("path"),1),k=require("zod");var Y=t=>{let e={};for(let o of t)e[o]=o;return e},L=Y(["config_not_found","resolve_path_fail","failed_to_fetch"]),Ve=Y(["components.json","tsconfig.json","panda.config.*","package.json"]),v=class extends Error{issue;constructor(e){super(),this.name="NewError",this.issue=e}get format(){return this.issue.code+`
3
+ `+this.issue.message?.join(`
4
+ `)}},g=t=>{let e;switch(t.code){case L.config_not_found:e=`error occured while config ${t.configFile}`;break;case L.resolve_path_fail:e=`failed to resolve your path, current ${t.cwd}`;break;case L.failed_to_fetch:e=`failed to fetch ${t.target} [${t.statusCode}]`;break;default:e="error occured"}return new v({...t,message:[...t.message||"",e]})};var q=h(require("fast-glob"),1),B=h(require("fs-extra"),1),J=h(require("path"),1),U=require("tsconfig-paths");var p=require("zod"),b={fileName:"components.json",schema:p.z.object({utils:p.z.string(),components:p.z.string(),hooks:p.z.string(),styledsystem:p.z.string()}).strict()},Oe=["ui","hooks","utils"],De=p.z.object({name:p.z.string(),content:p.z.string(),type:p.z.enum(Oe)}),Q=p.z.object({name:p.z.string(),dependencies:p.z.array(p.z.string()).optional(),files:p.z.array(De).optional()}),Z=p.z.object({name:p.z.string(),dependencies:p.z.array(p.z.string()).optional(),file:p.z.string()});function X(t){try{return B.default.readJsonSync(J.default.resolve(t,b.fileName))}catch(e){return g({code:"config_not_found",configFile:b.fileName,message:[e instanceof Error?e.message:""]})}}async function ee(t){let e=(0,U.loadConfig)(t);if(e.resultType==="failed")throw g({code:"config_not_found",configFile:"tsconfig.json",message:["cannot found tsconfig.json"]});return e}async function te(t){return await B.default.pathExists(J.default.join(t,"components.json"))}function oe(t,e){let o=(0,U.loadConfig)(t);if(o?.resultType==="failed"||!Object.entries(o?.paths).length)return{baseAlias:null,styledSystemAlias:null};let n=null,r=null;for(let[s,i]of Object.entries(o.paths))i[0].includes(e)&&(r=s.replace(/\/\*$/,"")),(i.includes("./*")||i.includes("./src/*")||i.includes("./app/*"))&&(n=s.replace(/\/\*$/,""));return n||(n=Object.keys(o?.paths)?.[0].replace(/\/\*$/,"")??null),r||(r="."),{baseAlias:n,styledSystemAlias:r}}async function A(t){try{let e=await q.default.glob(["panda.config.*"],{cwd:t,deep:3});if(!e.length)throw g({code:"config_not_found",configFile:"panda.config.*",message:["failed to find panda.config file"]});return e[0]}catch(e){throw g({code:"config_not_found",configFile:"panda.config.*",message:[e instanceof Error?e.message:"unknown error occured finding panda.config"]})}}async function N(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 i=s.match(/css:\s*["']([^"']+)["']/);r=i?i[1].replace(/\/css$/,""):null}else r=s.replace(/["']/g,"")}return{outdir:n,importMap:r}}var re=require("tsconfig-paths");async function O(t,e){let o=(0,re.createMatchPath)(e.absoluteBaseUrl,e.paths)(t,void 0,()=>!0);if(!o)throw g({code:"resolve_path_fail",target:t,cwd:process.cwd(),message:["resolve error"]});return o}var j=require("ts-morph");function se(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 ne(t,e,o){let r=new j.Project().addSourceFileAtPath(t),s=r.getFirstDescendant(d=>j.Node.isCallExpression(d)&&d.getExpression().getText()==="definePreset");if(!s)return;let i=s?.getFirstDescendant(d=>j.Node.isPropertyAssignment(d)&&d.getName()==="recipes");if(!i)return;let l=i.getFirstDescendantByKind(j.SyntaxKind.ObjectLiteralExpression);if(!l)return;r.getImportDeclarations().some(d=>{let f=d.getModuleSpecifierValue(),m=d.getNamedImports();return f===o&&m.some(u=>u.getName()===`${e}Recipe`)})||(r.addImportDeclaration({moduleSpecifier:o,namedImports:[{name:`${e}Recipe`}]}),l.addPropertyAssignment({name:e,initializer:`${e}Recipe`})),r.saveSync()}var ae=require("package-manager-detector");async function ie(t){let e=await(0,ae.detect)({cwd:t});if(!e)throw new Error("package manager not found");return e.name==="pnpm"?"pnpm exec":e.name==="bun"?"bunx":e.name==="yarn"?"yarn dlx":"npx"}var Me=k.z.object({components:k.z.array(k.z.string()).optional(),cwd:k.z.string()}),ze="https://whdgur.shop",de=new ce.Command().name("add").argument("[components...]").option("-c, --cwd <cwd>","current working directory, default to process.cwd()",process.cwd()).action(async(t,e)=>{let o=K.default.bold.red,n=K.default.bold.blue;try{let r=Me.parse({components:t,...e});(0,w.intro)(n("install components..."));let s=b.schema.parse(X(r.cwd)),i=await ee(r.cwd),l=await A(r.cwd),y=await T.default.readFile(S.default.resolve(r.cwd,l),"utf-8"),{outdir:d}=await N(y),f=b.schema.parse({utils:await O(s.utils,i),components:await O(s.components,i),hooks:await O(s.hooks,i),styledsystem:S.default.join(r.cwd,d||"styled-system")}),m=r.components?.map(c=>c.toLowerCase());if(!m?.length)return;(await Promise.allSettled(m?.map(async c=>{try{let a=await fetch(`${ze}/${c}.json`);if(!a.ok)throw new Error("fetch error",{cause:{code:"failed_to_fetch",target:c,statusCode:a.status,message:[a.statusText]}});return await a.json()}catch(a){if(a instanceof TypeError)throw g({code:"failed_to_fetch",target:c,statusCode:null,message:[o(a.message),o(a.cause?JSON.stringify(a.cause):"cause by typeError")]});if(a instanceof Error)throw g(a.cause)}}))).forEach(async(c,a)=>{if(c.status==="rejected"){c.reason instanceof v&&console.log(o(c.reason.format));return}try{let x=Q.parse(c.value),_=S.default.join(f.components,m[a]);if(T.default.pathExistsSync(_)&&!await(0,w.confirm)({message:`Component ${m[a]} already exists. Do you want to overwrite it?`}))return;x.files?.forEach(C=>{let G=se(C.content,s);C.name==="recipe.ts"&&ne(S.default.join(r.cwd,"preset.ts"),`${m[a]}`,S.default.join(s.components,`${m[a]}`,"recipe")),C.type==="ui"?T.default.outputFileSync(S.default.join(_,C.name),G):T.default.outputFileSync(S.default.join(f[C.type],C.name),G,"utf-8")});let F=await(0,pe.detect)({cwd:r.cwd}),$=F?F.name:"";$||($=await(0,w.select)({message:"cannot find package manager, select",options:[{value:"npm",label:"npm"},{value:"pnpm",label:"pnpm"},{value:"yarn",label:"yarn"}]})),x.dependencies?.length&&await(0,W.execa)($,[$==="npm"?"install":"add",...x.dependencies]);let Ie=await ie(r.cwd),[ve,...Pe]=Ie.split(" ");(0,W.execa)(ve,[...Pe,"panda","codegen"]),(0,w.outro)(n(`${m[a]} completed successfully`))}catch(x){console.log(x)}})}catch(r){console.log(r),r instanceof k.ZodError&&o(r.message),r instanceof v&&o(r.format),r instanceof Error&&o(r.message),(0,w.outro)(n("error occured")),process.exit(1)}});var M=require("@clack/prompts"),le=require("commander"),D=h(require("fs-extra"),1),P=h(require("path"),1),fe=require("pkg-dir"),z=require("ts-morph"),V=require("zod");var Re="https://whdgur.shop";async function me(){let t=await fetch(`${Re}/preset.json`);if(!t.ok)throw g({code:"failed_to_fetch",target:"preset.json",statusCode:t.status});let e=await t.json();return Z.parse(e)}var Le=V.z.object({cwd:V.z.string()}),ge=new le.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=(0,M.spinner)();e.start("Initializing");try{let o=Le.parse({cwd:P.default.resolve(t.cwd)});await Be(o),e.stop("Initialized")}catch(o){o instanceof Error&&console.error(o.message),e.stop("Failed to initialize"),process.exit(0)}});async function Be(t){let e=t.cwd||await(0,fe.packageDirectory)();if(!e)throw new Error("Failed to find package root");await te(e)&&(await(0,M.confirm)({message:"you already initialize,are you want to overwrite it?"})||process.exit(1));let n=await A(e),r=await D.default.readFile(P.default.join(e,n),"utf-8"),s="styled-system",{outdir:i,importMap:l}=await N(r);i&&(s=i);let{baseAlias:y,styledSystemAlias:d}=oe(e,s);if(!y||!d)throw new Error("Failed to find tsconfig alias");l?s=l:s=d;let f={utils:`${y}/utils`,components:`${y}/components`,hooks:`${y}/hooks`,styledsystem:s};b.schema.parse(f);let m=await me();return D.default.writeFile(P.default.join(e,m.name),JSON.parse(m.file)),Je(P.default.resolve(e,n)),await D.default.writeFile(P.default.resolve(e,"components.json"),JSON.stringify(f),"utf-8"),f}function Je(t){let o=new z.Project().addSourceFileAtPath(t),n=[{namedImports:[{name:"preset"}],moduleSpecifier:"panda-animation"},{namedImports:[{name:"defaultPreset"}],moduleSpecifier:"./preset"}];o.addImportDeclarations(n);let s=o.getFirstDescendantByKind(z.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")}var I=require("@clack/prompts"),xe=h(require("chalk"),1),we=require("commander"),Ce=h(require("fast-glob"),1),be=h(require("path"),1),Se=require("ts-morph");var E=require("ts-morph"),ue={"@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 R(t,e,o){return o?t===o:t===e}function he(t){return`import {${t}} from "radix-ui"`}function ye(t){let e=[];return t.getImportDeclarations().forEach(o=>{let n=o.getModuleSpecifierValue();if(!(n in ue))return;let r=ue[n];e.push(n);let s=o.getNamespaceImport();if(s){let l=s.getText();r!==l&&(r+=` as ${l}`),o.replaceWithText(he(r));return}let i=o.getNamedImports();if(i.length){let l=r;i.forEach(y=>{let d=y.getName(),f=y.getAliasNode()?.getText(),m=`${l}.${d}`;for(let u of[E.SyntaxKind.JsxOpeningElement,E.SyntaxKind.JsxClosingElement,E.SyntaxKind.JsxSelfClosingElement])t.getDescendantsOfKind(u).forEach(c=>{let a=c.getTagNameNode().getText();R(a,d,f)&&c.getTagNameNode().replaceWithText(m)});t.getDescendantsOfKind(E.SyntaxKind.TypeQuery).forEach(u=>{u.getChildren().forEach(c=>{let a=c.getText();R(a,d,f)&&c.replaceWithText(m)})}),t.getDescendantsOfKind(E.SyntaxKind.ExpressionStatement).forEach(u=>{u.getChildrenOfKind(E.SyntaxKind.BinaryExpression).forEach(a=>{a.getRight().getChildren().forEach(_=>{let F=_.getText();R(F,d,f)&&_.replaceWithText(m)})})}),t.getDescendantsOfKind(E.SyntaxKind.VariableDeclaration).forEach(u=>{let c=u.getInitializer();c&&c.getChildren().forEach(a=>{let x=a.getText();R(x,d,f)&&a.replaceWithText(m)})})}),o.replaceWithText(he(l))}}),{source:t.getFullText(),packages:e}}var Ee=new we.Command().name("radix-ui-import").action(()=>{(0,I.intro)("find .tsx files...");let t=Ce.default.sync("**/*.tsx",{ignore:["**/node_modules/**"],dot:!1}),e=new Se.Project,o="";t.forEach(n=>{let r=e.addSourceFileAtPathIfExists(be.default.join(process.cwd(),n));if(r)try{let{packages:s}=ye(r);o+=s.join(" "),r.save()}catch(s){I.log.error(`failed to transform ${n} ${s}`)}}),o.length?`copy this to delete and install new package
5
+ <your package manager's delete command> ${o}
6
+ <your package manager's install command> ${xe.default.bgGreen("radix-ui")}`.split(`
7
+ `).forEach(I.log.step):(0,I.outro)("no transform occured")});var je={name:"@jongh/cli",version:"1.3.0",description:"",bin:"./dist/index.js",type:"module",scripts:{build:"tsup && npx tsx ./src/build-script.ts --all","build:cli":"tsup","build:registry":"npx tsx ./src/build-script.ts --all",release:"pnpm publish -no-git-checks",lint:"eslint --max-warnings 0 --fix","check-type":"tsc --noEmit",test:"vitest run"},keywords:[],author:"",license:"ISC",publishConfig:{access:"public"},files:["dist","package.json"],dependencies:{"@babel/generator":"^7.26.3","@babel/parser":"^7.26.3","@babel/traverse":"^7.26.4","@clack/prompts":"^0.7.0","@effect/platform":"^0.69.13","@effect/schema":"^0.75.5","@types/babel__traverse":"^7.20.6",chalk:"^5.4.1",commander:"^13.0.0",effect:"^3.10.8",execa:"^9.5.2","fast-glob":"^3.3.2","fs-extra":"^11.2.0","package-manager-detector":"^0.2.8","pkg-dir":"^8.0.0","ts-morph":"^25.0.0","tsconfig-paths":"^4.2.0",yargs:"^17.7.2",zod:"^3.24.1"},devDependencies:{"@types/babel__generator":"^7.6.8","@types/fs-extra":"^11.0.4","@types/node":"^22.8.6","@types/yargs":"^17.0.33","ts-node":"^10.9.2",tsup:"^8.3.0",tsx:"^4.19.2","@jongh/tsconfig":"workspace:*","@jongh/eslint":"workspace:*"}};async function Ke(){new ke.Command().name("design-system").version(je.version||"0.0.0").addCommand(ge).addCommand(de).addCommand(Ee).parse()}Ke();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jongh/cli",
3
- "version": "1.1.1",
3
+ "version": "1.3.0",
4
4
  "description": "",
5
5
  "bin": "./dist/index.js",
6
6
  "type": "module",
@@ -22,12 +22,18 @@
22
22
  "@effect/platform": "^0.69.13",
23
23
  "@effect/schema": "^0.75.5",
24
24
  "@types/babel__traverse": "^7.20.6",
25
+ "chalk": "^5.4.1",
26
+ "commander": "^13.0.0",
25
27
  "effect": "^3.10.8",
28
+ "execa": "^9.5.2",
26
29
  "fast-glob": "^3.3.2",
27
30
  "fs-extra": "^11.2.0",
31
+ "package-manager-detector": "^0.2.8",
28
32
  "pkg-dir": "^8.0.0",
33
+ "ts-morph": "^25.0.0",
29
34
  "tsconfig-paths": "^4.2.0",
30
- "yargs": "^17.7.2"
35
+ "yargs": "^17.7.2",
36
+ "zod": "^3.24.1"
31
37
  },
32
38
  "devDependencies": {
33
39
  "@types/babel__generator": "^7.6.8",
@@ -36,13 +42,17 @@
36
42
  "@types/yargs": "^17.0.33",
37
43
  "ts-node": "^10.9.2",
38
44
  "tsup": "^8.3.0",
39
- "tsx": "^4.19.2"
45
+ "tsx": "^4.19.2",
46
+ "@jongh/tsconfig": "0.0.0",
47
+ "@jongh/eslint": "0.0.0"
40
48
  },
41
49
  "scripts": {
42
- "build": "tsup",
50
+ "build": "tsup && npx tsx ./src/build-script.ts --all",
51
+ "build:cli": "tsup",
52
+ "build:registry": "npx tsx ./src/build-script.ts --all",
43
53
  "release": "pnpm publish -no-git-checks",
44
- "lint": "eslint . --max-warnings 0",
54
+ "lint": "eslint --max-warnings 0 --fix",
45
55
  "check-type": "tsc --noEmit",
46
- "test": "vitest"
56
+ "test": "vitest run"
47
57
  }
48
58
  }
package/dist/index.d.ts DELETED
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
package/dist/index.js DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import x from"yargs";import{hideBin as A}from"yargs/helpers";import*as r from"@clack/prompts";import{packageDirectory as j}from"pkg-dir";import u from"fs-extra";import h from"path";import d from"fast-glob";import v from"fs-extra";import{loadConfig as g}from"tsconfig-paths";function a(t){let i=g(t);if(i?.resultType==="failed"||!Object.entries(i?.paths).length)return{baseAlias:null,styledSystemAlias:null};let s=null,n=null;for(let[o,e]of Object.entries(i.paths))e.includes("./styled-system/*")&&(n=o.replace(/\/\*$/,"")),(e.includes("./*")||e.includes("./src/*")||e.includes("./app/*"))&&(s=o.replace(/\/\*$/,""));return s||(s=Object.keys(i?.paths)?.[0].replace(/\/\*$/,"")??null),n||(n="."),{baseAlias:s,styledSystemAlias:n}}async function c(t){let i=await d.glob(["panda.config.*"],{cwd:t});return i.length?i[0]:null}var p="@pandacss/dev";async function l(t){let i=JSON.parse(u.readFileSync(h.join(t,"package.json"),"utf-8")),s=Object.keys(i.devDependencies).includes(p)||Object.keys(i.dependencies).includes(p),n=await c(t);return s&&!!n}import y from"path";import w from"fs-extra";async function f(t){return await w.pathExists(y.join(t,"components.json"))}import k from"fs-extra";import b from"path";async function m(){let t=await j();if(!t)throw new Error("Failed to find package root");if(await f(t))throw new Error("Already initialized");if(await l(t))throw new Error("install pandacss");let{baseAlias:n,styledSystemAlias:o}=a(t);if(!n||!o)throw new Error("Failed to find tsconfig alias");let e={utils:`${n}/utils`,components:`${n}/components`,hooks:`${n}/hooks`,styledsystem:o};await k.writeFile(b.resolve(t,"components.json"),JSON.stringify(e),"utf-8")}var I=async()=>x(A(process.argv)).command("init","initialize the project",()=>{},async()=>{r.note("Initializing project ...");try{await m()}catch(t){t instanceof Error&&r.cancel("Failed to initialize project: "+t.message)}});I();