Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/orama_sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,5 @@ jobs:
run: pnpm sync:orama
env:
ORAMA_PRIVATE_API_KEY: ${{ secrets.ORAMA_PRIVATE_API_KEY }}
ORAMA_PRIVATE_INDEX_ID: ${{ secrets.ORAMA_PRIVATE_INDEX_ID }}
ORAMA_DATASOURCE_ID: ${{ secrets.ORAMA_DATASOURCE_ID }}
ORAMA_PROJECT_ID: ${{ secrets.ORAMA_PROJECT_ID }}
4 changes: 3 additions & 1 deletion env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ interface ImportMeta {

declare namespace NodeJS {
interface ProcessEnv {
readonly ORAMA_PROJECT_ID: string;
readonly ORAMA_DATASOURCE_ID: string;
readonly ORAMA_PUBLIC_API_KEY: string;
readonly ORAMA_PRIVATE_API_KEY: string;
readonly ORAMA_PRIVATE_INDEX_ID: string;
}
}

Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"dependencies": {
"@kobalte/core": "^0.13.11",
"@kobalte/solidbase": "^0.2.20",
"@oramacloud/client": "^2.1.4",
"@orama/core": "^1.2.14",
"@solid-primitives/event-listener": "^2.4.3",
"@solid-primitives/marker": "^0.2.2",
"@solid-primitives/media": "^2.3.3",
Expand Down Expand Up @@ -62,4 +62,4 @@
"node": ">=24",
"pnpm": ">=10"
}
}
}
64 changes: 32 additions & 32 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 8 additions & 2 deletions public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@
- [Routing](https://docs.solidjs.com/solid-start/building-your-application/routing)
- [API routes](https://docs.solidjs.com/solid-start/building-your-application/api-routes)
- [CSS and styling](https://docs.solidjs.com/solid-start/building-your-application/css-and-styling)
- [Data loading](https://docs.solidjs.com/solid-start/building-your-application/data-loading)
- [Data fetching](https://docs.solidjs.com/solid-start/building-your-application/data-fetching)
- [Data mutation](https://docs.solidjs.com/solid-start/building-your-application/data-mutation)
- [Head and metadata](https://docs.solidjs.com/solid-start/building-your-application/head-and-metadata)
- [Route Pre-rendering](https://docs.solidjs.com/solid-start/building-your-application/route-prerendering)
- [Static assets](https://docs.solidjs.com/solid-start/building-your-application/static-assets)
Expand Down Expand Up @@ -176,6 +177,11 @@
- [Actions](https://docs.solidjs.com/solid-router/concepts/actions)
- [Single page applications](https://docs.solidjs.com/solid-router/rendering-modes/spa)
- [Server side rendering](https://docs.solidjs.com/solid-router/rendering-modes/ssr)
- [Queries](https://docs.solidjs.com/solid-router/data-fetching/queries)
- [Streaming](https://docs.solidjs.com/solid-router/data-fetching/streaming)
- [Revalidation](https://docs.solidjs.com/solid-router/data-fetching/revalidation)
- [Preload data](https://docs.solidjs.com/solid-router/data-fetching/how-to/preload-data)
- [Handle pending and error states](https://docs.solidjs.com/solid-router/data-fetching/how-to/handle-error-and-loading-states)
- [Lazy loading](https://docs.solidjs.com/solid-router/advanced-concepts/lazy-loading)
- [Migration from v0.9.x](https://docs.solidjs.com/solid-router/guides/migration)
- [A](https://docs.solidjs.com/solid-router/reference/components/a)
Expand All @@ -193,7 +199,7 @@
- [useAction](https://docs.solidjs.com/solid-router/reference/data-apis/use-action)
- [useSubmission](https://docs.solidjs.com/solid-router/reference/data-apis/use-submission)
- [useSubmissions](https://docs.solidjs.com/solid-router/reference/data-apis/use-submissions)
- [Preload](https://docs.solidjs.com/solid-router/reference/preload-functions/preload)
- [preload](https://docs.solidjs.com/solid-router/reference/preload-functions/preload)
- [useBeforeLeave](https://docs.solidjs.com/solid-router/reference/primitives/use-before-leave)
- [useCurrentMatches](https://docs.solidjs.com/solid-router/reference/primitives/use-current-matches)
- [useIsRouting](https://docs.solidjs.com/solid-router/reference/primitives/use-is-routing)
Expand Down
92 changes: 32 additions & 60 deletions scripts/sync-orama.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { readFileSync } from "node:fs";
import { globSync } from "glob";
import { OramaCloud } from "@orama/core";
import { generalPurposeCrawler } from "@orama/crawly";
import "dotenv/config";

const ORAMA_PRIVATE_API_KEY = process.env.ORAMA_PRIVATE_API_KEY;
const ORAMA_PRIVATE_INDEX_ID = process.env.ORAMA_PRIVATE_INDEX_ID;
const ORAMA_DATASOURCE_ID = process.env.ORAMA_DATASOURCE_ID;
const ORAMA_PROJECT_ID = process.env.ORAMA_PROJECT_ID;

const baseURL = new URL("../dist", import.meta.url).pathname;
const HTMLFiles = globSync("**/*.html", { cwd: baseURL });
Expand All @@ -18,71 +20,41 @@ const pagesToIndex = HTMLFiles.flatMap((file) => {

const productionDocsURL = `https://docs.solidjs.com/${path}`;

return {
...generalPurposeCrawler(productionDocsURL, pageContent, {
parseCodeBlocks: false,
})[0],
contentWithCode: generalPurposeCrawler(productionDocsURL, pageContent)?.[0]
?.content,
};
});
const content = generalPurposeCrawler(productionDocsURL, pageContent, { parseCodeBlocks: false })[0];
const contentWithCode = generalPurposeCrawler(productionDocsURL, pageContent, { parseCodeBlocks: true })[0];

async function emptyIndex() {
await fetch(
`https://api.oramasearch.com/api/v1/webhooks/${ORAMA_PRIVATE_INDEX_ID}/snapshot`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
authorization: `Bearer ${ORAMA_PRIVATE_API_KEY}`,
},
body: JSON.stringify([]),
}
);
}
const fullContent = {
title: content.title,
path: content.path,
content: content.content,
contentWithCode: contentWithCode.content,
}

async function upsertFreshData() {
const batches = [];
const batchesSize = 25;
if (content?.category) {
fullContent.category = `enum('${content.category}')`
}

for (let i = 0; i < pagesToIndex.length; i += batchesSize) {
const batch = pagesToIndex.slice(i, i + batchesSize);
batches.push(batch);
if (content?.section) {
fullContent.section = `enum('${content.section}')`
}

for (let i = 0; i < batches.length; i++) {
const batch = batches[i];
return fullContent
});

await fetch(
`https://api.oramasearch.com/api/v1/webhooks/${ORAMA_PRIVATE_INDEX_ID}/notify`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
authorization: `Bearer ${ORAMA_PRIVATE_API_KEY}`,
},
body: JSON.stringify({
upsert: batch,
}),
}
);
}
}
const orama = new OramaCloud({
apiKey: ORAMA_PRIVATE_API_KEY,
projectId: ORAMA_PROJECT_ID
})

async function deployIndex() {
await fetch(
`https://api.oramasearch.com/api/v1/webhooks/${ORAMA_PRIVATE_INDEX_ID}/deploy`,
{
method: "POST",
headers: {
authorization: `Bearer ${ORAMA_PRIVATE_API_KEY}`,
},
}
);
const index = orama.index.set(ORAMA_DATASOURCE_ID)

console.log(`[Orama] - Indexing ${pagesToIndex.length} documents to Orama...`)

console.log("Index deployed");
}
const tempIndexId = `tempIndex-${Date.now()}`
await index.createTemporaryIndex(tempIndexId)
const tempIdx = orama.index.set(tempIndexId)
await tempIdx.insertDocuments(pagesToIndex)
await index.swapTemporaryIndex(ORAMA_DATASOURCE_ID, tempIndexId)
await orama.index.delete(tempIndexId)

await emptyIndex();
await upsertFreshData();
await deployIndex();
console.log(`[Orama] - Indexed ${pagesToIndex.length} documents to Orama.`)
Loading