{"id":16151185,"url":"https://github.com/regseb/cronnor","last_synced_at":"2026-01-04T16:16:11.325Z","repository":{"id":18275665,"uuid":"21439954","full_name":"regseb/cronnor","owner":"regseb","description":"Bibliothèque JavaScript implémentant un programme Unix cron.","archived":false,"fork":false,"pushed_at":"2024-02-13T19:34:35.000Z","size":1032,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-11T00:54:45.259Z","etag":null,"topics":["backend","cron","cronnor","crontab","front-end","javascript","scheduler"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/regseb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null},"funding":{"custom":"https://www.paypal.me/sebastienregne"}},"created_at":"2014-07-02T20:50:04.000Z","updated_at":"2023-05-19T12:48:47.000Z","dependencies_parsed_at":"2023-07-13T15:50:58.727Z","dependency_job_id":null,"html_url":"https://github.com/regseb/cronnor","commit_stats":{"total_commits":72,"total_committers":1,"mean_commits":72.0,"dds":0.0,"last_synced_commit":"5020b71a90b3b3f65ed396d03713a3061c002689"},"previous_names":["regseb/scronpt"],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fcronnor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fcronnor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fcronnor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/regseb%2Fcronnor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/regseb","download_url":"https://codeload.github.com/regseb/cronnor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221716295,"owners_count":16868680,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","cron","cronnor","crontab","front-end","javascript","scheduler"],"created_at":"2024-10-10T00:54:58.519Z","updated_at":"2026-01-04T16:16:11.319Z","avatar_url":"https://github.com/regseb.png","language":"JavaScript","funding_links":["https://www.paypal.me/sebastienregne"],"categories":[],"sub_categories":[],"readme":"# Cronnor\n\n\u003c!-- Utiliser du HTML (avec l'attribut \"align\" obsolète) pour faire flotter\n     l'image à droite. --\u003e\n\u003c!-- markdownlint-disable-next-line no-inline-html --\u003e\n\u003cimg src=\"asset/logo.svg\" align=\"right\" width=\"100\" height=\"100\" alt=\"\"\u003e\n\n[![npm][img-npm]][link-npm] [![build][img-build]][link-build]\n[![coverage][img-coverage]][link-coverage] [![semver][img-semver]][link-semver]\n\n\u003e Bibliothèque JavaScript implémentant un programme _cron_.\n\n## Description\n\n**Cronnor** est une bibliothèque moderne fournissant une classe **`Cron`** pour\ncréer des tâches récurrentes. Elle est disponible pour Node.js, Bun, Deno et les\nnavigateurs.\n\n```javascript\nimport Cron from \"cronnor\";\n\nfunction task() {\n  // Awesome task to be done every working day at 8am.\n}\n\nconst cron = new Cron(\"0 8 * * mon-fri\", task);\n\n// It's holiday time!\ncron.stop();\n```\n\n## Installation\n\nCronnor est publiée dans [npm][link-npm] (ses CDN :\n[esm.sh](https://esm.sh/cronnor),\n[jsDelivr](https://www.jsdelivr.com/package/npm/cronnor),\n[UNPKG](https://unpkg.com/browse/cronnor/)) et\n[JSR](https://jsr.io/@regseb/cronnor).\n\n```javascript\n// Node.js et Bun (après `npm install cronnor`) :\nimport Cron from \"cronnor\";\n\n// Navigateurs :\nimport Cron from \"https://esm.sh/cronnor@2\";\nimport Cron from \"https://cdn.jsdelivr.net/npm/cronnor@2\";\nimport Cron from \"https://unpkg.com/cronnor@2\";\n\n// Deno (après `deno add jsr:@regseb/cronnor`) :\nimport Cron from \"jsr:@regseb/cronnor\";\n```\n\n## API\n\n- [Cron](#cron)\n  - [`new Cron(cronex, func, [options])`](#new-croncronex-func-options)\n  - [`Cron.active`](#cronactive)\n  - [`Cron.run()`](#cronrun)\n  - [`Cron.start()`](#cronstart)\n  - [`Cron.stop()`](#cronstop)\n  - [`Cron.test([date])`](#crontestdate)\n  - [`Cron.next([start])`](#cronnextstart)\n- [CronExp](#cronexp)\n  - [`new CronExp(pattern)`](#new-cronexppattern)\n  - [`CronExp.test([date])`](#cronexptestdate)\n  - [`CronExp.next([start])`](#cronexpnextstart)\n- [At](#at)\n  - [`new At(date, func, [options])`](#new-atdate-func-options)\n  - [`At.run()`](#atrun)\n  - [`At.abort()`](#atabort)\n\n### Cron\n\n```javascript\nimport Cron from \"cronnor/cron\";\n// import Cron from \"https://esm.sh/cronnor@2/cron\";\n// import Cron from \"jsr:@regseb/cronnor/cron\";\n```\n\n#### `new Cron(cronex, func, [options])`\n\nCrée une tâche _cronée_.\n\n- Paramètres :\n  - `cronex` (`string` ou `string[]`) : La ou les\n    [expressions _cron_](#expression-cron) indiquant les horaires d'exécution de\n    la tâche.\n  - `func` (`Function`) : La fonction appelée à chaque horaire indiqué dans les\n    expressions _cron_.\n  - `options` (`Object`) : Les options de la tâche _cronée_.\n    - `active` (`boolean`) : `true` (par défaut) pour activer la tâche ; sinon\n      `false`.\n    - `thisArg` (`any`) : Le `this` utilisé pour la fonction (la tâche _cronée_\n      par défaut).\n    - `args` (`any[]`) : Les paramètres passés à la fonction (aucun paramètre\n      par défaut).\n- Exceptions :\n  - `Error` : Si la syntaxe d'une expression _cron_ est incorrecte.\n  - `RangeError` : Si un intervalle d'une expression _cron_ est invalide (hors\n    limite ou quand la borne supérieure est plus petite que la borne\n    inférieure).\n  - `TypeError` : Si le constructeur est appelé sans le mot clé `new` ou si un\n    des paramètres n'a pas le bon type.\n\n#### `Cron.active`\n\nRécupère ou définit l'état de la tâche (active ou non) :\n\n- `true` si la tâche est active ou pour l'activer.\n- `false` si elle est inactive ou pour la désactiver.\n\n#### `Cron.run()`\n\nExécute manuellement la fonction.\n\n#### `Cron.start()`\n\nActive la tâche.\n\n- Valeur retournée : `true` quand la tâche a été activée ; `false` si elle était\n  déjà active.\n\n#### `Cron.stop()`\n\nDésactive la tâche.\n\n- Valeur retournée : `true` quand la tâche a été désactivée ; `false` si elle\n  était déjà inactive.\n\n#### `Cron.test([date])`\n\nTeste si une date respecte une des expressions _cron_ de la tâche.\n\n- Paramètre :\n  - `date` (`Date`) : La date qui sera testée (ou l'instant présent par défaut).\n- Valeur retournée : `true` si une des expressions est respectée ; sinon\n  `false`.\n\n#### `Cron.next([start])`\n\nCalcule la prochaine date respectant une des expressions _cron_ de la tâche.\n\n- Paramètre :\n  - `start` (`Date`) : La date de début (ou l'instant présent par défaut).\n- Valeur retournée : La prochaine date respectant une des expressions.\n\n### CronExp\n\n```javascript\nimport CronExp from \"cronnor/cronexp\";\n// import CronExp from \"https://esm.sh/cronnor@2/cronexp\";\n// import CronExp from \"jsr:@regseb/cronnor/cronexp\";\n```\n\n#### `new CronExp(pattern)`\n\nCrée une expression _cron_.\n\n- Paramètre :\n  - `pattern` (`string`) : Le motif de l'expression _cron_\n- Exceptions :\n  - `Error` : Si la syntaxe du motif est incorrecte.\n  - `RangeError` : Si un intervalle est invalide (hors limite ou quand la borne\n    supérieure est plus petite que la borne inférieure).\n  - `TypeError` : Si le constructeur est appelé sans le mot clé `new` ou si le\n    motif n'est pas une chaine de caractères.\n\n#### `CronExp.test([date])`\n\nTeste si une date respecte l'expression.\n\n- Paramètre :\n  - `date` (`Date`) : La date qui sera testée (ou l'instant présent par défaut).\n- Valeur retournée : `true` si l'expression est respectée ; sinon `false`.\n\n#### `CronExp.next([start])`\n\nCalcule la prochaine date respectant l'expression.\n\n- Paramètre :\n  - `start` (`Date`) : La date de début (ou l'instant présent par défaut).\n- Valeur retournée : La prochaine date respectant l'expression.\n\n### At\n\n```javascript\nimport At from \"cronnor/at\";\n// import At from \"https://esm.sh/cronnor@2/at\";\n// import At from \"jsr:@regseb/cronnor/at\";\n```\n\n#### `new At(date, func, [options])`\n\nCrée une tâche planifiée.\n\n- Paramètres :\n  - `date` (`Date`) : La date de planification de la tâche.\n  - `func` (`Function`) : La fonction appelée à la date planifiée.\n  - `options` (`Object`) : Les options de la planification de la tâche.\n    - `thisArg` (`any`) : Le `this` utilisé pour la fonction (la tâche planifiée\n      par défaut).\n    - `args` (`any[]`) : Les paramètres passés à la fonction (aucun paramètre\n      par défaut).\n- Exception :\n  - `TypeError` : Si le constructeur est appelé sans le mot clé `new`.\n\n#### `At.run()`\n\nExécute manuellement la fonction.\n\n#### `At.abort()`\n\nAnnule la planification.\n\n## Expression _cron_\n\nLes expressions _cron_ sont des chaines de caractères composées de cinq ou six\néléments séparés par une espace. Les éléments représentent :\n\n1. les secondes (optionnel ; `0` par défaut) : `0` à `59` ;\n2. les minutes : `0` à `59` ;\n3. les heures : `0` à `23` ;\n4. le jour du mois : `1` à `31` ;\n5. le mois : `1` ou `jan`, `2` ou `feb`, …, `12` ou `dec` ;\n6. le jour de la semaine : `0`, `7` ou `sun`, `1` ou `mon`, …, `6` ou `sat`.\n\nPour chaque élément, des compositions sont possibles :\n\n- `*` : couvrir toutes les unités (`0`, `1`, `2`, …) ;\n- `-` : définir un intervalle (`1-3` corresponds aux unités `1`, `2` et `3`) ;\n- `/` : indiquer le pas (`2-6/2` corresponds aux unités `2`, `4` et `6`) ;\n- `,` : créer une liste (`4,8` corresponds aux unités `4` et `8`) ;\n- `?` : affecter l'unité courante à la création (pour une expression _cron_\n  créée à 13h37, la valeur `13` sera utilisée pour les heures et `37` pour les\n  minutes) ;\n- `~` : générer un nombre aléatoire.\n\nIl existe aussi des chaines spéciales :\n\n- `\"@yearly\"` ou `\"@annually\"` : tous les ans, le 1er janvier (`\"0 0 1 1 *\"`) ;\n- `\"@monthly\"` : le 1er jour de chaque mois (`\"0 0 1 * *\"`) ;\n- `\"@weekly\"` : une fois par semaine, le dimanche (`\"0 0 * * 0\"`) ;\n- `\"@daily\"` ou `\"@midnight\"` : tous les jours à minuit (`\"0 0 * * *\"`) ;\n- `\"@hourly\"` : toutes les heures (`\"0 * * * *\"`).\n\nPour plus d'information, vous pouvez consulter le\n[manuel de _crontab_](https://man7.org/linux/man-pages/man5/crontab.5.html).\n\n[img-npm]:\n  https://img.shields.io/npm/dm/cronnor?label=npm\u0026logo=npm\u0026logoColor=whitesmoke\n[img-build]:\n  https://img.shields.io/github/actions/workflow/status/regseb/cronnor/ci.yml?branch=main\u0026logo=github\u0026logoColor=whitesmoke\n[img-coverage]:\n  https://img.shields.io/endpoint?label=coverage\u0026url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fregseb%2Fcronnor%2Fmain\n[img-semver]:\n  https://img.shields.io/badge/semver-2.0.0-blue?logo=semver\u0026logoColor=whitesmoke\n[link-npm]: https://www.npmjs.com/package/cronnor\n[link-build]:\n  https://github.com/regseb/cronnor/actions/workflows/ci.yml?query=branch%3Amain\n[link-coverage]:\n  https://dashboard.stryker-mutator.io/reports/github.com/regseb/cronnor/main\n[link-semver]: https://semver.org/spec/v2.0.0.html \"Semantic Versioning 2.0.0\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fregseb%2Fcronnor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fregseb%2Fcronnor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fregseb%2Fcronnor/lists"}