Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit 57ae6d2

Browse files
✨ Support for cron jobs
1 parent 4405b5e commit 57ae6d2

File tree

4 files changed

+58
-4
lines changed

4 files changed

+58
-4
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "staart",
3-
"version": "1.0.35",
3+
"version": "1.0.36",
44
"main": "index.js",
55
"repository": "git@github.com:AnandChowdhary/staart.git",
66
"author": "Anand Chowdhary <mail@anandchowdhary.com>",
@@ -37,6 +37,7 @@
3737
"@overnightjs/core": "^1.6.9",
3838
"@types/bcryptjs": "^2.4.2",
3939
"@types/cors": "^2.8.5",
40+
"@types/cron": "^1.7.1",
4041
"@types/dotenv": "^6.1.1",
4142
"@types/express": "^4.17.0",
4243
"@types/express-brute": "^0.0.37",
@@ -81,6 +82,7 @@
8182
"body-parser": "^1.19.0",
8283
"client-oauth2": "^4.2.4",
8384
"cors": "^2.8.5",
85+
"cron": "^1.7.1",
8486
"crypto-random-string": "^3.0.1",
8587
"express": "^4.17.0",
8688
"express-async-handler": "^1.1.4",

setup/controllers.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ controllers.forEach(controller => {
1515
.toString();
1616
exportName.push(controllerFile.split("export class ")[1].split(" ")[0]);
1717
});
18-
1918
const importCode = `${exportName
2019
.map(
2120
(e, i) =>
2221
`import { ${e} } from "./controllers/${controllers[i].split(".ts")[0]}";`
2322
)
2423
.join("\n")}`;
25-
2624
const insertCode = `
2725
// start automatic code
2826
super.addControllers([${exportName.map(e => `new ${e}()`).join(", ")}]);
@@ -40,7 +38,6 @@ try {
4038
} catch (error) {
4139
console.log("✅ Processed no redirect rules");
4240
}
43-
4441
const redirectCode = `
4542
${redirects
4643
.map(
@@ -57,6 +54,22 @@ server = server.replace("// staart-autogenerated", redirectCode);
5754
if (redirects.length)
5855
console.log(`✅ Processed ${redirects.length} redirect rules`);
5956

57+
// Cron jobs
58+
const crons = fs.readdirSync(path.join(SRC, "crons"));
59+
const cronImport = crons
60+
.map(
61+
cronFile =>
62+
`import cron_${cronFile.split(".ts")[0]} from "./crons/${
63+
cronFile.split(".ts")[0]
64+
}";`
65+
)
66+
.join("\n");
67+
const cronCode = `
68+
${crons.map(cronFile => `cron_${cronFile.split(".ts")[0]}();`)}
69+
`;
70+
server = cronImport + "\n" + cronCode + "\n" + server;
71+
if (crons.length) console.log(`✅ Setup ${crons.length} cron jobs`);
72+
6073
// Static files
6174
recursive(path.join(SRC, "..", "static"))
6275
.then(files => {

src/crons/daily.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { CronJob } from "cron";
2+
3+
export default () => {
4+
new CronJob(
5+
"0 0 * * *",
6+
() => {
7+
console.log("Once per day", new Date());
8+
},
9+
undefined,
10+
true
11+
);
12+
};

yarn.lock

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,14 @@
11281128
dependencies:
11291129
"@types/express" "*"
11301130

1131+
"@types/cron@^1.7.1":
1132+
version "1.7.1"
1133+
resolved "https://registry.yarnpkg.com/@types/cron/-/cron-1.7.1.tgz#752e47ebbe26e83d9e40f2dd6a3f679f2eec54b8"
1134+
integrity sha512-48brwgU18DqA0mQX1As5OcJEo1yNjaXMM6Mk4r8K1dOzLJRQ37FE/kCivKx7ClKEHfhX2FdcxKzJ1B744a+V3A==
1135+
dependencies:
1136+
"@types/node" "*"
1137+
moment ">=2.14.0"
1138+
11311139
"@types/dotenv@^6.1.1":
11321140
version "6.1.1"
11331141
resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-6.1.1.tgz#f7ce1cc4fe34f0a4373ba99fefa437b0bec54b46"
@@ -2249,6 +2257,13 @@ create-error-class@^3.0.0:
22492257
dependencies:
22502258
capture-stack-trace "^1.0.0"
22512259

2260+
cron@^1.7.1:
2261+
version "1.7.1"
2262+
resolved "https://registry.yarnpkg.com/cron/-/cron-1.7.1.tgz#e85ee9df794d1bc6579896ee382053c3ce33778f"
2263+
integrity sha512-gmMB/pJcqUVs/NklR1sCGlNYM7TizEw+1gebz20BMc/8bTm/r7QUp3ZPSPlG8Z5XRlvb7qhjEjq/+bdIfUCL2A==
2264+
dependencies:
2265+
moment-timezone "^0.5.x"
2266+
22522267
cross-spawn@^5.0.1:
22532268
version "5.1.0"
22542269
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -4679,6 +4694,18 @@ mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
46794694
dependencies:
46804695
minimist "0.0.8"
46814696

4697+
moment-timezone@^0.5.x:
4698+
version "0.5.25"
4699+
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.25.tgz#a11bfa2f74e088327f2cd4c08b3e7bdf55957810"
4700+
integrity sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==
4701+
dependencies:
4702+
moment ">= 2.9.0"
4703+
4704+
"moment@>= 2.9.0", moment@>=2.14.0:
4705+
version "2.24.0"
4706+
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
4707+
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
4708+
46824709
morgan@^1.9.1:
46834710
version "1.9.1"
46844711
resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59"

0 commit comments

Comments
 (0)