@veluai/velu 0.1.5 → 0.1.6
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/cli.js +8 -8
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var ke=Object.defineProperty;var
|
|
3
|
-
`,"utf-8");let n=await
|
|
4
|
-
`)}var Ne,
|
|
2
|
+
var ke=Object.defineProperty;var w=(e,t)=>()=>(e&&(t=e(e=0)),t);var z=(e,t)=>{for(var o in t)ke(e,o,{get:t[o],enumerable:!0})};var G={};z(G,{initProject:()=>Ae});import k from"node:fs/promises";import $ from"node:path";import{fileURLToPath as $e}from"node:url";async function Ae(e,t){try{if((await k.readdir(e)).length>0)throw new Error(`Directory "${t}" already exists and is not empty. Choose a different name or remove the folder first.`)}catch(s){if(s.code!=="ENOENT")throw s}await k.mkdir(e,{recursive:!0}),await k.cp(Te,e,{recursive:!0});let o=$.join(e,"velu.json"),r=JSON.parse(await k.readFile(o,"utf-8"));r.name=t,await k.writeFile(o,JSON.stringify(r,null,2)+`
|
|
3
|
+
`,"utf-8");let n=await V(e);console.log(`[velu] created ${t}/`);for(let s of n)console.log(` ${s}`);console.log(""),console.log("Next steps:"),console.log(` cd ${t}`),console.log(" velu dev")}async function V(e,t=e,o=[]){let r=await k.readdir(e,{withFileTypes:!0});for(let n of r){let s=$.join(e,n.name);n.isDirectory()?await V(s,t,o):o.push($.relative(t,s).split($.sep).join("/"))}return o.sort()}var Pe,Te,B=w(()=>{Pe=$.dirname($e(import.meta.url)),Te=$.resolve(Pe,"..","templates","starter")});import{visit as Ee}from"unist-util-visit";import{toString as Fe}from"mdast-util-to-string";import Le from"github-slugger";import{valueToEstree as je}from"estree-util-value-to-estree";function I(){return e=>{let t=new Le,o=[];Ee(e,"heading",i=>{let l=Fe(i);o.push({depth:i.depth,id:t.slug(l),label:l})});let r={children:[]},n=[{node:r,depth:0}];for(let i of o){for(;n.length>1&&n[n.length-1].depth>=i.depth;)n.pop();let l={id:i.id,label:i.label},a=n[n.length-1].node;a.children||(a.children=[]),a.children.push(l),n.push({node:l,depth:i.depth})}let s=r.children;e.children.unshift({type:"mdxjsEsm",value:"",data:{estree:{type:"Program",sourceType:"module",body:[{type:"ExportNamedDeclaration",specifiers:[],declaration:{type:"VariableDeclaration",kind:"const",declarations:[{type:"VariableDeclarator",id:{type:"Identifier",name:"toc"},init:je(s)}]}}]}}})}}var q=w(()=>{});import Oe from"node:fs/promises";import J from"node:path";function N(e={},t){let o=e.colors?.primary??Ie;return{name:e.name??t??"docs",colors:{primary:o,light:e.colors?.light??o,dark:e.colors?.dark??o},favicon:e.favicon??null,font:{family:e.font?.family??Ne},navigation:e.navigation??null}}async function D(e){let t=J.join(e,"velu.json"),o;try{o=await Oe.readFile(t,"utf-8")}catch(n){throw n.code==="ENOENT"?new Error(`No velu.json found in ${e}. Run \`velu init <name>\` to scaffold one.`):n}let r;try{r=JSON.parse(o)}catch(n){throw new Error(`velu.json is not valid JSON: ${n.message}`)}return N(r,J.basename(e))}function H(e){let{colors:t,font:o}=e;return[":root:root {",` --accent-color: ${t.light};`,` --font-sans: "${o.family}", sans-serif;`,"}",':root:root[data-theme="dark"] {',` --accent-color: ${t.dark};`,"}"].join(`
|
|
4
|
+
`)}var Ie,Ne,W=w(()=>{Ie="#dc143c",Ne="Google Sans Flex"});import Re from"github-slugger";import Ue from"iso-639-1";function _e(e){let t=String(e).toLowerCase();return Ue.getNativeName(t)||e}function j(e){return new Re().slug(String(e??""))}function Me(e){let t=String(e).replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);return t[t.length-1]==="index"&&t.pop(),"/"+t.join("/")}function Y(e){let t={kind:"root",children:T(e??{})};return Q(t.children),t}function T(e){let t=Array.isArray(e.anchors)?e.anchors.map(qe):[];if(Array.isArray(e.products))return[...t,...e.products.map(ze)];if(Array.isArray(e.versions))return[...t,...e.versions.map(Ve)];if(Array.isArray(e.languages))return[...t,...e.languages.map(Ge)];if(Array.isArray(e.tabs))return[...t,...e.tabs.map(Be)];let o=[...t];return Array.isArray(e.groups)&&o.push(...e.groups.map(K)),Array.isArray(e.pages)&&o.push(...e.pages.map(X)),o}function ze(e){return{kind:"product",label:e.name??e.product,slug:j(e.product),icon:e.icon,color:e.color,default:!!e.default,children:T(e)}}function Ve(e){return{kind:"version",label:e.version,slug:j(e.version),default:!!e.default,children:T(e)}}function Ge(e){let t=String(e.language);return{kind:"language",code:t,label:_e(t),slug:j(t),default:!!e.default,children:T(e)}}function Be(e){return{kind:"tab",label:e.tab,slug:j(e.tab),icon:e.icon,href:e.href,children:T(e)}}function qe(e){return{kind:"anchor",label:e.anchor,icon:e.icon,href:e.href,color:e.color}}function K(e){let t=(e.pages??[]).map(X);return e.root&&t.unshift({kind:"page",pagePath:e.root}),{kind:"group",label:e.group,icon:e.icon,expanded:!!e.expanded,root:e.root,children:t}}function X(e){return typeof e=="string"?{kind:"page",pagePath:e}:K(e)}function Q(e){for(let t of Ce){let o=e.filter(r=>r.kind===t);o.length&&!o.some(r=>r.default)&&(o[0].default=!0)}for(let t of e)t.children&&Q(t.children)}function Z(e){let t=[],o=(r,n,s)=>{if(r.kind==="page"){t.push({pagePath:r.pagePath,url:Je(r.pagePath,n),ctx:{...n},ancestors:s,node:r});return}let i=n;r.kind==="product"?i={...n,product:r.default?null:r.slug}:r.kind==="version"?i={...n,version:r.default?null:r.slug}:r.kind==="language"&&(i={...n,language:r.default?null:r.slug});let l=r.kind==="root"?s:[...s,r];for(let a of r.children??[])o(a,i,l)};return o(e,{product:null,version:null,language:null},[]),t}function Je(e,t){let o=[t.product,t.version,t.language].filter(Boolean),r=Me(e).split("/").filter(Boolean);return"/"+[...o,...r].join("/")}var Ce,R=w(()=>{Ce=["product","version","language"]});import De from"node:fs";import ee from"node:path";function te(e,t){let o=[],r=[],n=new Set;for(let s of Z(e)){if(n.has(s.url)){o.push(`duplicate URL "${s.url}" (page "${s.pagePath}") \u2014 keeping the first occurrence`);continue}n.add(s.url);let i=s.pagePath.replace(/^\/+|\/+$/g,""),l=ee.join(t,...i.split("/"))+".mdx",a=De.existsSync(l);a||o.push(`page "${s.pagePath}" \u2192 ${ee.relative(t,l)} not found`),r.push({pagePath:s.pagePath,url:s.url,fileAbsPath:l,exists:a})}return{pageEntries:r,warnings:o}}var re=w(()=>{R()});import He from"node:fs";import oe from"node:path";function ie(e){return{name:"velu-site",resolveId(t){return t===se?ne:null},load(t){return t!==ne?null:We(e)}}}function We(e){let t={};try{t=JSON.parse(He.readFileSync(oe.join(e,"velu.json"),"utf-8"))}catch{}let o=Y(t.navigation??{}),{pageEntries:r,warnings:n}=te(o,e);for(let a of n)console.warn(`[velu] nav: ${a}`);let s=[],i=[],l=0;for(let a of r)if(a.exists){let E=JSON.stringify(a.fileAbsPath.split(oe.sep).join("/")),S=`__p${l++}`;s.push(`import * as ${S} from ${E};`),i.push(` ${JSON.stringify(a.url)}: { Component: ${S}.default, frontmatter: ${S}.frontmatter, toc: ${S}.toc },`)}else i.push(` ${JSON.stringify(a.url)}: { missing: true },`);return["// AUTO-GENERATED by vite-plugin-velu-site. Do not edit.",s.join(`
|
|
5
5
|
`),"","export const pages = {",i.join(`
|
|
6
6
|
`),"};",`export const navigation = ${JSON.stringify(o)};`,""].join(`
|
|
7
|
-
`)}var
|
|
8
|
-
`)}async function mt(e){console.log(`[velu-cli] dev server for: ${e}`);let t=!!process.env.VELU_PROFILE,o=performance.now(),r=(
|
|
9
|
-
${
|
|
10
|
-
</style>`,we=ft.has(n.font.family)?"":dt(n.font.family),xe=n.favicon?`<link rel="icon" href="${
|
|
11
|
-
`),be=
|
|
7
|
+
`)}var se,ne,ae=w(()=>{R();re();se="virtual:velu-site",ne="\0"+se});var me={};z(me,{startDevServer:()=>mt});import le from"node:fs/promises";import ce from"node:fs";import Ye from"node:http";import g from"node:path";import{fileURLToPath as Ke}from"node:url";import{createRequire as Xe}from"node:module";import Qe from"chokidar";import Ze from"express";import et from"@tailwindcss/vite";import tt from"@vitejs/plugin-react";import rt from"@mdx-js/rollup";import ot from"remark-frontmatter";import nt from"remark-mdx-frontmatter";import st from"remark-gfm";import it from"rehype-slug";import{createServer as at,searchForWorkspaceRoot as lt}from"vite";function dt(e){return`<link rel="stylesheet" href="${`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e).replace(/%20/g,"+")}:wght@300;400;500;600;700&display=swap`}" />`}async function fe(e){try{return await D(e)}catch(t){return console.warn(`[velu] ${t.message} Using defaults.`),N({},g.basename(e))}}async function pe(e,t){let o=await e.moduleGraph.getModuleByUrl(t,!0),r=new Map,n=new Set;async function s(i){if(!(!i||n.has(i.url))){if(n.add(i.url),i.id&&ut.test(i.id)){let l=i.url.includes("?")?"&":"?",a=await e.transformRequest(`${i.url}${l}direct`);a?.code&&r.set(i.url,a.code)}for(let l of i.importedModules)await s(l)}}return await s(o),[...r.values()].join(`
|
|
8
|
+
`)}async function mt(e){console.log(`[velu-cli] dev server for: ${e}`);let t=!!process.env.VELU_PROFILE,o=performance.now(),r=(m,c)=>t&&console.log(`[velu-profile] ${m}: ${(performance.now()-c).toFixed(0)}ms`),n=await fe(e),s=e;try{s=ce.realpathSync(e)}catch{}let l=Xe(import.meta.url).resolve("@mdx-js/react"),a=g.resolve(A,"runtime","velu-ui"),E=ce.existsSync(a)?a:g.resolve(A,"..","velu-ui","src"),S=[{find:"@mdx-js/react",replacement:l},{find:/^velu-ui$/,replacement:g.join(E,"index.js")},{find:/^velu-ui\//,replacement:E+"/"}],C=Number(process.env.PORT)||5173,F=Ze(),_=Ye.createServer(F),f=await at({root:A,appType:"custom",logLevel:t?"info":"warn",plugins:[ie(e),rt({remarkPlugins:[ot,nt,st,I],rehypePlugins:[it],providerImportSource:"@mdx-js/react"}),tt(),et()],cacheDir:g.resolve(e,".velu","vite-cache"),optimizeDeps:{include:["react","react-dom","react-dom/client","react-router-dom","@mdx-js/react","lucide-react","prism-react-renderer","iso-639-1","github-slugger"],esbuildOptions:{loader:{".mdx":"jsx"}}},resolve:{alias:S,dedupe:["react","react-dom","@mdx-js/react"]},server:{middlewareMode:!0,fs:{allow:[lt(A),e,s]},hmr:{server:_}}});r("vite server created",o),F.use(f.middlewares),F.get(ue,async(m,c,h)=>{if(!n.favicon)return c.status(404).end();let u=g.resolve(e,n.favicon.replace(/^\//,""));c.sendFile(u,v=>{v&&c.status(404).end()})}),F.use("*",async(m,c,h)=>{let u=m.originalUrl,v=performance.now();try{let p=performance.now(),y=await le.readFile(de,"utf-8");y=await f.transformIndexHtml(u,y),r(`transformIndexHtml ${u}`,p);let b="/src/runtime/server-entry.jsx";p=performance.now();let{render:L}=await f.ssrLoadModule(b);r(`ssrLoadModule ${u} (1st req includes dep pre-bundle)`,p),p=performance.now();let d=await L(u);r(`render ${u}`,p),p=performance.now();let P=await pe(f,b);r(`collectSsrCss ${u}`,p);let O=P?`<style data-velu-ssr>${P}</style>`:"",ye=`<style data-velu-config>
|
|
9
|
+
${H(n)}
|
|
10
|
+
</style>`,we=ft.has(n.font.family)?"":dt(n.font.family),xe=n.favicon?`<link rel="icon" href="${ue}" />`:"",Se=[O,ye,we,xe].filter(Boolean).join(`
|
|
11
|
+
`),be=y.replace("<!--app-title-->",pt(n.name)).replace("<!--app-head-->",Se).replace("<!--app-html-->",d);c.status(200).set({"Content-Type":"text/html"}).end(be),r(`TOTAL ${u}`,v)}catch(p){f.ssrFixStacktrace(p),h(p)}}),Qe.watch(e,{ignoreInitial:!0,ignored:/(^|[\\/])(node_modules|\.git|\.velu)([\\/]|$)/,awaitWriteFinish:{stabilityThreshold:100,pollInterval:20}}).on("all",async(m,c)=>{console.log(`[velu-cli] content ${m}: ${g.relative(e,c)}`);let h=g.basename(c)==="velu.json",u=c.endsWith(".mdx"),v=h||u&&(m==="add"||m==="unlink");if(h&&(n=await fe(e)),v)f.moduleGraph.invalidateAll();else if(u){let p=c.split(g.sep).join("/"),y=f.moduleGraph.getModulesByFile(p);if(y)for(let b of y)f.moduleGraph.invalidateModule(b)}f.ws.send({type:"full-reload"})});async function M(m){let c=new Set,h=12,u=0,v=[],p=()=>u<h?(u+=1,Promise.resolve()):new Promise(d=>v.push(d)).then(()=>{u+=1}),y=()=>{u-=1,v.shift()?.()},b=d=>/[\\/]\.velu[\\/]vite-cache[\\/]|[\\/]deps[\\/]/.test(d)||/[\\/]node_modules[\\/]/.test(d)&&!/velu-ui/.test(d);async function L(d){if(!(!d||c.has(d)||b(d))){c.add(d);try{await p();try{await f.transformRequest(d,{ssr:!1})}finally{y()}let P=await f.moduleGraph.getModuleByUrl(d,!1);P?.importedModules?.size&&await Promise.all([...P.importedModules].map(O=>L(O.url)))}catch{}}}return await L(m),c.size}_.listen(C,async()=>{let m=performance.now(),c=0;try{let{render:h}=await f.ssrLoadModule("/src/runtime/server-entry.jsx");await M("/src/runtime/client-entry.jsx"),typeof f.waitForRequestsIdle=="function"&&await f.waitForRequestsIdle();let[u]=await Promise.all([M("/src/runtime/client-entry.jsx"),h("/"),f.transformIndexHtml("/",await le.readFile(de,"utf-8")),pe(f,"/src/runtime/server-entry.jsx")]);c=u}catch(h){t&&console.log("[velu-profile] warmup error:",h?.message)}r(`cold-start warm-up (${c} client modules)`,m),console.log(`[velu-cli] ready \u2192 http://localhost:${C}`)})}var ct,ut,ft,ue,pt,A,de,ge=w(()=>{q();W();ae();ct=g.dirname(Ke(import.meta.url)),ut=/\.(css|less|sass|scss|styl|stylus|pcss|postcss)(\?|$)/,ft=new Set(["Google Sans Flex","Google Sans Code","Outfit"]),ue="/@velu-favicon",pt=e=>String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");A=g.resolve(ct,".."),de=g.resolve(A,"src","template.html")});import he from"node:path";import x from"node:process";import{readFileSync as gt}from"node:fs";var[,,ve,U]=x.argv;function ht(){try{return JSON.parse(gt(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}async function vt(){switch(ve){case"--version":case"-v":case"version":{console.log(ht());break}case"init":{U||(console.error("Usage: velu init <project-name>"),x.exit(1));let e=U,t=he.resolve(x.cwd(),e),{initProject:o}=await Promise.resolve().then(()=>(B(),G));await o(t,e);break}case"dev":{let e=he.resolve(x.cwd(),U??"."),{startDevServer:t}=await Promise.resolve().then(()=>(ge(),me));await t(e);break}default:console.log("Usage:"),console.log(" velu init <project-name> scaffold a new docs project"),console.log(" velu dev [dir] start the dev preview server"),x.exit(ve?1:0)}}vt().catch(e=>{console.error(x.env.VELU_DEBUG?e:`Error: ${e.message}`),x.exit(1)});
|