diff --git a/build/adonis-typings/container.d.ts b/build/adonis-typings/container.d.ts
deleted file mode 100644
index 52c44ac..0000000
--- a/build/adonis-typings/container.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-///
-declare module '@ioc:Adonis/Core/Application' {
- import { SchedulerContract } from '@ioc:Verful/Scheduler';
- interface ContainerBindings {
- 'Verful/Scheduler': SchedulerContract;
- }
-}
diff --git a/build/adonis-typings/container.js b/build/adonis-typings/container.js
deleted file mode 100644
index e69de29..0000000
diff --git a/build/adonis-typings/index.d.ts b/build/adonis-typings/index.d.ts
deleted file mode 100644
index 8d1ad49..0000000
--- a/build/adonis-typings/index.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-///
-///
diff --git a/build/adonis-typings/index.js b/build/adonis-typings/index.js
deleted file mode 100644
index e69de29..0000000
diff --git a/build/adonis-typings/scheduler.d.ts b/build/adonis-typings/scheduler.d.ts
deleted file mode 100644
index 28f27da..0000000
--- a/build/adonis-typings/scheduler.d.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-declare module '@ioc:Verful/Scheduler' {
- export type ScheduleHandler = () => void;
- export type Time = `${string}:${string}`;
- export type Condition = () => boolean | Promise;
- export interface ManagesFrequenciesContract {
- expression: string;
- cron(expression: string): this;
- everyMinute(): this;
- everyTwoMinutes(): this;
- everyThreeMinutes(): this;
- everyFourMinutes(): this;
- everyFiveMinutes(): this;
- everyTenMinutes(): this;
- everyFifteenMinutes(): this;
- everyThirtyMinutes(): this;
- hourly(): this;
- hourlyAt(offset: number | number[]): this;
- everyTwoHours(): this;
- everyFourHours(): this;
- everySixHours(): this;
- daily(): this;
- dailyAt(time: Time): this;
- twiceDaily(): this;
- twiceDailyAt(first: number, second: number, offset: number): this;
- weekly(): this;
- weeklyOn(daysOfWeek: number | number[] | string, time: Time): this;
- monthly(): this;
- monthlyOn(dayOfMonth: number, time: Time): this;
- twiceMonthly(first: number, second: number, time: Time): this;
- lastDayOfMonth(time: Time): this;
- yearly(): this;
- yearlyOn(month: number, dayOfMonth?: string | number, time?: Time): this;
- days(days: number | number[] | string): this;
- weekdays(): this;
- weekends(): this;
- sundays(): this;
- mondays(): this;
- tuesdays(): this;
- wednesdays(): this;
- thursdays(): this;
- fridays(): this;
- saturdays(): this;
- }
- export interface ScheduleContract extends ManagesFrequenciesContract {
- command: ScheduleHandler;
- filters: Condition[];
- rejects: Condition[];
- skip(condition: Condition): this;
- when(condition: Condition): this;
- between(start: Time, end: Time): this;
- unlessBetween(start: Time, end: Time): this;
- environments(environments: Array<'production' | 'development' | 'staging' | 'test'>): this;
- }
- export interface SchedulerContract {
- call(handler: ScheduleHandler): ScheduleContract;
- command(command: string | string[]): ScheduleContract;
- exec(command: string): ScheduleContract;
- start(): void;
- }
- const Scheduler: SchedulerContract;
- export default Scheduler;
-}
diff --git a/build/adonis-typings/scheduler.js b/build/adonis-typings/scheduler.js
deleted file mode 100644
index e69de29..0000000
diff --git a/build/bin/japa_types.d.ts b/build/bin/japa_types.d.ts
deleted file mode 100644
index 64490c7..0000000
--- a/build/bin/japa_types.d.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-///
-///
-///
-///
-///
-///
-///
-///
-///
-///
-import { ApplicationContract } from '@ioc:Adonis/Core/Application';
-import '@japa/runner';
-declare module '@japa/runner' {
- interface TestContext {
- app: ApplicationContract;
- }
- interface Test {
- }
-}
diff --git a/build/bin/japa_types.js b/build/bin/japa_types.js
deleted file mode 100644
index c6112f4..0000000
--- a/build/bin/japa_types.js
+++ /dev/null
@@ -1,3 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-require("@japa/runner");
diff --git a/build/bin/test.d.ts b/build/bin/test.d.ts
deleted file mode 100644
index d2c9bc6..0000000
--- a/build/bin/test.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-import 'reflect-metadata';
diff --git a/build/bin/test.js b/build/bin/test.js
deleted file mode 100644
index 5b675d2..0000000
--- a/build/bin/test.js
+++ /dev/null
@@ -1,66 +0,0 @@
-"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-require("reflect-metadata");
-const node_path_1 = require("node:path");
-const standalone_1 = require("@adonisjs/core/build/standalone");
-const assert_1 = require("@japa/assert");
-const runner_1 = require("@japa/runner");
-const spec_reporter_1 = require("@japa/spec-reporter");
-const dev_utils_1 = require("@poppinss/dev-utils");
-const fs = new dev_utils_1.Filesystem((0, node_path_1.resolve)(__dirname, '__app'));
-(0, runner_1.configure)({
- ...(0, runner_1.processCliArgs)(process.argv.slice(2)),
- files: ['tests/**/*.spec.ts'],
- plugins: [(0, assert_1.assert)()],
- reporters: [(0, spec_reporter_1.specReporter)()],
- importer: (filePath) => Promise.resolve(`${filePath}`).then(s => __importStar(require(s))),
- forceExit: true,
- setup: [
- async () => {
- await fs.add('.env', '');
- await fs.add('config/app.ts', `
- export const profiler = { enabled: true }
- export const appKey = 'averylong32charsrandomsecretkey',
- export const http = {
- cookie: {},
- trustProxy: () => true,
- }
- `);
- const app = new standalone_1.Application(fs.basePath, 'test', {
- providers: ['@adonisjs/core', '../../providers/scheduler_provider'],
- });
- await app.setup();
- await app.registerProviders();
- await app.bootProviders();
- return async () => {
- await app.shutdown();
- await fs.cleanup();
- };
- },
- ],
-});
-runner_1.TestContext.getter('app', () => require('@adonisjs/core/build/services/app.js').default);
-(0, runner_1.run)();
diff --git a/build/commands/index.d.ts b/build/commands/index.d.ts
deleted file mode 100644
index d451d2b..0000000
--- a/build/commands/index.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-declare const _default: string[];
-export default _default;
diff --git a/build/commands/index.js b/build/commands/index.js
deleted file mode 100644
index 4af0d83..0000000
--- a/build/commands/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.default = ['@verful/scheduler/build/commands/scheduler_work'];
diff --git a/build/commands/scheduler_work.d.ts b/build/commands/scheduler_work.d.ts
deleted file mode 100644
index 003e047..0000000
--- a/build/commands/scheduler_work.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { BaseCommand } from '@adonisjs/core/build/standalone';
-export default class ProcessSchedule extends BaseCommand {
- static commandName: string;
- static description: string;
- static settings: {
- loadApp: boolean;
- stayAlive: boolean;
- };
- run(): Promise;
-}
diff --git a/build/commands/scheduler_work.js b/build/commands/scheduler_work.js
deleted file mode 100644
index 7eb9ee4..0000000
--- a/build/commands/scheduler_work.js
+++ /dev/null
@@ -1,15 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const standalone_1 = require("@adonisjs/core/build/standalone");
-class ProcessSchedule extends standalone_1.BaseCommand {
- static commandName = 'scheduler:work';
- static description = 'Process the scheduled tasks';
- static settings = {
- loadApp: true,
- stayAlive: true,
- };
- async run() {
- this.application.container.use('Verful/Scheduler').start();
- }
-}
-exports.default = ProcessSchedule;
diff --git a/build/instructions.md b/build/instructions.md
deleted file mode 100644
index 5c3a8c7..0000000
--- a/build/instructions.md
+++ /dev/null
@@ -1 +0,0 @@
-The package has been configured successfully.
diff --git a/build/providers/scheduler_provider.d.ts b/build/providers/scheduler_provider.d.ts
deleted file mode 100644
index 572c3ac..0000000
--- a/build/providers/scheduler_provider.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-///
-///
-///
-///
-///
-///
-///
-///
-///
-///
-import type { ApplicationContract } from '@ioc:Adonis/Core/Application';
-export default class ScheduleProvider {
- protected app: ApplicationContract;
- constructor(app: ApplicationContract);
- register(): void;
-}
diff --git a/build/providers/scheduler_provider.js b/build/providers/scheduler_provider.js
deleted file mode 100644
index 0d957e5..0000000
--- a/build/providers/scheduler_provider.js
+++ /dev/null
@@ -1,15 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-class ScheduleProvider {
- app;
- constructor(app) {
- this.app = app;
- }
- register() {
- this.app.container.singleton('Verful/Scheduler', () => {
- const { default: Scheduler } = require('../src/scheduler');
- return new Scheduler(this.app);
- });
- }
-}
-exports.default = ScheduleProvider;
diff --git a/build/src/manages_frequencies.d.ts b/build/src/manages_frequencies.d.ts
deleted file mode 100644
index 3015d66..0000000
--- a/build/src/manages_frequencies.d.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-///
-import { ManagesFrequenciesContract, Time } from '@ioc:Verful/Scheduler';
-export default class ManagesFrequencies implements ManagesFrequenciesContract {
- expression: string;
- protected currentTimezone: string;
- timezone(timezone: string): this;
- protected spliceIntoPosition(position: number, value: string | number): this;
- everyMinute(): this;
- everyTwoMinutes(): this;
- everyThreeMinutes(): this;
- everyFourMinutes(): this;
- everyFiveMinutes(): this;
- everyTenMinutes(): this;
- everyFifteenMinutes(): this;
- everyThirtyMinutes(): this;
- hourly(): this;
- hourlyAt(offset: number | number[]): this;
- everyTwoHours(): this;
- everyThreeHours(): this;
- everyFourHours(): this;
- everySixHours(): this;
- daily(): this;
- dailyAt(time: Time): this;
- twiceDaily(): this;
- twiceDailyAt(first: number, second: number, offset?: number): this;
- weekly(): this;
- weeklyOn(daysOfWeek: number | number[] | string, time: Time): this;
- monthly(): this;
- monthlyOn(dayOfMonth: number, time?: Time): this;
- twiceMonthly(first?: number, second?: number, time?: Time): this;
- lastDayOfMonth(time?: Time): this;
- quarterly(): this;
- yearly(): this;
- yearlyOn(month: number, dayOfMonth?: string | number, time?: Time): this;
- days(days: number | number[] | string): this;
- weekdays(): this;
- weekends(): this;
- sundays(): this;
- mondays(): this;
- tuesdays(): this;
- wednesdays(): this;
- thursdays(): this;
- fridays(): this;
- saturdays(): this;
- cron(expression: string): this;
-}
diff --git a/build/src/manages_frequencies.js b/build/src/manages_frequencies.js
deleted file mode 100644
index 226b7b4..0000000
--- a/build/src/manages_frequencies.js
+++ /dev/null
@@ -1,152 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const luxon_1 = require("luxon");
-const Weekdays = Object.freeze({
- MONDAY: 1,
- TUESDAY: 2,
- WEDNESDAY: 3,
- THURSDAY: 4,
- FRIDAY: 5,
- SATURDAY: 6,
- SUNDAY: 7,
-});
-class ManagesFrequencies {
- expression = '* * * * *';
- currentTimezone = 'UTC';
- timezone(timezone) {
- this.currentTimezone = timezone;
- return this;
- }
- spliceIntoPosition(position, value) {
- const segments = this.expression.split(' ');
- segments[position] = String(value);
- return this.cron(segments.join(' '));
- }
- everyMinute() {
- return this.spliceIntoPosition(0, '*');
- }
- everyTwoMinutes() {
- return this.spliceIntoPosition(0, '*/2');
- }
- everyThreeMinutes() {
- return this.spliceIntoPosition(0, '*/3');
- }
- everyFourMinutes() {
- return this.spliceIntoPosition(0, '*/4');
- }
- everyFiveMinutes() {
- return this.spliceIntoPosition(0, '*/5');
- }
- everyTenMinutes() {
- return this.spliceIntoPosition(0, '*/10');
- }
- everyFifteenMinutes() {
- return this.spliceIntoPosition(0, '*/15');
- }
- everyThirtyMinutes() {
- return this.spliceIntoPosition(0, '0,30');
- }
- hourly() {
- return this.spliceIntoPosition(0, 0);
- }
- hourlyAt(offset) {
- const offsetString = Array.isArray(offset) ? offset.join(',') : offset;
- return this.spliceIntoPosition(0, offsetString);
- }
- everyTwoHours() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, '*/2');
- }
- everyThreeHours() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, '*/3');
- }
- everyFourHours() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, '*/4');
- }
- everySixHours() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, '*/6');
- }
- daily() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, 0);
- }
- dailyAt(time) {
- const [hour, minute] = time.split(':').map((value) => String(Number(value)));
- return this.spliceIntoPosition(0, minute).spliceIntoPosition(1, hour);
- }
- twiceDaily() {
- return this.twiceDailyAt(0, 12, 0);
- }
- twiceDailyAt(first, second, offset = 0) {
- const hours = `${first},${second}`;
- return this.spliceIntoPosition(0, offset).spliceIntoPosition(1, hours);
- }
- weekly() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, 0).spliceIntoPosition(4, 0);
- }
- weeklyOn(daysOfWeek, time) {
- return this.days(daysOfWeek).dailyAt(time);
- }
- monthly() {
- return this.spliceIntoPosition(0, 0).spliceIntoPosition(1, 0).spliceIntoPosition(2, 1);
- }
- monthlyOn(dayOfMonth, time = '00:00') {
- return this.dailyAt(time).spliceIntoPosition(2, dayOfMonth);
- }
- twiceMonthly(first = 1, second = 16, time = '00:00') {
- const daysOfMonth = `${first},${second}`;
- return this.spliceIntoPosition(2, daysOfMonth).dailyAt(time);
- }
- lastDayOfMonth(time = '00:00') {
- return this.spliceIntoPosition(2, luxon_1.DateTime.now().setZone(this.currentTimezone).endOf('month').day).dailyAt(time);
- }
- quarterly() {
- return this.spliceIntoPosition(0, 0)
- .spliceIntoPosition(1, 0)
- .spliceIntoPosition(2, 1)
- .spliceIntoPosition(3, '1-12/3');
- }
- yearly() {
- return this.spliceIntoPosition(0, 0)
- .spliceIntoPosition(1, 0)
- .spliceIntoPosition(2, 1)
- .spliceIntoPosition(3, 1);
- }
- yearlyOn(month, dayOfMonth = 1, time = '00:00') {
- return this.spliceIntoPosition(2, dayOfMonth).spliceIntoPosition(3, month).dailyAt(time);
- }
- days(days) {
- const daysString = Array.isArray(days) ? days.join(',') : days;
- return this.spliceIntoPosition(4, daysString);
- }
- weekdays() {
- return this.days(`${Weekdays.MONDAY}-${Weekdays.FRIDAY}`);
- }
- weekends() {
- return this.days(`${Weekdays.SATURDAY},${Weekdays.SUNDAY}`);
- }
- sundays() {
- return this.days(Weekdays.SUNDAY);
- }
- mondays() {
- return this.days(Weekdays.MONDAY);
- }
- tuesdays() {
- return this.days(Weekdays.TUESDAY);
- }
- wednesdays() {
- return this.days(Weekdays.WEDNESDAY);
- }
- thursdays() {
- return this.days(Weekdays.THURSDAY);
- }
- fridays() {
- return this.days(Weekdays.FRIDAY);
- }
- saturdays() {
- return this.days(Weekdays.SATURDAY);
- }
- cron(expression) {
- this.expression = expression;
- return this;
- }
-}
-exports.default = ManagesFrequencies;
diff --git a/build/src/schedule.d.ts b/build/src/schedule.d.ts
deleted file mode 100644
index 6485df0..0000000
--- a/build/src/schedule.d.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-///
-///
-///
-///
-///
-///
-///
-///
-///
-///
-///
-import { ApplicationContract } from '@ioc:Adonis/Core/Application';
-import { Condition, ScheduleContract, ScheduleHandler, Time } from '@ioc:Verful/Scheduler';
-import ManagesFrequencies from './manages_frequencies';
-export default class Schedule extends ManagesFrequencies implements ScheduleContract {
- private app;
- command: ScheduleHandler;
- constructor(app: ApplicationContract, command: ScheduleHandler);
- protected inTimeInterval(startTime: Time, endTime: Time): () => boolean;
- between(start: Time, end: Time): this;
- unlessBetween(start: Time, end: Time): this;
- filters: Condition[];
- rejects: Condition[];
- skip(condition: Condition): this;
- when(condition: Condition): this;
- environments(environments: Array<'production' | 'development' | 'staging' | 'test'>): this;
-}
diff --git a/build/src/schedule.js b/build/src/schedule.js
deleted file mode 100644
index aa22d20..0000000
--- a/build/src/schedule.js
+++ /dev/null
@@ -1,59 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const luxon_1 = require("luxon");
-const manages_frequencies_1 = __importDefault(require("./manages_frequencies"));
-class Schedule extends manages_frequencies_1.default {
- app;
- command;
- constructor(app, command) {
- super();
- this.app = app;
- this.command = command;
- }
- inTimeInterval(startTime, endTime) {
- const [startHours, startMinutes] = startTime.split(':').map(Number);
- const [endHours, endMinutes] = endTime.split(':').map(Number);
- let [now, start, end] = [
- luxon_1.DateTime.now().setZone(this.currentTimezone),
- luxon_1.DateTime.now()
- .set({ minute: startMinutes, hour: startHours, second: 0, millisecond: 0 })
- .setZone(this.currentTimezone),
- luxon_1.DateTime.now()
- .set({ minute: endMinutes, hour: endHours, second: 0, millisecond: 0 })
- .setZone(this.currentTimezone),
- ];
- if (end < start) {
- if (start > now) {
- start = start.minus({ days: 1 });
- }
- else {
- end = end.plus({ days: 1 });
- }
- }
- return () => now > start && now < end;
- }
- between(start, end) {
- return this.when(this.inTimeInterval(start, end));
- }
- unlessBetween(start, end) {
- return this.skip(this.inTimeInterval(start, end));
- }
- filters = [];
- rejects = [];
- skip(condition) {
- this.rejects.push(condition);
- return this;
- }
- when(condition) {
- this.filters.push(condition);
- return this;
- }
- environments(environments) {
- this.when(() => environments.includes(this.app.nodeEnvironment));
- return this;
- }
-}
-exports.default = Schedule;
diff --git a/build/src/scheduler.d.ts b/build/src/scheduler.d.ts
deleted file mode 100644
index 502c560..0000000
--- a/build/src/scheduler.d.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-///
-///
-///
-///
-///
-///
-///
-///
-///
-///
-///
-import { ApplicationContract } from '@ioc:Adonis/Core/Application';
-import { ScheduleContract, SchedulerContract } from '@ioc:Verful/Scheduler';
-export default class Scheduler implements SchedulerContract {
- private app;
- private events;
- constructor(app: ApplicationContract);
- call(callback: () => void): ScheduleContract;
- command(command: string | string[]): ScheduleContract;
- exec(command: string): ScheduleContract;
- start(): void;
-}
diff --git a/build/src/scheduler.js b/build/src/scheduler.js
deleted file mode 100644
index 46a618a..0000000
--- a/build/src/scheduler.js
+++ /dev/null
@@ -1,61 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const execa_1 = __importDefault(require("execa"));
-const node_cron_1 = __importDefault(require("node-cron"));
-const schedule_1 = __importDefault(require("./schedule"));
-class Scheduler {
- app;
- events = [];
- constructor(app) {
- this.app = app;
- }
- call(callback) {
- const schedule = new schedule_1.default(this.app, callback);
- this.events.push(schedule);
- return schedule;
- }
- command(command) {
- const commandArguments = Array.isArray(command) ? command : command.split(' ');
- const callback = async () => {
- try {
- const result = await execa_1.default.node('ace', commandArguments);
- return result.stdout;
- }
- catch (error) {
- return error;
- }
- };
- return this.call(callback);
- }
- exec(command) {
- const callback = async () => {
- try {
- const result = await execa_1.default.command(command);
- return result.stdout;
- }
- catch (error) {
- return error;
- }
- };
- return this.call(callback);
- }
- start() {
- this.app.logger.info('Schedule processing started');
- for (const event of this.events)
- node_cron_1.default.schedule(event.expression, async () => {
- for (const filter of event.filters) {
- if (!(await filter()))
- return;
- }
- for (const reject of event.rejects) {
- if (await reject())
- return;
- }
- return await event.command();
- });
- }
-}
-exports.default = Scheduler;
diff --git a/build/templates/tasks.txt b/build/templates/tasks.txt
deleted file mode 100644
index 906bd18..0000000
--- a/build/templates/tasks.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-import Scheduler from '@ioc:Verful/Scheduler'
-
-/*
-|--------------------------------------------------------------------------
-| Scheduled tasks
-|--------------------------------------------------------------------------
-|
-| Scheduled tasks allow you to run recurrent tasks in the background of your
-| application. Here you can define all your scheduled tasks.
-|
-| You can define a scheduled task using the `.call` method on the Scheduler object
-| as shown in the following example
-|
-| ```
-| Scheduler.call(() => {
-| console.log('I am a scheduled task')
-| }).everyMinute()
-| ```
-|
-| The example above will print the message `I am a scheduled task` every minute.
-|
-| You can also schedule ace commands using the `.command` method on the Scheduler
-| object as shown in the following example
-|
-| ```
-| Scheduler.command('greet').everyMinute()
-| ```
-|
-| The example above will run the `greet` command every minute.
-|
-| You can also schedule shell commands with arguments using the `.exec` method on the Scheduler
-| object as shown in the following example
-|
-| ```
-| Scheduler.exec('node ace greet').everyMinute()
-| ```
-|
-| The example above will run the `node ace greet` command every minute.
-|
-| Happy scheduling!
-*/
diff --git a/build/tests/manages_frequencies.spec.d.ts b/build/tests/manages_frequencies.spec.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/build/tests/manages_frequencies.spec.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/build/tests/manages_frequencies.spec.js b/build/tests/manages_frequencies.spec.js
deleted file mode 100644
index 962e205..0000000
--- a/build/tests/manages_frequencies.spec.js
+++ /dev/null
@@ -1,232 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const runner_1 = require("@japa/runner");
-const sinon_1 = __importDefault(require("sinon"));
-const manages_frequencies_1 = __importDefault(require("../src/manages_frequencies"));
-runner_1.test.group('ManagesFrequencies', (group) => {
- group.each.setup(() => {
- return () => sinon_1.default.restore();
- });
- (0, runner_1.test)('can create instance', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- assert.instanceOf(managesFrequencies, manages_frequencies_1.default);
- });
- (0, runner_1.test)('can set timezone', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- const timezone = 'America/New_York';
- managesFrequencies.timezone(timezone);
- assert.equal(managesFrequencies['currentTimezone'], timezone);
- });
- (0, runner_1.test)('can set expression with cron', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- const expression = '0 0 * * *';
- managesFrequencies.cron(expression);
- assert.equal(managesFrequencies['expression'], expression);
- });
- (0, runner_1.test)('can set expression for every minute', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyMinute();
- assert.equal(managesFrequencies['expression'], '* * * * *');
- });
- (0, runner_1.test)('can set expression for every two minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyTwoMinutes();
- assert.equal(managesFrequencies['expression'], '*/2 * * * *');
- });
- (0, runner_1.test)('can set expression for every three minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyThreeMinutes();
- assert.equal(managesFrequencies['expression'], '*/3 * * * *');
- });
- (0, runner_1.test)('can set expression for every four minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyFourMinutes();
- assert.equal(managesFrequencies['expression'], '*/4 * * * *');
- });
- (0, runner_1.test)('can set expression for every five minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyFiveMinutes();
- assert.equal(managesFrequencies['expression'], '*/5 * * * *');
- });
- (0, runner_1.test)('can set expression for every ten minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyTenMinutes();
- assert.equal(managesFrequencies['expression'], '*/10 * * * *');
- });
- (0, runner_1.test)('can set expression for every fifteen minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyFifteenMinutes();
- assert.equal(managesFrequencies['expression'], '*/15 * * * *');
- });
- (0, runner_1.test)('can set expression for every thirty minutes', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyThirtyMinutes();
- assert.equal(managesFrequencies['expression'], '0,30 * * * *');
- });
- (0, runner_1.test)('can set expression for hourly', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.hourly();
- assert.equal(managesFrequencies['expression'], '0 * * * *');
- });
- (0, runner_1.test)('can set expression for hourly at offset', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.hourlyAt(3);
- assert.equal(managesFrequencies['expression'], '3 * * * *');
- });
- (0, runner_1.test)('can set expression for hourly at multiple offsets', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.hourlyAt([3, 9]);
- assert.equal(managesFrequencies['expression'], '3,9 * * * *');
- });
- (0, runner_1.test)('can set expression for every two hours', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyTwoHours();
- assert.equal(managesFrequencies['expression'], '0 */2 * * *');
- });
- (0, runner_1.test)('can set expression for every three hours', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyThreeHours();
- assert.equal(managesFrequencies['expression'], '0 */3 * * *');
- });
- (0, runner_1.test)('can set expression for every four hours', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyFourHours();
- assert.equal(managesFrequencies['expression'], '0 */4 * * *');
- });
- (0, runner_1.test)('can set expression for every six hours', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everySixHours();
- assert.equal(managesFrequencies['expression'], '0 */6 * * *');
- });
- (0, runner_1.test)('can set expression for daily', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.daily();
- assert.equal(managesFrequencies['expression'], '0 0 * * *');
- });
- (0, runner_1.test)('can set expression for daily at specific time', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.dailyAt('12:30');
- assert.equal(managesFrequencies['expression'], '30 12 * * *');
- });
- (0, runner_1.test)('can set expression for twice daily', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.twiceDaily();
- assert.equal(managesFrequencies['expression'], '0 0,12 * * *');
- });
- (0, runner_1.test)('can set expression for twice daily at specific times', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.twiceDailyAt(1, 13);
- assert.equal(managesFrequencies['expression'], '0 1,13 * * *');
- });
- (0, runner_1.test)('can set expression for weekly', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.weekly();
- assert.equal(managesFrequencies['expression'], '0 0 * * 0');
- });
- (0, runner_1.test)('can set expression for weekly on specific days', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.weeklyOn([2, 5], '15:00');
- assert.equal(managesFrequencies['expression'], '0 15 * * 2,5');
- });
- (0, runner_1.test)('can set days of the week', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- const daysOfWeek = [1, 2, 3];
- managesFrequencies.days(daysOfWeek);
- assert.equal(managesFrequencies['expression'], '* * * * 1,2,3');
- });
- (0, runner_1.test)('can set weekdays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.weekdays();
- assert.equal(managesFrequencies['expression'], '* * * * 1-5');
- });
- (0, runner_1.test)('can set weekends', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.weekends();
- assert.equal(managesFrequencies['expression'], '* * * * 6,7');
- });
- (0, runner_1.test)('can set specific day of the week', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.sundays();
- assert.equal(managesFrequencies['expression'], '* * * * 7');
- });
- (0, runner_1.test)('can set expression for mondays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.mondays();
- assert.equal(managesFrequencies['expression'], '* * * * 1');
- });
- (0, runner_1.test)('can set expression for tuesdays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.tuesdays();
- assert.equal(managesFrequencies['expression'], '* * * * 2');
- });
- (0, runner_1.test)('can set expression for wednesdays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.wednesdays();
- assert.equal(managesFrequencies['expression'], '* * * * 3');
- });
- (0, runner_1.test)('can set expression for thursdays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.thursdays();
- assert.equal(managesFrequencies['expression'], '* * * * 4');
- });
- (0, runner_1.test)('can set expression for fridays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.fridays();
- assert.equal(managesFrequencies['expression'], '* * * * 5');
- });
- (0, runner_1.test)('can set expression for saturdays', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.saturdays();
- assert.equal(managesFrequencies['expression'], '* * * * 6');
- });
- (0, runner_1.test)('can combine frequency methods', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.everyTwoHours().weekdays();
- assert.equal(managesFrequencies['expression'], '0 */2 * * 1-5');
- });
- (0, runner_1.test)('can combine frequency methods for specific days', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.weeklyOn([2, 4], '12:00');
- assert.equal(managesFrequencies['expression'], '0 12 * * 2,4');
- });
- (0, runner_1.test)('can set expression for monthly', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.monthly();
- assert.equal(managesFrequencies['expression'], '0 0 1 * *');
- });
- (0, runner_1.test)('can set expression for monthly on specific day and time', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.monthlyOn(15, '14:30');
- assert.equal(managesFrequencies['expression'], '30 14 15 * *');
- });
- (0, runner_1.test)('can set expression for twice monthly', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.twiceMonthly();
- assert.equal(managesFrequencies['expression'], '0 0 1,16 * *');
- });
- (0, runner_1.test)('can set expression for last day of month', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.lastDayOfMonth();
- const lastDayOfMonth = new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0);
- const expectedExpression = `0 0 ${lastDayOfMonth.getDate()} * *`;
- assert.equal(managesFrequencies['expression'], expectedExpression);
- });
- (0, runner_1.test)('can set expression for quarterly', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.quarterly();
- assert.equal(managesFrequencies['expression'], '0 0 1 1-12/3 *');
- });
- (0, runner_1.test)('can set expression for yearly', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.yearly();
- assert.equal(managesFrequencies['expression'], '0 0 1 1 *');
- });
- (0, runner_1.test)('can set expression for yearly on specific month and day', ({ assert }) => {
- const managesFrequencies = new manages_frequencies_1.default();
- managesFrequencies.yearlyOn(6, 20, '10:45');
- assert.equal(managesFrequencies['expression'], '45 10 20 6 *');
- });
-});
diff --git a/build/tests/schedule.spec.d.ts b/build/tests/schedule.spec.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/build/tests/schedule.spec.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/build/tests/schedule.spec.js b/build/tests/schedule.spec.js
deleted file mode 100644
index 0ae183f..0000000
--- a/build/tests/schedule.spec.js
+++ /dev/null
@@ -1,80 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const runner_1 = require("@japa/runner");
-const luxon_1 = require("luxon");
-const sinon_1 = __importDefault(require("sinon"));
-const schedule_1 = __importDefault(require("../src/schedule"));
-runner_1.test.group('Schedule', (group) => {
- group.each.setup(() => {
- sinon_1.default.stub(luxon_1.DateTime, 'now').returns(luxon_1.DateTime.fromObject({
- year: 2021,
- month: 7,
- day: 31,
- hour: 7,
- minute: 30,
- }));
- return () => {
- sinon_1.default.restore();
- };
- });
- (0, runner_1.test)('can set between condition', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- const start = '7:00';
- const end = '8:00';
- schedule.between(start, end);
- assert.lengthOf(schedule.filters, 1);
- assert.isFunction(schedule.filters[0]);
- });
- (0, runner_1.test)('can set unlessBetween condition', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- const start = '7:00';
- const end = '8:00';
- schedule.unlessBetween(start, end);
- assert.lengthOf(schedule.rejects, 1);
- assert.isFunction(schedule.rejects[0]);
- });
- (0, runner_1.test)('can set between condition that wraps midnight', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- const start = '23:00';
- const end = '1:00';
- schedule.between(start, end);
- assert.lengthOf(schedule.filters, 1);
- assert.isFunction(schedule.filters[0]);
- });
- (0, runner_1.test)('can set unlessBetween condition that wraps midnight', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- const start = '23:00';
- const end = '1:00';
- schedule.unlessBetween(start, end);
- assert.lengthOf(schedule.rejects, 1);
- assert.isFunction(schedule.rejects[0]);
- });
- (0, runner_1.test)('time interval check is correct', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- assert.isTrue(schedule['inTimeInterval']('7:00', '8:00')());
- assert.isTrue(schedule['inTimeInterval']('23:00', '8:00')());
- assert.isFalse(schedule['inTimeInterval']('6:00', '7:00')());
- assert.isFalse(schedule['inTimeInterval']('23:00', '1:00')());
- });
- (0, runner_1.test)('can set skip condition', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- schedule.skip(() => true);
- assert.lengthOf(schedule.rejects, 1);
- assert.isFunction(schedule.rejects[0]);
- });
- (0, runner_1.test)('can set when condition', ({ assert }) => {
- const schedule = new schedule_1.default({}, () => { });
- schedule.when(() => true);
- assert.lengthOf(schedule.filters, 1);
- assert.isFunction(schedule.filters[0]);
- });
- (0, runner_1.test)('can set environments condition', ({ assert }) => {
- const schedule = new schedule_1.default({ nodeEnvironment: 'test' }, () => { });
- schedule.environments(['test']);
- assert.lengthOf(schedule.filters, 1);
- assert.isFunction(schedule.filters[0]);
- });
-});
diff --git a/build/tests/scheduler_provider.spec.d.ts b/build/tests/scheduler_provider.spec.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/build/tests/scheduler_provider.spec.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/build/tests/scheduler_provider.spec.js b/build/tests/scheduler_provider.spec.js
deleted file mode 100644
index 693bbe3..0000000
--- a/build/tests/scheduler_provider.spec.js
+++ /dev/null
@@ -1,12 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const runner_1 = require("@japa/runner");
-const scheduler_1 = __importDefault(require("../src/scheduler"));
-runner_1.test.group('SchedulerProvider', () => {
- (0, runner_1.test)('Bindings registered correctly', ({ assert, app }) => {
- assert.instanceOf(app.container.resolveBinding('Verful/Scheduler'), scheduler_1.default);
- });
-});
diff --git a/build/tests/sheduler.spec.d.ts b/build/tests/sheduler.spec.d.ts
deleted file mode 100644
index cb0ff5c..0000000
--- a/build/tests/sheduler.spec.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {};
diff --git a/build/tests/sheduler.spec.js b/build/tests/sheduler.spec.js
deleted file mode 100644
index 152c1f4..0000000
--- a/build/tests/sheduler.spec.js
+++ /dev/null
@@ -1,83 +0,0 @@
-"use strict";
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const runner_1 = require("@japa/runner");
-const execa_1 = __importDefault(require("execa"));
-const node_cron_1 = __importDefault(require("node-cron"));
-const sinon_1 = __importDefault(require("sinon"));
-const scheduler_1 = __importDefault(require("../src/scheduler"));
-runner_1.test.group('Scheduler', (group) => {
- group.each.setup(() => {
- return () => sinon_1.default.restore();
- });
- (0, runner_1.test)('calls a callback on scheduling', ({ app, assert }) => {
- const scheduler = new scheduler_1.default(app);
- const callback = sinon_1.default.stub();
- scheduler.call(callback);
- assert.lengthOf(scheduler['events'], 1);
- });
- (0, runner_1.test)('schedules a command to be executed', ({ app, assert }) => {
- sinon_1.default.stub(execa_1.default, 'node');
- const scheduler = new scheduler_1.default(app);
- const command = 'some:command';
- scheduler.command(command);
- assert.lengthOf(scheduler['events'], 1);
- });
- (0, runner_1.test)('schedules an execution of a command', ({ app, assert }) => {
- sinon_1.default.stub(execa_1.default, 'node');
- const scheduler = new scheduler_1.default(app);
- const command = 'some:command';
- scheduler.exec(command);
- assert.lengthOf(scheduler['events'], 1);
- });
- (0, runner_1.test)('the scheduler executes scheduled functions', async ({ app, assert }) => {
- assert.plan(3);
- const scheduler = new scheduler_1.default(app);
- const mockFilter = sinon_1.default.stub().resolves(true);
- const mockReject = sinon_1.default.stub().resolves(false);
- const mockCommand = sinon_1.default.stub().resolves('Command executed');
- scheduler.call(mockCommand).when(mockFilter).skip(mockReject).everyMinute();
- sinon_1.default.stub(node_cron_1.default, 'schedule').callsFake((expression, cronCallback) => {
- cronCallback().then(() => {
- assert.isTrue(mockFilter.called);
- assert.isTrue(mockReject.called);
- assert.isTrue(mockCommand.called);
- });
- });
- await scheduler.start();
- });
- (0, runner_1.test)('the scheduler executes scheduled ace commands', async ({ app, assert }) => {
- assert.plan(3);
- const scheduler = new scheduler_1.default(app);
- const mockFilter = sinon_1.default.stub().resolves(true);
- const mockReject = sinon_1.default.stub().resolves(false);
- scheduler.command('make:user').when(mockFilter).skip(mockReject).everyMinute();
- const execaStub = sinon_1.default.stub(execa_1.default, 'node').resolves({ stdout: 'Command executed' });
- sinon_1.default.stub(node_cron_1.default, 'schedule').callsFake((expression, cronCallback) => {
- cronCallback().then(() => {
- assert.isTrue(mockFilter.called);
- assert.isTrue(mockReject.called);
- assert.isTrue(execaStub.called);
- });
- });
- await scheduler.start();
- });
- (0, runner_1.test)('the scheduler executes scheduled shell commands', async ({ app, assert }) => {
- assert.plan(3);
- const scheduler = new scheduler_1.default(app);
- const mockFilter = sinon_1.default.stub().resolves(true);
- const mockReject = sinon_1.default.stub().resolves(false);
- scheduler.exec('node ace make:user').when(mockFilter).skip(mockReject).everyMinute();
- const execaStub = sinon_1.default.stub(execa_1.default, 'command').resolves({ stdout: 'Command executed' });
- sinon_1.default.stub(node_cron_1.default, 'schedule').callsFake((expression, cronCallback) => {
- cronCallback().then(() => {
- assert.isTrue(mockFilter.called);
- assert.isTrue(mockReject.called);
- assert.isTrue(execaStub.called);
- });
- });
- await scheduler.start();
- });
-});