aboutsummaryrefslogtreecommitdiffstats
path: root/packages/plugins-queue-liteque
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-11-08 14:50:00 +0000
committerGitHub <noreply@github.com>2025-11-08 14:50:00 +0000
commit99413db0e79a156a1b87eacd3c6a7b83e9df946e (patch)
tree73f0a5fceb507f75f662a109b00beeb3fa6b16fb /packages/plugins-queue-liteque
parent737b03172c2e063ba311c23d6552418bd2ab1955 (diff)
downloadkarakeep-99413db0e79a156a1b87eacd3c6a7b83e9df946e.tar.zst
refactor: consolidate multiple karakeep plugins into one package (#2101)
* refactor: consolidate plugin packages into single plugins directory - Create new `packages/plugins` directory with consolidated package.json - Move queue-liteque, queue-restate, and search-meilisearch to subdirectories - Update imports in packages/shared-server/src/plugins.ts - Remove individual plugin package directories - Update shared-server dependency to use @karakeep/plugins This reduces overhead of maintaining multiple separate packages for plugins. * refactor: consolidate plugin config files to root level - Move .oxlintrc.json to packages/plugins root - Move vitest.config.ts to packages/plugins root - Update vitest config paths to work from root - Remove individual config files from plugin subdirectories This reduces configuration duplication across plugin subdirectories. --------- Co-authored-by: Claude <noreply@anthropic.com>
Diffstat (limited to 'packages/plugins-queue-liteque')
-rw-r--r--packages/plugins-queue-liteque/.oxlintrc.json19
-rw-r--r--packages/plugins-queue-liteque/index.ts10
-rw-r--r--packages/plugins-queue-liteque/package.json26
-rw-r--r--packages/plugins-queue-liteque/src/index.ts137
-rw-r--r--packages/plugins-queue-liteque/tsconfig.json10
5 files changed, 0 insertions, 202 deletions
diff --git a/packages/plugins-queue-liteque/.oxlintrc.json b/packages/plugins-queue-liteque/.oxlintrc.json
deleted file mode 100644
index 79ba0255..00000000
--- a/packages/plugins-queue-liteque/.oxlintrc.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "$schema": "../../node_modules/oxlint/configuration_schema.json",
- "extends": [
- "../../tooling/oxlint/oxlint-base.json"
- ],
- "env": {
- "builtin": true,
- "commonjs": true
- },
- "ignorePatterns": [
- "**/*.config.js",
- "**/*.config.cjs",
- "**/.eslintrc.cjs",
- "**/.next",
- "**/dist",
- "**/build",
- "**/pnpm-lock.yaml"
- ]
-}
diff --git a/packages/plugins-queue-liteque/index.ts b/packages/plugins-queue-liteque/index.ts
deleted file mode 100644
index c3f7f03b..00000000
--- a/packages/plugins-queue-liteque/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// Auto-register the Liteque queue provider when this package is imported
-import { PluginManager, PluginType } from "@karakeep/shared/plugins";
-
-import { LitequeQueueProvider } from "./src";
-
-PluginManager.register({
- type: PluginType.Queue,
- name: "Liteque",
- provider: new LitequeQueueProvider(),
-});
diff --git a/packages/plugins-queue-liteque/package.json b/packages/plugins-queue-liteque/package.json
deleted file mode 100644
index bb4b1aac..00000000
--- a/packages/plugins-queue-liteque/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/package.json",
- "name": "@karakeep/plugins-queue-liteque",
- "version": "0.1.0",
- "private": true,
- "type": "module",
- "scripts": {
- "typecheck": "tsc --noEmit",
- "format": "prettier . --cache --ignore-path ../../.prettierignore --check",
- "format:fix": "prettier . --cache --ignore-path ../../.prettierignore --write",
- "lint": "oxlint .",
- "lint:fix": "oxlint . --fix",
- "test": "vitest"
- },
- "dependencies": {
- "@karakeep/shared": "workspace:*",
- "liteque": "^0.6.2"
- },
- "devDependencies": {
- "@karakeep/prettier-config": "workspace:^0.1.0",
- "@karakeep/tsconfig": "workspace:^0.1.0",
- "vite-tsconfig-paths": "^4.3.1",
- "vitest": "^3.2.4"
- },
- "prettier": "@karakeep/prettier-config"
-}
diff --git a/packages/plugins-queue-liteque/src/index.ts b/packages/plugins-queue-liteque/src/index.ts
deleted file mode 100644
index ddc2181c..00000000
--- a/packages/plugins-queue-liteque/src/index.ts
+++ /dev/null
@@ -1,137 +0,0 @@
-import path from "node:path";
-import {
- buildDBClient,
- SqliteQueue as LQ,
- Runner as LQRunner,
- migrateDB,
-} from "liteque";
-
-import type { PluginProvider } from "@karakeep/shared/plugins";
-import type {
- DequeuedJob,
- DequeuedJobError,
- EnqueueOptions,
- Queue,
- QueueClient,
- QueueOptions,
- Runner,
- RunnerFuncs,
- RunnerOptions,
-} from "@karakeep/shared/queueing";
-import serverConfig from "@karakeep/shared/config";
-
-class LitequeQueueWrapper<T> implements Queue<T> {
- constructor(
- private readonly _name: string,
- private readonly lq: LQ<T>,
- public readonly opts: QueueOptions,
- ) {}
-
- name(): string {
- return this._name;
- }
-
- async enqueue(
- payload: T,
- options?: EnqueueOptions,
- ): Promise<string | undefined> {
- const job = await this.lq.enqueue(payload, options);
- // liteque returns a Job with numeric id
- return job ? String(job.id) : undefined;
- }
-
- async stats() {
- return this.lq.stats();
- }
-
- async cancelAllNonRunning(): Promise<number> {
- return this.lq.cancelAllNonRunning();
- }
-
- // Internal accessor for runner
- get _impl(): LQ<T> {
- return this.lq;
- }
-}
-
-class LitequeQueueClient implements QueueClient {
- private db = buildDBClient(path.join(serverConfig.dataDir, "queue.db"), {
- walEnabled: serverConfig.database.walMode,
- });
-
- private queues = new Map<string, LitequeQueueWrapper<unknown>>();
-
- async prepare(): Promise<void> {
- migrateDB(this.db);
- }
-
- async start(): Promise<void> {
- // No-op for sqlite
- }
-
- createQueue<T>(name: string, options: QueueOptions): Queue<T> {
- if (this.queues.has(name)) {
- throw new Error(`Queue ${name} already exists`);
- }
- const lq = new LQ<T>(name, this.db, {
- defaultJobArgs: { numRetries: options.defaultJobArgs.numRetries },
- keepFailedJobs: options.keepFailedJobs,
- });
- const wrapper = new LitequeQueueWrapper<T>(name, lq, options);
- this.queues.set(name, wrapper);
- return wrapper;
- }
-
- createRunner<T>(
- queue: Queue<T>,
- funcs: RunnerFuncs<T>,
- opts: RunnerOptions<T>,
- ): Runner<T> {
- const name = queue.name();
- let wrapper = this.queues.get(name);
- if (!wrapper) {
- throw new Error(`Queue ${name} not found`);
- }
-
- const runner = new LQRunner<T>(
- wrapper._impl,
- {
- run: funcs.run,
- onComplete: funcs.onComplete as
- | ((job: DequeuedJob<T>) => Promise<void>)
- | undefined,
- onError: funcs.onError as
- | ((job: DequeuedJobError<T>) => Promise<void>)
- | undefined,
- },
- {
- pollIntervalMs: opts.pollIntervalMs ?? 1000,
- timeoutSecs: opts.timeoutSecs,
- concurrency: opts.concurrency,
- validator: opts.validator,
- },
- );
-
- return {
- run: () => runner.run(),
- stop: () => runner.stop(),
- runUntilEmpty: () => runner.runUntilEmpty(),
- };
- }
-
- async shutdown(): Promise<void> {
- // No-op for sqlite
- }
-}
-
-export class LitequeQueueProvider implements PluginProvider<QueueClient> {
- private client: QueueClient | null = null;
-
- async getClient(): Promise<QueueClient | null> {
- if (!this.client) {
- const client = new LitequeQueueClient();
- this.client = client;
- }
- return this.client;
- }
-}
diff --git a/packages/plugins-queue-liteque/tsconfig.json b/packages/plugins-queue-liteque/tsconfig.json
deleted file mode 100644
index 3bfa695c..00000000
--- a/packages/plugins-queue-liteque/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "$schema": "https://json.schemastore.org/tsconfig",
- "extends": "@karakeep/tsconfig/node.json",
- "include": ["**/*.ts"],
- "exclude": ["node_modules"],
- "compilerOptions": {
- "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
- }
-}
-