@legonode/cron 0.0.2 → 0.0.3
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/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -2
- package/dist/plugin.js.map +1 -1
- package/dist/scheduleLoader.d.ts +5 -1
- package/dist/scheduleLoader.d.ts.map +1 -1
- package/dist/scheduleLoader.js +89 -32
- package/dist/scheduleLoader.js.map +1 -1
- package/package.json +3 -3
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAU/C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,yEAAyE;IACzE,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,mBAAmB,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,eAAe;QACvB,QAAQ,EAAE,gBAAgB,CAAC;KAC5B;CACF;AAyBD,wBAAgB,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAmGpE"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { clearScheduleRunnerCache, getOrCreateScheduleRunner, loadSchedulesFromApp, } from "./scheduleLoader.js";
|
|
2
2
|
import { runScheduler } from "./runScheduler.js";
|
|
3
|
+
import { CRON_EXTENSIONS } from "./scheduleLoader.js";
|
|
3
4
|
function parseAtMs(at) {
|
|
4
5
|
if (typeof at === "number")
|
|
5
6
|
return Number.isFinite(at) ? at : null;
|
|
@@ -17,8 +18,12 @@ function isCronFile(filename) {
|
|
|
17
18
|
if (!filename)
|
|
18
19
|
return false;
|
|
19
20
|
const normalized = filename.replaceAll("\\", "/");
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
if (normalized.endsWith(".d.ts"))
|
|
22
|
+
return false;
|
|
23
|
+
const underCron = normalized.startsWith("cron/") || normalized.includes("/cron/");
|
|
24
|
+
if (!underCron)
|
|
25
|
+
return false;
|
|
26
|
+
return CRON_EXTENSIONS.some((ext) => normalized.endsWith(ext));
|
|
22
27
|
}
|
|
23
28
|
export function Cron(options = {}) {
|
|
24
29
|
const disableDevCron = options.disableDevCron === true;
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/scheduleLoader.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { LoadedTask } from "./types.js";
|
|
2
|
+
export declare const CRON_EXTENSIONS: string[];
|
|
2
3
|
export type ScheduleRunnerFn = (name: string, payload?: unknown) => void | Promise<void>;
|
|
3
4
|
/** Build a runner that invokes a schedule's run by name (e.g. "interval.example"). */
|
|
4
5
|
export declare function createScheduleRunner(tasks: LoadedTask[]): ScheduleRunnerFn;
|
|
@@ -8,7 +9,10 @@ export type ScannedSchedule = {
|
|
|
8
9
|
name: string;
|
|
9
10
|
filePath: string;
|
|
10
11
|
};
|
|
12
|
+
/** List `*.cron.*` files under `appDir/cron/` recursively (same idea as `scanEventFiles`). */
|
|
11
13
|
export declare function scanScheduleFiles(appDir: string): ScannedSchedule[];
|
|
12
|
-
export declare function loadScheduleModule(filePath: string, cacheBust?: string
|
|
14
|
+
export declare function loadScheduleModule(filePath: string, cacheBust?: string,
|
|
15
|
+
/** From {@link scanScheduleFiles} when set (path-based default, supports nested `cron/`). */
|
|
16
|
+
defaultNameFromPath?: string): Promise<LoadedTask | null>;
|
|
13
17
|
export declare function loadSchedulesFromApp(appDir: string, cacheBust?: string): Promise<LoadedTask[]>;
|
|
14
18
|
//# sourceMappingURL=scheduleLoader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleLoader.d.ts","sourceRoot":"","sources":["../src/scheduleLoader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scheduleLoader.d.ts","sourceRoot":"","sources":["../src/scheduleLoader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,UAAU,EAGX,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,eAAe,UAW3B,CAAC;AA0BF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,KACd,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAI1B,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAc1E;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAY3B;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9D;AAOD,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAmDjE,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CASnE;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM;AAClB,6FAA6F;AAC7F,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAsB5B;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,EAAE,CAAC,CAQvB"}
|
package/dist/scheduleLoader.js
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
1
1
|
import { readdirSync } from "node:fs";
|
|
2
|
-
import { join,
|
|
2
|
+
import { basename, join, relative, resolve } from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import { invalidateModuleCache } from "./moduleCache.js";
|
|
5
|
-
const CRON_EXTENSIONS = [
|
|
5
|
+
export const CRON_EXTENSIONS = [
|
|
6
|
+
".cron.ts",
|
|
7
|
+
".cron.js",
|
|
8
|
+
".cron.mts",
|
|
9
|
+
".cron.mjs",
|
|
10
|
+
".cron.cjs",
|
|
11
|
+
".ts",
|
|
12
|
+
".js",
|
|
13
|
+
".mts",
|
|
14
|
+
".mjs",
|
|
15
|
+
".cjs",
|
|
16
|
+
];
|
|
6
17
|
const CRON_DIR = "cron";
|
|
7
|
-
/**
|
|
8
|
-
function
|
|
9
|
-
if (!
|
|
18
|
+
/** One path segment / basename (e.g. `billing`, `invoicePaid`) → dot.case (matches events under `events/`). */
|
|
19
|
+
function cronSegmentToDotCase(baseName) {
|
|
20
|
+
if (!baseName.length)
|
|
10
21
|
return "";
|
|
11
22
|
const parts = [];
|
|
12
|
-
let current =
|
|
13
|
-
for (let i = 1; i <
|
|
14
|
-
const c =
|
|
23
|
+
let current = baseName[0].toLowerCase();
|
|
24
|
+
for (let i = 1; i < baseName.length; i++) {
|
|
25
|
+
const c = baseName[i];
|
|
15
26
|
if (c >= "A" && c <= "Z") {
|
|
16
27
|
parts.push(current);
|
|
17
28
|
current = c.toLowerCase();
|
|
@@ -23,6 +34,10 @@ function toScheduleName(name) {
|
|
|
23
34
|
parts.push(current);
|
|
24
35
|
return parts.join(".");
|
|
25
36
|
}
|
|
37
|
+
/** Convert task name (e.g. intervalExample) to schedule name (e.g. interval.example). */
|
|
38
|
+
function toScheduleName(name) {
|
|
39
|
+
return cronSegmentToDotCase(name);
|
|
40
|
+
}
|
|
26
41
|
const scheduleRunnerCache = new Map();
|
|
27
42
|
/** Build a runner that invokes a schedule's run by name (e.g. "interval.example"). */
|
|
28
43
|
export function createScheduleRunner(tasks) {
|
|
@@ -45,7 +60,9 @@ export async function getOrCreateScheduleRunner(appDir) {
|
|
|
45
60
|
let runner = scheduleRunnerCache.get(key);
|
|
46
61
|
if (runner)
|
|
47
62
|
return runner;
|
|
48
|
-
const cacheBust = typeof process !== "undefined"
|
|
63
|
+
const cacheBust = typeof process !== "undefined"
|
|
64
|
+
? process.env.LEGONODE_CRON_RELOAD_TOKEN
|
|
65
|
+
: undefined;
|
|
49
66
|
const tasks = await loadSchedulesFromApp(appDir, cacheBust);
|
|
50
67
|
runner = createScheduleRunner(tasks);
|
|
51
68
|
scheduleRunnerCache.set(key, runner);
|
|
@@ -62,31 +79,70 @@ function normalizeSchedule(schedule) {
|
|
|
62
79
|
return schedule;
|
|
63
80
|
return [schedule];
|
|
64
81
|
}
|
|
82
|
+
function listCronFiles(cronDir) {
|
|
83
|
+
const out = [];
|
|
84
|
+
function walk(current) {
|
|
85
|
+
let dirents;
|
|
86
|
+
try {
|
|
87
|
+
dirents = readdirSync(current, { withFileTypes: true });
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
for (const d of dirents) {
|
|
93
|
+
const full = join(current, d.name);
|
|
94
|
+
if (d.isDirectory()) {
|
|
95
|
+
walk(full);
|
|
96
|
+
}
|
|
97
|
+
else if (d.isFile()) {
|
|
98
|
+
if (d.name.endsWith(".d.ts"))
|
|
99
|
+
continue;
|
|
100
|
+
const ext = CRON_EXTENSIONS.find((e) => d.name.endsWith(e));
|
|
101
|
+
if (!ext)
|
|
102
|
+
continue;
|
|
103
|
+
const rel = relative(cronDir, full).replaceAll("\\", "/");
|
|
104
|
+
out.push({ filePath: full, rel });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
walk(cronDir);
|
|
109
|
+
out.sort((a, b) => a.rel.localeCompare(b.rel));
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Dot.case schedule id from path under `cron/`, e.g. `billing/syncOrders.cron.ts` → `billing.sync.orders`.
|
|
114
|
+
* Used as the default task name when the module does not export `name`.
|
|
115
|
+
*/
|
|
116
|
+
function scheduleNameFromRelativeCronPath(rel) {
|
|
117
|
+
const segments = rel.split("/").filter((p) => p.length > 0);
|
|
118
|
+
if (segments.length === 0)
|
|
119
|
+
return "";
|
|
120
|
+
const fileName = segments[segments.length - 1];
|
|
121
|
+
const ext = CRON_EXTENSIONS.find((e) => fileName.endsWith(e));
|
|
122
|
+
if (!ext)
|
|
123
|
+
return "";
|
|
124
|
+
const baseName = fileName.slice(0, -ext.length);
|
|
125
|
+
const dirParts = segments.slice(0, -1);
|
|
126
|
+
const pieces = [...dirParts, baseName]
|
|
127
|
+
.map((s) => cronSegmentToDotCase(s))
|
|
128
|
+
.filter((s) => s.length > 0);
|
|
129
|
+
return pieces.join(".");
|
|
130
|
+
}
|
|
131
|
+
/** List `*.cron.*` files under `appDir/cron/` recursively (same idea as `scanEventFiles`). */
|
|
65
132
|
export function scanScheduleFiles(appDir) {
|
|
66
|
-
const
|
|
133
|
+
const cronDir = resolve(appDir, CRON_DIR);
|
|
67
134
|
const list = [];
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
name: e.name,
|
|
72
|
-
isFile: e.isFile()
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return list;
|
|
77
|
-
}
|
|
78
|
-
for (const entry of entries) {
|
|
79
|
-
if (!entry.isFile)
|
|
80
|
-
continue;
|
|
81
|
-
const ext = CRON_EXTENSIONS.find((e) => entry.name.endsWith(e));
|
|
82
|
-
if (!ext)
|
|
135
|
+
for (const { filePath, rel } of listCronFiles(cronDir)) {
|
|
136
|
+
const name = scheduleNameFromRelativeCronPath(rel);
|
|
137
|
+
if (!name)
|
|
83
138
|
continue;
|
|
84
|
-
|
|
85
|
-
list.push({ name, filePath: join(base, entry.name) });
|
|
139
|
+
list.push({ name, filePath });
|
|
86
140
|
}
|
|
87
141
|
return list;
|
|
88
142
|
}
|
|
89
|
-
export async function loadScheduleModule(filePath, cacheBust
|
|
143
|
+
export async function loadScheduleModule(filePath, cacheBust,
|
|
144
|
+
/** From {@link scanScheduleFiles} when set (path-based default, supports nested `cron/`). */
|
|
145
|
+
defaultNameFromPath) {
|
|
90
146
|
try {
|
|
91
147
|
if (cacheBust)
|
|
92
148
|
invalidateModuleCache(filePath);
|
|
@@ -98,11 +154,12 @@ export async function loadScheduleModule(filePath, cacheBust) {
|
|
|
98
154
|
if (schedule == null || typeof run !== "function")
|
|
99
155
|
return null;
|
|
100
156
|
const scheduleList = normalizeSchedule(schedule);
|
|
101
|
-
const
|
|
157
|
+
const fallbackBasename = basename(filePath).replace(/\.cron\.(ts|js|mts|mjs)$/i, "") || "task";
|
|
158
|
+
const name = (mod.name ?? defaultNameFromPath ?? fallbackBasename) || "task";
|
|
102
159
|
return {
|
|
103
160
|
name,
|
|
104
161
|
schedule: scheduleList,
|
|
105
|
-
run: run
|
|
162
|
+
run: run,
|
|
106
163
|
};
|
|
107
164
|
}
|
|
108
165
|
catch {
|
|
@@ -112,8 +169,8 @@ export async function loadScheduleModule(filePath, cacheBust) {
|
|
|
112
169
|
export async function loadSchedulesFromApp(appDir, cacheBust) {
|
|
113
170
|
const scanned = scanScheduleFiles(appDir);
|
|
114
171
|
const tasks = [];
|
|
115
|
-
for (const { filePath } of scanned) {
|
|
116
|
-
const task = await loadScheduleModule(filePath, cacheBust);
|
|
172
|
+
for (const { filePath, name: pathDefaultName } of scanned) {
|
|
173
|
+
const task = await loadScheduleModule(filePath, cacheBust, pathDefaultName);
|
|
117
174
|
if (task)
|
|
118
175
|
tasks.push(task);
|
|
119
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleLoader.js","sourceRoot":"","sources":["../src/scheduleLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"scheduleLoader.js","sourceRoot":"","sources":["../src/scheduleLoader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@legonode/cron",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Cron schedules, loader, and runner for Legonode apps (app/cron/*.cron.ts)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
},
|
|
23
23
|
"types": "./dist/index.d.ts",
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"legonode": ">=0.0.
|
|
25
|
+
"legonode": ">=0.0.6"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"legonode": "
|
|
28
|
+
"legonode": "^0.0.6"
|
|
29
29
|
}
|
|
30
30
|
}
|