mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 08:28:19 +01:00
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
// @ts-expect-error - Root import is required or the Clec type definitions won't work
|
|
// biome-ignore lint/correctness/noUnusedImports: Root import is required or the Clec type definitions won't work
|
|
import { type Root, defineCommand } from "clerc";
|
|
import ora from "ora";
|
|
import {
|
|
SonicIndexType,
|
|
searchManager,
|
|
} from "~/classes/search/search-manager.ts";
|
|
import { config } from "~/config.ts";
|
|
|
|
export const rebuildIndexCommand = defineCommand(
|
|
{
|
|
name: "index rebuild",
|
|
description: "Rebuild the search index.",
|
|
parameters: ["<type>"],
|
|
flags: {
|
|
"batch-size": {
|
|
description: "Number of records to process at once",
|
|
type: Number,
|
|
alias: "b",
|
|
default: 100,
|
|
},
|
|
},
|
|
},
|
|
async (context) => {
|
|
const { "batch-size": batchSize } = context.flags;
|
|
const { type } = context.parameters;
|
|
|
|
if (!config.search.enabled) {
|
|
throw new Error(
|
|
"Search is not enabled in the instance configuration.",
|
|
);
|
|
}
|
|
|
|
const spinner = ora("Rebuilding search indexes").start();
|
|
|
|
switch (type) {
|
|
case "accounts":
|
|
await searchManager.rebuildSearchIndexes(
|
|
[SonicIndexType.Accounts],
|
|
batchSize,
|
|
(progress) => {
|
|
spinner.text = `Rebuilding search indexes (${(progress * 100).toFixed(2)}%)`;
|
|
},
|
|
);
|
|
break;
|
|
case "statuses":
|
|
await searchManager.rebuildSearchIndexes(
|
|
[SonicIndexType.Statuses],
|
|
batchSize,
|
|
(progress) => {
|
|
spinner.text = `Rebuilding search indexes (${(progress * 100).toFixed(2)}%)`;
|
|
},
|
|
);
|
|
break;
|
|
default: {
|
|
throw new Error(
|
|
"Invalid index type. Can be 'accounts' or 'statuses'.",
|
|
);
|
|
}
|
|
}
|
|
|
|
spinner.succeed("Search indexes rebuilt");
|
|
},
|
|
);
|