canofold 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-PCXMD7VC.js +2 -0
- package/dist/{check-26GGX3Z4.js → check-RNP64O3R.js} +2 -2
- package/dist/{chunk-MVV3ZPRY.js → chunk-2IR2LVMS.js} +4 -4
- package/dist/chunk-5WXLNJTZ.js +2 -0
- package/dist/{chunk-VTDAE6I7.js → chunk-DH7K2QL6.js} +2 -2
- package/dist/chunk-GLAK57S4.js +45 -0
- package/dist/{chunk-I3C6PKXP.js → chunk-VDRRW4FW.js} +19 -19
- package/dist/{clean-EZWT4KWA.js → clean-5MEARYZG.js} +2 -2
- package/dist/cli.js +1 -1
- package/dist/demo-engine.d.ts +4 -0
- package/dist/dev-HAPAP642.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{init-GYZE44NB.js → init-RU34LZ2D.js} +2 -2
- package/dist/{preview-DGPH27AX.js → preview-FB3HCXFC.js} +2 -2
- package/dist/styles.input.css +1 -1
- package/package.json +10 -9
- package/dist/build-TR5KQIT3.js +0 -2
- package/dist/chunk-E5NNUYSF.js +0 -2
- package/dist/chunk-HS5LEPRC.js +0 -45
- package/dist/dev-7GFQGT2A.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a,b}from"./chunk-VDRRW4FW.js";import"./chunk-DH7K2QL6.js";import"./chunk-2IR2LVMS.js";import"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import"./chunk-VMPJIE5E.js";import"./chunk-M6T5RSNJ.js";import"./chunk-5WXLNJTZ.js";import"./chunk-EAYVCA3Z.js";import"./chunk-JK7ZNBUA.js";import"./chunk-AYDF3IFZ.js";export{b as runBuild,a as versionSatisfies};
|
|
2
|
+
//# sourceMappingURL=build-PCXMD7VC.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{d as I,f as b,k as M,l as D,m as L}from"./chunk-
|
|
1
|
+
import{d as I,f as b,k as M,l as D,m as L}from"./chunk-2IR2LVMS.js";import"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import{a as C,b as S,l as P}from"./chunk-VMPJIE5E.js";import"./chunk-5WXLNJTZ.js";import"./chunk-EAYVCA3Z.js";import{d as $}from"./chunk-JK7ZNBUA.js";import{a}from"./chunk-AYDF3IFZ.js";import{mkdtemp as N,readdir as Q,rm as q}from"fs/promises";import{tmpdir as J}from"os";import{join as W,relative as A}from"path";import{posix as y}from"path";import{analyzeMarkdown as w}from"@canofold/markdown/server/analyze";function R(e){return Array.from({length:w(e).missingCodeBlockLanguages},()=>({severity:"warning",message:"Code block is missing a language"}))}a(R,"checkCodeBlockLanguages");function B(e,n=0,o=[]){return w(e,{plugins:o}).directiveIssues.map(r=>({severity:"error",message:`${r.message}${r.line===void 0?"":` (line ${r.line+n}${r.column===void 0?"":`, column ${r.column}`})`}`}))}a(B,"checkRichDirectiveSyntax");function z(e){return typeof e.description=="string"&&e.description.trim()?[]:[{severity:"warning",message:"Frontmatter description is missing"}]}a(z,"checkFrontmatterDescription");function U(e,n){return typeof e.title=="string"&&e.title.trim()?[]:[{severity:"warning",page:n.relativePath,message:"Frontmatter title is missing"}]}a(U,"checkFrontmatterTitle");function F(e){return/^(?:[a-z][a-z\d+.-]*:|\/\/)/i.test(e)}a(F,"isExternalTarget");function j(e){let n=e.indexOf("#"),o=n===-1?e:e.slice(0,n),r=n===-1?"":e.slice(n+1);return{path:o.split("?")[0]??"",fragment:r}}a(j,"splitTarget");function V(e){try{return decodeURIComponent(e)}catch{return}}a(V,"decodeFragment");function T(e,n){let o=n.split("/").map(r=>{let i=decodeURIComponent(r);if(i.includes("/")||i.includes("\\"))throw new Error("Encoded path separator");return i}).join("/");return y.normalize(y.join(y.dirname(e),o.replace(/^\.\//,"")))}a(T,"resolveRelativeTarget");function E(e){try{return`public${e.split("/").map(o=>{let r=decodeURIComponent(o);if(r.includes("/")||r.includes("\\")||r==="..")throw new Error("Invalid public path");return r}).join("/")}`}catch{return}}a(E,"publicFileFor");function H(e){return e.replace(/\.(?:md|mdx)$/i,n=>n.toLocaleLowerCase("en-US"))}a(H,"markdownExtensionKey");function G(e,n,o="",r=new Set,i=new Set,m=new Map,u=new Map,f=new Set){let c=[],k=w(e),h=new Map([...n].filter(t=>/\.(?:md|mdx)$/i.test(t)).map(t=>[H(t),t]));for(let t of k.images){let s=j(t).path;if(!s||F(s))continue;if(s.startsWith("/")){n.has(E(s)??"")||c.push({severity:"error",message:`Image target does not exist: ${s}`});continue}let g;try{g=T(o,s)}catch{c.push({severity:"error",message:`Image target does not exist: ${s}`});continue}n.has(g)||c.push({severity:"error",message:`Image target does not exist: ${s}`})}for(let t of k.links){let{path:s,fragment:g}=j(t),p=V(g);if(F(s))continue;if(!s){g&&(!p||!i.has(p))&&c.push({severity:"error",message:`Heading target does not exist: #${g}`});continue}if(s.startsWith("/")){if(n.has(E(s)??""))continue;let d;try{d=S(s)}catch{c.push({severity:"error",message:`Link target does not exist: ${s}`});continue}if(f.has(d))continue;let x=d==="/"?"/":`${d.replace(/\/+$/,"")}/`;r.has(x)?g&&(!p||!m.get(x)?.has(p))&&c.push({severity:"error",message:`Heading target does not exist: ${t}`}):c.push({severity:"error",message:`Link target does not exist: ${s}`});continue}let l;try{l=T(o,s)}catch{c.push({severity:"error",message:`Link target does not exist: ${s}`});continue}let v=(/\.mdx?$/i.test(l)?[l]:[l,`${l}.md`,`${l}.mdx`,y.join(l,"index.md"),y.join(l,"index.mdx")]).map(d=>n.has(d)?d:h.get(H(d))).find(d=>!!d);v?g&&(!p||!u.get(v)?.has(p))&&c.push({severity:"error",message:`Heading target does not exist: ${t}`}):c.push({severity:"error",message:`Link target does not exist: ${s}`})}return c}a(G,"checkLinksAndImages");function K(e){let n=new Map;for(let o of e.headings){let r=o.text.normalize("NFKC").replace(/\s+/g," ").trim().toLocaleLowerCase(e.locale);r&&n.set(r,[...n.get(r)??[],o])}return[...n.values()].filter(o=>o.length>1).map(o=>{let r=o[0];return{severity:"warning",page:e.relativePath,message:`Repeated heading "${r.text}" uses numbered anchors (${o.map(i=>`#${i.slug}`).join(", ")})`}})}a(K,"checkDuplicateHeadings");function O(e){let n=new Map;for(let r of e.pages){let i=`${r.version}:${C(r.relativePath,r.locale)}`;n.set(i,(n.get(i)??new Set).add(r.locale))}let o=[];for(let[r,i]of n)for(let m of e.locales)if(!i.has(m)){let[u,...f]=r.split(":");o.push({severity:"warning",message:`Missing ${m} translation for ${f.join(":")} in version ${u}`})}return o}a(O,"checkMissingTranslations");async function X(e){let n=new Set;async function o(r){let i=await Q(r,{withFileTypes:!0});for(let m of i){let u=W(r,m.name);if(m.isDirectory())await o(u);else{if(m.isSymbolicLink())throw new Error(`Documentation files must not use symbolic links: ${A(e,u)}`);n.add(A(e,u).replace(/\\/g,"/"))}}}return a(o,"walk"),await o(e),n}a(X,"collectFiles");function Y(e){if(!e.body)return 0;let n=e.transformedSource.lastIndexOf(e.body);return n<0?0:e.transformedSource.slice(0,n).split(`
|
|
2
2
|
`).length-1}a(Y,"bodyLineOffset");async function he({cwd:e}){let n=await P(e),o=await N(W(J(),"canofold-check-")),r=await D(e,o,n.extensions).finally(()=>q(o,{recursive:!0,force:!0})),i=await b(e,n,r);await L({cwd:e,config:n,graph:i,mode:"analyze"});let m=new Set([...M(n,i),...r.publicOutputPaths]),u=new Map(await Promise.all(n.versions.items.map(async t=>[t.id,await X($(e,t.docsDir,`versions.items[${t.id}].docsDir`))]))),f=new Set(i.pages.map(t=>t.routePath)),c=new Map(i.pages.map(t=>[t.routePath,new Set(t.headings.map(s=>s.slug))])),k=new Map(i.versions.map(t=>[t.id,new Map(i.pages.filter(s=>s.version===t.id).map(s=>[s.relativePath,new Set(s.headings.map(g=>g.slug))]))])),h=[...i.pages.flatMap(t=>[...R(t.body).map(s=>({...s,page:t.relativePath})),...B(t.body,Y(t),[...n.markdown.plugins,I]).map(s=>({...s,page:t.relativePath})),...U(t.frontmatter,t),...z(t.frontmatter).map(s=>({...s,page:t.relativePath})),...G(t.body,u.get(t.version)??new Set,t.relativePath,f,new Set(t.headings.map(s=>s.slug)),c,k.get(t.version),m).map(s=>({...s,page:t.sourceRelativePath})),...K(t)]),...O(i)];for(let t of h){let s=t.page?` ${t.page}`:"";console.log(`${t.severity.toUpperCase()}:${s} ${t.message}`)}return h.some(t=>t.severity==="error")&&(process.exitCode=1),h}a(he,"runCheck");export{he as runCheck};
|
|
3
|
-
//# sourceMappingURL=check-
|
|
3
|
+
//# sourceMappingURL=check-RNP64O3R.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{a as Q,b as Z,d as tt,f as $}from"./chunk-ENPRUF6E.js";import{a as F,b as q,d as B,e as K,f as X,g as R,i as Y,j}from"./chunk-VMPJIE5E.js";import{a as H}from"./chunk-E5NNUYSF.js";import{a as U,b as _,c as N}from"./chunk-EAYVCA3Z.js";import{a as T,b,d as J,e as v,f as W,h as O}from"./chunk-JK7ZNBUA.js";import{a as c}from"./chunk-AYDF3IFZ.js";import{createHash as Ct}from"crypto";var et={name:"canofold-demo",version:"1",directiveNames:["demo"]};function x(t){return t.line===void 0?"":` at line ${t.line}${t.column===void 0?"":`, column ${t.column}`}`}c(x,"locationOf");function St(t,o){return Ct("sha256").update(JSON.stringify([t.version,t.sourceRelativePath,o.line??0,o.column??0,o.attributes.src??""])).digest("hex").slice(0,16)}c(St,"demoId");function kt(t,o,e){if(!t)throw new Error(`Demo directives require a \`src\` attribute in ${e.sourceRelativePath}${x(o)}`);if(/^[a-z][a-z\d+.-]*:/i.test(t)||t.startsWith("//"))throw new Error(`Demo \`src\` must reference a project module, got ${JSON.stringify(t)} in ${e.sourceRelativePath}${x(o)}`);if(t.includes("\0")||t.includes("?")||t.includes("#"))throw new Error(`Demo \`src\` must not contain a null byte, query, or fragment in ${e.sourceRelativePath}${x(o)}`);return t}c(kt,"validateSpecifier");function Dt(t,o,e){if(!t||t==="inline")return"inline";if(t==="iframe")return"iframe";throw new Error(`Demo \`sandbox\` must be \`inline\` or \`iframe\` in ${e.sourceRelativePath}${x(o)}`)}c(Dt,"validateSandbox");function ot(t,o){return o.filter(e=>e.name==="demo").map(e=>{if(e.type!=="leafDirective")throw new Error(`Demo directives must use leaf syntax in ${t.sourceRelativePath}${x(e)}`);let r=Object.keys(e.attributes).filter(n=>n!=="src"&&n!=="sandbox"&&n!=="description");if(r.length>0)throw new Error(`Demo directives do not support ${r.map(n=>`\`${n}\``).join(", ")} in ${t.sourceRelativePath}${x(e)}`);return{id:St(t,e),...e.label?{title:e.label}:{},...e.attributes.description?.trim()?{description:e.attributes.description.trim()}:{},specifier:kt(e.attributes.src?.trim()??"",e,t),sandbox:Dt(e.attributes.sandbox?.trim(),e,t),pageSourcePath:t.sourcePath,pageSourceRelativePath:t.sourceRelativePath,routePath:t.routePath,locale:t.locale,...e.line===void 0?{}:{line:e.line},...e.column===void 0?{}:{column:e.column},...e.offset===void 0?{}:{sourceOffset:e.offset},...e.endOffset===void 0?{}:{sourceEndOffset:e.endOffset}}})}c(ot,"demoReferencesForPage");import{analyzeMarkdown as Mt}from"@canofold/markdown/server/analyze";import Gt from"gray-matter";import{join as Lt,posix as Vt}from"path";import{z as m}from"zod";var rt=["ai","box","code","file","file-code","gauge","globe","layers","rocket","search","sparkles","terminal"],vt=m.object({text:m.string().min(1),link:j,primary:m.boolean().optional(),icon:m.enum(rt).optional()}).strict(),Ot=m.object({accent:m.string().optional(),tagline:m.string().optional(),image:j.optional(),imageAlt:m.string().optional(),actions:m.array(vt).refine(t=>t.filter(o=>o.primary).length<=1,{message:"Home page hero actions can contain at most one primary action"}).optional()}).strict(),Rt=m.object({icon:m.enum(rt).optional(),image:j.optional(),title:m.string().min(1),details:m.string().min(1)}).strict(),jt=m.string().trim().refine(t=>m.string().date().safeParse(t).success||m.string().datetime({offset:!0}).safeParse(t).success,"Expected an ISO 8601 date"),nt=m.preprocess(t=>t instanceof Date?t.toISOString():t,jt.transform(t=>new Date(t).toISOString())),it=m.object({title:m.string().optional(),seoTitle:m.string().trim().min(1).optional(),description:m.string().optional(),createdAt:nt.optional(),updatedAt:nt.optional(),order:m.number().finite().optional(),group:m.string().optional(),subgroup:m.string().optional(),collapsed:m.boolean().optional(),sidebar:m.boolean().optional(),layout:m.enum(["document","playground"]).optional(),status:m.enum(["draft","published"]).optional(),search:m.boolean().optional(),ai:m.boolean().optional(),tags:m.array(m.string()).optional(),owner:m.string().optional(),hero:Ot.optional(),features:m.array(Rt).optional()}).passthrough();function xe(t){return Object.fromEntries(["title","description","createdAt","updatedAt","order","group","subgroup","tags","owner"].flatMap(e=>t[e]===void 0?[]:[[e,t[e]]]))}c(xe,"publicFrontmatterFor");import{readdir as It,readFile as Nt,stat as Tt}from"fs/promises";import{join as Ft,relative as at}from"path";async function st(t,o,e){if(!Number.isFinite(o)||o<1)throw new Error("Concurrency must be a positive finite number");let r=new Array(t.length),n=0,i,l=Math.min(Math.floor(o),t.length);if(await Promise.all(Array.from({length:l},async()=>{for(;n<t.length&&i===void 0;){let u=n++;try{r[u]=await e(t[u],u)}catch(f){i??=f}}})),i)throw i;return r}c(st,"mapConcurrent");var At=32;async function ct(t){async function o(n){let i=[],l=[n];for(;l.length>0;){let u=l.pop();if(!u)continue;let f=await It(u,{withFileTypes:!0});for(let s of f){let a=Ft(u,s.name);if(s.isSymbolicLink())throw new Error(`Documentation content must not use symbolic links: ${at(t,a)}`);s.isDirectory()?l.push(a):s.isFile()&&U(s.name)&&i.push(a)}}return i}c(o,"walk");let e=await o(t);return(await st(e,At,async n=>{let[i,l]=await Promise.all([Tt(n),Nt(n,"utf8")]);return{path:at(t,n),raw:l,mtimeMs:i.mtimeMs}})).sort((n,i)=>n.path.localeCompare(i.path))}c(ct,"scanMarkdownFiles");function ut(t){return t.split("-").filter(Boolean).map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join(" ")}c(ut,"humanize");function C(t){return N(F(t.relativePath,t.locale))}c(C,"isLocaleHome");function zt(t){return{type:"link",title:t.title||t.routePath,routePath:t.routePath}}c(zt,"sidebarLink");function ft(t){return F(t.relativePath,t.locale).split("/")}c(ft,"pageSegments");function lt(t){return ft(t).slice(0,-1)}c(lt,"pageDirectorySegments");function Ut(t){return N(ft(t).at(-1)??"")}c(Ut,"isDirectoryIndex");function _t(t){let o=new Map,e=new Map,r=new Map;for(let n of t)if(Ut(n)&&e.set(lt(n).join("/"),n),n.group&&typeof n.frontmatter.group=="string"){let i=r.get(n.group);if(i&&i!==n.frontmatter.group)throw new Error(`Inconsistent group name for locale "${n.locale}" directory "${n.group}": "${i}" and "${n.frontmatter.group}"`);r.set(n.group,n.frontmatter.group)}for(let n of t){if(C(n)||n.frontmatter.sidebar===!1)continue;let i=lt(n),l=i[0]??"",u=e.get(l),f=l?typeof u?.frontmatter.group=="string"?u.frontmatter.group:u?.title||r.get(l)||ut(l):"";if(typeof n.frontmatter.group=="string"&&n.frontmatter.group!==f)throw new Error(`Inconsistent group name for locale "${n.locale}" directory "${n.group}": "${f}" and "${n.frontmatter.group}"`);let s=o.get(l);if(!s)s={segment:l,title:f,items:[]},o.set(l,s);else if(s.title!==f)throw new Error(`Inconsistent group name for locale "${n.locale}" directory "${n.group}": "${s.title}" and "${f}"`);let a=s.items;for(let p=1;p<i.length;p+=1){let d=i[p];if(!d)continue;let g=i.slice(0,p+1).join("/"),h=e.get(g),w=p===1&&typeof n.frontmatter.subgroup=="string"?n.frontmatter.subgroup:void 0,y=(p===1&&typeof h?.frontmatter.subgroup=="string"?h.frontmatter.subgroup:void 0)??h?.title??w??ut(d);if(w&&w!==y)throw new Error(`Inconsistent subgroup name for locale "${n.locale}" directory "${g}"`);let E=a.find(k=>k.type==="group"&&k.segment===d),P=E??{type:"group",segment:d,title:y,collapsed:h?.frontmatter.collapsed===!0,items:[]};E||a.push(P),a=P.items}a.push(zt(n))}return[...o.values()]}c(_t,"buildSidebar");function A(t){if(t.type==="link")return t;for(let o of t.items){let e=A(o);if(e)return e}}c(A,"firstSidebarLink");function Ht(t){return t.flatMap(o=>{let e=o.items[0]?A(o.items[0]):void 0;return o.title&&e?[{title:o.title,routePath:e.routePath}]:[]})}c(Ht,"buildAutomaticNav");function Jt(t,o){return!t.startsWith("/")||o.base==="/"?t:`${o.base}${t.replace(/^\//,"")}`}c(Jt,"versionedNavLink");function Wt(t,o){return t.map(e=>({title:e.text,routePath:Jt(e.link,o)}))}c(Wt,"buildConfiguredNav");function qt(t,o){return t.map(e=>{if(!e.routePath.startsWith("/"))return e;let r=e.routePath.split("/").filter(Boolean),n=o.find(l=>l.segment&&r.at(-1)===l.segment&&r.length>0),i=n?.items[0]?A(n.items[0]):void 0;return i?{...e,routePath:i.routePath}:e})}c(qt,"anchorConfiguredNavToSidebar");function Bt(t){let o=new Map;for(let e of t)for(let[r,n]of[["route",e.routePath],["output",e.outputPath],["markdown output",e.markdownOutputPath]]){let i=`${r}:${b(n)}`,l=o.get(i);if(l)throw new Error(`Duplicate ${r} target ${n} for ${l.sourceRelativePath} and ${e.sourceRelativePath}`);o.set(i,e)}}c(Bt,"assertUniquePageTargets");async function Kt(t,o,e,r){let n=J(t,e.docsDir,`versions.items[${e.id}].docsDir`),i=await ct(n),l=[];for(let u of i){let f=u.path.split(/[\\/]/);if(f[0]==="public")continue;let s=f[0]&&o.i18n.locales.includes(f[0])?f[0]:void 0,a=s??o.i18n.defaultLocale,p=s?f.slice(1):f;if(p.length===0)continue;let d=p.join("/"),g=Vt.join(e.docsDir.replace(/\\/g,"/"),u.path.replace(/\\/g,"/")),h=r?await r.transformSource({source:u.raw,sourceRelativePath:g,relativePath:u.path.replace(/\\/g,"/"),kind:_(u.path)?"mdx":"markdown",version:e.id,locale:a}):u.raw,w=Gt(h),y=it.parse(w.data),E=y.status??"published";if(E==="draft")continue;let P=Mt(w.content,{plugins:[...o.markdown.plugins,et]}),k=typeof y.order=="number"&&Number.isFinite(y.order)?y.order:Number.MAX_SAFE_INTEGER,$t=u.path.replace(/\\/g,"/"),D={sourcePath:Lt(n,u.path),transformedSource:h,sourceRelativePath:g,relativePath:$t,version:e.id,versionBase:e.base,docsDir:e.docsDir,locale:a,routePath:B(a,o.i18n.defaultLocale,d,e.base),outputPath:K(a,o.i18n.defaultLocale,d,e.base),markdownOutputPath:X(a,o.i18n.defaultLocale,d,e.base),title:typeof y.title=="string"?y.title:P.headings[0]?.text??"",description:typeof y.description=="string"?y.description:"",order:k,group:p.length>1?p[0]??"":"",status:E,search:y.search!==!1,ai:y.ai!==!1,body:w.content,headings:P.headings,searchText:P.text,codeExamples:P.codeExamples,demos:[],lastUpdated:y.updatedAt??new Date(u.mtimeMs).toISOString(),frontmatter:y};D.demos=ot(D,P.directives),l.push(r?await r.extendPage(D):D)}return l}c(Kt,"scanVersionPages");async function ze(t,o,e){let r=[];for(let s of o.versions.items)for(let a of await Kt(t,o,s,e))r.push(a);let n=new Map(o.versions.items.map((s,a)=>[s.id,a])),i=new Map(o.i18n.locales.map((s,a)=>[s,a]));r.sort((s,a)=>{let p=(n.get(s.version)??0)-(n.get(a.version)??0);if(p!==0)return p;let d=(i.get(s.locale)??0)-(i.get(a.locale)??0);if(d!==0)return d;let g=C(s),h=C(a);return g!==h?g?-1:1:s.order!==a.order?s.order-a.order:s.routePath.localeCompare(a.routePath)}),Bt(r);for(let s of o.versions.items)for(let a of o.i18n.locales)if(!r.some(p=>p.version===s.id&&p.locale===a&&C(p)))throw new Error(`Missing published home page for version "${s.id}" locale "${a}"`);for(let s of o.versions.items)for(let a of o.i18n.locales){let p=r.filter(d=>d.version===s.id&&d.locale===a&&!C(d));p.forEach((d,g)=>{let h=p[g-1],w=p[g+1];h&&(d.previous={title:h.title||h.routePath,routePath:h.routePath}),w&&(d.next={title:w.title||w.routePath,routePath:w.routePath})})}let l={},u={};for(let s of o.versions.items){let a={},p={};l[s.id]=a,u[s.id]=p;for(let d of o.i18n.locales){let g=_t(r.filter(h=>h.version===s.id&&h.locale===d));a[d]=g,p[d]=o.navigation[d]?qt(Wt(o.navigation[d],s),g):Ht(g)}}let f=new Set(r.map(s=>s.routePath));for(let s of Object.values(u))for(let a of Object.values(s))for(let p of a)if(p.routePath.startsWith("/")&&!f.has(p.routePath))throw new Error(`Navigation target is not a generated page: "${p.routePath}"`);return{pages:r,sidebar:l,nav:u,locales:o.i18n.locales,defaultLocale:o.i18n.defaultLocale,versions:o.versions.items.map(s=>({...s})),currentVersion:o.versions.current}}c(ze,"buildContentGraph");import{mkdir as Yt,writeFile as pt}from"fs/promises";import{dirname as Qt,join as Zt}from"path";var Xt={"&":"&","<":"<",">":">",'"':""","'":"'"};function M(t){return t.replace(/[&<>"']/g,o=>Xt[o]??o)}c(M,"escapeHtml");function G(t){let o=t==="/"?"/":`${t.replace(/\/+$/,"")}/`;return q(o)}c(G,"normalizeRedirectRoute");function L(t,o){let e=new Set(o.pages.map(i=>G(i.routePath))),r=Object.entries(t.redirects).map(([i,l])=>[G(i),G(l)]),n=new Set(r.map(([i])=>i));for(let[i,l]of r){if(i==="/")throw new Error("Redirect source must not replace the site root");if(e.has(i))throw new Error(`Redirect source collides with a generated page: "${i}"`);if(n.has(l))throw new Error(`Redirect chains are not allowed: "${i}" points to redirect "${l}"`);if(!e.has(l))throw new Error(`Redirect target is not a published generated page: "${l}"`)}if(n.size!==r.length)throw new Error("Redirect sources must be unique after route normalization");return r}c(L,"resolveRedirects");async function Qe(t,o,e){let r=L(o,e);if(r.length===0)return;let n=v(t,o.outputDir);for(let[i,l]of r){let u=O(n,R(i),"redirect route"),f=Z(o,l),s=M(f),a=M(Q(o,l)??f),p=JSON.stringify(f).replace(/</g,"\\u003c"),d=`<!doctype html><html><head><meta charset="utf-8"><meta name="robots" content="noindex"><link rel="canonical" href="${a}"><meta http-equiv="refresh" content="0;url=${s}"><script>location.replace(${p})</script></head><body><a href="${s}">Redirecting to ${s}</a></body></html>`;await Yt(Qt(u),{recursive:!0}),await pt(u,d)}await pt(Zt(n,"redirects.json"),JSON.stringify(Object.fromEntries(r),null,2))}c(Qe,"writeRedirects");import{posix as dt}from"path";var te=new Set([".benchmark.json"]),ee=["assets/canofold-markdown","assets/canofold-demos","assets/canofold-playground","assets/canofold-plugins","assets/fonts","pagefind","ai/content","extensions"];function mt(t){let o=new Map;for(let e of t){let r=b(e),n=ee.find(l=>r===l||r.startsWith(`${l}/`));if(n)throw new Error(`Generated output uses reserved directory "${n}": "${e}"`);let i=o.get(r);if(i)throw new Error(`Generated outputs overlap: "${i}" and "${e}"`);o.set(r,e)}for(let[e,r]of o){let n=dt.dirname(e);for(;n!==".";){let i=o.get(n);if(i)throw new Error(`Generated outputs overlap: "${i}" and "${r}"`);n=dt.dirname(n)}}}c(mt,"assertGeneratedOutputPlan");function gt(t,o){let e=[".benchmark.json","404.html","assets/canofold.css",...Y,"robots.txt","ai/pages.json","ai/manifest.json",...o.pages.flatMap(n=>[n.outputPath,n.markdownOutputPath])];if(t.search.enabled&&(e.push("assets/canofold-search.js"),tt(t.search.provider)==="compact"))for(let n of o.versions)for(let i of o.locales)e.push(n.id===o.currentVersion?`search/${i}.json`:`search/${n.id}/${i}.json`);t.siteUrl&&e.push("sitemap.xml"),t.ai.pageSummaries&&e.push("ai/summaries.json"),t.ai.codeExamples&&e.push("ai/code-examples.json"),t.ai.markdownIndex&&e.push("ai/index.md"),t.ai.llmsTxt&&e.push("llms.txt"),t.ai.llmsFullTxt&&e.push("llms-full.txt");let r=L(t,o);if(r.length){e.push("redirects.json");for(let[n]of r)e.push(R(n))}return{paths:e,redirects:r}}c(gt,"plannedOutputPaths");function ao(t,o){let{paths:e}=gt(t,o);return mt(e),new Set(e)}c(ao,"generatedOutputPaths");function co(t,o){let{paths:e,redirects:r}=gt(t,o);return mt(e),new Set([...e.filter(n=>!te.has(n)).map(n=>`/${n.split("/").map(encodeURIComponent).join("/")}`),...r.map(([n])=>n)])}c(co,"generatedPublicPaths");import{randomUUID as ne}from"crypto";import{mkdir as yt,readFile as re,rm as ie,writeFile as Pt}from"fs/promises";import{dirname as se,join as bt,posix as xt,resolve as ae}from"path";import{pathToFileURL as ce}from"url";import{build as ue}from"esbuild";import{createHash as ht}from"crypto";function V(t,o){if(t===null||typeof t=="boolean"||typeof t=="string")return t;if(typeof t=="number"){if(!Number.isFinite(t))throw new TypeError("Fingerprint values must contain only finite numbers");return t}if(typeof t!="object")throw new TypeError("Fingerprint values must be JSON-serializable");if(o.has(t))throw new TypeError("Fingerprint values must not be circular");let e=Object.getPrototypeOf(t);if(!Array.isArray(t)&&e!==Object.prototype&&e!==null)throw new TypeError("Fingerprint values must be JSON-serializable plain objects");o.add(t);try{if(Array.isArray(t)){if(Object.keys(t).length!==t.length)throw new TypeError("Fingerprint values must not contain sparse arrays");return t.map(n=>V(n,o))}let r=Object.entries(t).sort(([n],[i])=>n.localeCompare(i)).map(([n,i])=>[n,V(i,o)]);return Object.fromEntries(r)}finally{o.delete(t)}}c(V,"canonicalValue");function oe(t){return JSON.stringify(V(t,new WeakSet))}c(oe,"stableJson");function S(t){return ht("sha256").update(oe(t)).digest("hex")}c(S,"fingerprint");function z(t){return ht("sha256").update(t).digest("hex")}c(z,"fingerprintBytes");var le=new Set(["apiVersion","name","outputs","transformSource","extendPage","generate"]),fe=["pnpm-lock.yaml","package-lock.json","yarn.lock","bun.lock","bun.lockb"];function I(t){return t instanceof Error?t.message:String(t)}c(I,"errorMessage");function wt(t){return{sourceRelativePath:t.sourceRelativePath,relativePath:t.relativePath,version:t.version,locale:t.locale,routePath:t.routePath,title:t.title,description:t.description,status:t.status,search:t.search,ai:t.ai,body:t.body,searchText:t.searchText,frontmatter:structuredClone(t.frontmatter)}}c(wt,"extensionPage");function Et(t,o){if(!o||o.includes("\\")||o.startsWith("/")||o!==xt.normalize(o))throw new Error(`Extension "${t}" output must be a normalized relative POSIX path: "${o}"`);if(o.split("/").some(e=>e==="."||e===".."||!e))throw new Error(`Extension "${t}" output must not contain empty, . or .. segments: "${o}"`);return o}c(Et,"normalizeDeclaredOutput");function pe(t,o){if(!t||typeof t!="object")throw new Error(`Extension ${o.resolve} must export an extension object or factory`);let e=t,r=Object.keys(e).find(n=>!le.has(n));if(r)throw new Error(`Extension ${o.resolve} has unknown key "${r}"`);if(e.apiVersion!==1)throw new Error(`Extension ${o.resolve} uses unsupported apiVersion ${String(e.apiVersion)}; expected ${1}`);if(typeof e.name!="string"||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(e.name))throw new Error(`Extension ${o.resolve} name must be a lowercase portable slug`);for(let n of["transformSource","extendPage","generate"])if(e[n]!==void 0&&typeof e[n]!="function")throw new Error(`Extension "${e.name}" hook ${n} must be a function`);if(e.outputs!==void 0&&!Array.isArray(e.outputs))throw new Error(`Extension "${e.name}" outputs must be an array`);if(e.generate&&!e.outputs?.length)throw new Error(`Extension "${e.name}" with generate() must declare outputs`);if(!e.generate&&e.outputs?.length)throw new Error(`Extension "${e.name}" declares outputs without generate()`);return e}c(pe,"assertDefinition");function de(t,o){if(o===void 0)return{};if(!o||typeof o!="object"||Array.isArray(o))throw new Error(`Extension "${t}" extendPage() must return an object or undefined`);let e=new Set(["title","description","searchText","search","ai"]),r=Object.keys(o).find(i=>!e.has(i));if(r)throw new Error(`Extension "${t}" extendPage() returned unknown key "${r}"`);let n=o;for(let i of["title","description","searchText"])if(n[i]!==void 0&&typeof n[i]!="string")throw new Error(`Extension "${t}" extendPage() field ${i} must be a string`);for(let i of["search","ai"])if(n[i]!==void 0&&typeof n[i]!="boolean")throw new Error(`Extension "${t}" extendPage() field ${i} must be a boolean`);return o}c(de,"assertPagePatch");async function me(t){let o=[];for(let e of fe){let r=bt(t,e);await T(r)&&o.push({path:e,fingerprint:z(await re(r))})}return S(o)}c(me,"lockfileFingerprint");async function ge(t,o,e){let r=ae(t,e.resolve);if(await W(t,r,`extension ${e.resolve}`),!await T(r))throw new Error(`Extension module not found: ${e.resolve}`);let i=(await ue({entryPoints:[r],bundle:!0,format:"esm",platform:"node",target:"node22",write:!1,sourcemap:"inline",plugins:[{name:"canofold-extension-api",setup(u){u.onResolve({filter:/^canofold$/},()=>({path:"canofold-extension-api",namespace:"canofold-extension-api"})),u.onLoad({filter:/.*/,namespace:"canofold-extension-api"},()=>({loader:"js",contents:`
|
|
1
|
+
import{a as Q,b as Z,d as tt,f as $}from"./chunk-ENPRUF6E.js";import{a as F,b as q,d as B,e as K,f as X,g as R,i as Y,j}from"./chunk-VMPJIE5E.js";import{a as _}from"./chunk-5WXLNJTZ.js";import{a as H,b as U,c as N}from"./chunk-EAYVCA3Z.js";import{a as T,b,d as J,e as v,f as W,h as O}from"./chunk-JK7ZNBUA.js";import{a as c}from"./chunk-AYDF3IFZ.js";import{createHash as St}from"crypto";var et={name:"canofold-demo",version:"1",directiveNames:["demo"]};function x(t){return t.line===void 0?"":` at line ${t.line}${t.column===void 0?"":`, column ${t.column}`}`}c(x,"locationOf");function Ct(t,o){return St("sha256").update(JSON.stringify([t.version,t.sourceRelativePath,o.line??0,o.column??0,o.attributes.src??""])).digest("hex").slice(0,16)}c(Ct,"demoId");function kt(t,o,e){if(!t)throw new Error(`Demo directives require a \`src\` attribute in ${e.sourceRelativePath}${x(o)}`);if(/^[a-z][a-z\d+.-]*:/i.test(t)||t.startsWith("//"))throw new Error(`Demo \`src\` must reference a project module, got ${JSON.stringify(t)} in ${e.sourceRelativePath}${x(o)}`);if(t.includes("\0")||t.includes("?")||t.includes("#"))throw new Error(`Demo \`src\` must not contain a null byte, query, or fragment in ${e.sourceRelativePath}${x(o)}`);return t}c(kt,"validateSpecifier");function Dt(t,o,e){if(!t||t==="inline")return"inline";if(t==="iframe")return"iframe";throw new Error(`Demo \`sandbox\` must be \`inline\` or \`iframe\` in ${e.sourceRelativePath}${x(o)}`)}c(Dt,"validateSandbox");function ot(t,o){return o.filter(e=>e.name==="demo").map(e=>{if(e.type!=="leafDirective")throw new Error(`Demo directives must use leaf syntax in ${t.sourceRelativePath}${x(e)}`);let r=Object.keys(e.attributes).filter(n=>n!=="src"&&n!=="sandbox"&&n!=="description");if(r.length>0)throw new Error(`Demo directives do not support ${r.map(n=>`\`${n}\``).join(", ")} in ${t.sourceRelativePath}${x(e)}`);return{id:Ct(t,e),...e.label?{title:e.label}:{},...e.attributes.description?.trim()?{description:e.attributes.description.trim()}:{},specifier:kt(e.attributes.src?.trim()??"",e,t),sandbox:Dt(e.attributes.sandbox?.trim(),e,t),pageSourcePath:t.sourcePath,pageSourceRelativePath:t.sourceRelativePath,routePath:t.routePath,locale:t.locale,...e.line===void 0?{}:{line:e.line},...e.column===void 0?{}:{column:e.column},...e.offset===void 0?{}:{sourceOffset:e.offset},...e.endOffset===void 0?{}:{sourceEndOffset:e.endOffset}}})}c(ot,"demoReferencesForPage");import{analyzeMarkdown as Mt}from"@canofold/markdown/server/analyze";import Gt from"gray-matter";import{join as Lt,posix as Vt}from"path";import{z as m}from"zod";var rt=["ai","box","code","file","file-code","gauge","globe","layers","rocket","search","sparkles","terminal"],vt=m.object({text:m.string().min(1),link:j,primary:m.boolean().optional(),icon:m.enum(rt).optional()}).strict(),Ot=m.object({accent:m.string().optional(),tagline:m.string().optional(),image:j.optional(),imageAlt:m.string().optional(),actions:m.array(vt).refine(t=>t.filter(o=>o.primary).length<=1,{message:"Home page hero actions can contain at most one primary action"}).optional()}).strict(),Rt=m.object({icon:m.enum(rt).optional(),image:j.optional(),title:m.string().min(1),details:m.string().min(1)}).strict(),jt=m.string().trim().refine(t=>m.string().date().safeParse(t).success||m.string().datetime({offset:!0}).safeParse(t).success,"Expected an ISO 8601 date"),nt=m.preprocess(t=>t instanceof Date?t.toISOString():t,jt.transform(t=>new Date(t).toISOString())),it=m.object({title:m.string().optional(),seoTitle:m.string().trim().min(1).optional(),description:m.string().optional(),createdAt:nt.optional(),updatedAt:nt.optional(),order:m.number().finite().optional(),group:m.string().optional(),subgroup:m.string().optional(),collapsed:m.boolean().optional(),sidebar:m.boolean().optional(),layout:m.enum(["document","playground"]).optional(),status:m.enum(["draft","published"]).optional(),search:m.boolean().optional(),ai:m.boolean().optional(),tags:m.array(m.string()).optional(),owner:m.string().optional(),hero:Ot.optional(),features:m.array(Rt).optional()}).passthrough();function xe(t){return Object.fromEntries(["title","description","createdAt","updatedAt","order","group","subgroup","tags","owner"].flatMap(e=>t[e]===void 0?[]:[[e,t[e]]]))}c(xe,"publicFrontmatterFor");import{readdir as It,readFile as Nt,stat as Tt}from"fs/promises";import{join as Ft,relative as at}from"path";async function st(t,o,e){if(!Number.isFinite(o)||o<1)throw new Error("Concurrency must be a positive finite number");let r=new Array(t.length),n=0,i,l=Math.min(Math.floor(o),t.length);if(await Promise.all(Array.from({length:l},async()=>{for(;n<t.length&&i===void 0;){let u=n++;try{r[u]=await e(t[u],u)}catch(f){i??=f}}})),i)throw i;return r}c(st,"mapConcurrent");var At=32;async function ct(t){async function o(n){let i=[],l=[n];for(;l.length>0;){let u=l.pop();if(!u)continue;let f=await It(u,{withFileTypes:!0});for(let s of f){let a=Ft(u,s.name);if(s.isSymbolicLink())throw new Error(`Documentation content must not use symbolic links: ${at(t,a)}`);s.isDirectory()?l.push(a):s.isFile()&&H(s.name)&&i.push(a)}}return i}c(o,"walk");let e=await o(t);return(await st(e,At,async n=>{let[i,l]=await Promise.all([Tt(n),Nt(n,"utf8")]);return{path:at(t,n),raw:l,mtimeMs:i.mtimeMs}})).sort((n,i)=>n.path.localeCompare(i.path))}c(ct,"scanMarkdownFiles");function ut(t){return t.split("-").filter(Boolean).map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join(" ")}c(ut,"humanize");function S(t){return N(F(t.relativePath,t.locale))}c(S,"isLocaleHome");function zt(t){return{type:"link",title:t.title||t.routePath,routePath:t.routePath}}c(zt,"sidebarLink");function ft(t){return F(t.relativePath,t.locale).split("/")}c(ft,"pageSegments");function lt(t){return ft(t).slice(0,-1)}c(lt,"pageDirectorySegments");function Ht(t){return N(ft(t).at(-1)??"")}c(Ht,"isDirectoryIndex");function Ut(t){let o=new Map,e=new Map,r=new Map;for(let n of t)if(Ht(n)&&e.set(lt(n).join("/"),n),n.group&&typeof n.frontmatter.group=="string"){let i=r.get(n.group);if(i&&i!==n.frontmatter.group)throw new Error(`Inconsistent group name for locale "${n.locale}" directory "${n.group}": "${i}" and "${n.frontmatter.group}"`);r.set(n.group,n.frontmatter.group)}for(let n of t){if(S(n)||n.frontmatter.sidebar===!1)continue;let i=lt(n),l=i[0]??"",u=e.get(l),f=l?typeof u?.frontmatter.group=="string"?u.frontmatter.group:u?.title||r.get(l)||ut(l):"";if(typeof n.frontmatter.group=="string"&&n.frontmatter.group!==f)throw new Error(`Inconsistent group name for locale "${n.locale}" directory "${n.group}": "${f}" and "${n.frontmatter.group}"`);let s=o.get(l);if(!s)s={segment:l,title:f,items:[]},o.set(l,s);else if(s.title!==f)throw new Error(`Inconsistent group name for locale "${n.locale}" directory "${n.group}": "${s.title}" and "${f}"`);let a=s.items;for(let p=1;p<i.length;p+=1){let d=i[p];if(!d)continue;let h=i.slice(0,p+1).join("/"),g=e.get(h),w=p===1&&typeof n.frontmatter.subgroup=="string"?n.frontmatter.subgroup:void 0,y=(p===1&&typeof g?.frontmatter.subgroup=="string"?g.frontmatter.subgroup:void 0)??g?.title??w??ut(d);if(w&&w!==y)throw new Error(`Inconsistent subgroup name for locale "${n.locale}" directory "${h}"`);let E=a.find(k=>k.type==="group"&&k.segment===d),P=E??{type:"group",segment:d,title:y,collapsed:g?.frontmatter.collapsed===!0,items:[]};E||a.push(P),a=P.items}a.push(zt(n))}return[...o.values()]}c(Ut,"buildSidebar");function A(t){if(t.type==="link")return t;for(let o of t.items){let e=A(o);if(e)return e}}c(A,"firstSidebarLink");function _t(t){return t.flatMap(o=>{let e=o.items[0]?A(o.items[0]):void 0;return o.title&&e?[{title:o.title,routePath:e.routePath}]:[]})}c(_t,"buildAutomaticNav");function Jt(t,o){return!t.startsWith("/")||o.base==="/"?t:`${o.base}${t.replace(/^\//,"")}`}c(Jt,"versionedNavLink");function Wt(t,o){return t.map(e=>({title:e.text,routePath:Jt(e.link,o)}))}c(Wt,"buildConfiguredNav");function qt(t,o){return t.map(e=>{if(!e.routePath.startsWith("/"))return e;let r=e.routePath.split("/").filter(Boolean),n=o.find(l=>l.segment&&r.at(-1)===l.segment&&r.length>0),i=n?.items[0]?A(n.items[0]):void 0;return i?{...e,routePath:i.routePath}:e})}c(qt,"anchorConfiguredNavToSidebar");function Bt(t){let o=new Map;for(let e of t)for(let[r,n]of[["route",e.routePath],["output",e.outputPath],["markdown output",e.markdownOutputPath]]){let i=`${r}:${b(n)}`,l=o.get(i);if(l)throw new Error(`Duplicate ${r} target ${n} for ${l.sourceRelativePath} and ${e.sourceRelativePath}`);o.set(i,e)}}c(Bt,"assertUniquePageTargets");async function Kt(t,o,e,r){let n=J(t,e.docsDir,`versions.items[${e.id}].docsDir`),i=await ct(n),l=[];for(let u of i){let f=u.path.split(/[\\/]/);if(f[0]==="public")continue;let s=f[0]&&o.i18n.locales.includes(f[0])?f[0]:void 0,a=s??o.i18n.defaultLocale,p=s?f.slice(1):f;if(p.length===0)continue;let d=p.join("/"),h=Vt.join(e.docsDir.replace(/\\/g,"/"),u.path.replace(/\\/g,"/")),g=r?await r.transformSource({source:u.raw,sourceRelativePath:h,relativePath:u.path.replace(/\\/g,"/"),kind:U(u.path)?"mdx":"markdown",version:e.id,locale:a}):u.raw,w=Gt(g),y=it.parse(w.data),E=y.status??"published";if(E==="draft")continue;let P=Mt(w.content,{plugins:[...o.markdown.plugins,et]}),k=typeof y.order=="number"&&Number.isFinite(y.order)?y.order:Number.MAX_SAFE_INTEGER,$t=u.path.replace(/\\/g,"/"),D={sourcePath:Lt(n,u.path),transformedSource:g,sourceRelativePath:h,relativePath:$t,version:e.id,versionBase:e.base,docsDir:e.docsDir,locale:a,routePath:B(a,o.i18n.defaultLocale,d,e.base),outputPath:K(a,o.i18n.defaultLocale,d,e.base),markdownOutputPath:X(a,o.i18n.defaultLocale,d,e.base),title:typeof y.title=="string"?y.title:P.headings[0]?.text??"",description:typeof y.description=="string"?y.description:"",order:k,group:p.length>1?p[0]??"":"",status:E,search:y.search!==!1,ai:y.ai!==!1,body:w.content,headings:P.headings,searchText:P.text,codeExamples:P.codeExamples,demos:[],lastUpdated:y.updatedAt??new Date(u.mtimeMs).toISOString(),frontmatter:y};D.demos=ot(D,P.directives),l.push(r?await r.extendPage(D):D)}return l}c(Kt,"scanVersionPages");async function ze(t,o,e){let r=[];for(let s of o.versions.items)for(let a of await Kt(t,o,s,e))r.push(a);let n=new Map(o.versions.items.map((s,a)=>[s.id,a])),i=new Map(o.i18n.locales.map((s,a)=>[s,a]));r.sort((s,a)=>{let p=(n.get(s.version)??0)-(n.get(a.version)??0);if(p!==0)return p;let d=(i.get(s.locale)??0)-(i.get(a.locale)??0);if(d!==0)return d;let h=S(s),g=S(a);return h!==g?h?-1:1:s.order!==a.order?s.order-a.order:s.routePath.localeCompare(a.routePath)}),Bt(r);for(let s of o.versions.items)for(let a of o.i18n.locales)if(!r.some(p=>p.version===s.id&&p.locale===a&&S(p)))throw new Error(`Missing published home page for version "${s.id}" locale "${a}"`);for(let s of o.versions.items)for(let a of o.i18n.locales){let p=r.filter(d=>d.version===s.id&&d.locale===a&&!S(d));p.forEach((d,h)=>{let g=p[h-1],w=p[h+1];g&&(d.previous={title:g.title||g.routePath,routePath:g.routePath}),w&&(d.next={title:w.title||w.routePath,routePath:w.routePath})})}let l={},u={};for(let s of o.versions.items){let a={},p={};l[s.id]=a,u[s.id]=p;for(let d of o.i18n.locales){let h=Ut(r.filter(g=>g.version===s.id&&g.locale===d));a[d]=h,p[d]=o.navigation[d]?qt(Wt(o.navigation[d],s),h):_t(h)}}let f=new Set(r.map(s=>s.routePath));for(let s of Object.values(u))for(let a of Object.values(s))for(let p of a)if(p.routePath.startsWith("/")&&!f.has(p.routePath))throw new Error(`Navigation target is not a generated page: "${p.routePath}"`);return{pages:r,sidebar:l,nav:u,locales:o.i18n.locales,defaultLocale:o.i18n.defaultLocale,versions:o.versions.items.map(s=>({...s})),currentVersion:o.versions.current}}c(ze,"buildContentGraph");import{mkdir as Yt,writeFile as pt}from"fs/promises";import{dirname as Qt,join as Zt}from"path";var Xt={"&":"&","<":"<",">":">",'"':""","'":"'"};function M(t){return t.replace(/[&<>"']/g,o=>Xt[o]??o)}c(M,"escapeHtml");function G(t){let o=t==="/"?"/":`${t.replace(/\/+$/,"")}/`;return q(o)}c(G,"normalizeRedirectRoute");function L(t,o){let e=new Set(o.pages.map(i=>G(i.routePath))),r=Object.entries(t.redirects).map(([i,l])=>[G(i),G(l)]),n=new Set(r.map(([i])=>i));for(let[i,l]of r){if(i==="/")throw new Error("Redirect source must not replace the site root");if(e.has(i))throw new Error(`Redirect source collides with a generated page: "${i}"`);if(n.has(l))throw new Error(`Redirect chains are not allowed: "${i}" points to redirect "${l}"`);if(!e.has(l))throw new Error(`Redirect target is not a published generated page: "${l}"`)}if(n.size!==r.length)throw new Error("Redirect sources must be unique after route normalization");return r}c(L,"resolveRedirects");async function Qe(t,o,e){let r=L(o,e);if(r.length===0)return;let n=v(t,o.outputDir);for(let[i,l]of r){let u=O(n,R(i),"redirect route"),f=Z(o,l),s=M(f),a=M(Q(o,l)??f),p=JSON.stringify(f).replace(/</g,"\\u003c"),d=`<!doctype html><html><head><meta charset="utf-8"><meta name="robots" content="noindex"><link rel="canonical" href="${a}"><meta http-equiv="refresh" content="0;url=${s}"><script>location.replace(${p})</script></head><body><a href="${s}">Redirecting to ${s}</a></body></html>`;await Yt(Qt(u),{recursive:!0}),await pt(u,d)}await pt(Zt(n,"redirects.json"),JSON.stringify(Object.fromEntries(r),null,2))}c(Qe,"writeRedirects");import{posix as dt}from"path";var te=new Set([".benchmark.json"]),ee=["assets/canofold-markdown","assets/canofold-demos","assets/canofold-playground","assets/canofold-plugins","assets/fonts","pagefind","ai/content","extensions"];function mt(t){let o=new Map;for(let e of t){let r=b(e),n=ee.find(l=>r===l||r.startsWith(`${l}/`));if(n)throw new Error(`Generated output uses reserved directory "${n}": "${e}"`);let i=o.get(r);if(i)throw new Error(`Generated outputs overlap: "${i}" and "${e}"`);o.set(r,e)}for(let[e,r]of o){let n=dt.dirname(e);for(;n!==".";){let i=o.get(n);if(i)throw new Error(`Generated outputs overlap: "${i}" and "${r}"`);n=dt.dirname(n)}}}c(mt,"assertGeneratedOutputPlan");function ht(t,o){let e=[".benchmark.json","404.html","assets/canofold.css",...Y,"robots.txt","ai/pages.json","ai/manifest.json",...o.pages.flatMap(n=>[n.outputPath,n.markdownOutputPath])];if(t.search.enabled&&(e.push("assets/canofold-search.js"),tt(t.search.provider)==="compact"))for(let n of o.versions)for(let i of o.locales)e.push(n.id===o.currentVersion?`search/${i}.json`:`search/${n.id}/${i}.json`);t.siteUrl&&e.push("sitemap.xml"),t.ai.pageSummaries&&e.push("ai/summaries.json"),t.ai.codeExamples&&e.push("ai/code-examples.json"),t.ai.markdownIndex&&e.push("ai/index.md"),t.ai.llmsTxt&&e.push("llms.txt"),t.ai.llmsFullTxt&&e.push("llms-full.txt");let r=L(t,o);if(r.length){e.push("redirects.json");for(let[n]of r)e.push(R(n))}return{paths:e,redirects:r}}c(ht,"plannedOutputPaths");function ao(t,o){let{paths:e}=ht(t,o);return mt(e),new Set(e)}c(ao,"generatedOutputPaths");function co(t,o){let{paths:e,redirects:r}=ht(t,o);return mt(e),new Set([...e.filter(n=>!te.has(n)).map(n=>`/${n.split("/").map(encodeURIComponent).join("/")}`),...r.map(([n])=>n)])}c(co,"generatedPublicPaths");import{randomUUID as ne}from"crypto";import{mkdir as yt,readFile as re,rm as ie,writeFile as Pt}from"fs/promises";import{dirname as se,join as bt,posix as xt,resolve as ae}from"path";import{pathToFileURL as ce}from"url";import{build as ue}from"esbuild";import{createHash as gt}from"crypto";function V(t,o){if(t===null||typeof t=="boolean"||typeof t=="string")return t;if(typeof t=="number"){if(!Number.isFinite(t))throw new TypeError("Fingerprint values must contain only finite numbers");return t}if(typeof t!="object")throw new TypeError("Fingerprint values must be JSON-serializable");if(o.has(t))throw new TypeError("Fingerprint values must not be circular");let e=Object.getPrototypeOf(t);if(!Array.isArray(t)&&e!==Object.prototype&&e!==null)throw new TypeError("Fingerprint values must be JSON-serializable plain objects");o.add(t);try{if(Array.isArray(t)){if(Object.keys(t).length!==t.length)throw new TypeError("Fingerprint values must not contain sparse arrays");return t.map(n=>V(n,o))}let r=Object.entries(t).sort(([n],[i])=>n.localeCompare(i)).map(([n,i])=>[n,V(i,o)]);return Object.fromEntries(r)}finally{o.delete(t)}}c(V,"canonicalValue");function oe(t){return JSON.stringify(V(t,new WeakSet))}c(oe,"stableJson");function C(t){return gt("sha256").update(oe(t)).digest("hex")}c(C,"fingerprint");function z(t){return gt("sha256").update(t).digest("hex")}c(z,"fingerprintBytes");var le=new Set(["apiVersion","name","outputs","transformSource","extendPage","generate"]),fe=["pnpm-lock.yaml","package-lock.json","yarn.lock","bun.lock","bun.lockb"];function I(t){return t instanceof Error?t.message:String(t)}c(I,"errorMessage");function wt(t){return{sourceRelativePath:t.sourceRelativePath,relativePath:t.relativePath,version:t.version,locale:t.locale,routePath:t.routePath,title:t.title,description:t.description,status:t.status,search:t.search,ai:t.ai,body:t.body,searchText:t.searchText,frontmatter:structuredClone(t.frontmatter)}}c(wt,"extensionPage");function Et(t,o){if(!o||o.includes("\\")||o.startsWith("/")||o!==xt.normalize(o))throw new Error(`Extension "${t}" output must be a normalized relative POSIX path: "${o}"`);if(o.split("/").some(e=>e==="."||e===".."||!e))throw new Error(`Extension "${t}" output must not contain empty, . or .. segments: "${o}"`);return o}c(Et,"normalizeDeclaredOutput");function pe(t,o){if(!t||typeof t!="object")throw new Error(`Extension ${o.resolve} must export an extension object or factory`);let e=t,r=Object.keys(e).find(n=>!le.has(n));if(r)throw new Error(`Extension ${o.resolve} has unknown key "${r}"`);if(e.apiVersion!==1)throw new Error(`Extension ${o.resolve} uses unsupported apiVersion ${String(e.apiVersion)}; expected ${1}`);if(typeof e.name!="string"||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(e.name))throw new Error(`Extension ${o.resolve} name must be a lowercase portable slug`);for(let n of["transformSource","extendPage","generate"])if(e[n]!==void 0&&typeof e[n]!="function")throw new Error(`Extension "${e.name}" hook ${n} must be a function`);if(e.outputs!==void 0&&!Array.isArray(e.outputs))throw new Error(`Extension "${e.name}" outputs must be an array`);if(e.generate&&!e.outputs?.length)throw new Error(`Extension "${e.name}" with generate() must declare outputs`);if(!e.generate&&e.outputs?.length)throw new Error(`Extension "${e.name}" declares outputs without generate()`);return e}c(pe,"assertDefinition");function de(t,o){if(o===void 0)return{};if(!o||typeof o!="object"||Array.isArray(o))throw new Error(`Extension "${t}" extendPage() must return an object or undefined`);let e=new Set(["title","description","searchText","search","ai"]),r=Object.keys(o).find(i=>!e.has(i));if(r)throw new Error(`Extension "${t}" extendPage() returned unknown key "${r}"`);let n=o;for(let i of["title","description","searchText"])if(n[i]!==void 0&&typeof n[i]!="string")throw new Error(`Extension "${t}" extendPage() field ${i} must be a string`);for(let i of["search","ai"])if(n[i]!==void 0&&typeof n[i]!="boolean")throw new Error(`Extension "${t}" extendPage() field ${i} must be a boolean`);return o}c(de,"assertPagePatch");async function me(t){let o=[];for(let e of fe){let r=bt(t,e);await T(r)&&o.push({path:e,fingerprint:z(await re(r))})}return C(o)}c(me,"lockfileFingerprint");async function he(t,o,e){let r=ae(t,e.resolve);if(await W(t,r,`extension ${e.resolve}`),!await T(r))throw new Error(`Extension module not found: ${e.resolve}`);let i=(await ue({entryPoints:[r],bundle:!0,format:"esm",platform:"node",target:"node22",write:!1,sourcemap:"inline",plugins:[{name:"canofold-extension-api",setup(u){u.onResolve({filter:/^canofold$/},()=>({path:"canofold-extension-api",namespace:"canofold-extension-api"})),u.onLoad({filter:/.*/,namespace:"canofold-extension-api"},()=>({loader:"js",contents:`
|
|
2
2
|
export const CANOFOLD_EXTENSION_API_VERSION = ${JSON.stringify(1)}
|
|
3
|
-
export const canofoldVersion = ${JSON.stringify(
|
|
3
|
+
export const canofoldVersion = ${JSON.stringify(_)}
|
|
4
4
|
export const defineExtension = (factory) => factory
|
|
5
|
-
`}))}}]})).outputFiles[0];if(!i)throw new Error(`Failed to bundle extension ${e.resolve}`);await yt(o,{recursive:!0});let l=bt(o,`extension-${ne()}.mjs`);await Pt(l,i.contents);try{let f=(await import(`${ce(l).href}?t=${Date.now()}`)).default,s=typeof f=="function"?await f(structuredClone(e.options??{})):f,a=pe(s,e),p=(a.outputs??[]).map(d=>Et(a.name,d));if(new Set(p.map(b)).size!==p.length)throw new Error(`Extension "${a.name}" declares duplicate portable output paths`);return{definition:a,declaredOutputs:new Set(p),fingerprint:
|
|
6
|
-
//# sourceMappingURL=chunk-
|
|
5
|
+
`}))}}]})).outputFiles[0];if(!i)throw new Error(`Failed to bundle extension ${e.resolve}`);await yt(o,{recursive:!0});let l=bt(o,`extension-${ne()}.mjs`);await Pt(l,i.contents);try{let f=(await import(`${ce(l).href}?t=${Date.now()}`)).default,s=typeof f=="function"?await f(structuredClone(e.options??{})):f,a=pe(s,e),p=(a.outputs??[]).map(d=>Et(a.name,d));if(new Set(p.map(b)).size!==p.length)throw new Error(`Extension "${a.name}" declares duplicate portable output paths`);return{definition:a,declaredOutputs:new Set(p),fingerprint:C({descriptor:e,bundle:z(i.contents)})}}finally{await ie(l,{force:!0})}}c(he,"loadOneExtension");async function So(t,o,e){let r=[];for(let u of e)try{r.push(await he(t,o,u))}catch(f){throw new Error(`Failed to load extension ${u.resolve}: ${I(f)}`,{cause:f})}let n=new Set;for(let u of r){if(n.has(u.definition.name))throw new Error(`Duplicate extension name "${u.definition.name}"`);n.add(u.definition.name)}let i=r.length?await me(t):C({lockfiles:[]}),l=r.flatMap(({definition:u,declaredOutputs:f})=>[...f].map(s=>`/extensions/${u.name}/${s.split("/").map(encodeURIComponent).join("/")}`));return{fingerprint:C({apiVersion:1,dependencyFingerprint:i,extensions:r.map(u=>({name:u.definition.name,fingerprint:u.fingerprint}))}),publicOutputPaths:l,async transformSource(u){let f=u.source;for(let{definition:s}of r)if(s.transformSource)try{let a=await s.transformSource({...u,source:f});if(typeof a!="string")throw new Error("transformSource() must return a string");f=a}catch(a){throw new Error(`Extension "${s.name}" transformSource failed for ${u.sourceRelativePath}: ${I(a)}`,{cause:a})}return f},async extendPage(u){let f=u;for(let{definition:s}of r)if(s.extendPage)try{let a=de(s.name,await s.extendPage(wt(f)));f={...f,...a}}catch(a){throw new Error(`Extension "${s.name}" extendPage failed for ${f.sourceRelativePath}: ${I(a)}`,{cause:a})}return f},async generate(u,f){for(let{definition:s,declaredOutputs:a}of r){if(!s.generate)continue;let p=new Set;try{await s.generate({pages:f.map(wt),emitFile:c(async(h,g)=>{let w=Et(s.name,h);if(!a.has(w))throw new Error(`generate() emitted undeclared output "${w}"`);if(p.has(w))throw new Error(`generate() emitted "${w}" more than once`);p.add(w);let y=O(u,xt.join("extensions",s.name,w),`extension ${s.name} output`);await yt(se(y),{recursive:!0}),await Pt(y,g)},"emitFile")});let d=[...a].filter(h=>!p.has(h));if(d.length)throw new Error(`generate() did not emit declared outputs: ${d.join(", ")}`)}catch(d){throw new Error(`Extension "${s.name}" generate failed: ${I(d)}`,{cause:d})}}}}}c(So,"loadExtensionHost");async function vo({cwd:t,config:o,graph:e,mode:r,server:n}){let i=e.pages.flatMap(u=>u.demos);if(i.length===0){if(o.demos.setup&&!o.demos.engine)throw new Error("demos.setup requires demos.engine");return}let l=o.demos.engine;if(!l)throw new Error(`Found ${i.length} demo directive${i.length===1?"":"s"}, but no demos.engine is configured`);return l.prepare({cwd:t,outputRoot:v(t,o.outputDir),basePath:o.basePath,mode:r,server:n,setup:o.demos.setup,demos:i})}c(vo,"prepareDemoManifest");export{C as a,z as b,xe as c,et as d,st as e,ze as f,M as g,Qe as h,ee as i,ao as j,co as k,So as l,vo as m};
|
|
6
|
+
//# sourceMappingURL=chunk-2IR2LVMS.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as h}from"./chunk-
|
|
1
|
+
import{a as h}from"./chunk-5WXLNJTZ.js";import{d as a,e as E,f as d,g as u}from"./chunk-JK7ZNBUA.js";import{a as i}from"./chunk-AYDF3IFZ.js";import{randomUUID as b}from"crypto";import{mkdir as B,open as x,readFile as p,rename as S,rm as f,stat as k,writeFile as M}from"fs/promises";import{hostname as O}from"os";import{dirname as v,join as y}from"path";var w=600*1e3,A=Math.floor(w/3);function l(t){return typeof t=="string"&&t.length>0&&!t.startsWith("/")&&!t.includes("\\")&&t.split("/").every(e=>e!==""&&e!=="."&&e!=="..")}i(l,"isSafeOutputPath");function Q(t){return a(t,".canofold/cache","build cache")}i(Q,"resolveBuildCacheRoot");function Y(t){return a(t,".canofold/tmp","temporary build files")}i(Y,"resolveBuildTemporaryRoot");function P(t){return y(t,"build-manifest.json")}i(P,"manifestPath");function R(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.fingerprint=="string"&&l(e.outputPath)&&l(e.markdownOutputPath)&&Array.isArray(e.assetOutputPaths)&&e.assetOutputPaths.every(l)}i(R,"isPageState");function j(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.fingerprint=="string"&&Number.isSafeInteger(e.size)&&Number(e.size)>=0}i(j,"isOutputState");function C(t){if(!t||typeof t!="object")return!1;let e=t;return e.schemaVersion===3&&e.canofoldVersion===h&&typeof e.buildFingerprint=="string"&&typeof e.sharedFingerprint=="string"&&!!e.pages&&typeof e.pages=="object"&&Object.values(e.pages).every(R)&&!!e.outputs&&typeof e.outputs=="object"&&Object.keys(e.outputs).length>0&&Object.keys(e.outputs).every(l)&&Object.values(e.outputs).every(j)}i(C,"isBuildManifest");async function Z(t){try{let e=JSON.parse(await p(P(t),"utf8"));return C(e)?e:void 0}catch(e){if(e.code==="ENOENT"||e instanceof SyntaxError)return;throw e}}i(Z,"readBuildManifest");async function tt(t,e){await B(t,{recursive:!0});let n=P(t),o=y(t,`.build-manifest.${b()}.tmp`);try{await M(o,`${JSON.stringify(e,null,2)}
|
|
2
2
|
`,{flag:"wx",flush:!0});try{await S(o,n)}catch(r){let s=r.code;if(s!=="EEXIST"&&s!=="EPERM")throw r;await f(n,{force:!0}),await S(o,n)}}finally{await f(o,{force:!0})}}i(tt,"writeBuildManifest");function T(t){try{return process.kill(t,0),!0}catch(e){return e.code!=="ESRCH"}}i(T,"processIsAlive");function D(t,e,n=Date.now()){if(t.hostname===O()&&typeof t.pid=="number"&&Number.isSafeInteger(t.pid)&&t.pid>0&&!T(t.pid))return!0;let o=typeof t.updatedAt=="number"?t.updatedAt:typeof t.createdAt=="number"?t.createdAt:void 0,r=o===void 0?e:Math.max(o,e);return r===void 0||!Number.isFinite(r)||r>n+w||n-r>w}i(D,"lockIsStale");function F(t,e){return JSON.stringify({ownerId:t,pid:process.pid,hostname:O(),createdAt:e})}i(F,"lockContents");async function g(t){try{return JSON.parse(await p(t,"utf8"))}catch(e){if(e.code==="ENOENT")return;throw e}}i(g,"readBuildLock");async function m(t){let e=await x(t,"wx"),n=b(),o=Date.now();try{return await e.writeFile(F(n,o)),{handle:e,path:t,ownerId:n,createdAt:o}}catch(r){throw await e.close(),await f(t,{force:!0}),r}}i(m,"createBuildLock");async function N(t){(await g(t.path))?.ownerId===t.ownerId&&await f(t.path,{force:!0})}i(N,"releaseBuildLock");async function I(t){let e,n;try{let[r,s]=await Promise.all([p(t,"utf8"),k(t)]);e=r,n=s.mtimeMs}catch(r){if(r.code==="ENOENT")return!0;throw r}let o;try{o=D(JSON.parse(e),n)}catch{o=Date.now()-n>w}if(!o)return!1;try{let[r,s]=await Promise.all([p(t,"utf8"),k(t)]);return r!==e||s.mtimeMs!==n?!1:(await f(t),!0)}catch(r){if(r.code==="ENOENT")return!0;throw r}}i(I,"removeStaleLock");async function J(t){try{return await m(t)}catch(e){if(e.code!=="EEXIST")throw e;if(!await I(t))throw new Error("Another Canofold build is already running for this project");try{return await m(t)}catch(n){throw n.code==="EEXIST"?new Error("Another Canofold build is already running for this project"):n}}}i(J,"acquireBuildLock");async function _(t){let e=v(t);await B(e,{recursive:!0});let n=y(e,"build.lock"),o=await J(`${n}.reclaim`);try{try{return await m(n)}catch(r){if(r.code!=="EEXIST")throw r;if(!await I(n))throw new Error("Another Canofold build is already running for this project");return await m(n)}}finally{await o.handle.close(),await N(o)}}i(_,"openBuildLock");async function $(t){if((await g(t.path))?.ownerId!==t.ownerId)return!1;let n=new Date;return await t.handle.utimes(n,n),!0}i($,"refreshBuildLock");async function V(t){if((await g(t.path))?.ownerId!==t.ownerId)throw new Error("Canofold build lock ownership was lost during the build")}i(V,"assertBuildLockOwned");async function et(t,e){let n=await _(t),o,r=setInterval(()=>{$(n).then(s=>{s||(o=new Error("Canofold build lock ownership was lost during the build"))}).catch(s=>{o=s})},A);r.unref();try{let s=i(()=>V(n),"assertOwned"),c=await e(s);if(o)throw o;return await s(),c}finally{clearInterval(r),await n.handle.close(),await N(n)}}i(et,"withBuildLock");async function it(t,e,n){let o=E(t,e.outputDir);await d(t,o,"outputDir"),await d(t,n,"build cache"),await u(o,n,"build cache");for(let r of e.versions.items){let s=a(t,r.docsDir,`versions.items[${r.id}].docsDir`);await d(t,s,`versions.items[${r.id}].docsDir`),await u(o,s,`versions.items[${r.id}].docsDir`),await u(n,s,`versions.items[${r.id}].docsDir`,"build cache")}for(let[r,s]of e.styles.entries()){let c=a(t,s,`styles[${r}]`);await d(t,c,`styles[${r}]`),await u(o,c,`styles[${r}]`),await u(n,c,`styles[${r}]`,"build cache")}return o}i(it,"resolveSafeOutputRoot");export{Q as a,Y as b,Z as c,tt as d,et as e,it as f};
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# sourceMappingURL=chunk-DH7K2QL6.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import{b as H}from"./chunk-M6T5RSNJ.js";import{c as A}from"./chunk-JK7ZNBUA.js";import{a as r}from"./chunk-AYDF3IFZ.js";import{createServer as L}from"http";import{readFile as $,realpath as T}from"fs/promises";import{extname as k,isAbsolute as z,join as y,normalize as J,relative as U,resolve as F,sep as W}from"path";var O={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".txt":"text/plain; charset=utf-8",".md":"text/markdown; charset=utf-8",".svg":"image/svg+xml",".xml":"application/xml; charset=utf-8",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".pagefind":"application/wasm"};function G(t){return O[k(t).toLowerCase()]??"application/octet-stream"}r(G,"contentTypeFor");var q=15e3;function K(t){for(let n of t)n.end();t.clear()}r(K,"closeReloadClients");function E(t,n){for(let i of t)try{i.write(n)}catch{t.delete(i);try{i.end()}catch{}}}r(E,"writeReloadClients");function Q(t){E(t,`:keepalive
|
|
2
|
+
|
|
3
|
+
`)}r(Q,"heartbeatReloadClients");function D(t,n=""){let i=n.replace(/\r\n?/g,`
|
|
4
|
+
`).split(`
|
|
5
|
+
`);return`event: ${t}
|
|
6
|
+
${i.map(s=>`data: ${s}`).join(`
|
|
7
|
+
`)}
|
|
8
|
+
|
|
9
|
+
`}r(D,"formatServerSentEvent");function _(t,n="/__canofold/events"){let i=`<script type="module">
|
|
10
|
+
const source=new EventSource(${JSON.stringify(n)});
|
|
11
|
+
let connected=false,disconnected=false;
|
|
12
|
+
let overlay=null;
|
|
13
|
+
function showError(msg){
|
|
14
|
+
if(!overlay){overlay=document.createElement('dialog');overlay.style.cssText='all:initial;position:fixed;inset:0;width:100%;height:100%;border:none;background:rgba(15,15,20,.92);color:#f87171;font:14px/1.6 monospace;padding:2rem;box-sizing:border-box;z-index:2147483647;overflow:auto;white-space:pre-wrap;word-break:break-all;';document.documentElement.appendChild(overlay);}
|
|
15
|
+
overlay.textContent='\u26A0\uFE0F Build error:\\n\\n'+msg;
|
|
16
|
+
if(!overlay.open)overlay.showModal();
|
|
17
|
+
}
|
|
18
|
+
function clearError(){if(overlay&&overlay.open){overlay.close();overlay.remove();overlay=null;}}
|
|
19
|
+
function normalizeRoute(value){const path=value.split(/[?#]/,1)[0]||'/';return path.endsWith('/')?path:path+'/';}
|
|
20
|
+
async function applyPageUpdate(update){
|
|
21
|
+
const currentRoute=normalizeRoute(location.pathname);
|
|
22
|
+
if(!update.routes.some((route)=>normalizeRoute(route)===currentRoute))return true;
|
|
23
|
+
const response=await fetch(location.href,{cache:'no-store',headers:{accept:'text/html'}});
|
|
24
|
+
if(!response.ok||!(response.headers.get('content-type')||'').includes('text/html'))return false;
|
|
25
|
+
const nextDocument=new DOMParser().parseFromString(await response.text(),'text/html');
|
|
26
|
+
if(typeof window.__canofoldApplyPageDocument!=='function')return false;
|
|
27
|
+
return window.__canofoldApplyPageDocument(nextDocument,{mode:'update'});
|
|
28
|
+
}
|
|
29
|
+
source.onopen=()=>{if(connected&&disconnected){clearError();location.reload();}connected=true;disconnected=false;};
|
|
30
|
+
source.onerror=()=>{if(connected)disconnected=true;};
|
|
31
|
+
source.onmessage=()=>{clearError();location.reload();};
|
|
32
|
+
source.addEventListener('update',async(event)=>{
|
|
33
|
+
clearError();
|
|
34
|
+
try{
|
|
35
|
+
const update=JSON.parse(event.data);
|
|
36
|
+
if(update.protocol!==1||update.type!=='update'||update.mode!=='page'){location.reload();return;}
|
|
37
|
+
if(!await applyPageUpdate(update))location.reload();
|
|
38
|
+
}catch{location.reload();}
|
|
39
|
+
});
|
|
40
|
+
source.addEventListener('build-error',(e)=>showError(e.data));
|
|
41
|
+
source.addEventListener('build-ok',()=>clearError());
|
|
42
|
+
</script>`;return t.replace("</body>",`${i}</body>`)}r(_,"injectLiveReloadScript");function V(t,n="/"){if(n==="/")return t;let i=n.replace(/\/$/,"");return t===i?"/":t.startsWith(`${i}/`)?t.slice(i.length)||"/":void 0}r(V,"resolveMountedRequestPath");function X(t,n){let i=F(t),s=n.split("/").map(g=>{let c=decodeURIComponent(g);if(c==="."||c===".."||c.includes("/")||c.includes("\\")||/[\u0000-\u001f]/.test(c))throw new Error("Forbidden");return c}),f=J(s.join("/"));if(f.split(/[\\/]/).includes(".."))throw new Error("Forbidden");let v=F(y(i,f)),l=f.endsWith("/")?[y(v,"index.html")]:k(f)===""?[v,y(v,"index.html")]:[v];for(let g of l){let c=U(i,g);if(c===".."||c.startsWith(`..${W}`)||z(c))throw new Error("Forbidden")}return l}r(X,"resolveRequestCandidates");async function B(t,n){let[i,s]=await Promise.all([T(t),T(n)]);if(!A(i,s))throw new Error("Forbidden");return s}r(B,"resolveExistingRequestPath");async function Y(t){try{let n=await B(t,y(t,"404.html"));return await $(n)}catch(n){if(n.code==="ENOENT")return;throw n}}r(Y,"readGeneratedNotFound");async function ae({root:t,port:n,server:i,liveReload:s=!1,basePath:f="/",configureServer:v}){let l=new Set,g=r(async(a,e)=>{if(a.method!=="GET"&&a.method!=="HEAD"){e.writeHead(405,{allow:"GET, HEAD"}),e.end("Method not allowed");return}let d=new URL(a.url??"/","http://127.0.0.1"),u=typeof f=="function"?f():f,R=`${u==="/"?"":u.replace(/\/$/,"")}/__canofold/events`;if(s&&d.pathname===R){e.writeHead(200,{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive"}),e.write(`:connected
|
|
43
|
+
|
|
44
|
+
`),l.add(e);let o=r(()=>l.delete(e),"removeClient");a.once("close",o),e.once("close",o),e.once("error",o);return}let N=V(d.pathname,u),w,b=r(async()=>{e.statusCode=404;let o=await Y(w);if(o){e.setHeader("content-type",O[".html"]??"text/html; charset=utf-8"),s&&(o=Buffer.from(_(o.toString("utf8"),R))),e.end(a.method==="HEAD"?void 0:o);return}e.end(a.method==="HEAD"?void 0:"Not found")},"sendNotFound"),P=r(o=>{H("Static server error:",o),e.statusCode=500,e.end(a.method==="HEAD"?void 0:"Internal server error")},"sendInternalError");if(w=F(typeof t=="function"?t():t),N===void 0){try{await b()}catch(o){P(o)}return}let j;try{j=X(w,N)}catch{e.statusCode=403,e.end("Forbidden");return}try{let o,m;for(let C of j)try{let h=await B(w,C);m=await $(h),o=h;break}catch(h){if(h.message==="Forbidden"){e.statusCode=403,e.end("Forbidden");return}let M=h.code;if(M!=="ENOENT"&&M!=="EISDIR")throw h}if(!o||!m){await b();return}e.setHeader("content-type",G(o)),e.setHeader("cache-control","no-store"),s&&k(o)===".html"&&(m=Buffer.from(_(m.toString("utf8"),R))),e.end(a.method==="HEAD"?void 0:m)}catch(o){let m=o.code;if(m==="ENOENT"||m==="EISDIR")try{await b()}catch(C){P(C)}else P(o)}},"staticHandler"),c,p=i??L(),I=r((a,e)=>{let d=r(u=>{if(u){H("Mounted development server error:",u),e.statusCode=500,e.end("Internal server error");return}g(a,e)},"next");if(!c){d();return}try{c.middleware(a,e,d)}catch(u){d(u)}},"requestHandler");c=await v?.(p),p.on("request",I),await new Promise((a,e)=>{let d=r(u=>e(u),"onError");p.once("error",d),p.listen(n,"127.0.0.1",()=>{p.off("error",d),a()})});let x=p.address();if(!x||typeof x=="string")throw new Error("Failed to start server");let S=s?setInterval(()=>Q(l),q):void 0;return S?.unref(),{port:x.port,reload:r((a={protocol:1,type:"update",mode:"full",routes:[]})=>{E(l,D("update",JSON.stringify(a)))},"reload"),sendBuildError:r(a=>{E(l,D("build-error",a))},"sendBuildError"),sendBuildOk:r(()=>{E(l,D("build-ok"))},"sendBuildOk"),close:r(async()=>{S&&clearInterval(S),K(l),await c?.close?.(),p.off("request",I),await new Promise((a,e)=>p.close(d=>d?e(d):a()))},"close")}}r(ae,"startStaticServer");export{ae as a};
|
|
45
|
+
//# sourceMappingURL=chunk-GLAK57S4.js.map
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import{a as Nt,b as At,c as Lt,d as Rt,e as Tt,f as Et}from"./chunk-
|
|
1
|
+
import{a as Nt,b as At,c as Lt,d as Rt,e as Tt,f as Et}from"./chunk-DH7K2QL6.js";import{a as G,b as B,c as vt,e as O,f as Pt,g as H,h as St,i as Mt,j as Dt,l as $t,m as be}from"./chunk-2IR2LVMS.js";import{a as J,b as h,d as xt,e as Ct}from"./chunk-ENPRUF6E.js";import{a as wt,c as z,h as we,i as bt,l as kt}from"./chunk-VMPJIE5E.js";import{a as oe}from"./chunk-M6T5RSNJ.js";import{a as j}from"./chunk-5WXLNJTZ.js";import{b as W}from"./chunk-EAYVCA3Z.js";import{a as Z,b as F,c as re,d as V,e as $,f as yt,h as R}from"./chunk-JK7ZNBUA.js";import{a as n}from"./chunk-AYDF3IFZ.js";import{randomUUID as Qn}from"crypto";import{mkdir as Zn,rename as Te,rm as ge,writeFile as es}from"fs/promises";import{basename as hr,dirname as ut,join as mt,relative as ts,resolve as os}from"path";import{mkdir as Oe,open as vr,rm as Pr,writeFile as $e}from"fs/promises";import{dirname as Sr,join as I,posix as Ft}from"path";import{analyzeMarkdown as Ot}from"@canofold/markdown/server/analyze";function It({description:e,body:t}){if(e.trim())return e.trim();let o=t.split(/\n\n+/).find(r=>{let a=r.trim();if(!a)return!1;let s=Ot(a);return s.text&&s.headings.length===0});return o?Ot(o.trim()).text:""}n(It,"createDeterministicSummary");var xr=1;function _t(e){return e.replace(/\r?\n/g," ").replace(/([\\[\]])/g,"\\$1")}n(_t,"markdownLinkLabel");function Bt(e,t){let o=`${t.routePath}index.md`;return{title:t.title,description:t.description,routePath:h(e,t.routePath),markdownPath:h(e,o),version:t.version,locale:t.locale,status:t.status,tags:Array.isArray(t.frontmatter.tags)?t.frontmatter.tags.filter(r=>typeof r=="string"):[],owner:typeof t.frontmatter.owner=="string"?t.frontmatter.owner:void 0,headings:t.headings,lastUpdated:t.lastUpdated,frontmatter:vt(t.frontmatter)}}n(Bt,"pageMetadata");async function ke(e,t){await Oe(Sr(e),{recursive:!0});let o=await vr(e,"w");try{for await(let r of t)await o.write(r)}finally{await o.close()}}n(ke,"writePieces");async function Ee(e,t,o){async function*r(){yield`{"${t}":[`;let a=!0;for(let s of o)yield`${a?"":","}
|
|
2
2
|
${JSON.stringify(s,null,2)}`,a=!1;yield`${a?"":`
|
|
3
3
|
`}]}
|
|
4
4
|
`}n(r,"pieces"),await ke(e,r())}n(Ee,"writeJsonArray");function Cr(e,t){return t.pages.filter(o=>o.ai&&(e.ai.versions==="all"||o.version===t.currentVersion))}n(Cr,"selectedPages");function Mr(e){if(e==='"'||e==="\\")return 2;let t=e.codePointAt(0)??0;return t===8||t===9||t===10||t===12||t===13?2:t<32?6:Buffer.byteLength(e)}n(Mr,"jsonEscapedCharacterBytes");function Dr(e,t,o){let r=Buffer.byteLength(JSON.stringify({...e,part:999999999,parts:999999999,content:""})+`
|
|
5
|
-
`),a=o-r;if(a<1)throw new Error(`AI chunkSizeBytes ${o} is too small for page metadata`);let s=[],l=0,i=0,
|
|
6
|
-
`)>o)throw new Error(`Unable to keep AI content record within ${o} bytes: ${e.routePath}`);return
|
|
7
|
-
`;i&&Buffer.byteLength(i)+Buffer.byteLength(
|
|
5
|
+
`),a=o-r;if(a<1)throw new Error(`AI chunkSizeBytes ${o} is too small for page metadata`);let s=[],l=0,i=0,c=0;for(let p of t){let f=Mr(p);i>l&&c+f>a&&(s.push(t.slice(l,i)),l=i,c=0),i+=p.length,c+=f}s.push(t.slice(l,i));let d=s.map((p,f)=>({...e,part:f+1,parts:s.length,content:p}));for(let p of d)if(Buffer.byteLength(JSON.stringify(p)+`
|
|
6
|
+
`)>o)throw new Error(`Unable to keep AI content record within ${o} bytes: ${e.routePath}`);return d}n(Dr,"splitContentRecord");async function Nr(e,t,o,r,a){let s=Ft.join("ai","content",o,r),l=[],i="",c=0;async function d(){if(!i)return;let p=`${String(l.length+1).padStart(4,"0")}.jsonl`,f=Ft.join(s,p),u=Buffer.byteLength(i);await $e(I(e,f),i),l.push({path:h(t,`/${f}`),bytes:u,records:c,fingerprint:B(Buffer.from(i))}),i="",c=0}n(d,"flush"),await Oe(I(e,s),{recursive:!0});for(let p of a){let f=Bt(t,p),u={routePath:f.routePath,markdownPath:f.markdownPath,title:p.title,description:p.description,version:p.version,locale:p.locale};for(let w of Dr(u,p.body,t.ai.chunkSizeBytes)){let y=JSON.stringify(w)+`
|
|
7
|
+
`;i&&Buffer.byteLength(i)+Buffer.byteLength(y)>t.ai.chunkSizeBytes&&await d(),i+=y,c+=1}}return await d(),l}n(Nr,"writePartition");function Ar(e){let t=Buffer.byteLength(`
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
`);return e.reduce((o,r,a)=>o+Buffer.byteLength(r.body)+(a?t:0),0)}n(Ar,"llmsFullBytes");async function Ut(e,t,o){let r=$(e,t.outputDir),a=I(r,"ai"),s=I(a,"content");await Oe(a,{recursive:!0}),await Pr(s,{recursive:!0,force:!0});let l=Cr(t,o),i=l.map(u=>Bt(t,u)),
|
|
11
|
+
`);return e.reduce((o,r,a)=>o+Buffer.byteLength(r.body)+(a?t:0),0)}n(Ar,"llmsFullBytes");async function Ut(e,t,o){let r=$(e,t.outputDir),a=I(r,"ai"),s=I(a,"content");await Oe(a,{recursive:!0}),await Pr(s,{recursive:!0,force:!0});let l=Cr(t,o),i=l.map(u=>Bt(t,u)),c=new Map;for(let u of l){let w=`${u.version}\0${u.locale}`,y=c.get(w)??[];y.push(u),c.set(w,y)}let d=[];for(let[u,w]of c){let[y="",S=""]=u.split("\0"),x=await Nr(r,t,y,S,w);d.push({version:y,locale:S,pages:w.length,sourceBytes:w.reduce((b,m)=>b+Buffer.byteLength(m.body),0),shards:x})}if(await Ee(I(a,"pages.json"),"pages",i),t.ai.pageSummaries&&await Ee(I(a,"summaries.json"),"summaries",l.map(u=>({routePath:h(t,u.routePath),summary:It({description:u.description,body:u.body})}))),t.ai.codeExamples){function*u(){for(let w of l)for(let y of w.codeExamples)yield{routePath:h(t,w.routePath),...y}}n(u,"examples"),await Ee(I(a,"code-examples.json"),"examples",u())}t.ai.markdownIndex&&await ke(I(a,"index.md"),i.map(u=>`- [${_t(u.title||u.routePath)}](${u.markdownPath})
|
|
12
12
|
`)),t.ai.llmsTxt&&await ke(I(r,"llms.txt"),i.map(u=>`- [${_t(u.title||u.routePath)}](${u.routePath})
|
|
13
|
-
`));let p=Ar(l),f="disabled";if(t.ai.llmsFullTxt)if(p<=t.ai.llmsFullMaxBytes){async function*u(){for(let[
|
|
13
|
+
`));let p=Ar(l),f="disabled";if(t.ai.llmsFullTxt)if(p<=t.ai.llmsFullMaxBytes){async function*u(){for(let[w,y]of l.entries())w&&(yield`
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
`),yield
|
|
18
|
-
`)),f="manifest",oe(`llms-full.txt exceeded ${t.ai.llmsFullMaxBytes} bytes; wrote a bounded manifest pointer instead`)}await $e(I(a,"manifest.json"),JSON.stringify({schemaVersion:xr,currentVersion:o.currentVersion,includedVersions:t.ai.versions,totals:{pages:l.length,sourceBytes:l.reduce((u,
|
|
17
|
+
`),yield y.body}n(u,"bodies"),await ke(I(r,"llms-full.txt"),u()),f="full"}else{if(t.ai.llmsFullOverflow==="error")throw new Error(`llms-full.txt requires ${p} bytes, exceeding ai.llmsFullMaxBytes ${t.ai.llmsFullMaxBytes}`);await $e(I(r,"llms-full.txt"),["# Canofold AI content manifest","",`The full Markdown corpus requires ${p} bytes and exceeds the configured single-file budget of ${t.ai.llmsFullMaxBytes} bytes.`,"",`Use ${h(t,"/ai/manifest.json")} to load the complete versioned and locale-partitioned content shards.`,""].join(`
|
|
18
|
+
`)),f="manifest",oe(`llms-full.txt exceeded ${t.ai.llmsFullMaxBytes} bytes; wrote a bounded manifest pointer instead`)}await $e(I(a,"manifest.json"),JSON.stringify({schemaVersion:xr,currentVersion:o.currentVersion,includedVersions:t.ai.versions,totals:{pages:l.length,sourceBytes:l.reduce((u,w)=>u+Buffer.byteLength(w.body),0)},budgets:{chunkSizeBytes:t.ai.chunkSizeBytes,llmsFullMaxBytes:t.ai.llmsFullMaxBytes},llmsFull:{enabled:t.ai.llmsFullTxt,mode:f,sourceBytes:p,path:t.ai.llmsFullTxt?h(t,"/llms-full.txt"):null},partitions:d},null,2))}n(Ut,"writeAiOutputs");import{cp as xn,mkdir as at,rm as nt,writeFile as Ae}from"fs/promises";import{dirname as Qo,join as X}from"path";import{renderToStaticMarkup as Cn}from"react-dom/server";import{createMarkdownRenderer as Mn}from"@canofold/markdown/server";import{detectMarkdownAssets as Zo}from"@canofold/markdown/server/analyze";import{createRequire as Lr}from"module";import{readFile as Ht}from"fs/promises";import{dirname as jt,join as zt}from"path";var Gt=Lr(import.meta.url);function Kt(e){return Gt.resolve(e)}n(Kt,"resolveFromModule");function Wt(e){try{return Gt.resolve(e,{paths:[process.cwd()]})}catch(t){throw new Error(`Cannot resolve ${e} from ${process.cwd()}. Install @canofold/plugins to include math styles.`,{cause:t})}}n(Wt,"resolveFromProject");async function Rr(){return Ht(new URL("./styles.input.css",import.meta.url),"utf8")}n(Rr,"readInputCss");function Vt(){return zt(jt(Wt("@canofold/plugins/math.css")),"fonts")}n(Vt,"mathFontsDir");function Jt(){return zt(jt(Kt("@canofold/markdown/base.css")),"file-icons")}n(Jt,"markdownFileIconsDir");async function Ie(e,t=!1){return Ht(t?Wt(e):Kt(e),"utf8")}n(Ie,"readPublishedCss");async function Tr({math:e=!1}={}){let[t,o,r,a]=await Promise.all([Rr(),Ie("@canofold/markdown/base.css"),Ie("@canofold/markdown/theme.css"),e?Ie("@canofold/plugins/math.css",!0):void 0]);return`/* Markdown base */
|
|
19
19
|
${o}
|
|
20
20
|
/* Default theme */
|
|
21
21
|
${r}
|
|
@@ -23,7 +23,7 @@ ${a?`/* Math */
|
|
|
23
23
|
${a}
|
|
24
24
|
`:""}/* Canofold shell */
|
|
25
25
|
${t}
|
|
26
|
-
`}n(Tr,"compileCss");var qt=new Map;function Xt(e={}){let t=e.math===!0,o=qt.get(t);return o||(o=Tr({math:t}),qt.set(t,o)),o}n(Xt,"buildCssCached");import{Bot as Er,Box as $r,Code2 as Or,FileCode2 as Ir,FileText as Fr,Gauge as _r,Globe2 as Br,Layers3 as Ur,Rocket as qr,Search as Hr,Sparkles as jr,SquareTerminal as zr}from"lucide-react";import{Fragment as Kr,jsx as L,jsxs as ae}from"react/jsx-runtime";var Gr={ai:Er,box:$r,code:Or,file:Fr,"file-code":Ir,gauge:_r,globe:Br,layers:Ur,rocket:qr,search:Hr,sparkles:jr,terminal:zr};function Yt({name:e,className:t}){if(!e)return null;let o=Gr[e];return L(o,{"aria-hidden":"true",className:t,strokeWidth:1.8})}n(Yt,"HomeIcon");function Qt({page:e,config:t}){let o=e.frontmatter.hero??{},r=e.frontmatter.features??[],a=o.actions??[];return ae(Kr,{children:[ae("section",{className:`cf-hero${o.image?" cf-hero-with-visual":""}`,children:[ae("div",{className:"cf-hero-copy",children:[L("h1",{className:"cf-hero-title",children:e.title}),o.accent?L("p",{className:"cf-hero-accent",children:o.accent}):null,o.tagline?L("p",{className:"cf-hero-tagline",children:o.tagline}):null,a.length>0?L("div",{className:"cf-hero-actions",children:a.map(s=>ae("a",{className:`cf-btn ${s.primary?"cf-btn-primary":"cf-btn-secondary"}`,href:h(t,s.link),children:[L(Yt,{name:s.icon}),s.text]},s.link))}):null]}),o.image?L("div",{className:"cf-hero-visual",children:L("img",{src:h(t,o.image),alt:o.imageAlt??"",decoding:"async",fetchPriority:"high"})}):null]}),r.length>0?L("section",{className:"cf-feature-section",children:L("div",{className:"cf-features",children:r.map((s,l)=>ae("article",{className:"cf-feature",children:[s.image||s.icon?L("div",{className:"cf-feature-icon",children:s.image?L("img",{src:h(t,s.image),alt:"",width:"32",height:"32",decoding:"async"}):L(Yt,{name:s.icon})}):null,L("h3",{children:s.title}),L("p",{children:s.details})]},`${s.title}-${l}`))})}):null]})}n(Qt,"HomeHero");import{ChevronDown as ra,Code2 as aa,Eye as na}from"lucide-react";var Wr={labels:{skipToContent:"\u8DF3\u5230\u6B63\u6587",search:"\u641C\u7D22\u6587\u6863",searchEmpty:"\u6CA1\u6709\u627E\u5230\u5339\u914D\u6587\u6863",searchUnavailable:"\u641C\u7D22\u7D22\u5F15\u6682\u65F6\u4E0D\u53EF\u7528",language:"\u8BED\u8A00",primaryNavigation:"\u4E3B\u5BFC\u822A",theme:"\u5207\u6362\u4E3B\u9898",openSidebar:"\u6253\u5F00\u4FA7\u8FB9\u680F",onThisPage:"\u672C\u9875\u76EE\u5F55",edit:"\u7F16\u8F91\u6B64\u9875",updated:"\u6700\u540E\u66F4\u65B0",previous:"\u4E0A\u4E00\u9875",next:"\u4E0B\u4E00\u9875",close:"\u5173\u95ED",source:"\u6E90\u6587\u6863",preview:"\u9884\u89C8\u6548\u679C",copySource:"\u590D\u5236\u6E90\u6587\u6863",sourceCopied:"\u6E90\u6587\u6863\u5DF2\u590D\u5236",quickActions:"\u5FEB\u6377\u5165\u53E3",github:"GitHub \u4ED3\u5E93",docsNavigation:"\u6587\u6863\u5BFC\u822A",pageNavigation:"\u9875\u9762\u5BFC\u822A",advertisement:"\u63A8\u5E7F",version:"\u6587\u6863\u7248\u672C"},brandTagline:"\u9762\u5411 AI \u7684 React/MDX \u6587\u6863",markdownElementGroups:[{id:"headings",label:"\u6807\u9898\u4E0E\u6B63\u6587",detail:"H1-H6 \xB7 p \xB7 hr",hash:"\u6807\u9898\u4E0E\u6B63\u6587"},{id:"inline",label:"\u884C\u5185\u8BED\u4E49",detail:"a \xB7 strong \xB7 code",hash:"\u884C\u5185\u8BED\u4E49"},{id:"lists",label:"\u5217\u8868\u4E0E\u4EFB\u52A1",detail:"ul \xB7 ol \xB7 task",hash:"\u5217\u8868\u4E0E\u4EFB\u52A1"},{id:"callouts",label:"\u5F15\u7528\u4E0E\u63D0\u793A",detail:"quote \xB7 callout",hash:"\u5F15\u7528\u4E0E\u63D0\u793A"},{id:"code",label:"\u4EE3\u7801\u4E0E\u7EC8\u7AEF",detail:"Shiki \xB7 pre \xB7 diff",hash:"\u4EE3\u7801\u4E0E\u7EC8\u7AEF"},{id:"tables",label:"\u8868\u683C\u4E0E\u6570\u636E",detail:"table \xB7 CSV \xB7 sort",hash:"\u8868\u683C\u4E0E\u6570\u636E"},{id:"media",label:"\u5A92\u4F53\u4E0E\u5D4C\u5165",detail:"img \xB7 video \xB7 iframe",hash:"\u5A92\u4F53\u4E0E\u5D4C\u5165"},{id:"diagrams",label:"\u56FE\u8868\u4E0E\u6570\u5B66",detail:"Mermaid \xB7 PlantUML \xB7 KaTeX",hash:"\u56FE\u8868\u4E0E\u6570\u5B66"},{id:"disclosure",label:"\u6298\u53E0\u4E0E\u811A\u6CE8",detail:"details \xB7 footnotes",hash:"\u6298\u53E0\u4E0E\u811A\u6CE8"},{id:"extensions",label:"\u6269\u5C55\u5185\u5BB9\u7EC4\u4EF6",detail:"tabs \xB7 steps \xB7 cards \xB7 tree",hash:"\u6269\u5C55\u5185\u5BB9\u7EC4\u4EF6"},{id:"api",label:"API \u4E0E\u4FA7\u6CE8",detail:"API \xB7 aside",hash:"api-\u4E0E\u4FA7\u6CE8"},{id:"metadata",label:"\u6587\u6863\u5143\u4FE1\u606F",detail:"meta \xB7 breadcrumb \xB7 pagination",hash:"\u6587\u6863\u5143\u4FE1\u606F"}],quickActions:{headingsTitle:"\u6807\u9898 H1-H6",headingsDescription:"\u67E5\u770B\u5B8C\u6574\u6807\u9898\u5C42\u7EA7\u4E0E\u6B63\u6587\u8282\u594F",codeTitle:"\u4EE3\u7801\u4E0E\u8BED\u6CD5\u9AD8\u4EAE",codeDescription:"Shiki \u9AD8\u4EAE\u3001diff \u884C\u72B6\u6001\u4E0E\u590D\u5236",tableTitle:"\u8868\u683C\u4E0E\u6570\u636E\u64CD\u4F5C",tableDescription:"\u6392\u5E8F\u3001\u590D\u5236 CSV \u4E0E\u653E\u5927\u9884\u89C8",diagramTitle:"Mermaid\u3001PlantUML \u4E0E\u6570\u5B66\u516C\u5F0F",diagramDescription:"\u56FE\u8868\u9884\u89C8\u3001\u6E90\u7801\u4E0E\u7F29\u653E",sourceDescription:"\u6253\u5F00\u5F53\u524D\u9875\u9762\u7684 Markdown \u539F\u6587",themeDescription:"\u5728\u6D45\u8272\u4E0E\u6DF1\u8272\u9605\u8BFB\u6A21\u5F0F\u95F4\u5207\u6362"}},Vr={labels:{skipToContent:"Skip to content",search:"Search docs",searchEmpty:"No matching documents",searchUnavailable:"Search index is unavailable",language:"Language",primaryNavigation:"Primary navigation",theme:"Toggle theme",openSidebar:"Open sidebar",onThisPage:"On this page",edit:"Edit this page",updated:"Last updated",previous:"Previous",next:"Next",close:"Close",source:"Source",preview:"Preview",copySource:"Copy source",sourceCopied:"Markdown source copied",quickActions:"Quick actions",github:"GitHub repository",docsNavigation:"Docs navigation",pageNavigation:"Page navigation",advertisement:"Advertisement",version:"Documentation version"},brandTagline:"AI-friendly React/MDX documentation",markdownElementGroups:[{id:"headings",label:"Headings & prose",detail:"H1-H6 \xB7 p \xB7 hr",hash:"headings-and-prose"},{id:"inline",label:"Inline semantics",detail:"a \xB7 strong \xB7 code",hash:"inline-semantics"},{id:"lists",label:"Lists & tasks",detail:"ul \xB7 ol \xB7 task",hash:"lists-and-tasks"},{id:"callouts",label:"Quotes & callouts",detail:"quote \xB7 callout",hash:"quotes-and-callouts"},{id:"code",label:"Code & terminal",detail:"Shiki \xB7 pre \xB7 diff",hash:"code-and-terminal"},{id:"tables",label:"Tables & data",detail:"table \xB7 CSV \xB7 sort",hash:"tables-and-data"},{id:"media",label:"Media & embeds",detail:"img \xB7 video \xB7 iframe",hash:"media-and-embeds"},{id:"diagrams",label:"Diagrams & math",detail:"Mermaid \xB7 PlantUML \xB7 KaTeX",hash:"diagrams-and-math"},{id:"disclosure",label:"Disclosure & notes",detail:"details \xB7 footnotes",hash:"disclosure-and-notes"},{id:"extensions",label:"Extended components",detail:"tabs \xB7 steps \xB7 cards \xB7 tree",hash:"extended-content-components"},{id:"api",label:"API & sidenote",detail:"API \xB7 aside",hash:"api-and-sidenote"},{id:"metadata",label:"Document metadata",detail:"meta \xB7 breadcrumb \xB7 pagination",hash:"document-metadata"}],quickActions:{headingsTitle:"Headings H1-H6",headingsDescription:"Inspect the complete heading scale and prose rhythm",codeTitle:"Code and syntax highlighting",codeDescription:"Shiki highlighting, diff line states, and copy",tableTitle:"Tables and data actions",tableDescription:"Sort, copy CSV, and zoom",diagramTitle:"Mermaid, PlantUML, and math",diagramDescription:"Diagram preview, source, and scale",sourceDescription:"Open the current page Markdown source",themeDescription:"Switch between light and dark reading modes"}},Jr={copyCode:"\u590D\u5236\u4EE3\u7801",copyFailed:"\u590D\u5236\u5931\u8D25",copySnippet:"\u590D\u5236\u7247\u6BB5",copyTerminal:"\u590D\u5236\u7EC8\u7AEF\u8F93\u51FA",terminalTitle:"\u7EC8\u7AEF",tabsTitle:"\u9009\u9879\u5361",tabItem:"\u9009\u9879 {index}",codeGroupTitle:"\u4EE3\u7801\u7EC4",codeGroupItem:"\u4EE3\u7801 {index}",taskCompleted:"\u5DF2\u5B8C\u6210\u4EFB\u52A1",taskIncomplete:"\u672A\u5B8C\u6210\u4EFB\u52A1",copySectionLink:"\u590D\u5236\u7AE0\u8282\u94FE\u63A5",tableTitle:"\u8868\u683C",copyTableCsv:"\u590D\u5236\u4E3A CSV",downloadTableCsv:"\u4E0B\u8F7D CSV",zoomTable:"\u653E\u5927\u8868\u683C",closeTablePreview:"\u5173\u95ED\u8868\u683C\u9884\u89C8",sortTableColumn:"\u6309\u7B2C {column} \u5217\u6392\u5E8F",zoomImage:"\u653E\u5927\u56FE\u7247",closeImagePreview:"\u5173\u95ED\u56FE\u7247\u9884\u89C8",imageGallery:"\u56FE\u7247\u753B\u5ECA",closeImageGallery:"\u5173\u95ED\u56FE\u7247\u753B\u5ECA",previousGalleryImage:"\u4E0A\u4E00\u5F20\u56FE\u7247",nextGalleryImage:"\u4E0B\u4E00\u5F20\u56FE\u7247",galleryThumbnails:"\u56FE\u7247\u753B\u5ECA\u7F29\u7565\u56FE",galleryImage:"\u56FE\u7247"},Zt={zh:{title:"\u9875\u9762\u672A\u627E\u5230",description:"\u8BE5\u9875\u9762\u4E0D\u5B58\u5728\u3001\u5DF2\u88AB\u79FB\u52A8\u6216\u5730\u5740\u6709\u8BEF\u3002",home:"\u8FD4\u56DE\u9996\u9875 \u2192"},en:{title:"Page not found",description:"The page you're looking for doesn't exist or has been moved.",home:"Go back home \u2192"}};function ve(e){return e.toLowerCase().split("-")[0]??e.toLowerCase()}n(ve,"languageCode");function eo(e,t){if(!e)return;let o=t.toLowerCase();return Object.entries(e).find(([r])=>r.toLowerCase()===o)?.[1]}n(eo,"localizedValue");function Fe(e,t){return eo(t,e)}n(Fe,"localeMessagesFor");function to(e,t){let o=ve(e)==="zh"?Wr:Vr,r=Fe(e,t);return{labels:{...o.labels,...r?.labels},brandTagline:r?.brandTagline??o.brandTagline,markdownElementGroups:o.markdownElementGroups.map(a=>({...a,...r?.markdownElementGroups?.[a.id]})),quickActions:{...o.quickActions,...r?.quickActions}}}n(to,"layoutContentFor");function Pe(e,t){let o=Fe(e,t)?.markdown,r=ve(e)==="zh"?Jr:void 0;if(!(!r&&!o))return{...r,...o}}n(Pe,"markdownLabelsFor");function _e(e,t){return{...ve(e)==="zh"?Zt.zh:Zt.en,...Fe(e,t)?.notFound}}n(_e,"notFoundContentFor");function oo(e,t){let o=eo(t,e);if(o)return o;let r=ve(e);if(r==="zh")return"\u7B80\u4F53\u4E2D\u6587";if(r==="en")return"English";try{return new Intl.DisplayNames([e],{type:"language"}).of(e)??e}catch{return e}}n(oo,"localeNameFor");import{ChevronDown as ro,Languages as Xr,Moon as Yr,PanelLeft as Qr,Search as Zr,Sun as ea}from"lucide-react";import{Fragment as no,jsx as g,jsxs as D}from"react/jsx-runtime";function ta(){return D("svg",{className:"cf-brand-mark",width:"32",height:"32",viewBox:"0 0 512 512","aria-hidden":"true",children:[D("defs",{children:[D("linearGradient",{id:"cf-brand-top",x1:"90",y1:"60",x2:"400",y2:"260",gradientUnits:"userSpaceOnUse",children:[g("stop",{offset:"0",stopColor:"#1768FF"}),g("stop",{offset:"0.5",stopColor:"#119BFA"}),g("stop",{offset:"1",stopColor:"#18D8D3"})]}),D("linearGradient",{id:"cf-brand-fold",x1:"70",y1:"220",x2:"210",y2:"300",gradientUnits:"userSpaceOnUse",children:[g("stop",{offset:"0",stopColor:"#2C7BFF"}),g("stop",{offset:"1",stopColor:"#554FF5"})]}),D("linearGradient",{id:"cf-brand-bottom",x1:"200",y1:"270",x2:"90",y2:"460",gradientUnits:"userSpaceOnUse",children:[g("stop",{offset:"0",stopColor:"#554FF5"}),g("stop",{offset:"0.62",stopColor:"#7845FA"}),g("stop",{offset:"1",stopColor:"#8637F5"})]}),D("mask",{id:"cf-brand-spark-cut",maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"512",height:"512",children:[g("rect",{width:"512",height:"512",fill:"#fff"}),g("path",{d:"M112 201C117 229 139 251 167 256C139 261 117 283 112 311C107 283 85 261 57 256C85 251 107 229 112 201Z",fill:"#000"})]})]}),D("g",{mask:"url(#cf-brand-spark-cut)",fill:"none",strokeLinejoin:"round",children:[g("path",{d:"M348 138A150 150 0 0 0 107 243",stroke:"url(#cf-brand-top)",strokeWidth:"86",strokeLinecap:"round"}),g("path",{d:"M78 256C118 228 158 228 208 256",stroke:"url(#cf-brand-fold)",strokeWidth:"70",strokeLinecap:"round"}),g("path",{d:"M107 269A150 150 0 0 0 348 374",stroke:"url(#cf-brand-bottom)",strokeWidth:"86",strokeLinecap:"round"})]})]})}n(ta,"BrandMark");function Be({size:e=16}){return g(Zr,{size:e,strokeWidth:2,"aria-hidden":"true"})}n(Be,"SearchIcon");function oa(){return D(no,{children:[g(ea,{className:"cf-icon-sun",size:18,strokeWidth:2,"aria-hidden":"true"}),g(Yr,{className:"cf-icon-moon",size:18,strokeWidth:2,"aria-hidden":"true"})]})}n(oa,"ThemeIcon");function Ue(e,t){let o=t.split("/").filter(Boolean);return t.startsWith("/")&&(e.page.routePath===t||e.page.routePath.startsWith(t)||e.page.group!==""&&o.includes(e.page.group))}n(Ue,"navItemIsActive");function ao({model:e}){let{config:t,page:o,home:r,labels:a,localeRoot:s,navItems:l,versionLabel:i,versionOptions:d,languageOptions:c,hasSidebarItems:p}=e;return D("header",{className:r?"cf-header cf-header-home":"cf-header",children:[D("div",{className:"cf-header-inner",children:[!r&&p?g("button",{className:"cf-sidebar-toggle",type:"button","data-canofold-sidebar-open":"","data-canofold-sidebar-open-label":a.openSidebar,"data-canofold-sidebar-close-label":a.close,"aria-label":a.openSidebar,"aria-expanded":"false",children:g(Qr,{size:18,strokeWidth:2,"aria-hidden":"true"})}):null,g("a",{className:"cf-brand",href:s,"aria-label":t.title,children:t.theme.logo?D(no,{children:[g("img",{className:t.theme.logoDark?"cf-brand-logo cf-brand-logo-light":"cf-brand-logo",src:h(t,t.theme.logo),alt:t.title}),t.theme.logoDark?g("img",{className:"cf-brand-logo cf-brand-logo-dark",src:h(t,t.theme.logoDark),alt:t.title}):null]}):g(ta,{})}),t.search.enabled?D("button",{className:"cf-search-trigger",type:"button","data-canofold-search-open":"","aria-haspopup":"dialog","aria-label":a.search,children:[g(Be,{size:15}),g("span",{children:a.search}),g("kbd",{className:"cf-kbd",children:"\u2318K"})]}):null,D("div",{className:"cf-header-right",children:[l.length>0?g("nav",{className:"cf-header-nav","aria-label":a.primaryNavigation,children:l.map(f=>{let u=Ue(e,f.routePath),b=/^https?:\/\//.test(f.routePath);return g("a",{className:u?"cf-header-link cf-header-link-active":"cf-header-link",href:h(t,f.routePath),"aria-current":u?"page":void 0,...b?{target:"_blank",rel:"noreferrer"}:{},children:f.title},f.routePath)})}):null,d.length>1?D("details",{className:"cf-menu cf-version-menu","data-canofold-menu":"",children:[D("summary",{className:"cf-version-badge","aria-label":a.version,children:[g("span",{children:i}),g(ro,{size:13,strokeWidth:2,"aria-hidden":"true"})]}),g("div",{className:"cf-menu-list",children:d.map(f=>g("a",{className:f.id===o.version?"cf-menu-item cf-menu-item-active":"cf-menu-item",href:h(t,f.routePath),children:g("span",{children:f.label})},f.id))})]}):g("span",{className:"cf-version-badge",children:i}),c.length>1?D("details",{className:"cf-menu cf-lang","data-canofold-menu":"",children:[D("summary",{className:"cf-icon-button cf-lang-trigger","aria-label":a.language,children:[g(Xr,{size:19,strokeWidth:1.9,"aria-hidden":"true"}),g(ro,{size:13,strokeWidth:2,"aria-hidden":"true"})]}),g("div",{className:"cf-menu-list cf-language-menu-list",children:c.map(f=>g("a",{className:f.locale===o.locale?"cf-menu-item cf-language-menu-item cf-menu-item-active":"cf-menu-item cf-language-menu-item",href:h(t,f.routePath),lang:f.locale,"aria-current":f.locale===o.locale?"page":void 0,children:oo(f.locale,t.i18n.localeNames)},f.locale))})]}):null,t.theme.darkMode?g("button",{className:"cf-icon-button",type:"button","data-canofold-theme-toggle":"","aria-label":a.theme,children:g(oa,{})}):null,t.github?g("a",{className:"cf-icon-button cf-github-link",href:t.github,target:"_blank",rel:"noreferrer","aria-label":a.github,children:g("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:g("path",{d:"M12 2C6.48 2 2 6.58 2 12.25c0 4.53 2.87 8.37 6.84 9.73.5.1.68-.22.68-.49 0-.24-.01-.87-.01-1.71-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.62.07-.62 1 .07 1.53 1.06 1.53 1.06.89 1.56 2.34 1.11 2.91.85.09-.66.35-1.11.63-1.37-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.03 1.03-2.75-.1-.26-.45-1.3.1-2.71 0 0 .84-.27 2.75 1.05a9.36 9.36 0 0 1 5 0c1.91-1.32 2.75-1.05 2.75-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.63 1.03 2.75 0 3.94-2.34 4.81-4.57 5.06.36.32.68.94.68 1.9 0 1.37-.01 2.47-.01 2.81 0 .27.18.6.69.49A10.26 10.26 0 0 0 22 12.25C22 6.58 17.52 2 12 2z"})})}):null]})]}),r?null:g("div",{className:"cf-route-progress","aria-hidden":"true",children:g("span",{"data-canofold-progress":""})})]})}n(ao,"LayoutHeader");import{jsx as k,jsxs as N}from"react/jsx-runtime";function io(e,t){return e.type==="link"?e.routePath===t:e.items.some(o=>io(o,t))}n(io,"sidebarContainsRoute");function so(e){return{"--cf-sidebar-indent":`${Math.min(e,4)*10}px`}}n(so,"sidebarDepthStyle");function lo({item:e,model:t,depth:o=0}){let r={"data-depth":o,style:so(o)};if(e.type==="link"){let s=e.routePath===t.page.routePath;return k("a",{...r,className:s?"cf-sidebar-link cf-sidebar-link-active":"cf-sidebar-link",href:h(t.config,e.routePath),"aria-current":s?"page":void 0,"data-canofold-sidebar-link":"",children:e.title})}let a=io(e,t.page.routePath);return N("details",{className:"cf-sidebar-subgroup",open:a||!e.collapsed,"data-depth":o,children:[N("summary",{className:"cf-sidebar-subgroup-title",style:so(o),children:[e.title,k(ra,{className:"cf-chevron",size:12,strokeWidth:2.5,"aria-hidden":"true"})]}),k("div",{className:"cf-sidebar-subgroup-items",children:e.items.map((s,l)=>k(lo,{item:s,model:t,depth:o+1},s.type==="link"?s.routePath:s.segment||l))})]})}n(lo,"SidebarEntry");function co({model:e}){let{config:t,labels:o,navItems:r,sidebarGroups:a}=e,s=[e.page.version,e.page.locale,e.page.group].join(":");return N("aside",{className:"cf-sidebar","data-canofold-sidebar":"","data-canofold-sidebar-key":s,children:[r.length>0?k("nav",{className:"cf-sidebar-primary-nav","aria-label":o.primaryNavigation,children:r.map(l=>{let i=Ue(e,l.routePath),d=/^https?:\/\//.test(l.routePath);return k("a",{className:i?"cf-sidebar-primary-link cf-sidebar-primary-link-active":"cf-sidebar-primary-link",href:h(t,l.routePath),"aria-current":i?"page":void 0,"data-canofold-sidebar-link":"",...d?{target:"_blank",rel:"noreferrer"}:{},children:l.title},l.routePath)})}):null,k("nav",{className:"cf-sidebar-nav","aria-label":o.docsNavigation,children:a.map((l,i)=>k("div",{className:"cf-sidebar-items cf-sidebar-root",children:l.items.map((d,c)=>k(lo,{item:d,model:e,depth:0},d.type==="link"?d.routePath:d.segment||c))},l.segment||i))})]})}n(co,"Sidebar");function sa({model:e}){let{editHref:t,labels:o,page:r}=e,a=new Intl.DateTimeFormat(r.locale,{dateStyle:"medium"}).format(new Date(r.lastUpdated));return N("footer",{className:"cf-page-footer",children:[N("div",{className:"cf-page-meta",children:[N("div",{className:"cf-page-meta-actions",children:[t?k("a",{href:t,children:o.edit}):null,k("button",{className:"cf-page-source",type:"button","data-canofold-source-open":"","aria-haspopup":"dialog",children:o.source})]}),N("span",{children:[o.updated," ",a]})]}),N("nav",{className:"cf-doc-pagination","aria-label":o.pageNavigation,children:[r.previous?N("a",{className:"cf-doc-pagination-link",href:h(e.config,r.previous.routePath),children:[k("span",{className:"cf-doc-pagination-label",children:o.previous}),k("strong",{className:"cf-doc-pagination-title",children:r.previous.title})]}):k("span",{}),r.next?N("a",{className:"cf-doc-pagination-link cf-doc-pagination-link-next",href:h(e.config,r.next.routePath),children:[k("span",{className:"cf-doc-pagination-label",children:o.next}),k("strong",{className:"cf-doc-pagination-title",children:r.next.title})]}):null]})]})}n(sa,"PageFooter");function ia({model:e}){let{config:t,labels:o,outlineHeadings:r}=e,a=t.advertising;return N("aside",{className:"cf-outline","data-canofold-outline":"","aria-label":o.onThisPage,children:[r.length>0?k("nav",{className:"cf-outline-nav",children:r.map(s=>k("a",{className:`cf-outline-link cf-outline-link-${s.level}`,"data-canofold-outline-link":"",href:`#${s.slug}`,children:s.text},s.slug))}):null,a?N("a",{className:"cf-outline-ad",href:h(t,a.href),target:"_blank",rel:"sponsored noopener noreferrer","aria-label":a.alt,children:[k("span",{children:a.label??o.advertisement}),k("img",{src:h(t,a.image),alt:a.alt,loading:"lazy"})]}):null]})}n(ia,"Outline");function la({model:e,children:t}){let{config:o,labels:r,page:a}=e,s=a.body.trim(),l={...Pe(a.locale,o.i18n.messages),...o.markdown.labels};return N("div",{className:"cf-shell cf-shell-playground",children:[k("div",{className:"cf-sidebar-backdrop","data-canofold-sidebar-backdrop":"","aria-hidden":"true",hidden:!0}),k(co,{model:e}),k("main",{id:"canofold-main",className:"cf-main cf-playground-main",tabIndex:-1,"data-pagefind-body":a.search?"":void 0,children:N("div",{className:"cf-playground","data-canofold-playground":"","data-canofold-playground-labels":JSON.stringify(l),"data-canofold-playground-preview-label":r.preview,"data-view":"preview",children:[N("button",{className:"cf-playground-toggle",type:"button","data-canofold-playground-toggle":"","data-source-label":r.source,"data-preview-label":r.preview,"aria-label":r.source,title:r.source,children:[k(aa,{className:"cf-playground-toggle-source",size:18,strokeWidth:2,"aria-hidden":"true"}),k(na,{className:"cf-playground-toggle-preview",size:18,strokeWidth:2,"aria-hidden":"true"})]}),k("section",{className:"cf-playground-pane cf-playground-source","aria-label":r.source,"data-pagefind-ignore":"",children:k("textarea",{defaultValue:s,"aria-label":r.source,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-canofold-playground-source":""})}),k("div",{className:"cf-playground-resizer",role:"separator","aria-label":`${r.source} / ${r.preview}`,"aria-orientation":"vertical","aria-valuemin":25,"aria-valuemax":75,"aria-valuenow":45,tabIndex:0,"data-canofold-playground-resizer":""}),k("section",{className:"cf-playground-pane cf-playground-preview","aria-label":r.preview,children:k("div",{className:"cf-playground-preview-scroll","data-canofold-playground-preview":"",children:t})})]})})]})}n(la,"Playground");function uo({model:e,children:t}){return e.page.frontmatter.layout==="playground"?k(la,{model:e,children:t}):N("div",{className:"cf-shell",children:[k("div",{className:"cf-sidebar-backdrop","data-canofold-sidebar-backdrop":"","aria-hidden":"true",hidden:!0}),k(co,{model:e}),N("main",{id:"canofold-main",className:"cf-main",tabIndex:-1,"data-pagefind-body":e.page.search?"":void 0,children:[t,k(sa,{model:e})]}),k(ia,{model:e})]})}n(uo,"LayoutDocument");function Se(e){return wt(e.relativePath,e.locale)}n(Se,"subPath");function ne(e,t){let o=e.find(r=>r.id===t);if(!o)throw new Error(`Missing Markdown element group: ${t}`);return o.hash}n(ne,"markdownGroupHash");function mo({config:e,graph:t,page:o,home:r,assets:a,rawSource:s}){let l=t.pages.filter(m=>m.version===o.version&&Se(m)===Se(o)),i=t.locales.map(m=>{let x=l.find(M=>M.locale===m);return{locale:m,routePath:x?.routePath??z(m,t.defaultLocale,o.versionBase)}}),d=t.versions.map(m=>{let x=t.pages.find(M=>M.version===m.id&&M.locale===o.locale&&Se(M)===Se(o));return{id:m.id,label:m.label,routePath:x?.routePath??z(o.locale,t.defaultLocale,m.base)}}),c=t.sidebar[o.version]?.[o.locale]??[],p=to(o.locale,e.i18n.messages),f=z(o.locale,t.defaultLocale,o.versionBase),u=`${f}markdown/playground/`,b=t.pages.some(m=>m.locale===o.locale&&m.routePath===u),w=n(m=>m.type==="link"?m.routePath===o.routePath:m.items.some(w),"isActiveItem"),P=n(m=>m.items.some(w),"isActiveGroup"),y=c.filter(m=>m.title===""||m.segment===o.group||P(m)),C=typeof o.frontmatter.seoTitle=="string"?o.frontmatter.seoTitle.trim():"";return{config:e,page:o,home:r,assets:a,title:C||(o.title&&o.title!==e.title?`${o.title} | ${e.title}`:e.title),description:o.description||e.description,...e.editUrl&&o.version===t.currentVersion?{editHref:`${e.editUrl.replace(/\/$/,"")}/${o.relativePath}`}:{},alternatePages:l,languageOptions:i,versionOptions:d,navItems:t.nav[o.version]?.[o.locale]??[],content:p,labels:p.labels,brandTagline:e.i18n.messages?.[o.locale]?.brandTagline||e.description||p.brandTagline,versionLabel:t.versions.length===1&&o.version==="current"?`v${j}`:t.versions.find(m=>m.id===o.version)?.label??o.version,localeRoot:h(e,f),markdownShowcaseHref:h(e,u),hasMarkdownShowcase:b,sidebarGroups:y,hasSidebarItems:y.some(m=>m.items.length>0),outlineHeadings:o.headings.filter(m=>m.level>=1&&m.level<=6),searchProvider:xt(e.search.provider),searchIndexUrl:o.version===t.currentVersion?h(e,`/search/${o.locale}.json`):h(e,`/search/${o.version}/${o.locale}.json`),searchBundleUrl:h(e,"/pagefind/pagefind.js"),markdownClientScript:`window.__canofoldEnhanceMarkdown = async (target) => {
|
|
26
|
+
`}n(Tr,"compileCss");var qt=new Map;function Xt(e={}){let t=e.math===!0,o=qt.get(t);return o||(o=Tr({math:t}),qt.set(t,o)),o}n(Xt,"buildCssCached");import{Bot as Er,Box as $r,Code2 as Or,FileCode2 as Ir,FileText as Fr,Gauge as _r,Globe2 as Br,Layers3 as Ur,Rocket as qr,Search as Hr,Sparkles as jr,SquareTerminal as zr}from"lucide-react";import{Fragment as Kr,jsx as L,jsxs as ae}from"react/jsx-runtime";var Gr={ai:Er,box:$r,code:Or,file:Fr,"file-code":Ir,gauge:_r,globe:Br,layers:Ur,rocket:qr,search:Hr,sparkles:jr,terminal:zr};function Yt({name:e,className:t}){if(!e)return null;let o=Gr[e];return L(o,{"aria-hidden":"true",className:t,strokeWidth:1.8})}n(Yt,"HomeIcon");function Qt({page:e,config:t}){let o=e.frontmatter.hero??{},r=e.frontmatter.features??[],a=o.actions??[];return ae(Kr,{children:[ae("section",{className:`cf-hero${o.image?" cf-hero-with-visual":""}`,children:[ae("div",{className:"cf-hero-copy",children:[L("h1",{className:"cf-hero-title",children:e.title}),o.accent?L("p",{className:"cf-hero-accent",children:o.accent}):null,o.tagline?L("p",{className:"cf-hero-tagline",children:o.tagline}):null,a.length>0?L("div",{className:"cf-hero-actions",children:a.map(s=>ae("a",{className:`cf-btn ${s.primary?"cf-btn-primary":"cf-btn-secondary"}`,href:h(t,s.link),children:[L(Yt,{name:s.icon}),s.text]},s.link))}):null]}),o.image?L("div",{className:"cf-hero-visual",children:L("img",{src:h(t,o.image),alt:o.imageAlt??"",decoding:"async",fetchPriority:"high"})}):null]}),r.length>0?L("section",{className:"cf-feature-section",children:L("div",{className:"cf-features",children:r.map((s,l)=>ae("article",{className:"cf-feature",children:[s.image||s.icon?L("div",{className:"cf-feature-icon",children:s.image?L("img",{src:h(t,s.image),alt:"",width:"32",height:"32",decoding:"async"}):L(Yt,{name:s.icon})}):null,L("h3",{children:s.title}),L("p",{children:s.details})]},`${s.title}-${l}`))})}):null]})}n(Qt,"HomeHero");import{ChevronDown as ra,Code2 as aa,Eye as na}from"lucide-react";var Wr={labels:{skipToContent:"\u8DF3\u5230\u6B63\u6587",search:"\u641C\u7D22\u6587\u6863",searchEmpty:"\u6CA1\u6709\u627E\u5230\u5339\u914D\u6587\u6863",searchUnavailable:"\u641C\u7D22\u7D22\u5F15\u6682\u65F6\u4E0D\u53EF\u7528",language:"\u8BED\u8A00",primaryNavigation:"\u4E3B\u5BFC\u822A",theme:"\u5207\u6362\u4E3B\u9898",openSidebar:"\u6253\u5F00\u4FA7\u8FB9\u680F",onThisPage:"\u672C\u9875\u76EE\u5F55",edit:"\u7F16\u8F91\u6B64\u9875",updated:"\u6700\u540E\u66F4\u65B0",previous:"\u4E0A\u4E00\u9875",next:"\u4E0B\u4E00\u9875",close:"\u5173\u95ED",source:"\u6E90\u6587\u6863",preview:"\u9884\u89C8\u6548\u679C",copySource:"\u590D\u5236\u6E90\u6587\u6863",sourceCopied:"\u6E90\u6587\u6863\u5DF2\u590D\u5236",quickActions:"\u5FEB\u6377\u5165\u53E3",github:"GitHub \u4ED3\u5E93",docsNavigation:"\u6587\u6863\u5BFC\u822A",pageNavigation:"\u9875\u9762\u5BFC\u822A",advertisement:"\u63A8\u5E7F",version:"\u6587\u6863\u7248\u672C"},brandTagline:"\u9762\u5411 AI \u7684 React/MDX \u6587\u6863",markdownElementGroups:[{id:"headings",label:"\u6807\u9898\u4E0E\u6B63\u6587",detail:"H1-H6 \xB7 p \xB7 hr",hash:"\u6807\u9898\u4E0E\u6B63\u6587"},{id:"inline",label:"\u884C\u5185\u8BED\u4E49",detail:"a \xB7 strong \xB7 code",hash:"\u884C\u5185\u8BED\u4E49"},{id:"lists",label:"\u5217\u8868\u4E0E\u4EFB\u52A1",detail:"ul \xB7 ol \xB7 task",hash:"\u5217\u8868\u4E0E\u4EFB\u52A1"},{id:"callouts",label:"\u5F15\u7528\u4E0E\u63D0\u793A",detail:"quote \xB7 callout",hash:"\u5F15\u7528\u4E0E\u63D0\u793A"},{id:"code",label:"\u4EE3\u7801\u4E0E\u7EC8\u7AEF",detail:"Shiki \xB7 pre \xB7 diff",hash:"\u4EE3\u7801\u4E0E\u7EC8\u7AEF"},{id:"tables",label:"\u8868\u683C\u4E0E\u6570\u636E",detail:"table \xB7 CSV \xB7 sort",hash:"\u8868\u683C\u4E0E\u6570\u636E"},{id:"media",label:"\u5A92\u4F53\u4E0E\u5D4C\u5165",detail:"img \xB7 video \xB7 iframe",hash:"\u5A92\u4F53\u4E0E\u5D4C\u5165"},{id:"diagrams",label:"\u56FE\u8868\u4E0E\u6570\u5B66",detail:"Mermaid \xB7 PlantUML \xB7 KaTeX",hash:"\u56FE\u8868\u4E0E\u6570\u5B66"},{id:"disclosure",label:"\u6298\u53E0\u4E0E\u811A\u6CE8",detail:"details \xB7 footnotes",hash:"\u6298\u53E0\u4E0E\u811A\u6CE8"},{id:"extensions",label:"\u6269\u5C55\u5185\u5BB9\u7EC4\u4EF6",detail:"tabs \xB7 steps \xB7 cards \xB7 tree",hash:"\u6269\u5C55\u5185\u5BB9\u7EC4\u4EF6"},{id:"api",label:"API \u4E0E\u4FA7\u6CE8",detail:"API \xB7 aside",hash:"api-\u4E0E\u4FA7\u6CE8"},{id:"metadata",label:"\u6587\u6863\u5143\u4FE1\u606F",detail:"meta \xB7 breadcrumb \xB7 pagination",hash:"\u6587\u6863\u5143\u4FE1\u606F"}],quickActions:{headingsTitle:"\u6807\u9898 H1-H6",headingsDescription:"\u67E5\u770B\u5B8C\u6574\u6807\u9898\u5C42\u7EA7\u4E0E\u6B63\u6587\u8282\u594F",codeTitle:"\u4EE3\u7801\u4E0E\u8BED\u6CD5\u9AD8\u4EAE",codeDescription:"Shiki \u9AD8\u4EAE\u3001diff \u884C\u72B6\u6001\u4E0E\u590D\u5236",tableTitle:"\u8868\u683C\u4E0E\u6570\u636E\u64CD\u4F5C",tableDescription:"\u6392\u5E8F\u3001\u590D\u5236 CSV \u4E0E\u653E\u5927\u9884\u89C8",diagramTitle:"Mermaid\u3001PlantUML \u4E0E\u6570\u5B66\u516C\u5F0F",diagramDescription:"\u56FE\u8868\u9884\u89C8\u3001\u6E90\u7801\u4E0E\u7F29\u653E",sourceDescription:"\u6253\u5F00\u5F53\u524D\u9875\u9762\u7684 Markdown \u539F\u6587",themeDescription:"\u5728\u6D45\u8272\u4E0E\u6DF1\u8272\u9605\u8BFB\u6A21\u5F0F\u95F4\u5207\u6362"}},Vr={labels:{skipToContent:"Skip to content",search:"Search docs",searchEmpty:"No matching documents",searchUnavailable:"Search index is unavailable",language:"Language",primaryNavigation:"Primary navigation",theme:"Toggle theme",openSidebar:"Open sidebar",onThisPage:"On this page",edit:"Edit this page",updated:"Last updated",previous:"Previous",next:"Next",close:"Close",source:"Source",preview:"Preview",copySource:"Copy source",sourceCopied:"Markdown source copied",quickActions:"Quick actions",github:"GitHub repository",docsNavigation:"Docs navigation",pageNavigation:"Page navigation",advertisement:"Advertisement",version:"Documentation version"},brandTagline:"AI-friendly React/MDX documentation",markdownElementGroups:[{id:"headings",label:"Headings & prose",detail:"H1-H6 \xB7 p \xB7 hr",hash:"headings-and-prose"},{id:"inline",label:"Inline semantics",detail:"a \xB7 strong \xB7 code",hash:"inline-semantics"},{id:"lists",label:"Lists & tasks",detail:"ul \xB7 ol \xB7 task",hash:"lists-and-tasks"},{id:"callouts",label:"Quotes & callouts",detail:"quote \xB7 callout",hash:"quotes-and-callouts"},{id:"code",label:"Code & terminal",detail:"Shiki \xB7 pre \xB7 diff",hash:"code-and-terminal"},{id:"tables",label:"Tables & data",detail:"table \xB7 CSV \xB7 sort",hash:"tables-and-data"},{id:"media",label:"Media & embeds",detail:"img \xB7 video \xB7 iframe",hash:"media-and-embeds"},{id:"diagrams",label:"Diagrams & math",detail:"Mermaid \xB7 PlantUML \xB7 KaTeX",hash:"diagrams-and-math"},{id:"disclosure",label:"Disclosure & notes",detail:"details \xB7 footnotes",hash:"disclosure-and-notes"},{id:"extensions",label:"Extended components",detail:"tabs \xB7 steps \xB7 cards \xB7 tree",hash:"extended-content-components"},{id:"api",label:"API & sidenote",detail:"API \xB7 aside",hash:"api-and-sidenote"},{id:"metadata",label:"Document metadata",detail:"meta \xB7 breadcrumb \xB7 pagination",hash:"document-metadata"}],quickActions:{headingsTitle:"Headings H1-H6",headingsDescription:"Inspect the complete heading scale and prose rhythm",codeTitle:"Code and syntax highlighting",codeDescription:"Shiki highlighting, diff line states, and copy",tableTitle:"Tables and data actions",tableDescription:"Sort, copy CSV, and zoom",diagramTitle:"Mermaid, PlantUML, and math",diagramDescription:"Diagram preview, source, and scale",sourceDescription:"Open the current page Markdown source",themeDescription:"Switch between light and dark reading modes"}},Jr={copyCode:"\u590D\u5236\u4EE3\u7801",copyFailed:"\u590D\u5236\u5931\u8D25",copySnippet:"\u590D\u5236\u7247\u6BB5",copyTerminal:"\u590D\u5236\u7EC8\u7AEF\u8F93\u51FA",terminalTitle:"\u7EC8\u7AEF",tabsTitle:"\u9009\u9879\u5361",tabItem:"\u9009\u9879 {index}",codeGroupTitle:"\u4EE3\u7801\u7EC4",codeGroupItem:"\u4EE3\u7801 {index}",taskCompleted:"\u5DF2\u5B8C\u6210\u4EFB\u52A1",taskIncomplete:"\u672A\u5B8C\u6210\u4EFB\u52A1",copySectionLink:"\u590D\u5236\u7AE0\u8282\u94FE\u63A5",tableTitle:"\u8868\u683C",copyTableCsv:"\u590D\u5236\u4E3A CSV",downloadTableCsv:"\u4E0B\u8F7D CSV",zoomTable:"\u653E\u5927\u8868\u683C",closeTablePreview:"\u5173\u95ED\u8868\u683C\u9884\u89C8",sortTableColumn:"\u6309\u7B2C {column} \u5217\u6392\u5E8F",zoomImage:"\u653E\u5927\u56FE\u7247",closeImagePreview:"\u5173\u95ED\u56FE\u7247\u9884\u89C8",imageGallery:"\u56FE\u7247\u753B\u5ECA",closeImageGallery:"\u5173\u95ED\u56FE\u7247\u753B\u5ECA",previousGalleryImage:"\u4E0A\u4E00\u5F20\u56FE\u7247",nextGalleryImage:"\u4E0B\u4E00\u5F20\u56FE\u7247",galleryThumbnails:"\u56FE\u7247\u753B\u5ECA\u7F29\u7565\u56FE",galleryImage:"\u56FE\u7247"},Zt={zh:{title:"\u9875\u9762\u672A\u627E\u5230",description:"\u8BE5\u9875\u9762\u4E0D\u5B58\u5728\u3001\u5DF2\u88AB\u79FB\u52A8\u6216\u5730\u5740\u6709\u8BEF\u3002",home:"\u8FD4\u56DE\u9996\u9875 \u2192"},en:{title:"Page not found",description:"The page you're looking for doesn't exist or has been moved.",home:"Go back home \u2192"}};function ve(e){return e.toLowerCase().split("-")[0]??e.toLowerCase()}n(ve,"languageCode");function eo(e,t){if(!e)return;let o=t.toLowerCase();return Object.entries(e).find(([r])=>r.toLowerCase()===o)?.[1]}n(eo,"localizedValue");function Fe(e,t){return eo(t,e)}n(Fe,"localeMessagesFor");function to(e,t){let o=ve(e)==="zh"?Wr:Vr,r=Fe(e,t);return{labels:{...o.labels,...r?.labels},brandTagline:r?.brandTagline??o.brandTagline,markdownElementGroups:o.markdownElementGroups.map(a=>({...a,...r?.markdownElementGroups?.[a.id]})),quickActions:{...o.quickActions,...r?.quickActions}}}n(to,"layoutContentFor");function Pe(e,t){let o=Fe(e,t)?.markdown,r=ve(e)==="zh"?Jr:void 0;if(!(!r&&!o))return{...r,...o}}n(Pe,"markdownLabelsFor");function _e(e,t){return{...ve(e)==="zh"?Zt.zh:Zt.en,...Fe(e,t)?.notFound}}n(_e,"notFoundContentFor");function oo(e,t){let o=eo(t,e);if(o)return o;let r=ve(e);if(r==="zh")return"\u7B80\u4F53\u4E2D\u6587";if(r==="en")return"English";try{return new Intl.DisplayNames([e],{type:"language"}).of(e)??e}catch{return e}}n(oo,"localeNameFor");import{ChevronDown as ro,Languages as Xr,Moon as Yr,PanelLeft as Qr,Search as Zr,Sun as ea}from"lucide-react";import{Fragment as no,jsx as g,jsxs as D}from"react/jsx-runtime";function ta(){return D("svg",{className:"cf-brand-mark",width:"32",height:"32",viewBox:"0 0 512 512","aria-hidden":"true",children:[D("defs",{children:[D("linearGradient",{id:"cf-brand-top",x1:"90",y1:"60",x2:"400",y2:"260",gradientUnits:"userSpaceOnUse",children:[g("stop",{offset:"0",stopColor:"#1768FF"}),g("stop",{offset:"0.5",stopColor:"#119BFA"}),g("stop",{offset:"1",stopColor:"#18D8D3"})]}),D("linearGradient",{id:"cf-brand-fold",x1:"70",y1:"220",x2:"210",y2:"300",gradientUnits:"userSpaceOnUse",children:[g("stop",{offset:"0",stopColor:"#2C7BFF"}),g("stop",{offset:"1",stopColor:"#554FF5"})]}),D("linearGradient",{id:"cf-brand-bottom",x1:"200",y1:"270",x2:"90",y2:"460",gradientUnits:"userSpaceOnUse",children:[g("stop",{offset:"0",stopColor:"#554FF5"}),g("stop",{offset:"0.62",stopColor:"#7845FA"}),g("stop",{offset:"1",stopColor:"#8637F5"})]}),D("mask",{id:"cf-brand-spark-cut",maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"512",height:"512",children:[g("rect",{width:"512",height:"512",fill:"#fff"}),g("path",{d:"M112 201C117 229 139 251 167 256C139 261 117 283 112 311C107 283 85 261 57 256C85 251 107 229 112 201Z",fill:"#000"})]})]}),D("g",{mask:"url(#cf-brand-spark-cut)",fill:"none",strokeLinejoin:"round",children:[g("path",{d:"M348 138A150 150 0 0 0 107 243",stroke:"url(#cf-brand-top)",strokeWidth:"86",strokeLinecap:"round"}),g("path",{d:"M78 256C118 228 158 228 208 256",stroke:"url(#cf-brand-fold)",strokeWidth:"70",strokeLinecap:"round"}),g("path",{d:"M107 269A150 150 0 0 0 348 374",stroke:"url(#cf-brand-bottom)",strokeWidth:"86",strokeLinecap:"round"})]})]})}n(ta,"BrandMark");function Be({size:e=16}){return g(Zr,{size:e,strokeWidth:2,"aria-hidden":"true"})}n(Be,"SearchIcon");function oa(){return D(no,{children:[g(ea,{className:"cf-icon-sun",size:18,strokeWidth:2,"aria-hidden":"true"}),g(Yr,{className:"cf-icon-moon",size:18,strokeWidth:2,"aria-hidden":"true"})]})}n(oa,"ThemeIcon");function Ue(e,t){let o=t.split("/").filter(Boolean);return t.startsWith("/")&&(e.page.routePath===t||e.page.routePath.startsWith(t)||e.page.group!==""&&o.includes(e.page.group))}n(Ue,"navItemIsActive");function ao({model:e}){let{config:t,page:o,home:r,labels:a,localeRoot:s,navItems:l,versionLabel:i,versionOptions:c,languageOptions:d,hasSidebarItems:p}=e;return D("header",{className:r?"cf-header cf-header-home":"cf-header",children:[D("div",{className:"cf-header-inner",children:[!r&&p?g("button",{className:"cf-sidebar-toggle",type:"button","data-canofold-sidebar-open":"","data-canofold-sidebar-open-label":a.openSidebar,"data-canofold-sidebar-close-label":a.close,"aria-label":a.openSidebar,"aria-expanded":"false",children:g(Qr,{size:18,strokeWidth:2,"aria-hidden":"true"})}):null,g("a",{className:"cf-brand",href:s,"aria-label":t.title,children:t.theme.logo?D(no,{children:[g("img",{className:t.theme.logoDark?"cf-brand-logo cf-brand-logo-light":"cf-brand-logo",src:h(t,t.theme.logo),alt:t.title}),t.theme.logoDark?g("img",{className:"cf-brand-logo cf-brand-logo-dark",src:h(t,t.theme.logoDark),alt:t.title}):null]}):g(ta,{})}),t.search.enabled?D("button",{className:"cf-search-trigger",type:"button","data-canofold-search-open":"","aria-haspopup":"dialog","aria-label":a.search,children:[g(Be,{size:15}),g("span",{children:a.search}),g("kbd",{className:"cf-kbd",children:"\u2318K"})]}):null,D("div",{className:"cf-header-right",children:[l.length>0?g("nav",{className:"cf-header-nav","aria-label":a.primaryNavigation,children:l.map(f=>{let u=Ue(e,f.routePath),w=/^https?:\/\//.test(f.routePath);return g("a",{className:u?"cf-header-link cf-header-link-active":"cf-header-link",href:h(t,f.routePath),"aria-current":u?"page":void 0,...w?{target:"_blank",rel:"noreferrer"}:{},children:f.title},f.routePath)})}):null,c.length>1?D("details",{className:"cf-menu cf-version-menu","data-canofold-menu":"",children:[D("summary",{className:"cf-version-badge","aria-label":a.version,children:[g("span",{children:i}),g(ro,{size:13,strokeWidth:2,"aria-hidden":"true"})]}),g("div",{className:"cf-menu-list",children:c.map(f=>g("a",{className:f.id===o.version?"cf-menu-item cf-menu-item-active":"cf-menu-item",href:h(t,f.routePath),children:g("span",{children:f.label})},f.id))})]}):g("span",{className:"cf-version-badge",children:i}),d.length>1?D("details",{className:"cf-menu cf-lang","data-canofold-menu":"",children:[D("summary",{className:"cf-icon-button cf-lang-trigger","aria-label":a.language,children:[g(Xr,{size:19,strokeWidth:1.9,"aria-hidden":"true"}),g(ro,{size:13,strokeWidth:2,"aria-hidden":"true"})]}),g("div",{className:"cf-menu-list cf-language-menu-list",children:d.map(f=>g("a",{className:f.locale===o.locale?"cf-menu-item cf-language-menu-item cf-menu-item-active":"cf-menu-item cf-language-menu-item",href:h(t,f.routePath),lang:f.locale,"aria-current":f.locale===o.locale?"page":void 0,children:oo(f.locale,t.i18n.localeNames)},f.locale))})]}):null,t.theme.darkMode?g("button",{className:"cf-icon-button",type:"button","data-canofold-theme-toggle":"","aria-label":a.theme,children:g(oa,{})}):null,t.github?g("a",{className:"cf-icon-button cf-github-link",href:t.github,target:"_blank",rel:"noreferrer","aria-label":a.github,children:g("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:g("path",{d:"M12 2C6.48 2 2 6.58 2 12.25c0 4.53 2.87 8.37 6.84 9.73.5.1.68-.22.68-.49 0-.24-.01-.87-.01-1.71-2.78.62-3.37-1.37-3.37-1.37-.45-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.62.07-.62 1 .07 1.53 1.06 1.53 1.06.89 1.56 2.34 1.11 2.91.85.09-.66.35-1.11.63-1.37-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.03 1.03-2.75-.1-.26-.45-1.3.1-2.71 0 0 .84-.27 2.75 1.05a9.36 9.36 0 0 1 5 0c1.91-1.32 2.75-1.05 2.75-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.63 1.03 2.75 0 3.94-2.34 4.81-4.57 5.06.36.32.68.94.68 1.9 0 1.37-.01 2.47-.01 2.81 0 .27.18.6.69.49A10.26 10.26 0 0 0 22 12.25C22 6.58 17.52 2 12 2z"})})}):null]})]}),r?null:g("div",{className:"cf-route-progress","aria-hidden":"true",children:g("span",{"data-canofold-progress":""})})]})}n(ao,"LayoutHeader");import{jsx as k,jsxs as N}from"react/jsx-runtime";function io(e,t){return e.type==="link"?e.routePath===t:e.items.some(o=>io(o,t))}n(io,"sidebarContainsRoute");function so(e){return{"--cf-sidebar-indent":`${Math.min(e,4)*10}px`}}n(so,"sidebarDepthStyle");function lo({item:e,model:t,depth:o=0}){let r={"data-depth":o,style:so(o)};if(e.type==="link"){let s=e.routePath===t.page.routePath;return k("a",{...r,className:s?"cf-sidebar-link cf-sidebar-link-active":"cf-sidebar-link",href:h(t.config,e.routePath),"aria-current":s?"page":void 0,"data-canofold-sidebar-link":"",children:e.title})}let a=io(e,t.page.routePath);return N("details",{className:"cf-sidebar-subgroup",open:a||!e.collapsed,"data-depth":o,children:[N("summary",{className:"cf-sidebar-subgroup-title",style:so(o),children:[e.title,k(ra,{className:"cf-chevron",size:12,strokeWidth:2.5,"aria-hidden":"true"})]}),k("div",{className:"cf-sidebar-subgroup-items",children:e.items.map((s,l)=>k(lo,{item:s,model:t,depth:o+1},s.type==="link"?s.routePath:s.segment||l))})]})}n(lo,"SidebarEntry");function co({model:e}){let{config:t,labels:o,navItems:r,sidebarGroups:a}=e,s=[e.page.version,e.page.locale,e.page.group].join(":");return N("aside",{className:"cf-sidebar","data-canofold-sidebar":"","data-canofold-sidebar-key":s,children:[r.length>0?k("nav",{className:"cf-sidebar-primary-nav","aria-label":o.primaryNavigation,children:r.map(l=>{let i=Ue(e,l.routePath),c=/^https?:\/\//.test(l.routePath);return k("a",{className:i?"cf-sidebar-primary-link cf-sidebar-primary-link-active":"cf-sidebar-primary-link",href:h(t,l.routePath),"aria-current":i?"page":void 0,"data-canofold-sidebar-link":"",...c?{target:"_blank",rel:"noreferrer"}:{},children:l.title},l.routePath)})}):null,k("nav",{className:"cf-sidebar-nav","aria-label":o.docsNavigation,children:a.map((l,i)=>k("div",{className:"cf-sidebar-items cf-sidebar-root",children:l.items.map((c,d)=>k(lo,{item:c,model:e,depth:0},c.type==="link"?c.routePath:c.segment||d))},l.segment||i))})]})}n(co,"Sidebar");function sa({model:e}){let{editHref:t,labels:o,page:r}=e,a=new Intl.DateTimeFormat(r.locale,{dateStyle:"medium"}).format(new Date(r.lastUpdated));return N("footer",{className:"cf-page-footer",children:[N("div",{className:"cf-page-meta",children:[N("div",{className:"cf-page-meta-actions",children:[t?k("a",{href:t,children:o.edit}):null,k("button",{className:"cf-page-source",type:"button","data-canofold-source-open":"","aria-haspopup":"dialog",children:o.source})]}),N("span",{children:[o.updated," ",a]})]}),N("nav",{className:"cf-doc-pagination","aria-label":o.pageNavigation,children:[r.previous?N("a",{className:"cf-doc-pagination-link",href:h(e.config,r.previous.routePath),children:[k("span",{className:"cf-doc-pagination-label",children:o.previous}),k("strong",{className:"cf-doc-pagination-title",children:r.previous.title})]}):k("span",{}),r.next?N("a",{className:"cf-doc-pagination-link cf-doc-pagination-link-next",href:h(e.config,r.next.routePath),children:[k("span",{className:"cf-doc-pagination-label",children:o.next}),k("strong",{className:"cf-doc-pagination-title",children:r.next.title})]}):null]})]})}n(sa,"PageFooter");function ia({model:e}){let{config:t,labels:o,outlineHeadings:r}=e,a=t.advertising;return N("aside",{className:"cf-outline","data-canofold-outline":"","aria-label":o.onThisPage,children:[r.length>0?k("nav",{className:"cf-outline-nav",children:r.map(s=>k("a",{className:`cf-outline-link cf-outline-link-${s.level}`,"data-canofold-outline-link":"",href:`#${s.slug}`,children:s.text},s.slug))}):null,a?N("a",{className:"cf-outline-ad",href:h(t,a.href),target:"_blank",rel:"sponsored noopener noreferrer","aria-label":a.alt,children:[k("span",{children:a.label??o.advertisement}),k("img",{src:h(t,a.image),alt:a.alt,loading:"lazy"})]}):null]})}n(ia,"Outline");function la({model:e,children:t}){let{config:o,labels:r,page:a}=e,s=a.body.trim(),l={...Pe(a.locale,o.i18n.messages),...o.markdown.labels};return N("div",{className:"cf-shell cf-shell-playground",children:[k("div",{className:"cf-sidebar-backdrop","data-canofold-sidebar-backdrop":"","aria-hidden":"true",hidden:!0}),k(co,{model:e}),k("main",{id:"canofold-main",className:"cf-main cf-playground-main",tabIndex:-1,"data-pagefind-body":a.search?"":void 0,children:N("div",{className:"cf-playground","data-canofold-playground":"","data-canofold-playground-labels":JSON.stringify(l),"data-canofold-playground-preview-label":r.preview,"data-view":"preview",children:[N("button",{className:"cf-playground-toggle",type:"button","data-canofold-playground-toggle":"","data-source-label":r.source,"data-preview-label":r.preview,"aria-label":r.source,title:r.source,children:[k(aa,{className:"cf-playground-toggle-source",size:18,strokeWidth:2,"aria-hidden":"true"}),k(na,{className:"cf-playground-toggle-preview",size:18,strokeWidth:2,"aria-hidden":"true"})]}),k("section",{className:"cf-playground-pane cf-playground-source","aria-label":r.source,"data-pagefind-ignore":"",children:k("textarea",{defaultValue:s,"aria-label":r.source,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-canofold-playground-source":""})}),k("div",{className:"cf-playground-resizer",role:"separator","aria-label":`${r.source} / ${r.preview}`,"aria-orientation":"vertical","aria-valuemin":25,"aria-valuemax":75,"aria-valuenow":45,tabIndex:0,"data-canofold-playground-resizer":""}),k("section",{className:"cf-playground-pane cf-playground-preview","aria-label":r.preview,children:k("div",{className:"cf-playground-preview-scroll","data-canofold-playground-preview":"",children:t})})]})})]})}n(la,"Playground");function uo({model:e,children:t}){return e.page.frontmatter.layout==="playground"?k(la,{model:e,children:t}):N("div",{className:"cf-shell",children:[k("div",{className:"cf-sidebar-backdrop","data-canofold-sidebar-backdrop":"","aria-hidden":"true",hidden:!0}),k(co,{model:e}),N("main",{id:"canofold-main",className:"cf-main",tabIndex:-1,"data-pagefind-body":e.page.search?"":void 0,children:[t,k(sa,{model:e})]}),k(ia,{model:e})]})}n(uo,"LayoutDocument");function Se(e){return wt(e.relativePath,e.locale)}n(Se,"subPath");function ne(e,t){let o=e.find(r=>r.id===t);if(!o)throw new Error(`Missing Markdown element group: ${t}`);return o.hash}n(ne,"markdownGroupHash");function mo({config:e,graph:t,page:o,home:r,assets:a,rawSource:s}){let l=t.pages.filter(m=>m.version===o.version&&Se(m)===Se(o)),i=t.locales.map(m=>{let C=l.find(M=>M.locale===m);return{locale:m,routePath:C?.routePath??z(m,t.defaultLocale,o.versionBase)}}),c=t.versions.map(m=>{let C=t.pages.find(M=>M.version===m.id&&M.locale===o.locale&&Se(M)===Se(o));return{id:m.id,label:m.label,routePath:C?.routePath??z(o.locale,t.defaultLocale,m.base)}}),d=t.sidebar[o.version]?.[o.locale]??[],p=to(o.locale,e.i18n.messages),f=z(o.locale,t.defaultLocale,o.versionBase),u=`${f}markdown/playground/`,w=t.pages.some(m=>m.locale===o.locale&&m.routePath===u),y=n(m=>m.type==="link"?m.routePath===o.routePath:m.items.some(y),"isActiveItem"),S=n(m=>m.items.some(y),"isActiveGroup"),x=d.filter(m=>m.title===""||m.segment===o.group||S(m)),b=typeof o.frontmatter.seoTitle=="string"?o.frontmatter.seoTitle.trim():"";return{config:e,page:o,home:r,assets:a,title:b||(o.title&&o.title!==e.title?`${o.title} | ${e.title}`:e.title),description:o.description||e.description,...e.editUrl&&o.version===t.currentVersion?{editHref:`${e.editUrl.replace(/\/$/,"")}/${o.relativePath}`}:{},alternatePages:l,languageOptions:i,versionOptions:c,navItems:t.nav[o.version]?.[o.locale]??[],content:p,labels:p.labels,brandTagline:e.i18n.messages?.[o.locale]?.brandTagline||e.description||p.brandTagline,versionLabel:t.versions.length===1&&o.version==="current"?`v${j}`:t.versions.find(m=>m.id===o.version)?.label??o.version,localeRoot:h(e,f),markdownShowcaseHref:h(e,u),hasMarkdownShowcase:w,sidebarGroups:x,hasSidebarItems:x.some(m=>m.items.length>0),outlineHeadings:o.headings.filter(m=>m.level>=1&&m.level<=6),searchProvider:xt(e.search.provider),searchIndexUrl:o.version===t.currentVersion?h(e,`/search/${o.locale}.json`):h(e,`/search/${o.version}/${o.locale}.json`),searchBundleUrl:h(e,"/pagefind/pagefind.js"),markdownClientScript:`window.__canofoldEnhanceMarkdown = async (target) => {
|
|
27
27
|
const pageRoot = document.querySelector('[data-canofold-page-root]')
|
|
28
28
|
if (!pageRoot) return () => {}
|
|
29
29
|
const root = target || pageRoot
|
|
@@ -74,7 +74,7 @@ window.__canofoldBootstrapMarkdown = () => {
|
|
|
74
74
|
window.__canofoldMarkdownReady = ready
|
|
75
75
|
return ready
|
|
76
76
|
}
|
|
77
|
-
window.__canofoldBootstrapMarkdown()`,rawSource:s}}n(mo,"createLayoutModel");import{Braces as ca,Clipboard as da,ExternalLink as ua,Heading2 as ma,SunMoon as pa,Table2 as fa,Workflow as ha,X as ga}from"lucide-react";import{Fragment as qe,jsx as v,jsxs as T}from"react/jsx-runtime";function ee({href:e,action:t,icon:o,title:r,description:a}){let s=T(qe,{children:[v("span",{className:"cf-command-glyph","aria-hidden":"true",children:o}),T("span",{children:[v("strong",{children:r}),v("small",{children:a})]})]});return e?v("a",{className:"cf-command-item",href:e,children:s}):v("button",{className:"cf-command-item",type:"button","data-canofold-search-action":t,children:s})}n(ee,"QuickAction");function ya({model:e}){let{config:t,page:o,home:r,labels:a,content:s,markdownShowcaseHref:l,hasMarkdownShowcase:i}=e,
|
|
77
|
+
window.__canofoldBootstrapMarkdown()`,rawSource:s}}n(mo,"createLayoutModel");import{Braces as ca,Clipboard as da,ExternalLink as ua,Heading2 as ma,SunMoon as pa,Table2 as fa,Workflow as ha,X as ga}from"lucide-react";import{Fragment as qe,jsx as v,jsxs as T}from"react/jsx-runtime";function ee({href:e,action:t,icon:o,title:r,description:a}){let s=T(qe,{children:[v("span",{className:"cf-command-glyph","aria-hidden":"true",children:o}),T("span",{children:[v("strong",{children:r}),v("small",{children:a})]})]});return e?v("a",{className:"cf-command-item",href:e,children:s}):v("button",{className:"cf-command-item",type:"button","data-canofold-search-action":t,children:s})}n(ee,"QuickAction");function ya({model:e}){let{config:t,page:o,home:r,labels:a,content:s,markdownShowcaseHref:l,hasMarkdownShowcase:i}=e,c=s.markdownElementGroups,d=s.quickActions;return t.search.enabled?T("div",{className:"cf-search-modal","data-canofold-search":"","data-locale":o.locale,"data-version":o.version,"data-search-provider":e.searchProvider,"data-search-index-url":e.searchIndexUrl,"data-search-bundle-url":e.searchBundleUrl,"data-empty-label":a.searchEmpty,"data-error-label":a.searchUnavailable,hidden:!0,children:[v("div",{className:"cf-search-backdrop","data-canofold-search-close":"","aria-hidden":"true"}),T("div",{className:"cf-search-panel",role:"dialog","aria-modal":"true","aria-label":a.search,tabIndex:-1,children:[T("div",{className:"cf-search-field",children:[v(Be,{}),v("input",{className:"cf-search-input",type:"search",placeholder:`${a.search}...`,"aria-label":a.search}),v("button",{className:"cf-search-close",type:"button","data-canofold-search-close":"","aria-label":a.close,children:"Esc"})]}),T("div",{className:"cf-search-body",children:[T("div",{className:"cf-search-default","data-canofold-search-default":"",children:[v("p",{className:"cf-search-section-label",children:a.quickActions}),i?T(qe,{children:[v(ee,{href:`${l}#${ne(c,"headings")}`,icon:v(ma,{size:17,strokeWidth:2}),title:d.headingsTitle,description:d.headingsDescription}),v(ee,{href:`${l}#${ne(c,"code")}`,icon:v(ca,{size:17,strokeWidth:2}),title:d.codeTitle,description:d.codeDescription}),v(ee,{href:`${l}#${ne(c,"tables")}`,icon:v(fa,{size:17,strokeWidth:2}),title:d.tableTitle,description:d.tableDescription}),v(ee,{href:`${l}#${ne(c,"diagrams")}`,icon:v(ha,{size:17,strokeWidth:2}),title:d.diagramTitle,description:d.diagramDescription})]}):null,r?null:v(ee,{action:"source",icon:v(ua,{size:17,strokeWidth:2}),title:a.source,description:d.sourceDescription}),t.theme.darkMode?v(ee,{action:"theme",icon:v(pa,{size:17,strokeWidth:2}),title:a.theme,description:d.themeDescription}):null]}),v("div",{className:"cf-search-results","data-canofold-search-results":"","aria-live":"polite",hidden:!0})]})]})]}):null}n(ya,"SearchModal");function wa({model:e}){let{home:t,labels:o,page:r}=e;return t?null:T("div",{className:"cf-source-sheet","data-canofold-source-sheet":"",hidden:!0,children:[v("div",{className:"cf-source-backdrop","data-canofold-source-close":"","aria-hidden":"true"}),T("aside",{className:"cf-source-panel",role:"dialog","aria-modal":"true","aria-label":o.source,tabIndex:-1,children:[T("div",{className:"cf-source-head",children:[T("div",{children:[v("p",{children:o.source}),v("span",{children:r.sourceRelativePath})]}),T("div",{className:"cf-source-actions",children:[v("button",{className:"cf-icon-button",type:"button","data-canofold-source-copy":"","data-canofold-action-success":o.sourceCopied,"aria-label":o.copySource,children:v(da,{size:16,strokeWidth:2,"aria-hidden":"true"})}),v("button",{className:"cf-icon-button",type:"button","data-canofold-source-close":"","aria-label":o.close,children:v(ga,{size:16,strokeWidth:2,"aria-hidden":"true"})})]})]}),v("textarea",{"data-canofold-source-text":"","aria-label":o.source,spellCheck:!1,readOnly:!0,defaultValue:e.rawSource})]})]})}n(wa,"SourceSheet");function po({model:e}){return T(qe,{children:[v(ya,{model:e}),v(wa,{model:e})]})}n(po,"LayoutOverlays");var xe="try{var t=localStorage.getItem('canofold-theme');if(t==='dark'||(!t&&window.matchMedia('(prefers-color-scheme:dark)').matches)){document.documentElement.classList.add('dark')}}catch(e){}";var fo=`window.__canofoldBootstrapShell = () => {
|
|
78
78
|
window.__canofoldShellDispose?.()
|
|
79
79
|
const controller = new AbortController()
|
|
80
80
|
const signal = controller.signal
|
|
@@ -626,7 +626,7 @@ window.__canofoldBootstrapShell()`,ho=`window.__canofoldBootstrapOutline = () =>
|
|
|
626
626
|
if (hashTimer) clearTimeout(hashTimer)
|
|
627
627
|
}
|
|
628
628
|
}
|
|
629
|
-
window.__canofoldBootstrapOutline()`;import{Fragment as ba,jsx as S,jsxs as se}from"react/jsx-runtime";function go({config:e,graph:t,page:o,home:r=!1,markdownAssets:a,rawSource:s,demoClientUrl:l,demoStyleUrls:i=[],children:d}){let c=mo({config:e,graph:t,page:o,home:r,assets:a,rawSource:s}),p=c.assets.behaviors.length>0,f=c.assets.pluginClients.map(y=>h(e,`/assets/canofold-plugins/${y.id}.js`)),u=J(e,o.routePath),b=h(e,e.theme.favicon??we.favicon),w=[e.layout.header?void 0:"cf-header-hidden",o.frontmatter.layout==="playground"?"cf-playground-page":void 0].filter(Boolean).join(" "),P=o.frontmatter.layout==="playground";return se("html",{lang:o.locale,className:w||void 0,children:[se("head",{children:[S("meta",{charSet:"utf-8"}),S("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),S("title",{children:c.title}),S("meta",{name:"description",content:c.description,"data-canofold-page-head":""}),S("meta",{property:"og:title",content:c.title,"data-canofold-page-head":""}),S("meta",{property:"og:description",content:c.description,"data-canofold-page-head":""}),e.search.enabled&&o.search?se(ba,{children:[S("meta",{"data-pagefind-meta":"title[content]",content:o.title,"data-canofold-page-head":""}),S("meta",{"data-pagefind-meta":"description[content]",content:o.description,"data-canofold-page-head":""}),S("meta",{"data-pagefind-filter":`version:${o.version}`,"data-canofold-page-head":""}),S("meta",{"data-pagefind-filter":`locale:${o.locale}`,"data-canofold-page-head":""}),S("meta",{"data-pagefind-filter":`status:${o.status}`,"data-canofold-page-head":""}),(Array.isArray(o.frontmatter.tags)?o.frontmatter.tags:[]).filter(y=>typeof y=="string").map(y=>S("meta",{"data-pagefind-filter":`tag:${y}`,"data-canofold-page-head":""},y))]}):null,u?S("meta",{property:"og:url",content:u,"data-canofold-page-head":""}):null,S("meta",{name:"twitter:card",content:"summary"}),S("link",{rel:"icon",href:b}),u?S("link",{rel:"canonical",href:u,"data-canofold-page-head":""}):null,e.siteUrl?c.alternatePages.map(y=>S("link",{rel:"alternate",hrefLang:y.locale,href:J(e,y.routePath),"data-canofold-page-head":""},y.locale)):null,S("link",{rel:"stylesheet",href:h(e,"/assets/canofold.css")}),c.assets.pluginStyles.map(y=>S("link",{rel:"stylesheet",href:h(e,`/assets/canofold-plugins/${y.id}.css`),"data-canofold-page-head":""},y.id)),i.map(y=>S("link",{rel:"stylesheet",href:y},y)),e.theme.darkMode?S("script",{dangerouslySetInnerHTML:{__html:xe}}):null]}),se("body",{children:[se("div",{className:"cf-page-root",style:{"--cf-canofold-config-icon":`url(${JSON.stringify(b)})`},"data-canofold-page-root":"","data-markdown-behaviors":p?JSON.stringify(c.assets.behaviors):void 0,"data-markdown-client-url":p?h(e,"/assets/canofold-markdown/index.js"):void 0,"data-markdown-plugin-clients":f.length>0?JSON.stringify(f):void 0,"data-canofold-playground-client-url":P?h(e,"/assets/canofold-playground/index.js"):void 0,"data-canofold-demo-client-url":l,children:[S("a",{className:"cf-skip-link",href:"#canofold-main",children:c.labels.skipToContent}),e.layout.header?S(ao,{model:c}):null,r?S("main",{id:"canofold-main",className:"cf-home",tabIndex:-1,"data-pagefind-body":o.search?"":void 0,children:d}):S(uo,{model:c,children:d}),S(po,{model:c})]}),S("script",{type:"module",dangerouslySetInnerHTML:{__html:c.markdownClientScript}}),P?S("script",{type:"module",src:h(e,"/assets/canofold-playground/index.js")}):null,l?S("script",{type:"module",src:l}):null,S("script",{dangerouslySetInnerHTML:{__html:fo}}),S("script",{dangerouslySetInnerHTML:{__html:ho}}),e.search.enabled?S("script",{type:"module",src:h(e,"/assets/canofold-search.js")}):null]})]})}n(go,"Layout");import{access as ka,copyFile as va,mkdir as Pa}from"fs/promises";import{dirname as Sa,join as wo}from"path";import{fileURLToPath as yo}from"url";async function xa(){let e=[yo(new URL("../assets/brand/",import.meta.url)),yo(new URL("./brand/",import.meta.url))];for(let t of e)try{return await ka(wo(t,"logo-light.webp")),t}catch{}throw new Error("Canofold built-in brand assets are missing")}n(xa,"brandSourceRoot");async function bo(e){let t=await xa();await Promise.all(bt.map(async o=>{let r=R(e,o,`built-in brand asset ${o}`);await Pa(Sa(r),{recursive:!0}),await va(wo(t,o.split("/").at(-1)),r)}))}n(bo,"copyBuiltInBrandAssets");import{createMarkdownRenderer as ja}from"@canofold/markdown/server";import*as za from"react";import*as Ga from"react/jsx-runtime";import{analyzeMdxModuleBoundary as Ca}from"@canofold/markdown/server/analyze";var Ma=["react","react/jsx-runtime"],Da=new Set(Ma);function He(e){return Da.has(e)}n(He,"isDocsImportSpecifier");function je(e){return e.startsWith(".")||He(e)}n(je,"isAllowedDocsImport");function Ce(e){let t=Ca(e);for(let o of t.unsupportedReferences){let r=o.kind==="dynamic-import"?"Dynamic import":"Re-export";throw new Error(`${r} is not allowed in MDX${o.specifier?`: ${o.specifier}`:""}`)}for(let{specifier:o}of t.imports)if(!je(o))throw new Error(`External import is not allowed: ${o}`);return{source:t.sourceWithoutImports,imports:t.imports}}n(Ce,"prepareMdxSource");import{access as Na,readFile as Aa,realpath as De}from"fs/promises";import{dirname as La,extname as Po,isAbsolute as Ve,relative as So,resolve as ko,sep as xo}from"path";import{build as Ra}from"esbuild";import*as Ta from"react";import*as Ea from"react/jsx-runtime";import{detectMarkdownAssets as $a}from"@canofold/markdown/server/analyze";var ze=[".tsx",".ts",".jsx",".js"],vo={react:Ta,"react/jsx-runtime":Ea};function Oa(e){if(Object.hasOwn(vo,e))return vo[e];throw new Error(`External import is not allowed in local docs components: ${e}`)}n(Oa,"requireLocalComponentRuntime");function Me(e,t){let o=So(e,t);return o===""||!o.startsWith(`..${xo}`)&&o!==".."&&!Ve(o)}n(Me,"isInsideRoot");async function Ge(e){try{return await Na(e),!0}catch{return!1}}n(Ge,"fileExists");async function Ke(e,t){let o=await De(e);if(!t)return o;let r=await De(t),a=So(r,o);if(a===".."||a.startsWith(`..${xo}`)||Ve(a))throw new Error(`Local component import escapes the project root: ${e}`);return o}n(Ke,"assertInsideProjectRoot");async function We(e,t,o){let r=ko(La(e),t),a=Po(r);if(a&&!ze.includes(a))throw new Error(`Unsupported local component import: ${t}`);if(a&&await Ge(r))return Ke(r,o);for(let s of ze){let l=`${r}${s}`;if(await Ge(l))return Ke(l,o)}for(let s of ze){let l=ko(r,`index${s}`);if(await Ge(l))return Ke(l,o)}throw new Error(`Local component import not found: ${t}`)}n(We,"resolveLocalModule");async function Ia(e,t){let o=t?await De(t):void 0,r=new Set([e]),s=(await Ra({entryPoints:[e],bundle:!0,outfile:"local-component.js",write:!1,platform:"node",format:"cjs",target:"node22",jsx:"automatic",plugins:[{name:"canofold-components-alias",setup(l){l.onResolve({filter:/^(?:react|react\/jsx-runtime)$/},i=>({path:i.path,external:!0})),l.onResolve({filter:/.*/},async i=>{if(!Ve(i.path)||!i.importer||!(o?Me(o,i.importer):r.has(i.importer)))return;let c=await We(i.importer,i.path,t);return r.add(c),{path:c}}),l.onResolve({filter:/^\./},async i=>{if(i.importer&&!(o?Me(o,i.importer):r.has(i.importer)))return;let d=await We(i.importer,i.path,t);return r.add(d),{path:d}}),l.onLoad({filter:/\.(?:[jt]sx?)$/},async i=>{let d=await De(i.path);(o?Me(o,d):r.has(d))&&r.add(d)}),l.onResolve({filter:/^react-dom$/},i=>(i.importer?o?Me(o,i.importer):r.has(i.importer):!1)?{errors:[{text:"External import is not allowed in local docs components: react-dom"}]}:void 0),l.onResolve({filter:/^[^./].*/},i=>{if(!je(i.path))return{errors:[{text:`External import is not allowed in local docs components: ${i.path}`}]}})}}]})).outputFiles.find(l=>Po(l.path)===".js");if(!s)throw new Error(`Failed to bundle local component: ${e}`);return{code:s.text,sourcePaths:[...r]}}n(Ia,"bundleLocalModule");async function Fa(e){let t={exports:{}};return new Function("module","exports","require",e.code)(t,t.exports,Oa),t.exports}n(Fa,"importBundle");function _a(e){return e.filter(t=>t.specifier.startsWith("."))}n(_a,"localImports");async function Co(e,t,o){let r=_a(e);if(!r.length)return[];if(!t)throw new Error("Local MDX component imports require the Markdown source file path");let a=new Map;return Promise.all(r.map(async s=>{let l=await We(t,s.specifier,o),i=a.get(l);return i||(i=Ia(l,o),a.set(l,i)),{localImport:s,bundle:await i}}))}n(Co,"bundleLocalImports");async function Mo(e,t,o){let r=await Co(e,t,o);return[...new Set(r.flatMap(({bundle:a})=>a.sourcePaths))].sort()}n(Mo,"localComponentDependencyPaths");async function Ba(e){let t={},o=new Map;for(let{localImport:r,bundle:a}of e){let s=o.get(a);s||(s=Fa(a),o.set(a,s));let l=await s;for(let i of r.bindings)if(i.namespace)t[i.local]=l;else{if(!Object.hasOwn(l,i.imported))throw new Error(`Local module ${JSON.stringify(r.specifier)} does not export ${JSON.stringify(i.imported)}`);t[i.local]=l[i.imported]}}return t}n(Ba,"componentsFromBundles");function Ua(e,t){e.behaviors=[...new Set([...e.behaviors,...t.behaviors])],e.math||=t.math,e.pluginClients=[...new Map([...e.pluginClients,...t.pluginClients].map(o=>[o.id,o])).values()],e.pluginStyles=[...new Map([...e.pluginStyles,...t.pluginStyles].map(o=>[o.id,o])).values()]}n(Ua,"mergeAssets");function qa(){return{behaviors:[],math:!1,pluginClients:[],pluginStyles:[]}}n(qa,"emptyAssets");async function Ha(e,t=[]){let o=qa(),r=new Set;for(let{bundle:a}of e)for(let s of a.sourcePaths)r.has(s)||(r.add(s),Ua(o,$a(await Aa(s,"utf8"),t,"mdx")));return o}n(Ha,"assetsFromBundles");async function Do(e,t,o,r=[]){let a=await Co(e,t,o),[s,l]=await Promise.all([Ba(a),Ha(a,r)]);return{components:s,assets:l}}n(Do,"loadLocalComponentBundle");function Ka(...e){return{behaviors:[...new Set(e.flatMap(t=>t.behaviors))],math:e.some(t=>t.math),pluginClients:[...new Map(e.flatMap(t=>t.pluginClients).map(t=>[t.id,t])).values()],pluginStyles:[...new Map(e.flatMap(t=>t.pluginStyles).map(t=>[t.id,t])).values()]}}n(Ka,"mergeAssets");function Wa(e,t){let o={react:za,"react/jsx-runtime":Ga},r={...t};for(let a of e){if(!He(a.specifier))continue;let s=o[a.specifier];for(let l of a.bindings){if(l.namespace){r[l.local]=s;continue}if(l.imported==="default"&&a.specifier==="react"){r[l.local]=s.default??s;continue}if(!Object.hasOwn(s,l.imported))throw new Error(`Module ${JSON.stringify(a.specifier)} does not export ${JSON.stringify(l.imported)}`);r[l.local]=s[l.imported]}}return r}n(Wa,"bindImports");async function No(e,t,o,r,a,s,l=ja()){let i=Ce(e),{components:d,assets:c}=await Do(i.imports,t,o,r?.plugins),p=await l.renderMdx(i.source,{markdown:r,classNames:a,urlTransform:s,as:"article",components:{...Wa(i.imports,d)}});return{content:p.content,assets:Ka(p.assets,c)}}n(No,"renderMdxResult");import{mkdir as Va}from"fs/promises";import{dirname as Ja,join as Xa}from"path";import{fileURLToPath as Ya}from"url";function Qa(){let e=import.meta.url.endsWith(".js")?"./search-client.js":"./searchClientRuntime.ts";return Ya(new URL(e,import.meta.url))}n(Qa,"searchRuntimeEntry");async function Ao(e){let{build:t}=await import("esbuild"),o=Xa(e,"assets/canofold-search.js");await Va(Ja(o),{recursive:!0}),await t({entryPoints:[Qa()],bundle:!0,format:"iife",platform:"browser",target:"es2022",outfile:o,minify:!0,sourcemap:!1,legalComments:"none",logLevel:"silent"})}n(Ao,"buildSearchBundle");import{DEFAULT_SEMANTIC_COLORS as A,DEFAULT_MARKDOWN_THEME as Xe,markdownThemeDeclarations as Za,resolveMarkdownTheme as en}from"@canofold/markdown/theme";var tn={canofold:{light:A.light.blue,dark:A.dark.blue},cyan:{light:A.light.cyan,dark:A.dark.cyan},emerald:{light:A.light.green,dark:A.dark.green},blue:{light:A.light.blue,dark:A.dark.blue},green:{light:A.light.green,dark:A.dark.green},red:{light:A.light.red,dark:A.dark.red},orange:{light:A.light.orange,dark:A.dark.orange},violet:{light:A.light.indigo,dark:A.dark.indigo},neutral:{light:"oklch(0.3 0 0)",dark:"oklch(0.85 0 0)"}};function Lo(e){let t=Xe.colors[e];return{background:t.canvas,foreground:t.foreground,text:t.text,muted:t.muted,muted2:t.mutedSubtle,card:t.surface,card2:t.surfaceSecondary,soft:t.surfaceSoft,popover:t.surfaceElevated,border:t.border,borderStrong:t.borderStrong,hairline:t.hairline,primarySoft:t.primarySoft,primaryForeground:t.primaryForeground,primaryDeep:t.primaryDeep,accent:t.accent,info:t.info,infoDeep:t.infoDeep,success:t.success,successDeep:t.successDeep,warning:t.warning,warningDeep:t.warningDeep,danger:t.danger,dangerDeep:t.dangerDeep,codeBackground:t.codeBackground,codeForeground:t.codeForeground,overlay:t.overlay,shadow:t.shadow,shadowSmall:t.shadowSmall}}n(Lo,"paletteFromMarkdown");var on={paper:{light:Lo("light"),dark:Lo("dark")},neutral:{light:{background:"oklch(0.994 0.003 95)",foreground:"oklch(0.205 0.008 80)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.505 0.01 80)",muted2:"oklch(0.62 0.01 80)",card:"oklch(0.985 0.004 95)",card2:"oklch(0.96 0.004 95)",soft:"oklch(0.955 0.006 95)",popover:"oklch(0.997 0.002 95)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.004 90)"},dark:{background:"oklch(0.17 0.006 85)",foreground:"oklch(0.92 0.005 90)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.66 0.01 88)",muted2:"oklch(0.54 0.01 88)",card:"oklch(0.205 0.006 85)",card2:"oklch(0.235 0.006 85)",soft:"oklch(0.255 0.007 85)",popover:"oklch(0.21 0.006 85)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}},slate:{light:{background:"oklch(0.99 0.004 250)",foreground:"oklch(0.22 0.018 255)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.49 0.02 255)",muted2:"oklch(0.61 0.018 255)",card:"oklch(0.982 0.005 250)",card2:"oklch(0.955 0.007 250)",soft:"oklch(0.95 0.01 250)",popover:"oklch(0.996 0.003 250)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.008 250)"},dark:{background:"oklch(0.17 0.014 255)",foreground:"oklch(0.92 0.006 250)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.68 0.018 250)",muted2:"oklch(0.54 0.018 250)",card:"oklch(0.21 0.014 255)",card2:"oklch(0.25 0.014 255)",soft:"oklch(0.27 0.014 255)",popover:"oklch(0.215 0.014 255)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}},zinc:{light:{background:"oklch(0.992 0 0)",foreground:"oklch(0.21 0.005 285)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.5 0.01 285)",muted2:"oklch(0.62 0.008 285)",card:"oklch(0.982 0.002 285)",card2:"oklch(0.955 0.003 285)",soft:"oklch(0.95 0.003 285)",popover:"oklch(0.996 0 0)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.003 285)"},dark:{background:"oklch(0.17 0.004 285)",foreground:"oklch(0.92 0.003 285)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.67 0.006 285)",muted2:"oklch(0.54 0.006 285)",card:"oklch(0.21 0.004 285)",card2:"oklch(0.245 0.004 285)",soft:"oklch(0.265 0.004 285)",popover:"oklch(0.215 0.004 285)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}},stone:{light:{background:"oklch(0.992 0.004 70)",foreground:"oklch(0.22 0.01 70)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.5 0.012 70)",muted2:"oklch(0.62 0.012 70)",card:"oklch(0.982 0.005 70)",card2:"oklch(0.955 0.006 70)",soft:"oklch(0.95 0.007 70)",popover:"oklch(0.996 0.003 70)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.006 70)"},dark:{background:"oklch(0.17 0.008 70)",foreground:"oklch(0.92 0.005 70)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.67 0.01 70)",muted2:"oklch(0.54 0.01 70)",card:"oklch(0.21 0.008 70)",card2:"oklch(0.245 0.008 70)",soft:"oklch(0.265 0.008 70)",popover:"oklch(0.215 0.008 70)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}}};function Je(e){return typeof e=="number"?`${e}px`:e}n(Je,"cssLength");function rn(e,t){return tn[t]?.[e]??t}n(rn,"accentFor");function Ro(e,t){let o=rn(t,e.theme.accentColor),r=on[e.theme.baseColor][t],a=e.theme.accentColor==="canofold",s=Xe.colors[t];return{...r,primary:o,primarySoft:a&&r.primarySoft?r.primarySoft:`color-mix(in oklab, ${o} 12%, var(--cf-surface))`,primaryForeground:a&&r.primaryForeground?r.primaryForeground:`color-mix(in oklab, ${o} 76%, var(--cf-ink))`,primaryDeep:a&&r.primaryDeep?r.primaryDeep:`color-mix(in oklab, ${o} 84%, var(--cf-ink))`,accent:r.accent??o,info:r.info??s.info,infoDeep:r.infoDeep??s.infoDeep,success:r.success??s.success,successDeep:r.successDeep??s.successDeep,warning:r.warning??s.warning,warningDeep:r.warningDeep??s.warningDeep,danger:r.danger??s.danger,dangerDeep:r.dangerDeep??s.dangerDeep,codeBackground:r.codeBackground??r.card2??r.card,codeForeground:r.codeForeground??r.foreground,overlay:r.overlay??s.overlay,shadow:r.shadow??s.shadow,shadowSmall:r.shadowSmall??s.shadowSmall}}n(Ro,"resolveTokens");function To(e,t){let o=Xe.colors[t];return{canvas:e.background??o.canvas,foreground:e.foreground??o.foreground,text:e.text??o.text,muted:e.muted??o.muted,mutedSubtle:e.muted2??o.mutedSubtle,surface:e.card??o.surface,surfaceSecondary:e.card2??o.surfaceSecondary,surfaceSoft:e.soft??o.surfaceSoft,surfaceElevated:e.popover??o.surfaceElevated,border:e.border??o.border,borderStrong:e.borderStrong??o.borderStrong,hairline:e.hairline??o.hairline,primary:e.primary??o.primary,primarySoft:e.primarySoft??o.primarySoft,primaryForeground:e.primaryForeground??o.primaryForeground,primaryDeep:e.primaryDeep??o.primaryDeep,accent:e.accent??o.accent,info:e.info??o.info,infoDeep:e.infoDeep??o.infoDeep,success:e.success??o.success,successDeep:e.successDeep??o.successDeep,warning:e.warning??o.warning,warningDeep:e.warningDeep??o.warningDeep,danger:e.danger??o.danger,dangerDeep:e.dangerDeep??o.dangerDeep,codeBackground:e.codeBackground??o.codeBackground,codeForeground:e.codeForeground??o.codeForeground,overlay:e.overlay??o.overlay,shadow:e.shadow??o.shadow,shadowSmall:e.shadowSmall??o.shadowSmall}}n(To,"themeColors");function an(e){let t=Je(e.theme.radius);return en({colors:{light:{...To(Ro(e,"light"),"light"),...e.theme.tokens.colors?.light},dark:{...To(Ro(e,"dark"),"dark"),...e.theme.tokens.colors?.dark}},typography:e.theme.tokens.typography,layout:e.theme.tokens.layout,geometry:{radiusSmall:t,radiusMedium:t,radiusLarge:t,...e.theme.tokens.geometry},motion:e.theme.tokens.motion})}n(an,"resolveCanofoldTheme");function Eo(e,t){let o=t.colors[e].primary;return`${Za(t,e)}
|
|
629
|
+
window.__canofoldBootstrapOutline()`;import{Fragment as ba,jsx as P,jsxs as se}from"react/jsx-runtime";function go({config:e,graph:t,page:o,home:r=!1,markdownAssets:a,rawSource:s,markdownClientUrl:l,demoClientUrl:i,demoStyleUrls:c=[],children:d}){let p=mo({config:e,graph:t,page:o,home:r,assets:a,rawSource:s}),f=p.assets.behaviors.length>0,u=p.assets.pluginClients.map(b=>h(e,`/assets/canofold-plugins/${b.id}.js`)),w=J(e,o.routePath),y=h(e,e.theme.favicon??we.favicon),S=[e.layout.header?void 0:"cf-header-hidden",o.frontmatter.layout==="playground"?"cf-playground-page":void 0].filter(Boolean).join(" "),x=o.frontmatter.layout==="playground";return se("html",{lang:o.locale,className:S||void 0,children:[se("head",{children:[P("meta",{charSet:"utf-8"}),P("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),P("title",{children:p.title}),P("meta",{name:"description",content:p.description,"data-canofold-page-head":""}),P("meta",{property:"og:title",content:p.title,"data-canofold-page-head":""}),P("meta",{property:"og:description",content:p.description,"data-canofold-page-head":""}),e.search.enabled&&o.search?se(ba,{children:[P("meta",{"data-pagefind-meta":"title[content]",content:o.title,"data-canofold-page-head":""}),P("meta",{"data-pagefind-meta":"description[content]",content:o.description,"data-canofold-page-head":""}),P("meta",{"data-pagefind-filter":`version:${o.version}`,"data-canofold-page-head":""}),P("meta",{"data-pagefind-filter":`locale:${o.locale}`,"data-canofold-page-head":""}),P("meta",{"data-pagefind-filter":`status:${o.status}`,"data-canofold-page-head":""}),(Array.isArray(o.frontmatter.tags)?o.frontmatter.tags:[]).filter(b=>typeof b=="string").map(b=>P("meta",{"data-pagefind-filter":`tag:${b}`,"data-canofold-page-head":""},b))]}):null,w?P("meta",{property:"og:url",content:w,"data-canofold-page-head":""}):null,P("meta",{name:"twitter:card",content:"summary"}),P("link",{rel:"icon",href:y}),w?P("link",{rel:"canonical",href:w,"data-canofold-page-head":""}):null,e.siteUrl?p.alternatePages.map(b=>P("link",{rel:"alternate",hrefLang:b.locale,href:J(e,b.routePath),"data-canofold-page-head":""},b.locale)):null,P("link",{rel:"stylesheet",href:h(e,"/assets/canofold.css")}),p.assets.pluginStyles.map(b=>P("link",{rel:"stylesheet",href:h(e,`/assets/canofold-plugins/${b.id}.css`),"data-canofold-page-head":""},b.id)),c.map(b=>P("link",{rel:"stylesheet",href:b},b)),e.theme.darkMode?P("script",{dangerouslySetInnerHTML:{__html:xe}}):null]}),se("body",{children:[se("div",{className:"cf-page-root",style:{"--cf-canofold-config-icon":`url(${JSON.stringify(y)})`},"data-canofold-page-root":"","data-markdown-behaviors":f?JSON.stringify(p.assets.behaviors):void 0,"data-markdown-client-url":f?l??h(e,"/assets/canofold-markdown/index.js"):void 0,"data-markdown-plugin-clients":u.length>0?JSON.stringify(u):void 0,"data-canofold-playground-client-url":x?h(e,"/assets/canofold-playground/index.js"):void 0,"data-canofold-demo-client-url":i,children:[P("a",{className:"cf-skip-link",href:"#canofold-main",children:p.labels.skipToContent}),e.layout.header?P(ao,{model:p}):null,r?P("main",{id:"canofold-main",className:"cf-home",tabIndex:-1,"data-pagefind-body":o.search?"":void 0,children:d}):P(uo,{model:p,children:d}),P(po,{model:p})]}),P("script",{type:"module",dangerouslySetInnerHTML:{__html:p.markdownClientScript}}),x?P("script",{type:"module",src:h(e,"/assets/canofold-playground/index.js")}):null,i?P("script",{type:"module",src:i}):null,P("script",{dangerouslySetInnerHTML:{__html:fo}}),P("script",{dangerouslySetInnerHTML:{__html:ho}}),e.search.enabled?P("script",{type:"module",src:h(e,"/assets/canofold-search.js")}):null]})]})}n(go,"Layout");import{access as ka,copyFile as va,mkdir as Pa}from"fs/promises";import{dirname as Sa,join as wo}from"path";import{fileURLToPath as yo}from"url";async function xa(){let e=[yo(new URL("../assets/brand/",import.meta.url)),yo(new URL("./brand/",import.meta.url))];for(let t of e)try{return await ka(wo(t,"logo-light.webp")),t}catch{}throw new Error("Canofold built-in brand assets are missing")}n(xa,"brandSourceRoot");async function bo(e){let t=await xa();await Promise.all(bt.map(async o=>{let r=R(e,o,`built-in brand asset ${o}`);await Pa(Sa(r),{recursive:!0}),await va(wo(t,o.split("/").at(-1)),r)}))}n(bo,"copyBuiltInBrandAssets");import{createMarkdownRenderer as ja}from"@canofold/markdown/server";import*as za from"react";import*as Ga from"react/jsx-runtime";import{analyzeMdxModuleBoundary as Ca}from"@canofold/markdown/server/analyze";var Ma=["react","react/jsx-runtime"],Da=new Set(Ma);function He(e){return Da.has(e)}n(He,"isDocsImportSpecifier");function je(e){return e.startsWith(".")||He(e)}n(je,"isAllowedDocsImport");function Ce(e){let t=Ca(e);for(let o of t.unsupportedReferences){let r=o.kind==="dynamic-import"?"Dynamic import":"Re-export";throw new Error(`${r} is not allowed in MDX${o.specifier?`: ${o.specifier}`:""}`)}for(let{specifier:o}of t.imports)if(!je(o))throw new Error(`External import is not allowed: ${o}`);return{source:t.sourceWithoutImports,imports:t.imports}}n(Ce,"prepareMdxSource");import{access as Na,readFile as Aa,realpath as De}from"fs/promises";import{dirname as La,extname as Po,isAbsolute as Ve,relative as So,resolve as ko,sep as xo}from"path";import{build as Ra}from"esbuild";import*as Ta from"react";import*as Ea from"react/jsx-runtime";import{detectMarkdownAssets as $a}from"@canofold/markdown/server/analyze";var ze=[".tsx",".ts",".jsx",".js"],vo={react:Ta,"react/jsx-runtime":Ea};function Oa(e){if(Object.hasOwn(vo,e))return vo[e];throw new Error(`External import is not allowed in local docs components: ${e}`)}n(Oa,"requireLocalComponentRuntime");function Me(e,t){let o=So(e,t);return o===""||!o.startsWith(`..${xo}`)&&o!==".."&&!Ve(o)}n(Me,"isInsideRoot");async function Ge(e){try{return await Na(e),!0}catch{return!1}}n(Ge,"fileExists");async function Ke(e,t){let o=await De(e);if(!t)return o;let r=await De(t),a=So(r,o);if(a===".."||a.startsWith(`..${xo}`)||Ve(a))throw new Error(`Local component import escapes the project root: ${e}`);return o}n(Ke,"assertInsideProjectRoot");async function We(e,t,o){let r=ko(La(e),t),a=Po(r);if(a&&!ze.includes(a))throw new Error(`Unsupported local component import: ${t}`);if(a&&await Ge(r))return Ke(r,o);for(let s of ze){let l=`${r}${s}`;if(await Ge(l))return Ke(l,o)}for(let s of ze){let l=ko(r,`index${s}`);if(await Ge(l))return Ke(l,o)}throw new Error(`Local component import not found: ${t}`)}n(We,"resolveLocalModule");async function Ia(e,t){let o=t?await De(t):void 0,r=new Set([e]),s=(await Ra({entryPoints:[e],bundle:!0,outfile:"local-component.js",write:!1,platform:"node",format:"cjs",target:"node22",jsx:"automatic",plugins:[{name:"canofold-components-alias",setup(l){l.onResolve({filter:/^(?:react|react\/jsx-runtime)$/},i=>({path:i.path,external:!0})),l.onResolve({filter:/.*/},async i=>{if(!Ve(i.path)||!i.importer||!(o?Me(o,i.importer):r.has(i.importer)))return;let d=await We(i.importer,i.path,t);return r.add(d),{path:d}}),l.onResolve({filter:/^\./},async i=>{if(i.importer&&!(o?Me(o,i.importer):r.has(i.importer)))return;let c=await We(i.importer,i.path,t);return r.add(c),{path:c}}),l.onLoad({filter:/\.(?:[jt]sx?)$/},async i=>{let c=await De(i.path);(o?Me(o,c):r.has(c))&&r.add(c)}),l.onResolve({filter:/^react-dom$/},i=>(i.importer?o?Me(o,i.importer):r.has(i.importer):!1)?{errors:[{text:"External import is not allowed in local docs components: react-dom"}]}:void 0),l.onResolve({filter:/^[^./].*/},i=>{if(!je(i.path))return{errors:[{text:`External import is not allowed in local docs components: ${i.path}`}]}})}}]})).outputFiles.find(l=>Po(l.path)===".js");if(!s)throw new Error(`Failed to bundle local component: ${e}`);return{code:s.text,sourcePaths:[...r]}}n(Ia,"bundleLocalModule");async function Fa(e){let t={exports:{}};return new Function("module","exports","require",e.code)(t,t.exports,Oa),t.exports}n(Fa,"importBundle");function _a(e){return e.filter(t=>t.specifier.startsWith("."))}n(_a,"localImports");async function Co(e,t,o){let r=_a(e);if(!r.length)return[];if(!t)throw new Error("Local MDX component imports require the Markdown source file path");let a=new Map;return Promise.all(r.map(async s=>{let l=await We(t,s.specifier,o),i=a.get(l);return i||(i=Ia(l,o),a.set(l,i)),{localImport:s,bundle:await i}}))}n(Co,"bundleLocalImports");async function Mo(e,t,o){let r=await Co(e,t,o);return[...new Set(r.flatMap(({bundle:a})=>a.sourcePaths))].sort()}n(Mo,"localComponentDependencyPaths");async function Ba(e){let t={},o=new Map;for(let{localImport:r,bundle:a}of e){let s=o.get(a);s||(s=Fa(a),o.set(a,s));let l=await s;for(let i of r.bindings)if(i.namespace)t[i.local]=l;else{if(!Object.hasOwn(l,i.imported))throw new Error(`Local module ${JSON.stringify(r.specifier)} does not export ${JSON.stringify(i.imported)}`);t[i.local]=l[i.imported]}}return t}n(Ba,"componentsFromBundles");function Ua(e,t){e.behaviors=[...new Set([...e.behaviors,...t.behaviors])],e.math||=t.math,e.pluginClients=[...new Map([...e.pluginClients,...t.pluginClients].map(o=>[o.id,o])).values()],e.pluginStyles=[...new Map([...e.pluginStyles,...t.pluginStyles].map(o=>[o.id,o])).values()]}n(Ua,"mergeAssets");function qa(){return{behaviors:[],math:!1,pluginClients:[],pluginStyles:[]}}n(qa,"emptyAssets");async function Ha(e,t=[]){let o=qa(),r=new Set;for(let{bundle:a}of e)for(let s of a.sourcePaths)r.has(s)||(r.add(s),Ua(o,$a(await Aa(s,"utf8"),t,"mdx")));return o}n(Ha,"assetsFromBundles");async function Do(e,t,o,r=[]){let a=await Co(e,t,o),[s,l]=await Promise.all([Ba(a),Ha(a,r)]);return{components:s,assets:l}}n(Do,"loadLocalComponentBundle");function Ka(...e){return{behaviors:[...new Set(e.flatMap(t=>t.behaviors))],math:e.some(t=>t.math),pluginClients:[...new Map(e.flatMap(t=>t.pluginClients).map(t=>[t.id,t])).values()],pluginStyles:[...new Map(e.flatMap(t=>t.pluginStyles).map(t=>[t.id,t])).values()]}}n(Ka,"mergeAssets");function Wa(e,t){let o={react:za,"react/jsx-runtime":Ga},r={...t};for(let a of e){if(!He(a.specifier))continue;let s=o[a.specifier];for(let l of a.bindings){if(l.namespace){r[l.local]=s;continue}if(l.imported==="default"&&a.specifier==="react"){r[l.local]=s.default??s;continue}if(!Object.hasOwn(s,l.imported))throw new Error(`Module ${JSON.stringify(a.specifier)} does not export ${JSON.stringify(l.imported)}`);r[l.local]=s[l.imported]}}return r}n(Wa,"bindImports");async function No(e,t,o,r,a,s,l=ja()){let i=Ce(e),{components:c,assets:d}=await Do(i.imports,t,o,r?.plugins),p=await l.renderMdx(i.source,{markdown:r,classNames:a,urlTransform:s,as:"article",components:{...Wa(i.imports,c)}});return{content:p.content,assets:Ka(p.assets,d)}}n(No,"renderMdxResult");import{mkdir as Va}from"fs/promises";import{dirname as Ja,join as Xa}from"path";import{fileURLToPath as Ya}from"url";function Qa(){let e=import.meta.url.endsWith(".js")?"./search-client.js":"./searchClientRuntime.ts";return Ya(new URL(e,import.meta.url))}n(Qa,"searchRuntimeEntry");async function Ao(e){let{build:t}=await import("esbuild"),o=Xa(e,"assets/canofold-search.js");await Va(Ja(o),{recursive:!0}),await t({entryPoints:[Qa()],bundle:!0,format:"iife",platform:"browser",target:"es2022",outfile:o,minify:!0,sourcemap:!1,legalComments:"none",logLevel:"silent"})}n(Ao,"buildSearchBundle");import{DEFAULT_SEMANTIC_COLORS as A,DEFAULT_MARKDOWN_THEME as Xe,markdownThemeDeclarations as Za,resolveMarkdownTheme as en}from"@canofold/markdown/theme";var tn={canofold:{light:A.light.blue,dark:A.dark.blue},cyan:{light:A.light.cyan,dark:A.dark.cyan},emerald:{light:A.light.green,dark:A.dark.green},blue:{light:A.light.blue,dark:A.dark.blue},green:{light:A.light.green,dark:A.dark.green},red:{light:A.light.red,dark:A.dark.red},orange:{light:A.light.orange,dark:A.dark.orange},violet:{light:A.light.indigo,dark:A.dark.indigo},neutral:{light:"oklch(0.3 0 0)",dark:"oklch(0.85 0 0)"}};function Lo(e){let t=Xe.colors[e];return{background:t.canvas,foreground:t.foreground,text:t.text,muted:t.muted,muted2:t.mutedSubtle,card:t.surface,card2:t.surfaceSecondary,soft:t.surfaceSoft,popover:t.surfaceElevated,border:t.border,borderStrong:t.borderStrong,hairline:t.hairline,primarySoft:t.primarySoft,primaryForeground:t.primaryForeground,primaryDeep:t.primaryDeep,accent:t.accent,info:t.info,infoDeep:t.infoDeep,success:t.success,successDeep:t.successDeep,warning:t.warning,warningDeep:t.warningDeep,danger:t.danger,dangerDeep:t.dangerDeep,codeBackground:t.codeBackground,codeForeground:t.codeForeground,overlay:t.overlay,shadow:t.shadow,shadowSmall:t.shadowSmall}}n(Lo,"paletteFromMarkdown");var on={paper:{light:Lo("light"),dark:Lo("dark")},neutral:{light:{background:"oklch(0.994 0.003 95)",foreground:"oklch(0.205 0.008 80)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.505 0.01 80)",muted2:"oklch(0.62 0.01 80)",card:"oklch(0.985 0.004 95)",card2:"oklch(0.96 0.004 95)",soft:"oklch(0.955 0.006 95)",popover:"oklch(0.997 0.002 95)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.004 90)"},dark:{background:"oklch(0.17 0.006 85)",foreground:"oklch(0.92 0.005 90)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.66 0.01 88)",muted2:"oklch(0.54 0.01 88)",card:"oklch(0.205 0.006 85)",card2:"oklch(0.235 0.006 85)",soft:"oklch(0.255 0.007 85)",popover:"oklch(0.21 0.006 85)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}},slate:{light:{background:"oklch(0.99 0.004 250)",foreground:"oklch(0.22 0.018 255)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.49 0.02 255)",muted2:"oklch(0.61 0.018 255)",card:"oklch(0.982 0.005 250)",card2:"oklch(0.955 0.007 250)",soft:"oklch(0.95 0.01 250)",popover:"oklch(0.996 0.003 250)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.008 250)"},dark:{background:"oklch(0.17 0.014 255)",foreground:"oklch(0.92 0.006 250)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.68 0.018 250)",muted2:"oklch(0.54 0.018 250)",card:"oklch(0.21 0.014 255)",card2:"oklch(0.25 0.014 255)",soft:"oklch(0.27 0.014 255)",popover:"oklch(0.215 0.014 255)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}},zinc:{light:{background:"oklch(0.992 0 0)",foreground:"oklch(0.21 0.005 285)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.5 0.01 285)",muted2:"oklch(0.62 0.008 285)",card:"oklch(0.982 0.002 285)",card2:"oklch(0.955 0.003 285)",soft:"oklch(0.95 0.003 285)",popover:"oklch(0.996 0 0)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.003 285)"},dark:{background:"oklch(0.17 0.004 285)",foreground:"oklch(0.92 0.003 285)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.67 0.006 285)",muted2:"oklch(0.54 0.006 285)",card:"oklch(0.21 0.004 285)",card2:"oklch(0.245 0.004 285)",soft:"oklch(0.265 0.004 285)",popover:"oklch(0.215 0.004 285)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}},stone:{light:{background:"oklch(0.992 0.004 70)",foreground:"oklch(0.22 0.01 70)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.5 0.012 70)",muted2:"oklch(0.62 0.012 70)",card:"oklch(0.982 0.005 70)",card2:"oklch(0.955 0.006 70)",soft:"oklch(0.95 0.007 70)",popover:"oklch(0.996 0.003 70)",border:"transparent",borderStrong:"transparent",hairline:"oklch(0.93 0.006 70)"},dark:{background:"oklch(0.17 0.008 70)",foreground:"oklch(0.92 0.005 70)",text:"color-mix(in oklab, var(--cf-ink) 88%, var(--cf-ink-secondary))",muted:"oklch(0.67 0.01 70)",muted2:"oklch(0.54 0.01 70)",card:"oklch(0.21 0.008 70)",card2:"oklch(0.245 0.008 70)",soft:"oklch(0.265 0.008 70)",popover:"oklch(0.215 0.008 70)",border:"transparent",borderStrong:"transparent",hairline:"oklch(1 0 0 / 6%)"}}};function Je(e){return typeof e=="number"?`${e}px`:e}n(Je,"cssLength");function rn(e,t){return tn[t]?.[e]??t}n(rn,"accentFor");function Ro(e,t){let o=rn(t,e.theme.accentColor),r=on[e.theme.baseColor][t],a=e.theme.accentColor==="canofold",s=Xe.colors[t];return{...r,primary:o,primarySoft:a&&r.primarySoft?r.primarySoft:`color-mix(in oklab, ${o} 12%, var(--cf-surface))`,primaryForeground:a&&r.primaryForeground?r.primaryForeground:`color-mix(in oklab, ${o} 76%, var(--cf-ink))`,primaryDeep:a&&r.primaryDeep?r.primaryDeep:`color-mix(in oklab, ${o} 84%, var(--cf-ink))`,accent:r.accent??o,info:r.info??s.info,infoDeep:r.infoDeep??s.infoDeep,success:r.success??s.success,successDeep:r.successDeep??s.successDeep,warning:r.warning??s.warning,warningDeep:r.warningDeep??s.warningDeep,danger:r.danger??s.danger,dangerDeep:r.dangerDeep??s.dangerDeep,codeBackground:r.codeBackground??r.card2??r.card,codeForeground:r.codeForeground??r.foreground,overlay:r.overlay??s.overlay,shadow:r.shadow??s.shadow,shadowSmall:r.shadowSmall??s.shadowSmall}}n(Ro,"resolveTokens");function To(e,t){let o=Xe.colors[t];return{canvas:e.background??o.canvas,foreground:e.foreground??o.foreground,text:e.text??o.text,muted:e.muted??o.muted,mutedSubtle:e.muted2??o.mutedSubtle,surface:e.card??o.surface,surfaceSecondary:e.card2??o.surfaceSecondary,surfaceSoft:e.soft??o.surfaceSoft,surfaceElevated:e.popover??o.surfaceElevated,border:e.border??o.border,borderStrong:e.borderStrong??o.borderStrong,hairline:e.hairline??o.hairline,primary:e.primary??o.primary,primarySoft:e.primarySoft??o.primarySoft,primaryForeground:e.primaryForeground??o.primaryForeground,primaryDeep:e.primaryDeep??o.primaryDeep,accent:e.accent??o.accent,info:e.info??o.info,infoDeep:e.infoDeep??o.infoDeep,success:e.success??o.success,successDeep:e.successDeep??o.successDeep,warning:e.warning??o.warning,warningDeep:e.warningDeep??o.warningDeep,danger:e.danger??o.danger,dangerDeep:e.dangerDeep??o.dangerDeep,codeBackground:e.codeBackground??o.codeBackground,codeForeground:e.codeForeground??o.codeForeground,overlay:e.overlay??o.overlay,shadow:e.shadow??o.shadow,shadowSmall:e.shadowSmall??o.shadowSmall}}n(To,"themeColors");function an(e){let t=Je(e.theme.radius);return en({colors:{light:{...To(Ro(e,"light"),"light"),...e.theme.tokens.colors?.light},dark:{...To(Ro(e,"dark"),"dark"),...e.theme.tokens.colors?.dark}},typography:e.theme.tokens.typography,layout:e.theme.tokens.layout,geometry:{radiusSmall:t,radiusMedium:t,radiusLarge:t,...e.theme.tokens.geometry},motion:e.theme.tokens.motion})}n(an,"resolveCanofoldTheme");function Eo(e,t){let o=t.colors[e].primary;return`${Za(t,e)}
|
|
630
630
|
--cf-accent-50: color-mix(in oklab, ${o} 8%, var(--cf-surface));
|
|
631
631
|
--cf-accent-100: color-mix(in oklab, ${o} 16%, var(--cf-surface));
|
|
632
632
|
--cf-accent-200: color-mix(in oklab, ${o} 28%, var(--cf-surface));
|
|
@@ -642,9 +642,9 @@ ${Eo("light",t)}
|
|
|
642
642
|
}`;return e.theme.darkMode?`${a}
|
|
643
643
|
.dark {
|
|
644
644
|
${Eo("dark",t)}
|
|
645
|
-
}`:a}n($o,"buildThemeVariables");function nn(e,t){if(t==="/")return e;let o=t.replace(/\/$/,"");return e===o||e.startsWith(`${o}/`)||!e.startsWith("/")||e.startsWith("//")?e:`${o}${e}`}n(nn,"withBasePath");function Oo(e){return t=>nn(t,e)}n(Oo,"createBasePathUrlTransform");import{rm as sn}from"fs/promises";import{fileURLToPath as ln}from"url";import{join as cn}from"path";import{build as dn}from"esbuild";function ie(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}n(ie,"jsonForJavaScript");function un(){let e=import.meta.url.endsWith(".js")?"./playground-client.js":"./playgroundClient.tsx";return ln(new URL(e,import.meta.url))}n(un,"playgroundRuntimeEntry");async function Io(e,t,o){let r=cn(t,"assets/canofold-playground");await sn(r,{recursive:!0,force:!0});let a=o.markdown.plugins.map(
|
|
646
|
-
`),l=a.map((
|
|
647
|
-
`),i={html:o.markdown.html,code:o.markdown.code,features:o.markdown.features},
|
|
645
|
+
}`:a}n($o,"buildThemeVariables");function nn(e,t){if(t==="/")return e;let o=t.replace(/\/$/,"");return e===o||e.startsWith(`${o}/`)||!e.startsWith("/")||e.startsWith("//")?e:`${o}${e}`}n(nn,"withBasePath");function Oo(e){return t=>nn(t,e)}n(Oo,"createBasePathUrlTransform");import{rm as sn}from"fs/promises";import{fileURLToPath as ln}from"url";import{join as cn}from"path";import{build as dn}from"esbuild";function ie(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}n(ie,"jsonForJavaScript");function un(){let e=import.meta.url.endsWith(".js")?"./playground-client.js":"./playgroundClient.tsx";return ln(new URL(e,import.meta.url))}n(un,"playgroundRuntimeEntry");async function Io(e,t,o){let r=cn(t,"assets/canofold-playground");await sn(r,{recursive:!0,force:!0});let a=o.markdown.plugins.map(d=>{if(!d.browserCompiler)throw new Error(`Markdown plugin "${d.name}" must declare browserCompiler to support Playground realtime preview`);return d.browserCompiler}),s=a.map((d,p)=>`import { ${d.exportName} as canofoldPlugin${p} } from ${ie(d.module)}`).join(`
|
|
646
|
+
`),l=a.map((d,p)=>d.options===void 0?`canofoldPlugin${p}()`:`canofoldPlugin${p}(${ie(d.options)})`).join(`,
|
|
647
|
+
`),i={html:o.markdown.html,code:o.markdown.code,features:o.markdown.features},c=`import { mountPlaygrounds } from ${ie(un())}
|
|
648
648
|
${s}
|
|
649
649
|
|
|
650
650
|
const options = {
|
|
@@ -654,12 +654,12 @@ const options = {
|
|
|
654
654
|
] }
|
|
655
655
|
}
|
|
656
656
|
window.__canofoldBootstrapPlayground = () => mountPlaygrounds(options)
|
|
657
|
-
window.__canofoldBootstrapPlayground()`;await dn({absWorkingDir:e,stdin:{contents:d,loader:"js",resolveDir:e,sourcefile:"canofold-playground-entry.js"},bundle:!0,format:"esm",platform:"browser",target:"es2022",outdir:r,entryNames:"index",chunkNames:"chunks/[name]-[hash]",assetNames:"assets/[name]-[hash]",splitting:!0,minify:!0,sourcemap:!1,define:{"process.env.NODE_ENV":JSON.stringify("production")},logLevel:"silent"})}n(Io,"buildPlaygroundBundle");import{createHash as mn}from"crypto";function _(e,t){return{hName:e,hProperties:t}}n(_,"properties");function pn(e,t){let o=`cf-demo-source-${e.id}`,r=`cf-demo-title-${e.id}`,a=[];e.title&&a.push({type:"textDirective",name:"canofold-demo-title",children:[{type:"text",value:e.title}],data:_("strong",{id:r,className:["cf-demo-title"]})}),e.description&&a.push({type:"textDirective",name:"canofold-demo-description",children:[{type:"text",value:e.description}],data:_("p",{className:["cf-demo-description"]})});let s=n((d,c)=>({type:"textDirective",name:d,children:[],data:_("span",{className:["cf-demo-action-icon",c],ariaHidden:!0})}),"actionIcon"),l=n((d,c)=>({type:"textDirective",name:d,children:[{type:"text",value:c}],data:_("span",{className:["cf-demo-tooltip"],ariaHidden:!0,dataCfDemoTooltip:""})}),"tooltip"),i=[{type:"textDirective",name:"canofold-demo-open",children:[s("canofold-demo-open-icon","cf-demo-open-icon"),l("canofold-demo-open-tooltip",t.openPreview)],data:_("a",{className:["cf-demo-action","cf-demo-open"],href:`?canofold-demo=${e.id}`,target:"_blank",rel:"noopener noreferrer",ariaLabel:t.openPreview})},{type:"textDirective",name:"canofold-demo-source-toggle",children:[s("canofold-demo-source-icon","cf-demo-source-icon"),l("canofold-demo-source-tooltip",t.showSource)],data:_("button",{className:["cf-demo-action","cf-demo-source-toggle"],type:"button",ariaLabel:t.showSource,ariaControls:o,ariaExpanded:!1,dataCfDemoSourceToggle:"",dataCfDemoShowLabel:t.showSource,dataCfDemoHideLabel:t.hideSource})}];return{type:"containerDirective",name:"canofold-demo-card",data:_("figure",{className:["cf-demo"],dataCfComponent:"demo",dataCfDemoId:e.id,dataCfDemoSandbox:e.sandbox,...e.title?{ariaLabelledBy:r}:{},...!e.title&&e.description?{ariaLabel:e.description}:{}}),children:[{type:"paragraph",data:_("div",{className:["cf-demo-preview"],dataCfDemoPreview:"",dataCfDemoId:e.id,dataCfDemoLoadingLabel:t.loading,dataCfDemoFailedLabel:t.failed}),children:[]},...a.length>0?[{type:"paragraph",data:_("div",{className:["cf-demo-details"]}),children:a}]:[],{type:"paragraph",data:_("div",{className:["cf-demo-toolbar"]}),children:i},{type:"containerDirective",name:"canofold-demo-source",data:_("div",{id:o,className:["cf-demo-source"],hidden:!0,dataCfDemoSource:""}),children:[{type:"code",lang:e.language,meta:`filename=${JSON.stringify(e.specifier)}`,value:e.source}]}]}}n(pn,"demoNode");function fn(e,t,o,r){let a=o.attributes?.src?.trim(),s=o.position?.start?.line,l=o.position?.start?.column,i=e.demos.find(c=>!r.has(c.id)&&c.specifier===a&&(s===void 0||c.line===s)&&(l===void 0||c.column===l));if(!i)return;let d=t.demos[i.id];if(!d)throw new Error(`Demo engine did not prepare ${i.specifier} for ${e.sourceRelativePath}`);return r.add(i.id),d}n(fn,"matchingDemo");function hn(e,t,o,r){let a=new Set,s=n(l=>{l.children&&l.children.forEach((i,d)=>{if(i.type==="leafDirective"&&i.name==="demo"){let c=fn(t,o,i,a);if(!c)throw new Error(`Could not match demo directive in ${t.sourceRelativePath}`);l.children[d]=pn(c,r);return}s(i)})},"walk");s(e)}n(hn,"transformDemoNodes");function Fo({page:e,manifest:t,labels:o}){let r=e.demos.flatMap(a=>{let s=t.demos[a.id];return s?[s]:[]});return{name:"canofold-demo-renderer",version:"2",cacheKey:{page:e.sourceRelativePath,demos:r.map(a=>[a.id,mn("sha256").update(a.source).digest("hex")])},directiveNames:["demo"],highlightLanguages:[...new Set(r.map(a=>a.language))],remarkPlugins:[()=>a=>hn(a,e,t,o)]}}n(Fo,"createDemoMarkdownPlugin");var gn={openPreview:"Open in new window",showSource:"Show source",hideSource:"Hide source",loading:"Loading example\u2026",failed:"This example could not be loaded."};function _o(e){return e.toLowerCase().startsWith("zh")?{openPreview:"\u5728\u65B0\u7A97\u53E3\u6253\u5F00",showSource:"\u67E5\u770B\u4EE3\u7801",hideSource:"\u6536\u8D77\u4EE3\u7801",loading:"\u6B63\u5728\u52A0\u8F7D\u793A\u4F8B\u2026",failed:"\u793A\u4F8B\u52A0\u8F7D\u5931\u8D25\u3002"}:gn}n(_o,"demoLabelsFor");import{copyFile as ce,cp as qo,lstat as yn,mkdir as Ne,readFile as Qe,readdir as Ho,realpath as Bo,rm as jo,stat as wn}from"fs/promises";import{createRequire as zo}from"module";import{dirname as de,join as U,posix as K,relative as bn,resolve as le}from"path";import{analyzeMarkdown as kn}from"@canofold/markdown/server/analyze";var Ze=zo(import.meta.url);async function vn(e,t){await qo(e,t,{recursive:!0,filter:n(async o=>(await wn(o)).isDirectory()||o.endsWith(".js"),"filter")})}n(vn,"copyJavaScriptDirectory");async function Go(e){let t=Ze.resolve("@canofold/markdown/client"),o=U(e,"assets/canofold-markdown");await vn(de(t),o)}n(Go,"copyMarkdownClient");var Pn=/^[a-z0-9]+(?:-[a-z0-9]+)*$/;function Uo(e,t,o){if(!Pn.test(t.id))throw new Error(`Invalid Markdown plugin ${o} id: ${t.id}`);let r=e.get(t.id);if(r&&JSON.stringify(r)!==JSON.stringify(t))throw new Error(`Markdown plugin ${o} id "${t.id}" is declared by both "${r.module}" and "${t.module}"`);e.set(t.id,t)}n(Uo,"registerPluginAsset");function Ye(e,t){if(!e||e.startsWith("/")||e.includes("\\")||e.split("/").some(o=>o===""||o==="."||o===".."))throw new Error(`Invalid Markdown plugin ${t} path: ${e}`)}n(Ye,"assertSafePluginResourcePath");async function Ko(e,t,o){await Ne(t,{recursive:!0});for(let r of await Ho(e,{withFileTypes:!0})){if(r.isSymbolicLink())throw new Error(`Markdown plugin resources must not use symbolic links: ${U(e,r.name)}`);let a=U(e,r.name),s=U(t,r.name);r.isDirectory()?await Ko(a,s,o):r.isFile()&&(!o.extensions||o.extensions.some(l=>r.name.endsWith(l)))&&await ce(a,s)}}n(Ko,"copyPluginResourceDirectory");async function Sn(e,t){let o=Ze.resolve(t.module);if(await ce(o,U(e,`${t.id}.js`)),!t.resources?.length)return;let r=U(e,t.id),a=zo(o);for(let s of t.resources){Ye(s.output,"resource output");let l=a.resolve(s.module),i=le(r,s.output);if(!re(r,i))throw new Error(`Markdown plugin resource output escapes its client directory: ${s.output}`);await Ne(de(i),{recursive:!0}),await ce(l,i);for(let d of s.directories??[]){Ye(d.source,"resource source"),Ye(d.output,"resource directory output");let c=de(l),p=le(c,d.source),f=le(r,d.output);if(!re(c,p)||!re(r,f))throw new Error(`Markdown plugin resource directory escapes its declared root: ${d.source}`);await Ko(p,f,d)}}}n(Sn,"copyMarkdownPluginClient");function me(e,t,o){e.pluginClients.forEach(r=>Uo(t,r,"client")),e.pluginStyles.forEach(r=>Uo(o,r,"style"))}n(me,"registerPluginAssets");async function Wo(e,t,o){let r=U(e,"assets/canofold-plugins");await jo(r,{recursive:!0,force:!0}),!(t.size===0&&o.size===0)&&(await Ne(r,{recursive:!0}),await Promise.all([...[...t.values()].map(a=>Sn(r,a)),...[...o.values()].map(a=>ce(Ze.resolve(a.module),U(r,`${a.id}.css`)))]))}n(Wo,"copyMarkdownPluginAssets");async function et(e,t){try{await qo(e,t,{recursive:!0,force:!0})}catch(o){throw new Error(`Failed to copy required KaTeX fonts from ${e}`,{cause:o})}}n(et,"copyRequiredMathFonts");async function tt(e,t){let o=[];async function r(s,l){for(let i of await Ho(s,{withFileTypes:!0})){if(i.isSymbolicLink())throw new Error(`Public assets must not be symbolic links: ${K.join(l,i.name)}`);let d=U(s,i.name),c=K.join(l,i.name);i.isDirectory()?await r(d,c):i.isFile()&&o.push({source:d,outputPath:c})}}n(r,"walk");let a=new Set(t.versions.items.map(s=>s.docsDir));for(let s of a){let l=U(V(e,s,`public directory for ${s}`),"public");try{await r(l,"")}catch(i){if(i.code!=="ENOENT")throw i}}return o}n(tt,"collectPublicAssets");function Vo(e){let t=kn(e);return[...new Set([...t.images,...t.links])].map(o=>(o.split("#")[0]??"").split("?")[0]??"").filter(o=>o&&!o.startsWith("/")&&!/^(?:[a-z][a-z\d+.-]*:|\/\/|#)/i.test(o)&&!/\.mdx?$/i.test(o))}n(Vo,"relativeAssetTargets");function Jo(e){return e.split("/").map(t=>{let o=decodeURIComponent(t);if(o.includes("/")||o.includes("\\"))throw new Error(`Invalid relative asset path: ${e}`);return o}).join("/")}n(Jo,"decodeRelativeUrlPath");async function ot(e,t){let o=[];for(let r of t){let a=V(e,r.docsDir,"docsDir"),s=await Bo(a);for(let l of Vo(r.body)){let i=Jo(l),d=le(de(r.sourcePath),i),c;try{c=await yn(d)}catch(u){if(u.code==="ENOENT")continue;throw u}if(c.isSymbolicLink())throw new Error(`Relative assets must not use symbolic links: ${l}`);if(!c.isFile())continue;let p=await Bo(d),f=le(s,bn(a,d));if(F(p)!==F(f))throw new Error(`Relative assets must not use symbolic links: ${l}`);if(!re(s,p))throw new Error(`Relative asset must stay inside docsDir: ${l}`);o.push({source:p,outputPath:K.resolve("/",K.dirname(r.outputPath),i).slice(1)})}}return o}n(ot,"collectPageAssets");function ue(e){let t=new Set;for(let o of e){if("assetOutputPaths"in o&&o.assetOutputPaths){o.assetOutputPaths.forEach(r=>t.add(r));continue}if("body"in o)for(let r of Vo(o.body)){let a=Jo(r);t.add(K.resolve("/",K.dirname(o.outputPath),a).slice(1))}}return t}n(ue,"pageAssetOutputPathsFor");async function Xo(e,t,o,r){if(!t.length)return;let a=new Set([...ue(o),...r].map(F)),s=[...ue(t)].filter(l=>!a.has(F(l)));await Promise.all(s.map(l=>jo(R(e,l,`stale page asset ${l}`),{force:!0})))}n(Xo,"removeStalePageAssets");async function rt(e,t,o){let r=new Set([...o].map(F)),a=n(c=>{let p=[],f=K.dirname(c);for(;f!==".";)p.push(f),f=K.dirname(f);return p},"ancestorsOf"),s=new Set([...r].flatMap(c=>a(c))),l=Mt.map(F),i=new Map,d=new Set;for(let c of t){let p=F(c.outputPath),f=a(p);if(r.has(p)||s.has(p)||f.some(w=>r.has(w))||l.some(w=>p===w||p.startsWith(`${w}/`)))throw new Error(`Static asset conflicts with generated output: ${c.outputPath}`);let u=i.get(p);if(u&&u!==c.source){let[w,P]=await Promise.all([Qe(u),Qe(c.source)]);if(!w.equals(P))throw new Error(`Multiple static assets target the same output path: ${c.outputPath}`)}if(u)continue;if(d.has(p)||f.some(w=>i.has(w)))throw new Error(`Multiple static assets target overlapping output paths: ${c.outputPath}`);i.set(p,c.source);for(let w of f)d.add(w);let b=R(e,c.outputPath,`static asset ${c.outputPath}`);await Ne(de(b),{recursive:!0}),await ce(c.source,b)}}n(rt,"copyStaticAssets");async function Yo(e,t){return t.length?(await Promise.all(t.map(async r=>{let a=await Qe(V(e,r,"styles entry"),"utf8");return`/* User style: ${r} */
|
|
657
|
+
window.__canofoldBootstrapPlayground()`;await dn({absWorkingDir:e,stdin:{contents:c,loader:"js",resolveDir:e,sourcefile:"canofold-playground-entry.js"},bundle:!0,format:"esm",platform:"browser",target:"es2022",outdir:r,entryNames:"index",chunkNames:"chunks/[name]-[hash]",assetNames:"assets/[name]-[hash]",splitting:!0,minify:!0,sourcemap:!1,define:{"process.env.NODE_ENV":JSON.stringify("production")},logLevel:"silent"})}n(Io,"buildPlaygroundBundle");import{createHash as mn}from"crypto";function _(e,t){return{hName:e,hProperties:t}}n(_,"properties");function pn(e,t){let o=`cf-demo-source-${e.id}`,r=`cf-demo-title-${e.id}`,a=[];e.title&&a.push({type:"textDirective",name:"canofold-demo-title",children:[{type:"text",value:e.title}],data:_("strong",{id:r,className:["cf-demo-title"]})}),e.description&&a.push({type:"textDirective",name:"canofold-demo-description",children:[{type:"text",value:e.description}],data:_("p",{className:["cf-demo-description"]})});let s=n((c,d)=>({type:"textDirective",name:c,children:[],data:_("span",{className:["cf-demo-action-icon",d],ariaHidden:!0})}),"actionIcon"),l=n((c,d)=>({type:"textDirective",name:c,children:[{type:"text",value:d}],data:_("span",{className:["cf-demo-tooltip"],ariaHidden:!0,dataCfDemoTooltip:""})}),"tooltip"),i=[{type:"textDirective",name:"canofold-demo-open",children:[s("canofold-demo-open-icon","cf-demo-open-icon"),l("canofold-demo-open-tooltip",t.openPreview)],data:_("a",{className:["cf-demo-action","cf-demo-open"],href:`?canofold-demo=${e.id}`,target:"_blank",rel:"noopener noreferrer",ariaLabel:t.openPreview})},{type:"textDirective",name:"canofold-demo-source-toggle",children:[s("canofold-demo-source-icon","cf-demo-source-icon"),l("canofold-demo-source-tooltip",t.showSource)],data:_("button",{className:["cf-demo-action","cf-demo-source-toggle"],type:"button",ariaLabel:t.showSource,ariaControls:o,ariaExpanded:!1,dataCfDemoSourceToggle:"",dataCfDemoShowLabel:t.showSource,dataCfDemoHideLabel:t.hideSource})}];return{type:"containerDirective",name:"canofold-demo-card",data:_("figure",{className:["cf-demo"],dataCfComponent:"demo",dataCfDemoId:e.id,dataCfDemoSandbox:e.sandbox,...e.title?{ariaLabelledBy:r}:{},...!e.title&&e.description?{ariaLabel:e.description}:{}}),children:[{type:"paragraph",data:_("div",{className:["cf-demo-preview"],dataCfDemoPreview:"",dataCfDemoId:e.id,dataCfDemoLoadingLabel:t.loading,dataCfDemoFailedLabel:t.failed}),children:[]},...a.length>0?[{type:"paragraph",data:_("div",{className:["cf-demo-details"]}),children:a}]:[],{type:"paragraph",data:_("div",{className:["cf-demo-toolbar"]}),children:i},{type:"containerDirective",name:"canofold-demo-source",data:_("div",{id:o,className:["cf-demo-source"],hidden:!0,dataCfDemoSource:""}),children:[{type:"code",lang:e.language,meta:`filename=${JSON.stringify(e.specifier)}`,value:e.source}]}]}}n(pn,"demoNode");function fn(e,t,o,r){let a=o.attributes?.src?.trim(),s=o.position?.start?.line,l=o.position?.start?.column,i=e.demos.find(d=>!r.has(d.id)&&d.specifier===a&&(s===void 0||d.line===s)&&(l===void 0||d.column===l));if(!i)return;let c=t.demos[i.id];if(!c)throw new Error(`Demo engine did not prepare ${i.specifier} for ${e.sourceRelativePath}`);return r.add(i.id),c}n(fn,"matchingDemo");function hn(e,t,o,r){let a=new Set,s=n(l=>{l.children&&l.children.forEach((i,c)=>{if(i.type==="leafDirective"&&i.name==="demo"){let d=fn(t,o,i,a);if(!d)throw new Error(`Could not match demo directive in ${t.sourceRelativePath}`);l.children[c]=pn(d,r);return}s(i)})},"walk");s(e)}n(hn,"transformDemoNodes");function Fo({page:e,manifest:t,labels:o}){let r=e.demos.flatMap(a=>{let s=t.demos[a.id];return s?[s]:[]});return{name:"canofold-demo-renderer",version:"2",cacheKey:{page:e.sourceRelativePath,demos:r.map(a=>[a.id,mn("sha256").update(a.source).digest("hex")])},directiveNames:["demo"],highlightLanguages:[...new Set(r.map(a=>a.language))],remarkPlugins:[()=>a=>hn(a,e,t,o)]}}n(Fo,"createDemoMarkdownPlugin");var gn={openPreview:"Open in new window",showSource:"Show source",hideSource:"Hide source",loading:"Loading example\u2026",failed:"This example could not be loaded."};function _o(e){return e.toLowerCase().startsWith("zh")?{openPreview:"\u5728\u65B0\u7A97\u53E3\u6253\u5F00",showSource:"\u67E5\u770B\u4EE3\u7801",hideSource:"\u6536\u8D77\u4EE3\u7801",loading:"\u6B63\u5728\u52A0\u8F7D\u793A\u4F8B\u2026",failed:"\u793A\u4F8B\u52A0\u8F7D\u5931\u8D25\u3002"}:gn}n(_o,"demoLabelsFor");import{copyFile as ce,cp as qo,lstat as yn,mkdir as Ne,readFile as Qe,readdir as Ho,realpath as Bo,rm as jo,stat as wn}from"fs/promises";import{createRequire as zo}from"module";import{dirname as de,join as U,posix as K,relative as bn,resolve as le}from"path";import{analyzeMarkdown as kn}from"@canofold/markdown/server/analyze";var Ze=zo(import.meta.url);async function vn(e,t){await qo(e,t,{recursive:!0,filter:n(async o=>(await wn(o)).isDirectory()||o.endsWith(".js"),"filter")})}n(vn,"copyJavaScriptDirectory");async function Go(e){let t=Ze.resolve("@canofold/markdown/client"),o=U(e,"assets/canofold-markdown");await vn(de(t),o)}n(Go,"copyMarkdownClient");var Pn=/^[a-z0-9]+(?:-[a-z0-9]+)*$/;function Uo(e,t,o){if(!Pn.test(t.id))throw new Error(`Invalid Markdown plugin ${o} id: ${t.id}`);let r=e.get(t.id);if(r&&JSON.stringify(r)!==JSON.stringify(t))throw new Error(`Markdown plugin ${o} id "${t.id}" is declared by both "${r.module}" and "${t.module}"`);e.set(t.id,t)}n(Uo,"registerPluginAsset");function Ye(e,t){if(!e||e.startsWith("/")||e.includes("\\")||e.split("/").some(o=>o===""||o==="."||o===".."))throw new Error(`Invalid Markdown plugin ${t} path: ${e}`)}n(Ye,"assertSafePluginResourcePath");async function Ko(e,t,o){await Ne(t,{recursive:!0});for(let r of await Ho(e,{withFileTypes:!0})){if(r.isSymbolicLink())throw new Error(`Markdown plugin resources must not use symbolic links: ${U(e,r.name)}`);let a=U(e,r.name),s=U(t,r.name);r.isDirectory()?await Ko(a,s,o):r.isFile()&&(!o.extensions||o.extensions.some(l=>r.name.endsWith(l)))&&await ce(a,s)}}n(Ko,"copyPluginResourceDirectory");async function Sn(e,t){let o=Ze.resolve(t.module);if(await ce(o,U(e,`${t.id}.js`)),!t.resources?.length)return;let r=U(e,t.id),a=zo(o);for(let s of t.resources){Ye(s.output,"resource output");let l=a.resolve(s.module),i=le(r,s.output);if(!re(r,i))throw new Error(`Markdown plugin resource output escapes its client directory: ${s.output}`);await Ne(de(i),{recursive:!0}),await ce(l,i);for(let c of s.directories??[]){Ye(c.source,"resource source"),Ye(c.output,"resource directory output");let d=de(l),p=le(d,c.source),f=le(r,c.output);if(!re(d,p)||!re(r,f))throw new Error(`Markdown plugin resource directory escapes its declared root: ${c.source}`);await Ko(p,f,c)}}}n(Sn,"copyMarkdownPluginClient");function me(e,t,o){e.pluginClients.forEach(r=>Uo(t,r,"client")),e.pluginStyles.forEach(r=>Uo(o,r,"style"))}n(me,"registerPluginAssets");async function Wo(e,t,o){let r=U(e,"assets/canofold-plugins");await jo(r,{recursive:!0,force:!0}),!(t.size===0&&o.size===0)&&(await Ne(r,{recursive:!0}),await Promise.all([...[...t.values()].map(a=>Sn(r,a)),...[...o.values()].map(a=>ce(Ze.resolve(a.module),U(r,`${a.id}.css`)))]))}n(Wo,"copyMarkdownPluginAssets");async function et(e,t){try{await qo(e,t,{recursive:!0,force:!0})}catch(o){throw new Error(`Failed to copy required KaTeX fonts from ${e}`,{cause:o})}}n(et,"copyRequiredMathFonts");async function tt(e,t){let o=[];async function r(s,l){for(let i of await Ho(s,{withFileTypes:!0})){if(i.isSymbolicLink())throw new Error(`Public assets must not be symbolic links: ${K.join(l,i.name)}`);let c=U(s,i.name),d=K.join(l,i.name);i.isDirectory()?await r(c,d):i.isFile()&&o.push({source:c,outputPath:d})}}n(r,"walk");let a=new Set(t.versions.items.map(s=>s.docsDir));for(let s of a){let l=U(V(e,s,`public directory for ${s}`),"public");try{await r(l,"")}catch(i){if(i.code!=="ENOENT")throw i}}return o}n(tt,"collectPublicAssets");function Vo(e){let t=kn(e);return[...new Set([...t.images,...t.links])].map(o=>(o.split("#")[0]??"").split("?")[0]??"").filter(o=>o&&!o.startsWith("/")&&!/^(?:[a-z][a-z\d+.-]*:|\/\/|#)/i.test(o)&&!/\.mdx?$/i.test(o))}n(Vo,"relativeAssetTargets");function Jo(e){return e.split("/").map(t=>{let o=decodeURIComponent(t);if(o.includes("/")||o.includes("\\"))throw new Error(`Invalid relative asset path: ${e}`);return o}).join("/")}n(Jo,"decodeRelativeUrlPath");async function ot(e,t){let o=[];for(let r of t){let a=V(e,r.docsDir,"docsDir"),s=await Bo(a);for(let l of Vo(r.body)){let i=Jo(l),c=le(de(r.sourcePath),i),d;try{d=await yn(c)}catch(u){if(u.code==="ENOENT")continue;throw u}if(d.isSymbolicLink())throw new Error(`Relative assets must not use symbolic links: ${l}`);if(!d.isFile())continue;let p=await Bo(c),f=le(s,bn(a,c));if(F(p)!==F(f))throw new Error(`Relative assets must not use symbolic links: ${l}`);if(!re(s,p))throw new Error(`Relative asset must stay inside docsDir: ${l}`);o.push({source:p,outputPath:K.resolve("/",K.dirname(r.outputPath),i).slice(1)})}}return o}n(ot,"collectPageAssets");function ue(e){let t=new Set;for(let o of e){if("assetOutputPaths"in o&&o.assetOutputPaths){o.assetOutputPaths.forEach(r=>t.add(r));continue}if("body"in o)for(let r of Vo(o.body)){let a=Jo(r);t.add(K.resolve("/",K.dirname(o.outputPath),a).slice(1))}}return t}n(ue,"pageAssetOutputPathsFor");async function Xo(e,t,o,r){if(!t.length)return;let a=new Set([...ue(o),...r].map(F)),s=[...ue(t)].filter(l=>!a.has(F(l)));await Promise.all(s.map(l=>jo(R(e,l,`stale page asset ${l}`),{force:!0})))}n(Xo,"removeStalePageAssets");async function rt(e,t,o){let r=new Set([...o].map(F)),a=n(d=>{let p=[],f=K.dirname(d);for(;f!==".";)p.push(f),f=K.dirname(f);return p},"ancestorsOf"),s=new Set([...r].flatMap(d=>a(d))),l=Mt.map(F),i=new Map,c=new Set;for(let d of t){let p=F(d.outputPath),f=a(p);if(r.has(p)||s.has(p)||f.some(y=>r.has(y))||l.some(y=>p===y||p.startsWith(`${y}/`)))throw new Error(`Static asset conflicts with generated output: ${d.outputPath}`);let u=i.get(p);if(u&&u!==d.source){let[y,S]=await Promise.all([Qe(u),Qe(d.source)]);if(!y.equals(S))throw new Error(`Multiple static assets target the same output path: ${d.outputPath}`)}if(u)continue;if(c.has(p)||f.some(y=>i.has(y)))throw new Error(`Multiple static assets target overlapping output paths: ${d.outputPath}`);i.set(p,d.source);for(let y of f)c.add(y);let w=R(e,d.outputPath,`static asset ${d.outputPath}`);await Ne(de(w),{recursive:!0}),await ce(d.source,w)}}n(rt,"copyStaticAssets");async function Yo(e,t){return t.length?(await Promise.all(t.map(async r=>{let a=await Qe(V(e,r,"styles entry"),"utf8");return`/* User style: ${r} */
|
|
658
658
|
${a}`}))).join(`
|
|
659
|
-
`):""}n(Yo,"readCustomStyles");import{Fragment as Rn,jsx as st,jsxs as Tn}from"react/jsx-runtime";var Dn={behaviors:[],math:!1,pluginClients:[],pluginStyles:[]};function Nn(e,t){let o=new Map,r=new Map;me(e,o,r);for(let a of t)me({behaviors:[],math:a.assets?.math===!0,pluginClients:[...a.assets?.clients??[]],pluginStyles:[...a.assets?.styles??[]]},o,r);return{behaviors:e.behaviors,math:e.math||t.some(a=>a.assets?.math===!0),pluginClients:[...o.values()],pluginStyles:[...r.values()]}}n(Nn,"playgroundMarkdownAssets");function An(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}n(An,"jsonForInlineScript");function Ln(e,t){let o=t.defaultLocale,r=_e(o,e.i18n.messages),a=H(e.title),s=H(h(e,e.theme.favicon??we.favicon)),l=H(h(e,"/assets/canofold.css")),i=t.versions.find(
|
|
659
|
+
`):""}n(Yo,"readCustomStyles");import{Fragment as Rn,jsx as st,jsxs as Tn}from"react/jsx-runtime";var Dn={behaviors:[],math:!1,pluginClients:[],pluginStyles:[]};function Nn(e,t){let o=new Map,r=new Map;me(e,o,r);for(let a of t)me({behaviors:[],math:a.assets?.math===!0,pluginClients:[...a.assets?.clients??[]],pluginStyles:[...a.assets?.styles??[]]},o,r);return{behaviors:e.behaviors,math:e.math||t.some(a=>a.assets?.math===!0),pluginClients:[...o.values()],pluginStyles:[...r.values()]}}n(Nn,"playgroundMarkdownAssets");function An(e){return JSON.stringify(e).replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}n(An,"jsonForInlineScript");function Ln(e,t){let o=t.defaultLocale,r=_e(o,e.i18n.messages),a=H(e.title),s=H(h(e,e.theme.favicon??we.favicon)),l=H(h(e,"/assets/canofold.css")),i=t.versions.find(S=>S.id===t.currentVersion),c=h(e,z(o,t.defaultLocale,i?.base??"/")),d=H(c),p=H(r.title),f=H(r.description),u=H(r.home),w=t.versions.flatMap(S=>t.locales.map(x=>{let b=_e(x,e.i18n.messages),m=h(e,z(x,t.defaultLocale,S.base));return{locale:x,prefix:m,home:m,title:b.title,description:b.description,homeLabel:b.home,documentTitle:`404 - ${b.title} | ${e.title}`}})).sort((S,x)=>x.prefix.length-S.prefix.length),y=`(function(){var p=${An(w)},n=location.pathname,m=p.find(function(x){var r=x.prefix.replace(//$/,'');return n===r||n.indexOf(x.prefix)===0});if(!m)return;document.documentElement.lang=m.locale;document.title=m.documentTitle;var t=document.getElementById('canofold-404-title'),d=document.getElementById('canofold-404-description'),h=document.getElementById('canofold-404-home');if(t)t.textContent=m.title;if(d)d.textContent=m.description;if(h){h.textContent=m.homeLabel;h.setAttribute('href',m.home)}})()`;return`<!doctype html><html lang="${H(o)}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>404 - ${p} | ${a}</title><meta name="robots" content="noindex"><link rel="icon" href="${s}"><link rel="stylesheet" href="${l}"><script>${xe}</script></head><body><div class="cf-not-found"><span class="cf-not-found-code">404</span><h1 id="canofold-404-title" class="cf-not-found-title">${p}</h1><p id="canofold-404-description" class="cf-not-found-desc">${f}</p><a id="canofold-404-home" href="${d}" class="cf-not-found-link">${u}</a></div><script>${y}</script></body></html>`}n(Ln,"render404Page");async function er({cwd:e,config:t,graph:o,pages:r=o.pages,previousPages:a=[],renderer:s=Mn(),writeSharedAssets:l=!0,demoManifest:i}){let c=$(e,t.outputDir),d=Dt(t,o),p=o.pages.some(m=>m.frontmatter.layout==="playground"),f=[];if(await at(X(c,"assets"),{recursive:!0}),l){let m=p&&t.markdown.plugins.some(q=>q.assets?.math===!0)||o.pages.some(q=>Zo(q.body,t.markdown.plugins,W(q.relativePath)?"mdx":"markdown").math),[C,M]=await Promise.all([Xt({math:m}),Yo(e,t.styles)]);await bo(c),await Ae(X(c,"assets/canofold.css"),`${C}
|
|
660
660
|
${$o(t)}
|
|
661
661
|
${M}
|
|
662
|
-
`),await xn(Jt(),X(
|
|
662
|
+
`),await xn(Jt(),X(c,"assets/file-icons"),{recursive:!0,force:!0});let E=X(c,"assets/fonts");if(m){let q=Vt();await et(q,E)}else await nt(E,{recursive:!0,force:!0});t.search.enabled&&await Ao(c),p?await Io(e,c,t):await nt(X(c,"assets/canofold-playground"),{recursive:!0,force:!0});let[Y,ye]=await Promise.all([tt(e,t),ot(e,o.pages)]);f=Y,await rt(c,[...f,...ye],d),await Ae(X(c,"404.html"),Ln(t,o))}else{let[m,C]=await Promise.all([tt(e,t),ot(e,r)]);f=m,await rt(c,C,d)}let u=l?r:o.pages,w=new Map,y=new Map,S=new Set;u.forEach(m=>{let C=Zo(m.body,t.markdown.plugins,W(m.relativePath)?"mdx":"markdown");me(C,w,y),C.behaviors.forEach(M=>S.add(M))});let x=8,b=Oo(t.basePath);await O(r,x,async m=>{let C=m.routePath===z(m.locale,o.defaultLocale,m.versionBase),M,E=Dn,Y=_o(m.locale),ye=m.demos.length>0&&i?Fo({page:m,manifest:i,labels:Y}):void 0;if(m.demos.length>0&&!i)throw new Error(`No prepared demo manifest is available for ${m.sourceRelativePath}`);let q={...t.markdown,plugins:ye?[...t.markdown.plugins,ye]:t.markdown.plugins,locale:m.locale,labels:{...Pe(m.locale,t.i18n.messages),...t.markdown.labels}};if(W(m.relativePath)){let Q={...q,html:"trusted"},gt=await No(m.body,m.sourcePath,e,Q,void 0,b,s);M=gt.content,E=gt.assets}else{let Q=await s.render(m.body,{markdown:q,as:"article",urlTransform:b});M=Q.content,E=Q.assets}m.frontmatter.layout==="playground"&&(E=Nn(E,t.markdown.plugins)),me(E,w,y),E.behaviors.forEach(Q=>S.add(Q));let yr=!!(m.frontmatter.hero||m.frontmatter.features?.length),wr=m.body.trim().length>0,br=C?Tn(Rn,{children:[yr?st(Qt,{page:m,config:t}):null,wr?M:null]}):M??st("article",{className:"cf-content"}),pt=R(c,m.markdownOutputPath,`page ${m.sourceRelativePath}`),ft=m.transformedSource,kr="<!doctype html>"+Cn(st(go,{config:t,graph:o,page:m,home:C,markdownAssets:E,rawSource:ft,markdownClientUrl:m.demos.length>0?i?.clientUrl:i?.markdownClientUrl,demoClientUrl:m.demos.length>0?i?.clientUrl:void 0,demoStyleUrls:m.demos.length>0?i?.styleUrls:void 0,children:br})),ht=R(c,m.outputPath,`page ${m.sourceRelativePath}`);await at(Qo(ht),{recursive:!0}),await Ae(ht,kr),await at(Qo(pt),{recursive:!0}),await Ae(pt,ft)}),S.size>0&&!i?.markdownClientUrl?await Go(c):await nt(X(c,"assets/canofold-markdown"),{recursive:!0,force:!0}),await Wo(c,w,y),await Xo(c,a,o.pages,[...d,...f.map(m=>m.outputPath)])}n(er,"renderSite");import{writeFile as En}from"fs/promises";import{join as $n}from"path";async function tr(e,t){let o=t.seo.robots==="disallow",r=J(t,"/sitemap.xml");await En($n($(e,t.outputDir),"robots.txt"),o?`User-agent: *
|
|
663
663
|
Disallow: /
|
|
664
664
|
`:`User-agent: *
|
|
665
665
|
Allow: /
|
|
@@ -669,5 +669,5 @@ ${r?`Sitemap: ${r}
|
|
|
669
669
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
670
670
|
${a}
|
|
671
671
|
</urlset>
|
|
672
|
-
`)}n(or,"writeSitemap");import{createMarkdownRenderer as rs}from"@canofold/markdown/server";import{satisfies as as,valid as ns,validRange as ss}from"semver";function rr({current:e,previous:t,outputExists:o,outputValid:r=o,forceClean:a=!1}){if(a)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:[],reason:"forced"};if(!t)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:[],reason:"missing-manifest"};if(!o)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:Object.keys(t.pages).filter(i=>!e.pages[i]),reason:"missing-output"};if(!r)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:Object.keys(t.pages).filter(i=>!e.pages[i]),reason:"invalid-output"};if(e.buildFingerprint===t.buildFingerprint)return{mode:"cached",changedPageKeys:[],removedPageKeys:[],reason:"unchanged-inputs"};if(e.sharedFingerprint!==t.sharedFingerprint)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:Object.keys(t.pages).filter(i=>!e.pages[i]),reason:"shared-inputs-changed"};let s=Object.entries(e.pages).filter(([i,d])=>t.pages[i]?.fingerprint!==d.fingerprint).map(([i])=>i),l=Object.keys(t.pages).filter(i=>!e.pages[i]);return s.length===0&&l.length===0?{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:[],reason:"unclassified-inputs-changed"}:{mode:"incremental",changedPageKeys:s,removedPageKeys:l,reason:"page-inputs-changed"}}n(rr,"planBuild");import{copyFile as Fn,mkdir as _n,readFile as ar,readdir as Bn,stat as Un}from"fs/promises";import{dirname as qn,relative as Hn,resolve as it}from"path";var lt=16;function nr(e,t){return Hn(it(e),it(t)).replace(/\\/g,"/")}n(nr,"portablePath");async function sr(e){async function t(o){let r=await Bn(o,{withFileTypes:!0});return(await Promise.all(r.map(async a=>{let s=it(o,a.name);if(a.isSymbolicLink())throw new Error(`Generated output must not be a symbolic link: ${s}`);return a.isDirectory()?t(s):a.isFile()?[s]:[]}))).flat()}return n(t,"walk"),t(e)}n(sr,"outputFilesUnder");async function ir(e){let t=(await sr(e)).sort(),o=await O(t,lt,async r=>{let a=await ar(r);return[nr(e,r),{fingerprint:B(a),size:a.byteLength}]});return Object.fromEntries(o)}n(ir,"captureBuildOutputs");async function lr(e,t){try{let o=Object.keys(t).sort(),r=(await sr(e)).map(s=>nr(e,s)).sort();return r.length!==o.length||r.some((s,l)=>s!==o[l])?!1:(await O(Object.entries(t),lt,async([s,l])=>{let i=R(e,s,`cached output ${s}`),d=await Un(i);return!d.isFile()||d.size!==l.size?!1:B(await ar(i))===l.fingerprint})).every(Boolean)}catch(o){if(o.code==="ENOENT")return!1;throw o}}n(lr,"verifyBuildOutputs");async function cr(e,t,o){await O(Object.keys(o),lt,async r=>{let a=R(e,r,`cached output ${r}`),s=R(t,r,`staged output ${r}`);await _n(qn(s),{recursive:!0}),await Fn(a,s)})}n(cr,"copyBuildOutputs");import{readFile as Le,readdir as zn}from"fs/promises";import{dirname as dr,join as te,relative as Gn,resolve as he}from"path";import{fileURLToPath as ct}from"url";import{detectMarkdownAssets as Kn}from"@canofold/markdown/server/analyze";var pe=16;function Re(e,t){return Gn(he(e),he(t)).replace(/\\/g,"/")}n(Re,"portablePath");function fe(e){return JSON.stringify([e.version,e.sourceRelativePath])}n(fe,"buildPageKey");async function ur(e){async function t(o){let r=await zn(o,{withFileTypes:!0});return(await Promise.all(r.map(async a=>{let s=te(o,a.name);if(a.isDirectory())return t(s);if(a.isSymbolicLink())throw new Error(`Documentation support files must not use symbolic links: ${Re(e,s)}`);return!a.isFile()||/\.mdx?$/i.test(a.name)?[]:[s]}))).flat()}return n(t,"walk"),t(e)}n(ur,"supportFilesUnder");async function mr(e){let t=[...new Set(e.map(r=>he(r)))].sort(),o=(await O(t,pe,async r=>{try{return{path:r,fingerprint:B(await Le(r))}}catch(a){if(!a||typeof a!="object"||!("code"in a)||a.code!=="ENOENT")throw a;return null}})).filter(r=>r!==null);return G(o)}n(mr,"fingerprintExistingFiles");async function dt(e){try{return await ur(e)}catch(t){if(t&&typeof t=="object"&&"code"in t&&t.code==="ENOENT")return[];throw t}}n(dt,"filesUnderIfPresent");async function Wn(){let e=dr(ct(import.meta.url)),t=[];try{let o=ct(import.meta.resolve("@canofold/markdown/theme")),r=dr(o);t.push(te(r,"tokens.css"),te(r,"styles.css"),te(r,"theme.css"),te(r,"base.css"),o)}catch{}return mr([...await dt(e),...await dt(te(e,"render")),...await dt(ct(new URL("../render",import.meta.url))),...t])}n(Wn,"runtimeFingerprint");async function Vn(e,t,o){let r=[...new Set(t.versions.items.map(i=>i.docsDir))].map(i=>V(e,i,"docsDir")),a=(await Promise.all(r.map(i=>ur(i)))).flat();for(let i of t.styles)a.push(V(e,i,"styles"));let s=[...new Set(a.map(i=>he(i)))].filter(i=>!o.has(i)).sort(),l=await O(s,pe,async i=>({path:Re(e,i),fingerprint:B(await Le(i))}));return G(l)}n(Vn,"supportFingerprint");function Jn(e){return{sourceRelativePath:e.sourceRelativePath,relativePath:e.relativePath,version:e.version,versionBase:e.versionBase,docsDir:e.docsDir,locale:e.locale,routePath:e.routePath,outputPath:e.outputPath,markdownOutputPath:e.markdownOutputPath,title:e.title,description:e.description,order:e.order,group:e.group,status:e.status,search:e.search,ai:e.ai,body:e.body,transformedSource:e.transformedSource,headings:e.headings,searchText:e.searchText,codeExamples:e.codeExamples,demos:e.demos,lastUpdated:e.lastUpdated,...e.previous?{previous:e.previous}:{},...e.next?{next:e.next}:{},frontmatter:e.frontmatter}}n(Jn,"serializablePage");function Xn(e,t){return{sidebar:e.sidebar[t.version]?.[t.locale]??[],nav:e.nav[t.version]?.[t.locale]??[],locales:e.locales,defaultLocale:e.defaultLocale,versions:e.versions,currentVersion:e.currentVersion}}n(Xn,"pageLayoutContext");function Yn(e){let t=e.search.provider;return{...e,demos:{setup:e.demos.setup??null,engine:e.demos.engine?{id:e.demos.engine.id,version:e.demos.engine.version??"",cacheKey:e.demos.engine.cacheKey??null}:null},markdown:{...e.markdown,plugins:e.markdown.plugins.map(o=>({name:o.name,version:o.version??"",cacheKey:o.cacheKey??null}))},search:{...e.search,provider:typeof t=="string"?t:{id:t.id,client:t.client,version:t.version??"",cacheKey:t.cacheKey??null}}}}n(Yn,"serializableConfig");async function pr(e,t,o,r=G({extensions:[]}),a,s="build"){let l=new Map;await O(o.pages,pe,async u=>{let b=W(u.relativePath)?await Mo(Ce(u.body).imports,u.sourcePath,e):[],w=await O(b,pe,async P=>({path:Re(e,P),fingerprint:B(await Le(P))}));for(let P of u.demos){let y=a?.demos[P.id];if(!y)continue;let C=y.dependencyPaths?.length?y.dependencyPaths:[y.modulePath];w.push(...await O(C,pe,async m=>({path:Re(e,m),fingerprint:B(await Le(m))})))}w.length!==0&&l.set(fe(u),[...new Map(w.map(P=>[P.path,P])).values()].sort((P,y)=>P.path.localeCompare(y.path)))});let i=new Set([...l.values()].flat().map(u=>he(e,u.path))),d=G(Yn(t)),c=G({canofoldVersion:j,runtimeFingerprint:await Wn(),configFingerprint:d,benchmarkReport:process.env.CANOFOLD_BENCHMARK_REPORT==="1",extensionFingerprint:r,math:o.pages.some(u=>Kn(u.body,t.markdown.plugins,W(u.relativePath)?"mdx":"markdown").math),playground:o.pages.some(u=>u.frontmatter.layout==="playground"),support:await Vn(e,t,i),demoDelivery:a?s:null,demoRuntime:a?{clientUrl:a.clientUrl,styleUrls:a.styleUrls??[],outputPaths:a.outputPaths??[]}:null,demoEngineDependencies:await mr(a?.dependencyPaths??[])}),p=Object.fromEntries(o.pages.map(u=>[fe(u),{fingerprint:G({page:Jn(u),localComponents:l.get(fe(u))??[],layout:Xn(o,u)}),outputPath:u.outputPath,markdownOutputPath:u.markdownOutputPath,assetOutputPaths:[...ue([u])].sort()}])),f=G({sharedFingerprint:c,pages:p});return{schemaVersion:3,canofoldVersion:j,buildFingerprint:f,sharedFingerprint:c,pages:p,outputs:{}}}n(pr,"createBuildManifest");function is(e,t){if(!ns(e))throw new Error(`Invalid Canofold version: ${e}`);if(!ss(t))throw new Error(`Invalid requiredVersion range: ${t}`);return as(e,t)}n(is,"versionSatisfies");function ls(e){if(e.requiredVersion&&!is(j,e.requiredVersion))throw new Error(`Canofold ${j} does not satisfy requiredVersion ${e.requiredVersion}`)}n(ls,"assertRequiredVersion");async function fr({cwd:e,config:t,graph:o,pages:r,previousPages:a,renderer:s,writeSharedAssets:l,extensions:i,demoManifest:d}){await er({cwd:e,config:t,graph:o,pages:r,previousPages:a,renderer:s,writeSharedAssets:l,demoManifest:d}),await Ct(e,t,o),await or(e,t,o),await tr(e,t),await Ut(e,t,o),await St(e,t,o),await i.generate($(e,t.outputDir),o.pages),process.env.CANOFOLD_BENCHMARK_REPORT==="1"&&await es(mt($(e,t.outputDir),".benchmark.json"),JSON.stringify({maxRssBytes:process.resourceUsage().maxRSS*1024}))}n(fr,"writeBuildOutputs");function gr(e){return mt(ut(e),`.${hr(e)}.backup`)}n(gr,"outputBackupRoot");async function cs(e){let t=gr(e);await Z(t)&&(await Z(e)?await ge(t,{recursive:!0,force:!0}):await Te(t,e))}n(cs,"recoverInterruptedOutputReplacement");async function ds(e,t){let o=gr(e),r=await Z(e);try{r&&await Te(e,o),await Te(t,e)}catch(a){throw r&&await Z(o)&&(await ge(e,{recursive:!0,force:!0}),await Te(o,e)),a}await ge(o,{recursive:!0,force:!0})}n(ds,"replaceOutputDirectory");async function us(e,t,o,r){let a=$(e,t.outputDir),s=new Set(r.flatMap(l=>[l.outputPath,l.markdownOutputPath]).map(F));await Promise.all(o.flatMap(l=>[l.outputPath,l.markdownOutputPath].filter(i=>!s.has(F(i))).map(i=>ge(R(a,i,`removed page output ${i}`),{force:!0}))))}n(us,"removeDeletedPageOutputs");async function ms(e,t,o,r,a){await cs(r);let s=await $t(e.cwd,At(e.cwd),o.extensions),l=await Pt(e.cwd,o,s),i=await be({cwd:e.cwd,config:o,graph:l,mode:e.demoMode==="dev"?"dev":"analyze"}),d=await pr(e.cwd,o,l,s.fingerprint,i,e.demoMode==="dev"?"dev":"build"),c=e.noCache?void 0:await Lt(t),p=await Z(r),f=p&&c?await lr(r,c.outputs):p,u=rr({current:d,previous:c,outputExists:p,outputValid:f,forceClean:e.forceClean||e.noCache}),b=e.renderer??rs();if(u.mode==="cached")return oe(`Built ${o.outputDir} (cache hit)`),{config:o,graph:l,incremental:!1,cached:!0,mode:u.mode,changedPages:[],partialReload:!1,reason:u.reason,...i?{demoManifest:i}:{}};let w=new Map(l.pages.map(x=>[fe(x),x])),P=u.changedPageKeys.flatMap(x=>{let M=w.get(x);return M?[M]:[]}),y=mt(ut(r),`.${hr(r)}.tmp-${Qn()}`),C={...o,outputDir:ts(os(e.cwd),y)};await Zn(ut(y),{recursive:!0});try{let x;if(u.mode==="incremental"){await cr(r,y,c?.outputs??{}),x=e.demoMode==="dev"?i:await be({cwd:e.cwd,config:C,graph:l,mode:"build"}),await fr({cwd:e.cwd,config:C,graph:l,pages:P,previousPages:c?Object.values(c.pages):[],renderer:b,writeSharedAssets:!1,extensions:s,demoManifest:x});let M=u.removedPageKeys.flatMap(E=>{let Y=c?.pages[E];return Y?[Y]:[]});await us(e.cwd,C,M,Object.values(d.pages))}else x=e.demoMode==="dev"?i:await be({cwd:e.cwd,config:C,graph:l,mode:"build"}),b.clear(),await fr({cwd:e.cwd,config:C,graph:l,pages:l.pages,renderer:b,writeSharedAssets:!0,extensions:s,demoManifest:x});await a(),await ds(r,y)}finally{await ge(y,{recursive:!0,force:!0})}let m={...d,outputs:await ir(r)};return await a(),await Rt(t,m),oe(`Built ${o.outputDir} (${u.mode}: ${u.reason})`),{config:o,graph:l,incremental:u.mode==="incremental",cached:!1,mode:u.mode,changedPages:[...new Set(P.map(x=>x.sourceRelativePath))],partialReload:u.mode==="incremental"&&u.changedPageKeys.length===1&&u.removedPageKeys.length===0&&c?.pages[u.changedPageKeys[0]??""]?.outputPath===d.pages[u.changedPageKeys[0]??""]?.outputPath,reason:u.reason,...i?{demoManifest:i}:{}}}n(ms,"runBuildLocked");async function od(e){let t=Nt(e.cwd);await yt(e.cwd,t,"build cache");let o=await kt(e.cwd);ls(o);let r=await Et(e.cwd,o,t);return Tt(t,a=>ms(e,t,o,r,a))}n(od,"runBuild");export{is as a,od as b};
|
|
673
|
-
//# sourceMappingURL=chunk-
|
|
672
|
+
`)}n(or,"writeSitemap");import{createMarkdownRenderer as rs}from"@canofold/markdown/server";import{satisfies as as,valid as ns,validRange as ss}from"semver";function rr({current:e,previous:t,outputExists:o,outputValid:r=o,forceClean:a=!1}){if(a)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:[],reason:"forced"};if(!t)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:[],reason:"missing-manifest"};if(!o)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:Object.keys(t.pages).filter(i=>!e.pages[i]),reason:"missing-output"};if(!r)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:Object.keys(t.pages).filter(i=>!e.pages[i]),reason:"invalid-output"};if(e.buildFingerprint===t.buildFingerprint)return{mode:"cached",changedPageKeys:[],removedPageKeys:[],reason:"unchanged-inputs"};if(e.sharedFingerprint!==t.sharedFingerprint)return{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:Object.keys(t.pages).filter(i=>!e.pages[i]),reason:"shared-inputs-changed"};let s=Object.entries(e.pages).filter(([i,c])=>t.pages[i]?.fingerprint!==c.fingerprint).map(([i])=>i),l=Object.keys(t.pages).filter(i=>!e.pages[i]);return s.length===0&&l.length===0?{mode:"clean",changedPageKeys:Object.keys(e.pages),removedPageKeys:[],reason:"unclassified-inputs-changed"}:{mode:"incremental",changedPageKeys:s,removedPageKeys:l,reason:"page-inputs-changed"}}n(rr,"planBuild");import{copyFile as Fn,mkdir as _n,readFile as ar,readdir as Bn,stat as Un}from"fs/promises";import{dirname as qn,relative as Hn,resolve as it}from"path";var lt=16;function nr(e,t){return Hn(it(e),it(t)).replace(/\\/g,"/")}n(nr,"portablePath");async function sr(e){async function t(o){let r=await Bn(o,{withFileTypes:!0});return(await Promise.all(r.map(async a=>{let s=it(o,a.name);if(a.isSymbolicLink())throw new Error(`Generated output must not be a symbolic link: ${s}`);return a.isDirectory()?t(s):a.isFile()?[s]:[]}))).flat()}return n(t,"walk"),t(e)}n(sr,"outputFilesUnder");async function ir(e){let t=(await sr(e)).sort(),o=await O(t,lt,async r=>{let a=await ar(r);return[nr(e,r),{fingerprint:B(a),size:a.byteLength}]});return Object.fromEntries(o)}n(ir,"captureBuildOutputs");async function lr(e,t){try{let o=Object.keys(t).sort(),r=(await sr(e)).map(s=>nr(e,s)).sort();return r.length!==o.length||r.some((s,l)=>s!==o[l])?!1:(await O(Object.entries(t),lt,async([s,l])=>{let i=R(e,s,`cached output ${s}`),c=await Un(i);return!c.isFile()||c.size!==l.size?!1:B(await ar(i))===l.fingerprint})).every(Boolean)}catch(o){if(o.code==="ENOENT")return!1;throw o}}n(lr,"verifyBuildOutputs");async function cr(e,t,o){await O(Object.keys(o),lt,async r=>{let a=R(e,r,`cached output ${r}`),s=R(t,r,`staged output ${r}`);await _n(qn(s),{recursive:!0}),await Fn(a,s)})}n(cr,"copyBuildOutputs");import{readFile as Le,readdir as zn}from"fs/promises";import{dirname as dr,join as te,relative as Gn,resolve as he}from"path";import{fileURLToPath as ct}from"url";import{detectMarkdownAssets as Kn}from"@canofold/markdown/server/analyze";var pe=16;function Re(e,t){return Gn(he(e),he(t)).replace(/\\/g,"/")}n(Re,"portablePath");function fe(e){return JSON.stringify([e.version,e.sourceRelativePath])}n(fe,"buildPageKey");async function ur(e){async function t(o){let r=await zn(o,{withFileTypes:!0});return(await Promise.all(r.map(async a=>{let s=te(o,a.name);if(a.isDirectory())return t(s);if(a.isSymbolicLink())throw new Error(`Documentation support files must not use symbolic links: ${Re(e,s)}`);return!a.isFile()||/\.mdx?$/i.test(a.name)?[]:[s]}))).flat()}return n(t,"walk"),t(e)}n(ur,"supportFilesUnder");async function mr(e){let t=[...new Set(e.map(r=>he(r)))].sort(),o=(await O(t,pe,async r=>{try{return{path:r,fingerprint:B(await Le(r))}}catch(a){if(!a||typeof a!="object"||!("code"in a)||a.code!=="ENOENT")throw a;return null}})).filter(r=>r!==null);return G(o)}n(mr,"fingerprintExistingFiles");async function dt(e){try{return await ur(e)}catch(t){if(t&&typeof t=="object"&&"code"in t&&t.code==="ENOENT")return[];throw t}}n(dt,"filesUnderIfPresent");async function Wn(){let e=dr(ct(import.meta.url)),t=[];try{let o=ct(import.meta.resolve("@canofold/markdown/theme")),r=dr(o);t.push(te(r,"tokens.css"),te(r,"styles.css"),te(r,"theme.css"),te(r,"base.css"),o)}catch{}return mr([...await dt(e),...await dt(te(e,"render")),...await dt(ct(new URL("../render",import.meta.url))),...t])}n(Wn,"runtimeFingerprint");async function Vn(e,t,o){let r=[...new Set(t.versions.items.map(i=>i.docsDir))].map(i=>V(e,i,"docsDir")),a=(await Promise.all(r.map(i=>ur(i)))).flat();for(let i of t.styles)a.push(V(e,i,"styles"));let s=[...new Set(a.map(i=>he(i)))].filter(i=>!o.has(i)).sort(),l=await O(s,pe,async i=>({path:Re(e,i),fingerprint:B(await Le(i))}));return G(l)}n(Vn,"supportFingerprint");function Jn(e){return{sourceRelativePath:e.sourceRelativePath,relativePath:e.relativePath,version:e.version,versionBase:e.versionBase,docsDir:e.docsDir,locale:e.locale,routePath:e.routePath,outputPath:e.outputPath,markdownOutputPath:e.markdownOutputPath,title:e.title,description:e.description,order:e.order,group:e.group,status:e.status,search:e.search,ai:e.ai,body:e.body,transformedSource:e.transformedSource,headings:e.headings,searchText:e.searchText,codeExamples:e.codeExamples,demos:e.demos,lastUpdated:e.lastUpdated,...e.previous?{previous:e.previous}:{},...e.next?{next:e.next}:{},frontmatter:e.frontmatter}}n(Jn,"serializablePage");function Xn(e,t){return{sidebar:e.sidebar[t.version]?.[t.locale]??[],nav:e.nav[t.version]?.[t.locale]??[],locales:e.locales,defaultLocale:e.defaultLocale,versions:e.versions,currentVersion:e.currentVersion}}n(Xn,"pageLayoutContext");function Yn(e){let t=e.search.provider;return{...e,demos:{setup:e.demos.setup??null,engine:e.demos.engine?{id:e.demos.engine.id,version:e.demos.engine.version??"",cacheKey:e.demos.engine.cacheKey??null}:null},markdown:{...e.markdown,plugins:e.markdown.plugins.map(o=>({name:o.name,version:o.version??"",cacheKey:o.cacheKey??null}))},search:{...e.search,provider:typeof t=="string"?t:{id:t.id,client:t.client,version:t.version??"",cacheKey:t.cacheKey??null}}}}n(Yn,"serializableConfig");async function pr(e,t,o,r=G({extensions:[]}),a,s="build"){let l=new Map;await O(o.pages,pe,async u=>{let w=W(u.relativePath)?await Mo(Ce(u.body).imports,u.sourcePath,e):[],y=await O(w,pe,async S=>({path:Re(e,S),fingerprint:B(await Le(S))}));for(let S of u.demos){let x=a?.demos[S.id];if(!x)continue;let b=x.dependencyPaths?.length?x.dependencyPaths:[x.modulePath];y.push(...await O(b,pe,async m=>({path:Re(e,m),fingerprint:B(await Le(m))})))}y.length!==0&&l.set(fe(u),[...new Map(y.map(S=>[S.path,S])).values()].sort((S,x)=>S.path.localeCompare(x.path)))});let i=new Set([...l.values()].flat().map(u=>he(e,u.path))),c=G(Yn(t)),d=G({canofoldVersion:j,runtimeFingerprint:await Wn(),configFingerprint:c,benchmarkReport:process.env.CANOFOLD_BENCHMARK_REPORT==="1",extensionFingerprint:r,math:o.pages.some(u=>Kn(u.body,t.markdown.plugins,W(u.relativePath)?"mdx":"markdown").math),playground:o.pages.some(u=>u.frontmatter.layout==="playground"),support:await Vn(e,t,i),demoDelivery:a?s:null,demoRuntime:a?{clientUrl:a.clientUrl,markdownClientUrl:a.markdownClientUrl??null,styleUrls:a.styleUrls??[],outputPaths:a.outputPaths??[]}:null,demoEngineDependencies:await mr(a?.dependencyPaths??[])}),p=Object.fromEntries(o.pages.map(u=>[fe(u),{fingerprint:G({page:Jn(u),localComponents:l.get(fe(u))??[],layout:Xn(o,u)}),outputPath:u.outputPath,markdownOutputPath:u.markdownOutputPath,assetOutputPaths:[...ue([u])].sort()}])),f=G({sharedFingerprint:d,pages:p});return{schemaVersion:3,canofoldVersion:j,buildFingerprint:f,sharedFingerprint:d,pages:p,outputs:{}}}n(pr,"createBuildManifest");function is(e,t){if(!ns(e))throw new Error(`Invalid Canofold version: ${e}`);if(!ss(t))throw new Error(`Invalid requiredVersion range: ${t}`);return as(e,t)}n(is,"versionSatisfies");function ls(e){if(e.requiredVersion&&!is(j,e.requiredVersion))throw new Error(`Canofold ${j} does not satisfy requiredVersion ${e.requiredVersion}`)}n(ls,"assertRequiredVersion");async function fr({cwd:e,config:t,graph:o,pages:r,previousPages:a,renderer:s,writeSharedAssets:l,extensions:i,demoManifest:c}){await er({cwd:e,config:t,graph:o,pages:r,previousPages:a,renderer:s,writeSharedAssets:l,demoManifest:c}),await Ct(e,t,o),await or(e,t,o),await tr(e,t),await Ut(e,t,o),await St(e,t,o),await i.generate($(e,t.outputDir),o.pages),process.env.CANOFOLD_BENCHMARK_REPORT==="1"&&await es(mt($(e,t.outputDir),".benchmark.json"),JSON.stringify({maxRssBytes:process.resourceUsage().maxRSS*1024}))}n(fr,"writeBuildOutputs");function gr(e){return mt(ut(e),`.${hr(e)}.backup`)}n(gr,"outputBackupRoot");async function cs(e){let t=gr(e);await Z(t)&&(await Z(e)?await ge(t,{recursive:!0,force:!0}):await Te(t,e))}n(cs,"recoverInterruptedOutputReplacement");async function ds(e,t){let o=gr(e),r=await Z(e);try{r&&await Te(e,o),await Te(t,e)}catch(a){throw r&&await Z(o)&&(await ge(e,{recursive:!0,force:!0}),await Te(o,e)),a}await ge(o,{recursive:!0,force:!0})}n(ds,"replaceOutputDirectory");async function us(e,t,o,r){let a=$(e,t.outputDir),s=new Set(r.flatMap(l=>[l.outputPath,l.markdownOutputPath]).map(F));await Promise.all(o.flatMap(l=>[l.outputPath,l.markdownOutputPath].filter(i=>!s.has(F(i))).map(i=>ge(R(a,i,`removed page output ${i}`),{force:!0}))))}n(us,"removeDeletedPageOutputs");async function ms(e,t,o,r,a){await cs(r);let s=await $t(e.cwd,At(e.cwd),o.extensions),l=await Pt(e.cwd,o,s),i=await be({cwd:e.cwd,config:o,graph:l,mode:e.demoMode==="dev"?"dev":"analyze",server:e.demoServer}),c=await pr(e.cwd,o,l,s.fingerprint,i,e.demoMode==="dev"?"dev":"build"),d=e.noCache?void 0:await Lt(t),p=await Z(r),f=p&&d?await lr(r,d.outputs):p,u=rr({current:c,previous:d,outputExists:p,outputValid:f,forceClean:e.forceClean||e.noCache}),w=e.renderer??rs();if(u.mode==="cached")return oe(`Built ${o.outputDir} (cache hit)`),{config:o,graph:l,incremental:!1,cached:!0,mode:u.mode,changedPages:[],partialReload:!1,reason:u.reason,...i?{demoManifest:i}:{}};let y=new Map(l.pages.map(C=>[fe(C),C])),S=u.changedPageKeys.flatMap(C=>{let M=y.get(C);return M?[M]:[]}),x=mt(ut(r),`.${hr(r)}.tmp-${Qn()}`),b={...o,outputDir:ts(os(e.cwd),x)};await Zn(ut(x),{recursive:!0});try{let C;if(u.mode==="incremental"){await cr(r,x,d?.outputs??{}),C=e.demoMode==="dev"?i:await be({cwd:e.cwd,config:b,graph:l,mode:"build",server:e.demoServer}),await fr({cwd:e.cwd,config:b,graph:l,pages:S,previousPages:d?Object.values(d.pages):[],renderer:w,writeSharedAssets:!1,extensions:s,demoManifest:C});let M=u.removedPageKeys.flatMap(E=>{let Y=d?.pages[E];return Y?[Y]:[]});await us(e.cwd,b,M,Object.values(c.pages))}else C=e.demoMode==="dev"?i:await be({cwd:e.cwd,config:b,graph:l,mode:"build",server:e.demoServer}),w.clear(),await fr({cwd:e.cwd,config:b,graph:l,pages:l.pages,renderer:w,writeSharedAssets:!0,extensions:s,demoManifest:C});await a(),await ds(r,x)}finally{await ge(x,{recursive:!0,force:!0})}let m={...c,outputs:await ir(r)};return await a(),await Rt(t,m),oe(`Built ${o.outputDir} (${u.mode}: ${u.reason})`),{config:o,graph:l,incremental:u.mode==="incremental",cached:!1,mode:u.mode,changedPages:[...new Set(S.map(C=>C.sourceRelativePath))],partialReload:u.mode==="incremental"&&u.changedPageKeys.length===1&&u.removedPageKeys.length===0&&d?.pages[u.changedPageKeys[0]??""]?.outputPath===c.pages[u.changedPageKeys[0]??""]?.outputPath,reason:u.reason,...i?{demoManifest:i}:{}}}n(ms,"runBuildLocked");async function od(e){let t=Nt(e.cwd);await yt(e.cwd,t,"build cache");let o=await kt(e.cwd);ls(o);let r=await Et(e.cwd,o,t);return Tt(t,a=>ms(e,t,o,r,a))}n(od,"runBuild");export{is as a,od as b};
|
|
673
|
+
//# sourceMappingURL=chunk-VDRRW4FW.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as s,b as f,e as p,f as l}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=clean-
|
|
1
|
+
import{a as s,b as f,e as p,f as l}from"./chunk-DH7K2QL6.js";import{l as m}from"./chunk-VMPJIE5E.js";import{a as n}from"./chunk-M6T5RSNJ.js";import"./chunk-5WXLNJTZ.js";import"./chunk-EAYVCA3Z.js";import"./chunk-JK7ZNBUA.js";import{a as u}from"./chunk-AYDF3IFZ.js";import{readdir as R,rm as o}from"fs/promises";import{basename as h,dirname as g,join as b}from"path";async function x({cwd:t}){let i=await m(t),r=s(t),a=await l(t,i,r);await p(r,async()=>{let c=g(a),d=h(a).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),w=new RegExp(`^\\.${d}\\.(?:backup|(?:tmp|backup)-[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$`,"i"),v=await R(c,{withFileTypes:!0}).catch(e=>{if(e.code==="ENOENT")return[];throw e});await Promise.all(v.filter(e=>w.test(e.name)).map(e=>o(b(c,e.name),{recursive:!0,force:!0}))),await o(a,{recursive:!0,force:!0}),await o(r,{recursive:!0,force:!0}),await o(f(t),{recursive:!0,force:!0})}),n(`Removed ${i.outputDir}, .canofold/cache, and temporary or interrupted build files`)}u(x,"runClean");export{x as runClean};
|
|
2
|
+
//# sourceMappingURL=clean-5MEARYZG.js.map
|
package/dist/cli.js
CHANGED
|
@@ -13,5 +13,5 @@ Commands:
|
|
|
13
13
|
Preview .canofold/dist on a custom local port
|
|
14
14
|
check Run documentation checks
|
|
15
15
|
deploy Generate deployment guidance
|
|
16
|
-
`)}l(g,"printHelp");function a(n,o){let t=n[o];if(t!==void 0)throw new Error(`Unknown option: ${t}`)}l(a,"assertArgumentCount");async function m(n,o=process.cwd()){let t=n[0]??"help";if(t==="help"||t==="--help"||t==="-h"){a(n,1),g();return}if(t==="init"){let{runInit:r}=await import("./init-
|
|
16
|
+
`)}l(g,"printHelp");function a(n,o){let t=n[o];if(t!==void 0)throw new Error(`Unknown option: ${t}`)}l(a,"assertArgumentCount");async function m(n,o=process.cwd()){let t=n[0]??"help";if(t==="help"||t==="--help"||t==="-h"){a(n,1),g();return}if(t==="init"){let{runInit:r}=await import("./init-RU34LZ2D.js");return r({cwd:o,...h(n)})}if(t==="build"){let{runBuild:r}=await import("./build-PCXMD7VC.js");return r({cwd:o,...d(n)})}if(t==="clean"){a(n,1);let{runClean:r}=await import("./clean-5MEARYZG.js");return r({cwd:o})}if(t==="dev"){let{runDev:r}=await import("./dev-HAPAP642.js");return r({cwd:o,port:u(n)})}if(t==="preview"){let{runPreview:r}=await import("./preview-FB3HCXFC.js"),i=u(n);return r({cwd:o,port:i})}if(t==="check"){a(n,1);let{runCheck:r}=await import("./check-RNP64O3R.js");return r({cwd:o})}if(t==="deploy"){a(n,1);let{runDeploy:r}=await import("./deploy-VQKVGFX5.js");return r({cwd:o})}throw new Error(`Unknown command: ${t}`)}l(m,"runCli");m(process.argv.slice(2)).catch(n=>{f(n instanceof Error?n.message:String(n)),process.exitCode=1});
|
|
17
17
|
//# sourceMappingURL=cli.js.map
|
package/dist/demo-engine.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ interface CanofoldPreparedDemo extends CanofoldDemoReference {
|
|
|
29
29
|
}
|
|
30
30
|
interface CanofoldDemoManifest {
|
|
31
31
|
clientUrl: string;
|
|
32
|
+
/** Optional Markdown browser entry emitted by the same module graph as demos. */
|
|
33
|
+
markdownClientUrl?: string;
|
|
32
34
|
styleUrls?: string[];
|
|
33
35
|
demos: Record<string, CanofoldPreparedDemo>;
|
|
34
36
|
/** Paths relative to the site output root, used by output safety and caching. */
|
|
@@ -41,6 +43,8 @@ interface CanofoldDemoPrepareContext {
|
|
|
41
43
|
outputRoot: string;
|
|
42
44
|
basePath: string;
|
|
43
45
|
mode: 'analyze' | 'build' | 'dev';
|
|
46
|
+
/** Shared HTTP server used by the single long-lived Vite session in dev mode. */
|
|
47
|
+
server?: Server;
|
|
44
48
|
setup?: string;
|
|
45
49
|
demos: readonly CanofoldDemoReference[];
|
|
46
50
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as P}from"./chunk-GLAK57S4.js";import{b as D}from"./chunk-VDRRW4FW.js";import{a as w}from"./chunk-DH7K2QL6.js";import"./chunk-2IR2LVMS.js";import{b as S}from"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import"./chunk-VMPJIE5E.js";import{a as R,b as g}from"./chunk-M6T5RSNJ.js";import"./chunk-5WXLNJTZ.js";import"./chunk-EAYVCA3Z.js";import{c as h,e as y}from"./chunk-JK7ZNBUA.js";import{a as o}from"./chunk-AYDF3IFZ.js";import O from"chokidar";import{createMarkdownRenderer as T}from"@canofold/markdown/server";import{relative as I,resolve as k,sep as K}from"path";import{createServer as U}from"http";function B(n,m,u){let s=k(n,u),t=I(n,s).split(K);return t.includes("node_modules")||t.includes(".git")||t.includes(".canofold")||t.some(r=>/^\..+\.(?:tmp|backup)-/.test(r))?!0:h(y(n,m),s)||h(w(n),s)}o(B,"shouldIgnoreGeneratedPath");function x({build:n,reload:m,onBuildError:u=o(r=>g(r instanceof Error?r.message:String(r)),"onBuildError"),onBuildOk:s,debounceMs:t=80}){let r,d,l=!1,c=!1,p=o(()=>{if(r=void 0,!c){if(d){l=!0;return}d=(async()=>{try{let a=await n();c||(s?.(),m(a))}catch(a){u(a)}finally{d=void 0,l&&!c&&(l=!1,r=setTimeout(p,0))}})()}},"run");return{schedule(){if(!c){if(d){l=!0;return}r&&clearTimeout(r),r=setTimeout(p,t)}},async close(){c=!0,l=!1,r&&clearTimeout(r),r=void 0,await d}}}o(x,"createBuildScheduler");async function E({cwd:n,port:m}){let u=T(),s=U(),t=await D({cwd:n,renderer:u,demoMode:"dev",demoServer:s}),r,d,l=o(()=>{let e=t.config.demos.engine;if(!(!t.demoManifest||!e?.startDev))return JSON.stringify({id:e.id,version:e.version??"",cacheKey:e.cacheKey??null,basePath:t.config.basePath,outputDir:t.config.outputDir,setup:t.config.demos.setup??null})},"runtimeKeyForCurrentBuild"),c=o(async()=>{let e=t.config.demos.engine;if(!(!t.demoManifest||!e?.startDev))return e.startDev({cwd:n,basePath:t.config.basePath,setup:t.config.demos.setup,server:s,getDemos:o(()=>Object.values(t.demoManifest?.demos??{}),"getDemos"),shouldIgnorePath:o(i=>B(n,t.config.outputDir,i),"shouldIgnorePath")})},"createDemoRuntime"),p=o(async()=>{let e=l();if(e===d){await r?.update?.();return}let i=await c(),f=r;r=i,d=e,await f?.close()},"refreshDemoRuntime"),a=await P({root:o(()=>y(n,t.config.outputDir),"root"),port:m,server:s,liveReload:!0,basePath:o(()=>t.config.basePath,"basePath"),configureServer:o(async()=>(r=await c(),d=l(),{middleware(e,i,f){if(!r?.middleware){f();return}r.middleware(e,i,()=>f())},close:o(()=>r?.close(),"close")}),"configureServer")}),v=O.watch(".",{cwd:n,ignoreInitial:!0,ignored:o(e=>B(n,t.config.outputDir,e),"ignored")}),b=x({build:o(async()=>{t=await D({cwd:n,renderer:u,demoMode:"dev",demoServer:s}),await p();let e=t.changedPages.flatMap(i=>{let f=t.graph.pages.find(M=>M.sourceRelativePath===i);return f?[S(t.config,f.routePath)]:[]});return{protocol:1,type:"update",mode:t.partialReload&&e.length===1?"page":"full",routes:e}},"build"),reload:o(e=>a.reload(e),"reload"),onBuildError:o(e=>{let i=e instanceof Error?e.message:String(e);g("Build error:",i),a.sendBuildError(i)},"onBuildError"),onBuildOk:o(()=>a.sendBuildOk(),"onBuildOk")});return v.on("all",(e,i)=>{r?.handlesFile?.(k(n,i))||b.schedule()}),v.on("error",e=>{let i=e instanceof Error?e.message:String(e);g("File watcher error:",i),a.sendBuildError(i)}),{port:a.port,close:o(async()=>{await v.close(),await b.close(),await a.close()},"close")}}o(E,"startDevServer");async function V({cwd:n,port:m=3333}){let u=await E({cwd:n,port:m});return R(`Dev server running at http://127.0.0.1:${u.port}/`),u}o(V,"runDev");export{V as runDev};
|
|
2
|
+
//# sourceMappingURL=dev-HAPAP642.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as t,f,g as a}from"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import{a as n}from"./chunk-
|
|
1
|
+
import{c as t,f,g as a}from"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import{a as n}from"./chunk-5WXLNJTZ.js";import"./chunk-JK7ZNBUA.js";import{a as o}from"./chunk-AYDF3IFZ.js";function r(e){return e}o(r,"defineConfig");export{f as CANOFOLD_EXTENSION_API_VERSION,n as canofoldVersion,r as defineConfig,a as defineExtension,t as defineSearchProvider};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as d}from"./chunk-M6T5RSNJ.js";import{a as b}from"./chunk-
|
|
1
|
+
import{a as d}from"./chunk-M6T5RSNJ.js";import{a as b}from"./chunk-5WXLNJTZ.js";import{a as k,d as S}from"./chunk-EAYVCA3Z.js";import{a as T,d as j,f as N}from"./chunk-JK7ZNBUA.js";import{a as l}from"./chunk-AYDF3IFZ.js";import{mkdir as U,readFile as B,readdir as G,rm as V,rmdir as Y,writeFile as _}from"fs/promises";import{dirname as W,isAbsolute as Q,join as E}from"path";import{createInterface as Z}from"readline/promises";import{join as y}from"path";var R=`/**
|
|
2
2
|
* Minimal declarations for trusted project-local TSX components.
|
|
3
3
|
*
|
|
4
4
|
* Canofold intentionally does not publish or emulate a UI component module.
|
|
@@ -68,4 +68,4 @@ export default defineConfig({
|
|
|
68
68
|
}
|
|
69
69
|
})
|
|
70
70
|
`}l(H,"configTemplate");function O(e){let{docsDir:t,defaultLocale:n,locales:i,includeContent:r,includeConfig:s}=e,c={[y(t,"canofold-env.d.ts")]:R};if(s&&(c["canofold.config.ts"]=H(t,n,i)),!r)return c;for(let g of i){let p=g===n?t:y(t,g),a=q(g);c[y(p,"index.md")]=a?.index??A,a&&(c[y(p,"guide.md")]=a.guide)}return c}l(O,"createInitFiles");async function J(e,t=""){let n;try{n=await G(e,{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return[];throw r}let i=[];for(let r of n){let s=t?E(t,r.name):r.name;if(r.isFile()&&k(r.name)&&i.push(s),r.isDirectory()&&(t||r.name!=="public"))for(let c of await J(E(e,r.name),s))i.push(c)}return i.sort((r,s)=>r.localeCompare(s))}l(J,"listMarkdownFiles");function ee(e,t){for(let n of t)try{Intl.getCanonicalLocales(n)}catch{throw new Error(`Invalid locale: ${n}`)}if(new Set(t.map(n=>n.toLowerCase())).size!==t.length)throw new Error("Locales must not contain duplicates");if(!t.some(n=>n.toLowerCase()===e.toLowerCase()))throw new Error(`Default locale ${e} must be included in locales`)}l(ee,"validateLocaleSelection");async function te(e=Z({input:process.stdin,output:process.stdout})){try{let n=((await e.question("Existing documents found. Enter their locale, or a comma-separated locale list (default: zh): ")).trim()||"zh").split(",").map(i=>i.trim());if(n.some(i=>!i))throw new Error("Locales must be a comma-separated list of locale identifiers");return n}catch(t){throw t.code==="ABORT_ERR"?new Error("Canofold initialization cancelled"):t}finally{e.close()}}l(te,"promptForLocales");function ne(e,t){return e.length===t.length&&e.every((n,i)=>n.toLowerCase()===t[i]?.toLowerCase())}l(ne,"sameLocales");function oe(e,t){if(e.docsDir&&e.docsDir!==t.docsDir)throw new Error(`--docs-dir ${e.docsDir} conflicts with configured docsDir ${t.docsDir}`);if(e.locale&&e.locale.toLowerCase()!==t.i18n.defaultLocale.toLowerCase())throw new Error(`--locale ${e.locale} conflicts with configured defaultLocale ${t.i18n.defaultLocale}`);if(e.locales&&!ne(e.locales,t.i18n.locales))throw new Error(`--locales ${e.locales.join(",")} conflicts with configured locales ${t.i18n.locales.join(",")}`)}l(oe,"assertOptionsMatchConfig");function $(e){return S(e.replace(/\\/g,"/")).normalize("NFC").toLocaleLowerCase("en-US")}l($,"portablePageKey");function ie(e,t,n){if(!e.length)return[];let i=[],r=e.map(a=>a.replace(/\\/g,"/")),s=l(a=>n==="."?a:`${n.replace(/\\/g,"/")}/${a}`,"displayPath"),c=t.normalize("NFC").toLocaleLowerCase("en-US");r.some(a=>{let h=$(a);return h==="index"||h===`${c}/index`})||i.push(`no default-language index.md or index.mdx was found in ${n}`);let p=new Map;for(let a of r)a.startsWith(`${t}/`)||p.set($(a),a);for(let a of r){if(!a.startsWith(`${t}/`))continue;let h=a.slice(t.length+1),u=p.get($(h));u&&i.push(`${s(u)} and ${s(a)} map to the same default-language page; keep only one source`)}return i}l(ie,"existingContentWarnings");async function re(e,t){let n=[],i=e;for(;!await T(i);){n.push(i);let r=W(i);if(r===i)break;i=r}for(let r of n.reverse())try{await U(r),t.push(r)}catch(s){if(s.code!=="EEXIST")throw s}}l(re,"createMissingDirectoryChain");async function xe(e,t={}){let n=e.targetDir?E(e.cwd,e.targetDir):e.cwd,{findConfigPath:i,loadConfig:r}=await import("./load-4UYHBETN.js"),s=!!await i(n),c=s?await r(n):void 0;c&&oe(e,c);let g=c?.docsDir??e.docsDir??"docs";if(Q(g))throw new Error("docsDir must be a relative path");let p=j(n,g,"docsDir");await N(n,p,"docsDir");let a=await J(p),h=a.length>0,u=e.locales;if(h&&!s&&!e.locale&&!u){let o=e.localePrompt??(process.stdin.isTTY&&process.stdout.isTTY?te:void 0);if(!o){let f=a[0]??"";throw new Error(`Found ${a.length} existing Markdown file(s) in "${g}" (e.g. "${f}"), but cannot determine their language in a non-interactive environment. Specify the locale explicitly: canofold init --locale <locale> (e.g. --locale zh)`)}u=await o()}let x=c?.i18n.defaultLocale??e.locale??u?.[0]??"zh";u=c?.i18n.locales??u??[x],ee(x,u);let M=O({docsDir:g,defaultLocale:x,locales:u,includeContent:!h,includeConfig:!s}),P=[],F=[],D=ie(a,x,g);for(let[o,f]of Object.entries(M)){let w=E(n,o);try{let C=await B(w,"utf8");F.push(o),C!==f&&D.push(`${o} already exists with different content`)}catch(C){let v=C.code;if(v==="EISDIR")throw new Error(`Cannot create ${o} because a directory exists at that path`);if(v!=="ENOENT")throw C;P.push({relativePath:o,content:f,fullPath:w})}}let m={mode:s?"configured":h?"adopt":"create",createFiles:P,keepFiles:F,warnings:D};if(!m.createFiles.length){for(let o of m.warnings)d(`Warning: ${o}`);d(`Canofold is already initialized in ${n}`);return}let L=[],K=t.writeFile??((o,f,w)=>_(o,f,w)),X=[...new Set(m.createFiles.map(o=>W(o.fullPath)))].sort((o,f)=>o.length-f.length),I=[];try{for(let o of X)await re(o,I);for(let o of m.createFiles)await K(o.fullPath,o.content,{flag:"wx"}),L.push(o.fullPath)}catch(o){await Promise.all(L.map(f=>V(f,{force:!0})));for(let f of I.sort((w,C)=>C.length-w.length))try{await Y(f)}catch{}throw o}for(let o of m.createFiles)d(`Created ${o.relativePath}`);for(let o of m.keepFiles)d(`Kept existing ${o}`);for(let o of m.warnings)d(`Warning: ${o}`);if(m.mode==="adopt"){let o=a.length===1?"document":"documents";d(`Adopted ${a.length} existing ${o} in ${n}`),d(`Kept ${a.length} existing ${o} unchanged`),d("Next: canofold check")}else m.mode==="configured"?(d(`Created missing documentation files in ${n}`),d("Next: canofold dev")):(d(`Created Canofold docs in ${n}`),d("Next: canofold dev"));d("Add .canofold/ to .gitignore if this directory is versioned.")}l(xe,"runInit");export{te as promptForLocales,xe as runInit};
|
|
71
|
-
//# sourceMappingURL=init-
|
|
71
|
+
//# sourceMappingURL=init-RU34LZ2D.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as p}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=preview-
|
|
1
|
+
import{a as p}from"./chunk-GLAK57S4.js";import{l as n}from"./chunk-VMPJIE5E.js";import{a}from"./chunk-M6T5RSNJ.js";import"./chunk-EAYVCA3Z.js";import{e as i}from"./chunk-JK7ZNBUA.js";import{a as e}from"./chunk-AYDF3IFZ.js";async function g({cwd:r,port:s=4173}){let t=await n(r),o=await p({root:i(r,t.outputDir),port:s,basePath:t.basePath});return a(`Preview running at http://127.0.0.1:${o.port}${t.basePath}`),o}e(g,"runPreview");export{g as runPreview};
|
|
2
|
+
//# sourceMappingURL=preview-FB3HCXFC.js.map
|
package/dist/styles.input.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "canofold",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "A static-first, minimally invasive knowledge and documentation platform for Markdown, MDX, search, and AI-ready output.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Canofold Contributors",
|
|
@@ -56,22 +56,23 @@
|
|
|
56
56
|
"chokidar": "^5.0.0",
|
|
57
57
|
"esbuild": "^0.28.2",
|
|
58
58
|
"gray-matter": "^4.0.3",
|
|
59
|
-
"lucide-react": "1.
|
|
60
|
-
"react": "^19.
|
|
61
|
-
"react-dom": "^19.
|
|
59
|
+
"lucide-react": "1.46.0",
|
|
60
|
+
"react": "^19.3.0",
|
|
61
|
+
"react-dom": "^19.3.0",
|
|
62
62
|
"semver": "^7.8.5",
|
|
63
|
-
"zod": "^4.
|
|
64
|
-
"@canofold/markdown": "0.3.
|
|
63
|
+
"zod": "^4.6.5",
|
|
64
|
+
"@canofold/markdown": "0.3.3"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@types/react": "^19.
|
|
68
|
-
"@types/react-dom": "^19.
|
|
67
|
+
"@types/react": "^19.3.0",
|
|
68
|
+
"@types/react-dom": "^19.3.0",
|
|
69
69
|
"@types/semver": "^7.8.0",
|
|
70
70
|
"tsup": "^8.3.5",
|
|
71
71
|
"typescript": "^6.0.3"
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|
|
74
|
-
"build": "tsup
|
|
74
|
+
"build": "tsup",
|
|
75
|
+
"dev": "tsup --watch",
|
|
75
76
|
"typecheck": "tsc --noEmit",
|
|
76
77
|
"test": "pnpm --dir ../.. build && vitest run --root ../.."
|
|
77
78
|
}
|
package/dist/build-TR5KQIT3.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b}from"./chunk-I3C6PKXP.js";import"./chunk-VTDAE6I7.js";import"./chunk-MVV3ZPRY.js";import"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import"./chunk-VMPJIE5E.js";import"./chunk-M6T5RSNJ.js";import"./chunk-E5NNUYSF.js";import"./chunk-EAYVCA3Z.js";import"./chunk-JK7ZNBUA.js";import"./chunk-AYDF3IFZ.js";export{b as runBuild,a as versionSatisfies};
|
|
2
|
-
//# sourceMappingURL=build-TR5KQIT3.js.map
|
package/dist/chunk-E5NNUYSF.js
DELETED
package/dist/chunk-HS5LEPRC.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import{b as C}from"./chunk-M6T5RSNJ.js";import{c as I}from"./chunk-JK7ZNBUA.js";import{a as r}from"./chunk-AYDF3IFZ.js";import{createServer as O}from"http";import{readFile as T,realpath as M}from"fs/promises";import{extname as k,isAbsolute as B,join as w,normalize as L,relative as z,resolve as F,sep as J}from"path";var _={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".txt":"text/plain; charset=utf-8",".md":"text/markdown; charset=utf-8",".svg":"image/svg+xml",".xml":"application/xml; charset=utf-8",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".pagefind":"application/wasm"};function U(t){return _[k(t).toLowerCase()]??"application/octet-stream"}r(U,"contentTypeFor");var W=15e3;function G(t){for(let o of t)o.end();t.clear()}r(G,"closeReloadClients");function y(t,o){for(let n of t)try{n.write(o)}catch{t.delete(n);try{n.end()}catch{}}}r(y,"writeReloadClients");function K(t){y(t,`:keepalive
|
|
2
|
-
|
|
3
|
-
`)}r(K,"heartbeatReloadClients");function D(t,o=""){let n=o.replace(/\r\n?/g,`
|
|
4
|
-
`).split(`
|
|
5
|
-
`);return`event: ${t}
|
|
6
|
-
${n.map(l=>`data: ${l}`).join(`
|
|
7
|
-
`)}
|
|
8
|
-
|
|
9
|
-
`}r(D,"formatServerSentEvent");function A(t,o="/__canofold/events"){let n=`<script type="module">
|
|
10
|
-
const source=new EventSource(${JSON.stringify(o)});
|
|
11
|
-
let connected=false,disconnected=false;
|
|
12
|
-
let overlay=null;
|
|
13
|
-
function showError(msg){
|
|
14
|
-
if(!overlay){overlay=document.createElement('dialog');overlay.style.cssText='all:initial;position:fixed;inset:0;width:100%;height:100%;border:none;background:rgba(15,15,20,.92);color:#f87171;font:14px/1.6 monospace;padding:2rem;box-sizing:border-box;z-index:2147483647;overflow:auto;white-space:pre-wrap;word-break:break-all;';document.documentElement.appendChild(overlay);}
|
|
15
|
-
overlay.textContent='\u26A0\uFE0F Build error:\\n\\n'+msg;
|
|
16
|
-
if(!overlay.open)overlay.showModal();
|
|
17
|
-
}
|
|
18
|
-
function clearError(){if(overlay&&overlay.open){overlay.close();overlay.remove();overlay=null;}}
|
|
19
|
-
function normalizeRoute(value){const path=value.split(/[?#]/,1)[0]||'/';return path.endsWith('/')?path:path+'/';}
|
|
20
|
-
async function applyPageUpdate(update){
|
|
21
|
-
const currentRoute=normalizeRoute(location.pathname);
|
|
22
|
-
if(!update.routes.some((route)=>normalizeRoute(route)===currentRoute))return true;
|
|
23
|
-
const response=await fetch(location.href,{cache:'no-store',headers:{accept:'text/html'}});
|
|
24
|
-
if(!response.ok||!(response.headers.get('content-type')||'').includes('text/html'))return false;
|
|
25
|
-
const nextDocument=new DOMParser().parseFromString(await response.text(),'text/html');
|
|
26
|
-
if(typeof window.__canofoldApplyPageDocument!=='function')return false;
|
|
27
|
-
return window.__canofoldApplyPageDocument(nextDocument,{mode:'update'});
|
|
28
|
-
}
|
|
29
|
-
source.onopen=()=>{if(connected&&disconnected){clearError();location.reload();}connected=true;disconnected=false;};
|
|
30
|
-
source.onerror=()=>{if(connected)disconnected=true;};
|
|
31
|
-
source.onmessage=()=>{clearError();location.reload();};
|
|
32
|
-
source.addEventListener('update',async(event)=>{
|
|
33
|
-
clearError();
|
|
34
|
-
try{
|
|
35
|
-
const update=JSON.parse(event.data);
|
|
36
|
-
if(update.protocol!==1||update.type!=='update'||update.mode!=='page'){location.reload();return;}
|
|
37
|
-
if(!await applyPageUpdate(update))location.reload();
|
|
38
|
-
}catch{location.reload();}
|
|
39
|
-
});
|
|
40
|
-
source.addEventListener('build-error',(e)=>showError(e.data));
|
|
41
|
-
source.addEventListener('build-ok',()=>clearError());
|
|
42
|
-
</script>`;return t.replace("</body>",`${n}</body>`)}r(A,"injectLiveReloadScript");function Q(t,o="/"){if(o==="/")return t;let n=o.replace(/\/$/,"");return t===n?"/":t.startsWith(`${n}/`)?t.slice(n.length)||"/":void 0}r(Q,"resolveMountedRequestPath");function V(t,o){let n=F(t),l=o.split("/").map(f=>{let d=decodeURIComponent(f);if(d==="."||d===".."||d.includes("/")||d.includes("\\")||/[\u0000-\u001f]/.test(d))throw new Error("Forbidden");return d}),m=L(l.join("/"));if(m.split(/[\\/]/).includes(".."))throw new Error("Forbidden");let c=F(w(n,m)),v=m.endsWith("/")?[w(c,"index.html")]:k(m)===""?[c,w(c,"index.html")]:[c];for(let f of v){let d=z(n,f);if(d===".."||d.startsWith(`..${J}`)||B(d))throw new Error("Forbidden")}return v}r(V,"resolveRequestCandidates");async function $(t,o){let[n,l]=await Promise.all([M(t),M(o)]);if(!I(n,l))throw new Error("Forbidden");return l}r($,"resolveExistingRequestPath");async function X(t){try{let o=await $(t,w(t,"404.html"));return await T(o)}catch(o){if(o.code==="ENOENT")return;throw o}}r(X,"readGeneratedNotFound");async function oe({root:t,port:o,liveReload:n=!1,basePath:l="/",configureServer:m}){let c=new Set,v=r(async(i,e)=>{if(i.method!=="GET"&&i.method!=="HEAD"){e.writeHead(405,{allow:"GET, HEAD"}),e.end("Method not allowed");return}let s=new URL(i.url??"/","http://127.0.0.1"),u=typeof l=="function"?l():l,S=`${u==="/"?"":u.replace(/\/$/,"")}/__canofold/events`;if(n&&s.pathname===S){e.writeHead(200,{"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive"}),e.write(`:connected
|
|
43
|
-
|
|
44
|
-
`),c.add(e);let a=r(()=>c.delete(e),"removeClient");i.once("close",a),e.once("close",a),e.once("error",a);return}let H=Q(s.pathname,u),g,b=r(async()=>{e.statusCode=404;let a=await X(g);if(a){e.setHeader("content-type",_[".html"]??"text/html; charset=utf-8"),n&&(a=Buffer.from(A(a.toString("utf8"),S))),e.end(i.method==="HEAD"?void 0:a);return}e.end(i.method==="HEAD"?void 0:"Not found")},"sendNotFound"),R=r(a=>{C("Static server error:",a),e.statusCode=500,e.end(i.method==="HEAD"?void 0:"Internal server error")},"sendInternalError");if(g=F(typeof t=="function"?t():t),H===void 0){try{await b()}catch(a){R(a)}return}let N;try{N=V(g,H)}catch{e.statusCode=403,e.end("Forbidden");return}try{let a,p;for(let P of N)try{let h=await $(g,P);p=await T(h),a=h;break}catch(h){if(h.message==="Forbidden"){e.statusCode=403,e.end("Forbidden");return}let j=h.code;if(j!=="ENOENT"&&j!=="EISDIR")throw h}if(!a||!p){await b();return}e.setHeader("content-type",U(a)),e.setHeader("cache-control","no-store"),n&&k(a)===".html"&&(p=Buffer.from(A(p.toString("utf8"),S))),e.end(i.method==="HEAD"?void 0:p)}catch(a){let p=a.code;if(p==="ENOENT"||p==="EISDIR")try{await b()}catch(P){R(P)}else R(a)}},"staticHandler"),f,d=O((i,e)=>{let s=r(u=>{if(u){C("Mounted development server error:",u),e.statusCode=500,e.end("Internal server error");return}v(i,e)},"next");if(!f){s();return}try{f.middleware(i,e,s)}catch(u){s(u)}});f=await m?.(d),await new Promise((i,e)=>{let s=r(u=>e(u),"onError");d.once("error",s),d.listen(o,"127.0.0.1",()=>{d.off("error",s),i()})});let E=d.address();if(!E||typeof E=="string")throw new Error("Failed to start server");let x=n?setInterval(()=>K(c),W):void 0;return x?.unref(),{port:E.port,reload:r((i={protocol:1,type:"update",mode:"full",routes:[]})=>{y(c,D("update",JSON.stringify(i)))},"reload"),sendBuildError:r(i=>{y(c,D("build-error",i))},"sendBuildError"),sendBuildOk:r(()=>{y(c,D("build-ok"))},"sendBuildOk"),close:r(async()=>{x&&clearInterval(x),G(c),await f?.close?.(),await new Promise((i,e)=>d.close(s=>s?e(s):i()))},"close")}}r(oe,"startStaticServer");export{oe as a};
|
|
45
|
-
//# sourceMappingURL=chunk-HS5LEPRC.js.map
|
package/dist/dev-7GFQGT2A.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as B}from"./chunk-HS5LEPRC.js";import{b}from"./chunk-I3C6PKXP.js";import{a as P}from"./chunk-VTDAE6I7.js";import"./chunk-MVV3ZPRY.js";import{b as w}from"./chunk-ENPRUF6E.js";import"./chunk-XYJ2OBL3.js";import"./chunk-VMPJIE5E.js";import{a as S,b as v}from"./chunk-M6T5RSNJ.js";import"./chunk-E5NNUYSF.js";import"./chunk-EAYVCA3Z.js";import{c as y,e as D}from"./chunk-JK7ZNBUA.js";import{a as r}from"./chunk-AYDF3IFZ.js";import O from"chokidar";import{createMarkdownRenderer as T}from"@canofold/markdown/server";import{relative as I,resolve as E,sep as K}from"path";function k(n,f,u){let t=E(n,u),i=I(n,t).split(K);return i.includes("node_modules")||i.includes(".git")||i.includes(".canofold")||i.some(o=>/^\..+\.(?:tmp|backup)-/.test(o))?!0:y(D(n,f),t)||y(P(n),t)}r(k,"shouldIgnoreGeneratedPath");function U({build:n,reload:f,onBuildError:u=r(o=>v(o instanceof Error?o.message:String(o)),"onBuildError"),onBuildOk:t,debounceMs:i=80}){let o,d,l=!1,c=!1,p=r(()=>{if(o=void 0,!c){if(d){l=!0;return}d=(async()=>{try{let a=await n();c||(t?.(),f(a))}catch(a){u(a)}finally{d=void 0,l&&!c&&(l=!1,o=setTimeout(p,0))}})()}},"run");return{schedule(){if(!c){if(d){l=!0;return}o&&clearTimeout(o),o=setTimeout(p,i)}},async close(){c=!0,l=!1,o&&clearTimeout(o),o=void 0,await d}}}r(U,"createBuildScheduler");async function M({cwd:n,port:f}){let u=T(),t=await b({cwd:n,renderer:u,demoMode:"dev"}),i,o,d,l=r(()=>{let e=t.config.demos.engine;if(!(!t.demoManifest||!e?.startDev))return JSON.stringify({id:e.id,version:e.version??"",cacheKey:e.cacheKey??null,basePath:t.config.basePath,outputDir:t.config.outputDir,setup:t.config.demos.setup??null})},"runtimeKeyForCurrentBuild"),c=r(async()=>{let e=t.config.demos.engine;if(!(!t.demoManifest||!e?.startDev||!d))return e.startDev({cwd:n,basePath:t.config.basePath,setup:t.config.demos.setup,server:d,getDemos:r(()=>Object.values(t.demoManifest?.demos??{}),"getDemos"),shouldIgnorePath:r(s=>k(n,t.config.outputDir,s),"shouldIgnorePath")})},"createDemoRuntime"),p=r(async()=>{let e=l();if(e===o){await i?.update?.();return}let s=await c(),m=i;i=s,o=e,await m?.close()},"refreshDemoRuntime"),a=await B({root:r(()=>D(n,t.config.outputDir),"root"),port:f,liveReload:!0,basePath:r(()=>t.config.basePath,"basePath"),configureServer:r(async e=>(d=e,i=await c(),o=l(),{middleware(s,m,g){if(!i?.middleware){g();return}i.middleware(s,m,()=>g())},close:r(()=>i?.close(),"close")}),"configureServer")}),h=O.watch(".",{cwd:n,ignoreInitial:!0,ignored:r(e=>k(n,t.config.outputDir,e),"ignored")}),R=U({build:r(async()=>{t=await b({cwd:n,renderer:u,demoMode:"dev"}),await p();let e=t.changedPages.flatMap(s=>{let m=t.graph.pages.find(g=>g.sourceRelativePath===s);return m?[w(t.config,m.routePath)]:[]});return{protocol:1,type:"update",mode:t.partialReload&&e.length===1?"page":"full",routes:e}},"build"),reload:r(e=>a.reload(e),"reload"),onBuildError:r(e=>{let s=e instanceof Error?e.message:String(e);v("Build error:",s),a.sendBuildError(s)},"onBuildError"),onBuildOk:r(()=>a.sendBuildOk(),"onBuildOk")});return h.on("all",(e,s)=>{i?.handlesFile?.(E(n,s))||R.schedule()}),h.on("error",e=>{let s=e instanceof Error?e.message:String(e);v("File watcher error:",s),a.sendBuildError(s)}),{port:a.port,close:r(async()=>{await h.close(),await R.close(),await a.close()},"close")}}r(M,"startDevServer");async function L({cwd:n,port:f=3333}){let u=await M({cwd:n,port:f});return S(`Dev server running at http://127.0.0.1:${u.port}/`),u}r(L,"runDev");export{L as runDev};
|
|
2
|
-
//# sourceMappingURL=dev-7GFQGT2A.js.map
|