diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-11-08 14:50:00 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-08 14:50:00 +0000 |
| commit | 99413db0e79a156a1b87eacd3c6a7b83e9df946e (patch) | |
| tree | 73f0a5fceb507f75f662a109b00beeb3fa6b16fb /packages/plugins-queue-liteque | |
| parent | 737b03172c2e063ba311c23d6552418bd2ab1955 (diff) | |
| download | karakeep-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.json | 19 | ||||
| -rw-r--r-- | packages/plugins-queue-liteque/index.ts | 10 | ||||
| -rw-r--r-- | packages/plugins-queue-liteque/package.json | 26 | ||||
| -rw-r--r-- | packages/plugins-queue-liteque/src/index.ts | 137 | ||||
| -rw-r--r-- | packages/plugins-queue-liteque/tsconfig.json | 10 |
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" - } -} - |
