From 03d6053d87fac5ff96b6031978bbbfa6fcc79edd Mon Sep 17 00:00:00 2001 From: Lucas De Morais Date: Fri, 5 Apr 2024 18:54:34 +0200 Subject: [PATCH] Adds multi instance and versioning handler to Docusaurus V3 (#683) --- packages/plugin-docusaurus-v3/package.json | 23 +- packages/plugin-docusaurus-v3/src/index.ts | 309 ++++--- .../src/theme/SearchBar/index.css | 116 +-- .../src/theme/SearchBar/index.tsx | 179 ++-- packages/plugin-docusaurus-v3/src/utils.ts | 91 ++ pnpm-lock.yaml | 816 +++++++++++++++++- 6 files changed, 1170 insertions(+), 364 deletions(-) create mode 100644 packages/plugin-docusaurus-v3/src/utils.ts diff --git a/packages/plugin-docusaurus-v3/package.json b/packages/plugin-docusaurus-v3/package.json index 4a7f99fe8..4d23307c3 100644 --- a/packages/plugin-docusaurus-v3/package.json +++ b/packages/plugin-docusaurus-v3/package.json @@ -21,32 +21,33 @@ "watch": "tsc --watch" }, "dependencies": { - "@docusaurus/plugin-content-docs": "^3.0.1", - "@docusaurus/theme-common": "^3.0.1", - "@orama/highlight": "^0.1.2", + "@orama/highlight": "^0.1.5", "@orama/orama": "workspace:*", "@orama/plugin-analytics": "workspace:*", "@orama/plugin-parsedoc": "workspace:*", - "@orama/searchbox": "1.0.0-beta.13", + "@orama/searchbox": "^1.0.0-rc13", + "@oramacloud/client": "^1.0.14", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", - "jsdom": "^23.0.1", + "jsdom": "^23.2.0", "markdown-it": "^13.0.2", "pako": "^2.1.0", - "vfile-message": "^3.1.4", - "tslib": "^2.6.0" + "tslib": "^2.6.2", + "vfile-message": "^3.1.4" }, "devDependencies": { - "@docusaurus/types": "^3.0.1", "@types/jsdom": "^21.1.6", "@types/markdown-it": "^13.0.7", - "@types/pako": "^2.0.0", + "@types/pako": "^2.0.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@docusaurus/plugin-content-docs": ">= 3.2.0", + "@docusaurus/theme-common": ">= 3.2.0", + "@docusaurus/types": ">= 3.2.0", + "react": ">= 18.0.0", + "react-dom": ">= 18.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/plugin-docusaurus-v3/src/index.ts b/packages/plugin-docusaurus-v3/src/index.ts index 3bb44de0e..688bdb414 100644 --- a/packages/plugin-docusaurus-v3/src/index.ts +++ b/packages/plugin-docusaurus-v3/src/index.ts @@ -1,167 +1,228 @@ -import { readFileSync, writeFileSync } from 'node:fs' -import type { Plugin } from '@docusaurus/types' -import { cp } from 'node:fs/promises' -import { gzip as gzipCB } from 'node:zlib' -import { promisify } from 'node:util' -import { resolve } from 'node:path' +import { readFileSync, writeFileSync } from "node:fs" +import type { Plugin } from "@docusaurus/types" +import { cp } from "node:fs/promises" +import { gzip } from "pako" +import { resolve } from "node:path" // @ts-ignore -import { presets } from '@orama/searchbox' -import { create, insertMultiple, save } from '@orama/orama' -import { JSDOM } from 'jsdom' -import MarkdownIt from 'markdown-it' -import matter from 'gray-matter' -import { LoadedContent, type LoadedVersion } from '@docusaurus/plugin-content-docs' +import { presets } from "@orama/searchbox" +import { create, insertMultiple, save } from "@orama/orama" +import { JSDOM } from "jsdom" +import MarkdownIt from "markdown-it" +import matter from "gray-matter" +import { checkIndexAccess, createSnapshot, deployIndex } from "./utils" + +type CloudConfig = { + deploy: boolean, + endpoint: string + indexId: string, + oramaCloudAPIKey?: string + public_api_key: string, +} type PluginOptions = { analytics?: { enabled: boolean apiKey: string indexId: string - } + }, + cloud?: CloudConfig } -export default function OramaPluginDocusaurus( - ctx: { siteDir: any; generatedFilesDir: any }, - options: PluginOptions -): Plugin { +export default function OramaPluginDocusaurus(ctx: { + siteDir: any; + generatedFilesDir: any +}, options: PluginOptions): Plugin { let versions: any[] = [] return { - name: '@orama/plugin-docusaurus-v3', + name: "@orama/plugin-docusaurus-v3", getThemePath() { - return '../lib/theme' + return "../lib/theme" }, getTypeScriptThemePath() { - return '../src/theme' + return "../src/theme" }, getClientModules() { - return ['../lib/theme/SearchBar/index.css'] + return ["../lib/theme/SearchBar/index.css"] }, - async contentLoaded({ actions, allContent }) { - const isDevelopment = process.env.NODE_ENV === 'development' - const pluginContentDocsIds = Object.keys(allContent['docusaurus-plugin-content-docs'] ?? {}) - const loadedVersions = (allContent['docusaurus-plugin-content-docs']?.[pluginContentDocsIds[0]] as LoadedContent) - ?.loadedVersions - versions = loadedVersions.map((v) => v.versionName) - - await Promise.all( - versions.map((version) => - buildDevSearchData(ctx.siteDir, ctx.generatedFilesDir, allContent, version, pluginContentDocsIds) - ) - ) - - if (isDevelopment) { - actions.setGlobalData({ - pluginContentDocsIds, - analytics: options.analytics, - searchData: Object.fromEntries( - await Promise.all( - versions.map(async (version) => { - return [version, readFileSync(indexPath(ctx.generatedFilesDir, version))] - }) - ) - ) - }) - } else { - actions.setGlobalData({ pluginContentDocsIds, searchData: {} }) + async allContentLoaded({ actions, allContent }) { + const isDevelopment = process.env.NODE_ENV === "development" + let docsInstances: string[] = [] + const oramaCloudAPIKey = options.cloud?.oramaCloudAPIKey + const searchDataConfig = [ + { + docs: allContent["docusaurus-plugin-content-docs"] + }, + { + blogs: allContent["docusaurus-plugin-content-blog"] + }, + { + pages: allContent["docusaurus-plugin-content-pages"] + } + ] + + const deployConfig = options.cloud && { + enabled: options.cloud.deploy, + oramaCloudAPIKey, + indexId: options.cloud.indexId } + const allOramaDocsPromises: Promise[] = [] + + searchDataConfig.forEach((config) => { + const [key, value] = Object.entries(config)[0] + switch (key) { + case "docs": + Object.keys(value).forEach((docsInstance: any) => { + const loadedVersions = value?.[docsInstance]?.loadedVersions + versions = loadedVersions.map((v: any) => v.versionName) + docsInstances.push(docsInstance) + versions.flatMap(async (version) => { + const currentVersion = loadedVersions.find((v: any) => v.versionName === version) + allOramaDocsPromises.push(...currentVersion.docs.map((data: any) => generateDocs({ + siteDir:ctx.siteDir, + version, + category: docsInstance, + data + }))) + }) + }) + break + case "blogs": + const blogsInstances = Object.keys(value) + blogsInstances.forEach(async (instance) => { + const loadedInstance = value[instance] + allOramaDocsPromises.push(...loadedInstance.blogPosts.map(({ metadata }: any) => generateDocs({ + siteDir: ctx.siteDir, + version: "current", + category: "blogs", + data: metadata + }))) + }) + break + case "pages": + const pagesInstances = Object.keys(value) + pagesInstances.forEach(async (instance) => { + const loadedInstance = value[instance] + allOramaDocsPromises.push(...loadedInstance.map((data: any) => generateDocs({ + siteDir: ctx.siteDir, + version: "current", + category: "pages", + data + }))) + }) + break + } + }) + + const oramaDocs = [ + ...await Promise.all(allOramaDocsPromises) + ] + .flat() + .map((data) => ({ + title: data.title, + content: data.content, + section: data.originalTitle, + version: data.version, + path: data.path, + category: data.category + })) + + await deployData({ + oramaDocs, + generatedFilesDir: ctx.generatedFilesDir, + version: "current", + deployConfig + }) + + actions.setGlobalData({ + ...(isDevelopment && !options.cloud && { + searchData: Object.fromEntries([['current', readFileSync(indexPath(ctx.generatedFilesDir, 'current'))]]) + }), + docsInstances, + availableVersions: versions, + analytics: options.analytics, + ...(options.cloud && { + endpoint: { + url: options.cloud.endpoint, + key: options.cloud.public_api_key + } + }), + }) }, async postBuild({ outDir }) { - await Promise.all( - versions.map(async (version) => { - return cp(indexPath(ctx.generatedFilesDir, version), indexPath(outDir, version)) - }) - ) + await cp(indexPath(ctx.generatedFilesDir, "current"), indexPath(outDir, "current")) } } } -async function buildDevSearchData( +async function generateDocs({ + siteDir, + version, + category, + data +}: { siteDir: string, - generatedFilesDir: string, - allContent: any, version: string, - pluginContentDocsIds: string[] -) { - const blogs: any[] = [] - const pages: any[] = [] - const docs: any[] = [] - pluginContentDocsIds.forEach((key) => { - const loadedVersion = allContent['docusaurus-plugin-content-docs']?.[key]?.loadedVersions?.find( - (v: LoadedVersion) => v.versionName === version - ) - blogs.push( - ...(allContent['docusaurus-plugin-content-blog']?.[key]?.blogPosts?.map(({ metadata }: any) => metadata) ?? []) - ) - pages.push(...(allContent['docusaurus-plugin-content-pages']?.[key] ?? [])) - docs.push(...(loadedVersion?.docs ?? [])) - }) - - const oramaDocs = [ - ...(await Promise.all(blogs.map((data: any) => generateDocs(siteDir, data)))), - ...(await Promise.all(pages.map((data: any) => generateDocs(siteDir, data)))), - ...(await Promise.all(docs.map((data: any) => generateDocs(siteDir, data)))) - ] - .flat() - .map((data) => ({ - title: data.title, - content: data.content, - section: data.originalTitle, - path: data.path, - category: '' - })) - - const db = await create({ - schema: presets.docs.schema - }) - - await insertMultiple(db, oramaDocs as any) - - const serializedOrama = JSON.stringify(await save(db)) - const gzipedOrama = await gzip(serializedOrama) - - writeFileSync(indexPath(generatedFilesDir, version), gzipedOrama) -} - -async function generateDocs(siteDir: string, { title, permalink, source }: Record) { - const fileContent = readFileSync(source.replace('@site', siteDir), 'utf-8') + category: string, + data: Record +}) { + const { title, permalink, source } = data + const fileContent = readFileSync(source.replace("@site", siteDir), "utf-8") const contentWithoutFrontMatter = matter(fileContent).content return parseHTMLContent({ originalTitle: title, + version, + category, html: new MarkdownIt().render(contentWithoutFrontMatter), path: permalink }) } -function parseHTMLContent({ html, path, originalTitle }: { html: any; path: any; originalTitle: any }) { +function parseHTMLContent({ html, path, originalTitle, version, category }: { + html: any; + path: any; + originalTitle: any, + version: string, + category: string +}) { const dom = new JSDOM(html) const document = dom.window.document - const sections: { originalTitle: any; title: string; header: string; content: string; path: any }[] = [] + const sections: { + originalTitle: any; + title: string; + header: string; + content: string; + version: string; + category: string; + path: any + }[] = [] - const headers = document.querySelectorAll('h1, h2, h3, h4, h5, h6') + const headers = document.querySelectorAll("h1, h2, h3, h4, h5, h6") headers.forEach((header) => { const sectionTitle = header.textContent?.trim() const headerTag = header.tagName.toLowerCase() - let sectionContent = '' + let sectionContent = "" let sibling = header.nextElementSibling - while (sibling && !['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(sibling.tagName)) { - sectionContent += sibling.textContent?.trim() + '\n' + while (sibling && !["H1", "H2", "H3", "H4", "H5", "H6"].includes(sibling.tagName)) { + sectionContent += sibling.textContent?.trim() + "\n" sibling = sibling.nextElementSibling } sections.push({ originalTitle, - title: sectionTitle ?? '', + title: sectionTitle ?? "", header: headerTag, content: sectionContent, + version, + category, path }) }) @@ -170,7 +231,37 @@ function parseHTMLContent({ html, path, originalTitle }: { html: any; path: any; } function indexPath(outDir: string, version: string) { - return resolve(outDir, 'orama-search-index-@VERSION@.json.gz'.replace('@VERSION@', version)) + return resolve(outDir, "orama-search-index-@VERSION@.json.gz".replace("@VERSION@", version)) } -const gzip = promisify(gzipCB) +async function deployData({ + oramaDocs, + generatedFilesDir, + version, + deployConfig +}: { + oramaDocs: any[], + generatedFilesDir: string, + version: string, + deployConfig: { indexId: string, enabled: boolean, oramaCloudAPIKey: string | undefined } | undefined +}) { + const { ORAMA_CLOUD_BASE_URL } = process.env + const baseUrl = ORAMA_CLOUD_BASE_URL || "https://cloud.oramasearch.com" + + if (deployConfig?.enabled) { + await checkIndexAccess(baseUrl, deployConfig.oramaCloudAPIKey!, deployConfig.indexId!) + await createSnapshot(baseUrl, deployConfig.oramaCloudAPIKey!, deployConfig.indexId!, oramaDocs) + await deployIndex(baseUrl, deployConfig.oramaCloudAPIKey!, deployConfig.indexId!) + + } else { + const db = await create({ + schema: { ...presets.docs.schema, version: "enum" } + }) + + await insertMultiple(db, oramaDocs as any) + + const serializedOrama = JSON.stringify(await save(db)) + const gzipedOrama = gzip(serializedOrama) + writeFileSync(indexPath(generatedFilesDir, version), gzipedOrama) + } +} diff --git a/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.css b/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.css index 349f0e7d5..58271bd15 100644 --- a/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.css +++ b/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.css @@ -1,120 +1,12 @@ -[data-theme=light] .DocSearch { - --docsearch-muted-color: var(--ifm-color-emphasis-700); - --docsearch-container-background: rgba(94,100,112,.7); - --docsearch-modal-background: var(--ifm-color-secondary-lighter); - --docsearch-searchbox-background: var(--ifm-color-secondary); - --docsearch-searchbox-focus-background: var(--ifm-color-white); - --docsearch-hit-background: var(--ifm-color-white); - --docsearch-footer-background: var(--ifm-color-white) -} - -[data-theme=dark] .DocSearch { - --docsearch-text-color: var(--ifm-font-color-base); - --docsearch-muted-color: var(--ifm-color-secondary-darkest); - --docsearch-container-background: rgba(47,55,69,.7); - --docsearch-modal-background: var(--ifm-background-color); - --docsearch-searchbox-background: var(--ifm-background-color); - --docsearch-searchbox-focus-background: var(--ifm-color-black); - --docsearch-hit-background: var(--ifm-color-emphasis-100); - --docsearch-footer-background: var(--ifm-background-surface-color); - --docsearch-key-gradient: linear-gradient(-26.5deg,var(--ifm-color-emphasis-200) 0%,var(--ifm-color-emphasis-100) 100%) -} - -.DocSearch-Button-Container,.checkboxList_TMoE,.filterCheckbox_IByC,.showcaseFavoriteHeader_INmp { - align-items: center; - display: flex -} - .DocSearch-Button { - align-items: center; - background: var(--docsearch-searchbox-background); - border: 0; - border-radius: 40px; - color: var(--docsearch-muted-color); - cursor: pointer; - display: flex; - font-weight: 500; height: 36px; - justify-content: space-between; - padding: 0 8px; -webkit-user-select: none; user-select: none } -.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover { - background: var(--docsearch-searchbox-focus-background); - box-shadow: var(--docsearch-searchbox-shadow); - color: var(--docsearch-text-color); - outline: 0 -} - -.DocSearch-Search-Icon { - stroke-width: 1.6 -} - -.DocSearch-Button .DocSearch-Search-Icon { - color: var(--docsearch-text-color) -} - -.DocSearch-Button-Placeholder { - font-size: 1rem; - padding: 0 12px 0 6px -} - -.DocSearch-Input,.DocSearch-Link { - -webkit-appearance: none; - font: inherit -} - -.DocSearch-Button-Keys { - display: flex; - min-width: calc(40px + .8em) -} - -[data-theme=light] .DocSearch-Button-Key { - align-items: center; - background: #fff; +.DocSearch-Button kbd { border: 0; - border-radius: 3px; - box-shadow: #cdcdcd 0px 3px 6px 0px; - color: var(--docsearch-muted-color); - display: flex; - height: 18px; - justify-content: center; - margin-right: 0.4em; - padding: 0 0 2px; - position: relative; - top: -1px; - width: 20px; -} - -[data-theme=dark] .DocSearch-Button-Key { - align-items: center; - background: #4b4b4b; - border: 0; - border-radius: 3px; - box-shadow: var(--docsearch-key-shadow); - color: var(--docsearch-muted-color); - display: flex; - height: 18px; - justify-content: center; - margin-right: 0.4em; - padding: 0 0 2px; - position: relative; - top: -1px; - width: 20px; -} - -.DocSearch--active { - overflow: hidden!important -} - -.DocSearch-Container { - background-color: var(--docsearch-container-background); - height: 100vh; - left: 0; - position: fixed; - top: 0; - width: 100vw; - z-index: 200 + box-shadow: none; + font-size: .8rem !important; + padding: 0 !important; } \ No newline at end of file diff --git a/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.tsx b/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.tsx index 8bee4681c..a7906b52e 100644 --- a/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.tsx +++ b/packages/plugin-docusaurus-v3/src/theme/SearchBar/index.tsx @@ -1,128 +1,113 @@ // @ts-nocheck -import React, { useEffect, useMemo, useState } from 'react' -import useBaseUrl from '@docusaurus/useBaseUrl' -import { useLocation } from '@docusaurus/router' -import useIsBrowser from '@docusaurus/useIsBrowser' -import { useActiveVersion, useVersions } from '@docusaurus/plugin-content-docs/client' -import { useColorMode, useDocsPreferredVersion } from '@docusaurus/theme-common' -import { usePluginData } from '@docusaurus/useGlobalData' -import { ungzip } from 'pako' -import { RegisterSearchBox, presets, signals as $, events } from '@orama/searchbox' -import '@orama/searchbox/dist/index.css' +import React, { useEffect, useState } from "react" +import useBaseUrl from "@docusaurus/useBaseUrl" +import { useLocation } from "@docusaurus/router" +import useIsBrowser from "@docusaurus/useIsBrowser" +import { useActiveVersion } from "@docusaurus/plugin-content-docs/client" +import { useColorMode, useDocsPreferredVersion } from "@docusaurus/theme-common" +import { usePluginData } from "@docusaurus/useGlobalData" +import { ungzip } from "pako" +import { SearchBox, SearchButton, presets } from "@orama/searchbox" +import { OramaClient } from "@oramacloud/client" +import { create, insertMultiple } from "@orama/orama" +import { pluginAnalytics } from "@orama/plugin-analytics" +import "@orama/searchbox/dist/index.css" export function OramaSearch() { - const [oramaInstance, setOramaInstance] = useState(null) + const [searchBoxConfig, setSearchBoxConfig] = useState(null) const { pathname } = useLocation() - const { searchData, analytics, pluginContentDocsIds } = usePluginData('@orama/plugin-docusaurus-v3') - const pluginId = pluginContentDocsIds.filter((id: string) => pathname.includes(id))[0] || pluginContentDocsIds[0] - const baseURL = useBaseUrl('orama-search-index-@VERSION@.json.gz') + const { + searchData, + endpoint, + analytics, + docsInstances + } = usePluginData("@orama/plugin-docusaurus-v3") + const pluginId = docsInstances.filter((id: string) => pathname.includes(id))[0] || docsInstances[0] + const baseURL = useBaseUrl("orama-search-index-current.json.gz") const isBrowser = useIsBrowser() + const { colorMode } = useColorMode() const activeVersion = useActiveVersion(pluginId) - const versions = useVersions(pluginId) const { preferredVersion } = useDocsPreferredVersion(pluginId) - const { colorMode } = useColorMode() - - const version = useMemo(() => { - if (!isBrowser) { - return undefined - } else if (activeVersion) { - return activeVersion - } else if (preferredVersion) { - return preferredVersion - } - - return versions.find((v) => v.isLast) ?? versions[0] - }, [isBrowser, activeVersion, preferredVersion, versions]) - - useEffect(() => { - $.colorScheme.value = colorMode - }, [colorMode]) - - useEffect(() => { - window.addEventListener(events.seeItem, (event) => { - try { - const path = event.detail.item.document.path - window.location.pathname = path - } catch (e) { - console.error(e) - } - }) - - return () => { - window.removeEventListener(events.seeItem, () => {}) - } - }, []) + const currentVersion = activeVersion || preferredVersion useEffect(() => { async function loadOrama() { - let buffer - - if (searchData[version.name]) { - buffer = searchData[version.name].data + if (endpoint) { + setSearchBoxConfig({ + oramaInstance: new OramaClient({ + endpoint: endpoint.url, + api_key: endpoint.key + }) + }) } else { - const searchResponse = await fetch(baseURL.replace('@VERSION@', version.name)) + let buffer + + if (searchData.current) { + buffer = searchData.current.data + } else { + const searchResponse = await fetch(baseURL) + + if (searchResponse.status === 0) { + throw new Error(`Network error: ${await searchResponse.text()}`) + } else if (searchResponse.status !== 200) { + throw new Error(`HTTP error ${searchResponse.status}: ${await searchResponse.text()}`) + } - if (searchResponse.status === 0) { - throw new Error(`Network error: ${await searchResponse.text()}`) - } else if (searchResponse.status !== 200) { - throw new Error(`HTTP error ${searchResponse.status}: ${await searchResponse.text()}`) + buffer = await searchResponse.arrayBuffer() } - buffer = await searchResponse.arrayBuffer() - } + const deflated = ungzip(buffer, { to: "string" }) + const parsedDeflated = JSON.parse(deflated) + + const db = await create({ + schema: { ...presets.docs.schema, version: "enum" }, + plugins: [ + ...(analytics && [ + pluginAnalytics({ + apiKey: analytics.apiKey, + indexId: analytics.indexId, + }) + ] ?? []) + ] + }) - const deflated = ungzip(buffer, { to: 'string' }) + await insertMultiple(db, Object.values(parsedDeflated.docs.docs)) - setOramaInstance(deflated) + setSearchBoxConfig({ + oramaInstance: db + }) + } } - if (!isBrowser || !version) { + if (!isBrowser) { return } - loadOrama(version).catch((error) => { - console.error('Cannot load search index.', error) + loadOrama().catch((error) => { + console.error("Cannot load search index.", error) }) - }, [isBrowser, searchData, baseURL, version]) + }, [isBrowser]) - useEffect(() => { - if (oramaInstance) { - if (customElements.get('orama-searchbox') === undefined) { - RegisterSearchBox({ - oramaInstance, - preset: presets.docs.name, - show: false, - colorScheme: colorMode, - analytics - }) + const searchParams = { + ...(currentVersion && { + where: { + version: { "eq": currentVersion.name } } - } - }, [oramaInstance]) + }) + } return (
- - - {oramaInstance && } + + {searchBoxConfig && ( + + )}
) } diff --git a/packages/plugin-docusaurus-v3/src/utils.ts b/packages/plugin-docusaurus-v3/src/utils.ts new file mode 100644 index 000000000..a77b58db7 --- /dev/null +++ b/packages/plugin-docusaurus-v3/src/utils.ts @@ -0,0 +1,91 @@ +export const restFetcher = async (url: string, options?: any): Promise => { + const response = await fetch(url, options) + + if (response.status === 0) { + throw new Error(`Request failed (network error): ${await response.text()}`) + } else if (response.status >= 400) { + const error = new Error(`Request failed (HTTP error ${response.status})}`) + + ;(error as any).response = response + + throw error + } + + return await response.json() +} + +export const postFetcher = async (url: string, body: any, headers?: any): Promise => { + return await restFetcher(url, { + method: 'POST', + headers: { + ...headers, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }) +} + +export async function loggedOperation(preMessage: string, fn: () => Promise, postMessage: string) { + if (preMessage != null) { + console.debug(preMessage) + } + + try { + const response = await fn() + + if (postMessage != null) { + console.debug(postMessage) + } + + return response + } catch (error: any) { + throw new Error(`Error: ${error.message}`) + } +} + +export async function checkIndexAccess(baseUrl: string, APIKey: string, indexId: string) { + const result = await loggedOperation( + 'Start: Check index access', + async () => await restFetcher( + `${baseUrl}/api/v1/indexes/get-index?id=${indexId}`, + { + headers: { + Authorization: `Bearer ${APIKey}` + } + } + ), + 'End: Check index access (success)' + ) + + return { endpoint: result?.api_endpoint, api_key: result?.api_key } +} + +export async function createSnapshot(baseUrl: string, APIKey: string, indexId: string, documents: any[]) { + await loggedOperation( + 'Start: Create snapshot', + async () => + await postFetcher( + `${baseUrl}/api/v1/webhooks/${indexId}/snapshot`, + documents, + { + Authorization: `Bearer ${APIKey}` + } + ), + 'End: Create snapshot (success)' + ) +} + +export async function deployIndex(baseUrl: string, APIKey: string, indexId: string) { + await loggedOperation( + 'Start: Deploy index', + async () => + await postFetcher( + `${baseUrl}/api/v1/webhooks/${indexId}/deploy`, + {}, + { + Authorization: `Bearer ${APIKey}` + } + ), + 'End: Deploy index (success)' + ) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 304334959..67191dfb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,7 +104,7 @@ importers: version: link:../plugin-vitepress '@orama/searchbox': specifier: 1.0.0-beta.12 - version: 1.0.0-beta.12(@orama/highlight@0.1.2)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2) + version: 1.0.0-beta.12(@orama/highlight@0.1.5)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2) '@vitejs/plugin-vue': specifier: ^4.5.1 version: 4.5.1(vite@4.5.3)(vue@3.3.10) @@ -456,14 +456,17 @@ importers: packages/plugin-docusaurus-v3: dependencies: '@docusaurus/plugin-content-docs': - specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + specifier: '>= 3.2.0' + version: 3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) '@docusaurus/theme-common': - specifier: ^3.0.1 - version: 3.0.1(@docusaurus/types@3.0.1)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + specifier: '>= 3.2.0' + version: 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/types': + specifier: '>= 3.2.0' + version: 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) '@orama/highlight': - specifier: ^0.1.2 - version: 0.1.2 + specifier: ^0.1.5 + version: 0.1.5 '@orama/orama': specifier: workspace:* version: link:../orama @@ -474,8 +477,11 @@ importers: specifier: workspace:* version: link:../plugin-parsedoc '@orama/searchbox': - specifier: 1.0.0-beta.13 - version: 1.0.0-beta.13(@orama/highlight@0.1.2)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2) + specifier: ^1.0.0-rc13 + version: 1.0.0-rc13(@orama/highlight@0.1.5)(@orama/orama@packages+orama)(@oramacloud/client@1.0.14)(@preact/signals-core@1.6.0)(@preact/signals-react@2.0.1)(@r2wc/react-to-web-component@2.0.3)(react-dom@18.2.0)(react-markdown@9.0.1)(react@18.2.0)(typescript@5.0.3) + '@oramacloud/client': + specifier: ^1.0.14 + version: 1.0.14(typescript@5.0.3) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -483,8 +489,8 @@ importers: specifier: ^4.0.3 version: 4.0.3 jsdom: - specifier: ^23.0.1 - version: 23.0.1 + specifier: ^23.2.0 + version: 23.2.0 markdown-it: specifier: ^13.0.2 version: 13.0.2 @@ -492,15 +498,12 @@ importers: specifier: ^2.1.0 version: 2.1.0 tslib: - specifier: ^2.6.0 + specifier: ^2.6.2 version: 2.6.2 vfile-message: specifier: ^3.1.4 version: 3.1.4 devDependencies: - '@docusaurus/types': - specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) '@types/jsdom': specifier: ^21.1.6 version: 21.1.6 @@ -508,8 +511,8 @@ importers: specifier: ^13.0.7 version: 13.0.7 '@types/pako': - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.0.3 + version: 2.0.3 react: specifier: ^18.2.0 version: 18.2.0 @@ -699,7 +702,7 @@ importers: version: link:../plugin-data-persistence '@orama/searchbox': specifier: 1.0.0-beta.13 - version: 1.0.0-beta.13(@orama/highlight@0.1.2)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2) + version: 1.0.0-beta.13(@orama/highlight@0.1.5)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2) '@vitejs/plugin-vue': specifier: ^4.5.1 version: 4.5.1(vite@4.5.3)(vue@3.3.10) @@ -1072,6 +1075,14 @@ packages: fast-deep-equal: 3.1.3 dev: true + /@asamuzakjp/dom-selector@2.0.2: + resolution: {integrity: sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==} + dependencies: + bidi-js: 1.0.3 + css-tree: 2.3.1 + is-potential-custom-element-name: 1.0.1 + dev: false + /@astrojs/compiler@0.31.4: resolution: {integrity: sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==} dev: false @@ -4618,6 +4629,105 @@ packages: - webpack-cli dev: false + /@docusaurus/core@3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3): + resolution: {integrity: sha512-WTO6vW4404nhTmK9NL+95nd13I1JveFwZ8iOBYxb4xt+N2S3KzY+mm+1YtWw2vV37FbYfH+w+KrlrRaWuy5Hzw==} + engines: {node: '>=18.0'} + hasBin: true + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/generator': 7.23.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-runtime': 7.23.3(@babel/core@7.23.3) + '@babel/preset-env': 7.23.3(@babel/core@7.23.3) + '@babel/preset-react': 7.22.5(@babel/core@7.23.3) + '@babel/preset-typescript': 7.22.5(@babel/core@7.23.3) + '@babel/runtime': 7.23.2 + '@babel/runtime-corejs3': 7.23.2 + '@babel/traverse': 7.23.3 + '@docusaurus/cssnano-preset': 3.2.0 + '@docusaurus/logger': 3.2.0 + '@docusaurus/mdx-loader': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/react-loadable': 5.5.2(react@18.2.0) + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-common': 3.2.0(@docusaurus/types@3.2.0) + '@docusaurus/utils-validation': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@svgr/webpack': 6.5.1 + autoprefixer: 10.4.16(postcss@8.4.32) + babel-loader: 9.1.3(@babel/core@7.23.3)(webpack@5.89.0) + babel-plugin-dynamic-import-node: 2.3.3 + boxen: 6.2.1 + chalk: 4.1.2 + chokidar: 3.5.3 + clean-css: 5.3.2 + cli-table3: 0.6.3 + combine-promises: 1.1.0 + commander: 5.1.0 + copy-webpack-plugin: 11.0.0(webpack@5.89.0) + core-js: 3.33.2 + css-loader: 6.8.1(webpack@5.89.0) + css-minimizer-webpack-plugin: 4.2.2(clean-css@5.3.2)(webpack@5.89.0) + cssnano: 5.1.15(postcss@8.4.32) + del: 6.1.1 + detect-port: 1.5.1 + escape-html: 1.0.3 + eta: 2.2.0 + eval: 0.1.8 + file-loader: 6.2.0(webpack@5.89.0) + fs-extra: 11.1.1 + html-minifier-terser: 7.2.0 + html-tags: 3.3.1 + html-webpack-plugin: 5.5.3(webpack@5.89.0) + leven: 3.1.0 + lodash: 4.17.21 + mini-css-extract-plugin: 2.7.6(webpack@5.89.0) + p-map: 4.0.0 + postcss: 8.4.32 + postcss-loader: 7.3.3(postcss@8.4.32)(webpack@5.89.0) + prompts: 2.4.2 + react: 18.2.0 + react-dev-utils: 12.0.1(eslint@8.48.0)(typescript@5.0.3)(webpack@5.89.0) + react-dom: 18.2.0(react@18.2.0) + react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) + react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.2.0) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.89.0) + react-router: 5.3.4(react@18.2.0) + react-router-config: 5.1.1(react-router@5.3.4)(react@18.2.0) + react-router-dom: 5.3.4(react@18.2.0) + rtl-detect: 1.0.4 + semver: 7.5.4 + serve-handler: 6.1.5 + shelljs: 0.8.5 + terser-webpack-plugin: 5.3.9(@swc/core@1.3.27)(webpack@5.89.0) + tslib: 2.6.2 + update-notifier: 6.0.2 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0) + webpack: 5.89.0(@swc/core@1.3.27) + webpack-bundle-analyzer: 4.9.0 + webpack-dev-server: 4.15.1(webpack@5.89.0) + webpack-merge: 5.9.0 + webpackbar: 5.0.2(webpack@5.89.0) + transitivePeerDependencies: + - '@docusaurus/types' + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + /@docusaurus/cssnano-preset@2.4.3: resolution: {integrity: sha512-ZvGSRCi7z9wLnZrXNPG6DmVPHdKGd8dIn9pYbEOFiYihfv4uDR3UtxogmKf+rT8ZlKFf5Lqne8E8nt08zNM8CA==} engines: {node: '>=16.14'} @@ -4638,6 +4748,16 @@ packages: tslib: 2.6.2 dev: false + /@docusaurus/cssnano-preset@3.2.0: + resolution: {integrity: sha512-H88RXGUia7r/VF3XfyoA4kbwgpUZcKsObF6VvwBOP91EdArTf6lnHbJ/x8Ca79KS/zf98qaWyBGzW+5ez58Iyw==} + engines: {node: '>=18.0'} + dependencies: + cssnano-preset-advanced: 5.3.10(postcss@8.4.32) + postcss: 8.4.32 + postcss-sort-media-queries: 4.4.1(postcss@8.4.32) + tslib: 2.6.2 + dev: false + /@docusaurus/logger@2.4.3: resolution: {integrity: sha512-Zxws7r3yLufk9xM1zq9ged0YHs65mlRmtsobnFkdZTxWXdTYlWWLWdKyNKAsVC+D7zg+pv2fGbyabdOnyZOM3w==} engines: {node: '>=16.14'} @@ -4654,6 +4774,14 @@ packages: tslib: 2.6.2 dev: false + /@docusaurus/logger@3.2.0: + resolution: {integrity: sha512-Z1R1NcOGXZ8CkIJSvjvyxnuDDSlx/+1xlh20iVTw1DZRjonFmI3T3tTgk40YpXyWUYQpIgAoqqPMpuseMMdgRQ==} + engines: {node: '>=18.0'} + dependencies: + chalk: 4.1.2 + tslib: 2.6.2 + dev: false + /@docusaurus/mdx-loader@2.4.3(@docusaurus/types@2.4.3)(@swc/core@1.3.27)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-b1+fDnWtl3GiqkL0BRjYtc94FZrcDDBV1j8446+4tptB9BAOlePwG2p/pK6vGvfL53lkOsszXMghr2g67M0vCw==} engines: {node: '>=16.14'} @@ -4733,6 +4861,48 @@ packages: - webpack-cli dev: false + /@docusaurus/mdx-loader@3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-JtkI5o6R/rJSr1Y23cHKz085aBJCvJw3AYHihJ7r+mBX+O8EuQIynG0e6/XpbSCpr7Ino0U50UtxaXcEbFwg9Q==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/logger': 3.2.0 + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-validation': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@mdx-js/mdx': 3.0.0 + '@slorber/remark-comment': 1.0.0 + escape-html: 1.0.3 + estree-util-value-to-estree: 3.0.1 + file-loader: 6.2.0(webpack@5.89.0) + fs-extra: 11.1.1 + image-size: 1.0.2 + mdast-util-mdx: 3.0.0 + mdast-util-to-string: 4.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + rehype-raw: 7.0.0 + remark-directive: 3.0.0 + remark-emoji: 4.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.0 + stringify-object: 3.3.0 + tslib: 2.6.2 + unified: 11.0.4 + unist-util-visit: 5.0.0 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0) + vfile: 6.0.1 + webpack: 5.89.0(@swc/core@1.3.27) + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: false + /@docusaurus/module-type-aliases@2.4.3(@swc/core@1.3.27)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-cwkBkt1UCiduuvEAo7XZY01dJfRn7UR/75mBgOdb1hKknhrabJZ8YH+7savd/y9kLExPyrhe0QwdS9GuzsRRIA==} peerDependencies: @@ -4777,6 +4947,30 @@ packages: - uglify-js - webpack-cli + /@docusaurus/module-type-aliases@3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-jRSp9YkvBwwNz6Xgy0RJPsnie+Ebb//gy7GdbkJ2pW2gvvlYKGib2+jSF0pfIzvyZLulfCynS1KQdvDKdSl8zQ==} + peerDependencies: + react: '*' + react-dom: '*' + dependencies: + '@docusaurus/react-loadable': 5.5.2(react@18.2.0) + '@docusaurus/types': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@types/history': 4.7.11 + '@types/react': 18.2.45 + '@types/react-router-config': 5.0.7 + '@types/react-router-dom': 5.3.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) + react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.2.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: false + /@docusaurus/plugin-content-blog@2.4.3(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.3): resolution: {integrity: sha512-PVhypqaA0t98zVDpOeTqWUTvRqCEjJubtfFUQ7zJNYdbYTbS/E/ytq6zbLVsN/dImvemtO/5JQgjLxsh8XLo8Q==} engines: {node: '>=16.14'} @@ -4864,6 +5058,50 @@ packages: - webpack-cli dev: false + /@docusaurus/plugin-content-blog@3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3): + resolution: {integrity: sha512-MABqwjSicyHmYEfQueMthPCz18JkVxhK3EGhXTSRWwReAZ0UTuw9pG6+Wo+uXAugDaIcJH28rVZSwTDINPm2bw==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/logger': 3.2.0 + '@docusaurus/mdx-loader': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-common': 3.2.0(@docusaurus/types@3.2.0) + '@docusaurus/utils-validation': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + cheerio: 1.0.0-rc.12 + feed: 4.2.2 + fs-extra: 11.1.1 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + reading-time: 1.5.0 + srcset: 4.0.0 + tslib: 2.6.2 + unist-util-visit: 5.0.0 + utility-types: 3.10.0 + webpack: 5.89.0(@swc/core@1.3.27) + transitivePeerDependencies: + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + /@docusaurus/plugin-content-docs@2.4.3(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.3): resolution: {integrity: sha512-N7Po2LSH6UejQhzTCsvuX5NOzlC+HiXOVvofnEPj0WhMu1etpLEXE6a4aTxrtg95lQ5kf0xUIdjX9sh3d3G76A==} engines: {node: '>=16.14'} @@ -4949,6 +5187,49 @@ packages: - webpack-cli dev: false + /@docusaurus/plugin-content-docs@3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3): + resolution: {integrity: sha512-uuqhahmsBnirxOz+SXksnWt7+wc+iN4ntxNRH48BUgo7QRNLATWjHCgI8t6zrMJxK4o+QL9DhLaPDlFHs91B3Q==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/logger': 3.2.0 + '@docusaurus/mdx-loader': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/module-type-aliases': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-common': 3.2.0(@docusaurus/types@3.2.0) + '@docusaurus/utils-validation': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@types/react-router-config': 5.0.7 + combine-promises: 1.1.0 + fs-extra: 11.1.1 + js-yaml: 4.1.0 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + utility-types: 3.10.0 + webpack: 5.89.0(@swc/core@1.3.27) + transitivePeerDependencies: + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + /@docusaurus/plugin-content-pages@2.4.3(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.3): resolution: {integrity: sha512-txtDVz7y3zGk67q0HjG0gRttVPodkHqE0bpJ+7dOaTH40CQFLSh7+aBeGnPOTl+oCPG+hxkim4SndqPqXjQ8Bg==} engines: {node: '>=16.14'} @@ -5019,6 +5300,41 @@ packages: - webpack-cli dev: false + /@docusaurus/plugin-content-pages@3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3): + resolution: {integrity: sha512-4ofAN7JDsdb4tODO9OIrizWY5DmEJXr0eu+UDIkLqGP+gXXTahJZv8h2mlxO+lPXGXRCVBOfA14OG1hOYJVPwA==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/mdx-loader': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-validation': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + fs-extra: 11.1.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + webpack: 5.89.0(@swc/core@1.3.27) + transitivePeerDependencies: + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + /@docusaurus/plugin-debug@2.4.3(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.0.3): resolution: {integrity: sha512-LkUbuq3zCmINlFb+gAd4ZvYr+bPAzMC0hwND4F7V9bZ852dCX8YoWyovVUBKq4er1XsOwSQaHmNGtObtn8Av8Q==} engines: {node: '>=16.14'} @@ -5643,6 +5959,49 @@ packages: - webpack-cli dev: false + /@docusaurus/theme-common@3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3): + resolution: {integrity: sha512-sFbw9XviNJJ+760kAcZCQMQ3jkNIznGqa6MQ70E5BnbP+ja36kGgPOfjcsvAcNey1H1Rkhh3p2Mhf4HVLdKVVw==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/mdx-loader': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/module-type-aliases': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/plugin-content-blog': 3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/plugin-content-docs': 3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/plugin-content-pages': 3.2.0(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.0.3) + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-common': 3.2.0(@docusaurus/types@3.2.0) + '@types/history': 4.7.11 + '@types/react': 18.2.45 + '@types/react-router-config': 5.0.7 + clsx: 2.0.0 + parse-numeric-range: 1.3.0 + prism-react-renderer: 2.3.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + utility-types: 3.10.0 + transitivePeerDependencies: + - '@docusaurus/types' + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + /@docusaurus/theme-search-algolia@2.4.3(@docusaurus/types@2.4.3)(@swc/core@1.3.27)(eslint@8.48.0)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.11.0)(typescript@5.0.3): resolution: {integrity: sha512-jziq4f6YVUB5hZOB85ELATwnxBz/RmSLD3ksGQOLDPKVzat4pmI8tddNWtriPpxR04BNT+ZfpPUMFkNFetSW1Q==} engines: {node: '>=16.14'} @@ -5775,12 +6134,35 @@ packages: - uglify-js - webpack-cli - /@docusaurus/types@3.0.1(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg==} + /@docusaurus/types@3.0.1(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@types/history': 4.7.11 + '@types/react': 18.2.45 + commander: 5.1.0 + joi: 17.11.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) + utility-types: 3.10.0 + webpack: 5.89.0(@swc/core@1.3.27) + webpack-merge: 5.9.0 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + + /@docusaurus/types@3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uG3FfTkkkbZIPPNYx6xRfZHKeGyRd/inIT1cqvYt1FobFLd+7WhRXrSBqwJ9JajJjEAjNioRMVFgGofGf/Wdww==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: + '@mdx-js/mdx': 3.0.0 '@types/history': 4.7.11 '@types/react': 18.2.45 commander: 5.1.0 @@ -5794,8 +6176,10 @@ packages: transitivePeerDependencies: - '@swc/core' - esbuild + - supports-color - uglify-js - webpack-cli + dev: false /@docusaurus/utils-common@2.4.3(@docusaurus/types@2.4.3): resolution: {integrity: sha512-/jascp4GbLQCPVmcGkPzEQjNaAk3ADVfMtudk49Ggb+131B1WDD6HqlSmDf8MxGdy7Dja2gc+StHf01kiWoTDQ==} @@ -5823,6 +6207,19 @@ packages: tslib: 2.6.2 dev: false + /@docusaurus/utils-common@3.2.0(@docusaurus/types@3.2.0): + resolution: {integrity: sha512-WEQT5L2lT/tBQgDRgeZQAIi9YJBrwEILb1BuObQn1St3T/4K1gx5fWwOT8qdLOov296XLd1FQg9Ywu27aE9svw==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true + dependencies: + '@docusaurus/types': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + tslib: 2.6.2 + dev: false + /@docusaurus/utils-validation@2.4.3(@docusaurus/types@2.4.3)(@swc/core@1.3.27): resolution: {integrity: sha512-G2+Vt3WR5E/9drAobP+hhZQMaswRwDlp6qOMi7o7ZypB+VO7N//DZWhZEwhcRGepMDJGQEwtPv7UxtYwPL9PBw==} engines: {node: '>=16.14'} @@ -5859,6 +6256,25 @@ packages: - webpack-cli dev: false + /@docusaurus/utils-validation@3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27): + resolution: {integrity: sha512-rCzMTqwNrBrEOyU8EaD1fYWdig4TDhfj+YLqB8DY68VUAqSIgbY+yshpqFKB0bznFYNBJbn0bGpvVuImQOa/vA==} + engines: {node: '>=18.0'} + dependencies: + '@docusaurus/logger': 3.2.0 + '@docusaurus/utils': 3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27) + '@docusaurus/utils-common': 3.2.0(@docusaurus/types@3.2.0) + joi: 17.11.0 + js-yaml: 4.1.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: false + /@docusaurus/utils@2.4.3(@docusaurus/types@2.4.3)(@swc/core@1.3.27): resolution: {integrity: sha512-fKcXsjrD86Smxv8Pt0TBFqYieZZCPh4cbf9oszUq/AMhZn3ujwpKaVYZACPX8mmjtYx0JOgNx52CREBfiGQB4A==} engines: {node: '>=16.14'} @@ -5928,6 +6344,43 @@ packages: - webpack-cli dev: false + /@docusaurus/utils@3.2.0(@docusaurus/types@3.2.0)(@swc/core@1.3.27): + resolution: {integrity: sha512-3rgrE7iL60yV2JQivlcoxUNNTK2APmn+OHLUmTvX2pueIM8DEOCEFHpJO4MiWjFO7V/Wq3iA/W1M03JnjdugVw==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true + dependencies: + '@docusaurus/logger': 3.2.0 + '@docusaurus/types': 3.2.0(@swc/core@1.3.27)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils-common': 3.2.0(@docusaurus/types@3.2.0) + '@svgr/webpack': 6.5.1 + escape-string-regexp: 4.0.0 + file-loader: 6.2.0(webpack@5.89.0) + fs-extra: 11.1.1 + github-slugger: 1.5.0 + globby: 11.1.0 + gray-matter: 4.0.3 + jiti: 1.21.0 + js-yaml: 4.1.0 + lodash: 4.17.21 + micromatch: 4.0.5 + prompts: 2.4.2 + resolve-pathname: 3.0.0 + shelljs: 0.8.5 + tslib: 2.6.2 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0) + webpack: 5.89.0(@swc/core@1.3.27) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: false + /@emmetio/abbreviation@2.3.3: resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} dependencies: @@ -7254,7 +7707,13 @@ packages: /@orama/highlight@0.1.2: resolution: {integrity: sha512-B48PnxFwRRHBeEIkmKI38tZmpQDWdt6o4bch5dZaChdZh0pwPHtostMv++eVlNv3/qLtfcdLoSYHWvoN9Mp0Lw==} dependencies: - '@orama/orama': 2.0.10 + '@orama/orama': 2.0.12 + dev: false + + /@orama/highlight@0.1.5: + resolution: {integrity: sha512-OgCeZNyXl+1fFHOl7t+AF46ryu9aJ+4vabx+L69PJsYcfVWC571lUcFdTEmlRHY7bFZby5nAdk10iT3s+Sr2YA==} + dependencies: + '@orama/orama': 2.0.12 dev: false /@orama/orama@1.2.11: @@ -7262,18 +7721,26 @@ packages: engines: {node: '>= 16.0.0'} dev: false - /@orama/orama@2.0.10: - resolution: {integrity: sha512-TpV0o0LatTS0SmU2MIIo54Wz9bEv9WidLyys8rXt4+uT1+vZ3AjFcKUv2NTODjVxWlB2HJSA7ZWtM4OnMqbuww==} + /@orama/orama@2.0.12: + resolution: {integrity: sha512-AtGPDKm4S30YYkFsB2JizIDhYX8Sv/opoarHmnLjPVDWswzbWVyFWz/45ZsS6jDSpIfbHA2wz+sKRUvR74Ny0g==} engines: {node: '>= 16.0.0'} dev: false - /@orama/plugin-analytics@2.0.10: - resolution: {integrity: sha512-Z+s4Sxg+cckzHwltjf1Eb1zf9Tt6/3xvQccV5Tu7TQhYaDOLADy95OLPDycXM4/O2+3/GC52gudEWHW98YwfWA==} + /@orama/plugin-analytics@2.0.12: + resolution: {integrity: sha512-zI1FWdMCgvk7XHdJzDqyNMDfMbNt2fe7WKOFWBMbWvRx+EFUiLGyRZtMlvXVSWeGqMetYjM+fPqamSn4VDi0Ug==} + dependencies: + '@orama/orama': 2.0.12 + dev: false + + /@orama/plugin-secure-proxy@2.0.12(typescript@5.0.3): + resolution: {integrity: sha512-aYfZCKMMrjJdUsuotHcfwIB5eEm3eqNSW/Vjo2MjpM/6eO8a3MlA/E4rmJFiDlsd8hsKVhSdT+sBDgm8zYZEPQ==} dependencies: - '@orama/orama': 2.0.10 + '@oramacloud/client': 1.0.14(typescript@5.0.3) + transitivePeerDependencies: + - typescript dev: false - /@orama/searchbox@1.0.0-beta.12(@orama/highlight@0.1.2)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2): + /@orama/searchbox@1.0.0-beta.12(@orama/highlight@0.1.5)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2): resolution: {integrity: sha512-dRL/JcOiM1C0wOFhSBkpUDO2pHWoEoufx3S3gwurLBrLMrS0450oMs1dDAkK5eManQN0VTu3NtZElE2Ib2Y9dQ==} peerDependencies: '@orama/highlight': ^0.1.2 @@ -7284,7 +7751,7 @@ packages: preact: ^10.19.1 preact-custom-element: ^4.3.0 dependencies: - '@orama/highlight': 0.1.2 + '@orama/highlight': 0.1.5 '@orama/orama': link:packages/orama '@oramacloud/client': 1.0.0-beta.21(typescript@5.0.3) '@preact/signals': 1.2.2(preact@10.19.2) @@ -7298,7 +7765,7 @@ packages: - postcss dev: false - /@orama/searchbox@1.0.0-beta.13(@orama/highlight@0.1.2)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2): + /@orama/searchbox@1.0.0-beta.13(@orama/highlight@0.1.5)(@orama/orama@packages+orama)(@oramacloud/client@1.0.0-beta.21)(@preact/signals-core@1.5.0)(@preact/signals@1.2.2)(postcss@8.4.32)(preact-custom-element@4.3.0)(preact@10.19.2): resolution: {integrity: sha512-u1KntN2l1Dg52/UVwh9wZdu8eG/kmk42FjgWZ7ExM+CMZCr6aatAHVPuZnecDZGHV4/t4XV4W9tGgvZ1MxnsJg==} peerDependencies: '@orama/highlight': ^0.1.2 @@ -7309,10 +7776,10 @@ packages: preact: ^10.19.1 preact-custom-element: ^4.3.0 dependencies: - '@orama/highlight': 0.1.2 + '@orama/highlight': 0.1.5 '@orama/orama': link:packages/orama - '@orama/plugin-analytics': 2.0.10 - '@oramacloud/client': 1.0.0-beta.21(typescript@5.0.3) + '@orama/plugin-analytics': 2.0.12 + '@oramacloud/client': 1.0.0-beta.21(typescript@5.2.2) '@preact/signals': 1.2.2(preact@10.19.2) '@preact/signals-core': 1.5.0 object-to-css-variables: 0.2.1 @@ -7324,6 +7791,50 @@ packages: - postcss dev: false + /@orama/searchbox@1.0.0-rc13(@orama/highlight@0.1.5)(@orama/orama@packages+orama)(@oramacloud/client@1.0.14)(@preact/signals-core@1.6.0)(@preact/signals-react@2.0.1)(@r2wc/react-to-web-component@2.0.3)(react-dom@18.2.0)(react-markdown@9.0.1)(react@18.2.0)(typescript@5.0.3): + resolution: {integrity: sha512-dpg0xgbfIoyvgqeRNneFTLweArLIIKPOq+ElPgl1S35Yu7KxzXbYVZgUEYRjqi7q4V0XcrrWL9UWeEnmeTt+AA==} + peerDependencies: + '@orama/highlight': ^0.1.5 + '@orama/orama': 2.0.12 + '@oramacloud/client': 1.0.14 + '@preact/signals-core': ^1.6.0 + '@preact/signals-react': ^2.0.1 + '@r2wc/react-to-web-component': ^2.0.3 + react: ^18.2.0 + react-dom: ^18.2.0 + react-markdown: ^9.0.1 + dependencies: + '@orama/highlight': 0.1.5 + '@orama/orama': link:packages/orama + '@orama/plugin-analytics': 2.0.12 + '@orama/plugin-secure-proxy': 2.0.12(typescript@5.0.3) + '@oramacloud/client': 1.0.14(typescript@5.0.3) + '@phosphor-icons/react': 2.1.4(react-dom@18.2.0)(react@18.2.0) + '@preact/signals-core': 1.6.0 + '@preact/signals-react': 2.0.1(react@18.2.0) + '@r2wc/react-to-web-component': 2.0.3(react-dom@18.2.0)(react@18.2.0) + dedent: 1.5.1 + lodash.debounce: 4.0.8 + object-to-css-variables: 0.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-markdown: 9.0.1(@types/react@18.2.45)(react@18.2.0) + react-syntax-highlighter: 15.5.0(react@18.2.0) + transitivePeerDependencies: + - babel-plugin-macros + - typescript + dev: false + + /@orama/stemmers@2.0.12: + resolution: {integrity: sha512-CZOeBZLhq+rBWmgvVMMf3qOIm2aX9hLNe1FN1YNWKONjvQRxa33nmCU8k4gCB8c0g6Nmd+d8P1TDfDoNJtcrWw==} + engines: {node: '>= 16.0.0'} + dev: false + + /@orama/stopwords@2.0.12: + resolution: {integrity: sha512-xazDKQ0ZvDz34wFqvSigD+sl6bxSfrbguRcMFaSLLCPIrICBnBaMWQQ1d7IrHpHfPFk7OfUrC+MdVNq6n7RuVA==} + engines: {node: '>= 16.0.0'} + dev: false + /@oramacloud/client@1.0.0-beta.21(typescript@5.0.3): resolution: {integrity: sha512-yubgcBA1LrxpxkJlc4KG+pafHaKaQhmm/xG2cAtQtHKNQULcSHYpWUoKoypoj4XQxFHb9QoTSl2HptXXZFYX6g==} dependencies: @@ -7335,10 +7846,37 @@ packages: - typescript dev: false + /@oramacloud/client@1.0.0-beta.21(typescript@5.2.2): + resolution: {integrity: sha512-yubgcBA1LrxpxkJlc4KG+pafHaKaQhmm/xG2cAtQtHKNQULcSHYpWUoKoypoj4XQxFHb9QoTSl2HptXXZFYX6g==} + dependencies: + '@orama/orama': 1.2.11 + '@paralleldrive/cuid2': 2.2.2 + react: 18.2.0 + vue: 3.3.10(typescript@5.2.2) + transitivePeerDependencies: + - typescript + dev: false + + /@oramacloud/client@1.0.14(typescript@5.0.3): + resolution: {integrity: sha512-cWoY7pq45lq5E6xCYXaXNFsYnDFzeOTV1UvSg5f+8V3MS5kPlK0aAdpHEEQIyNFhAhxji/qEIA8+icEs0oy6XQ==} + dependencies: + '@orama/orama': 2.0.12 + '@orama/stemmers': 2.0.12 + '@orama/stopwords': 2.0.12 + '@paralleldrive/cuid2': 2.2.2 + lodash: 4.17.21 + lodash.debounce: 4.0.8 + lodash.throttle: 4.1.1 + react: 18.2.0 + vue: 3.3.10(typescript@5.0.3) + transitivePeerDependencies: + - typescript + dev: false + /@oramacloud/client@1.0.4(typescript@5.0.3): resolution: {integrity: sha512-AsIJBwbUzZWfEtuR78WOOXD4ckjXpgw97scxkqmzp6/Gghp+smWb3pVNnqc16vavNnNJuwMDcL44S874JrWqkA==} dependencies: - '@orama/orama': 2.0.10 + '@orama/orama': 2.0.12 '@paralleldrive/cuid2': 2.2.2 react: 18.2.0 vue: 3.3.10(typescript@5.0.3) @@ -7352,6 +7890,17 @@ packages: '@noble/hashes': 1.3.2 dev: false + /@phosphor-icons/react@2.1.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EeNwgcg1aeK5vG/JYVTullnZzk5zjftOrjLb1iYetyhn5ImFFREc+xG0FAB/dAY277DGDSF8pNdNbqG1SUKIxQ==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8' + react-dom: '>= 16.8' + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -7408,15 +7957,44 @@ packages: /@preact/signals-core@1.5.0: resolution: {integrity: sha512-U2diO1Z4i1n2IoFgMYmRdHWGObNrcuTRxyNEn7deSq2cru0vj0583HYQZHsAqcs7FE+hQyX3mjIV7LAfHCvy8w==} + /@preact/signals-core@1.6.0: + resolution: {integrity: sha512-O/XGxwP85h1F7+ouqTMOIZ3+V1whfaV9ToIVcuyGriD4JkSD00cQo54BKdqjvBJxbenvp7ynfqRHEwI6e+NIhw==} + dev: false + + /@preact/signals-react@2.0.1(react@18.2.0): + resolution: {integrity: sha512-QQoxAPiliH6oeZPF5OZHmyala5zyFya0ZCp/A0lR4y6R9wO4lT7GdtYg5UFlmKNWMcFN6PiAjNPMTiNFMmnCpw==} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x + dependencies: + '@preact/signals-core': 1.6.0 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /@preact/signals@1.2.2(preact@10.19.2): resolution: {integrity: sha512-ColCqdo4cRP18bAuIR4Oik5rDpiyFtPIJIygaYPMEAwTnl4buWkBOflGBSzhYyPyJfKpkwlekrvK+1pzQ2ldWw==} peerDependencies: preact: 10.x dependencies: - '@preact/signals-core': 1.5.0 + '@preact/signals-core': 1.6.0 preact: 10.19.2 dev: false + /@r2wc/core@1.0.1: + resolution: {integrity: sha512-3Q/IEvGoJ8E+wy8Y6vo+Hot35z89Ei0Ghr7WAhprxz1LhuCAaA2BIYXY8GjaCvJLGhiOLuiPMWb8DKfbrUzEMg==} + dev: false + + /@r2wc/react-to-web-component@2.0.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nlDJ0LHiWLG/EFB5tBtA+9KLF2oMBeDSAXL08NUzAuj/ac+V0NkMl/RvCFdDFnyrPQqpzpD9uOvOY2E5IFpdCQ==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@r2wc/core': 1.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@rollup/rollup-android-arm-eabi@4.6.1: resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==} cpu: [arm] @@ -9134,6 +9712,10 @@ packages: resolution: {integrity: sha512-10+iaz93qR5WYxTo+PMifD5TSxiOtdRaxBf7INGGXMQgTCu8Z/7GYWYFUOS3q/G0nE5boj1r4FEB+WSy7s5gbA==} dev: true + /@types/pako@2.0.3: + resolution: {integrity: sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==} + dev: true + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} @@ -11061,6 +11643,12 @@ packages: log-update: 4.0.0 dev: true + /bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + dependencies: + require-from-string: 2.0.2 + dev: false + /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} @@ -12324,6 +12912,14 @@ packages: source-map: 0.6.1 dev: false + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: false + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -12423,6 +13019,13 @@ packages: rrweb-cssom: 0.6.0 dev: false + /cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} + dependencies: + rrweb-cssom: 0.6.0 + dev: false + /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -12591,6 +13194,15 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: false + /deep-equal@2.2.1: resolution: {integrity: sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==} dependencies: @@ -14415,6 +15027,12 @@ packages: dependencies: reusify: 1.0.4 + /fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + dependencies: + format: 0.2.2 + dev: false + /fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} dependencies: @@ -15669,6 +16287,10 @@ packages: resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==} dev: true + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: false + /history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: @@ -15795,6 +16417,10 @@ packages: resolution: {integrity: sha512-/7gfPjDXatJvC1qAbjsRwx0NtMSw3PuOqqnmhVgvdhwphK8e0xmh6+eOKHMQ5GW3IzaE6mxYgKloqQhC1/dwrA==} dev: false + /html-url-attributes@3.0.0: + resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==} + dev: false + /html-void-elements@1.0.5: resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} dev: false @@ -16835,6 +17461,42 @@ packages: - utf-8-validate dev: false + /jsdom@23.2.0: + resolution: {integrity: sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + '@asamuzakjp/dom-selector': 2.0.2 + cssstyle: 4.0.1 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + is-potential-custom-element-name: 1.0.1 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.16.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -17197,6 +17859,10 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: false + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -17273,6 +17939,13 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + dev: false + /lru-cache@10.1.0: resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} @@ -17781,6 +18454,10 @@ packages: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: false + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: false + /mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: false @@ -20318,6 +20995,11 @@ packages: string-length: 6.0.0 dev: true + /prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + dev: false + /prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} @@ -20690,6 +21372,28 @@ packages: webpack: 5.89.0(@swc/core@1.3.27) dev: false + /react-markdown@9.0.1(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + dependencies: + '@types/hast': 3.0.3 + '@types/react': 18.2.45 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.2.0 + html-url-attributes: 3.0.0 + mdast-util-to-hast: 13.0.2 + react: 18.2.0 + remark-parse: 11.0.0 + remark-rehype: 11.0.0 + unified: 11.0.4 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /react-reconciler@0.29.0(react@18.2.0): resolution: {integrity: sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==} engines: {node: '>=0.10.0'} @@ -20787,6 +21491,19 @@ packages: tiny-warning: 1.0.3 dev: false + /react-syntax-highlighter@15.5.0(react@18.2.0): + resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} + peerDependencies: + react: '>= 0.14.0' + dependencies: + '@babel/runtime': 7.23.2 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.29.0 + react: 18.2.0 + refractor: 3.6.0 + dev: false + /react-textarea-autosize@8.5.3(react@17.0.2): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} @@ -20924,6 +21641,14 @@ packages: which-builtin-type: 1.1.3 dev: true + /refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + dev: false + /regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} @@ -20943,7 +21668,7 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.23.2 dev: true /regenerator-transform@0.15.2: @@ -24325,6 +25050,14 @@ packages: react: 17.0.2 dev: false + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -25245,6 +25978,19 @@ packages: utf-8-validate: optional: true + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xdg-basedir@4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'}