@veluai/velu 0.1.7 → 0.1.9

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