@convex-dev/crons 0.2.0 → 0.2.2
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/client/index.d.ts +5 -5
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/utils.d.ts +4 -7
- package/dist/client/utils.d.ts.map +1 -1
- package/dist/component/_generated/dataModel.d.ts +1 -1
- package/dist/component/_generated/server.d.ts.map +1 -1
- package/dist/component/convex.config.d.ts +1 -1
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +9 -8
- package/dist/component/public.js.map +1 -1
- package/package.json +27 -27
- package/src/client/index.ts +5 -5
- package/src/client/utils.ts +10 -6
- package/src/component/_generated/dataModel.ts +1 -1
- package/src/component/_generated/server.ts +0 -5
- package/src/component/public.ts +15 -8
package/dist/client/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type FunctionArgs, type SchedulableFunctionReference } from "convex/server";
|
|
2
2
|
import type { ComponentApi } from "../component/_generated/component.js";
|
|
3
3
|
import type { CronInfo, Schedule } from "../component/public.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { ActionCtx, MutationCtx, QueryCtx } from "./utils.js";
|
|
5
5
|
export type { CronInfo };
|
|
6
6
|
export declare class Crons {
|
|
7
7
|
private component;
|
|
@@ -57,20 +57,20 @@ export declare class Crons {
|
|
|
57
57
|
* provided and a cron with the same name already exists.
|
|
58
58
|
* @returns A string identifier for the cron job.
|
|
59
59
|
*/
|
|
60
|
-
register<F extends SchedulableFunctionReference>(ctx:
|
|
60
|
+
register<F extends SchedulableFunctionReference>(ctx: MutationCtx | ActionCtx, schedule: Schedule, func: F, args: FunctionArgs<F>, name?: string): Promise<string>;
|
|
61
61
|
/**
|
|
62
62
|
* List all user space cron jobs.
|
|
63
63
|
*
|
|
64
64
|
* @returns List of `cron` table rows.
|
|
65
65
|
*/
|
|
66
|
-
list(ctx:
|
|
66
|
+
list(ctx: QueryCtx | MutationCtx | ActionCtx): Promise<CronInfo[]>;
|
|
67
67
|
/**
|
|
68
68
|
* Get an existing cron job by id or name.
|
|
69
69
|
*
|
|
70
70
|
* @param identifier - Either the ID or name of the cron job.
|
|
71
71
|
* @returns Cron job document.
|
|
72
72
|
*/
|
|
73
|
-
get(ctx:
|
|
73
|
+
get(ctx: QueryCtx | MutationCtx | ActionCtx, identifier: {
|
|
74
74
|
id: string;
|
|
75
75
|
} | {
|
|
76
76
|
name: string;
|
|
@@ -80,7 +80,7 @@ export declare class Crons {
|
|
|
80
80
|
*
|
|
81
81
|
* @param identifier - Either the ID or name of the cron job.
|
|
82
82
|
*/
|
|
83
|
-
delete(ctx:
|
|
83
|
+
delete(ctx: MutationCtx | ActionCtx, identifier: {
|
|
84
84
|
id: string;
|
|
85
85
|
} | {
|
|
86
86
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,4BAA4B,EAClC,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,4BAA4B,EAClC,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,qBAAa,KAAK;IAwCJ,OAAO,CAAC,SAAS;IAvC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;gBACiB,SAAS,EAAE,YAAY;IAE3C;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,CAAC,SAAS,4BAA4B,EACnD,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IASlB;;;;OAIG;IACG,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAUxE;;;;;OAKG;IACG,GAAG,CACP,GAAG,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,EACvC,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAa3B;;;;OAIG;IACG,MAAM,CACV,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,IAAI,CAAC;CAGjB"}
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EACL,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AAOvB,MAAM,OAAO,KAAK;IAwCI;IAvCpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,YAAoB,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAE/C;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,QAAQ,CACZ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EACL,oBAAoB,GAIrB,MAAM,eAAe,CAAC;AAOvB,MAAM,OAAO,KAAK;IAwCI;IAvCpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,YAAoB,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAE/C;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,QAAQ,CACZ,GAA4B,EAC5B,QAAkB,EAClB,IAAO,EACP,IAAqB,EACrB,IAAa;QAEb,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE;YACrD,IAAI;YACJ,QAAQ;YACR,cAAc,EAAE,MAAM,oBAAoB,CAAC,IAAI,CAAC;YAChD,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,GAAuC;QAChD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,GAAG,IAAI;YACP,cAAc,EAAE,IAAI,CAAC,cAEpB;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CACP,GAAuC,EACvC,UAA6C;QAE7C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3E,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,cAAc,EAAE,IAAI,CAAC,cAEpB;SACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,GAA4B,EAC5B,UAA6C;QAE7C,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;CACF"}
|
package/dist/client/utils.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type { GenericDataModel, GenericMutationCtx, GenericQueryCtx } from "convex/server";
|
|
2
|
-
export type
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export type RunMutationCtx = {
|
|
6
|
-
runMutation: GenericMutationCtx<GenericDataModel>["runMutation"];
|
|
7
|
-
};
|
|
1
|
+
import type { GenericActionCtx, GenericDataModel, GenericMutationCtx, GenericQueryCtx } from "convex/server";
|
|
2
|
+
export type QueryCtx = Pick<GenericQueryCtx<GenericDataModel>, "runQuery">;
|
|
3
|
+
export type MutationCtx = Pick<GenericMutationCtx<GenericDataModel>, "runQuery" | "runMutation">;
|
|
4
|
+
export type ActionCtx = Pick<GenericActionCtx<GenericDataModel>, "runQuery" | "runMutation" | "runAction">;
|
|
8
5
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/client/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/client/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;AAC3E,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,kBAAkB,CAAC,gBAAgB,CAAC,EACpC,UAAU,GAAG,aAAa,CAC3B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,IAAI,CAC1B,gBAAgB,CAAC,gBAAgB,CAAC,EAClC,UAAU,GAAG,aAAa,GAAG,WAAW,CACzC,CAAC"}
|
|
@@ -25,7 +25,7 @@ export type Doc<TableName extends TableNames> = DocumentByName<DataModel, TableN
|
|
|
25
25
|
* Convex documents are uniquely identified by their `Id`, which is accessible
|
|
26
26
|
* on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).
|
|
27
27
|
*
|
|
28
|
-
* Documents can be loaded using `db.get(id)` in query and mutation functions.
|
|
28
|
+
* Documents can be loaded using `db.get(tableName, id)` in query and mutation functions.
|
|
29
29
|
*
|
|
30
30
|
* IDs are just strings at runtime, but this type can be used to distinguish them from other
|
|
31
31
|
* strings when type checking.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAUvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAgB,CAAC;AAErE;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,SAAS,EAAE,UAAU,CACxC,CAAC;AAEvB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAmB,CAAC;AAE9E;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,SAAS,EAAE,UAAU,CAC3C,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAiB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,SAAS,EAAE,UAAU,CACzC,CAAC;AAExB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,EAAE,iBAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAUvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAgB,CAAC;AAErE;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,SAAS,EAAE,UAAU,CACxC,CAAC;AAEvB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAmB,CAAC;AAE9E;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,SAAS,EAAE,UAAU,CAC3C,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAiB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,SAAS,EAAE,UAAU,CACzC,CAAC;AAExB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,EAAE,iBAAqC,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAExD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAcpD,MAAM,MAAM,QAAQ,GAChB;IACE,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;OAaG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GACD;IACE,oDAAoD;IACpD,IAAI,EAAE,UAAU,CAAC;IACjB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAGN,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AASF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;uDAiCnB,CAAC;AA0CH;;;;GAIG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;KAaf,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;UAyBd,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;;;;iBAoCd,CAAC;AASH,eAAO,MAAM,WAAW;;
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAcpD,MAAM,MAAM,QAAQ,GAChB;IACE,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;OAaG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GACD;IACE,oDAAoD;IACpD,IAAI,EAAE,UAAU,CAAC;IACjB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAGN,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AASF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;uDAiCnB,CAAC;AA0CH;;;;GAIG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;KAaf,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;UAyBd,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;;;;iBAoCd,CAAC;AASH,eAAO,MAAM,WAAW;;iBAmEtB,CAAC"}
|
package/dist/component/public.js
CHANGED
|
@@ -70,7 +70,7 @@ function validateSchedule(schedule) {
|
|
|
70
70
|
async function scheduleNextRun(ctx, id, lastScheduled, schedule) {
|
|
71
71
|
const nextRun = calculateNextRun(lastScheduled, schedule);
|
|
72
72
|
const schedulerJobId = await ctx.scheduler.runAt(nextRun, internal.public.rescheduler, { id });
|
|
73
|
-
await ctx.db.patch(id, { schedulerJobId });
|
|
73
|
+
await ctx.db.patch("crons", id, { schedulerJobId });
|
|
74
74
|
}
|
|
75
75
|
function calculateNextRun(lastScheduled, schedule) {
|
|
76
76
|
if (schedule.kind === "interval") {
|
|
@@ -116,7 +116,7 @@ export const get = query({
|
|
|
116
116
|
returns: v.union(cronInfoValidator, v.null()),
|
|
117
117
|
handler: async (ctx, { identifier }) => {
|
|
118
118
|
const cron = "id" in identifier
|
|
119
|
-
? await ctx.db.get(identifier.id)
|
|
119
|
+
? await ctx.db.get("crons", identifier.id)
|
|
120
120
|
: await ctx.db
|
|
121
121
|
.query("crons")
|
|
122
122
|
.withIndex("name", (q) => q.eq("name", identifier.name))
|
|
@@ -145,7 +145,7 @@ export const del = mutation({
|
|
|
145
145
|
handler: async (ctx, { identifier }) => {
|
|
146
146
|
let cron;
|
|
147
147
|
if ("id" in identifier) {
|
|
148
|
-
cron = await ctx.db.get(identifier.id);
|
|
148
|
+
cron = await ctx.db.get("crons", identifier.id);
|
|
149
149
|
if (!cron) {
|
|
150
150
|
throw new Error(`Cron ${identifier.id} not found`);
|
|
151
151
|
}
|
|
@@ -169,7 +169,7 @@ export const del = mutation({
|
|
|
169
169
|
await ctx.scheduler.cancel(cron.executionJobId);
|
|
170
170
|
}
|
|
171
171
|
console.log(`Deleting cron ${cron._id}`);
|
|
172
|
-
await ctx.db.delete(cron._id);
|
|
172
|
+
await ctx.db.delete("crons", cron._id);
|
|
173
173
|
},
|
|
174
174
|
});
|
|
175
175
|
// Continue rescheduling a cron job.
|
|
@@ -186,7 +186,7 @@ export const rescheduler = internalMutation({
|
|
|
186
186
|
returns: v.null(),
|
|
187
187
|
handler: async (ctx, { id }) => {
|
|
188
188
|
// Cron job is the logical concept we're rescheduling repeatedly.
|
|
189
|
-
const cronJob = await ctx.db.get(id);
|
|
189
|
+
const cronJob = await ctx.db.get("crons", id);
|
|
190
190
|
if (!cronJob) {
|
|
191
191
|
throw Error(`Cron ${id} not found`);
|
|
192
192
|
}
|
|
@@ -195,7 +195,7 @@ export const rescheduler = internalMutation({
|
|
|
195
195
|
}
|
|
196
196
|
// Scheduler job is the job that's running right now, that we use to trigger
|
|
197
197
|
// repeated executions.
|
|
198
|
-
const schedulerJob = await ctx.db.system.get(cronJob.schedulerJobId);
|
|
198
|
+
const schedulerJob = await ctx.db.system.get("_scheduled_functions", cronJob.schedulerJobId);
|
|
199
199
|
if (!schedulerJob) {
|
|
200
200
|
throw Error(`Scheduler job ${cronJob.schedulerJobId} not found`);
|
|
201
201
|
}
|
|
@@ -206,7 +206,7 @@ export const rescheduler = internalMutation({
|
|
|
206
206
|
// Execution job is the previous job used to actually do the work of the cron.
|
|
207
207
|
let stillRunning = false;
|
|
208
208
|
if (cronJob.executionJobId) {
|
|
209
|
-
const executionJob = await ctx.db.system.get(cronJob.executionJobId);
|
|
209
|
+
const executionJob = await ctx.db.system.get("_scheduled_functions", cronJob.executionJobId);
|
|
210
210
|
if (executionJob &&
|
|
211
211
|
(executionJob.state.kind === "pending" ||
|
|
212
212
|
executionJob.state.kind === "inProgress")) {
|
|
@@ -218,7 +218,8 @@ export const rescheduler = internalMutation({
|
|
|
218
218
|
}
|
|
219
219
|
else {
|
|
220
220
|
console.log(`Running cron ${cronJob._id}.`);
|
|
221
|
-
await ctx.scheduler.runAfter(0, cronJob.functionHandle, cronJob.args);
|
|
221
|
+
const executionJobId = await ctx.scheduler.runAfter(0, cronJob.functionHandle, cronJob.args);
|
|
222
|
+
await ctx.db.patch("crons", id, { executionJobId });
|
|
222
223
|
}
|
|
223
224
|
await scheduleNextRun(ctx, id, new Date(schedulerJob.scheduledTime), cronJob.schedule);
|
|
224
225
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@convex-dev/crons",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Convex component for scheduling periodic jobs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"convex",
|
|
@@ -22,24 +22,23 @@
|
|
|
22
22
|
"src"
|
|
23
23
|
],
|
|
24
24
|
"scripts": {
|
|
25
|
-
"dev": "
|
|
26
|
-
"dev:backend": "convex dev --typecheck-components",
|
|
25
|
+
"dev": "convex dev --start 'npm run dev:build'",
|
|
27
26
|
"dev:frontend": "cd example && vite --clearScreen false",
|
|
28
|
-
"dev:build": "chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c '
|
|
29
|
-
"predev": "npm run
|
|
30
|
-
"clean": "rm -rf dist *.tsbuildinfo",
|
|
27
|
+
"dev:build": "chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial",
|
|
28
|
+
"predev": "convex init && npm run build:codegen",
|
|
31
29
|
"build": "tsc --project ./tsconfig.build.json",
|
|
30
|
+
"build:codegen": "npx convex codegen --component-dir ./src/component && npm run build",
|
|
31
|
+
"build:clean": "rm -rf dist *.tsbuildinfo && npm run build:codegen",
|
|
32
32
|
"typecheck": "tsc --noEmit && tsc -p example/convex",
|
|
33
33
|
"lint": "eslint .",
|
|
34
|
-
"all": "run-p -r 'dev:*' 'test:watch'",
|
|
35
34
|
"test": "vitest run --typecheck",
|
|
36
35
|
"test:watch": "vitest --typecheck --clearScreen false",
|
|
37
36
|
"test:debug": "vitest --inspect-brk --no-file-parallelism",
|
|
38
37
|
"test:coverage": "vitest run --coverage --coverage.reporter=text",
|
|
39
|
-
"
|
|
40
|
-
"alpha": "npm
|
|
41
|
-
"release": "npm
|
|
42
|
-
"version": "
|
|
38
|
+
"preversion": "npm ci && npm run build:clean && npm run test && npm run lint && npm run typecheck",
|
|
39
|
+
"alpha": "npm version prerelease --preid alpha && npm publish --tag alpha && git push --follow-tags",
|
|
40
|
+
"release": "npm version patch && npm publish && git push --follow-tags",
|
|
41
|
+
"version": "(npm whoami || npm login) && vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md"
|
|
43
42
|
},
|
|
44
43
|
"exports": {
|
|
45
44
|
"./package.json": "./package.json",
|
|
@@ -69,23 +68,24 @@
|
|
|
69
68
|
"convex": "^1.24.8"
|
|
70
69
|
},
|
|
71
70
|
"devDependencies": {
|
|
72
|
-
"@arethetypeswrong/cli": "0.18.
|
|
71
|
+
"@arethetypeswrong/cli": "0.18.3",
|
|
72
|
+
"@convex-dev/eslint-plugin": "2.0.0",
|
|
73
73
|
"@edge-runtime/vm": "5.0.0",
|
|
74
|
-
"@eslint/eslintrc": "
|
|
75
|
-
"@eslint/js": "
|
|
76
|
-
"@types/node": "
|
|
77
|
-
"@typescript-eslint/eslint-plugin": "
|
|
78
|
-
"@typescript-eslint/parser": "
|
|
74
|
+
"@eslint/eslintrc": "3.3.5",
|
|
75
|
+
"@eslint/js": "10.0.1",
|
|
76
|
+
"@types/node": "24.12.4",
|
|
77
|
+
"@typescript-eslint/eslint-plugin": "8.60.0",
|
|
78
|
+
"@typescript-eslint/parser": "8.60.0",
|
|
79
79
|
"chokidar-cli": "3.0.0",
|
|
80
|
-
"convex
|
|
81
|
-
"
|
|
82
|
-
"eslint
|
|
83
|
-
"eslint-plugin-react-
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"prettier": "3.
|
|
87
|
-
"typescript": "
|
|
88
|
-
"typescript-eslint": "
|
|
89
|
-
"vitest": "
|
|
80
|
+
"convex": "1.39.1",
|
|
81
|
+
"convex-test": "0.0.53",
|
|
82
|
+
"eslint": "10.4.1",
|
|
83
|
+
"eslint-plugin-react-hooks": "7.1.1",
|
|
84
|
+
"eslint-plugin-react-refresh": "0.5.2",
|
|
85
|
+
"globals": "17.6.0",
|
|
86
|
+
"prettier": "3.8.3",
|
|
87
|
+
"typescript": "6.0.3",
|
|
88
|
+
"typescript-eslint": "8.60.0",
|
|
89
|
+
"vitest": "4.1.7"
|
|
90
90
|
}
|
|
91
91
|
}
|
package/src/client/index.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "convex/server";
|
|
9
9
|
import type { ComponentApi } from "../component/_generated/component.js";
|
|
10
10
|
import type { CronInfo, Schedule } from "../component/public.js";
|
|
11
|
-
import type {
|
|
11
|
+
import type { ActionCtx, MutationCtx, QueryCtx } from "./utils.js";
|
|
12
12
|
|
|
13
13
|
export type { CronInfo };
|
|
14
14
|
|
|
@@ -67,7 +67,7 @@ export class Crons {
|
|
|
67
67
|
* @returns A string identifier for the cron job.
|
|
68
68
|
*/
|
|
69
69
|
async register<F extends SchedulableFunctionReference>(
|
|
70
|
-
ctx:
|
|
70
|
+
ctx: MutationCtx | ActionCtx,
|
|
71
71
|
schedule: Schedule,
|
|
72
72
|
func: F,
|
|
73
73
|
args: FunctionArgs<F>,
|
|
@@ -86,7 +86,7 @@ export class Crons {
|
|
|
86
86
|
*
|
|
87
87
|
* @returns List of `cron` table rows.
|
|
88
88
|
*/
|
|
89
|
-
async list(ctx:
|
|
89
|
+
async list(ctx: QueryCtx | MutationCtx | ActionCtx): Promise<CronInfo[]> {
|
|
90
90
|
const crons = await ctx.runQuery(this.component.public.list, {});
|
|
91
91
|
return crons.map((cron) => ({
|
|
92
92
|
...cron,
|
|
@@ -103,7 +103,7 @@ export class Crons {
|
|
|
103
103
|
* @returns Cron job document.
|
|
104
104
|
*/
|
|
105
105
|
async get(
|
|
106
|
-
ctx:
|
|
106
|
+
ctx: QueryCtx | MutationCtx | ActionCtx,
|
|
107
107
|
identifier: { id: string } | { name: string },
|
|
108
108
|
): Promise<CronInfo | null> {
|
|
109
109
|
const cron = await ctx.runQuery(this.component.public.get, { identifier });
|
|
@@ -124,7 +124,7 @@ export class Crons {
|
|
|
124
124
|
* @param identifier - Either the ID or name of the cron job.
|
|
125
125
|
*/
|
|
126
126
|
async delete(
|
|
127
|
-
ctx:
|
|
127
|
+
ctx: MutationCtx | ActionCtx,
|
|
128
128
|
identifier: { id: string } | { name: string },
|
|
129
129
|
): Promise<null> {
|
|
130
130
|
return ctx.runMutation(this.component.public.del, { identifier });
|
package/src/client/utils.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type {
|
|
2
|
+
GenericActionCtx,
|
|
2
3
|
GenericDataModel,
|
|
3
4
|
GenericMutationCtx,
|
|
4
5
|
GenericQueryCtx,
|
|
5
6
|
} from "convex/server";
|
|
6
7
|
|
|
7
|
-
export type
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
export type QueryCtx = Pick<GenericQueryCtx<GenericDataModel>, "runQuery">;
|
|
9
|
+
export type MutationCtx = Pick<
|
|
10
|
+
GenericMutationCtx<GenericDataModel>,
|
|
11
|
+
"runQuery" | "runMutation"
|
|
12
|
+
>;
|
|
13
|
+
export type ActionCtx = Pick<
|
|
14
|
+
GenericActionCtx<GenericDataModel>,
|
|
15
|
+
"runQuery" | "runMutation" | "runAction"
|
|
16
|
+
>;
|
|
@@ -38,7 +38,7 @@ export type Doc<TableName extends TableNames> = DocumentByName<
|
|
|
38
38
|
* Convex documents are uniquely identified by their `Id`, which is accessible
|
|
39
39
|
* on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).
|
|
40
40
|
*
|
|
41
|
-
* Documents can be loaded using `db.get(id)` in query and mutation functions.
|
|
41
|
+
* Documents can be loaded using `db.get(tableName, id)` in query and mutation functions.
|
|
42
42
|
*
|
|
43
43
|
* IDs are just strings at runtime, but this type can be used to distinguish them from other
|
|
44
44
|
* strings when type checking.
|
|
@@ -107,11 +107,6 @@ export const internalAction: ActionBuilder<DataModel, "internal"> =
|
|
|
107
107
|
*/
|
|
108
108
|
export const httpAction: HttpActionBuilder = httpActionGeneric;
|
|
109
109
|
|
|
110
|
-
type GenericCtx =
|
|
111
|
-
| GenericActionCtx<DataModel>
|
|
112
|
-
| GenericMutationCtx<DataModel>
|
|
113
|
-
| GenericQueryCtx<DataModel>;
|
|
114
|
-
|
|
115
110
|
/**
|
|
116
111
|
* A set of services for use within Convex query functions.
|
|
117
112
|
*
|
package/src/component/public.ts
CHANGED
|
@@ -132,7 +132,7 @@ async function scheduleNextRun(
|
|
|
132
132
|
internal.public.rescheduler,
|
|
133
133
|
{ id },
|
|
134
134
|
);
|
|
135
|
-
await ctx.db.patch(id, { schedulerJobId });
|
|
135
|
+
await ctx.db.patch("crons", id, { schedulerJobId });
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
function calculateNextRun(lastScheduled: Date, schedule: Schedule): Date {
|
|
@@ -184,7 +184,7 @@ export const get = query({
|
|
|
184
184
|
handler: async (ctx, { identifier }) => {
|
|
185
185
|
const cron =
|
|
186
186
|
"id" in identifier
|
|
187
|
-
? await ctx.db.get(identifier.id)
|
|
187
|
+
? await ctx.db.get("crons", identifier.id)
|
|
188
188
|
: await ctx.db
|
|
189
189
|
.query("crons")
|
|
190
190
|
.withIndex("name", (q) => q.eq("name", identifier.name))
|
|
@@ -216,7 +216,7 @@ export const del = mutation({
|
|
|
216
216
|
handler: async (ctx, { identifier }) => {
|
|
217
217
|
let cron: Doc<"crons"> | null;
|
|
218
218
|
if ("id" in identifier) {
|
|
219
|
-
cron = await ctx.db.get(identifier.id);
|
|
219
|
+
cron = await ctx.db.get("crons", identifier.id);
|
|
220
220
|
if (!cron) {
|
|
221
221
|
throw new Error(`Cron ${identifier.id} not found`);
|
|
222
222
|
}
|
|
@@ -239,7 +239,7 @@ export const del = mutation({
|
|
|
239
239
|
await ctx.scheduler.cancel(cron.executionJobId);
|
|
240
240
|
}
|
|
241
241
|
console.log(`Deleting cron ${cron._id}`);
|
|
242
|
-
await ctx.db.delete(cron._id);
|
|
242
|
+
await ctx.db.delete("crons", cron._id);
|
|
243
243
|
},
|
|
244
244
|
});
|
|
245
245
|
|
|
@@ -257,7 +257,7 @@ export const rescheduler = internalMutation({
|
|
|
257
257
|
returns: v.null(),
|
|
258
258
|
handler: async (ctx, { id }) => {
|
|
259
259
|
// Cron job is the logical concept we're rescheduling repeatedly.
|
|
260
|
-
const cronJob = await ctx.db.get(id);
|
|
260
|
+
const cronJob = await ctx.db.get("crons", id);
|
|
261
261
|
if (!cronJob) {
|
|
262
262
|
throw Error(`Cron ${id} not found`);
|
|
263
263
|
}
|
|
@@ -267,7 +267,10 @@ export const rescheduler = internalMutation({
|
|
|
267
267
|
|
|
268
268
|
// Scheduler job is the job that's running right now, that we use to trigger
|
|
269
269
|
// repeated executions.
|
|
270
|
-
const schedulerJob = await ctx.db.system.get(
|
|
270
|
+
const schedulerJob = await ctx.db.system.get(
|
|
271
|
+
"_scheduled_functions",
|
|
272
|
+
cronJob.schedulerJobId,
|
|
273
|
+
);
|
|
271
274
|
if (!schedulerJob) {
|
|
272
275
|
throw Error(`Scheduler job ${cronJob.schedulerJobId} not found`);
|
|
273
276
|
}
|
|
@@ -283,7 +286,10 @@ export const rescheduler = internalMutation({
|
|
|
283
286
|
// Execution job is the previous job used to actually do the work of the cron.
|
|
284
287
|
let stillRunning = false;
|
|
285
288
|
if (cronJob.executionJobId) {
|
|
286
|
-
const executionJob = await ctx.db.system.get(
|
|
289
|
+
const executionJob = await ctx.db.system.get(
|
|
290
|
+
"_scheduled_functions",
|
|
291
|
+
cronJob.executionJobId,
|
|
292
|
+
);
|
|
287
293
|
if (
|
|
288
294
|
executionJob &&
|
|
289
295
|
(executionJob.state.kind === "pending" ||
|
|
@@ -296,11 +302,12 @@ export const rescheduler = internalMutation({
|
|
|
296
302
|
console.log(`Cron ${cronJob._id} still running, skipping this run.`);
|
|
297
303
|
} else {
|
|
298
304
|
console.log(`Running cron ${cronJob._id}.`);
|
|
299
|
-
await ctx.scheduler.runAfter(
|
|
305
|
+
const executionJobId = await ctx.scheduler.runAfter(
|
|
300
306
|
0,
|
|
301
307
|
cronJob.functionHandle as FunctionHandle<"mutation" | "action">,
|
|
302
308
|
cronJob.args,
|
|
303
309
|
);
|
|
310
|
+
await ctx.db.patch("crons", id, { executionJobId });
|
|
304
311
|
}
|
|
305
312
|
|
|
306
313
|
await scheduleNextRun(
|