@veluai/velu 0.2.24 → 0.2.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -80
- package/dist/cli.js +44 -44
- package/package.json +64 -64
- package/runtime/velu-ui/base.css +320 -320
- package/runtime/velu-ui/components/Accordion.jsx +64 -64
- package/runtime/velu-ui/components/ApiClient.jsx +207 -207
- package/runtime/velu-ui/components/ApiField.jsx +87 -87
- package/runtime/velu-ui/components/ApiPath.jsx +63 -63
- package/runtime/velu-ui/components/ApiReferencePage.jsx +384 -384
- package/runtime/velu-ui/components/ApiSamples.jsx +36 -36
- package/runtime/velu-ui/components/ApiSidebar.jsx +125 -125
- package/runtime/velu-ui/components/AskBar.jsx +71 -71
- package/runtime/velu-ui/components/Callout.jsx +114 -114
- package/runtime/velu-ui/components/Card.jsx +131 -131
- package/runtime/velu-ui/components/ChangelogFilters.jsx +75 -75
- package/runtime/velu-ui/components/Chatbot.jsx +972 -972
- package/runtime/velu-ui/components/CodeBlock.jsx +375 -375
- package/runtime/velu-ui/components/Columns.jsx +56 -56
- package/runtime/velu-ui/components/ContextMenu.jsx +327 -327
- package/runtime/velu-ui/components/ErrorCard.jsx +138 -138
- package/runtime/velu-ui/components/Field.jsx +81 -81
- package/runtime/velu-ui/components/Image.jsx +163 -163
- package/runtime/velu-ui/components/Logo.jsx +31 -31
- package/runtime/velu-ui/components/MethodBadge.jsx +31 -31
- package/runtime/velu-ui/components/NavSelect.jsx +108 -108
- package/runtime/velu-ui/components/NotFound.jsx +63 -63
- package/runtime/velu-ui/components/PageFeedback.jsx +219 -219
- package/runtime/velu-ui/components/PageFooter.jsx +145 -145
- package/runtime/velu-ui/components/PageHeader.jsx +422 -422
- package/runtime/velu-ui/components/PageNav.jsx +77 -77
- package/runtime/velu-ui/components/PoweredBy.jsx +51 -51
- package/runtime/velu-ui/components/Prompt.jsx +115 -115
- package/runtime/velu-ui/components/Search.jsx +460 -460
- package/runtime/velu-ui/components/Sidebar.jsx +246 -246
- package/runtime/velu-ui/components/SocialLinks.jsx +90 -90
- package/runtime/velu-ui/components/Steps.jsx +65 -65
- package/runtime/velu-ui/components/ThemeToggle.jsx +48 -48
- package/runtime/velu-ui/components/Toc.jsx +537 -537
- package/runtime/velu-ui/components/TocBar.jsx +195 -195
- package/runtime/velu-ui/components/Tree.jsx +87 -87
- package/runtime/velu-ui/components/TryItBar.jsx +102 -102
- package/runtime/velu-ui/components/Update.jsx +92 -92
- package/runtime/velu-ui/components/accordion.css +92 -92
- package/runtime/velu-ui/components/api-page.css +208 -208
- package/runtime/velu-ui/components/api.css +635 -635
- package/runtime/velu-ui/components/ask-bar.css +103 -94
- package/runtime/velu-ui/components/card.css +105 -105
- package/runtime/velu-ui/components/changelog-filters.css +43 -43
- package/runtime/velu-ui/components/chatbot.css +687 -687
- package/runtime/velu-ui/components/code-block.css +263 -263
- package/runtime/velu-ui/components/context-menu.css +199 -199
- package/runtime/velu-ui/components/docs-layout.css +822 -822
- package/runtime/velu-ui/components/field.css +82 -82
- package/runtime/velu-ui/components/image.css +237 -237
- package/runtime/velu-ui/components/nav-select.css +157 -157
- package/runtime/velu-ui/components/not-found.css +94 -94
- package/runtime/velu-ui/components/page-feedback.css +261 -261
- package/runtime/velu-ui/components/page-footer.css +130 -130
- package/runtime/velu-ui/components/page-header.css +558 -558
- package/runtime/velu-ui/components/page-nav.css +50 -50
- package/runtime/velu-ui/components/powered-by.css +92 -92
- package/runtime/velu-ui/components/prompt.css +99 -99
- package/runtime/velu-ui/components/search.css +307 -307
- package/runtime/velu-ui/components/sidebar.css +205 -205
- package/runtime/velu-ui/components/steps.css +77 -77
- package/runtime/velu-ui/components/theme-toggle.css +102 -102
- package/runtime/velu-ui/components/toc-bar.css +234 -234
- package/runtime/velu-ui/components/tree.css +49 -49
- package/runtime/velu-ui/components/update.css +111 -111
- package/runtime/velu-ui/index.js +58 -58
- package/runtime/velu-ui/lib/api-send.js +118 -118
- package/runtime/velu-ui/lib/brand-icons.jsx +103 -103
- package/runtime/velu-ui/lib/component-schemas.js +100 -100
- package/runtime/velu-ui/lib/copyText.js +64 -64
- package/runtime/velu-ui/lib/docs-assistant.js +273 -273
- package/runtime/velu-ui/lib/lang-icons.jsx +147 -147
- package/runtime/velu-ui/lib/page-feedback.js +72 -72
- package/runtime/velu-ui/lib/pagefind.js +116 -116
- package/runtime/velu-ui/lib/prism-langs.js +957 -957
- package/runtime/velu-ui/lib/prism-loader.js +74 -74
- package/runtime/velu-ui/lib/resolveIcon.jsx +29 -29
- package/runtime/velu-ui/lib/scrollIntoNearestView.js +66 -66
- package/runtime/velu-ui/mdx-components.jsx +107 -107
- package/runtime/velu-ui/primitives/Cluster.jsx +49 -49
- package/runtime/velu-ui/primitives/Stack.jsx +63 -63
- package/runtime/velu-ui/primitives/Switcher.jsx +57 -57
- package/runtime/velu-ui/primitives/stack.css +3 -3
- package/runtime/velu-ui/primitives/switcher.css +25 -25
- package/runtime/velu-ui/styles.css +48 -48
- package/runtime/velu-ui/tokens.css +4 -4
- package/schema/velu.schema.json +419 -419
- package/src/lib/extract-mdx-error.js +170 -170
- package/src/lib/issues.js +159 -159
- package/src/lib/known-components.js +35 -35
- package/src/navigation.js +459 -459
- package/src/runtime/App.jsx +1754 -1754
- package/src/runtime/ErrorBoundary.jsx +54 -54
- package/src/runtime/client-entry.jsx +27 -27
- package/src/runtime/server-entry.jsx +24 -24
- package/src/template.html +48 -48
- package/templates/starter/ai-tools/claude-code.mdx +26 -26
- package/templates/starter/ai-tools/cursor.mdx +17 -17
- package/templates/starter/api-reference/introduction.mdx +43 -43
- package/templates/starter/development.mdx +19 -19
- package/templates/starter/essentials/code.mdx +29 -29
- package/templates/starter/essentials/images.mdx +29 -29
- package/templates/starter/essentials/markdown.mdx +25 -25
- package/templates/starter/essentials/navigation.mdx +39 -39
- package/templates/starter/essentials/settings.mdx +30 -30
- package/templates/starter/favicon.svg +6 -6
- package/templates/starter/index.mdx +31 -31
- package/templates/starter/openapi.json +160 -160
- package/templates/starter/quickstart.mdx +31 -31
- package/templates/starter/velu.json +40 -40
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 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} \\
|
|
2
|
+
var Jn=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var we=(e,t)=>{for(var n in t)Jn(e,n,{get:t[n],enumerable:!0})};var jt={};we(jt,{initProject:()=>Wn});import Z from"node:fs/promises";import Q from"node:path";import{fileURLToPath as Hn}from"node:url";async function Wn(e,t){try{if((await Z.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 Z.mkdir(e,{recursive:!0}),await Z.cp(qn,e,{recursive:!0});let n=Q.join(e,"velu.json"),r=JSON.parse(await Z.readFile(n,"utf-8"));r.name=t,await Z.writeFile(n,JSON.stringify(r,null,2)+`
|
|
3
|
+
`,"utf-8");let o=await At(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 At(e,t=e,n=[]){let r=await Z.readdir(e,{withFileTypes:!0});for(let o of r){let i=Q.join(e,o.name);o.isDirectory()?await At(i,t,n):n.push(Q.relative(t,i).split(Q.sep).join("/"))}return n.sort()}var Dn,qn,Tt=A(()=>{Dn=Q.dirname(Hn(import.meta.url)),qn=Q.resolve(Dn,"..","templates","starter")});var qe={};we(qe,{currentVersion:()=>Je,getLatestVersion:()=>De,isNewer:()=>He,maybeAutoUpdate:()=>lr,updateCommand:()=>ar});import{spawnSync as Ot}from"node:child_process";import{readFileSync as _t,writeFileSync as Yn,mkdirSync as Xn}from"node:fs";import{fileURLToPath as Kn}from"node:url";import{homedir as Zn,tmpdir as Qn}from"node:os";import Ge from"node:path";import I from"node:process";function Je(){try{return JSON.parse(_t(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}function rr(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 He(e,t){return!e||!t||t==="unknown"?!1:rr(e,t)>0}function Et(){let e=Ge.join(Zn()||Qn(),".velu");return Ge.join(e,"update-check.json")}function Lt(){try{return JSON.parse(_t(Et(),"utf8"))}catch{return null}}function or(e){try{let t=Et();Xn(Ge.dirname(t),{recursive:!0}),Yn(t,JSON.stringify(e))}catch{}}async function ir(){let e=`${er}/-/package/${Se}/dist-tags`,t=new AbortController,n=setTimeout(()=>t.abort(),nr);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 De({force:e=!1}={}){if(!e){let n=Lt();if(n?.latest&&Date.now()-(n.checkedAt||0)<tr)return n.latest}let t=await ir();return t?(or({latest:t,checkedAt:Date.now()}),t):Lt()?.latest??null}function Pt(){let e=I.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=Kn(import.meta.url).replace(/\\/g,"/")}catch{}return t.includes("/pnpm/")?"pnpm":t.includes("/yarn/")||t.includes("/.yarn/")?"yarn":t.includes("/.bun/")?"bun":"npm"}function sr(e){let t=`${Se}@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 Ct(e){let[t,n]=sr(e);return Ot(t,n,{stdio:"inherit",shell:I.platform==="win32"}).status===0}async function ar(){let e=Je(),t=await De({force:!0});if(t&&!He(t,e)){console.log(`velu is already up to date (v${e}).`);return}let n=Pt();console.log(t?`Updating velu ${e} \u2192 ${t} (via ${n})\u2026`:`Could not reach the npm registry; installing ${Se}@latest (via ${n}) anyway\u2026`),Ct(n)?console.log('\u2713 Updated. Run "velu version" to confirm.'):(console.error("Update failed. You can update manually with:"),console.error(` npm install -g ${Se}@latest`),I.exitCode=1)}async function lr(){if(I.env.VELU_NO_UPDATE==="1"||I.env.VELU_UPDATED==="1"||!I.stdout.isTTY)return;let e=Je();if(e==="unknown")return;let t=null;try{t=await De()}catch{return}if(!He(t,e))return;let n=Pt();if(console.log(`
|
|
4
|
+
New velu version available: ${e} \u2192 ${t}. Updating\u2026`),!Ct(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=Ot(I.execPath,I.argv.slice(1),{stdio:"inherit",env:{...I.env,VELU_UPDATED:"1"}});I.exit(r.status??0)}var Se,er,tr,nr,We=A(()=>{Se="@veluai/velu",er="https://registry.npmjs.org",tr=720*60*1e3,nr=3e3});function Xe({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 ae(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:cr[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 Ye(e){return/^(https?:)?\/\//.test(e)||/^(mailto|tel):/.test(e)}function le(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:Ye(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:Ye(o)}:{kind:"button",label:r.label??"",href:o,external:Ye(o)}}return!t.length&&!n?null:{links:t,primary:n}}function Ke(e){if(e==null)return{options:[...Ut],display:"header"};if(typeof e!="object")return{options:[],display:"header"};let t=e.display==="toc"?"toc":"header",n=Array.isArray(e.options)?e.options:Ut,r=[];for(let o of n)typeof o=="string"?ur.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 z(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 ce(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 cr,ur,Ut,ke=A(()=>{cr={twitter:"x","x-twitter":"x"};ur=new Set(["copy","assistant","view","download-pdf","download-spec","chatgpt","claude","perplexity","grok","aistudio","devin","windsurf","mcp","add-mcp","cursor","vscode","devin-mcp"]),Ut=["copy","view","chatgpt","claude"]});import pr from"node:fs/promises";import Ze from"node:path";function Ft(e){if(!e.favicon)return null;let t=Ze.extname(e.favicon).toLowerCase();return{url:Qe+t,type:dr[t]||""}}function ue(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 gr(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 et(e={},t){let n=e.colors?.primary??fr;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:gr(e.seo),assistant:ce(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:z(e.api),logo:ue(e.logo),footer:ae(e.footer),navbar:le(e.navbar),font:{family:e.font?.family??mr},navigation:e.navigation??null}}async function Nt(e){let t=Ze.join(e,"velu.json"),n;try{n=await pr.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 et(r,Ze.basename(e))}function Rt(e){let{colors:t,font:n}=e;return Xe({light:t.light,dark:t.dark,family:n.family})}var fr,mr,Ae,je,Qe,dr,pe=A(()=>{ke();ke();fr="#dc143c",mr="Google Sans Flex",Ae="/@velu-logo-light",je="/@velu-logo-dark",Qe="/@velu-favicon",dr={".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 It}from"unist-util-visit";import{toString as hr}from"mdast-util-to-string";import yr from"github-slugger";import{valueToEstree as vr}from"estree-util-value-to-estree";function br(e){return`update-${String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"item"}`}function Mt(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 xr(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 fe(){return e=>{let t=new yr,n=[];It(e,"heading",a=>{let p=hr(a);n.push({depth:a.depth,id:t.slug(p),label:p})});let r=[],o=[],i=new Set;if(It(e,"mdxJsxFlowElement",a=>{if(a.name!=="Update")return;let p=Mt(a,"label")??Mt(a,"date");p&&r.push({id:br(p),label:p});for(let c of xr(a)){let u=c.trim().toLowerCase();c.trim()&&!i.has(u)&&(i.add(u),o.push(c.trim()))}}),r.length){zt(e,r),Bt(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})}zt(e,l.children)}}function zt(e,t){Bt(e,"toc",t)}function Bt(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:vr(n)}]}}]}}})}var tt=A(()=>{});import $r from"github-slugger";import wr from"iso-639-1";function kr(e){let t=String(e).toLowerCase();return wr.getNativeName(t)||e}function Te(e){return new $r().slug(String(e??""))}function Ar(e){let t=String(e).replace(/^\/+|\/+$/g,"").split("/").filter(Boolean);return t[t.length-1]==="index"&&t.pop(),"/"+t.join("/")}function Vt(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 G(e){let t={kind:"root",children:me(e??{})};return Ht(t.children),t}function me(e){let t=Array.isArray(e.anchors)?e.anchors.map(_r):[];if(Array.isArray(e.products))return[...t,...e.products.map(jr)];if(Array.isArray(e.versions))return[...t,...e.versions.map(Tr)];if(Array.isArray(e.languages))return[...t,...e.languages.map(Lr)];if(Array.isArray(e.tabs))return[...t,...e.tabs.map(Or)];let n=[...t];return Array.isArray(e.groups)&&n.push(...e.groups.map(Gt)),Array.isArray(e.pages)&&n.push(...e.pages.map(Jt)),n}function jr(e){return{kind:"product",label:e.name??e.product,slug:Te(e.product),icon:e.icon,color:e.color,default:!!e.default,children:me(e)}}function Tr(e){return{kind:"version",label:e.version,slug:Te(e.version),default:!!e.default,children:me(e)}}function Lr(e){let t=String(e.language);return{kind:"language",code:t,label:kr(t),slug:Te(t),default:!!e.default,children:me(e)}}function Or(e){return{kind:"tab",label:e.tab,slug:Te(e.tab),icon:e.icon,href:e.href,children:me(e)}}function _r(e){return{kind:"anchor",label:e.anchor,icon:e.icon,href:e.href,color:e.color}}function Gt(e){let t=(e.pages??[]).map(Jt);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 Jt(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}:Gt(e)}function Ht(e){for(let t of Sr){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&&Ht(t.children)}function ee(e){let t=[],n=(r,o,i)=>{if(r.kind==="page"){t.push({pagePath:r.pagePath,url:Er(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 Er(e,t){let n=[t.product,t.version,t.language].filter(Boolean),r=Ar(e).split("/").filter(Boolean);return"/"+[...n,...r].join("/")}var Sr,H=A(()=>{Sr=["product","version","language"]});import Pr from"node:fs";import Dt from"node:path";function J(e,t){let n=[],r=[],o=new Set;for(let i of ee(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=Dt.join(t,...l.split("/"))+".mdx",a=Pr.existsSync(s);a||n.push(`page "${i.pagePath}" \u2192 ${Dt.relative(t,s)} not found`),r.push({pagePath:i.pagePath,url:i.url,fileAbsPath:s,exists:a})}return{pageEntries:r,warnings:n}}var de=A(()=>{H()});function D(e){return!e||typeof e!="object"?e||{}:Array.isArray(e.allOf)?e.allOf.reduce((t,n)=>{let r=D(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?D(e.oneOf[0]):Array.isArray(e.anyOf)&&e.anyOf.length?D(e.anyOf[0]):e}function ge(e){let t=D(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`${ge(t.items||{})}[]`;let n=t.type||(t.properties?"object":"any");return t.format?`${n}<${t.format}>`:n}function te(e,t=0){let n=D(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]=te(i,t+1);return r}case"array":return[te(n.items||{},t+1)];case"integer":case"number":return 0;case"boolean":return!0;default:return Ur(n)}}function Ur(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 nt(e){let t=D(e);if(!t||t.type!=="object"||!t.properties)return t&&(t.type||t.items)?[{name:"body",type:ge(t),required:!1,description:t.description||""}]:[];let n=new Set(t.required||[]);return Object.entries(t.properties).map(([r,o])=>{let i=D(o);return{name:r,type:ge(i),required:n.has(r),description:i.description||"",enum:Array.isArray(i.enum)?i.enum:void 0,deprecated:i.deprecated||void 0}})}function Fr(e){let t=e.schema||{};return{name:e.name,in:e.in,required:e.in==="path"?!0:!!e.required,type:ge(t),description:e.description||"",enum:Array.isArray(t.enum)?t.enum:void 0,example:te(t),deprecated:e.deprecated||void 0}}function Wt(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 Nr(e){if(!e)return null;let t=Wt(e.content);if(!t)return null;let n=t.media.schema||{};return{required:!!e.required,description:e.description||"",contentType:t.contentType,fields:nt(n),example:t.media.example??te(n)}}function Rr(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,n])=>{let r=Wt(n?.content),o=r?.media?.schema||{};return{status:t,description:n?.description||"",contentType:r?.contentType||null,fields:r?nt(o):[],example:r?r.media.example??te(o):null}})}function Ir(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(Mr(i,l)))}return n.filter(Boolean)}function Mr(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 qt(e){return String(e).replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function zr(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(Fr(c));let p=r.security??e.globalSecurity;return{id:r.operationId?qt(r.operationId):`${t}-${qt(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:Ir(p,l),parameters:a,body:Nr(r.requestBody),responses:Rr(r.responses),servers:(i||[]).map(c=>c.url).filter(Boolean)}}function Br(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 y of c)for(let f of Object.keys(y||{}))l[f]&&(u[f]=l[f]);Object.keys(u).length&&(e.swagger?s.securityDefinitions=u:s.components={securitySchemes:u})}return s}function Yt(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 Cr){let u=s[c];!u||typeof u!="object"||(t.push(zr({method:c,path:l,op:u,sharedParams:a,servers:u.servers||p,globalSecurity:o,schemes:r})),n.push(Br(e,l,c,u,a,u.servers||p,r)))}}return{operations:t,segments:n}}function rt(e){let t=e.servers||(e.host?[{url:`https://${e.host}${e.basePath||""}`}]:[]),{operations:n,segments:r}=Yt(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 Cr,ot=A(()=>{Cr=["get","post","put","patch","delete","options","head","trace"]});import Vr from"@apidevtools/swagger-parser";async function Gr(e){return Vr.dereference(e)}async function Xt(e){return rt(await Gr(e))}var Kt=A(()=>{ot();ot()});function Jr(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 Hr(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 Dr(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(${it(e.body," ")})`),[`const res = await fetch('${e.url}', {`,t.join(`,
|
|
13
13
|
`),"});","const data = await res.json();"].join(`
|
|
14
|
-
`)}function
|
|
14
|
+
`)}function qr(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 = ${it(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 Wr(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 = ${it(e.body,"")}.to_json`),n.push("","response = http.request(request)","puts response.body"),n.join(`
|
|
19
|
+
`)}function Qt(e,{server:t,languages:n=st}={}){let r=Jr(e,{server:t});return n.filter(o=>Zt[o]).map(o=>({key:o,label:Yr[o],language:Xr[o],code:Zt[o](r)}))}var it,Zt,Yr,Xr,st,en=A(()=>{it=(e,t)=>JSON.stringify(e,null,2).split(`
|
|
20
20
|
`).map((n,r)=>r===0?n:t+n).join(`
|
|
21
|
-
`);
|
|
22
|
-
${
|
|
21
|
+
`);Zt={curl:Hr,javascript:Dr,python:qr,ruby:Wr},Yr={curl:"cURL",javascript:"JavaScript",python:"Python",ruby:"Ruby"},Xr={curl:"bash",javascript:"javascript",python:"python",ruby:"ruby"},st=["curl","javascript","python","ruby"]});function tn(e,t){if(!t||typeof t!="object")return e;let n=z(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 Kr(e,{base:t,api:n,ops:r}){let o=n?.server,i=n?.languages||st,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:y,segment:f})=>{let b=`${t}/${at(p)}/${y.id}`;return r[b]={operation:y,samples:Qt(y,{server:o||y.servers?.[0],languages:i}),segment:f,title:y.title,description:y.description,method:y.method,api:l},{apiPage:b,label:y.title,method:y.method}});a.push({group:p,pages:u})}return a}async function nn(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,y)=>{!u.servers?.length&&c?.length&&(u.servers=c),l.push({op:u,segment:p[y]})})}return Kr(l,{base:n,api:r,ops:o})}async function rn(e,t){if(!e||typeof e!="object")return e;if(typeof e.tab=="string"&&e.openapi){let r=at(e.tab),o=tn(t.api,e.api),i=await nn(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=at(e.group),o=tn(t.api,e.api),i=await nn(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=>rn(o,t))));return n}async function on(e,{api:t,loadOps:n}){let r={};return!e||typeof e!="object"?{nav:e,ops:r}:{nav:await rn(e,{api:t,loadOps:n,ops:r}),ops:r}}var at,sn=A(()=>{ke();en();at=e=>String(e??"").replace(/\{[^}]+\}/g,t=>t.slice(1,-1)).replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()||"x"});import Zr from"node:path";function Qr(e,t){return/^https?:\/\//.test(e)?e:Zr.resolve(t,e.replace(/^\/+/,""))}async function Le(e,{targetDir:t,api:n}={}){return on(e,{api:n,loadOps:r=>Xt(Qr(r,t))})}var lt=A(()=>{Kt();sn()});import eo from"node:fs";import he from"node:path";function cn(e){return{name:"velu-site",resolveId(t){return t===ln?an:null},async load(t){return t!==an?null:to(e)}}}async function to(e){let t={};try{t=JSON.parse(eo.readFileSync(he.join(e,"velu.json"),"utf-8"))}catch{}let n=z(t.api),r=t.navigation??{},o={};try{let $=await Le(t.navigation??{},{targetDir:e,api:n});r=$.nav,o=$.ops}catch($){console.warn(`[velu] openapi: ${$.message}`)}let i=G(r),{pageEntries:l,warnings:s}=J(i,e);for(let $ of s)console.warn(`[velu] nav: ${$}`);let a=ue(t.logo),p={name:t.name??he.basename(e),logo:a?{light:Ae,dark:je,href:a.href,mono:a.light===a.dark}:null,footer:ae(t.footer),navbar:le(t.navbar),contextual:Ke(t.contextual),assistant:ce(t.assistant)},c=[],u=[],y=0;for(let $ of l){if(!$.exists)continue;let P=JSON.stringify($.fileAbsPath.split(he.sep).join("/")),M=JSON.stringify(he.relative(e,$.fileAbsPath).split(he.sep).join("/")),E=`__p${y++}`;c.push(`import * as ${E} from ${P};`),u.push(` ${JSON.stringify($.url)}: { Component: ${E}.default, frontmatter: ${E}.frontmatter, toc: ${E}.toc, changelog: ${E}.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 b=[],g=[],_=[],d=!1,j=0;for(let $ of ee(i)){if(!$.node?.api)continue;let P=o[$.pagePath];if(!P)continue;d=!0;let M=`__op${j}`,E=`__samples${j}`,Be=`__api${j}`;j+=1,b.push(`const ${M} = ${JSON.stringify(P.operation)};`),b.push(`const ${E} = ${JSON.stringify(P.samples)};`),_.push(`{ id: ${JSON.stringify(P.operation.id)}, method: ${JSON.stringify(P.operation.method)}, title: ${JSON.stringify(P.operation.title)}, url: ${JSON.stringify($.url)}, operation: ${M}, samples: ${E}, api: ${JSON.stringify(P.api||{proxy:!0,server:null})} }`),g.push(`function ${Be}(){ return React.createElement(ApiReferencePage, { operation: ${M}, samples: ${E}, apiOperations: __apiOperations, api: ${JSON.stringify(P.api||{proxy:!0,server:null})} }); }`),u.push(` ${JSON.stringify($.url)}: { Component: ${Be}, frontmatter: { title: ${JSON.stringify(P.title)}, description: ${JSON.stringify(P.description)} }, toc: [], operation: ${M}, samples: ${E}, api: true },`)}d&&(b.push(`const __apiOperations = [
|
|
22
|
+
${_.join(`,
|
|
23
23
|
`)}
|
|
24
|
-
];`),
|
|
25
|
-
`)));let
|
|
24
|
+
];`),b.push(g.join(`
|
|
25
|
+
`)));let w=[];return d&&(w.push("import React from 'react';"),w.push("import { ApiReferencePage } from 'velu-ui';")),["// AUTO-GENERATED by vite-plugin-velu-site. Do not edit.",w.join(`
|
|
26
26
|
`),c.join(`
|
|
27
|
-
`),
|
|
27
|
+
`),b.join(`
|
|
28
28
|
`),"","export const pages = {",u.join(`
|
|
29
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
|
|
31
|
-
`))i.push(` ${l}`);return e.suggestion&&i.push(` ${
|
|
32
|
-
`)}function
|
|
33
|
-
`)}var
|
|
30
|
+
`)}var ln,an,un=A(()=>{H();de();pe();lt();ln="virtual:velu-site",an="\0"+ln});import{visit as no}from"unist-util-visit";function ro(e,t){let n=pn(e).replace(/[?#].*$/,""),r=pn(t).replace(/\/+$/,"");return r&&n.toLowerCase().startsWith(r.toLowerCase())?n.slice(r.length).replace(/^\/+/,""):null}function fn(e,t){return()=>(n,r)=>{typeof e=="function"&&no(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:ro(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 pn,mn=A(()=>{pn=e=>String(e||"").replace(/\\/g,"/")});import Oe from"node:path";import oo from"node:fs";import{createRequire as io}from"node:module";import so from"@tailwindcss/vite";import ao from"@vitejs/plugin-react";import lo from"@mdx-js/rollup";import co from"remark-frontmatter";import uo from"remark-mdx-frontmatter";import po from"remark-gfm";import fo from"rehype-slug";function mo(e){let n=io(import.meta.url).resolve("@mdx-js/react"),r=Oe.resolve(e,"runtime","velu-ui"),o=oo.existsSync(r)?r:Oe.resolve(e,"..","velu-ui","src");return[{find:"@mdx-js/react",replacement:n},{find:/^velu-ui$/,replacement:Oe.join(o,"index.js")},{find:/^velu-ui\//,replacement:o+"/"}]}function dn({targetDir:e,VITE_ROOT:t,validateProps:n,basePath:r}){return{root:t,base:r?`${r}/`:"/",plugins:[cn(e),lo({remarkPlugins:[co,uo,po,fe,fn(n,e)],rehypePlugins:[fo],providerImportSource:"@mdx-js/react"}),ao(),so({optimize:!1})],cacheDir:Oe.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:mo(t),dedupe:["react","react-dom","@mdx-js/react"]}}}var gn=A(()=>{tt();un();mn()});function T(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 go(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 _e(e,t=[]){if(!e)return null;let n=String(e).toLowerCase(),r=null,o=1/0;for(let l of t){let s=go(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 ho(e,t){return e==="warning"?N(t,F.yellow,"\u26A0"):e==="info"?N(t,F.cyan,"\u2139"):N(t,F.red,"\u2716")}function ut(e,{color:t=!1}={}){let n=ct[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(`${ho(e.severity,t)} ${N(t,F.bold,n)}`+(o?` ${N(t,F.dim,o)}`:"")),e.title&&i.push(` ${e.title}`),e.detail&&e.detail!==e.title&&i.push(` ${N(t,F.dim,e.detail)}`),e.frame)for(let l of String(e.frame).split(`
|
|
31
|
+
`))i.push(` ${l}`);return e.suggestion&&i.push(` ${N(t,F.cyan,`Did you mean <${e.suggestion}>?`)}`),e.hint&&i.push(` ${N(t,F.dim,`\u2192 ${e.hint}`)}`),i.join(`
|
|
32
|
+
`)}function Ee(e,{color:t=!1}={}){if(!e.length)return N(t,F.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(N(t,F.bold,s));for(let p of a)r.push(ut({...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(N(t,o?F.red:F.yellow,l)),r.join(`
|
|
33
|
+
`)}var ct,F,N,q=A(()=>{ct={"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"};F={reset:"\x1B[0m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",dim:"\x1B[2m",bold:"\x1B[1m"},N=(e,t,n)=>e?`${t}${n}${F.reset}`:n});function yo(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 pt(e,t){if(!e)return null;let n=hn(e).replace(/[?#].*$/,""),r=t?hn(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 vo(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 bo(e){let t=/\((\d+):(\d+)(?:-\d+:\d+)?\)\s*$/.exec(String(e||""));return t?{line:Number(t[1]),column:Number(t[2])}:null}function xo(e){return String(e||"").replace(/\s*\(\d+:\d+(?:-\d+:\d+)?\)\s*$/,"").trim()}function wo(e,t){if(!e||!t)return null;let n=String(e);return/node_modules|[\\/]vite[\\/]|@veluai[\\/]/.test(n)?null:n}function ye(e,t={}){let{projectDir:n="",knownComponents:r=[],file:o=null}=t,i=null;for(let d=e,j=0;d&&j<6;d=d.cause,j+=1)if(d.veluIssue){i=d.veluIssue;break}if(i)return T({...i,file:i.file||o});let l=yo(e)||{},s=l.message||String(e||""),a=/Expected component `([^`]+)` to be defined/.exec(s);if(a){let d=a[1],j=/referenced in your code at `(\d+):(\d+)/.exec(s),w=/\bin `([^`]+)`/.exec(s),$=w?pt(w[1],n):null;return T({category:"unknown-component",file:$||o,line:j?Number(j[1]):null,column:j?Number(j[2]):null,title:`<${d}> is not a built-in component`,detail:"",hint:"Components are built in \u2014 check the spelling and capitalization (you don\u2019t import them).",suggestion:_e(d,r)})}let p=l.loc||(l.line!=null?{line:l.line,column:l.column,file:l.file}:null)||bo(l.reason||s),c=l.id||p&&p.file||l.file||null,u=pt(c,n)||o,y=!!u&&pt(c,n)!=null,f=wo(l.frame,y||!!o),b=vo(xo(l.reason||s)),g=$o.test(s),_=l.source==="remark-frontmatter"||/\byaml\b|frontmatter/i.test(s)||p&&p.line===1&&/unexpected|expected/i.test(s)&&/---/.test(s);return p||g||f&&y?T({category:_?"frontmatter":"mdx-syntax",file:u,line:p?p.line:null,column:p?p.column:null,frame:f,title:b||(_?"Invalid frontmatter":"MDX syntax error"),detail:"",hint:_?"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)?T({category:"invalid-props",file:u,title:"A component received an invalid value",detail:b,hint:"Check the props/options you passed to a component on this page."}):T({category:"render-crash",file:u,title:"This page failed to render",detail:b,hint:"Set VELU_DEBUG=1 for the full stack trace."})}var hn,$o,ft=A(()=>{q();hn=e=>String(e).replace(/\\/g,"/");$o=/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 So(e){let t=ct[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">${B(t)}</span>`),r.push("</div>"),e.title&&r.push(`<div class="velu-err-title">${B(e.title)}</div>`),n&&r.push(`<a class="velu-err-loc" title="${B(n)}">${B(n)}</a>`),e.detail&&r.push(`<div class="velu-err-detail">${B(e.detail)}</div>`),e.frame&&r.push(`<pre class="velu-err-frame">${B(e.frame)}</pre>`),e.suggestion&&r.push(`<div class="velu-err-suggest">Did you mean <code><${B(e.suggestion)}></code>?</div>`),e.hint&&r.push(`<div class="velu-err-hint">${B(e.hint)}</div>`),r.push("</div>"),r.join("")}function mt(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(So).join(`
|
|
34
34
|
`);return`<!doctype html>
|
|
35
35
|
<html lang="en">
|
|
36
36
|
<head>
|
|
@@ -97,43 +97,43 @@ ${O.join(`,
|
|
|
97
97
|
<body>
|
|
98
98
|
<div class="velu-err-wrap">
|
|
99
99
|
<div class="velu-err-brand">velu</div>
|
|
100
|
-
<h1 class="velu-err-h">${
|
|
100
|
+
<h1 class="velu-err-h">${B(r)}</h1>
|
|
101
101
|
${o}
|
|
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
|
|
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 B,yn=A(()=>{q();B=e=>String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")});var W,dt=A(()=>{W=["Callout","Card","CardGroup","Accordion","AccordionGroup","Columns","Field","Prompt","Steps","Step","Tree","Folder","File","Update","Image","CodeBlock","CodeGroup","MethodBadge","ApiPath","TryItBar","ApiField","ApiClient","ApiSidebar"]});import Pe from"node:fs";import be from"node:path";import{fileURLToPath as ko}from"node:url";import Ao from"iso-639-1";function ve(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
|
|
106
|
+
`).length}function Lo(e,t){return t==null||t<0?null:e.slice(0,t).split(`
|
|
107
|
+
`).length}function gt(e,t){if(!t)return null;let n=e.indexOf(`"${t}"`);return n===-1?null:e.slice(0,n).split(`
|
|
108
|
+
`).length}function Oo(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,y){let f=o(p);if(f){if(f.oneOf){f.oneOf.some(g=>l(a,g))||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 g of f.required||[])g in a||r.push({path:c?`${c}.${g}`:g,key:g,message:`missing required "${g}"`});let b=f.properties||{};if(f.additionalProperties===!1)for(let g of Object.keys(a))g in b||r.push({path:c?`${c}.${g}`:g,key:g,message:`unknown field "${g}"`});for(let[g,_]of Object.entries(b))g in a&&s(a[g],_,c?`${c}.${g}`:g,g,y)}f.type==="array"&&Array.isArray(a)&&f.items&&a.forEach((b,g)=>s(b,f.items,`${c}[${g}]`,u,y))}}}function _o(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 Ce(e){let t=[],n=be.join(e,"velu.json"),r;try{r=Pe.readFileSync(n,"utf-8")}catch(s){return s.code==="ENOENT"?t.push(T({category:"config-json",file:"velu.json",title:"No velu.json found",hint:"Run `velu init <name>` to scaffold a project."})):t.push(T({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?Lo(r,Number(a[1])):null;return t.push(T({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(Pe.readFileSync(To,"utf-8"))}catch{}if(i)for(let s of Oo(o,i,i)){let a=/^unknown field/.test(s.message);t.push(T({category:"config-schema",severity:a?"warning":"error",file:"velu.json",line:ve(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&&!_o(a)&&t.push(T({category:"config-schema",severity:"warning",file:"velu.json",line:ve(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=be.resolve(e,o.favicon.replace(/^\/+/,""));Pe.existsSync(s)||t.push(T({category:"config-asset",file:"velu.json",line:ve(r,"favicon"),title:`favicon not found: ${o.favicon}`,hint:"The path is relative to the project root."}))}let l=ue(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(!Pe.existsSync(be.resolve(e,a.replace(/^\/+/,"")))){let c=p.length===2?"logo":`logo (${p[0]})`;t.push(T({category:"config-asset",file:"velu.json",line:gt(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=G(o.navigation)}catch(a){t.push(T({category:"config-nav",file:"velu.json",line:ve(r,"navigation"),title:"navigation could not be processed",detail:String(a.message||"")})),s=null}if(s){let{pageEntries:a,warnings:p}=J(s,e);for(let c of p){let u=/not found$/.test(c),y=/page "([^"]+)"/.exec(c),f=y?gt(r,y[1]):null;t.push(T({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.":""}))}Eo(s,r,t)}}return t}function Eo(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();Ao.validate(l)||n.push(T({category:"config-nav",severity:"warning",file:"velu.json",line:gt(t,i.language)||ve(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 jo,To,ht=A(()=>{q();H();de();pe();jo=be.dirname(ko(import.meta.url)),To=be.resolve(jo,"..","..","schema","velu.schema.json")});import Po from"node:fs/promises";import Co from"node:fs";import Y from"node:path";import{fileURLToPath as Uo,pathToFileURL as Fo}from"node:url";import{compile as No}from"@mdx-js/mdx";import Ro from"remark-frontmatter";import Io from"remark-mdx-frontmatter";import Mo from"remark-gfm";import zo from"rehype-slug";import{visit as Bo}from"unist-util-visit";function yt(){if(Ue)return Ue;let e=Y.dirname(Uo(import.meta.url)),t=[Y.resolve(e,"..","runtime","velu-ui"),Y.resolve(e,"..","..","runtime","velu-ui"),Y.resolve(e,"..","..","..","velu-ui","src")],n=null;for(let r of t){let o=Y.join(r,"lib","component-schemas.js");if(Co.existsSync(o)){n=o;break}}return Ue=n?import(Fo(n).href).then(r=>r.validateProps).catch(()=>null):Promise.resolve(null),Ue}function Vo(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 Go(e,t){return()=>n=>{Bo(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:Vo(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 Jo(e,t){let n=[],r;try{r=await Po.readFile(t.fileAbsPath,"utf-8")}catch{return n}let o=Y.relative(e,t.fileAbsPath).split(Y.sep).join("/"),i=[],l=new Set;try{await No({value:r,path:t.fileAbsPath},{remarkPlugins:[Ro,Io,Mo,fe,Go(i,l)],rehypePlugins:[zo],providerImportSource:"@mdx-js/react"})}catch(c){return n.push(ye(c,{projectDir:e,knownComponents:W,file:o})),n}let s=new Set(W),a=await yt(),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(T({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:_e(c.name,W)}));continue}if(a){let u=a(c.name,c.props,{checkRequired:!1});u&&n.push(T({...u,file:o,line:c.line,column:c.column}))}}return n}async function vn(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 Jo(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 Ue,vt=A(()=>{tt();q();ft();dt()});import xe from"node:fs";import bt from"node:path";import $n from"js-yaml";function xt(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=>xt(o,t,n+1));else{r={};for(let[o,i]of Object.entries(e))r[o]=xt(i,t,n+1)}return t.delete(e),r}function wn(e){return $n.dump(xt(e,new Set,0),{noRefs:!0,lineWidth:100,skipInvalid:!0})}function Sn(e){let t=String(e).replace(/\.md$/i,"");return t===""||t==="/"||t==="/index"?"/":t.replace(/\/+$/,"")||"/"}function Ho(e){return e==="/"?"/index.md":`${e}.md`}function $t(e,t){if(t==="api")return`# ${bn}
|
|
109
|
+
${e}`;let n=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/),r=`> ${bn}
|
|
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 qo(e){return e.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"")}function Wo(e){try{let t=xe.readFileSync(e,"utf-8").match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return{};let n=$n.load(t[1]);return n&&typeof n=="object"?n:{}}catch{return{}}}async function oe(e){let t={};try{t=JSON.parse(xe.readFileSync(bt.join(e,"velu.json"),"utf-8"))}catch{return{name:bt.basename(e),baseUrl:"",pages:[]}}let n=t.name??bt.basename(e),r=typeof process.env.VELU_SITE_URL=="string"?process.env.VELU_SITE_URL.replace(/\/+$/,""):"",o=z(t.api),i=t.navigation??{},l={};try{let u=await Le(t.navigation??{},{targetDir:e,api:o});i=u.nav,l=u.ops}catch(u){console.warn(`[velu] openapi: ${u.message}`)}let s=G(i),{pageEntries:a}=J(s,e),p=new Map(a.map(u=>[u.url,u])),c=[];for(let u of ee(s)){if(!u.url)continue;let y=u.ancestors.filter(d=>d.kind==="group").pop(),f=u.ancestors.filter(d=>d.kind==="tab").pop(),b=y?.label||f?.label||"Pages",g=u.ancestors.filter(d=>d.kind==="tab"||d.kind==="group").map(d=>d.label),_=u.ancestors.filter(d=>d.kind==="language").pop()?.code||null;if(u.node?.api){let d=l[u.pagePath];if(!d)continue;let j=d.title||xn(u.url);c.push({url:u.url,title:j,description:d.description||"",group:b,breadcrumb:[...g,j],lang:_,frontmatter:{title:d.title,description:d.description},source:{kind:"api",segment:d.segment}})}else{let d=p.get(u.url);if(!d||!d.exists)continue;let j=Wo(d.fileAbsPath),w=j.title||xn(u.url);c.push({url:u.url,title:w,description:j.description||"",group:b,breadcrumb:[...g,w],lang:_,frontmatter:j,source:{kind:"mdx",fileAbsPath:d.fileAbsPath}})}}return{name:n,baseUrl:r,pages:c}}function Re(e){return new Map(e.pages.map(t=>[t.url,{...t.source,title:t.title}]))}async function Yo(e){return Re(await oe(e))}async function wt(e,t,n){let o=(n||await Yo(e)).get(t);if(!o)return null;if(o.kind==="mdx")try{return{body:xe.readFileSync(o.fileAbsPath,"utf-8"),contentType:"text/markdown; charset=utf-8",kind:"mdx"}}catch{return null}return o.segment?{body:wn(o.segment),contentType:"text/yaml; charset=utf-8",kind:"api"}:null}async function kn(e,t){let n=t||await oe(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 ${Ne} 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(Ho(a.url))})${a.description?`: ${a.description}`:""}`);o.push("")}return o.join(`
|
|
112
|
+
`)}async function An(e,t){let n=t||await oe(e),r=[`# ${n.name}`,"",`> Full documentation \u2014 every page concatenated. Index: ${ne}`];for(let o of n.pages)if(r.push("","---","",`# ${o.title}`,`Source: ${o.url}`,""),o.source.kind==="mdx")try{r.push(qo(xe.readFileSync(o.source.fileAbsPath,"utf-8")).trim())}catch{}else o.source.segment&&r.push("```yaml",wn(o.source.segment).trim(),"```");return r.join(`
|
|
113
113
|
`)+`
|
|
114
|
-
`}async function
|
|
115
|
-
<title>${
|
|
116
|
-
<link>${
|
|
117
|
-
<guid isPermaLink="true">${
|
|
114
|
+
`}async function jn(e,t){let n=t||await oe(e),r=n.baseUrl||"",o=[];for(let s of n.pages){if(s.source.kind!=="mdx")continue;let a="";try{a=xe.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]||"",y=c[2]||"",f=Fe(u,"label")||Fe(u,"date")||"Update",b=Fe(u,"description")||Ko(y)||f,g=`${r}${s.url}#${Xo(f)}`,_=Fe(u,"date")||f,d=new Date(_),j=Number.isNaN(d.getTime())?null:d.toUTCString();o.push({title:f,link:g,description:b,pubDate:j})}}if(!o.length)return null;let i=r||"/",l=o.map(s=>` <item>
|
|
115
|
+
<title>${X(s.title)}</title>
|
|
116
|
+
<link>${X(s.link)}</link>
|
|
117
|
+
<guid isPermaLink="true">${X(s.link)}</guid>
|
|
118
118
|
`+(s.pubDate?` <pubDate>${s.pubDate}</pubDate>
|
|
119
|
-
`:"")+` <description>${
|
|
119
|
+
`:"")+` <description>${X(s.description)}</description>
|
|
120
120
|
</item>`).join(`
|
|
121
121
|
`);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
122
122
|
<rss version="2.0">
|
|
123
123
|
<channel>
|
|
124
|
-
<title>${
|
|
125
|
-
<link>${
|
|
126
|
-
<description>${
|
|
124
|
+
<title>${X(n.name)} \u2014 Changelog</title>
|
|
125
|
+
<link>${X(i)}</link>
|
|
126
|
+
<description>${X(`Product updates and announcements for ${n.name}.`)}</description>
|
|
127
127
|
<generator>Velu</generator>
|
|
128
128
|
`+l+`
|
|
129
129
|
</channel>
|
|
130
130
|
</rss>
|
|
131
|
-
`}var
|
|
131
|
+
`}var ne,Ne,Do,re,bn,xn,X,Xo,Fe,Ko,Tn=A(()=>{H();de();pe();lt();ne="/llms.txt",Ne="/llms-full.txt",Do=`<${ne}>; rel="llms-txt", <${Ne}>; rel="llms-full-txt"`,re={Link:Do,"X-Llms-Txt":ne},bn=`Full documentation index: ${ne}`;xn=e=>(e.split("/").filter(Boolean).pop()||"Home").replace(/[-_]+/g," ").replace(/\b\w/g,n=>n.toUpperCase());X=e=>String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),Xo=e=>`update-${String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"item"}`,Fe=(e,t)=>{let n=e.match(new RegExp(`${t}\\s*=\\s*["']([^"']*)["']`,"i"));return n?n[1]:void 0},Ko=e=>String(e||"").replace(/```[\s\S]*?```/g,"").replace(/<[^>]+>/g," ").replace(/\[([^\]]+)\]\([^)]*\)/g,"$1").replace(/[#*`_>]/g,"").replace(/\s+/g," ").trim().slice(0,500)});var Un={};we(Un,{startDevServer:()=>di});import Ln from"node:fs/promises";import ie from"node:fs";import Zo from"node:http";import{spawn as Qo}from"node:child_process";import C from"node:path";import{fileURLToPath as ei}from"node:url";import ti from"chokidar";import St from"express";import{createServer as ni,createLogger as ri,searchForWorkspaceRoot as oi}from"vite";function ci(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 On(e,t){let n=ut(e,{color:!!process.stderr.isTTY});console.error(`
|
|
132
132
|
`+n+`
|
|
133
|
-
`),process.env.VELU_DEBUG&&t&&console.error(t)}function
|
|
134
|
-
`)}function
|
|
135
|
-
`+
|
|
136
|
-
`),m}let a=e;try{a=
|
|
137
|
-
${
|
|
138
|
-
</style>`,
|
|
139
|
-
`),
|
|
133
|
+
`),process.env.VELU_DEBUG&&t&&console.error(t)}function _n(){try{return JSON.parse(ie.readFileSync(C.join(Ie,"package.json"),"utf8")).version||"unknown"}catch{return"unknown"}}function ui(e,t){let n=C.resolve(e,".velu"),r=C.resolve(n,".velu-version"),o=null;try{o=ie.readFileSync(r,"utf8").trim()}catch{}if(o!==t){if(o!==null)try{ie.rmSync(C.join(n,"vite-cache"),{recursive:!0,force:!0}),console.log("[velu] new version detected \u2014 refreshing the preview cache\u2026")}catch{}try{ie.mkdirSync(n,{recursive:!0}),ie.writeFileSync(r,t)}catch{}}}async function En(e){try{return await Nt(e)}catch{return et({},C.basename(e))}}async function Pn(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&&si.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 mi(e,t,n){let r=()=>{process.stdout.isTTY&&!process.env.VELU_NO_BELL&&process.stdout.write("\x07")},o=process.stdout.isTTY,i=b=>o&&process.stdout.write(`\x1B]${b}\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:b=>{console.log(`Velu${a?" "+a:""} ready \u2192 ${b}`),s(),r()}};let p="\x1B[38;2;220;20;60m",c="\x1B[0m",u="\x1B[2m";console.log("");for(let b of pi)console.log(`${p}${b}${c}`);a&&console.log(` ${u}${a}${c}`),console.log("");let y=null;try{y=Qo(process.execPath,["-e",fi],{stdio:["ignore","inherit","ignore"]}),y.on("error",()=>{})}catch{}let f=()=>{if(y){try{y.kill()}catch{}y=null}};return process.once("exit",f),{ready:b=>{f(),process.stdout.write("\x1B[2K\r"),console.log(` \x1B[32m\u2713${c} Velu${a?" "+a:""} ready \u2192 \x1B[36m${b}${c}`),s(),r()}}}async function di(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=mi(!!process.stdout.isTTY&&!t,C.basename(e),_n()),i=await En(e),l=s();function s(){let m=Ce(e).filter(x=>x.severity==="error"&&(x.category==="config-json"||x.category==="config-schema"));return m.length&&console.error(`
|
|
135
|
+
`+Ee(m,{color:!!process.stderr.isTTY})+`
|
|
136
|
+
`),m}let a=e;try{a=ie.realpathSync(e)}catch{}let p=0,c=v=>{let m=performance.now();if(m-p<500)return;p=m;let x=ye(v,{projectDir:a,knownComponents:W});On(x,v)};process.on("unhandledRejection",c),process.on("uncaughtException",c);let u=Number(process.env.PORT)||8358,y=await yt();ui(e,_n());let f=St(),b=Zo.createServer(f),g=ri(t?"info":"warn"),_=v=>typeof v=="string"&&v.includes("Failed to load source map"),d=g.warn.bind(g),j=g.warnOnce.bind(g);g.warn=(v,m)=>{_(v)||d(v,m)},g.warnOnce=(v,m)=>{_(v)||j(v,m)};let w=await ni({...dn({targetDir:e,VITE_ROOT:Ie,validateProps:y}),appType:"custom",logLevel:t?"info":"warn",customLogger:g,server:{middlewareMode:!0,fs:{allow:[oi(Ie),e,a]},hmr:{server:b}}});r("vite server created",n),f.use(w.middlewares);let $=C.join(e,"public");f.use(St.static($)),f.get(new RegExp(`^${Qe}(\\.[a-z0-9]+)?$`,"i"),async(v,m)=>{if(!i.favicon)return m.status(404).end();let x=C.resolve(e,i.favicon.replace(/^\//,""));m.sendFile(x,h=>{h&&m.status(404).end()})});let P=v=>(m,x)=>{let h=i.logo?.[v];if(!h)return x.status(404).end();x.sendFile(C.resolve(e,h.replace(/^\//,"")),L=>{L&&x.status(404).end()})};f.get(Ae,P("light")),f.get(je,P("dark")),f.post("/@velu-api-proxy",St.json({limit:"8mb"}),async(v,m)=>{let{method:x="GET",url:h,headers:L={},body:S}=v.body||{};if(typeof h!="string"||!/^https?:\/\//i.test(h))return m.status(400).json({error:"A valid http(s) target URL is required."});try{let k=await fetch(h,{method:x,headers:L,body:S!=null&&S!==""?S:void 0}),R=await k.text(),K=k.headers.get("content-type")||"",O={};k.headers.forEach((se,Ve)=>{O[Ve]=se});let V=R;if(/json/i.test(K))try{V=JSON.parse(R)}catch{}m.json({status:k.status,statusText:k.statusText,headers:O,body:V})}catch(k){m.json({error:`Request failed: ${k.message}`})}});let M=null,E=async()=>M||=await oe(e);f.get(/\.md$/i,async(v,m,x)=>{try{let h=await E(),L=await wt(e,Sn(decodeURIComponent(v.path)),Re(h));if(!L)return x();m.status(200).set({"Content-Type":L.contentType,...re}).end($t(L.body,L.kind))}catch{x()}}),f.get(ne,async(v,m,x)=>{try{let h=await kn(e,await E());m.status(200).set({"Content-Type":"text/plain; charset=utf-8",...re}).end(h)}catch{x()}}),f.get(Ne,async(v,m,x)=>{try{let h=await An(e,await E());m.status(200).set({"Content-Type":"text/plain; charset=utf-8",...re}).end(h)}catch{x()}}),f.get("/rss.xml",async(v,m,x)=>{try{let h=await jn(e,await E());if(!h)return x();m.status(200).set({"Content-Type":"application/rss+xml; charset=utf-8"}).end(h)}catch{x()}}),f.use("*",async(v,m,x)=>{let h=v.originalUrl,L=performance.now();if(/text\/markdown/i.test(v.headers.accept||""))try{let S=await E(),k=await wt(e,Vt(h),Re(S));if(k)return m.status(200).set({"Content-Type":k.contentType,...re}).end($t(k.body,k.kind))}catch{}if(l.length)return m.status(200).set({"Content-Type":"text/html"}).end(mt(l,{title:"Fix velu.json to continue"}));try{let S=performance.now(),k=await Ln.readFile(Cn,"utf-8");k=await w.transformIndexHtml(h,k),r(`transformIndexHtml ${h}`,S);let R="/src/runtime/server-entry.jsx";S=performance.now();let{render:K}=await w.ssrLoadModule(R);r(`ssrLoadModule ${h} (1st req includes dep pre-bundle)`,S),S=performance.now();let O=await K(h);r(`render ${h}`,S),S=performance.now();let V=await Pn(w,R);r(`collectSsrCss ${h}`,S);let se=V?`<style data-velu-ssr>${V}</style>`:"",Ve=`<style data-velu-config>
|
|
137
|
+
${Rt(i)}
|
|
138
|
+
</style>`,zn=ai.has(i.font.family)?"":ci(i.font.family),$e=Ft(i),Bn=$e?`<link rel="icon"${$e.type?` type="${$e.type}"`:""} href="${$e.url}" />`:"",Vn=[se,Ve,zn,Bn].filter(Boolean).join(`
|
|
139
|
+
`),Gn=k.replace("<!--app-title-->",li(i.name)).replace("<!--app-head-->",Vn).replace("<!--app-html-->",O);m.status(200).set({"Content-Type":"text/html",...re}).end(Gn),r(`TOTAL ${h}`,L)}catch(S){w.ssrFixStacktrace(S);let k=ye(S,{projectDir:a,knownComponents:W});if(/failed to load url|does the file exist|cannot find module|ERR_MODULE_NOT_FOUND/i.test(String(S&&S.message))){try{w.moduleGraph.invalidateAll()}catch{}k.hint="The dev server cache is out of sync \u2014 this usually happens after files are added, removed, or moved. Reload the page; if it persists, stop velu dev, delete the .velu folder in your project, and restart."}On(k,S),m.status(200).set({"Content-Type":"text/html"}).end(mt([k]))}}),ti.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}: ${C.relative(e,m)}`);let x=C.basename(m)==="velu.json",h=m.endsWith(".mdx"),L=x||h&&(v==="add"||v==="unlink");if((L||h||/\.(ya?ml|json)$/i.test(m))&&(M=null),x&&(i=await En(e),l=s()),L)w.moduleGraph.invalidateAll();else if(h){let S=m.split(C.sep).join("/"),k=w.moduleGraph.getModulesByFile(S);if(k)for(let R of k)w.moduleGraph.invalidateModule(R)}w.ws.send({type:"full-reload"})});async function kt(v){let m=new Set,x=12,h=0,L=[],S=()=>h<x?(h+=1,Promise.resolve()):new Promise(O=>L.push(O)).then(()=>{h+=1}),k=()=>{h-=1,L.shift()?.()},R=O=>/[\\/]\.velu[\\/]vite-cache[\\/]|[\\/]deps[\\/]/.test(O)||/[\\/]node_modules[\\/]/.test(O)&&!/velu-ui/.test(O);async function K(O){if(!(!O||m.has(O)||R(O))){m.add(O);try{await S();try{await w.transformRequest(O,{ssr:!1})}finally{k()}let V=await w.moduleGraph.getModuleByUrl(O,!1);V?.importedModules?.size&&await Promise.all([...V.importedModules].map(se=>K(se.url)))}catch{}}}return await K(v),m.size}b.listen(u,async()=>{let v=performance.now(),m=0;try{let{render:x}=await w.ssrLoadModule("/src/runtime/server-entry.jsx");await kt("/src/runtime/client-entry.jsx"),typeof w.waitForRequestsIdle=="function"&&await w.waitForRequestsIdle();let[h]=await Promise.allSettled([kt("/src/runtime/client-entry.jsx"),x("/"),w.transformIndexHtml("/",await Ln.readFile(Cn,"utf-8")),Pn(w,"/src/runtime/server-entry.jsx")]).then(L=>L.map(S=>S.status==="fulfilled"?S.value:0));m=h}catch(x){t&&console.log("[velu-profile] warmup error:",x?.message)}r(`cold-start warm-up (${m} client modules)`,v),o.ready(`http://localhost:${u}`)})}var ii,si,ai,li,Ie,Cn,pi,fi,Fn=A(()=>{pe();gn();ft();yn();q();dt();ht();vt();Tn();H();ii=C.dirname(ei(import.meta.url)),si=/\.(css|less|sass|scss|styl|stylus|pcss|postcss)(\?|$)/,ai=new Set(["Google Sans Flex","Google Sans Code","Outfit"]),li=e=>String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""");Ie=C.resolve(ii,".."),Cn=C.resolve(Ie,"src","template.html"),pi=[" _ __ __","| | / /__ / /_ __","| | / / _ \\/ / / / /","| |/ / __/ / /_/ /","|___/\\___/_/\\__,_/"],fi="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 Rn={};we(Rn,{default:()=>vi,runValidate:()=>Nn});import gi from"node:fs";import hi from"node:path";function yi(e){try{let t=JSON.parse(gi.readFileSync(hi.join(e,"velu.json"),"utf-8"));if(!t.navigation||typeof t.navigation!="object")return[];let n=G(t.navigation);return J(n,e).pageEntries}catch{return[]}}async function Nn(e){let t=Ce(e),n=yi(e),r=await vn(e,n),o=[...t,...r],i=!!process.stdout.isTTY;return console.log(Ee(o,{color:i})),o.some(s=>s.severity!=="warning"&&s.severity!=="info")?1:0}var vi,In=A(()=>{H();de();ht();vt();q();vi=Nn});import Me from"node:path";import U from"node:process";import{readFileSync as bi}from"node:fs";var[,,Mn,ze]=U.argv;function xi(){try{return JSON.parse(bi(new URL("../package.json",import.meta.url),"utf8")).version}catch{return"unknown"}}function $i(){let e=U.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 wi(){switch(Mn){case"--version":case"-v":case"version":{console.log(xi());break}case"init":{ze||(console.error("Usage: velu init <project-name>"),U.exit(1));let e=ze,t=Me.resolve(U.cwd(),e),{initProject:n}=await Promise.resolve().then(()=>(Tt(),jt));await n(t,e);break}case"dev":{let{maybeAutoUpdate:e}=await Promise.resolve().then(()=>(We(),qe));await e();let t=Me.resolve(U.cwd(),ze??"."),{startDevServer:n}=await Promise.resolve().then(()=>(Fn(),Un));await n(t);break}case"update":{let{updateCommand:e}=await Promise.resolve().then(()=>(We(),qe));await e();break}case"validate":{let e=Me.resolve(U.cwd(),ze??"."),{runValidate:t}=await Promise.resolve().then(()=>(In(),Rn)),n=await t(e);U.exit(n);break}case"build":{let e=Me.resolve(U.cwd(),$i()??"."),t=U.argv.indexOf("--out"),n=t>-1?U.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."),U.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"),U.exit(Mn?1:0)}}wi().catch(e=>{console.error(U.env.VELU_DEBUG?e:`Error: ${e.message}`),U.exit(1)});
|