smart-registry 0.18.0-canary.1 → 0.18.0-canary.3
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/README.md +3 -3
- package/dist/bin/index.js +8 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ Simplify your `registry.json` by removing properties like `registryDependencies`
|
|
|
41
41
|
Or delete the `registry.json` file entirely. No changes will be made to the generated `public/r/dialog.json` file. Smart, right?
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
rm registry.json
|
|
44
|
+
rm registry.json && npx smart-registry
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
<details><summary>Generated public/r/dialog.json</summary><br/>
|
|
@@ -123,7 +123,7 @@ Usage:
|
|
|
123
123
|
$ smart-registry [files/directories] ... [options]
|
|
124
124
|
|
|
125
125
|
Arguments:
|
|
126
|
-
files/directories files or directories to
|
|
126
|
+
files/directories files or directories to extend the registry (optional)
|
|
127
127
|
|
|
128
128
|
Options:
|
|
129
129
|
-o, --output <path> destination directory for json files (default: "./public/r")
|
|
@@ -132,7 +132,7 @@ Options:
|
|
|
132
132
|
-h, --help display help
|
|
133
133
|
|
|
134
134
|
Author:
|
|
135
|
-
|
|
135
|
+
Neeraj Dalal <admin@nrjdalal.com> (https://nrjdalal.com)
|
|
136
136
|
```
|
|
137
137
|
|
|
138
138
|
e.g. to generate the registry in the `json` directory from some file and directory at the working directory (`apps/www`).
|
package/dist/bin/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var re=Object.defineProperty,se=Object.defineProperties;var ie=Object.getOwnPropertyDescriptors;var M=Object.getOwnPropertySymbols;var ne=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable;var z=(s,t,r)=>t in s?re(s,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[t]=r,h=(s,t)=>{for(var r in t||(t={}))ne.call(t,r)&&z(s,r,t[r]);if(M)for(var r of M(t))oe.call(t,r)&&z(s,r,t[r]);return s},P=(s,t)=>se(s,ie(t));import I from"node:fs";import x from"node:path";import{parseArgs as he}from"node:util";import $,{existsSync as C}from"node:fs";import{readFile as pe}from"node:fs/promises";import W from"node:path";import{detect as ae}from"@antfu/ni";async function B(s,{withFallback:t}={withFallback:!1}){let r=await ae({programmatic:!0,cwd:s});if(r==="yarn@berry")return"yarn";if(r==="pnpm@6")return"pnpm";if(r==="bun")return"bun";if(r==="deno")return"deno";if(!t)return r!=null?r:"npm";let
|
|
3
|
-
`).filter(a=>a.trim()&&!a.startsWith("#")).map(a=>a.replace(/^\//,"").replace(/^/,"**/")):[],
|
|
4
|
-
Codemod ran successfully. Please run the command again without the --codemod-radix flag to generate the registry.`)};var L=["registry/**",["blocks/**","components/**","helpers/**","hooks/**","lib/**","ui/**","utils/**"],["src/blocks/**","src/components/**","src/helpers/**","src/hooks/**","src/lib/**","src/ui/**","src/utils/**"]],S={default:["$schema","name","homepage","items"],items:{default:["$schema","name","type","description","title","author","dependencies","devDependencies","registryDependencies","files","tailwind","cssVars","meta","docs","categories"],type:{default:["registry:ui","registry:hook","registry:lib","registry:theme","registry:page","registry:file","registry:component","registry:block"]},files:{default:["type","target","content","path"],type:{default:["registry:block","registry:component","registry:file","registry:page","registry:theme","registry:lib","registry:hook","registry:ui"]}}}};import A from"node:fs";import E from"node:path";import le from"strip-json-comments";var T=async s=>{let t={},r=["tsconfig.json","jsconfig.json"].find(
|
|
2
|
+
var re=Object.defineProperty,se=Object.defineProperties;var ie=Object.getOwnPropertyDescriptors;var M=Object.getOwnPropertySymbols;var ne=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable;var z=(s,t,r)=>t in s?re(s,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[t]=r,h=(s,t)=>{for(var r in t||(t={}))ne.call(t,r)&&z(s,r,t[r]);if(M)for(var r of M(t))oe.call(t,r)&&z(s,r,t[r]);return s},P=(s,t)=>se(s,ie(t));import I from"node:fs";import x from"node:path";import{parseArgs as he}from"node:util";import $,{existsSync as C}from"node:fs";import{readFile as pe}from"node:fs/promises";import W from"node:path";import{detect as ae}from"@antfu/ni";async function B(s,{withFallback:t}={withFallback:!1}){let r=await ae({programmatic:!0,cwd:s});if(r==="yarn@berry")return"yarn";if(r==="pnpm@6")return"pnpm";if(r==="bun")return"bun";if(r==="deno")return"deno";if(!t)return r!=null?r:"npm";let i=process.env.npm_config_user_agent||"";return i.startsWith("yarn")?"yarn":i.startsWith("pnpm")?"pnpm":i.startsWith("bun")?"bun":"npm"}import{execa as V}from"execa";import{glob as ce}from"tinyglobby";var q=async({cwd:s})=>{let t=W.resolve(s,".gitignore"),r=C(t)?(await pe(t,"utf8")).split(`
|
|
3
|
+
`).filter(a=>a.trim()&&!a.startsWith("#")).map(a=>a.replace(/^\//,"").replace(/^/,"**/")):[],i=await ce(["**/*.ts","**/*.tsx","**/*.js","**/*.jsx"],{cwd:s,ignore:r}),e=new Set,n=i.map(async a=>{let f=W.resolve(s,a),l=await $.promises.readFile(f,"utf-8"),p=l.replace(/import \* as (\w+Primitive) from "@radix-ui\/react-([\w-]+)"/g,(m,g,u)=>(e.add(`@radix-ui/react-${u}`),`import { ${g.replace("Primitive","")} as ${g} } from "radix-ui"`)).replace(/Sheet\s+as\s+SheetPrimitive/g,"Dialog as SheetPrimitive");return/import\s+\{\s+Slot\s+\}\s+from\s+"@radix-ui\/react-slot"/.test(l)&&(p=p.replace(/import\s+\{\s+Slot\s+\}\s+from\s+"@radix-ui\/react-slot"/,()=>(e.add("@radix-ui/react-slot"),"import { Slot as SlotPrimitive } from 'radix-ui'")).replace(/typeof\s+Slot\b/g,"typeof SlotPrimitive.Slot").replace(/\?\s+Slot\s+:/g,"? SlotPrimitive.Slot :").replace(/<Slot\b/g,"<SlotPrimitive.Slot")),$.promises.writeFile(f,p,"utf-8")});await Promise.all(n);let o=W.resolve(s,"registry.json");if(C(o)){let a=await $.promises.readFile(o,"utf-8"),f=JSON.parse(a),l=m=>{for(let g in m)g==="dependencies"||g==="devDependencies"?m[g]=Array.from(new Set(m[g].map(u=>e.has(u)?"radix-ui":u))):typeof m[g]=="object"&&m[g]!==null&&l(m[g])};l(f);let p=JSON.stringify(f,null,2);await $.promises.writeFile(o,p,"utf-8")}let c=await B(s);e.size&&await V(c,[c==="npm"?"uninstall":"remove",...Array.from(e)],{cwd:s}),await V(c,[c==="npm"?"install":"add","radix-ui"],{cwd:s}),console.log(`
|
|
4
|
+
Codemod ran successfully. Please run the command again without the --codemod-radix flag to generate the registry.`)};var L=["registry/**",["blocks/**","components/**","helpers/**","hooks/**","lib/**","ui/**","utils/**"],["src/blocks/**","src/components/**","src/helpers/**","src/hooks/**","src/lib/**","src/ui/**","src/utils/**"]],S={default:["$schema","name","homepage","items"],items:{default:["$schema","name","type","description","title","author","dependencies","devDependencies","registryDependencies","files","tailwind","cssVars","meta","docs","categories"],type:{default:["registry:ui","registry:hook","registry:lib","registry:theme","registry:page","registry:file","registry:component","registry:block"]},files:{default:["type","target","content","path"],type:{default:["registry:block","registry:component","registry:file","registry:page","registry:theme","registry:lib","registry:hook","registry:ui"]}}}};import A from"node:fs";import E from"node:path";import le from"strip-json-comments";var T=async s=>{let t={},r=["tsconfig.json","jsconfig.json"].find(i=>A.existsSync(E.resolve(s,i)));if(r){let i=await A.promises.readFile(E.resolve(s,r),"utf8"),{compilerOptions:e}=JSON.parse(le(i,{trailingCommas:!0}));e.paths&&(t=Object.entries(e.paths).reduce((n,[o,[c]])=>(o.endsWith("*")&&c.endsWith("*")&&(n[o.replace(/\*$/,"")]=c.replace(/\*$/,"")),n),{}))}return t["@/"]||(t["@/"]=A.existsSync(E.resolve(s,"src"))?"./src/":"./"),t=Object.entries(t).sort(([i],[e])=>e.length-i.length).reduce((i,[e,n])=>(i[e]=n,i),{}),t};import U from"node:fs";import me from"node:path";var G=async s=>{let t=me.resolve(s,"registry.json"),r={$schema:"https://ui.shadcn.com/schema/registry.json",name:"nrjdalal",homepage:"https://nrjdalal.com",items:[]};return U.existsSync(t)&&(r=h({},JSON.parse(await U.promises.readFile(t,"utf8")))),r};import H from"node:fs";import K from"node:path";import{glob as de}from"tinyglobby";var w=async({cwd:s,patterns:t=["**",".**"],ignore:r=[]})=>{t=Array.isArray(t)?t:[t],t=t.map(e=>e.replace(/^'|'$/g,"").replace(/^"|"$/g,"").trim()),t=[...t,...t.flatMap(e=>e.includes("*")?[]:[e+".**",e+"**"])],t=t.filter(Boolean),r=typeof r=="string"?r.split(",").map(e=>e.trim()):r,r=r.filter(Boolean);let i=await de(t,{cwd:s,ignore:r.filter(e=>!t.includes(e))});for(let e of t)if(!i.includes(e)&&!e.endsWith("**")&&!e.endsWith(".**"))try{let n=K.resolve(s,e),o=await H.promises.stat(n);if(o.isDirectory()){let c=(await H.promises.readdir(n)).map(a=>K.resolve(e,a));i.push(...c)}else o.isFile()&&i.push(e)}catch(n){continue}return[...new Set(i)]};var Q=async({cwd:s,patterns:t,ignore:r})=>{let i=[];for(let e of L)if(i=await w({cwd:s,patterns:e,ignore:r}),i.length)break;if(t.length&&(i=i.concat(await w({cwd:s,patterns:t,ignore:r}))),!i.length)throw new Error("No files/directories found to build the registry from!");return i};import X from"node:fs";import Y from"node:path";var j={imports:/import\s+type\s+[\s\S]+?from\s+['"][^'"]+['"]|import\s+['"][^'"]+['"]|import\s+[\s\S]+?from\s+['"][^'"]+['"]/g};var J=async({cwd:s,aliases:t,filepaths:r,resolved:i})=>{i=i!=null?i:new Set;let e={dependencies:[],devDependencies:[],files:[],content:{}};for(let n of r){if(i.has(n))continue;i.add(n),e.files.push(n),e.content[n]||(e.content[n]=await X.promises.readFile(Y.resolve(s,n),"utf8"));let{dependencies:o,devDependencies:c,files:a,transformations:f}=await Z({cwd:s,aliases:t,filepath:n,content:e.content[n]});e.content[n]=e.content[n].replace(j.imports,l=>{let p=l.match(/['"](.*)['"]/);return p&&f[p[1]]?l.replace(p[1],f[p[1]].import):l}),a.forEach(l=>e.files.push(l)),o.forEach(l=>e.dependencies.push(l)),c.forEach(l=>e.devDependencies.push(l))}for(let n of e.files){let{dependencies:o,devDependencies:c,files:a,content:f}=await J({cwd:s,aliases:t,filepaths:[n],resolved:i});e.content[n]||(e.content[n]=f[n]||await X.promises.readFile(Y.resolve(s,n),"utf8")),a.forEach(l=>e.files.push(l)),o.forEach(l=>e.dependencies.push(l)),c.forEach(l=>e.devDependencies.push(l))}return e.dependencies=[...new Set(e.dependencies)].sort(),e.devDependencies=[...new Set(e.devDependencies)].sort(),e.files=[...new Set(e.files)].sort(),e};import ee from"node:fs";import D from"node:path";import ge from"node:path";var y=({cwd:s,aliases:t,filepath:r})=>{var o;let i=r;for(let c in t)r=r.replace(t[c].replaceAll("./","").replaceAll("../",""),"");let e=r.startsWith("registry/")?r.replace(/^registry\//,"").replace(/^(?:([^\/]*)\/)?blocks\//,(c,a)=>`blocks/${a?a+"/":""}`).replace(/^(?:([^\/]*)\/)?charts\//,(c,a)=>`charts/${a?a+"/":""}`).replace(/^(?:([^\/]*)\/)?components\/ui\//,(c,a)=>`${a?a+"/":""}ui/`).replace(/^(?:([^\/]*)\/)?components\//,(c,a)=>`components/${a?a+"/":""}`).replace(/^(?:([^\/]*)\/)?hooks\//,(c,a)=>`hooks/${a?a+"/":""}`).replace(/^(?:([^\/]*)\/)?lib\//,(c,a)=>`lib/${a?a+"/":""}`).replace(/^(?:([^\/]*)\/)?ui\//,(c,a)=>`components/ui/${a?a+"/":""}`).replace(/\/default\//,"/").replace(/^default\//,"").replace(/\.\.\//g,"").replace(/\.\//g,"").replace(/^charts\//,"components/charts/"):r.replace(/\/default\//,"/").replace(/^default\//,"").replace(/\.\.\//g,"").replace(/\.\//g,""),n=e.toLowerCase().replace(/^(blocks|components\/charts|components\/ui|components|hooks|lib|utils|helpers)\//,"").replace(/\/(blocks|components\/charts|components\/ui|components|hooks|lib|utils|helpers)\//,"/").replace(/\.[^\/.]+$/,"").replace(/\/index$/,"").replace(/\/page$/,"").replace(/\/route$/,"").replace(/\/\[.*\]$/,"").replace(/(\b\w+)\b\/\1\b/g,"$1").replace(/\//g,"-");return{type:e.endsWith("page.tsx")?"registry:page":((o=e.match(/^(blocks|components\/charts|components\/ui|components|hooks|lib|utils|helpers)/))==null?void 0:o[1].replace("blocks","registry:block").replace("components/charts","registry:component").replace("components/ui","registry:ui").replace("components","registry:component").replace("hooks","registry:hook").replace("lib","registry:lib").replace("utils","registry:lib").replace("helpers","registry:lib"))||"registry:file",name:n,import:"@/"+e.replace(s+ge.sep,"").replace(/\.[^/.]+$/,"").replace(/\/index$/,""),target:i.split("/").length>1?e:`~/${e}`,path:r}};var fe=async({cwd:s,current:t,aliases:r})=>{t=t.replace(new RegExp(`^${Object.keys(r).find(e=>t.startsWith(e.replace(/\.\//g,"").replace(/\.\.\//g,"")))}`),r[Object.keys(r).find(e=>t.startsWith(e.replace(/\.\//g,"").replace(/\.\.\//g,"")))]),t=t.replace(/\.\//g,"").replace(/\.\.\//g,"");let i=await w({cwd:s,patterns:t});return t=i.find(e=>e.startsWith(t+"."))||i.find(e=>e.startsWith(t+"/index"))||t,t.replace(s+"/","")},ue=async({cwd:s,filepath:t,current:r})=>{r=D.relative(s,D.resolve(s,D.dirname(t),r));let i=await w({cwd:s,patterns:r});return r=i.find(e=>e.startsWith(r+"."))||i.find(e=>e.startsWith(r+"/index"))||r,r.replace(s+"/","")},Z=async({cwd:s,aliases:t,filepath:r,content:i})=>{let e={dependencies:[],devDependencies:[],files:[],transformations:{}},n=i.match(j.imports)||[];if(!n.length)return e;n=n.map(o=>{var c;return(c=o.match(/['"](.*)['"]/))==null?void 0:c[1].replace(/\/\//g,"/")});for(let o of n){let c=o;if(Object.keys(t).some(f=>o.startsWith(f.replace(/\.\//g,"").replace(/\.\.\//g,""))))o=await fe({cwd:s,aliases:t,current:o}),e.transformations[c]=y({cwd:s,aliases:t,filepath:o}),e.files.push(o);else if(o.startsWith("."))o=await ue({cwd:s,filepath:r,current:o}),e.transformations[c]=y({cwd:s,aliases:t,filepath:o}),e.files.push(o);else{let f=D.resolve(s,"package.json"),l={};if(ee.existsSync(f)){let p=JSON.parse(await ee.promises.readFile(f,"utf8"));l=h({},p.devDependencies)}if(o.startsWith("@")){let p=o.split("/").slice(0,2).join("/");l[p]?e.devDependencies.push(p):e.dependencies.push(p)}else{let p=o.split("/")[0];l[p]?e.devDependencies.push(p):e.dependencies.push(p)}}}return e};var R="smart-registry",N="0.18.0-canary.3";var F={name:"Neeraj Dalal",email:"admin@nrjdalal.com",url:"https://nrjdalal.com"};var te=`Version:
|
|
5
5
|
${R}@${N}
|
|
6
6
|
|
|
7
7
|
Usage:
|
|
8
8
|
$ ${R} [files/directories] ... [options]
|
|
9
9
|
|
|
10
10
|
Arguments:
|
|
11
|
-
files/directories files or directories to
|
|
11
|
+
files/directories files or directories to extend the registry (optional)
|
|
12
12
|
|
|
13
13
|
Options:
|
|
14
14
|
-o, --output <path> destination directory for json files (default: "./public/r")
|
|
@@ -17,8 +17,8 @@ Options:
|
|
|
17
17
|
-h, --help display help
|
|
18
18
|
|
|
19
19
|
Author:
|
|
20
|
-
${F.name} <${F.email}> (${F.url})`,ye=s=>{try{return he(s)}catch(t){throw new Error(`Error parsing arguments: ${t.message}`)}},xe=async()=>{var s,t,r;try{let{positionals:
|
|
21
|
-
`),v.files.forEach(d=>delete d.content),l.items.push(v)}catch(m){f.push(p+": "+m.message);continue}l.items.sort((p,m)=>p.name.localeCompare(m.name)).sort((p,m)=>{let g=S.items.type.default;return g.indexOf(p.type)-g.indexOf(m.type)}),await I.promises.writeFile(x.resolve(
|
|
22
|
-
`),f.length&&(console.log(),f.forEach(p=>console.error(`\x1B[31m- ${p}\x1B[0m`))),process.exit(0)}catch(
|
|
23
|
-
${
|
|
20
|
+
${F.name} <${F.email}> (${F.url})`,ye=s=>{try{return he(s)}catch(t){throw new Error(`Error parsing arguments: ${t.message}`)}},xe=async()=>{var s,t,r;try{let{positionals:i,values:e}=ye({allowPositionals:!0,options:{output:{type:"string",short:"o",default:"public/r"},cwd:{type:"string",short:"c"},ignore:{type:"string",short:"i",default:""},"codemod-radix":{type:"boolean"},help:{type:"boolean",short:"h"},version:{type:"boolean",short:"v"}}});i.length||(e.version&&(console.log(`${R}@${N}`),process.exit(0)),e.help&&(console.log(te),process.exit(0)));let n=x.resolve((s=e.cwd)!=null?s:process.cwd());e["codemod-radix"]&&(await q({cwd:n}),process.exit(0));let o=await T(n),c=await G(n),a=await Q({cwd:n,patterns:i,ignore:e.ignore}),f=[],l=P(h({},c),{items:[]});for(let p of a)try{let m=((t=c.items)==null?void 0:t.find(d=>d.name===y({cwd:n,aliases:o,filepath:p}).name))||{},g=await J({cwd:n,aliases:o,filepaths:[p,...((r=m==null?void 0:m.files)==null?void 0:r.map(d=>d.path))||[]]}),u={dependencies:[...new Set([...g.dependencies,...(m==null?void 0:m.dependencies)||[]])].sort(),devDependencies:[...new Set([...g.devDependencies,...(m==null?void 0:m.devDependencies)||[]])].sort(),registryDependencies:[...new Set([...(m==null?void 0:m.registryDependencies)||[]])].sort()},v=h(P(h(h(h({$schema:"https://ui.shadcn.com/schema/registry-item.json",name:y({cwd:n,aliases:o,filepath:p}).name,type:y({cwd:n,aliases:o,filepath:p}).type||"registry:file"},u.dependencies.length&&{dependencies:u.dependencies}),u.devDependencies.length&&{devDependencies:u.devDependencies}),u.registryDependencies.length&&{registryDependencies:u.registryDependencies}),{files:g.files.map(d=>({type:y({cwd:n,aliases:o,filepath:d}).type||"registry:file",target:y({cwd:n,aliases:o,filepath:d}).target||d,content:g.content[d],path:d})).sort((d,b)=>{if(d.path===p)return-1;if(b.path===p)return 1;let k=S.items.files.type.default;return k.indexOf(d.type)-k.indexOf(b.type)})}),Object.fromEntries(Object.entries(m).filter(([d])=>!["$schema","name","type","dependencies","devDependencies","registryDependencies","files"].includes(d))));v=Object.keys(v).sort((d,b)=>{let k=S.items.default;return k.indexOf(d)-k.indexOf(b)}).reduce((d,b)=>(d[b]=v[b],d),{});let O=x.resolve(n,e.output,v.name+".json");console.log(`- ${x.relative(process.cwd(),x.resolve(n,p)).padEnd(Math.max(...a.map(d=>x.relative(process.cwd(),x.resolve(n,d)).length))+2," ")} ${g.dependencies.length?"\u{1F4E6}"+String(g.dependencies.length).padEnd(2," "):" "} ${g.files.length-1?"\u{1F4C4}"+String(g.files.length).padEnd(2," "):" "} ${x.relative(process.cwd(),O)}`),await I.promises.mkdir(x.dirname(O),{recursive:!0}),await I.promises.writeFile(O,JSON.stringify(v,null,2)+`
|
|
21
|
+
`),v.files.forEach(d=>delete d.content),l.items.push(v)}catch(m){f.push(p+": "+m.message);continue}l.items.sort((p,m)=>p.name.localeCompare(m.name)).sort((p,m)=>{let g=S.items.type.default;return g.indexOf(p.type)-g.indexOf(m.type)}),await I.promises.writeFile(x.resolve(n,e.output,"registry.json"),JSON.stringify(l,null,2)+`
|
|
22
|
+
`),f.length&&(console.log(),f.forEach(p=>console.error(`\x1B[31m- ${p}\x1B[0m`))),process.exit(0)}catch(i){console.error(te),console.error(`
|
|
23
|
+
${i.message}
|
|
24
24
|
`),process.exit(1)}};xe();
|
package/package.json
CHANGED