robindoc 0.0.0-experimental-fb135e6 → 0.0.0-experimental-2c17c72

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.
@@ -3,5 +3,6 @@ export type StructureTemplate = Structure | (() => Structure | Promise<Structure
3
3
  export type Options = {
4
4
  processError?: (status: number, statusText: string) => void | null | never;
5
5
  matcher?: string[];
6
+ cache?: boolean;
6
7
  };
7
8
  //# sourceMappingURL=initialize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../src/core/types/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnF,MAAM,MAAM,OAAO,GAAG;IAClB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC"}
1
+ {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../src/core/types/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnF,MAAM,MAAM,OAAO,GAAG;IAClB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import React from "react";
2
+ import { type TreeItem } from "../../components/elements/sidebar/types";
2
3
  import { type ArticleProps as ArticlePropsBase } from "../../components/elements/article";
3
4
  import { type SidebarProps as SidebarPropsBase } from "../../components/elements/sidebar";
4
5
  import { type StructureTemplate, type Options } from "../types/initialize";
6
+ import { type Pages } from "../types/content";
5
7
  type PageProps = Omit<Partial<ArticlePropsBase>, "uri" | "content" | "provider" | "pathname" | "pages"> & {
6
8
  pathname: string;
7
9
  };
@@ -16,6 +18,10 @@ export declare const initializeRobindoc: (structureTemplate: StructureTemplate,
16
18
  raw: string;
17
19
  } | null>;
18
20
  getPageInstruction: (pathname: string) => Promise<import("../types/content").Page | null>;
21
+ revalidate: (background?: boolean) => Promise<{
22
+ pages: Pages;
23
+ tree: TreeItem[];
24
+ }>;
19
25
  };
20
26
  export {};
21
27
  //# sourceMappingURL=initialize-robindoc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialize-robindoc.d.ts","sourceRoot":"","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AACjH,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AAEjH,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAO3E,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG;IACtG,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAenD,eAAO,MAAM,kBAAkB,GAAI,mBAAmB,iBAAiB,EAAE,UAAS,OAAY;;;sBA0D3D,CAAC,SAAS,MAAM,wBACnC,MAAM,qBACI,CAAC;4BAiBc,MAAM;4BAwBN,MAAM;;;;mCAuBC,MAAM;CAqBrD,CAAC"}
1
+ {"version":3,"file":"initialize-robindoc.d.ts","sourceRoot":"","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,QAAQ,EAAE,gDAA+C;AACvE,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AACjH,OAAO,EAA0B,KAAK,YAAY,IAAI,gBAAgB,EAAE,0CAAyC;AAEjH,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAO9C,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG;IACtG,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAiBnD,eAAO,MAAM,kBAAkB,GAAI,mBAAmB,iBAAiB,EAAE,UAAS,OAAY;;;sBAiE3D,CAAC,SAAS,MAAM,wBACnC,MAAM,qBACI,CAAC;4BAmBc,MAAM;4BA0BN,MAAM;;;;mCAyBC,MAAM;8BAsBX,OAAO;eA9KN,KAAK;cAAQ,QAAQ,EAAE;;CA8LlE,CAAC"}
@@ -1,2 +1,2 @@
1
- import r from"react";import{Article as t}from"../../components/elements/article/index.js";import{Sidebar as e}from"../../components/elements/sidebar/index.js";import{parseStructure as o}from"./parse-structure.js";import{getConfiguration as s}from"./get-configuration.js";import{getMetadata as n}from"./get-metadata.js";import{normalizePathname as a,removeTrailingSlash as c}from"./path-tools.js";import{loadContent as i}from"./load-content.js";const p=(p,u={})=>{const l=(async r=>{let t;t="function"==typeof r?await r():r;const e=s(t.configuration||{});return o(t.items||[],e)})(p),m=u.matcher?.map(r=>new RegExp(`^${r.replace(/^\^|\$$/g,"")}$`));return{Page:async({pathname:e,...o})=>{const s=a(e);if(m&&!m.every(r=>r.test(e))){const r=`Pathname "${s}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:n}=await l,c=n[s];if(!c){const r=`Can not find data for "${s}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const i=Object.keys(n),p=i.indexOf(s),f=i[p-1],h=p<i.length-1&&i[p+1],d=f&&{pathname:f,title:n[f].title},g=h&&{pathname:h,title:n[h].title},w=c.crumbs.map(r=>({title:n[r].title,pathname:r})),E=Object.entries(n).reduce((r,[t,{origPath:e}])=>(e&&r.push({clientPath:t,origPath:e}),r),[]);return r.createElement(t,{pathname:s,provider:c.configuration.provider,uri:c.uri,title:c.title,breadcrumbs:w,prev:d||void 0,next:g||void 0,pages:E,...o})},Sidebar:async t=>{const{tree:o}=await l;return r.createElement(e,{tree:o,...t})},getStaticParams:async(r="",t="segments")=>{const{pages:e}=await l,o=Object.keys(e),s=c(r);return o.reduce((r,e)=>e.startsWith(s)?(r.push({[t]:e.substring(s.length+1).split("/")}),r):r,[])},getMetadata:async r=>{const t=a(r);if(m&&!m.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:e}=await l,o=e[t];if(!o){const r=`Can not find data for "${t}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}return await n({uri:o.uri,provider:o.configuration.provider})},getPageData:async r=>{const t=a(r);if(m&&!m.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:e}=await l,o=e[t];if(!o){const r=`Can not find data for "${t}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const s=o.title,{data:n}=await i(o.uri,o.configuration.provider);return{title:s,raw:n}},getPageInstruction:async r=>{const t=a(r);if(m&&!m.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}const{pages:e}=await l,o=e[t];if(!o){const r=`Can not find data for "${t}". Please check structure`;if(u.processError)return u.processError(404,r)||null;throw new Error(r)}return o}}};export{p as initializeRobindoc};
1
+ import r from"react";import{Article as t}from"../../components/elements/article/index.js";import{Sidebar as e}from"../../components/elements/sidebar/index.js";import{parseStructure as a}from"./parse-structure.js";import{getConfiguration as o}from"./get-configuration.js";import{getMetadata as s}from"./get-metadata.js";import{normalizePathname as n,removeTrailingSlash as c}from"./path-tools.js";import{loadContent as i}from"./load-content.js";const u=async r=>{let t;t="function"==typeof r?await r():r;const e=o(t.configuration||{});return a(t.items||[],e)},p=(a,o={})=>{let p=u(a).then(r=>(p=r,r));const l=o.matcher?.map(r=>new RegExp(`^${r.replace(/^\^|\$$/g,"")}$`)),h=async r=>{if("then"in p)return p;if(r){const r=await u(a);p=r}else p=u(a).then(r=>(p=r,r));return p};return{Page:async({pathname:e,...a})=>{const s=n(e);if(l&&!l.every(r=>r.test(e))){const r=`Pathname "${s}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:c}=await p,i=c[s];if(!i){const r=`Can not find data for "${s}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}const u=Object.keys(c),m=u.indexOf(s),f=u[m-1],w=m<u.length-1&&u[m+1],d=f&&{pathname:f,title:c[f].title},g=w&&{pathname:w,title:c[w].title},E=i.crumbs.map(r=>({title:c[r].title,pathname:r})),y=Object.entries(c).reduce((r,[t,{origPath:e}])=>(e&&r.push({clientPath:t,origPath:e}),r),[]);return r.createElement(t,{pathname:s,provider:i.configuration.provider,uri:i.uri,title:i.title,breadcrumbs:E,prev:d||void 0,next:g||void 0,pages:y,...a})},Sidebar:async t=>{o.cache||await h(!0);const{tree:a}=await p;return r.createElement(e,{tree:a,...t})},getStaticParams:async(r="",t="segments")=>{o.cache||await h(!0);const{pages:e}=await p,a=Object.keys(e),s=c(r);return a.reduce((r,e)=>e.startsWith(s)?(r.push({[t]:e.substring(s.length+1).split("/")}),r):r,[])},getMetadata:async r=>{const t=n(r);if(l&&!l.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:e}=await p,a=e[t];if(!a){const r=`Can not find data for "${t}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}return await s({uri:a.uri,provider:a.configuration.provider})},getPageData:async r=>{const t=n(r);if(l&&!l.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:e}=await p,a=e[t];if(!a){const r=`Can not find data for "${t}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}const s=a.title,{data:c}=await i(a.uri,a.configuration.provider);return{title:s,raw:c}},getPageInstruction:async r=>{const t=n(r);if(l&&!l.every(t=>t.test(r))){const r=`Pathname "${t}" doesn't pass matcher rules check`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}o.cache||await h(!0);const{pages:e}=await p,a=e[t];if(!a){const r=`Can not find data for "${t}". Please check structure`;if(o.processError)return o.processError(404,r)||null;throw new Error(r)}return a},revalidate:h}};export{p as initializeRobindoc};
2
2
  //# sourceMappingURL=initialize-robindoc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"initialize-robindoc.js","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { Article as ArticleBase, type ArticleProps as ArticlePropsBase } from \"@src/components/elements/article\";\nimport { Sidebar as SidebarBase, type SidebarProps as SidebarPropsBase } from \"@src/components/elements/sidebar\";\n\nimport { type StructureTemplate, type Options } from \"../types/initialize\";\nimport { parseStructure } from \"./parse-structure\";\nimport { getConfiguration } from \"./get-configuration\";\nimport { getMetadata as getMetadataBase } from \"./get-metadata\";\nimport { normalizePathname, removeTrailingSlash } from \"./path-tools\";\nimport { loadContent } from \"./load-content\";\n\ntype PageProps = Omit<Partial<ArticlePropsBase>, \"uri\" | \"content\" | \"provider\" | \"pathname\" | \"pages\"> & {\n pathname: string;\n};\n\ntype SidebarProps = Omit<SidebarPropsBase, \"tree\">;\n\nconst loadStructure = async (structureTemplate: StructureTemplate) => {\n let structure;\n if (typeof structureTemplate === \"function\") {\n structure = await structureTemplate();\n } else {\n structure = structureTemplate;\n }\n\n const configuration = getConfiguration(structure.configuration || {});\n\n return parseStructure(structure.items || [], configuration);\n};\n\nexport const initializeRobindoc = (structureTemplate: StructureTemplate, options: Options = {}) => {\n const structureParsedPromise = loadStructure(structureTemplate);\n const matchingRules = options.matcher?.map((rule) => new RegExp(`^${rule.replace(/^\\^|\\$$/g, \"\")}$`));\n\n const Page: React.FC<PageProps> = async ({ pathname, ...props }) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const paths = Object.keys(pages);\n const targetPageIndex = paths.indexOf(pathnameNormalized);\n const prevPagePathname = paths[targetPageIndex - 1];\n const nextPagePathname = targetPageIndex < paths.length - 1 && paths[targetPageIndex + 1];\n const prev = prevPagePathname && { pathname: prevPagePathname, title: pages[prevPagePathname].title };\n const next = nextPagePathname && { pathname: nextPagePathname, title: pages[nextPagePathname].title };\n\n const breadcrumbs = pageInstruction.crumbs.map((crumb) => ({ title: pages[crumb].title, pathname: crumb }));\n const clientPages = Object.entries(pages).reduce<{ clientPath: string; origPath: string }[]>(\n (acc, [clientPath, { origPath }]) => {\n if (origPath) acc.push({ clientPath, origPath });\n return acc;\n },\n [],\n );\n\n return (\n <ArticleBase\n pathname={pathnameNormalized}\n provider={pageInstruction.configuration.provider}\n uri={pageInstruction.uri}\n title={pageInstruction.title}\n breadcrumbs={breadcrumbs}\n prev={prev || undefined}\n next={next || undefined}\n pages={clientPages}\n {...props}\n />\n );\n };\n\n const Sidebar: React.FC<SidebarProps> = async (props) => {\n const { tree } = await structureParsedPromise;\n\n return <SidebarBase tree={tree} {...props} />;\n };\n\n const getStaticParams = async <T extends string = \"segments\">(\n prefix: string = \"\",\n segmentsParamKey: T = \"segments\" as T,\n ) => {\n const { pages } = await structureParsedPromise;\n const pagesArr = Object.keys(pages);\n const prefixWithoutTrailingSlash = removeTrailingSlash(prefix);\n\n return pagesArr.reduce<Record<T, string[]>[]>((acc, cur) => {\n if (!cur.startsWith(prefixWithoutTrailingSlash)) return acc;\n\n acc.push({\n [segmentsParamKey]: cur.substring(prefixWithoutTrailingSlash.length + 1).split(\"/\"),\n } as Record<T, string[]>);\n\n return acc;\n }, []);\n };\n\n const getMetadata = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const metadata = await getMetadataBase({\n uri: pageInstruction.uri,\n provider: pageInstruction.configuration.provider,\n });\n return metadata;\n };\n\n const getPageData = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const title = pageInstruction.title;\n const { data } = await loadContent(pageInstruction.uri, pageInstruction.configuration.provider);\n\n return { title, raw: data };\n };\n\n const getPageInstruction = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n return pageInstruction;\n };\n\n return { Page, Sidebar, getStaticParams, getMetadata, getPageData, getPageInstruction };\n};\n"],"names":["initializeRobindoc","structureTemplate","options","structureParsedPromise","async","structure","configuration","getConfiguration","parseStructure","items","loadStructure","matchingRules","matcher","map","rule","RegExp","replace","Page","pathname","props","pathnameNormalized","normalizePathname","every","test","errorMessage","processError","Error","pages","pageInstruction","paths","Object","keys","targetPageIndex","indexOf","prevPagePathname","nextPagePathname","length","prev","title","next","breadcrumbs","crumbs","crumb","clientPages","entries","reduce","acc","clientPath","origPath","push","React","ArticleBase","provider","uri","undefined","Sidebar","tree","createElement","SidebarBase","getStaticParams","prefix","segmentsParamKey","pagesArr","prefixWithoutTrailingSlash","removeTrailingSlash","cur","startsWith","substring","split","getMetadata","getMetadataBase","getPageData","data","loadContent","raw","getPageInstruction"],"mappings":"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"}
1
+ {"version":3,"file":"initialize-robindoc.js","sources":["../../../src/core/utils/initialize-robindoc.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { type TreeItem } from \"@src/components/elements/sidebar/types\";\nimport { Article as ArticleBase, type ArticleProps as ArticlePropsBase } from \"@src/components/elements/article\";\nimport { Sidebar as SidebarBase, type SidebarProps as SidebarPropsBase } from \"@src/components/elements/sidebar\";\n\nimport { type StructureTemplate, type Options } from \"../types/initialize\";\nimport { type Pages } from \"../types/content\";\nimport { parseStructure } from \"./parse-structure\";\nimport { getConfiguration } from \"./get-configuration\";\nimport { getMetadata as getMetadataBase } from \"./get-metadata\";\nimport { normalizePathname, removeTrailingSlash } from \"./path-tools\";\nimport { loadContent } from \"./load-content\";\n\ntype PageProps = Omit<Partial<ArticlePropsBase>, \"uri\" | \"content\" | \"provider\" | \"pathname\" | \"pages\"> & {\n pathname: string;\n};\n\ntype SidebarProps = Omit<SidebarPropsBase, \"tree\">;\n\ntype StructureParsedData = Promise<{ pages: Pages; tree: TreeItem[] }> | { pages: Pages; tree: TreeItem[] };\n\nconst loadStructure = async (structureTemplate: StructureTemplate) => {\n let structure;\n if (typeof structureTemplate === \"function\") {\n structure = await structureTemplate();\n } else {\n structure = structureTemplate;\n }\n\n const configuration = getConfiguration(structure.configuration || {});\n\n return parseStructure(structure.items || [], configuration);\n};\n\nexport const initializeRobindoc = (structureTemplate: StructureTemplate, options: Options = {}) => {\n let structureParsedPromise: StructureParsedData = loadStructure(structureTemplate).then((data) => {\n structureParsedPromise = data;\n return data;\n });\n const matchingRules = options.matcher?.map((rule) => new RegExp(`^${rule.replace(/^\\^|\\$$/g, \"\")}$`));\n\n const Page: React.FC<PageProps> = async ({ pathname, ...props }) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const paths = Object.keys(pages);\n const targetPageIndex = paths.indexOf(pathnameNormalized);\n const prevPagePathname = paths[targetPageIndex - 1];\n const nextPagePathname = targetPageIndex < paths.length - 1 && paths[targetPageIndex + 1];\n const prev = prevPagePathname && { pathname: prevPagePathname, title: pages[prevPagePathname].title };\n const next = nextPagePathname && { pathname: nextPagePathname, title: pages[nextPagePathname].title };\n\n const breadcrumbs = pageInstruction.crumbs.map((crumb) => ({ title: pages[crumb].title, pathname: crumb }));\n const clientPages = Object.entries(pages).reduce<{ clientPath: string; origPath: string }[]>(\n (acc, [clientPath, { origPath }]) => {\n if (origPath) acc.push({ clientPath, origPath });\n return acc;\n },\n [],\n );\n\n return (\n <ArticleBase\n pathname={pathnameNormalized}\n provider={pageInstruction.configuration.provider}\n uri={pageInstruction.uri}\n title={pageInstruction.title}\n breadcrumbs={breadcrumbs}\n prev={prev || undefined}\n next={next || undefined}\n pages={clientPages}\n {...props}\n />\n );\n };\n\n const Sidebar: React.FC<SidebarProps> = async (props) => {\n if (!options.cache) await revalidate(true);\n\n const { tree } = await structureParsedPromise;\n\n return <SidebarBase tree={tree} {...props} />;\n };\n\n const getStaticParams = async <T extends string = \"segments\">(\n prefix: string = \"\",\n segmentsParamKey: T = \"segments\" as T,\n ) => {\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pagesArr = Object.keys(pages);\n const prefixWithoutTrailingSlash = removeTrailingSlash(prefix);\n\n return pagesArr.reduce<Record<T, string[]>[]>((acc, cur) => {\n if (!cur.startsWith(prefixWithoutTrailingSlash)) return acc;\n\n acc.push({\n [segmentsParamKey]: cur.substring(prefixWithoutTrailingSlash.length + 1).split(\"/\"),\n } as Record<T, string[]>);\n\n return acc;\n }, []);\n };\n\n const getMetadata = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const metadata = await getMetadataBase({\n uri: pageInstruction.uri,\n provider: pageInstruction.configuration.provider,\n });\n return metadata;\n };\n\n const getPageData = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n const title = pageInstruction.title;\n const { data } = await loadContent(pageInstruction.uri, pageInstruction.configuration.provider);\n\n return { title, raw: data };\n };\n\n const getPageInstruction = async (pathname: string) => {\n const pathnameNormalized = normalizePathname(pathname);\n if (matchingRules && !matchingRules.every((rule) => rule.test(pathname))) {\n const errorMessage = `Pathname \"${pathnameNormalized}\" doesn't pass matcher rules check`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n if (!options.cache) await revalidate(true);\n\n const { pages } = await structureParsedPromise;\n const pageInstruction = pages[pathnameNormalized];\n\n if (!pageInstruction) {\n const errorMessage = `Can not find data for \"${pathnameNormalized}\". Please check structure`;\n if (options.processError) return options.processError(404, errorMessage) || null;\n throw new Error(errorMessage);\n }\n\n return pageInstruction;\n };\n\n const revalidate = async (background?: boolean) => {\n if (\"then\" in structureParsedPromise) return structureParsedPromise;\n\n if (background) {\n const newData = await loadStructure(structureTemplate);\n structureParsedPromise = newData;\n } else {\n structureParsedPromise = loadStructure(structureTemplate).then((data) => {\n structureParsedPromise = data;\n return data;\n });\n }\n return structureParsedPromise;\n };\n\n return { Page, Sidebar, getStaticParams, getMetadata, getPageData, getPageInstruction, revalidate };\n};\n"],"names":["loadStructure","async","structureTemplate","structure","configuration","getConfiguration","parseStructure","items","initializeRobindoc","options","structureParsedPromise","then","data","matchingRules","matcher","map","rule","RegExp","replace","revalidate","background","newData","Page","pathname","props","pathnameNormalized","normalizePathname","every","test","errorMessage","processError","Error","cache","pages","pageInstruction","paths","Object","keys","targetPageIndex","indexOf","prevPagePathname","nextPagePathname","length","prev","title","next","breadcrumbs","crumbs","crumb","clientPages","entries","reduce","acc","clientPath","origPath","push","React","ArticleBase","provider","uri","undefined","Sidebar","tree","createElement","SidebarBase","getStaticParams","prefix","segmentsParamKey","pagesArr","prefixWithoutTrailingSlash","removeTrailingSlash","cur","startsWith","substring","split","getMetadata","getMetadataBase","getPageData","loadContent","raw","getPageInstruction"],"mappings":"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"}
package/lib/styles.css CHANGED
@@ -129,28 +129,6 @@
129
129
  }
130
130
  .r-powered-link:hover {
131
131
  color: var(--r-primary-900);
132
- }.r-docs-container {
133
- min-height: calc(100dvh - var(--r-header-height));
134
- overflow-wrap: break-word;
135
- box-sizing: border-box;
136
- }
137
- @media screen and (width >= 768px) {
138
- .r-docs-container {
139
- display: grid;
140
- justify-content: center;
141
- column-gap: 32px;
142
- grid-template-areas: "sidebar breadcrumbs" "sidebar contents" "sidebar content" "sidebar pagination";
143
- grid-template-columns: 1fr calc(100% - 248px);
144
- grid-template-rows: auto auto 1fr auto;
145
- }
146
- }
147
- @media screen and (width >= 1180px) {
148
- .r-docs-container {
149
- column-gap: 40px;
150
- grid-template-areas: "sidebar breadcrumbs contents" "sidebar content contents" "sidebar pagination contents";
151
- grid-template-columns: 200px 640px 238px;
152
- grid-template-rows: auto 1fr auto;
153
- }
154
132
  }.r-root {
155
133
  --r-header-height: 60px;
156
134
  position: relative;
@@ -384,6 +362,32 @@
384
362
  --r-cl-60: #86181d;
385
363
  --r-cl-61: #144620;
386
364
  --r-cl-62: #c24e00;
365
+ }.r-docs-container {
366
+ min-height: calc(100dvh - var(--r-header-height));
367
+ overflow-wrap: break-word;
368
+ box-sizing: border-box;
369
+ }
370
+ @media screen and (width >= 768px) {
371
+ .r-docs-container {
372
+ display: grid;
373
+ justify-content: center;
374
+ column-gap: 32px;
375
+ grid-template-areas: "sidebar breadcrumbs" "sidebar contents" "sidebar content" "sidebar pagination";
376
+ grid-template-columns: 1fr calc(100% - 248px);
377
+ grid-template-rows: auto auto 1fr auto;
378
+ }
379
+ }
380
+ @media screen and (width >= 1180px) {
381
+ .r-docs-container {
382
+ column-gap: 40px;
383
+ grid-template-areas: "sidebar breadcrumbs contents" "sidebar content contents" "sidebar pagination contents";
384
+ grid-template-columns: 200px 640px 238px;
385
+ grid-template-rows: auto 1fr auto;
386
+ }
387
+ }.r-page-container {
388
+ min-height: calc(100dvh - var(--r-header-height));
389
+ overflow-wrap: break-word;
390
+ box-sizing: border-box;
387
391
  }.r-blog-container {
388
392
  min-height: calc(100dvh - var(--r-header-height));
389
393
  overflow-wrap: break-word;
@@ -403,10 +407,6 @@
403
407
  top: 8px;
404
408
  left: 12px;
405
409
  z-index: 1001;
406
- }.r-page-container {
407
- min-height: calc(100dvh - var(--r-header-height));
408
- overflow-wrap: break-word;
409
- box-sizing: border-box;
410
410
  }.r-keylink.keylink-to-navigation:focus {
411
411
  margin-top: -40px;
412
412
  }.r-article {
@@ -1023,31 +1023,6 @@
1023
1023
  font-size: 14px;
1024
1024
  color: var(--r-main-600);
1025
1025
  margin: 12px 0 0;
1026
- }.r-header-social {
1027
- display: flex;
1028
- flex: 1;
1029
- justify-content: flex-end;
1030
- }
1031
- @media screen and (width >= 1024px) {
1032
- .r-header-social {
1033
- flex: none;
1034
- justify-content: unset;
1035
- }
1036
- }
1037
-
1038
- .r-header-social-git {
1039
- color: var(--r-main-700);
1040
- transition: color 0.2s;
1041
- }
1042
- .r-header-social-git:hover, .r-header-social-git:focus {
1043
- color: var(--r-main-950);
1044
- }.r-container {
1045
- max-width: 1180px;
1046
- padding-right: 12px;
1047
- padding-left: 12px;
1048
- margin-right: auto;
1049
- margin-left: auto;
1050
- box-sizing: border-box;
1051
1026
  }.r-dropdown {
1052
1027
  position: relative;
1053
1028
  color: var(--r-main-600);
@@ -1127,6 +1102,31 @@
1127
1102
 
1128
1103
  .r-dropdown-link._active {
1129
1104
  color: var(--r-primary-700);
1105
+ }.r-container {
1106
+ max-width: 1180px;
1107
+ padding-right: 12px;
1108
+ padding-left: 12px;
1109
+ margin-right: auto;
1110
+ margin-left: auto;
1111
+ box-sizing: border-box;
1112
+ }.r-header-social {
1113
+ display: flex;
1114
+ flex: 1;
1115
+ justify-content: flex-end;
1116
+ }
1117
+ @media screen and (width >= 1024px) {
1118
+ .r-header-social {
1119
+ flex: none;
1120
+ justify-content: unset;
1121
+ }
1122
+ }
1123
+
1124
+ .r-header-social-git {
1125
+ color: var(--r-main-700);
1126
+ transition: color 0.2s;
1127
+ }
1128
+ .r-header-social-git:hover, .r-header-social-git:focus {
1129
+ color: var(--r-main-950);
1130
1130
  }.r-theme-switcher {
1131
1131
  position: relative;
1132
1132
  display: flex;
@@ -1213,6 +1213,47 @@
1213
1213
  user-select: none;
1214
1214
  pointer-events: none;
1215
1215
  box-sizing: border-box;
1216
+ }.r-breadcrumbs {
1217
+ grid-area: breadcrumbs;
1218
+ list-style: none;
1219
+ margin: 0;
1220
+ padding: 20px 0 0;
1221
+ line-height: 2;
1222
+ }
1223
+ @media screen and (width >= 768px) {
1224
+ .r-breadcrumbs {
1225
+ padding: 32px 0 0;
1226
+ }
1227
+ }
1228
+
1229
+ .r-breadcrumb {
1230
+ display: inline;
1231
+ }
1232
+
1233
+ .r-breadcrumb._previous::after {
1234
+ content: "/";
1235
+ font-weight: 600;
1236
+ margin-inline: 8px;
1237
+ }
1238
+
1239
+ .r-breadcrumb-link {
1240
+ color: var(--r-main-700);
1241
+ text-decoration: none;
1242
+ }
1243
+ .r-breadcrumb-link:hover {
1244
+ color: var(--r-primary-800);
1245
+ }
1246
+
1247
+ .r-breadcrumb-link,
1248
+ .r-breadcrumb-title {
1249
+ display: inline;
1250
+ padding: 6px 0;
1251
+ margin: 0;
1252
+ }
1253
+
1254
+ .r-breadcrumb-title {
1255
+ color: var(--r-main-950);
1256
+ font-weight: 600;
1216
1257
  }.r-contents {
1217
1258
  grid-area: contents;
1218
1259
  }
@@ -1452,47 +1493,6 @@
1452
1493
  }
1453
1494
  .r-contents-git:hover {
1454
1495
  color: var(--r-main-900);
1455
- }.r-breadcrumbs {
1456
- grid-area: breadcrumbs;
1457
- list-style: none;
1458
- margin: 0;
1459
- padding: 20px 0 0;
1460
- line-height: 2;
1461
- }
1462
- @media screen and (width >= 768px) {
1463
- .r-breadcrumbs {
1464
- padding: 32px 0 0;
1465
- }
1466
- }
1467
-
1468
- .r-breadcrumb {
1469
- display: inline;
1470
- }
1471
-
1472
- .r-breadcrumb._previous::after {
1473
- content: "/";
1474
- font-weight: 600;
1475
- margin-inline: 8px;
1476
- }
1477
-
1478
- .r-breadcrumb-link {
1479
- color: var(--r-main-700);
1480
- text-decoration: none;
1481
- }
1482
- .r-breadcrumb-link:hover {
1483
- color: var(--r-primary-800);
1484
- }
1485
-
1486
- .r-breadcrumb-link,
1487
- .r-breadcrumb-title {
1488
- display: inline;
1489
- padding: 6px 0;
1490
- margin: 0;
1491
- }
1492
-
1493
- .r-breadcrumb-title {
1494
- color: var(--r-main-950);
1495
- font-weight: 600;
1496
1496
  }.r-pagination {
1497
1497
  grid-area: pagination;
1498
1498
  display: grid;
@@ -1584,8 +1584,6 @@
1584
1584
  opacity: 1;
1585
1585
  visibility: visible;
1586
1586
  pointer-events: all;
1587
- }.r-git-logo {
1588
- display: block;
1589
1587
  }.r-external-mark {
1590
1588
  position: relative;
1591
1589
  vertical-align: text-top;
@@ -1617,6 +1615,8 @@
1617
1615
  background-color: currentColor;
1618
1616
  border-radius: 0 0 0 4px;
1619
1617
  box-sizing: border-box;
1618
+ }.r-git-logo {
1619
+ display: block;
1620
1620
  }.r-anchor-heading:hover .r-anchor-heading-link {
1621
1621
  visibility: visible;
1622
1622
  opacity: 1;
@@ -1882,77 +1882,6 @@
1882
1882
  min-width: 24px;
1883
1883
  text-align: center;
1884
1884
  box-sizing: border-box;
1885
- }.r-copy-button {
1886
- position: relative;
1887
- padding: 6px;
1888
- background: none;
1889
- color: var(--r-main-700);
1890
- border: 0;
1891
- border-radius: 6px;
1892
- cursor: pointer;
1893
- font: inherit;
1894
- transition: color 0.2s, background-color 0.2s;
1895
- }
1896
-
1897
- .r-copy-button-success {
1898
- opacity: 0;
1899
- transform: scale(0.7);
1900
- transition: transform 0.2s;
1901
- }
1902
-
1903
- .r-copy-button-base {
1904
- transition: transform 0.2s;
1905
- }
1906
-
1907
- .r-copy-button:hover {
1908
- color: var(--r-main-950);
1909
- }
1910
-
1911
- .r-copy-button:active,
1912
- .r-copy-button._active {
1913
- color: var(--r-success);
1914
- }
1915
- .r-copy-button:active .r-copy-button-success,
1916
- .r-copy-button._active .r-copy-button-success {
1917
- opacity: 1;
1918
- transform: scale(1);
1919
- }
1920
- .r-copy-button:active .r-copy-button-base,
1921
- .r-copy-button._active .r-copy-button-base {
1922
- opacity: 0;
1923
- transform: scale(0.7);
1924
- }
1925
-
1926
- .r-copy-button-svg {
1927
- display: block;
1928
- }.r-copy-text {
1929
- position: relative;
1930
- cursor: pointer;
1931
- background: none;
1932
- border: 0;
1933
- padding: 0;
1934
- font: inherit;
1935
- padding: 6px 0;
1936
- }
1937
- .r-copy-text:hover {
1938
- color: var(--r-main-950);
1939
- }
1940
- .r-copy-text::before {
1941
- content: "";
1942
- position: absolute;
1943
- bottom: 0;
1944
- left: 0;
1945
- width: 100%;
1946
- height: 1px;
1947
- background: linear-gradient(to right, currentColor 30%, transparent 0%, transparent 80%, currentColor 80%) repeat-x 0px/8px;
1948
- transition: background 0.2s;
1949
- box-sizing: border-box;
1950
- opacity: 0.6;
1951
- }
1952
-
1953
- .r-copy-text:active,
1954
- .r-copy-text._active {
1955
- color: var(--r-success);
1956
1885
  }.r-content-link {
1957
1886
  text-decoration: none;
1958
1887
  color: inherit;
@@ -2002,6 +1931,77 @@
2002
1931
  background-color: currentColor;
2003
1932
  border-radius: 0 0 0 4px;
2004
1933
  box-sizing: border-box;
1934
+ }.r-copy-text {
1935
+ position: relative;
1936
+ cursor: pointer;
1937
+ background: none;
1938
+ border: 0;
1939
+ padding: 0;
1940
+ font: inherit;
1941
+ padding: 6px 0;
1942
+ }
1943
+ .r-copy-text:hover {
1944
+ color: var(--r-main-950);
1945
+ }
1946
+ .r-copy-text::before {
1947
+ content: "";
1948
+ position: absolute;
1949
+ bottom: 0;
1950
+ left: 0;
1951
+ width: 100%;
1952
+ height: 1px;
1953
+ background: linear-gradient(to right, currentColor 30%, transparent 0%, transparent 80%, currentColor 80%) repeat-x 0px/8px;
1954
+ transition: background 0.2s;
1955
+ box-sizing: border-box;
1956
+ opacity: 0.6;
1957
+ }
1958
+
1959
+ .r-copy-text:active,
1960
+ .r-copy-text._active {
1961
+ color: var(--r-success);
1962
+ }.r-copy-button {
1963
+ position: relative;
1964
+ padding: 6px;
1965
+ background: none;
1966
+ color: var(--r-main-700);
1967
+ border: 0;
1968
+ border-radius: 6px;
1969
+ cursor: pointer;
1970
+ font: inherit;
1971
+ transition: color 0.2s, background-color 0.2s;
1972
+ }
1973
+
1974
+ .r-copy-button-success {
1975
+ opacity: 0;
1976
+ transform: scale(0.7);
1977
+ transition: transform 0.2s;
1978
+ }
1979
+
1980
+ .r-copy-button-base {
1981
+ transition: transform 0.2s;
1982
+ }
1983
+
1984
+ .r-copy-button:hover {
1985
+ color: var(--r-main-950);
1986
+ }
1987
+
1988
+ .r-copy-button:active,
1989
+ .r-copy-button._active {
1990
+ color: var(--r-success);
1991
+ }
1992
+ .r-copy-button:active .r-copy-button-success,
1993
+ .r-copy-button._active .r-copy-button-success {
1994
+ opacity: 1;
1995
+ transform: scale(1);
1996
+ }
1997
+ .r-copy-button:active .r-copy-button-base,
1998
+ .r-copy-button._active .r-copy-button-base {
1999
+ opacity: 0;
2000
+ transform: scale(0.7);
2001
+ }
2002
+
2003
+ .r-copy-button-svg {
2004
+ display: block;
2005
2005
  }.r-li {
2006
2006
  line-height: 1.8;
2007
2007
  margin-block-start: 6px;
@@ -2030,6 +2030,8 @@
2030
2030
  padding: 6px 12px;
2031
2031
  border-bottom: 1px solid var(--r-main-400);
2032
2032
  border-collapse: collapse;
2033
+ }.r-thead {
2034
+ background-color: var(--r-main-100);
2033
2035
  }.r-th {
2034
2036
  padding: 6px 12px;
2035
2037
  border-top: 1px solid var(--r-main-500);
@@ -2064,8 +2066,6 @@
2064
2066
 
2065
2067
  .r-task-label-text {
2066
2068
  vertical-align: middle;
2067
- }.r-thead {
2068
- background-color: var(--r-main-100);
2069
2069
  }.r-task-ol {
2070
2070
  list-style: none;
2071
2071
  }.r-task-ul {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robindoc",
3
- "version": "0.0.0-experimental-fb135e6",
3
+ "version": "0.0.0-experimental-2c17c72",
4
4
  "description": "Robindoc is a framework for automatically creating documentation websites based on markdown files, built on React.js Server Components",
5
5
  "main": "./lib/index.js",
6
6
  "scripts": {