@queuebase/cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ import { devCommand } from './commands/dev.js';
3
+ const args = process.argv.slice(2);
4
+ const command = args[0];
5
+ function printHelp() {
6
+ console.log(`
7
+ queuebase - Background jobs for Next.js
8
+
9
+ Usage:
10
+ queuebase <command> [options]
11
+
12
+ Commands:
13
+ dev Start the local development server
14
+
15
+ Options:
16
+ --port <port> Port for the dev server (default: 3847)
17
+ --callback <url> Callback URL for job execution (default: http://localhost:3000/api/queuebase)
18
+ --help Show this help message
19
+
20
+ Examples:
21
+ queuebase dev
22
+ queuebase dev --port 4000
23
+ queuebase dev --callback http://localhost:3001/api/queuebase
24
+ `);
25
+ }
26
+ function parseArgs(args) {
27
+ const result = {};
28
+ for (let i = 0; i < args.length; i++) {
29
+ const arg = args[i];
30
+ if (arg?.startsWith('--')) {
31
+ const key = arg.slice(2);
32
+ const nextArg = args[i + 1];
33
+ if (nextArg && !nextArg.startsWith('--')) {
34
+ result[key] = nextArg;
35
+ i++;
36
+ }
37
+ else {
38
+ result[key] = true;
39
+ }
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ async function main() {
45
+ if (!command || command === '--help' || command === '-h') {
46
+ printHelp();
47
+ process.exit(0);
48
+ }
49
+ const options = parseArgs(args.slice(1));
50
+ switch (command) {
51
+ case 'dev': {
52
+ devCommand({
53
+ port: options.port ? Number(options.port) : undefined,
54
+ callbackUrl: options.callback,
55
+ });
56
+ break;
57
+ }
58
+ default:
59
+ console.error(`Unknown command: ${command}`);
60
+ printHelp();
61
+ process.exit(1);
62
+ }
63
+ }
64
+ main().catch((error) => {
65
+ console.error('Error:', error.message);
66
+ process.exit(1);
67
+ });
68
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,MAAM,GAAqC,EAAE,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBACtB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,UAAU,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBACrD,WAAW,EAAE,OAAO,CAAC,QAA8B;aACpD,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAED;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface DevOptions {
2
+ port?: number;
3
+ callbackUrl?: string;
4
+ }
5
+ export declare function devCommand(options?: DevOptions): void;
6
+ export {};
7
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,UAAe,QAsBlD"}
@@ -0,0 +1,23 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createDevServer } from '../server.js';
4
+ export function devCommand(options = {}) {
5
+ const envPort = Number(process.env.QUEUEBASE_PORT);
6
+ const port = options.port ?? (Number.isNaN(envPort) ? 3847 : envPort);
7
+ const callbackUrl = options.callbackUrl ??
8
+ process.env.QUEUEBASE_CALLBACK_URL ??
9
+ 'http://localhost:3000/api/queuebase';
10
+ // Use a .queuebase directory in the current working directory
11
+ const dbPath = path.join(process.cwd(), '.queuebase', 'dev.db');
12
+ // Ensure .queuebase directory exists
13
+ const dbDir = path.dirname(dbPath);
14
+ if (!fs.existsSync(dbDir)) {
15
+ fs.mkdirSync(dbDir, { recursive: true });
16
+ }
17
+ createDevServer({
18
+ port,
19
+ dbPath,
20
+ callbackUrl,
21
+ });
22
+ }
23
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAO/C,MAAM,UAAU,UAAU,CAAC,UAAsB,EAAE;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAClC,qCAAqC,CAAC;IAExC,8DAA8D;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEhE,qCAAqC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe,CAAC;QACd,IAAI;QACJ,MAAM;QACN,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createDevServer, type DevServerOptions } from './server.js';
2
+ export { devCommand } from './commands/dev.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { createDevServer } from './server.js';
2
+ export { devCommand } from './commands/dev.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type SqliteDb } from "@queuebase/db/sqlite";
2
+ export interface DevServerOptions {
3
+ port: number;
4
+ dbPath: string;
5
+ callbackUrl: string;
6
+ }
7
+ export interface DevServer {
8
+ db: SqliteDb;
9
+ close: () => void;
10
+ }
11
+ export declare function createDevServer(options: DevServerOptions): DevServer;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,QAAQ,EAMd,MAAM,sBAAsB,CAAC;AAM9B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA0GpE"}
package/dist/server.js ADDED
@@ -0,0 +1,90 @@
1
+ import { serve } from "@hono/node-server";
2
+ import { createSqliteClient, eq, jobs, jobLogs, runMigrations, } from "@queuebase/db/sqlite";
3
+ import { createJobExecutor, createSqliteWorkerDb, enqueueJob } from "@queuebase/worker";
4
+ import { Hono } from "hono";
5
+ import { cors } from "hono/cors";
6
+ import { logger } from "hono/logger";
7
+ export function createDevServer(options) {
8
+ const { port, dbPath, callbackUrl } = options;
9
+ // Initialize SQLite database
10
+ const { db, close } = createSqliteClient(dbPath);
11
+ runMigrations(db);
12
+ const workerDb = createSqliteWorkerDb(db);
13
+ // Create Hono app
14
+ const app = new Hono();
15
+ // Middleware
16
+ app.use("*", logger());
17
+ app.use("*", cors());
18
+ // Health check
19
+ app.get("/health", (c) => c.json({ status: "ok" }));
20
+ // Enqueue endpoint
21
+ app.post("/jobs/enqueue", async (c) => {
22
+ const body = await c.req.json();
23
+ const { name, payload, callbackUrl: jobCallbackUrl, options: jobOptions, } = body;
24
+ if (!name || payload === undefined) {
25
+ return c.json({ error: "Missing required fields: name, payload" }, 400);
26
+ }
27
+ const result = enqueueJob(db, {
28
+ name,
29
+ payload,
30
+ callbackUrl: jobCallbackUrl ?? callbackUrl,
31
+ options: jobOptions,
32
+ });
33
+ const jobRow = db
34
+ .select({ id: jobs.id })
35
+ .from(jobs)
36
+ .where(eq(jobs.publicId, result.jobId))
37
+ .get();
38
+ if (jobRow) {
39
+ db.insert(jobLogs)
40
+ .values({ jobId: jobRow.id, event: "enqueued" })
41
+ .run();
42
+ }
43
+ return c.json(result);
44
+ });
45
+ // List jobs endpoint (for debugging)
46
+ app.get("/jobs", (c) => {
47
+ const allJobs = db
48
+ .select()
49
+ .from(jobs)
50
+ .orderBy(jobs.createdAt)
51
+ .limit(100)
52
+ .all();
53
+ return c.json(allJobs);
54
+ });
55
+ // Create job executor
56
+ const executor = createJobExecutor(workerDb, {
57
+ pollInterval: 1000,
58
+ concurrency: 5,
59
+ });
60
+ // Start server
61
+ const server = serve({
62
+ fetch: app.fetch,
63
+ port,
64
+ });
65
+ // Start worker
66
+ executor.start();
67
+ // biome-ignore lint/suspicious/noConsoleLog: cli
68
+ console.log(`🚀 Queuebase dev server running on http://localhost:${port}`);
69
+ // biome-ignore lint/suspicious/noConsoleLog: cli
70
+ console.log(`📁 Database: ${dbPath}`);
71
+ // biome-ignore lint/suspicious/noConsoleLog: cli
72
+ console.log(`🔗 Callback URL: ${callbackUrl}`);
73
+ // biome-ignore lint/suspicious/noConsoleLog: cli
74
+ console.log("");
75
+ // biome-ignore lint/suspicious/noConsoleLog: cli
76
+ console.log("Waiting for jobs...");
77
+ // Cleanup on exit
78
+ const cleanup = () => {
79
+ // biome-ignore lint/suspicious/noConsoleLog: cli
80
+ console.log("\nShutting down...");
81
+ executor.stop();
82
+ close();
83
+ server.close();
84
+ process.exit(0);
85
+ };
86
+ process.on("SIGINT", cleanup);
87
+ process.on("SIGTERM", cleanup);
88
+ return { db, close };
89
+ }
90
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@queuebase/cli",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "bin": {
6
+ "queuebase": "./dist/bin.js"
7
+ },
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "dependencies": {
15
+ "@hono/node-server": "^1.13.7",
16
+ "better-sqlite3": "^11.7.0",
17
+ "hono": "^4.6.16",
18
+ "@queuebase/db": "0.0.1",
19
+ "@queuebase/worker": "0.0.1",
20
+ "@queuebase/core": "0.0.1"
21
+ },
22
+ "devDependencies": {
23
+ "@types/better-sqlite3": "^7.6.12",
24
+ "@types/node": "^22.10.5",
25
+ "typescript": "^5.7.2",
26
+ "vitest": "^2.1.8",
27
+ "@queuebase/tsconfig": "0.0.0"
28
+ },
29
+ "scripts": {
30
+ "build": "tsc -b",
31
+ "dev": "tsc -b --watch",
32
+ "clean": "rm -rf dist .turbo *.tsbuildinfo",
33
+ "typecheck": "tsc --noEmit",
34
+ "lint": "biome lint ./src",
35
+ "lint:fix": "biome lint --write ./src",
36
+ "test": "vitest run --passWithNoTests",
37
+ "test:watch": "vitest"
38
+ }
39
+ }