UNPKG

8.71 kBMarkdownView Raw
1# Cronnor
2
3<!-- Utiliser du HTML (avec l'attribut "align" obsolète) pour faire flotter
4 l'image à droite. -->
5<!-- markdownlint-disable-next-line no-inline-html-->
6<img src="asset/logo.svg" align="right" alt="">
7
8[![npm][img-npm]][link-npm]
9[![build][img-build]][link-build]
10[![coverage][img-coverage]][link-coverage]
11[![semver][img-semver]][link-semver]
12
13> Bibliothèque JavaScript implémentant un programme _cron_.
14
15## Description
16
17**Cronnor** est une bibliothèque moderne fournissant une classe **`Cron`** pour
18créer des tâches récurrentes. Elle est disponible pour Node.js, Deno et les
19navigateurs.
20
21```JavaScript
22import Cron from "cronnor";
23
24function task() {
25 // Awesome task to be done every working day at 8am.
26};
27
28const cron = new Cron("0 8 * * mon-fri", task);
29
30// It's holiday time!
31cron.stop();
32```
33
34## Installation
35
36Cronnor est publiée dans [npm][link-npm] (ses CDN :
37[esm.sh](https://esm.sh/cronnor),
38[jsDelivr](https://www.jsdelivr.com/package/npm/cronnor),
39[UNPKG](https://unpkg.com/browse/cronnor/)) et
40[Deno](https://deno.land/x/cronnor).
41
42```JavaScript
43// Node.js et Bun (après `npm install cronnor`) :
44import Cron from "cronnor";
45
46// Navigateurs :
47import Cron from "https://esm.sh/cronnor@2";
48import Cron from "https://cdn.jsdelivr.net/npm/cronnor@2";
49import Cron from "https://unpkg.com/cronnor@2";
50
51// Deno :
52import Cron from "https://deno.land/x/cronnor/mod.js";
53```
54
55## API
56
57- [Cron](#cron)
58 - [`new Cron(cronex, func, [options])`](#new-croncronex-func-options)
59 - [`Cron.active`](#cronactive)
60 - [`Cron.run()`](#cronrun)
61 - [`Cron.start()`](#cronstart)
62 - [`Cron.stop()`](#cronstop)
63 - [`Cron.test([date])`](#crontestdate)
64 - [`Cron.next([start])`](#cronnextstart)
65- [CronExp](#cronexp)
66 - [`new CronExp(pattern)`](#new-cronexppattern)
67 - [`CronExp.test([date])`](#cronexptestdate)
68 - [`CronExp.next([start])`](#cronexpnextstart)
69- [At](#at)
70 - [`new At(date, func, [options])`](#new-atdate-func-options)
71 - [`At.run()`](#atrun)
72 - [`At.abort()`](#atabort)
73
74### Cron
75
76```JavaScript
77import Cron from "cronnor/cron";
78// import Cron from "https://esm.sh/cronnor@2/cron";
79// import { Cron } from "https://deno.land/x/cronnor/mod.js";
80```
81
82#### `new Cron(cronex, func, [options])`
83
84Crée une tâche _cronée_.
85
86- Paramètres :
87 - `cronex` (`string` ou `string[]`) : La ou les [expressions
88 _cron_](#expression-cron) indiquant les horaires d'exécution de la tâche.
89 - `func` (`Function`) : La fonction appelée à chaque horaire indiqué dans les
90 expressions _cron_.
91 - `options` (`Object`) : Les options de la tâche _cronée_.
92 - `active` (`boolean`) : `true` (par défaut) pour activer la tâche ; sinon
93 `false`.
94 - `thisArg` (`any`) : Le `this` utilisé pour la fonction (la tâche _cronée_
95 par défaut).
96 - `args` (`any[]`) : Les paramètres passés à la fonction (aucun paramètre
97 par défaut).
98- Exceptions :
99 - `Error` : Si la syntaxe d'une expression _cron_ est incorrecte.
100 - `RangeError` : Si un intervalle d'une expression _cron_ est invalide (hors
101 limite ou quand la borne supérieure est plus petite que la borne
102 inférieure).
103 - `TypeError` : Si le constructeur est appelé sans le mot clé `new` ou si un
104 des paramètres n'a pas le bon type.
105
106#### `Cron.active`
107
108Récupère ou définit l'état de la tâche (active ou non) :
109
110- `true` si la tâche est active ou pour l'activer.
111- `false` si elle est inactive ou pour la désactiver.
112
113#### `Cron.run()`
114
115Exécute manuellement la fonction.
116
117#### `Cron.start()`
118
119Active la tâche.
120
121- Valeur retournée : `true` quand la tâche a été activée ; `false` si elle était
122 déjà active.
123
124#### `Cron.stop()`
125
126Désactive la tâche.
127
128- Valeur retournée : `true` quand la tâche a été désactivée ; `false` si elle
129 était déjà inactive.
130
131#### `Cron.test([date])`
132
133Teste si une date respecte une des expressions _cron_ de la tâche.
134
135- Paramètre :
136 - `date` (`Date`) : La date qui sera testée (ou l'instant présent par défaut).
137- Valeur retournée : `true` si une des expressions est respectée ; sinon
138 `false`.
139
140#### `Cron.next([start])`
141
142Calcule la prochaine date respectant une des expressions _cron_ de la tâche.
143
144- Paramètre :
145 - `start` (`Date`) : La date de début (ou l'instant présent par défaut).
146- Valeur retournée : La prochaine date respectant une des expressions.
147
148### CronExp
149
150```JavaScript
151import CronExp from "cronnor/cronexp";
152// import CronExp from "https://esm.sh/cronnor@2/cronexp";
153// import { CronExp } from "https://deno.land/x/cronnor/mod.js";
154```
155
156#### `new CronExp(pattern)`
157
158Crée une expression _cron_.
159
160- Paramètre :
161 - `pattern` (`string`) : Le motif de l'expression _cron_
162- Exceptions :
163 - `Error` : Si la syntaxe du motif est incorrecte.
164 - `RangeError` : Si un intervalle est invalide (hors limite ou quand la borne
165 supérieure est plus petite que la borne inférieure).
166 - `TypeError` : Si le constructeur est appelé sans le mot clé `new` ou si le
167 motif n'est pas une chaine de caractères.
168
169#### `CronExp.test([date])`
170
171Teste si une date respecte l'expression.
172
173- Paramètre :
174 - `date` (`Date`) : La date qui sera testée (ou l'instant présent par défaut).
175- Valeur retournée : `true` si l'expression est respectée ; sinon `false`.
176
177#### `CronExp.next([start])`
178
179Calcule la prochaine date respectant l'expression.
180
181- Paramètre :
182 - `start` (`Date`) : La date de début (ou l'instant présent par défaut).
183- Valeur retournée : La prochaine date respectant l'expression.
184
185### At
186
187```JavaScript
188import At from "cronnor/at";
189// import At from "https://esm.sh/cronnor@2/at";
190// import { At } from "https://deno.land/x/cronnor/mod.js";
191```
192
193#### `new At(date, func, [options])`
194
195Crée une tâche planifiée.
196
197- Paramètres :
198 - `date` (`Date`) : La date de planification de la tâche.
199 - `func` (`Function`) : La fonction appelée à la date planifiée.
200 - `options` (`Object`) : Les options de la planification de la tâche.
201 - `thisArg` (`any`) : Le `this` utilisé pour la fonction (la tâche planifiée
202 par défaut).
203 - `args` (`any[]`) : Les paramètres passés à la fonction (aucun paramètre
204 par défaut).
205- Exceptions :
206 - `TypeError` : Si le constructeur est appelé sans le mot clé `new`.
207
208#### `At.run()`
209
210Exécute manuellement la fonction.
211
212#### `At.abort()`
213
214Annule la planification.
215
216## Expression _cron_
217
218Les expressions _cron_ sont des chaines de caractères composées de cinq ou six
219éléments séparés par une espace. Les éléments représentent :
220
2211. les secondes (optionnel ; `0` par défaut) : `0` à `59` ;
2222. les minutes : `0` à `59` ;
2233. les heures : `0` à `23` ;
2244. le jour du mois : `1` à `31` ;
2255. le mois : `1` ou `jan`, `2` ou `feb`, …, `12` ou `dec` ;
2266. le jour de la semaine : `0`, `7` ou `sun`, `1` ou `mon`, …, `6` ou `sat`.
227
228Pour chaque élément, des compositions sont possibles :
229
230- `*` : couvrir toutes les unités (`0`, `1`, `2`, …) ;
231- `-` : définir un intervalle (`1-3` corresponds aux unités `1`, `2` et `3`) ;
232- `/` : indiquer le pas (`2-6/2` corresponds aux unités `2`, `4` et `6`) ;
233- `,` : créer une liste (`4,8` corresponds aux unités `4` et `8`) ;
234- `?` : affecter l'unité courante à la création (pour une expression _cron_
235 créée à 13h37, la valeur `13` sera utilisée pour les heures et `37` pour les
236 minutes) ;
237- `~` : générer un nombre aléatoire.
238
239Il existe aussi des chaines spéciales :
240
241- `"@yearly"` ou `"@annually"` : tous les ans, le 1er janvier (`"0 0 1 1 *"`) ;
242- `"@monthly"` : le 1er jour de chaque mois (`"0 0 1 * *"`) ;
243- `"@weekly"` : une fois par semaine, le dimanche (`"0 0 * * 0"`) ;
244- `"@daily"` ou `"@midnight"` : tous les jours à minuit (`"0 0 * * *"`) ;
245- `"@hourly"` : toutes les heures (`"0 * * * *"`).
246
247Pour plus d'information, vous pouvez consulter le [manuel de
248_crontab_](https://man7.org/linux/man-pages/man5/crontab.5.html).
249
250[img-npm]: https://img.shields.io/npm/dm/cronnor?label=npm&logo=npm&logoColor=whitesmoke
251[img-build]: https://img.shields.io/github/actions/workflow/status/regseb/cronnor/ci.yml?branch=main&logo=github&logoColor=whitesmoke
252[img-coverage]: https://img.shields.io/endpoint?label=coverage&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fcronnor%2Fmain&logo=stryker&logoColor=whitesmoke
253[img-semver]: https://img.shields.io/badge/semver-2.0.0-blue?logo=semver&logoColor=whitesmoke
254[link-npm]: https://www.npmjs.com/package/cronnor
255[link-build]: https://github.com/regseb/cronnor/actions/workflows/ci.yml?query=branch%3Amain
256[link-coverage]: https://dashboard.stryker-mutator.io/reports/github.com/regseb/cronnor/main
257[link-semver]: https://semver.org/spec/v2.0.0.html "Semantic Versioning 2.0.0"