@veluai/velu 0.2.19 → 0.2.23
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 +52 -35
- package/package.json +64 -64
- package/runtime/velu-ui/components/ChangelogFilters.jsx +75 -0
- package/runtime/velu-ui/components/Chatbot.jsx +125 -38
- package/runtime/velu-ui/components/ContextMenu.jsx +45 -16
- package/runtime/velu-ui/components/Update.jsx +92 -0
- package/runtime/velu-ui/components/changelog-filters.css +43 -0
- package/runtime/velu-ui/components/chatbot.css +66 -1
- package/runtime/velu-ui/components/context-menu.css +26 -0
- package/runtime/velu-ui/components/page-feedback.css +20 -0
- package/runtime/velu-ui/components/update.css +110 -0
- package/runtime/velu-ui/index.js +2 -0
- package/runtime/velu-ui/lib/docs-assistant.js +26 -3
- package/runtime/velu-ui/lib/pagefind.js +4 -1
- package/runtime/velu-ui/mdx-components.jsx +2 -0
- package/runtime/velu-ui/styles.css +2 -0
- package/schema/velu.schema.json +0 -4
- package/src/lib/known-components.js +1 -0
- package/src/runtime/App.jsx +49 -6
- package/src/runtime/client-entry.jsx +6 -1
- package/src/runtime/server-entry.jsx +9 -1
- package/templates/starter/index.mdx +4 -4
- package/templates/starter/velu.json +0 -1
package/dist/cli.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`,"utf-8");let o=await
|
|
4
|
-
New velu version available: ${e} \u2192 ${t}. Updating\u2026`),!
|
|
5
|
-
`);let r
|
|
6
|
-
`)}function ne(e){if(!e||typeof e!="object")return null;let t=[];if(e.socials&&typeof e.socials=="object")for(let[r,o]of Object.entries(e.socials))typeof o!="string"||!o.trim()||t.push({kind:Kn[r]??r,href:o.trim()});let n=Array.isArray(e.links)?e.links.filter(r=>r&&typeof r=="object").map(r=>({title:(r.header??r.title??"").trim(),items:(Array.isArray(r.items)?r.items:[]).filter(o=>o&&o.label).map(o=>({label:o.label,href:o.href??"#"}))})).filter(r=>r.title||r.items.length):[];return!t.length&&!n.length?null:{socials:t,links:n}}function Ve(e){return/^(https?:)?\/\//.test(e)||/^(mailto|tel):/.test(e)}function re(e){if(!e||typeof e!="object")return null;let t=(Array.isArray(e.links)?e.links:[]).filter(o=>o&&typeof o.href=="string"&&o.href.trim()).map(o=>({label:o.label??"",href:o.href.trim(),icon:o.icon??null,external:Ve(o.href.trim())})),n=null,r=e.primary;if(r&&typeof r=="object"&&typeof r.href=="string"&&r.href.trim()){let o=r.href.trim();n=r.type==="github"?{kind:"github",label:r.label??"GitHub",href:o,external:Ve(o)}:{kind:"button",label:r.label??"",href:o,external:Ve(o)}}return!t.length&&!n?null:{links:t,primary:n}}function He(e){if(e==null)return{options:[...jt],display:"header"};if(typeof e!="object")return{options:[],display:"header"};let t=e.display==="toc"?"toc":"header",n=Array.isArray(e.options)?e.options:jt,r=[];for(let o of n)typeof o=="string"?Zn.has(o)&&r.push(o):o&&typeof o=="object"&&o.title&&o.href&&r.push({title:String(o.title),description:o.description?String(o.description):"",href:String(o.href),icon:typeof o.icon=="string"?o.icon:void 0});return{options:r,display:t}}function R(e){if(!e||typeof e!="object")return{server:null,proxy:!0,languages:void 0};let t=e.playground||{};return{server:typeof e.server=="string"?e.server.trim():null,proxy:t.proxy!==!1&&t.display!=="none",languages:Array.isArray(e.examples?.languages)?e.examples.languages:void 0}}function oe(e){if(!e||typeof e!="object")return null;let t=typeof e.apiBase=="string"&&e.apiBase.trim()?e.apiBase.trim().replace(/\/+$/,""):null,n=typeof e.host=="string"&&e.host.trim()?e.host.trim():null,r=Array.isArray(e.suggestions)?e.suggestions.filter(o=>typeof o=="string"&&o.trim()).map(o=>o.trim()).slice(0,6):[];return!t&&!r.length?null:{apiBase:t,host:n,suggestions:r}}var Kn,Zn,jt,be=A(()=>{Kn={twitter:"x","x-twitter":"x"};Zn=new Set(["copy","assistant","view","download-pdf","download-spec","chatgpt","claude","perplexity","grok","aistudio","devin","windsurf","mcp","add-mcp","cursor","vscode","devin-mcp"]),jt=["copy","view","chatgpt","claude"]});import Qn from"node:fs/promises";import qe from"node:path";function Ot(e){if(!e.favicon)return null;let t=qe.extname(e.favicon).toLowerCase();return{url:De+t,type:nr[t]||""}}function ie(e){if(typeof e=="string"){let t=e.trim();return t?{light:t,dark:t,href:"/"}:null}if(e&&typeof e=="object"){let t=(e.light??e.dark)?.trim?.(),n=(e.dark??e.light)?.trim?.();return!t||!n?null:{light:t,dark:n,href:e.href?.trim?.()||"/"}}return null}function rr(e){return!e||typeof e!="object"?{metatags:{},indexing:"navigable"}:{metatags:e.metatags&&typeof e.metatags=="object"?e.metatags:{},indexing:e.indexing==="all"?"all":"navigable"}}function Ye(e={},t){let n=e.colors?.primary??er;return{name:e.name??t??"docs",url:typeof e.url=="string"&&e.url.trim()?e.url.trim().replace(/\/+$/,""):null,seo:rr(e.seo),assistant:oe(e.assistant),thumbnails:e.thumbnails&&typeof e.thumbnails=="object"&&typeof e.thumbnails.background=="string"?{background:e.thumbnails.background}:null,colors:{primary:n,light:e.colors?.light??n,dark:e.colors?.dark??n},favicon:e.favicon??null,api:R(e.api),logo:ie(e.logo),footer:ne(e.footer),navbar:re(e.navbar),font:{family:e.font?.family??tr},navigation:e.navigation??null}}async function Tt(e){let t=qe.join(e,"velu.json"),n;try{n=await Qn.readFile(t,"utf-8")}catch(o){throw o.code==="ENOENT"?new Error(`No velu.json found in ${e}. Run \`velu init <name>\` to scaffold one.`):o}let r;try{r=JSON.parse(n)}catch(o){throw new Error(`velu.json is not valid JSON: ${o.message}`)}return Ye(r,qe.basename(e))}function Lt(e){let{colors:t,font:n}=e;return Je({light:t.light,dark:t.dark,family:n.family})}var er,tr,xe,$e,De,nr,se=A(()=>{be();be();er="#dc143c",tr="Google Sans Flex",xe="/@velu-logo-light",$e="/@velu-logo-dark",De="/@velu-favicon",nr={".svg":"image/svg+xml",".ico":"image/x-icon",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif"}});import{visit as or}from"unist-util-visit";import{toString as ir}from"mdast-util-to-string";import sr from"github-slugger";import{valueToEstree as ar}from"estree-util-value-to-estree";function ae(){return e=>{let t=new sr,n=[];or(e,"heading",a=>{let s=ir(a);n.push({depth:a.depth,id:t.slug(s),label:s})});let r={children:[]},o=[{node:r,depth:0}];for(let a of n){for(;o.length>1&&o[o.length-1].depth>=a.depth;)o.pop();let s={id:a.id,label:a.label},l=o[o.length-1].node;l.children||(l.children=[]),l.children.push(s),o.push({node:s,depth:a.depth})}let i=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:ar(i)}]}}]}}})}}var We=A(()=>{});import lr from"github-slugger";import cr from"iso-639-1";function pr(e){let t=String(e).toLowerCase();return cr.getNativeName(t)||e}function we(e){return new lr().slug(String(e??""))}function fr(e){let t=String(e).replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);return t[t.length-1]==="index"&&t.pop(),"/"+t.join("/")}function _t(e){let t=String(e).split("#")[0].split("?")[0];try{t=decodeURI(t)}catch{}return t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/,"")),t||"/"}function z(e){let t={kind:"root",children:le(e??{})};return Ct(t.children),t}function le(e){let t=Array.isArray(e.anchors)?e.anchors.map(yr):[];if(Array.isArray(e.products))return[...t,...e.products.map(mr)];if(Array.isArray(e.versions))return[...t,...e.versions.map(dr)];if(Array.isArray(e.languages))return[...t,...e.languages.map(gr)];if(Array.isArray(e.tabs))return[...t,...e.tabs.map(hr)];let n=[...t];return Array.isArray(e.groups)&&n.push(...e.groups.map(Pt)),Array.isArray(e.pages)&&n.push(...e.pages.map(Et)),n}function mr(e){return{kind:"product",label:e.name??e.product,slug:we(e.product),icon:e.icon,color:e.color,default:!!e.default,children:le(e)}}function dr(e){return{kind:"version",label:e.version,slug:we(e.version),default:!!e.default,children:le(e)}}function gr(e){let t=String(e.language);return{kind:"language",code:t,label:pr(t),slug:we(t),default:!!e.default,children:le(e)}}function hr(e){return{kind:"tab",label:e.tab,slug:we(e.tab),icon:e.icon,href:e.href,children:le(e)}}function yr(e){return{kind:"anchor",label:e.anchor,icon:e.icon,href:e.href,color:e.color}}function Pt(e){let t=(e.pages??[]).map(Et);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 Et(e){return typeof e=="string"?{kind:"page",pagePath:e}:e&&e.apiPage?{kind:"page",pagePath:e.apiPage,label:e.label,method:e.method,api:!0}:Pt(e)}function Ct(e){for(let t of ur){let n=e.filter(r=>r.kind===t);n.length&&!n.some(r=>r.default)&&(n[0].default=!0)}for(let t of e)t.children&&Ct(t.children)}function X(e){let t=[],n=(r,o,i)=>{if(r.kind==="page"){t.push({pagePath:r.pagePath,url:vr(r.pagePath,o),ctx:{...o},ancestors:i,node:r});return}let a=o;r.kind==="product"?a={...o,product:r.default?null:r.slug}:r.kind==="version"?a={...o,version:r.default?null:r.slug}:r.kind==="language"&&(a={...o,language:r.default?null:r.slug});let s=r.kind==="root"?i:[...i,r];for(let l of r.children??[])n(l,a,s)};return n(e,{product:null,version:null,language:null},[]),t}function vr(e,t){let n=[t.product,t.version,t.language].filter(Boolean),r=fr(e).split("/").filter(Boolean);return"/"+[...n,...r].join("/")}var ur,G=A(()=>{ur=["product","version","language"]});import br from"node:fs";import Ft from"node:path";function B(e,t){let n=[],r=[],o=new Set;for(let i of X(e)){if(i.node?.api){o.add(i.url);continue}if(o.has(i.url)){n.push(`duplicate URL "${i.url}" (page "${i.pagePath}") \u2014 keeping the first occurrence`);continue}o.add(i.url);let a=i.pagePath.replace(/^\/+|\/+$/g,""),s=Ft.join(t,...a.split("/"))+".mdx",l=br.existsSync(s);l||n.push(`page "${i.pagePath}" \u2192 ${Ft.relative(t,s)} not found`),r.push({pagePath:i.pagePath,url:i.url,fileAbsPath:s,exists:l})}return{pageEntries:r,warnings:n}}var ce=A(()=>{G()});function V(e){return!e||typeof e!="object"?e||{}:Array.isArray(e.allOf)?e.allOf.reduce((t,n)=>{let r=V(n);return{...t,...r,properties:{...t.properties||{},...r.properties||{}},required:[...t.required||[],...r.required||[]]}},{...e,allOf:void 0}):Array.isArray(e.oneOf)&&e.oneOf.length?V(e.oneOf[0]):Array.isArray(e.anyOf)&&e.anyOf.length?V(e.anyOf[0]):e}function ue(e){let t=V(e);if(!t||typeof t!="object")return"any";if(Array.isArray(t.enum)&&t.enum.length)return`enum<${typeof t.enum[0]}>`;if(t.type==="array")return`${ue(t.items||{})}[]`;let n=t.type||(t.properties?"object":"any");return t.format?`${n}<${t.format}>`:n}function K(e,t=0){let n=V(e);if(!n||typeof n!="object")return null;if(n.example!==void 0)return n.example;if(n.default!==void 0)return n.default;if(Array.isArray(n.enum)&&n.enum.length)return n.enum[0];if(t>=6)return n.type==="object"?{}:null;switch(n.type){case"object":{let r={};for(let[o,i]of Object.entries(n.properties||{}))r[o]=K(i,t+1);return r}case"array":return[K(n.items||{},t+1)];case"integer":case"number":return 0;case"boolean":return!0;default:return $r(n)}}function $r(e){switch(e.format){case"date-time":return"2024-01-01T00:00:00Z";case"date":return"2024-01-01";case"email":return"user@example.com";case"uuid":return"3fa85f64-5717-4562-b3fc-2c963f66afa6";case"uri":case"url":return"https://example.com";default:return"<string>"}}function Xe(e){let t=V(e);if(!t||t.type!=="object"||!t.properties)return t&&(t.type||t.items)?[{name:"body",type:ue(t),required:!1,description:t.description||""}]:[];let n=new Set(t.required||[]);return Object.entries(t.properties).map(([r,o])=>{let i=V(o);return{name:r,type:ue(i),required:n.has(r),description:i.description||"",enum:Array.isArray(i.enum)?i.enum:void 0,deprecated:i.deprecated||void 0}})}function wr(e){let t=e.schema||{};return{name:e.name,in:e.in,required:e.in==="path"?!0:!!e.required,type:ue(t),description:e.description||"",enum:Array.isArray(t.enum)?t.enum:void 0,example:K(t),deprecated:e.deprecated||void 0}}function Ut(e){if(!e||typeof e!="object")return null;let t=Object.keys(e),n=t.find(r=>/json/i.test(r))||t[0];return n?{contentType:n,media:e[n]}:null}function Sr(e){if(!e)return null;let t=Ut(e.content);if(!t)return null;let n=t.media.schema||{};return{required:!!e.required,description:e.description||"",contentType:t.contentType,fields:Xe(n),example:t.media.example??K(n)}}function kr(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,n])=>{let r=Ut(n?.content),o=r?.media?.schema||{};return{status:t,description:n?.description||"",contentType:r?.contentType||null,fields:r?Xe(o):[],example:r?r.media.example??K(o):null}})}function Ar(e,t){if(!Array.isArray(e)||!t)return[];let n=[],r=new Set;for(let o of e)for(let i of Object.keys(o||{})){let a=t[i];!a||r.has(i)||(r.add(i),n.push(jr(i,a)))}return n.filter(Boolean)}function jr(e,t){return t.type==="http"&&/bearer/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"Bearer authentication token."}:t.type==="http"&&/basic/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Basic",description:t.description||"Basic authentication credentials."}:t.type==="apiKey"?{name:t.name||e,in:t.in||"header",required:!0,type:"string",description:t.description||"API key."}:t.type==="oauth2"||t.type==="openIdConnect"?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"OAuth 2.0 access token."}:{name:e,in:"header",required:!0,type:"string",description:t.description||""}}function Nt(e){return String(e).replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function Or(e){let{method:t,path:n,op:r,sharedParams:o,servers:i,schemes:a}=e,s=[...o||[],...r.parameters||[]],l={path:[],query:[],header:[],cookie:[]};for(let c of s)c&&l[c.in]&&l[c.in].push(wr(c));let p=r.security??e.globalSecurity;return{id:r.operationId?Nt(r.operationId):`${t}-${Nt(n)}`,method:t.toUpperCase(),path:n,title:r.summary||r.operationId||`${t.toUpperCase()} ${n}`,description:r.description||r.summary||"",tags:Array.isArray(r.tags)&&r.tags.length?r.tags:["API"],deprecated:r.deprecated||!1,auth:Ar(p,a),parameters:l,body:Sr(r.requestBody),responses:kr(r.responses),servers:(i||[]).map(c=>c.url).filter(Boolean)}}function Tr(e,t,n,r,o,i,a){let s={};e.openapi?s.openapi=e.openapi:e.swagger?s.swagger=e.swagger:s.openapi="3.0.0",s.info=e.info||{title:"API Reference",version:"1.0.0"};let l=(r.servers||i||[]).filter(Boolean);l.length&&(s.servers=l);let p={};Array.isArray(o)&&o.length&&(p.parameters=o),p[n]=r,s.paths={[t]:p};let c=r.security??e.security;if(a&&Array.isArray(c)&&c.length){let u={};for(let b of c)for(let d of Object.keys(b||{}))a[d]&&(u[d]=a[d]);Object.keys(u).length&&(e.swagger?s.securityDefinitions=u:s.components={securitySchemes:u})}return s}function Rt(e){let t=[],n=[],r=e.components?.securitySchemes||e.securityDefinitions||{},o=e.security||[],i=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]);for(let[a,s]of Object.entries(e.paths||{})){if(!s||typeof s!="object")continue;let l=s.parameters||[],p=s.servers||i;for(let c of xr){let u=s[c];!u||typeof u!="object"||(t.push(Or({method:c,path:a,op:u,sharedParams:l,servers:u.servers||p,globalSecurity:o,schemes:r})),n.push(Tr(e,a,c,u,l,u.servers||p,r)))}}return{operations:t,segments:n}}function Ke(e){let t=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]),{operations:n,segments:r}=Rt(e);return{title:e.info?.title||"API Reference",version:e.info?.version||"",servers:t.map(o=>o.url).filter(Boolean),operations:n,segments:r}}var xr,Ze=A(()=>{xr=["get","post","put","patch","delete","options","head","trace"]});import Lr from"@apidevtools/swagger-parser";async function _r(e){return Lr.dereference(e)}async function It(e){return Ke(await _r(e))}var Mt=A(()=>{Ze();Ze()});function Pr(e,{server:t}={}){let r=`${(t||e.servers?.[0]||"").replace(/\/+$/,"")}${e.path}`,o={};for(let a of e.auth||[])a.in==="header"&&(o[a.name]=a.prefix?`${a.prefix} <token>`:"<token>");for(let a of e.parameters?.header||[])o[a.name]||(o[a.name]=String(a.example??`<${a.type}>`));let i=!!e.body;return i&&(o["Content-Type"]=e.body.contentType||"application/json"),{method:e.method,url:r,headers:o,body:i?e.body.example??{}:null}}function Er(e){let t=`curl --request ${e.method} \\
|
|
2
|
+
var Mn=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var be=(e,t)=>{for(var n in t)Mn(e,n,{get:t[n],enumerable:!0})};var xt={};be(xt,{initProject:()=>Gn});import W from"node:fs/promises";import X from"node:path";import{fileURLToPath as zn}from"node:url";async function Gn(e,t){try{if((await W.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(i){if(i.code!=="ENOENT")throw i}await W.mkdir(e,{recursive:!0}),await W.cp(Vn,e,{recursive:!0});let n=X.join(e,"velu.json"),r=JSON.parse(await W.readFile(n,"utf-8"));r.name=t,await W.writeFile(n,JSON.stringify(r,null,2)+`
|
|
3
|
+
`,"utf-8");let o=await bt(e);console.log(`[velu] created ${t}/`);for(let i of o)console.log(` ${i}`);console.log(""),console.log("Next steps:"),console.log(` cd ${t}`),console.log(" velu dev")}async function bt(e,t=e,n=[]){let r=await W.readdir(e,{withFileTypes:!0});for(let o of r){let i=X.join(e,o.name);o.isDirectory()?await bt(i,t,n):n.push(X.relative(t,i).split(X.sep).join("/"))}return n.sort()}var Bn,Vn,$t=A(()=>{Bn=X.dirname(zn(import.meta.url)),Vn=X.resolve(Bn,"..","templates","starter")});var Ge={};be(Ge,{currentVersion:()=>ze,getLatestVersion:()=>Ve,isNewer:()=>Be,maybeAutoUpdate:()=>rr,updateCommand:()=>nr});import{spawnSync as St}from"node:child_process";import{readFileSync as kt,writeFileSync as Jn,mkdirSync as Hn}from"node:fs";import{fileURLToPath as qn}from"node:url";import{homedir as Dn,tmpdir as Yn}from"node:os";import Me from"node:path";import F from"node:process";function ze(){try{return JSON.parse(kt(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}function Zn(e,t){let n=i=>String(i).split("-")[0].split(".").map(l=>Number(l)||0),r=n(e),o=n(t);for(let i=0;i<3;i++){let l=(r[i]||0)-(o[i]||0);if(l!==0)return l<0?-1:1}return 0}function Be(e,t){return!e||!t||t==="unknown"?!1:Zn(e,t)>0}function At(){let e=Me.join(Dn()||Yn(),".velu");return Me.join(e,"update-check.json")}function wt(){try{return JSON.parse(kt(At(),"utf8"))}catch{return null}}function Qn(e){try{let t=At();Hn(Me.dirname(t),{recursive:!0}),Jn(t,JSON.stringify(e))}catch{}}async function er(){let e=`${Wn}/-/package/${xe}/dist-tags`,t=new AbortController,n=setTimeout(()=>t.abort(),Kn);try{let r=await fetch(e,{signal:t.signal,headers:{accept:"application/json"}});if(!r.ok)return null;let o=await r.json();return o&&typeof o.latest=="string"?o.latest:null}catch{return null}finally{clearTimeout(n)}}async function Ve({force:e=!1}={}){if(!e){let n=wt();if(n?.latest&&Date.now()-(n.checkedAt||0)<Xn)return n.latest}let t=await er();return t?(Qn({latest:t,checkedAt:Date.now()}),t):wt()?.latest??null}function jt(){let e=F.env.npm_config_user_agent||"";if(e.startsWith("pnpm"))return"pnpm";if(e.startsWith("yarn"))return"yarn";if(e.startsWith("bun"))return"bun";let t="";try{t=qn(import.meta.url).replace(/\\/g,"/")}catch{}return t.includes("/pnpm/")?"pnpm":t.includes("/yarn/")||t.includes("/.yarn/")?"yarn":t.includes("/.bun/")?"bun":"npm"}function tr(e){let t=`${xe}@latest`;switch(e){case"pnpm":return["pnpm",["add","-g",t]];case"yarn":return["yarn",["global","add",t]];case"bun":return["bun",["add","-g",t]];default:return["npm",["install","-g",t]]}}function Tt(e){let[t,n]=tr(e);return St(t,n,{stdio:"inherit",shell:F.platform==="win32"}).status===0}async function nr(){let e=ze(),t=await Ve({force:!0});if(t&&!Be(t,e)){console.log(`velu is already up to date (v${e}).`);return}let n=jt();console.log(t?`Updating velu ${e} \u2192 ${t} (via ${n})\u2026`:`Could not reach the npm registry; installing ${xe}@latest (via ${n}) anyway\u2026`),Tt(n)?console.log('\u2713 Updated. Run "velu version" to confirm.'):(console.error("Update failed. You can update manually with:"),console.error(` npm install -g ${xe}@latest`),F.exitCode=1)}async function rr(){if(F.env.VELU_NO_UPDATE==="1"||F.env.VELU_UPDATED==="1"||!F.stdout.isTTY)return;let e=ze();if(e==="unknown")return;let t=null;try{t=await Ve()}catch{return}if(!Be(t,e))return;let n=jt();if(console.log(`
|
|
4
|
+
New velu version available: ${e} \u2192 ${t}. Updating\u2026`),!Tt(n)){console.log("Auto-update failed; continuing on the current version. Run `velu update` to retry.\n");return}console.log(`Restarting on the new version\u2026
|
|
5
|
+
`);let r=St(F.execPath,F.argv.slice(1),{stdio:"inherit",env:{...F.env,VELU_UPDATED:"1"}});F.exit(r.status??0)}var xe,Wn,Xn,Kn,Je=A(()=>{xe="@veluai/velu",Wn="https://registry.npmjs.org",Xn=720*60*1e3,Kn=3e3});function qe({light:e,dark:t,family:n}){return[":root:root {",` --accent-color: ${e};`,` --font-sans: "${n}", sans-serif;`,"}",':root:root[data-theme="dark"] {',` --accent-color: ${t};`,"}"].join(`
|
|
6
|
+
`)}function oe(e){if(!e||typeof e!="object")return null;let t=[];if(e.socials&&typeof e.socials=="object")for(let[r,o]of Object.entries(e.socials))typeof o!="string"||!o.trim()||t.push({kind:or[r]??r,href:o.trim()});let n=Array.isArray(e.links)?e.links.filter(r=>r&&typeof r=="object").map(r=>({title:(r.header??r.title??"").trim(),items:(Array.isArray(r.items)?r.items:[]).filter(o=>o&&o.label).map(o=>({label:o.label,href:o.href??"#"}))})).filter(r=>r.title||r.items.length):[];return!t.length&&!n.length?null:{socials:t,links:n}}function He(e){return/^(https?:)?\/\//.test(e)||/^(mailto|tel):/.test(e)}function ie(e){if(!e||typeof e!="object")return null;let t=(Array.isArray(e.links)?e.links:[]).filter(o=>o&&typeof o.href=="string"&&o.href.trim()).map(o=>({label:o.label??"",href:o.href.trim(),icon:o.icon??null,external:He(o.href.trim())})),n=null,r=e.primary;if(r&&typeof r=="object"&&typeof r.href=="string"&&r.href.trim()){let o=r.href.trim();n=r.type==="github"?{kind:"github",label:r.label??"GitHub",href:o,external:He(o)}:{kind:"button",label:r.label??"",href:o,external:He(o)}}return!t.length&&!n?null:{links:t,primary:n}}function De(e){if(e==null)return{options:[...Lt],display:"header"};if(typeof e!="object")return{options:[],display:"header"};let t=e.display==="toc"?"toc":"header",n=Array.isArray(e.options)?e.options:Lt,r=[];for(let o of n)typeof o=="string"?ir.has(o)&&r.push(o):o&&typeof o=="object"&&o.title&&o.href&&r.push({title:String(o.title),description:o.description?String(o.description):"",href:String(o.href),icon:typeof o.icon=="string"?o.icon:void 0});return{options:r,display:t}}function R(e){if(!e||typeof e!="object")return{server:null,proxy:!0,languages:void 0};let t=e.playground||{};return{server:typeof e.server=="string"?e.server.trim():null,proxy:t.proxy!==!1&&t.display!=="none",languages:Array.isArray(e.examples?.languages)?e.examples.languages:void 0}}function se(e){if(!e||typeof e!="object")return null;let t=typeof e.apiBase=="string"&&e.apiBase.trim()?e.apiBase.trim().replace(/\/+$/,""):null,n=typeof e.host=="string"&&e.host.trim()?e.host.trim():null,r=Array.isArray(e.suggestions)?e.suggestions.filter(o=>typeof o=="string"&&o.trim()).map(o=>o.trim()).slice(0,6):[];return!t&&!r.length?null:{apiBase:t,host:n,suggestions:r}}var or,ir,Lt,$e=A(()=>{or={twitter:"x","x-twitter":"x"};ir=new Set(["copy","assistant","view","download-pdf","download-spec","chatgpt","claude","perplexity","grok","aistudio","devin","windsurf","mcp","add-mcp","cursor","vscode","devin-mcp"]),Lt=["copy","view","chatgpt","claude"]});import sr from"node:fs/promises";import Ye from"node:path";function Ot(e){if(!e.favicon)return null;let t=Ye.extname(e.favicon).toLowerCase();return{url:We+t,type:cr[t]||""}}function ae(e){if(typeof e=="string"){let t=e.trim();return t?{light:t,dark:t,href:"/"}:null}if(e&&typeof e=="object"){let t=(e.light??e.dark)?.trim?.(),n=(e.dark??e.light)?.trim?.();return!t||!n?null:{light:t,dark:n,href:e.href?.trim?.()||"/"}}return null}function ur(e){return!e||typeof e!="object"?{metatags:{},indexing:"navigable"}:{metatags:e.metatags&&typeof e.metatags=="object"?e.metatags:{},indexing:e.indexing==="all"?"all":"navigable"}}function Xe(e={},t){let n=e.colors?.primary??ar;return{name:e.name??t??"docs",url:typeof process.env.VELU_SITE_URL=="string"&&process.env.VELU_SITE_URL.trim()?process.env.VELU_SITE_URL.trim().replace(/\/+$/,""):null,seo:ur(e.seo),assistant:se(e.assistant),thumbnails:e.thumbnails&&typeof e.thumbnails=="object"&&typeof e.thumbnails.background=="string"?{background:e.thumbnails.background}:null,colors:{primary:n,light:e.colors?.light??n,dark:e.colors?.dark??n},favicon:e.favicon??null,api:R(e.api),logo:ae(e.logo),footer:oe(e.footer),navbar:ie(e.navbar),font:{family:e.font?.family??lr},navigation:e.navigation??null}}async function _t(e){let t=Ye.join(e,"velu.json"),n;try{n=await sr.readFile(t,"utf-8")}catch(o){throw o.code==="ENOENT"?new Error(`No velu.json found in ${e}. Run \`velu init <name>\` to scaffold one.`):o}let r;try{r=JSON.parse(n)}catch(o){throw new Error(`velu.json is not valid JSON: ${o.message}`)}return Xe(r,Ye.basename(e))}function Et(e){let{colors:t,font:n}=e;return qe({light:t.light,dark:t.dark,family:n.family})}var ar,lr,we,Se,We,cr,le=A(()=>{$e();$e();ar="#dc143c",lr="Google Sans Flex",we="/@velu-logo-light",Se="/@velu-logo-dark",We="/@velu-favicon",cr={".svg":"image/svg+xml",".ico":"image/x-icon",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif"}});import{visit as Pt}from"unist-util-visit";import{toString as pr}from"mdast-util-to-string";import fr from"github-slugger";import{valueToEstree as mr}from"estree-util-value-to-estree";function dr(e){return`update-${String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"item"}`}function Ct(e,t){let n=(e.attributes||[]).find(r=>r&&r.type==="mdxJsxAttribute"&&r.name===t);if(n)return typeof n.value=="string"?n.value:void 0}function gr(e){let t=(e.attributes||[]).find(l=>l&&l.type==="mdxJsxAttribute"&&l.name==="tags");if(!t)return[];if(typeof t.value=="string")return[t.value];let n=t.value&&t.value.value?String(t.value.value):"",r=[],o=/["'`]([^"'`]+)["'`]/g,i;for(;i=o.exec(n);)r.push(i[1]);return r}function ce(){return e=>{let t=new fr,n=[];Pt(e,"heading",a=>{let p=pr(a);n.push({depth:a.depth,id:t.slug(p),label:p})});let r=[],o=[],i=new Set;if(Pt(e,"mdxJsxFlowElement",a=>{if(a.name!=="Update")return;let p=Ct(a,"label")??Ct(a,"date");p&&r.push({id:dr(p),label:p});for(let c of gr(a)){let u=c.trim().toLowerCase();c.trim()&&!i.has(u)&&(i.add(u),o.push(c.trim()))}}),r.length){Ut(e,r),Ft(e,"changelog",{tags:o});return}let l={children:[]},s=[{node:l,depth:0}];for(let a of n){for(;s.length>1&&s[s.length-1].depth>=a.depth;)s.pop();let p={id:a.id,label:a.label},c=s[s.length-1].node;c.children||(c.children=[]),c.children.push(p),s.push({node:p,depth:a.depth})}Ut(e,l.children)}}function Ut(e,t){Ft(e,"toc",t)}function Ft(e,t,n){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:t},init:mr(n)}]}}]}}})}var Ke=A(()=>{});import hr from"github-slugger";import yr from"iso-639-1";function br(e){let t=String(e).toLowerCase();return yr.getNativeName(t)||e}function ke(e){return new hr().slug(String(e??""))}function xr(e){let t=String(e).replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);return t[t.length-1]==="index"&&t.pop(),"/"+t.join("/")}function Nt(e){let t=String(e).split("#")[0].split("?")[0];try{t=decodeURI(t)}catch{}return t.startsWith("/")||(t="/"+t),t.length>1&&(t=t.replace(/\/+$/,"")),t||"/"}function z(e){let t={kind:"root",children:ue(e??{})};return Mt(t.children),t}function ue(e){let t=Array.isArray(e.anchors)?e.anchors.map(Ar):[];if(Array.isArray(e.products))return[...t,...e.products.map($r)];if(Array.isArray(e.versions))return[...t,...e.versions.map(wr)];if(Array.isArray(e.languages))return[...t,...e.languages.map(Sr)];if(Array.isArray(e.tabs))return[...t,...e.tabs.map(kr)];let n=[...t];return Array.isArray(e.groups)&&n.push(...e.groups.map(Rt)),Array.isArray(e.pages)&&n.push(...e.pages.map(It)),n}function $r(e){return{kind:"product",label:e.name??e.product,slug:ke(e.product),icon:e.icon,color:e.color,default:!!e.default,children:ue(e)}}function wr(e){return{kind:"version",label:e.version,slug:ke(e.version),default:!!e.default,children:ue(e)}}function Sr(e){let t=String(e.language);return{kind:"language",code:t,label:br(t),slug:ke(t),default:!!e.default,children:ue(e)}}function kr(e){return{kind:"tab",label:e.tab,slug:ke(e.tab),icon:e.icon,href:e.href,children:ue(e)}}function Ar(e){return{kind:"anchor",label:e.anchor,icon:e.icon,href:e.href,color:e.color}}function Rt(e){let t=(e.pages??[]).map(It);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 It(e){return typeof e=="string"?{kind:"page",pagePath:e}:e&&e.apiPage?{kind:"page",pagePath:e.apiPage,label:e.label,method:e.method,api:!0}:Rt(e)}function Mt(e){for(let t of vr){let n=e.filter(r=>r.kind===t);n.length&&!n.some(r=>r.default)&&(n[0].default=!0)}for(let t of e)t.children&&Mt(t.children)}function K(e){let t=[],n=(r,o,i)=>{if(r.kind==="page"){t.push({pagePath:r.pagePath,url:jr(r.pagePath,o),ctx:{...o},ancestors:i,node:r});return}let l=o;r.kind==="product"?l={...o,product:r.default?null:r.slug}:r.kind==="version"?l={...o,version:r.default?null:r.slug}:r.kind==="language"&&(l={...o,language:r.default?null:r.slug});let s=r.kind==="root"?i:[...i,r];for(let a of r.children??[])n(a,l,s)};return n(e,{product:null,version:null,language:null},[]),t}function jr(e,t){let n=[t.product,t.version,t.language].filter(Boolean),r=xr(e).split("/").filter(Boolean);return"/"+[...n,...r].join("/")}var vr,V=A(()=>{vr=["product","version","language"]});import Tr from"node:fs";import zt from"node:path";function B(e,t){let n=[],r=[],o=new Set;for(let i of K(e)){if(i.node?.api){o.add(i.url);continue}if(o.has(i.url)){n.push(`duplicate URL "${i.url}" (page "${i.pagePath}") \u2014 keeping the first occurrence`);continue}o.add(i.url);let l=i.pagePath.replace(/^\/+|\/+$/g,""),s=zt.join(t,...l.split("/"))+".mdx",a=Tr.existsSync(s);a||n.push(`page "${i.pagePath}" \u2192 ${zt.relative(t,s)} not found`),r.push({pagePath:i.pagePath,url:i.url,fileAbsPath:s,exists:a})}return{pageEntries:r,warnings:n}}var pe=A(()=>{V()});function G(e){return!e||typeof e!="object"?e||{}:Array.isArray(e.allOf)?e.allOf.reduce((t,n)=>{let r=G(n);return{...t,...r,properties:{...t.properties||{},...r.properties||{}},required:[...t.required||[],...r.required||[]]}},{...e,allOf:void 0}):Array.isArray(e.oneOf)&&e.oneOf.length?G(e.oneOf[0]):Array.isArray(e.anyOf)&&e.anyOf.length?G(e.anyOf[0]):e}function fe(e){let t=G(e);if(!t||typeof t!="object")return"any";if(Array.isArray(t.enum)&&t.enum.length)return`enum<${typeof t.enum[0]}>`;if(t.type==="array")return`${fe(t.items||{})}[]`;let n=t.type||(t.properties?"object":"any");return t.format?`${n}<${t.format}>`:n}function Z(e,t=0){let n=G(e);if(!n||typeof n!="object")return null;if(n.example!==void 0)return n.example;if(n.default!==void 0)return n.default;if(Array.isArray(n.enum)&&n.enum.length)return n.enum[0];if(t>=6)return n.type==="object"?{}:null;switch(n.type){case"object":{let r={};for(let[o,i]of Object.entries(n.properties||{}))r[o]=Z(i,t+1);return r}case"array":return[Z(n.items||{},t+1)];case"integer":case"number":return 0;case"boolean":return!0;default:return Or(n)}}function Or(e){switch(e.format){case"date-time":return"2024-01-01T00:00:00Z";case"date":return"2024-01-01";case"email":return"user@example.com";case"uuid":return"3fa85f64-5717-4562-b3fc-2c963f66afa6";case"uri":case"url":return"https://example.com";default:return"<string>"}}function Ze(e){let t=G(e);if(!t||t.type!=="object"||!t.properties)return t&&(t.type||t.items)?[{name:"body",type:fe(t),required:!1,description:t.description||""}]:[];let n=new Set(t.required||[]);return Object.entries(t.properties).map(([r,o])=>{let i=G(o);return{name:r,type:fe(i),required:n.has(r),description:i.description||"",enum:Array.isArray(i.enum)?i.enum:void 0,deprecated:i.deprecated||void 0}})}function _r(e){let t=e.schema||{};return{name:e.name,in:e.in,required:e.in==="path"?!0:!!e.required,type:fe(t),description:e.description||"",enum:Array.isArray(t.enum)?t.enum:void 0,example:Z(t),deprecated:e.deprecated||void 0}}function Vt(e){if(!e||typeof e!="object")return null;let t=Object.keys(e),n=t.find(r=>/json/i.test(r))||t[0];return n?{contentType:n,media:e[n]}:null}function Er(e){if(!e)return null;let t=Vt(e.content);if(!t)return null;let n=t.media.schema||{};return{required:!!e.required,description:e.description||"",contentType:t.contentType,fields:Ze(n),example:t.media.example??Z(n)}}function Pr(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,n])=>{let r=Vt(n?.content),o=r?.media?.schema||{};return{status:t,description:n?.description||"",contentType:r?.contentType||null,fields:r?Ze(o):[],example:r?r.media.example??Z(o):null}})}function Cr(e,t){if(!Array.isArray(e)||!t)return[];let n=[],r=new Set;for(let o of e)for(let i of Object.keys(o||{})){let l=t[i];!l||r.has(i)||(r.add(i),n.push(Ur(i,l)))}return n.filter(Boolean)}function Ur(e,t){return t.type==="http"&&/bearer/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"Bearer authentication token."}:t.type==="http"&&/basic/i.test(t.scheme||"")?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Basic",description:t.description||"Basic authentication credentials."}:t.type==="apiKey"?{name:t.name||e,in:t.in||"header",required:!0,type:"string",description:t.description||"API key."}:t.type==="oauth2"||t.type==="openIdConnect"?{name:"Authorization",in:"header",required:!0,type:"string",prefix:"Bearer",description:t.description||"OAuth 2.0 access token."}:{name:e,in:"header",required:!0,type:"string",description:t.description||""}}function Bt(e){return String(e).replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function Fr(e){let{method:t,path:n,op:r,sharedParams:o,servers:i,schemes:l}=e,s=[...o||[],...r.parameters||[]],a={path:[],query:[],header:[],cookie:[]};for(let c of s)c&&a[c.in]&&a[c.in].push(_r(c));let p=r.security??e.globalSecurity;return{id:r.operationId?Bt(r.operationId):`${t}-${Bt(n)}`,method:t.toUpperCase(),path:n,title:r.summary||r.operationId||`${t.toUpperCase()} ${n}`,description:r.description||r.summary||"",tags:Array.isArray(r.tags)&&r.tags.length?r.tags:["API"],deprecated:r.deprecated||!1,auth:Cr(p,l),parameters:a,body:Er(r.requestBody),responses:Pr(r.responses),servers:(i||[]).map(c=>c.url).filter(Boolean)}}function Nr(e,t,n,r,o,i,l){let s={};e.openapi?s.openapi=e.openapi:e.swagger?s.swagger=e.swagger:s.openapi="3.0.0",s.info=e.info||{title:"API Reference",version:"1.0.0"};let a=(r.servers||i||[]).filter(Boolean);a.length&&(s.servers=a);let p={};Array.isArray(o)&&o.length&&(p.parameters=o),p[n]=r,s.paths={[t]:p};let c=r.security??e.security;if(l&&Array.isArray(c)&&c.length){let u={};for(let b of c)for(let f of Object.keys(b||{}))l[f]&&(u[f]=l[f]);Object.keys(u).length&&(e.swagger?s.securityDefinitions=u:s.components={securitySchemes:u})}return s}function Gt(e){let t=[],n=[],r=e.components?.securitySchemes||e.securityDefinitions||{},o=e.security||[],i=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]);for(let[l,s]of Object.entries(e.paths||{})){if(!s||typeof s!="object")continue;let a=s.parameters||[],p=s.servers||i;for(let c of Lr){let u=s[c];!u||typeof u!="object"||(t.push(Fr({method:c,path:l,op:u,sharedParams:a,servers:u.servers||p,globalSecurity:o,schemes:r})),n.push(Nr(e,l,c,u,a,u.servers||p,r)))}}return{operations:t,segments:n}}function Qe(e){let t=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]),{operations:n,segments:r}=Gt(e);return{title:e.info?.title||"API Reference",version:e.info?.version||"",servers:t.map(o=>o.url).filter(Boolean),operations:n,segments:r}}var Lr,et=A(()=>{Lr=["get","post","put","patch","delete","options","head","trace"]});import Rr from"@apidevtools/swagger-parser";async function Ir(e){return Rr.dereference(e)}async function Jt(e){return Qe(await Ir(e))}var Ht=A(()=>{et();et()});function Mr(e,{server:t}={}){let r=`${(t||e.servers?.[0]||"").replace(/\/+$/,"")}${e.path}`,o={};for(let l of e.auth||[])l.in==="header"&&(o[l.name]=l.prefix?`${l.prefix} <token>`:"<token>");for(let l of e.parameters?.header||[])o[l.name]||(o[l.name]=String(l.example??`<${l.type}>`));let i=!!e.body;return i&&(o["Content-Type"]=e.body.contentType||"application/json"),{method:e.method,url:r,headers:o,body:i?e.body.example??{}:null}}function zr(e){let t=`curl --request ${e.method} \\
|
|
7
7
|
--url ${e.url}`;for(let[n,r]of Object.entries(e.headers))t+=` \\
|
|
8
8
|
--header '${n}: ${r}'`;return e.body!=null&&(t+=` \\
|
|
9
|
-
--data '${JSON.stringify(e.body)}'`),t}function
|
|
9
|
+
--data '${JSON.stringify(e.body)}'`),t}function Br(e){let t=[` method: '${e.method}'`];if(Object.keys(e.headers).length){let n=Object.entries(e.headers).map(([r,o])=>` '${r}': '${o}'`).join(`,
|
|
10
10
|
`);t.push(` headers: {
|
|
11
11
|
${n}
|
|
12
|
-
}`)}return e.body!=null&&t.push(` body: JSON.stringify(${
|
|
12
|
+
}`)}return e.body!=null&&t.push(` body: JSON.stringify(${tt(e.body," ")})`),[`const res = await fetch('${e.url}', {`,t.join(`,
|
|
13
13
|
`),"});","const data = await res.json();"].join(`
|
|
14
|
-
`)}function
|
|
14
|
+
`)}function Vr(e){let t=["import requests","",`url = "${e.url}"`];if(Object.keys(e.headers).length){let r=Object.entries(e.headers).map(([o,i])=>` "${o}": "${i}"`).join(`,
|
|
15
15
|
`);t.push(`headers = {
|
|
16
16
|
${r}
|
|
17
|
-
}`)}let n=["url"];return e.body!=null&&(t.push(`payload = ${
|
|
18
|
-
`)}function
|
|
19
|
-
`)}function
|
|
17
|
+
}`)}let n=["url"];return e.body!=null&&(t.push(`payload = ${tt(e.body,"")}`),n.push("json=payload")),Object.keys(e.headers).length&&n.push("headers=headers"),t.push("",`response = requests.${e.method.toLowerCase()}(${n.join(", ")})`,"print(response.json())"),t.join(`
|
|
18
|
+
`)}function Gr(e){let t=e.method.charAt(0)+e.method.slice(1).toLowerCase(),n=["require 'net/http'","require 'json'","",`uri = URI("${e.url}")`,"http = Net::HTTP.new(uri.host, uri.port)","http.use_ssl = true",`request = Net::HTTP::${t}.new(uri)`];for(let[r,o]of Object.entries(e.headers))n.push(`request['${r}'] = '${o}'`);return e.body!=null&&n.push(`request.body = ${tt(e.body,"")}.to_json`),n.push("","response = http.request(request)","puts response.body"),n.join(`
|
|
19
|
+
`)}function Dt(e,{server:t,languages:n=nt}={}){let r=Mr(e,{server:t});return n.filter(o=>qt[o]).map(o=>({key:o,label:Jr[o],language:Hr[o],code:qt[o](r)}))}var tt,qt,Jr,Hr,nt,Yt=A(()=>{tt=(e,t)=>JSON.stringify(e,null,2).split(`
|
|
20
20
|
`).map((n,r)=>r===0?n:t+n).join(`
|
|
21
|
-
`);
|
|
22
|
-
${
|
|
21
|
+
`);qt={curl:zr,javascript:Br,python:Vr,ruby:Gr},Jr={curl:"cURL",javascript:"JavaScript",python:"Python",ruby:"Ruby"},Hr={curl:"bash",javascript:"javascript",python:"python",ruby:"ruby"},nt=["curl","javascript","python","ruby"]});function Wt(e,t){if(!t||typeof t!="object")return e;let n=R(t);return{server:t.server!=null?n.server:e?.server??null,proxy:t.playground!=null?n.proxy:e?.proxy!==!1,languages:t.examples?.languages!=null?n.languages:e?.languages}}function qr(e,{base:t,api:n,ops:r}){let o=n?.server,i=n?.languages||nt,l={proxy:n?.proxy!==!1,server:o??null},s=new Map;for(let p of e){let c=p.op.tags?.[0]||"API";s.has(c)||s.set(c,[]),s.get(c).push(p)}let a=[];for(let[p,c]of s){let u=c.map(({op:b,segment:f})=>{let x=`${t}/${rt(p)}/${b.id}`;return r[x]={operation:b,samples:Dt(b,{server:o||b.servers?.[0],languages:i}),segment:f,title:b.title,description:b.description,method:b.method,api:l},{apiPage:x,label:b.title,method:b.method}});a.push({group:p,pages:u})}return a}async function Xt(e,{loadOps:t,base:n,api:r,ops:o}){let i=Array.isArray(e)?e:[e],l=[];for(let s of i){let{operations:a,segments:p,servers:c}=await t(s);a.forEach((u,b)=>{!u.servers?.length&&c?.length&&(u.servers=c),l.push({op:u,segment:p[b]})})}return qr(l,{base:n,api:r,ops:o})}async function Kt(e,t){if(!e||typeof e!="object")return e;if(typeof e.tab=="string"&&e.openapi){let r=rt(e.tab),o=Wt(t.api,e.api),i=await Xt(e.openapi,{...t,base:r,api:o}),{openapi:l,api:s,...a}=e;return{...a,groups:[...a.groups||[],...i]}}if(typeof e.group=="string"&&e.openapi){let r=rt(e.group),o=Wt(t.api,e.api),i=await Xt(e.openapi,{...t,base:r,api:o}),{openapi:l,api:s,...a}=e,p=i.flatMap(c=>c.pages);return{...a,pages:[...a.pages||[],...p]}}let n={...e};for(let r of["products","versions","languages","tabs","groups"])Array.isArray(e[r])&&(n[r]=await Promise.all(e[r].map(o=>Kt(o,t))));return n}async function Zt(e,{api:t,loadOps:n}){let r={};return!e||typeof e!="object"?{nav:e,ops:r}:{nav:await Kt(e,{api:t,loadOps:n,ops:r}),ops:r}}var rt,Qt=A(()=>{$e();Yt();rt=e=>String(e??"").replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()||"x"});import Dr from"node:path";function Yr(e,t){return/^https?:\/\//.test(e)?e:Dr.resolve(t,e.replace(/^\/+/,""))}async function Ae(e,{targetDir:t,api:n}={}){return Zt(e,{api:n,loadOps:r=>Jt(Yr(r,t))})}var ot=A(()=>{Ht();Qt()});import Wr from"node:fs";import me from"node:path";function nn(e){return{name:"velu-site",resolveId(t){return t===tn?en:null},async load(t){return t!==en?null:Xr(e)}}}async function Xr(e){let t={};try{t=JSON.parse(Wr.readFileSync(me.join(e,"velu.json"),"utf-8"))}catch{}let n=R(t.api),r=t.navigation??{},o={};try{let $=await Ae(t.navigation??{},{targetDir:e,api:n});r=$.nav,o=$.ops}catch($){console.warn(`[velu] openapi: ${$.message}`)}let i=z(r),{pageEntries:l,warnings:s}=B(i,e);for(let $ of s)console.warn(`[velu] nav: ${$}`);let a=ae(t.logo),p={name:t.name??me.basename(e),logo:a?{light:we,dark:Se,href:a.href,mono:a.light===a.dark}:null,footer:oe(t.footer),navbar:ie(t.navbar),contextual:De(t.contextual),assistant:se(t.assistant)},c=[],u=[],b=0;for(let $ of l){if(!$.exists)continue;let v=JSON.stringify($.fileAbsPath.split(me.sep).join("/")),m=JSON.stringify(me.relative(e,$.fileAbsPath).split(me.sep).join("/")),g=`__p${b++}`;c.push(`import * as ${g} from ${v};`),u.push(` ${JSON.stringify($.url)}: { Component: ${g}.default, frontmatter: ${g}.frontmatter, toc: ${g}.toc, changelog: ${g}.changelog, relPath: ${m} },`)}let f=new Set(l.filter($=>$.exists).map($=>$.url));for(let $ of l)!$.exists&&!f.has($.url)&&u.push(` ${JSON.stringify($.url)}: { missing: true },`);let x=[],d=[],O=[],h=!1,w=0;for(let $ of K(i)){if(!$.node?.api)continue;let v=o[$.pagePath];if(!v)continue;h=!0;let m=`__op${w}`,g=`__samples${w}`,y=`__api${w}`;w+=1,x.push(`const ${m} = ${JSON.stringify(v.operation)};`),x.push(`const ${g} = ${JSON.stringify(v.samples)};`),O.push(`{ id: ${JSON.stringify(v.operation.id)}, method: ${JSON.stringify(v.operation.method)}, title: ${JSON.stringify(v.operation.title)}, url: ${JSON.stringify($.url)}, operation: ${m}, samples: ${g}, api: ${JSON.stringify(v.api||{proxy:!0,server:null})} }`),d.push(`function ${y}(){ return React.createElement(ApiReferencePage, { operation: ${m}, samples: ${g}, apiOperations: __apiOperations, api: ${JSON.stringify(v.api||{proxy:!0,server:null})} }); }`),u.push(` ${JSON.stringify($.url)}: { Component: ${y}, frontmatter: { title: ${JSON.stringify(v.title)}, description: ${JSON.stringify(v.description)} }, toc: [], operation: ${m}, samples: ${g}, api: true },`)}h&&(x.push(`const __apiOperations = [
|
|
22
|
+
${O.join(`,
|
|
23
23
|
`)}
|
|
24
|
-
];`),x.push(
|
|
25
|
-
`)));let
|
|
24
|
+
];`),x.push(d.join(`
|
|
25
|
+
`)));let U=[];return h&&(U.push("import React from 'react';"),U.push("import { ApiReferencePage } from 'velu-ui';")),["// AUTO-GENERATED by vite-plugin-velu-site. Do not edit.",U.join(`
|
|
26
26
|
`),c.join(`
|
|
27
27
|
`),x.join(`
|
|
28
28
|
`),"","export const pages = {",u.join(`
|
|
29
|
-
`),"};",`export const navigation = ${JSON.stringify(i)};`,`export const site = ${JSON.stringify(p)};`,""].join(`
|
|
30
|
-
`)}var
|
|
31
|
-
`))i.push(` ${
|
|
32
|
-
`)}function
|
|
33
|
-
`)}var
|
|
29
|
+
`),"};",`export const navigation = ${JSON.stringify(i)};`,`export const site = ${JSON.stringify(p)};`,"if (site.logo) {"," const __veluBase = (import.meta.env.BASE_URL || '/').replace(/\\/$/, '');"," site.logo = { ...site.logo, light: __veluBase + site.logo.light, dark: __veluBase + site.logo.dark };","}",""].join(`
|
|
30
|
+
`)}var tn,en,rn=A(()=>{V();pe();le();ot();tn="virtual:velu-site",en="\0"+tn});import{visit as Kr}from"unist-util-visit";function Zr(e,t){let n=on(e).replace(/[?#].*$/,""),r=on(t).replace(/\/+$/,"");return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):null}function sn(e,t){return()=>(n,r)=>{typeof e=="function"&&Kr(n,o=>{if(o.type!=="mdxJsxFlowElement"&&o.type!=="mdxJsxTextElement"||typeof o.name!="string"||!/^[A-Z]/.test(o.name)||o.name.includes("."))return;let i={};for(let s of o.attributes||[])s.type==="mdxJsxAttribute"&&(s.value==null?i[s.name]=!0:typeof s.value=="string"&&(i[s.name]=s.value));let l=e(o.name,i,{checkRequired:!1});if(l){let s=new Error(l.title);throw s.veluIssue={...l,file:Zr(r?.path,t),line:o.position?.start?.line??null,column:o.position?.start?.column??null},s.loc={line:s.veluIssue.line,column:s.veluIssue.column},s}})}}var on,an=A(()=>{on=e=>String(e||"").replace(/\\/g,"/")});import je from"node:path";import Qr from"node:fs";import{createRequire as eo}from"node:module";import to from"@tailwindcss/vite";import no from"@vitejs/plugin-react";import ro from"@mdx-js/rollup";import oo from"remark-frontmatter";import io from"remark-mdx-frontmatter";import so from"remark-gfm";import ao from"rehype-slug";function lo(e){let n=eo(import.meta.url).resolve("@mdx-js/react"),r=je.resolve(e,"runtime","velu-ui"),o=Qr.existsSync(r)?r:je.resolve(e,"..","velu-ui","src");return[{find:"@mdx-js/react",replacement:n},{find:/^velu-ui$/,replacement:je.join(o,"index.js")},{find:/^velu-ui\//,replacement:o+"/"}]}function ln({targetDir:e,VITE_ROOT:t,validateProps:n,basePath:r}){return{root:t,base:r?`${r}/`:"/",plugins:[nn(e),ro({remarkPlugins:[oo,io,so,ce,sn(n,e)],rehypePlugins:[ao],providerImportSource:"@mdx-js/react"}),no(),to({optimize:!1})],cacheDir:je.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"],exclude:["tailwindcss","@tailwindcss/oxide","playwright","playwright-core","@apidevtools/swagger-parser","satori","@resvg/resvg-js","pagefind"],esbuildOptions:{loader:{".mdx":"jsx"}}},resolve:{alias:lo(t),dedupe:["react","react-dom","@mdx-js/react"]}}}var cn=A(()=>{Ke();rn();an()});function j(e){return{category:"render-crash",severity:"error",file:null,line:null,column:null,frame:null,title:"Something went wrong",detail:"",hint:"",suggestion:null,...e}}function co(e,t){if(e=String(e),t=String(t),e===t)return 0;if(!e.length)return t.length;if(!t.length)return e.length;let n=Array.from({length:t.length+1},(o,i)=>i),r=new Array(t.length+1);for(let o=1;o<=e.length;o++){r[0]=o;for(let i=1;i<=t.length;i++){let l=e[o-1]===t[i-1]?0:1;r[i]=Math.min(r[i-1]+1,n[i]+1,n[i-1]+l)}[n,r]=[r,n]}return n[t.length]}function Te(e,t=[]){if(!e)return null;let n=String(e).toLowerCase(),r=null,o=1/0;for(let l of t){let s=co(n,String(l).toLowerCase());s<o&&(o=s,r=l)}let i=Math.min(3,Math.max(2,Math.floor(n.length/4)));return o<=i?r:null}function uo(e,t){return e==="warning"?C(t,P.yellow,"\u26A0"):e==="info"?C(t,P.cyan,"\u2139"):C(t,P.red,"\u2716")}function st(e,{color:t=!1}={}){let n=it[e.category]||e.category,r=e.line?`${e.line}${e.column?`:${e.column}`:""}`:"",o=e.file?`${e.file}${r?`:${r}`:""}`:r,i=[];if(i.push(`${uo(e.severity,t)} ${C(t,P.bold,n)}`+(o?` ${C(t,P.dim,o)}`:"")),e.title&&i.push(` ${e.title}`),e.detail&&e.detail!==e.title&&i.push(` ${C(t,P.dim,e.detail)}`),e.frame)for(let l of String(e.frame).split(`
|
|
31
|
+
`))i.push(` ${l}`);return e.suggestion&&i.push(` ${C(t,P.cyan,`Did you mean <${e.suggestion}>?`)}`),e.hint&&i.push(` ${C(t,P.dim,`\u2192 ${e.hint}`)}`),i.join(`
|
|
32
|
+
`)}function Le(e,{color:t=!1}={}){if(!e.length)return C(t,P.cyan,"\u2713 No issues found.");let n=new Map;for(let s of e){let a=s.file||"velu.json";n.has(a)||n.set(a,[]),n.get(a).push(s)}let r=[];for(let[s,a]of n){r.push(C(t,P.bold,s));for(let p of a)r.push(st({...p,file:null},{color:t}).replace(/^/gm," "));r.push("")}let o=e.filter(s=>s.severity!=="warning"&&s.severity!=="info").length,i=e.length-o,l=`${o} error${o===1?"":"s"}`+(i?`, ${i} warning${i===1?"":"s"}`:"");return r.push(C(t,o?P.red:P.yellow,l)),r.join(`
|
|
33
|
+
`)}var it,P,C,J=A(()=>{it={"mdx-syntax":"MDX syntax",frontmatter:"Frontmatter","unknown-component":"Unknown component","invalid-props":"Invalid options","render-crash":"Render error","config-json":"velu.json","config-schema":"velu.json","config-nav":"Navigation","config-asset":"Asset"};P={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",dim:"\x1B[2m",bold:"\x1B[1m"},C=(e,t,n)=>e?`${t}${n}${P.reset}`:n});function po(e){let t=e,n=0;for(;t&&t.cause&&n<3&&!(t.loc||t.line||/`[^`]+` to be defined/.test(t.message||""));)t=t.cause,n+=1;return t||e}function at(e,t){if(!e)return null;let n=un(e).replace(/[?#].*$/,""),r=t?un(t).replace(/\/+$/,""):"";return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):!/^([a-zA-Z]:\/|\/)/.test(n)&&!/node_modules/.test(n)?n:null}function fo(e){return e?String(e).replace(/([a-zA-Z]:\\|\/)[^\s'"()]+/g,t=>/node_modules|[\\/]vite[\\/]|@veluai|velu-cli|velu-ui/.test(t)?"\u2026":t).trim():""}function mo(e){let t=/\((\d+):(\d+)(?:-\d+:\d+)?\)\s*$/.exec(String(e||""));return t?{line:Number(t[1]),column:Number(t[2])}:null}function go(e){return String(e||"").replace(/\s*\(\d+:\d+(?:-\d+:\d+)?\)\s*$/,"").trim()}function yo(e,t){if(!e||!t)return null;let n=String(e);return/node_modules|[\\/]vite[\\/]|@veluai[\\/]/.test(n)?null:n}function de(e,t={}){let{projectDir:n="",knownComponents:r=[],file:o=null}=t,i=null;for(let h=e,w=0;h&&w<6;h=h.cause,w+=1)if(h.veluIssue){i=h.veluIssue;break}if(i)return j({...i,file:i.file||o});let l=po(e)||{},s=l.message||String(e||""),a=/Expected component `([^`]+)` to be defined/.exec(s);if(a){let h=a[1],w=/referenced in your code at `(\d+):(\d+)/.exec(s),U=/\bin `([^`]+)`/.exec(s),$=U?at(U[1],n):null;return j({category:"unknown-component",file:$||o,line:w?Number(w[1]):null,column:w?Number(w[2]):null,title:`<${h}> is not a built-in component`,detail:"",hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:Te(h,r)})}let p=l.loc||(l.line!=null?{line:l.line,column:l.column,file:l.file}:null)||mo(l.reason||s),c=l.id||p&&p.file||l.file||null,u=at(c,n)||o,b=!!u&&at(c,n)!=null,f=yo(l.frame,b||!!o),x=fo(go(l.reason||s)),d=ho.test(s),O=l.source==="remark-frontmatter"||/\byaml\b|frontmatter/i.test(s)||p&&p.line===1&&/unexpected|expected/i.test(s)&&/---/.test(s);return p||d||f&&b?j({category:O?"frontmatter":"mdx-syntax",file:u,line:p?p.line:null,column:p?p.column:null,frame:f,title:x||(O?"Invalid frontmatter":"MDX syntax error"),detail:"",hint:O?"Check the YAML between the --- markers \u2014 indentation, quotes, and colons.":"Make sure every <Component> has a matching closing tag and that { } braces are balanced."}):/\.map is not a function|is not iterable|reading '|undefined \(reading/i.test(s)?j({category:"invalid-props",file:u,title:"A component received an invalid value",detail:x,hint:"Check the props/options you passed to a component on this page."}):j({category:"render-crash",file:u,title:"This page failed to render",detail:x,hint:"Set VELU_DEBUG=1 for the full stack trace."})}var un,ho,lt=A(()=>{J();un=e=>String(e).replace(/\\/g,"/");ho=/closing tag|unexpected closing|could not parse (?:expression|import|export)|unexpected character|unexpected end of|expected a closing|expected the closing|unexpected `|in expression|misnested|before name/i});function vo(e){let t=it[e.category]||e.category,n=e.file?`${e.file}${e.line?`:${e.line}${e.column?`:${e.column}`:""}`:""}`:"",r=[];return r.push('<div class="velu-err-card">'),r.push('<div class="velu-err-head">'),r.push(`<span class="velu-err-pill">${I(t)}</span>`),r.push("</div>"),e.title&&r.push(`<div class="velu-err-title">${I(e.title)}</div>`),n&&r.push(`<a class="velu-err-loc" title="${I(n)}">${I(n)}</a>`),e.detail&&r.push(`<div class="velu-err-detail">${I(e.detail)}</div>`),e.frame&&r.push(`<pre class="velu-err-frame">${I(e.frame)}</pre>`),e.suggestion&&r.push(`<div class="velu-err-suggest">Did you mean <code><${I(e.suggestion)}></code>?</div>`),e.hint&&r.push(`<div class="velu-err-hint">${I(e.hint)}</div>`),r.push("</div>"),r.join("")}function ct(e,t={}){let n=Array.isArray(e)?e:[e],r=t.title||(n.length>1?`${n.length} problems to fix`:"There\u2019s a problem to fix"),o=n.map(vo).join(`
|
|
34
34
|
`);return`<!doctype html>
|
|
35
35
|
<html lang="en">
|
|
36
36
|
<head>
|
|
@@ -102,21 +102,38 @@ ${L.join(`,
|
|
|
102
102
|
<div class="velu-err-foot">Fix the file and save \u2014 this page reloads automatically.</div>
|
|
103
103
|
</div>
|
|
104
104
|
</body>
|
|
105
|
-
</html>`}var I,
|
|
106
|
-
`).length}function
|
|
107
|
-
`).length}function
|
|
108
|
-
`).length}function
|
|
109
|
-
${e}`;let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),r=`> ${
|
|
105
|
+
</html>`}var I,pn=A(()=>{J();I=e=>String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")});var H,ut=A(()=>{H=["Callout","Card","CardGroup","Accordion","AccordionGroup","Columns","Field","Prompt","Steps","Step","Tree","Folder","File","Update","Image","CodeBlock","CodeGroup","MethodBadge","ApiPath","TryItBar","ApiField","ApiClient","ApiSidebar"]});import Oe from"node:fs";import he from"node:path";import{fileURLToPath as bo}from"node:url";import xo from"iso-639-1";function ge(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
|
|
106
|
+
`).length}function So(e,t){return t==null||t<0?null:e.slice(0,t).split(`
|
|
107
|
+
`).length}function pt(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
|
|
108
|
+
`).length}function ko(e,t,n){let r=[];return s(e,t,"",null),r;function o(a){if(a&&a.$ref){let p=a.$ref.replace(/^#\//,"").split("/"),c=n;for(let u of p)c=c?.[u];return c||{}}return a}function i(a){return Array.isArray(a)?"array":a===null?"null":typeof a}function l(a,p){let c=r.length;s(a,p,"",null,!0);let u=r.length===c;return u||(r.length=c),u}function s(a,p,c,u,b){let f=o(p);if(f){if(f.oneOf){f.oneOf.some(d=>l(a,d))||r.push({path:c,key:u,message:"value does not match any allowed shape"});return}if(f.type&&i(a)!==f.type){r.push({path:c,key:u,message:`expected ${f.type}, got ${i(a)}`});return}if(f.type==="string"&&f.minLength!=null&&a.length<f.minLength&&r.push({path:c,key:u,message:"must not be empty"}),f.type==="object"&&i(a)==="object"){for(let d of f.required||[])d in a||r.push({path:c?`${c}.${d}`:d,key:d,message:`missing required "${d}"`});let x=f.properties||{};if(f.additionalProperties===!1)for(let d of Object.keys(a))d in x||r.push({path:c?`${c}.${d}`:d,key:d,message:`unknown field "${d}"`});for(let[d,O]of Object.entries(x))d in a&&s(a[d],O,c?`${c}.${d}`:d,d,b)}f.type==="array"&&Array.isArray(a)&&f.items&&a.forEach((x,d)=>s(x,f.items,`${c}[${d}]`,u,b))}}}function Ao(e){if(typeof e!="string")return!1;let t=e.trim();return/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(t)||/^(rgb|rgba|hsl|hsla|color|oklch|lab|lch)\(/i.test(t)||/^[a-z][a-z0-9-]*$/i.test(t)}function _e(e){let t=[],n=he.join(e,"velu.json"),r;try{r=Oe.readFileSync(n,"utf-8")}catch(s){return s.code==="ENOENT"?t.push(j({category:"config-json",file:"velu.json",title:"No velu.json found",hint:"Run `velu init <name>` to scaffold a project."})):t.push(j({category:"config-json",file:"velu.json",title:"Could not read velu.json"})),t}let o;try{o=JSON.parse(r)}catch(s){let a=/position (\d+)/.exec(s.message||""),p=a?So(r,Number(a[1])):null;return t.push(j({category:"config-json",file:"velu.json",line:p,title:"velu.json is not valid JSON",detail:String(s.message||"").replace(/\s+in JSON.*$/,""),hint:"Check for a trailing comma, a missing quote, or an unclosed brace."})),t}let i=null;try{i=JSON.parse(Oe.readFileSync(wo,"utf-8"))}catch{}if(i)for(let s of ko(o,i,i)){let a=/^unknown field/.test(s.message);t.push(j({category:"config-schema",severity:a?"warning":"error",file:"velu.json",line:ge(r,s.key),title:s.path?`${s.path}: ${s.message}`:s.message,hint:a?"Remove it, or check the spelling against the velu.json schema.":""}))}for(let s of["primary","light","dark"]){let a=o.colors?.[s];a!=null&&!Ao(a)&&t.push(j({category:"config-schema",severity:"warning",file:"velu.json",line:ge(r,s),title:`colors.${s}: "${a}" doesn\u2019t look like a CSS color`,hint:"Use a hex value like #dc143c, an rgb()/hsl() function, or a CSS color name."}))}if(typeof o.favicon=="string"&&o.favicon.trim()){let s=he.resolve(e,o.favicon.replace(/^\/+/,""));Oe.existsSync(s)||t.push(j({category:"config-asset",file:"velu.json",line:ge(r,"favicon"),title:`favicon not found: ${o.favicon}`,hint:"The path is relative to the project root."}))}let l=ae(o.logo);if(l){let s=new Map;for(let a of["light","dark"]){let p=l[a];p&&s.set(p,[...s.get(p)||[],a])}for(let[a,p]of s)if(!Oe.existsSync(he.resolve(e,a.replace(/^\/+/,"")))){let c=p.length===2?"logo":`logo (${p[0]})`;t.push(j({category:"config-asset",file:"velu.json",line:pt(r,a),title:`${c} not found: ${a}`,hint:"The path is relative to the project root."}))}}if(o.navigation&&typeof o.navigation=="object"){let s;try{s=z(o.navigation)}catch(a){t.push(j({category:"config-nav",file:"velu.json",line:ge(r,"navigation"),title:"navigation could not be processed",detail:String(a.message||"")})),s=null}if(s){let{pageEntries:a,warnings:p}=B(s,e);for(let c of p){let u=/not found$/.test(c),b=/page "([^"]+)"/.exec(c),f=b?pt(r,b[1]):null;t.push(j({category:"config-nav",severity:u?"error":"warning",file:"velu.json",line:f,title:c,hint:u?"Create the .mdx file, or remove the page from navigation.":""}))}jo(s,r,t)}}return t}function jo(e,t,n){let r=new Set,o=i=>{if(!(!i||typeof i!="object")){if(i.language&&!r.has(i.language)){r.add(i.language);let l=String(i.language).toLowerCase();xo.validate(l)||n.push(j({category:"config-nav",severity:"warning",file:"velu.json",line:pt(t,i.language)||ge(t,"language"),title:`"${i.language}" is not a valid ISO 639-1 language code`,hint:'Use a two-letter code like "en", "fr", or "ja".'}))}for(let l of Object.values(i))Array.isArray(l)?l.forEach(o):l&&typeof l=="object"&&o(l)}};o(e)}var $o,wo,ft=A(()=>{J();V();pe();le();$o=he.dirname(bo(import.meta.url)),wo=he.resolve($o,"..","..","schema","velu.schema.json")});import To from"node:fs/promises";import Lo from"node:fs";import q from"node:path";import{fileURLToPath as Oo,pathToFileURL as _o}from"node:url";import{compile as Eo}from"@mdx-js/mdx";import Po from"remark-frontmatter";import Co from"remark-mdx-frontmatter";import Uo from"remark-gfm";import Fo from"rehype-slug";import{visit as No}from"unist-util-visit";function mt(){if(Ee)return Ee;let e=q.dirname(Oo(import.meta.url)),t=[q.resolve(e,"..","runtime","velu-ui"),q.resolve(e,"..","..","runtime","velu-ui"),q.resolve(e,"..","..","..","velu-ui","src")],n=null;for(let r of t){let o=q.join(r,"lib","component-schemas.js");if(Lo.existsSync(o)){n=o;break}}return Ee=n?import(_o(n).href).then(r=>r.validateProps).catch(()=>null):Promise.resolve(null),Ee}function Ro(e){let t={};for(let n of e.attributes||[])n.type==="mdxJsxAttribute"&&(n.value==null?t[n.name]=!0:typeof n.value=="string"&&(t[n.name]=n.value));return t}function Io(e,t){return()=>n=>{No(n,r=>{if((r.type==="mdxJsxFlowElement"||r.type==="mdxJsxTextElement")&&typeof r.name=="string"&&/^[A-Z]/.test(r.name)&&!r.name.includes(".")&&e.push({name:r.name,props:Ro(r),line:r.position?.start?.line??null,column:r.position?.start?.column??null}),r.type==="mdxjsEsm"&&typeof r.value=="string")for(let o of r.value.matchAll(/\b([A-Z][A-Za-z0-9_]*)\b/g))t.add(o[1])})}}async function Mo(e,t){let n=[],r;try{r=await To.readFile(t.fileAbsPath,"utf-8")}catch{return n}let o=q.relative(e,t.fileAbsPath).split(q.sep).join("/"),i=[],l=new Set;try{await Eo({value:r,path:t.fileAbsPath},{remarkPlugins:[Po,Co,Uo,ce,Io(i,l)],rehypePlugins:[Fo],providerImportSource:"@mdx-js/react"})}catch(c){return n.push(de(c,{projectDir:e,knownComponents:H,file:o})),n}let s=new Set(H),a=await mt(),p=new Set;for(let c of i)if(!l.has(c.name)){if(!s.has(c.name)){if(p.has(c.name))continue;p.add(c.name),n.push(j({category:"unknown-component",file:o,line:c.line,column:c.column,title:`<${c.name}> is not a built-in component`,hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:Te(c.name,H)}));continue}if(a){let u=a(c.name,c.props,{checkRequired:!1});u&&n.push(j({...u,file:o,line:c.line,column:c.column}))}}return n}async function fn(e,t){let n=t.filter(s=>s.exists),r=[],o=8,i=0;async function l(){for(;i<n.length;){let s=n[i++],a=await Mo(e,s);for(let p of a)r.push(p)}}return await Promise.all(Array.from({length:Math.min(o,n.length)},l)),r}var Ee,dt=A(()=>{Ke();J();lt();ut()});import ye from"node:fs";import gt from"node:path";import gn from"js-yaml";function ht(e,t,n){if(n>24||e===null||typeof e!="object")return n>24&&e&&typeof e=="object"?null:e;if(t.has(e))return null;t.add(e);let r;if(Array.isArray(e))r=e.map(o=>ht(o,t,n+1));else{r={};for(let[o,i]of Object.entries(e))r[o]=ht(i,t,n+1)}return t.delete(e),r}function hn(e){return gn.dump(ht(e,new Set,0),{noRefs:!0,lineWidth:100,skipInvalid:!0})}function yn(e){let t=String(e).replace(/\.md$/i,"");return t===""||t==="/"||t==="/index"?"/":t.replace(/\/+$/,"")||"/"}function zo(e){return e==="/"?"/index.md":`${e}.md`}function yt(e,t){if(t==="api")return`# ${mn}
|
|
109
|
+
${e}`;let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),r=`> ${mn}
|
|
110
110
|
|
|
111
|
-
`;return n?e.slice(0,n[0].length)+r+e.slice(n[0].length):r+e}function
|
|
112
|
-
`)}async function
|
|
111
|
+
`;return n?e.slice(0,n[0].length)+r+e.slice(n[0].length):r+e}function Vo(e){return e.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"")}function Go(e){try{let t=ye.readFileSync(e,"utf-8").match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return{};let n=gn.load(t[1]);return n&&typeof n=="object"?n:{}}catch{return{}}}async function te(e){let t={};try{t=JSON.parse(ye.readFileSync(gt.join(e,"velu.json"),"utf-8"))}catch{return{name:gt.basename(e),baseUrl:"",pages:[]}}let n=t.name??gt.basename(e),r=typeof process.env.VELU_SITE_URL=="string"?process.env.VELU_SITE_URL.replace(/\/+$/,""):"",o=R(t.api),i=t.navigation??{},l={};try{let u=await Ae(t.navigation??{},{targetDir:e,api:o});i=u.nav,l=u.ops}catch(u){console.warn(`[velu] openapi: ${u.message}`)}let s=z(i),{pageEntries:a}=B(s,e),p=new Map(a.map(u=>[u.url,u])),c=[];for(let u of K(s)){if(!u.url)continue;let b=u.ancestors.filter(h=>h.kind==="group").pop(),f=u.ancestors.filter(h=>h.kind==="tab").pop(),x=b?.label||f?.label||"Pages",d=u.ancestors.filter(h=>h.kind==="tab"||h.kind==="group").map(h=>h.label),O=u.ancestors.filter(h=>h.kind==="language").pop()?.code||null;if(u.node?.api){let h=l[u.pagePath];if(!h)continue;let w=h.title||dn(u.url);c.push({url:u.url,title:w,description:h.description||"",group:x,breadcrumb:[...d,w],lang:O,frontmatter:{title:h.title,description:h.description},source:{kind:"api",segment:h.segment}})}else{let h=p.get(u.url);if(!h||!h.exists)continue;let w=Go(h.fileAbsPath),U=w.title||dn(u.url);c.push({url:u.url,title:U,description:w.description||"",group:x,breadcrumb:[...d,U],lang:O,frontmatter:w,source:{kind:"mdx",fileAbsPath:h.fileAbsPath}})}}return{name:n,baseUrl:r,pages:c}}function Ue(e){return new Map(e.pages.map(t=>[t.url,{...t.source,title:t.title}]))}async function Jo(e){return Ue(await te(e))}async function vt(e,t,n){let o=(n||await Jo(e)).get(t);if(!o)return null;if(o.kind==="mdx")try{return{body:ye.readFileSync(o.fileAbsPath,"utf-8"),contentType:"text/markdown; charset=utf-8",kind:"mdx"}}catch{return null}return o.segment?{body:hn(o.segment),contentType:"text/yaml; charset=utf-8",kind:"api"}:null}async function vn(e,t){let n=t||await te(e),r=s=>n.baseUrl?n.baseUrl+s:s,o=[`# ${n.name}`,"",`> Documentation index for ${n.name}. Append \`.md\` to any page URL (or send \`Accept: text/markdown\`) for its Markdown; fetch ${Ce} for the whole site in one document.`,""],i=[],l=new Map;for(let s of n.pages)l.has(s.group)||(l.set(s.group,[]),i.push(s.group)),l.get(s.group).push(s);for(let s of i){o.push(`## ${s}`,"");for(let a of l.get(s))o.push(`- [${a.title}](${r(zo(a.url))})${a.description?`: ${a.description}`:""}`);o.push("")}return o.join(`
|
|
112
|
+
`)}async function bn(e,t){let n=t||await te(e),r=[`# ${n.name}`,"",`> Full documentation \u2014 every page concatenated. Index: ${Q}`];for(let o of n.pages)if(r.push("","---","",`# ${o.title}`,`Source: ${o.url}`,""),o.source.kind==="mdx")try{r.push(Vo(ye.readFileSync(o.source.fileAbsPath,"utf-8")).trim())}catch{}else o.source.segment&&r.push("```yaml",hn(o.source.segment).trim(),"```");return r.join(`
|
|
113
113
|
`)+`
|
|
114
|
-
`}
|
|
114
|
+
`}async function xn(e,t){let n=t||await te(e),r=n.baseUrl||"",o=[];for(let s of n.pages){if(s.source.kind!=="mdx")continue;let a="";try{a=ye.readFileSync(s.source.fileAbsPath,"utf-8")}catch{continue}let p=/<Update\b([^>]*)>([\s\S]*?)<\/Update>/gi,c;for(;c=p.exec(a);){let u=c[1]||"",b=c[2]||"",f=Pe(u,"label")||Pe(u,"date")||"Update",x=Pe(u,"description")||qo(b)||f,d=`${r}${s.url}#${Ho(f)}`,O=Pe(u,"date")||f,h=new Date(O),w=Number.isNaN(h.getTime())?null:h.toUTCString();o.push({title:f,link:d,description:x,pubDate:w})}}if(!o.length)return null;let i=r||"/",l=o.map(s=>` <item>
|
|
115
|
+
<title>${D(s.title)}</title>
|
|
116
|
+
<link>${D(s.link)}</link>
|
|
117
|
+
<guid isPermaLink="true">${D(s.link)}</guid>
|
|
118
|
+
`+(s.pubDate?` <pubDate>${s.pubDate}</pubDate>
|
|
119
|
+
`:"")+` <description>${D(s.description)}</description>
|
|
120
|
+
</item>`).join(`
|
|
121
|
+
`);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
122
|
+
<rss version="2.0">
|
|
123
|
+
<channel>
|
|
124
|
+
<title>${D(n.name)} \u2014 Changelog</title>
|
|
125
|
+
<link>${D(i)}</link>
|
|
126
|
+
<description>${D(`Product updates and announcements for ${n.name}.`)}</description>
|
|
127
|
+
<generator>Velu</generator>
|
|
128
|
+
`+l+`
|
|
129
|
+
</channel>
|
|
130
|
+
</rss>
|
|
131
|
+
`}var Q,Ce,Bo,ee,mn,dn,D,Ho,Pe,qo,$n=A(()=>{V();pe();le();ot();Q="/llms.txt",Ce="/llms-full.txt",Bo=`<${Q}>; rel="llms-txt", <${Ce}>; rel="llms-full-txt"`,ee={Link:Bo,"X-Llms-Txt":Q},mn=`Full documentation index: ${Q}`;dn=e=>(e.split("/").filter(Boolean).pop()||"Home").replace(/[-_]+/g," ").replace(/\b\w/g,n=>n.toUpperCase());D=e=>String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),Ho=e=>`update-${String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"item"}`,Pe=(e,t)=>{let n=e.match(new RegExp(`${t}\\s*=\\s*["']([^"']*)["']`,"i"));return n?n[1]:void 0},qo=e=>String(e||"").replace(/```[\s\S]*?```/g,"").replace(/<[^>]+>/g," ").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[#*`_>]/g,"").replace(/\s+/g," ").trim().slice(0,500)});var On={};be(On,{startDevServer:()=>li});import wn from"node:fs/promises";import ne from"node:fs";import Do from"node:http";import{spawn as Yo}from"node:child_process";import _ from"node:path";import{fileURLToPath as Wo}from"node:url";import Xo from"chokidar";import Sn from"express";import{createServer as Ko,searchForWorkspaceRoot as Zo}from"vite";function ri(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`}" />`}function kn(e,t){let n=st(e,{color:!!process.stderr.isTTY});console.error(`
|
|
115
132
|
`+n+`
|
|
116
|
-
`),process.env.VELU_DEBUG&&t&&console.error(t)}function
|
|
117
|
-
`)}function
|
|
118
|
-
`+
|
|
119
|
-
`),
|
|
120
|
-
${
|
|
121
|
-
</style>`,
|
|
122
|
-
`),
|
|
133
|
+
`),process.env.VELU_DEBUG&&t&&console.error(t)}function An(){try{return JSON.parse(ne.readFileSync(_.join(Fe,"package.json"),"utf8")).version||"unknown"}catch{return"unknown"}}function oi(e,t){let n=_.resolve(e,".velu"),r=_.resolve(n,".velu-version"),o=null;try{o=ne.readFileSync(r,"utf8").trim()}catch{}if(o!==t){if(o!==null)try{ne.rmSync(_.join(n,"vite-cache"),{recursive:!0,force:!0}),console.log("[velu] new version detected \u2014 refreshing the preview cache\u2026")}catch{}try{ne.mkdirSync(n,{recursive:!0}),ne.writeFileSync(r,t)}catch{}}}async function jn(e){try{return await _t(e)}catch{return Xe({},_.basename(e))}}async function Tn(e,t){let n=await e.moduleGraph.getModuleByUrl(t,!0),r=new Map,o=new Set;async function i(l){if(!(!l||o.has(l.url))){if(o.add(l.url),l.id&&ei.test(l.id)){let s=l.url.includes("?")?"&":"?",a=await e.transformRequest(`${l.url}${s}direct`);a?.code&&r.set(l.url,a.code)}for(let s of l.importedModules)await i(s)}}return await i(n),[...r.values()].join(`
|
|
134
|
+
`)}function ai(e,t,n){let r=()=>{process.stdout.isTTY&&!process.env.VELU_NO_BELL&&process.stdout.write("\x07")},o=process.stdout.isTTY,i=x=>o&&process.stdout.write(`\x1B]${x}\x1B\\`),l=()=>{i(`0;\u23F3 ${t}`),i("9;4;3;0")},s=()=>{i(`0;${t}`),i("9;4;0;0")};o&&process.once("exit",()=>i("9;4;0;0")),l();let a=n&&n!=="unknown"?`v${n}`:"";if(!e)return console.log(`Starting Velu${a?" "+a:""}\u2026`),{ready:x=>{console.log(`Velu${a?" "+a:""} ready \u2192 ${x}`),s(),r()}};let p="\x1B[38;2;220;20;60m",c="\x1B[0m",u="\x1B[2m";console.log("");for(let x of ii)console.log(`${p}${x}${c}`);a&&console.log(` ${u}${a}${c}`),console.log("");let b=null;try{b=Yo(process.execPath,["-e",si],{stdio:["ignore","inherit","ignore"]}),b.on("error",()=>{})}catch{}let f=()=>{if(b){try{b.kill()}catch{}b=null}};return process.once("exit",f),{ready:x=>{f(),process.stdout.write("\x1B[2K\r"),console.log(` \x1B[32m\u2713${c} Velu${a?" "+a:""} ready \u2192 \x1B[36m${x}${c}`),s(),r()}}}async function li(e){let t=!!process.env.VELU_PROFILE,n=performance.now(),r=(v,m)=>t&&console.log(`[velu-profile] ${v}: ${(performance.now()-m).toFixed(0)}ms`),o=ai(!!process.stdout.isTTY&&!t,_.basename(e),An()),i=await jn(e),l=s();function s(){let m=_e(e).filter(g=>g.severity==="error"&&(g.category==="config-json"||g.category==="config-schema"));return m.length&&console.error(`
|
|
135
|
+
`+Le(m,{color:!!process.stderr.isTTY})+`
|
|
136
|
+
`),m}let a=e;try{a=ne.realpathSync(e)}catch{}let p=0,c=v=>{let m=performance.now();if(m-p<500)return;p=m;let g=de(v,{projectDir:a,knownComponents:H});kn(g,v)};process.on("unhandledRejection",c),process.on("uncaughtException",c);let u=Number(process.env.PORT)||8358,b=await mt();oi(e,An());let f=Sn(),x=Do.createServer(f),d=await Ko({...ln({targetDir:e,VITE_ROOT:Fe,validateProps:b}),appType:"custom",logLevel:t?"info":"warn",server:{middlewareMode:!0,fs:{allow:[Zo(Fe),e,a]},hmr:{server:x}}});r("vite server created",n),f.use(d.middlewares),f.get(new RegExp(`^${We}(\\.[a-z0-9]+)?$`,"i"),async(v,m)=>{if(!i.favicon)return m.status(404).end();let g=_.resolve(e,i.favicon.replace(/^\//,""));m.sendFile(g,y=>{y&&m.status(404).end()})});let O=v=>(m,g)=>{let y=i.logo?.[v];if(!y)return g.status(404).end();g.sendFile(_.resolve(e,y.replace(/^\//,"")),T=>{T&&g.status(404).end()})};f.get(we,O("light")),f.get(Se,O("dark")),f.post("/@velu-api-proxy",Sn.json({limit:"8mb"}),async(v,m)=>{let{method:g="GET",url:y,headers:T={},body:S}=v.body||{};if(typeof y!="string"||!/^https?:\/\//i.test(y))return m.status(400).json({error:"A valid http(s) target URL is required."});try{let k=await fetch(y,{method:g,headers:T,body:S!=null&&S!==""?S:void 0}),N=await k.text(),Y=k.headers.get("content-type")||"",L={};k.headers.forEach((re,Ie)=>{L[Ie]=re});let M=N;if(/json/i.test(Y))try{M=JSON.parse(N)}catch{}m.json({status:k.status,statusText:k.statusText,headers:L,body:M})}catch(k){m.json({error:`Request failed: ${k.message}`})}});let h=null,w=async()=>h||=await te(e);f.get(/\.md$/i,async(v,m,g)=>{try{let y=await w(),T=await vt(e,yn(decodeURIComponent(v.path)),Ue(y));if(!T)return g();m.status(200).set({"Content-Type":T.contentType,...ee}).end(yt(T.body,T.kind))}catch{g()}}),f.get(Q,async(v,m,g)=>{try{let y=await vn(e,await w());m.status(200).set({"Content-Type":"text/plain; charset=utf-8",...ee}).end(y)}catch{g()}}),f.get(Ce,async(v,m,g)=>{try{let y=await bn(e,await w());m.status(200).set({"Content-Type":"text/plain; charset=utf-8",...ee}).end(y)}catch{g()}}),f.get("/rss.xml",async(v,m,g)=>{try{let y=await xn(e,await w());if(!y)return g();m.status(200).set({"Content-Type":"application/rss+xml; charset=utf-8"}).end(y)}catch{g()}}),f.use("*",async(v,m,g)=>{let y=v.originalUrl,T=performance.now();if(/text\/markdown/i.test(v.headers.accept||""))try{let S=await w(),k=await vt(e,Nt(y),Ue(S));if(k)return m.status(200).set({"Content-Type":k.contentType,...ee}).end(yt(k.body,k.kind))}catch{}if(l.length)return m.status(200).set({"Content-Type":"text/html"}).end(ct(l,{title:"Fix velu.json to continue"}));try{let S=performance.now(),k=await wn.readFile(Ln,"utf-8");k=await d.transformIndexHtml(y,k),r(`transformIndexHtml ${y}`,S);let N="/src/runtime/server-entry.jsx";S=performance.now();let{render:Y}=await d.ssrLoadModule(N);r(`ssrLoadModule ${y} (1st req includes dep pre-bundle)`,S),S=performance.now();let L=await Y(y);r(`render ${y}`,S),S=performance.now();let M=await Tn(d,N);r(`collectSsrCss ${y}`,S);let re=M?`<style data-velu-ssr>${M}</style>`:"",Ie=`<style data-velu-config>
|
|
137
|
+
${Et(i)}
|
|
138
|
+
</style>`,Fn=ti.has(i.font.family)?"":ri(i.font.family),ve=Ot(i),Nn=ve?`<link rel="icon"${ve.type?` type="${ve.type}"`:""} href="${ve.url}" />`:"",Rn=[re,Ie,Fn,Nn].filter(Boolean).join(`
|
|
139
|
+
`),In=k.replace("<!--app-title-->",ni(i.name)).replace("<!--app-head-->",Rn).replace("<!--app-html-->",L);m.status(200).set({"Content-Type":"text/html",...ee}).end(In),r(`TOTAL ${y}`,T)}catch(S){d.ssrFixStacktrace(S);let k=de(S,{projectDir:a,knownComponents:H});kn(k,S),m.status(200).set({"Content-Type":"text/html"}).end(ct([k]))}}),Xo.watch(e,{ignoreInitial:!0,ignored:/(^|[\\/])(node_modules|\.git|\.velu)([\\/]|$)/,awaitWriteFinish:{stabilityThreshold:100,pollInterval:20}}).on("all",async(v,m)=>{console.log(`[velu-cli] content ${v}: ${_.relative(e,m)}`);let g=_.basename(m)==="velu.json",y=m.endsWith(".mdx"),T=g||y&&(v==="add"||v==="unlink");if((T||y||/\.(ya?ml|json)$/i.test(m))&&(h=null),g&&(i=await jn(e),l=s()),T)d.moduleGraph.invalidateAll();else if(y){let S=m.split(_.sep).join("/"),k=d.moduleGraph.getModulesByFile(S);if(k)for(let N of k)d.moduleGraph.invalidateModule(N)}d.ws.send({type:"full-reload"})});async function $(v){let m=new Set,g=12,y=0,T=[],S=()=>y<g?(y+=1,Promise.resolve()):new Promise(L=>T.push(L)).then(()=>{y+=1}),k=()=>{y-=1,T.shift()?.()},N=L=>/[\\/]\.velu[\\/]vite-cache[\\/]|[\\/]deps[\\/]/.test(L)||/[\\/]node_modules[\\/]/.test(L)&&!/velu-ui/.test(L);async function Y(L){if(!(!L||m.has(L)||N(L))){m.add(L);try{await S();try{await d.transformRequest(L,{ssr:!1})}finally{k()}let M=await d.moduleGraph.getModuleByUrl(L,!1);M?.importedModules?.size&&await Promise.all([...M.importedModules].map(re=>Y(re.url)))}catch{}}}return await Y(v),m.size}x.listen(u,async()=>{let v=performance.now(),m=0;try{let{render:g}=await d.ssrLoadModule("/src/runtime/server-entry.jsx");await $("/src/runtime/client-entry.jsx"),typeof d.waitForRequestsIdle=="function"&&await d.waitForRequestsIdle();let[y]=await Promise.allSettled([$("/src/runtime/client-entry.jsx"),g("/"),d.transformIndexHtml("/",await wn.readFile(Ln,"utf-8")),Tn(d,"/src/runtime/server-entry.jsx")]).then(T=>T.map(S=>S.status==="fulfilled"?S.value:0));m=y}catch(g){t&&console.log("[velu-profile] warmup error:",g?.message)}r(`cold-start warm-up (${m} client modules)`,v),o.ready(`http://localhost:${u}`)})}var Qo,ei,ti,ni,Fe,Ln,ii,si,_n=A(()=>{le();cn();lt();pn();J();ut();ft();dt();$n();V();Qo=_.dirname(Wo(import.meta.url)),ei=/\.(css|less|sass|scss|styl|stylus|pcss|postcss)(\?|$)/,ti=new Set(["Google Sans Flex","Google Sans Code","Outfit"]),ni=e=>String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");Fe=_.resolve(Qo,".."),Ln=_.resolve(Fe,"src","template.html"),ii=[" _ __ __","| | / /__ / /_ __","| | / / _ \\/ / / / /","| |/ / __/ / /_/ /","|___/\\___/_/\\__,_/"],si="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);"});var Pn={};be(Pn,{default:()=>fi,runValidate:()=>En});import ci from"node:fs";import ui from"node:path";function pi(e){try{let t=JSON.parse(ci.readFileSync(ui.join(e,"velu.json"),"utf-8"));if(!t.navigation||typeof t.navigation!="object")return[];let n=z(t.navigation);return B(n,e).pageEntries}catch{return[]}}async function En(e){let t=_e(e),n=pi(e),r=await fn(e,n),o=[...t,...r],i=!!process.stdout.isTTY;return console.log(Le(o,{color:i})),o.some(s=>s.severity!=="warning"&&s.severity!=="info")?1:0}var fi,Cn=A(()=>{V();pe();ft();dt();J();fi=En});import Ne from"node:path";import E from"node:process";import{readFileSync as mi}from"node:fs";var[,,Un,Re]=E.argv;function di(){try{return JSON.parse(mi(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}function gi(){let e=E.argv.slice(3);for(let t=0;t<e.length;t++){let n=e[t];if(n==="--out"){t++;continue}if(!n.startsWith("-"))return n}}async function hi(){switch(Un){case"--version":case"-v":case"version":{console.log(di());break}case"init":{Re||(console.error("Usage: velu init <project-name>"),E.exit(1));let e=Re,t=Ne.resolve(E.cwd(),e),{initProject:n}=await Promise.resolve().then(()=>($t(),xt));await n(t,e);break}case"dev":{let{maybeAutoUpdate:e}=await Promise.resolve().then(()=>(Je(),Ge));await e();let t=Ne.resolve(E.cwd(),Re??"."),{startDevServer:n}=await Promise.resolve().then(()=>(_n(),On));await n(t);break}case"update":{let{updateCommand:e}=await Promise.resolve().then(()=>(Je(),Ge));await e();break}case"validate":{let e=Ne.resolve(E.cwd(),Re??"."),{runValidate:t}=await Promise.resolve().then(()=>(Cn(),Pn)),n=await t(e);E.exit(n);break}case"build":{let e=Ne.resolve(E.cwd(),gi()??"."),t=E.argv.indexOf("--out"),n=t>-1?E.argv[t+1]:void 0,r=new URL(["..","src","build","index.js"].join("/"),import.meta.url).href,o=l=>import(l),i;try{({runBuild:i}=await o(r))}catch{console.error("velu build is an internal command, not available in this distribution."),E.exit(1)}await i(e,{out:n});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"),console.log(" velu validate [dir] check velu.json + content for problems"),console.log(" velu update update velu to the latest version"),E.exit(Un?1:0)}}hi().catch(e=>{console.error(E.env.VELU_DEBUG?e:`Error: ${e.message}`),E.exit(1)});
|