pax_global_header 0000666 0000000 0000000 00000000064 14775314346 0014530 g ustar 00root root 0000000 0000000 52 comment=901f3d733d6d53cc85c1dfbdf7faa9ffa81f5145
bradymholt-cRonstrue-71e0a25/ 0000775 0000000 0000000 00000000000 14775314346 0016205 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/.editorconfig 0000664 0000000 0000000 00000000223 14775314346 0020657 0 ustar 00root root 0000000 0000000 root = true
[*]
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8
bradymholt-cRonstrue-71e0a25/.github/ 0000775 0000000 0000000 00000000000 14775314346 0017545 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/.github/FUNDING.yml 0000664 0000000 0000000 00000000025 14775314346 0021357 0 ustar 00root root 0000000 0000000 github: [bradymholt]
bradymholt-cRonstrue-71e0a25/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 14775314346 0021730 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/.github/ISSUE_TEMPLATE/bug_report.md 0000664 0000000 0000000 00000000735 14775314346 0024427 0 ustar 00root root 0000000 0000000 ---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Cron Expression**
`* * * * *`
**Expected Output**
"Every minute"
**Actual Output**
"Every year"
**Prerequisites**
- [ ] The cron expression being passed in is a valid expression. cRonstrue does not validate expressions and assumes the one you pass is already valid. See the [FAQ](https://github.com/bradymholt/cRonstrue#frequently-asked-questions) for more details.
bradymholt-cRonstrue-71e0a25/.github/workflows/ 0000775 0000000 0000000 00000000000 14775314346 0021602 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/.github/workflows/build.yml 0000664 0000000 0000000 00000001010 14775314346 0023414 0 ustar 00root root 0000000 0000000 name: Build
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
# Base branches for PR
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18]
steps:
- uses: actions/checkout@v3
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test
env:
CI: true
bradymholt-cRonstrue-71e0a25/.github/workflows/publish.yml 0000664 0000000 0000000 00000005716 14775314346 0024004 0 ustar 00root root 0000000 0000000 name: Publish
on:
workflow_dispatch:
inputs:
version_type:
type: choice
description: Version type
default: minor
options:
- major
- minor
- patch
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: refs/heads/main
- name: Setup git repo
run: |
git config user.name $GITHUB_ACTOR
git config user.email gh-actions-${GITHUB_ACTOR}@github.com
git remote add gh-origin https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install
- name: Version
run: |
npm version ${{ github.event.inputs.version_type }} --force -m "Version %s"
- name: Push release commit and tag to GitHub
id: push
run: |
git push gh-origin HEAD:main --tags
echo "tag-name=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT
- name: Publish to npm
run: |
npm set //registry.npmjs.org/:_authToken ${{ secrets.NODE_AUTH_TOKEN }}
npm publish
- uses: actions/upload-artifact@v4
if: failure()
with:
name: npm-logs
path: ~/.npm/_logs
- name: Package release assets
run: |
zip assets.zip i18n.js i18n.d.ts
zip -gr assets.zip dist/ locales/
- name: Create a Release
id: create-release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.push.outputs.tag-name }}
generate_release_notes: true
files: assets.zip
- name: Comment on PRs with link to release they are included in
uses: actions/github-script@v6
env:
RELEASE_ID: ${{ steps.create-release.outputs.id }}
with:
script: |
const releaseId = process.env.RELEASE_ID;
console.log(`Fetching release_id: ${releaseId} ...`);
const getReleaseResponse = await github.rest.repos.getRelease({
release_id: process.env.RELEASE_ID,
owner: context.repo.owner,
repo: context.repo.repo
});
const release = getReleaseResponse.data;
const prNumbersInRelease = new Set(Array.from(release.body.matchAll(/\/pull\/(\d+)/g)).map(p=>p[1]));
for(let prNumber of prNumbersInRelease) {
console.log(`Adding comment on PR #${prNumber} ...`);
await github.rest.issues.createComment({
issue_number: prNumber,
owner: context.repo.owner,
repo: context.repo.repo,
body: `The changes in this PR were just released in [${release.name}](https://github.com/${context.repo.owner}/${context.repo.repo}/releases/tag/${release.tag_name}) 🎉.`
})
}
bradymholt-cRonstrue-71e0a25/.gitignore 0000664 0000000 0000000 00000001355 14775314346 0020201 0 ustar 00root root 0000000 0000000 # Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
build/
# dist/ # We will commit dist/ so that the packaged module is easily accesible from the repo.
# OS X files
.DS_Store
# Jetbrains IDE
.idea/
/locales
/dist
/.vs
bradymholt-cRonstrue-71e0a25/.tool-versions 0000664 0000000 0000000 00000000017 14775314346 0021027 0 ustar 00root root 0000000 0000000 nodejs 20.16.0
bradymholt-cRonstrue-71e0a25/.vscode/ 0000775 0000000 0000000 00000000000 14775314346 0017546 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/.vscode/launch.json 0000664 0000000 0000000 00000000643 14775314346 0021716 0 ustar 00root root 0000000 0000000 {
"version": "0.2.0",
"configurations": [
{
"name": "Debug Mocha tests",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"args": ["-r", "ts-node/register", "./test/**/*.ts"],
"cwd": "${workspaceRoot}",
"env": {
"NODE_ENV": "development"
},
"sourceMaps": true
}
]
}
bradymholt-cRonstrue-71e0a25/.vscode/settings.json 0000664 0000000 0000000 00000000036 14775314346 0022300 0 ustar 00root root 0000000 0000000 {
"files.exclude": {
}
}
bradymholt-cRonstrue-71e0a25/.vscode/tasks.json 0000664 0000000 0000000 00000000715 14775314346 0021571 0 ustar 00root root 0000000 0000000 {
"version": "2.0.0",
"command": "npm",
"runner": "terminal",
"suppressTaskName": true,
"tasks": [
{
"label": "build",
"type": "npm",
"group": {
"kind": "build",
"isDefault": true
},
"script": "build",
"problemMatcher": "$tsc"
},
{
"label": "test",
"type": "npm",
"group": {
"kind": "test",
"isDefault": true
},
"script": "test"
}
]
}
bradymholt-cRonstrue-71e0a25/CHANGELOG.md 0000664 0000000 0000000 00000000216 14775314346 0020015 0 ustar 00root root 0000000 0000000 To see what has changed in a release version, see the release notes on the [Releases](https://github.com/bradymholt/cRonstrue/releases) page.
bradymholt-cRonstrue-71e0a25/CONTRIBUTING.md 0000664 0000000 0000000 00000001467 14775314346 0020446 0 ustar 00root root 0000000 0000000 Hello there 👋. Are you interested in contributing to this project? If so, it is appreciated!
Adding new i18n translations is always welcome. Referencing previously merged PRs ([like this one](https://github.com/bradymholt/cRonstrue/pull/106)) is a good way to learn what is needed to add a translation.
If you would like to make a non-trivial change to this project, please first discuss the change you wish to make via an issue so that it can be vetted first. Contributions are appreciated but there may be a case where a change would not align with the intended direction of the project and doing work on a PR and then not getting it merged is never fun.
Here are some helpful scripts that should help you get up and running:
- Install dependencies - `npm install`
- Build - `npm start`
- Run Tests - `npm test`
bradymholt-cRonstrue-71e0a25/LICENSE 0000664 0000000 0000000 00000002065 14775314346 0017215 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2017 Brady Holt
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
bradymholt-cRonstrue-71e0a25/README.md 0000664 0000000 0000000 00000027035 14775314346 0017473 0 ustar 00root root 0000000 0000000 # cRonstrue  [](https://www.npmjs.com/package/cronstrue)
**Would you take a quick second and ⭐️ my repo?**
cRonstrue is a JavaScript library that parses a cron expression and outputs a human readable description of the cron schedule. For example, given the expression "*/5 * * * *" it will output "Every 5 minutes".
This library was ported from the original C# implementation called [cron-expression-descriptor](https://github.com/bradymholt/cron-expression-descriptor) and is also available in a [few other languages](https://github.com/bradymholt/cron-expression-descriptor#ports).
## Features
- Zero dependencies
- Supports all cron expression special characters including * / , - ? L W, #
- Supports 5, 6 (w/ seconds or year), or 7 (w/ seconds and year) part cron expressions
- [Quartz Job Scheduler](http://www.quartz-scheduler.org/) cron expressions are supported
- i18n support with 30+ languages
## Demo
A demo is available [here](http://bradymholt.github.io/cRonstrue/#cronstrue-demo).
## Installation
cRonstrue is exported as an [UMD](https://github.com/umdjs/umd) module so it will work in an [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD), [CommonJS](http://wiki.commonjs.org/wiki/CommonJS) or browser global context.
First, install the module:
```
npm install cronstrue
```
Then, depending upon your usage context, add a reference to it:
### Node / CommonJS
```js
const cronstrue = require('cronstrue');
```
### ESM / webpack / TypeScript
```js
import cronstrue from 'cronstrue';
```
### Browser
The `cronstrue.min.js` file from the `/dist` folder in the npm package should be served to the browser. There are no dependencies so you can simply include the library in a `
```
#### CDN
A simple way to load the library in a browser is by using the [unpkg](https://unpkg.com/) CDN, which is a
"fast, global content delivery network for everything on npm". To use it, include a script tag like this in your file:
```html
```
Using the "latest" tag will result in a 302 redirect to the latest version tag so it is recommended to use a specific version tag such as https://unpkg.com/cronstrue@1.48.0/dist/cronstrue.min.js to avoid this redirect.
## Usage
```js
cronstrue.toString("* * * * *");
> "Every minute"
cronstrue.toString("0 23 ? * MON-FRI");
> "At 11:00 PM, Monday through Friday"
cronstrue.toString("0 23 * * *", { verbose: true });
> "At 11:00 PM, every day"
cronstrue.toString("23 12 * * SUN#2");
> "At 12:23 PM, on the second Sunday of the month"
cronstrue.toString("23 14 * * SUN#2", { use24HourTimeFormat: true });
> "At 14:23, on the second Sunday of the month"
cronstrue.toString("* * * ? * 2-6/2", { dayOfWeekStartIndexZero: false });
> "Every second, every 2 days of the week, Monday through Friday"
cronstrue.toString("* * * 6-8 *", { monthStartIndexZero: true });
> "Every minute, July through September"
cronstrue.toString("@monthly");
> "At 12:00 AM, on day 1 of the month"
```
For more usage examples, including a demonstration of how cRonstrue can handle some very complex cron expressions, you can [reference the unit tests](https://github.com/bradymholt/cRonstrue/blob/main/test/cronstrue.ts).
### CLI Usage
```sh
$ npm install -g cronstrue
$ cronstrue 1 2 3 4 5
At 02:01 AM, on day 3 of the month, and on Friday, only in April
$ cronstrue 1 2 3
Error: too few arguments (3): 1 2 3
Usage (5 args): cronstrue minute hour day-of-month month day-of-week
or
Usage (6 args): cronstrue second minute hour day-of-month month day-of-week
or
Usage (7 args): cronstrue second minute hour day-of-month month day-of-week year
```
## Options
An options object can be passed as the second parameter to `cronstrue.toString`. The following options are available:
- **throwExceptionOnParseError: boolean** - If exception occurs when trying to parse expression and generate description, whether to throw or catch and output the Exception message as the description. (Default: true)
- **verbose: boolean** - Whether to use a verbose description (Default: false)
- **dayOfWeekStartIndexZero: boolean** - Whether to interpret cron expression DOW `1` as Sunday or Monday. (Default: true)
- **monthStartIndexZero: boolean** - Wether to interpret January as `0` or `1`. (Default: false)
- **use24HourTimeFormat: boolean** - If true, descriptions will use a [24-hour clock](https://en.wikipedia.org/wiki/24-hour_clock) (Default: false but some translations will default to true)
- **locale: string** - The locale to use (Default: "en")
## i18n
To use the i18n support cRonstrue provides, you can either import all the supported locales at once (using `cronstrue/i18n`) or import individual locales (using `cronstrue/locales/[locale]`). Then, when calling `toString` you pass in the name of the locale you want to use. For example, for the es (Spanish) locale, you would use: `cronstrue.toString("* * * * *", { locale: "es" })`.
### All Locales
You can import all locales at once with `cronstrue/i18n`. This approach has the advantage of only having to load one module and having access to all supported locales. The tradeoff with this approach is a larger module (~130k, minified) that will take longer to load, particularly when sending down to a browser.
```js
// Node / CommonJS
const cronstrue = require('cronstrue/i18n');
// ESM / webpack / TypeScript
import cronstrue from 'cronstrue/i18n';
// Browser
cronstrue.toString("*/5 * * * *", { locale: "fr" }); // => Toutes les 5 minutes
cronstrue.toString("*/5 * * * *", { locale: "es" }); // => Cada 5 minutos
```
### Individual Locales
You can also load the main cronstrue module and then load individual locale modules you want to have access to. This works well when you have one or more locales you know you need access to and want to minimize load time, particularly when sending down to a browser. The main cronstrue module is about 42k (minified) and each locale is about 4k (minified) in size.
```js
// Node / CommonJS
const cronstrue = require('cronstrue');
require('cronstrue/locales/fr');
require('cronstrue/locales/es');
// ESM / webpack / TypeScript
import cronstrue from 'cronstrue';
import 'cronstrue/locales/fr';
import 'cronstrue/locales/es';
// Browser
cronstrue.toString("*/5 * * * *", { locale: "fr" }); // => Toutes les 5 minutes
cronstrue.toString("*/5 * * * *", { locale: "es" }); // => Cada 5 minutos
```
## Frequently Asked Questions
1. The cron expression I am passing in is not valid and this library is giving strange output. What should I do?
This library does not do full validation of cron expressions and assumes the expression passed in is valid. If you need to validate an expression consider using a library like [cron-parser](https://www.npmjs.com/package/cron-parser). Example validation with cron-parser:
```
const cronParser = require("cron-parser");
const cronstrue = require("cronstrue");
const expression = "* * * * * *";
// Validate expression first
let isCronValid = true;
try { cronParser.parseExpression(expression) } catch(e) { isCronValid = false; }
// If valid, then pass into cRonstrue
if (isCronValid) {
console.log(cronstrue.toString("* * * * *"));
}
```
2. Can cRonstrue output the next occurrence of the cron expression?
No, cRonstrue does not support this. This library simply describes a cron expression that is passed in.
### Supported Locales
The following locales can be passed in for the `locale` option. Thank you to the author (shown below) of each translation!
- en - English ([Brady Holt](https://github.com/bradymholt))
- af - Afrikaans (Michael van Niekerk(https://github.com/mvniekerk))
- ar - Arabic ([Mohamed Nehad Shalabi](https://github.com/mohamednehad450))
- be - Belarusian ([Kirill Mikulich](https://github.com/KirillMikulich))
- bg - Bulgarian ([kamenf](https://github.com/kamenf))
- ca - Catalan ([Francisco Javier Barrena](https://github.com/fjbarrena))
- cs - Czech ([hanbar](https://github.com/hanbar))
- es - Spanish ([Ivan Santos](https://github.com/ivansg))
- da - Danish ([Rasmus Melchior Jacobsen](https://github.com/rmja))
- de - German ([Michael Schuler](https://github.com/mschuler))
- fi - Finnish ([Mikael Rosenberg](https://github.com/MR77FI))
- fr - French ([Arnaud TAMAILLON](https://github.com/Greybird))
- fa - Farsi ([A. Bahrami](https://github.com/alirezakoo))
- he - Hebrew ([Ilan Firsov](https://github.com/IlanF))
- hu - Hungarian ([Orcsity Norbert](https://github.com/Northber), Szabó Dániel)
- it - Italian ([rinaldihno](https://github.com/rinaldihno))
- id - Indonesia ([Hasan Basri](https://github.com/hasanbasri1993))
- ja - Japanese ([Alin Sarivan](https://github.com/asarivan))
- ko - Korean ([Ion Mincu](https://github.com/ionmincu))
- my - Malay (Malaysia) ([Ikhwan Abdullah](https://github.com/leychay))
- nb - Norwegian ([Siarhei Khalipski](https://github.com/KhalipskiSiarhei))
- nl - Dutch ([TotalMace](https://github.com/TotalMace))
- pl - Polish ([foka](https://github.com/foka))
- pt_BR - Portuguese (Brazil) ([Renato Lima](https://github.com/natenho))
- pt_PT - Portuguese (Portugal) ([POFerro](https://github.com/POFerro))
- ro - Romanian ([Illegitimis](https://github.com/illegitimis))
- ru - Russian ([LbISS](https://github.com/LbISS))
- sk - Slovakian ([hanbar](https://github.com/hanbar))
- sl - Slovenian ([Jani Bevk](https://github.com/jenzy))
- sw - Swahili ([Leylow Lujuo](https://github.com/leyluj))
- sv - Swedish ([roobin](https://github.com/roobin))
- th - Thai ([Teerapat Prommarak](https://github.com/xeusteerapat))
- tr - Turkish ([Mustafa SADEDİL](https://github.com/sadedil))
- uk - Ukrainian ([Taras](https://github.com/tbudurovych))
- vi - Vietnamese ([Nguyen Tan Phap](https://github.com/rikkapro0128))
- zh_CN - Chinese (Simplified) ([Star Peng](https://github.com/starpeng))
- zh_TW - Chinese (Traditional) ([Ricky Chiang](https://github.com/metavige))
## Sponsors
Thank you to the following sponsors of this project!
## License
cRonstrue is freely distributable under the terms of the [MIT license](https://github.com/bradymholt/cronstrue/blob/main/LICENSE).
bradymholt-cRonstrue-71e0a25/RELEASING.md 0000664 0000000 0000000 00000000423 14775314346 0020037 0 ustar 00root root 0000000 0000000 The [.github/workflows/publish.yml](https://github.com/bradymholt/cRonstrue/actions?query=workflow%3A%22Publish+to+npm+Registry%22) GitHub Actions Workflow handling publishing new versions of cRonstrue when a pull request is merged. It can also be run manually at any time.
bradymholt-cRonstrue-71e0a25/bin/ 0000775 0000000 0000000 00000000000 14775314346 0016755 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/bin/cli.js 0000775 0000000 0000000 00000001436 14775314346 0020071 0 ustar 00root root 0000000 0000000 #!/usr/bin/env node
const cronstrue = require('../dist/cronstrue');
function usage() {
console.error("Usage (5 args): cronstrue minute hour day-of-month month day-of-week");
console.error("or")
console.error("Usage (6 args): cronstrue second minute hour day-of-month month day-of-week");
console.error("or")
console.error("Usage (7 args): cronstrue second minute hour day-of-month month day-of-week year");
}
const args = process.argv.slice(2).join(" ");
const argCount = args.trim().split(/\s+/).length;
if (argCount < 5) {
console.error(`Error: too few arguments (${argCount}): ${args}`);
usage()
process.exit(1);
}
if (argCount > 7) {
console.error(`Error: too many arguments (${argCount}): ${args}`);
usage();
process.exit(2);
}
console.log(cronstrue.toString(args));
bradymholt-cRonstrue-71e0a25/bower.json 0000664 0000000 0000000 00000001241 14775314346 0020214 0 ustar 00root root 0000000 0000000 {
"name": "cronstrue",
"description": "Convert cron expressions into human readable descriptions",
"main": "dist/cronstrue.js",
"authors": ["Brady Holt"],
"license": "MIT",
"keywords": [
"cron",
"cronjob",
"crontab",
"schedule",
"parser",
"cron",
"expression",
"cron",
"description",
"pretty",
"cron",
"cron",
"for",
"humans",
"cron",
"translated",
"cron",
"english",
"cron",
"schedule",
"cron",
"english",
"cron",
"schedule"
],
"homepage": "https://github.com/bradymholt/cronstrue",
"ignore": ["**/.*", "node_modules", "bower_components", "test", "tests"]
}
bradymholt-cRonstrue-71e0a25/docs/ 0000775 0000000 0000000 00000000000 14775314346 0017135 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/docs/index.html 0000664 0000000 0000000 00000016557 14775314346 0021150 0 ustar 00root root 0000000 0000000
cRonstrue - translate cron expressions to human readable descriptions
cRonstrue * * * * *
translate cron expressions to human readable descriptions
"Every 5 minutes"
bradymholt-cRonstrue-71e0a25/i18n.d.ts 0000664 0000000 0000000 00000000265 14775314346 0017561 0 ustar 00root root 0000000 0000000 // This definition file allows dist/cronstrue-i18n.js to be required from Node as:
// var cronstrue = require('cronstrue/i18n');
export { default } from "./dist/cronstrue-i18n.d";
bradymholt-cRonstrue-71e0a25/i18n.js 0000664 0000000 0000000 00000000336 14775314346 0017324 0 ustar 00root root 0000000 0000000 // This file allows dist/cronstrue-i18n.js to be required from Node as:
// var cronstrue = require('cronstrue/i18n');
var cronstrueWithLocales = require("./dist/cronstrue-i18n.js");
module.exports = cronstrueWithLocales;
bradymholt-cRonstrue-71e0a25/package-lock.json 0000664 0000000 0000000 00000520306 14775314346 0021427 0 ustar 00root root 0000000 0000000 {
"name": "cronstrue",
"version": "2.59.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "cronstrue",
"version": "2.59.0",
"license": "MIT",
"bin": {
"cronstrue": "bin/cli.js"
},
"devDependencies": {
"@types/chai": "^4.2.11",
"@types/mocha": "^8.0.0",
"chai": "^4.2.0",
"handlebars": "^4.7.6",
"marked": "^4.0.10",
"mocha": "^10.1.0",
"pixl-xml": "^1.0.13",
"prettier": "^2.1.1",
"terser-webpack-plugin": "^5.3.1",
"ts-loader": "^9.2.6",
"ts-node": "^10.5.0",
"typescript": "^4.6.2",
"webpack": "^5.69.1",
"webpack-cli": "^4.9.2",
"xml2js": "^0.5.0"
}
},
"node_modules/@cspotcode/source-map-consumer": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
"integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
"dev": true,
"engines": {
"node": ">= 12"
}
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
"integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
"dev": true,
"dependencies": {
"@cspotcode/source-map-consumer": "0.8.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz",
"integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==",
"dev": true,
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@tsconfig/node10": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
"integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
"dev": true
},
"node_modules/@tsconfig/node12": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
"integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
"dev": true
},
"node_modules/@tsconfig/node14": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
"integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
"dev": true
},
"node_modules/@tsconfig/node16": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
"dev": true
},
"node_modules/@types/chai": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz",
"integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==",
"dev": true
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
"node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
"dev": true
},
"node_modules/@types/mocha": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.0.tgz",
"integrity": "sha512-jWeYcTo3sCH/rMgsdYXDTO85GNRyTCII5dayMIu/ZO4zbEot1E3iNGaOwpLReLUHjeNQFkgeNNVYlY4dX6azQQ==",
"dev": true
},
"node_modules/@types/node": {
"version": "17.0.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
"integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==",
"dev": true
},
"node_modules/@webassemblyjs/ast": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
"integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
"integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
"dev": true
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
"integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
"dev": true
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
"integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
"dev": true,
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.11.6",
"@webassemblyjs/helper-api-error": "1.11.6",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
"integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
"dev": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
"integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/wasm-gen": "1.12.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
"dev": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
"node_modules/@webassemblyjs/leb128": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
"dev": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/utf8": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
"integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
"dev": true
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
"integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/helper-wasm-section": "1.12.1",
"@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-opt": "1.12.1",
"@webassemblyjs/wasm-parser": "1.12.1",
"@webassemblyjs/wast-printer": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
"integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
"@webassemblyjs/utf8": "1.11.6"
}
},
"node_modules/@webassemblyjs/wasm-opt": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
"integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-parser": "1.12.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
"integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
"@webassemblyjs/utf8": "1.11.6"
}
},
"node_modules/@webassemblyjs/wast-printer": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
"integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true,
"dependencies": {
"@webassemblyjs/ast": "1.12.1",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webpack-cli/configtest": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
"integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
"dev": true,
"peerDependencies": {
"webpack": "4.x.x || 5.x.x",
"webpack-cli": "4.x.x"
}
},
"node_modules/@webpack-cli/info": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz",
"integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==",
"dev": true,
"dependencies": {
"envinfo": "^7.7.3"
},
"peerDependencies": {
"webpack-cli": "4.x.x"
}
},
"node_modules/@webpack-cli/serve": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
"integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
"dev": true,
"peerDependencies": {
"webpack-cli": "4.x.x"
},
"peerDependenciesMeta": {
"webpack-dev-server": {
"optional": true
}
}
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"node_modules/acorn": {
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/acorn-import-attributes": {
"version": "1.9.5",
"resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
"integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true,
"peerDependencies": {
"acorn": "^8"
}
},
"node_modules/acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"peerDependencies": {
"ajv": "^6.9.1"
}
},
"node_modules/ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"node_modules/assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"node_modules/browserslist": {
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
"node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001655",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
"integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
]
},
"node_modules/chai": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"dev": true,
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",
"deep-eql": "^3.0.1",
"get-func-name": "^2.0.0",
"pathval": "^1.1.0",
"type-detect": "^4.0.5"
},
"engines": {
"node": ">=4"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"dev": true,
"engines": {
"node": ">=6.0"
}
},
"node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"node_modules/clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"dependencies": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
"shallow-clone": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/colorette": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
"dev": true
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/decamelize": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=0.12"
}
},
"node_modules/diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.13",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
"integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
"dev": true
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/enhanced-resolve": {
"version": "5.17.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/envinfo": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
"integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
"dev": true,
"bin": {
"envinfo": "dist/cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/es-module-lexer": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
"integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
"dev": true
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"dependencies": {
"estraverse": "^5.2.0"
},
"engines": {
"node": ">=4.0"
}
},
"node_modules/esrecurse/node_modules/estraverse": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true,
"engines": {
"node": ">=0.8.x"
}
},
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
"human-signals": "^2.1.0",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.1",
"onetime": "^5.1.2",
"signal-exit": "^3.0.3",
"strip-final-newline": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"node_modules/fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
},
"node_modules/fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
"dev": true
},
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
"bin": {
"flat": "cli.js"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true,
"license": "ISC"
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/glob-to-regexp": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/handlebars": {
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"dev": true,
"dependencies": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
"source-map": "^0.6.1",
"wordwrap": "^1.0.0"
},
"bin": {
"handlebars": "bin/handlebars"
},
"engines": {
"node": ">=0.4.7"
},
"optionalDependencies": {
"uglify-js": "^3.1.4"
}
},
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true,
"bin": {
"he": "bin/he"
}
},
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
"engines": {
"node": ">=10.17.0"
}
},
"node_modules/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
},
"bin": {
"import-local-fixture": "fixtures/cli.js"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/import-local/node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/import-local/node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/import-local/node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/import-local/node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true,
"license": "ISC"
},
"node_modules/interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
"integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
"dev": true,
"engines": {
"node": ">= 0.10"
}
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-core-module": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
"integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"dependencies": {
"isobject": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
"node": ">= 10.13.0"
}
},
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/loader-runner": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
"dev": true,
"engines": {
"node": ">=6.11.5"
}
},
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"node_modules/marked": {
"version": "4.0.10",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz",
"integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==",
"dev": true,
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 12"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
"node_modules/micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"dependencies": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
},
"engines": {
"node": ">=8.6"
}
},
"node_modules/mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
"integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.34",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
"integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"dev": true,
"dependencies": {
"mime-db": "1.51.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/minimist": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
"node_modules/mocha": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
"integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-colors": "^4.1.3",
"browser-stdout": "^1.3.1",
"chokidar": "^3.5.3",
"debug": "^4.3.5",
"diff": "^5.2.0",
"escape-string-regexp": "^4.0.0",
"find-up": "^5.0.0",
"glob": "^8.1.0",
"he": "^1.2.0",
"js-yaml": "^4.1.0",
"log-symbols": "^4.1.0",
"minimatch": "^5.1.6",
"ms": "^2.1.3",
"serialize-javascript": "^6.0.2",
"strip-json-comments": "^3.1.1",
"supports-color": "^8.1.1",
"workerpool": "^6.5.1",
"yargs": "^16.2.0",
"yargs-parser": "^20.2.9",
"yargs-unparser": "^2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha.js"
},
"engines": {
"node": ">= 14.0.0"
}
},
"node_modules/mocha/node_modules/diff": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/mocha/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
"node_modules/neo-async": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
"node_modules/node-releases": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"dependencies": {
"path-key": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"dependencies": {
"mimic-fn": "^2.1.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-limit": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
"integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/p-locate": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate/node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"node_modules/pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/pixl-xml": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/pixl-xml/-/pixl-xml-1.0.13.tgz",
"integrity": "sha1-W6cUCL3zeZTCOd0BJRwQxTwFh+M=",
"dev": true
},
"node_modules/prettier": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz",
"integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/rechoir": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
"integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
"dev": true,
"dependencies": {
"resolve": "^1.9.0"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"dependencies": {
"is-core-module": "^2.8.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"dependencies": {
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
"dev": true
},
"node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
},
"node_modules/schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"node_modules/shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"dependencies": {
"kind-of": "^6.0.2"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/terser": {
"version": "5.31.6",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
"integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
"bin": {
"terser": "bin/terser"
},
"engines": {
"node": ">=10"
}
},
"node_modules/terser-webpack-plugin": {
"version": "5.3.10",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
"integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.20",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
"terser": "^5.26.0"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.1.0"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"esbuild": {
"optional": true
},
"uglify-js": {
"optional": true
}
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/ts-loader": {
"version": "9.2.6",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz",
"integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==",
"dev": true,
"dependencies": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.0.0",
"micromatch": "^4.0.0",
"semver": "^7.3.4"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "*",
"webpack": "^5.0.0"
}
},
"node_modules/ts-loader/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/ts-loader/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/ts-loader/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/ts-node": {
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz",
"integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==",
"dev": true,
"dependencies": {
"@cspotcode/source-map-support": "0.7.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.0",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/typescript": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
"integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/uglify-js": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz",
"integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==",
"dev": true,
"optional": true,
"dependencies": {
"commander": "~2.20.3",
"source-map": "~0.6.1"
},
"bin": {
"uglifyjs": "bin/uglifyjs"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/update-browserslist-db": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
"integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"escalade": "^3.1.2",
"picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"node_modules/uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"dev": true,
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/uri-js/node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz",
"integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==",
"dev": true
},
"node_modules/watchpack": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
"integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
"dev": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/webpack": {
"version": "5.94.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
"integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
"acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
"webpack": "bin/webpack.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependenciesMeta": {
"webpack-cli": {
"optional": true
}
}
},
"node_modules/webpack-cli": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz",
"integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==",
"dev": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^1.1.1",
"@webpack-cli/info": "^1.4.1",
"@webpack-cli/serve": "^1.6.1",
"colorette": "^2.0.14",
"commander": "^7.0.0",
"execa": "^5.0.0",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2",
"interpret": "^2.2.0",
"rechoir": "^0.7.0",
"webpack-merge": "^5.7.3"
},
"bin": {
"webpack-cli": "bin/cli.js"
},
"engines": {
"node": ">=10.13.0"
},
"peerDependencies": {
"webpack": "4.x.x || 5.x.x"
},
"peerDependenciesMeta": {
"@webpack-cli/generators": {
"optional": true
},
"@webpack-cli/migrate": {
"optional": true
},
"webpack-bundle-analyzer": {
"optional": true
},
"webpack-dev-server": {
"optional": true
}
}
},
"node_modules/webpack-cli/node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
"engines": {
"node": ">= 10"
}
},
"node_modules/webpack-merge": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
"integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
"dev": true,
"dependencies": {
"clone-deep": "^4.0.1",
"wildcard": "^2.0.0"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/webpack-sources": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true,
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/webpack/node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/wildcard": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
"dev": true
},
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
"dev": true
},
"node_modules/workerpool": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
"integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true,
"license": "ISC"
},
"node_modules/xml2js": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dev": true,
"dependencies": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
},
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"dev": true,
"engines": {
"node": ">=4.0"
}
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"engines": {
"node": ">=10"
}
},
"node_modules/yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"node_modules/yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/yargs-unparser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
}
},
"dependencies": {
"@cspotcode/source-map-consumer": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
"integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
"dev": true
},
"@cspotcode/source-map-support": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
"integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
"dev": true,
"requires": {
"@cspotcode/source-map-consumer": "0.8.0"
}
},
"@discoveryjs/json-ext": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz",
"integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==",
"dev": true
},
"@jridgewell/gen-mapping": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
}
},
"@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true
},
"@jridgewell/set-array": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true
},
"@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"@tsconfig/node10": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
"integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
"dev": true
},
"@tsconfig/node12": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
"integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
"dev": true
},
"@tsconfig/node14": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
"integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
"dev": true
},
"@tsconfig/node16": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
"dev": true
},
"@types/chai": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz",
"integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==",
"dev": true
},
"@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
"@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
"dev": true
},
"@types/mocha": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.0.tgz",
"integrity": "sha512-jWeYcTo3sCH/rMgsdYXDTO85GNRyTCII5dayMIu/ZO4zbEot1E3iNGaOwpLReLUHjeNQFkgeNNVYlY4dX6azQQ==",
"dev": true
},
"@types/node": {
"version": "17.0.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
"integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==",
"dev": true
},
"@webassemblyjs/ast": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
"integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true,
"requires": {
"@webassemblyjs/helper-numbers": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6"
}
},
"@webassemblyjs/floating-point-hex-parser": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
"integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
"integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
"integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true
},
"@webassemblyjs/helper-numbers": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
"dev": true,
"requires": {
"@webassemblyjs/floating-point-hex-parser": "1.11.6",
"@webassemblyjs/helper-api-error": "1.11.6",
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/helper-wasm-bytecode": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
"integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
"integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/wasm-gen": "1.12.1"
}
},
"@webassemblyjs/ieee754": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
"dev": true,
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
"dev": true,
"requires": {
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/utf8": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
"integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
"integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/helper-wasm-section": "1.12.1",
"@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-opt": "1.12.1",
"@webassemblyjs/wasm-parser": "1.12.1",
"@webassemblyjs/wast-printer": "1.12.1"
}
},
"@webassemblyjs/wasm-gen": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
"integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
"@webassemblyjs/utf8": "1.11.6"
}
},
"@webassemblyjs/wasm-opt": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
"integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-parser": "1.12.1"
}
},
"@webassemblyjs/wasm-parser": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
"integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6",
"@webassemblyjs/utf8": "1.11.6"
}
},
"@webassemblyjs/wast-printer": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
"integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.12.1",
"@xtuc/long": "4.2.2"
}
},
"@webpack-cli/configtest": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
"integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
"dev": true,
"requires": {}
},
"@webpack-cli/info": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz",
"integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==",
"dev": true,
"requires": {
"envinfo": "^7.7.3"
}
},
"@webpack-cli/serve": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
"integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
"dev": true,
"requires": {}
},
"@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true
},
"@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
"acorn": {
"version": "8.8.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
"dev": true
},
"acorn-import-attributes": {
"version": "1.9.5",
"resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
"integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true,
"requires": {}
},
"acorn-walk": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"requires": {}
},
"ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
},
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0"
}
},
"braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"requires": {
"fill-range": "^7.1.1"
}
},
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"browserslist": {
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"dev": true,
"requires": {
"caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
}
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
"camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
"caniuse-lite": {
"version": "1.0.30001655",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
"integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
"dev": true
},
"chai": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"dev": true,
"requires": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",
"deep-eql": "^3.0.1",
"get-func-name": "^2.0.0",
"pathval": "^1.1.0",
"type-detect": "^4.0.5"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true
},
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
}
},
"chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"dev": true
},
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"requires": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
"shallow-clone": "^3.0.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"colorette": {
"version": "2.0.16",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
"dev": true
},
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
"create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"requires": {
"ms": "^2.1.3"
}
},
"decamelize": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true
},
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
"type-detect": "^4.0.0"
}
},
"diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true
},
"electron-to-chromium": {
"version": "1.5.13",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
"integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
"dev": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"enhanced-resolve": {
"version": "5.17.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
}
},
"envinfo": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
"integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
"dev": true
},
"es-module-lexer": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
"integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
"dev": true
},
"escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true
},
"escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true
},
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
}
},
"esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"requires": {
"estraverse": "^5.2.0"
},
"dependencies": {
"estraverse": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
},
"estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true
},
"execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
"human-signals": "^2.1.0",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.1",
"onetime": "^5.1.2",
"signal-exit": "^3.0.3",
"strip-final-newline": "^2.0.0"
}
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
},
"fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
"dev": true
},
"fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"requires": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
}
},
"flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true
},
"glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
}
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
},
"glob-to-regexp": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true
},
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"handlebars": {
"version": "4.7.7",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
"dev": true,
"requires": {
"minimist": "^1.2.5",
"neo-async": "^2.6.0",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4",
"wordwrap": "^1.0.0"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true
},
"import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
},
"dependencies": {
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
"p-locate": "^4.1.0"
}
},
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
"p-limit": "^2.2.0"
}
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"requires": {
"find-up": "^4.0.0"
}
}
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
"integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
"dev": true
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-core-module": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
"integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true
},
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"requires": {
"isobject": "^3.0.1"
}
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true
},
"is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
"jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
"requires": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"dependencies": {
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"requires": {
"argparse": "^2.0.1"
}
},
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
"loader-runner": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
"dev": true
},
"locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"requires": {
"p-locate": "^5.0.0"
}
},
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
"requires": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
}
},
"make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"marked": {
"version": "4.0.10",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz",
"integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==",
"dev": true
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
"micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
}
},
"mime-db": {
"version": "1.51.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
"integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
"dev": true
},
"mime-types": {
"version": "2.1.34",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
"integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"dev": true,
"requires": {
"mime-db": "1.51.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"requires": {
"brace-expansion": "^2.0.1"
}
},
"minimist": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
"mocha": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
"integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
"dev": true,
"requires": {
"ansi-colors": "^4.1.3",
"browser-stdout": "^1.3.1",
"chokidar": "^3.5.3",
"debug": "^4.3.5",
"diff": "^5.2.0",
"escape-string-regexp": "^4.0.0",
"find-up": "^5.0.0",
"glob": "^8.1.0",
"he": "^1.2.0",
"js-yaml": "^4.1.0",
"log-symbols": "^4.1.0",
"minimatch": "^5.1.6",
"ms": "^2.1.3",
"serialize-javascript": "^6.0.2",
"strip-json-comments": "^3.1.1",
"supports-color": "^8.1.1",
"workerpool": "^6.5.1",
"yargs": "^16.2.0",
"yargs-parser": "^20.2.9",
"yargs-unparser": "^2.0.0"
},
"dependencies": {
"diff": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true
},
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
"neo-async": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
"node-releases": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"requires": {
"path-key": "^3.0.0"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
},
"p-limit": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
"integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"requires": {
"p-limit": "^3.0.2"
},
"dependencies": {
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
"yocto-queue": "^0.1.0"
}
}
}
},
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true
},
"picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true
},
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
"pixl-xml": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/pixl-xml/-/pixl-xml-1.0.13.tgz",
"integrity": "sha1-W6cUCL3zeZTCOd0BJRwQxTwFh+M=",
"dev": true
},
"prettier": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz",
"integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==",
"dev": true
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
"safe-buffer": "^5.1.0"
}
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"requires": {
"picomatch": "^2.2.1"
}
},
"rechoir": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
"integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
"dev": true,
"requires": {
"resolve": "^1.9.0"
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true
},
"resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"requires": {
"is-core-module": "^2.8.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"requires": {
"resolve-from": "^5.0.0"
}
},
"resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
"dev": true
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
},
"schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
},
"serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"requires": {
"randombytes": "^2.1.0"
}
},
"shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"requires": {
"kind-of": "^6.0.2"
}
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"signal-exit": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
}
},
"strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.1"
}
},
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true
},
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
"tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true
},
"terser": {
"version": "5.31.6",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
"integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
}
},
"terser-webpack-plugin": {
"version": "5.3.10",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
"integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
"dev": true,
"requires": {
"@jridgewell/trace-mapping": "^0.3.20",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
"terser": "^5.26.0"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
},
"ts-loader": {
"version": "9.2.6",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz",
"integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==",
"dev": true,
"requires": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.0.0",
"micromatch": "^4.0.0",
"semver": "^7.3.4"
},
"dependencies": {
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
},
"ts-node": {
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz",
"integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==",
"dev": true,
"requires": {
"@cspotcode/source-map-support": "0.7.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.0",
"yn": "3.1.1"
}
},
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
"typescript": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
"integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
"dev": true
},
"uglify-js": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz",
"integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==",
"dev": true,
"optional": true,
"requires": {
"commander": "~2.20.3",
"source-map": "~0.6.1"
}
},
"update-browserslist-db": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
"integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"dev": true,
"requires": {
"escalade": "^3.1.2",
"picocolors": "^1.0.1"
}
},
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
},
"dependencies": {
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
}
}
},
"v8-compile-cache-lib": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz",
"integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==",
"dev": true
},
"watchpack": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
"integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
"dev": true,
"requires": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
}
},
"webpack": {
"version": "5.94.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
"integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dev": true,
"requires": {
"@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
"acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"dependencies": {
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
}
}
},
"webpack-cli": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz",
"integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==",
"dev": true,
"requires": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^1.1.1",
"@webpack-cli/info": "^1.4.1",
"@webpack-cli/serve": "^1.6.1",
"colorette": "^2.0.14",
"commander": "^7.0.0",
"execa": "^5.0.0",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2",
"interpret": "^2.2.0",
"rechoir": "^0.7.0",
"webpack-merge": "^5.7.3"
},
"dependencies": {
"commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true
}
}
},
"webpack-merge": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
"integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
"dev": true,
"requires": {
"clone-deep": "^4.0.1",
"wildcard": "^2.0.0"
}
},
"webpack-sources": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"wildcard": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
"dev": true
},
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
"dev": true
},
"workerpool": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
"integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
"dev": true
},
"wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
},
"xml2js": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dev": true,
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"dev": true
},
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true
},
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
}
},
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true
},
"yargs-unparser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
"requires": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
}
},
"yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true
},
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
}
}
}
bradymholt-cRonstrue-71e0a25/package.json 0000664 0000000 0000000 00000003324 14775314346 0020475 0 ustar 00root root 0000000 0000000 {
"name": "cronstrue",
"title": "cRonstrue",
"version": "2.59.0",
"description": "Convert cron expressions into human readable descriptions",
"author": "Brady Holt",
"license": "MIT",
"bugs": {
"url": "https://github.com/bradymholt/cronstrue/issues"
},
"homepage": "https://github.com/bradymholt/cronstrue",
"keywords": [
"cron",
"cronjob",
"crontab",
"schedule",
"parser",
"cron expression",
"cron description",
"pretty cron",
"cron for humans",
"cron translated",
"cron english",
"cron schedule",
"cron english",
"cron schedule"
],
"main": "dist/cronstrue.js",
"bin": {
"cronstrue": "bin/cli.js"
},
"typings": "dist/cronstrue.d.ts",
"files": [
"dist/",
"locales/",
"i18n.js",
"i18n.d.ts"
],
"repository": {
"type": "git",
"url": "git+https://github.com/bradymholt/cronstrue.git"
},
"publishConfig": {
"access": "public"
},
"prettier": {
"printWidth": 120
},
"devDependencies": {
"@types/chai": "^4.2.11",
"@types/mocha": "^8.0.0",
"chai": "^4.2.0",
"handlebars": "^4.7.6",
"marked": "^4.0.10",
"mocha": "^10.1.0",
"pixl-xml": "^1.0.13",
"prettier": "^2.1.1",
"terser-webpack-plugin": "^5.3.1",
"ts-loader": "^9.2.6",
"ts-node": "^10.5.0",
"typescript": "^4.6.2",
"webpack": "^5.69.1",
"webpack-cli": "^4.9.2",
"xml2js": "^0.5.0"
},
"scripts": {
"start": "npm run build",
"build": "npx tsc -p ./src --emitDeclarationOnly",
"test": "npx mocha --reporter spec --require ts-node/register \"./test/**/*.ts\"",
"prepublishOnly": "rm -rf ./dist && ./node_modules/webpack-cli/bin/cli.js && git add -A"
},
"dependencies": {}
}
bradymholt-cRonstrue-71e0a25/scripts/ 0000775 0000000 0000000 00000000000 14775314346 0017674 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/scripts/convert-ced-locale.js 0000775 0000000 0000000 00000006551 14775314346 0023712 0 ustar 00root root 0000000 0000000 #!/usr/bin/env npx jsh
/* Converts a Cron Expression Descriptor (https://github.com/bradymholt/cron-expression-descriptor/blob/master/scripts/release.js)
locale to a cronstrue locale.
Example usage:
convert-ced-locale.js /Users/jdoe/cron-expression-descriptor/lib/Resources.ja.resx
*/
usage(`\
Usage:
${0} path_to_ced_locale_file
Converts a Cron Expression Descriptor (https://github.com/bradymholt/cron-expression-descriptor/blob/master/scripts/release.js)
locale to a cronstrue locale
`)
const pathToSourceLocaleFile = args.assert(1);
const xmlHelper = require("pixl-xml");
const xmlContent = readFile(pathToSourceLocaleFile);
const parsed = xmlHelper.parse(xmlContent);
const locale = pathToSourceLocaleFile
.split(".")
.slice(-2)
.shift();
const path = require("path");
const targetLocaleFile = path.join(__dirname, `../src/i18n/locales/${locale}.ts`);
let methodNamesTranslated = [];
const lines = [];
for (let key in parsed.data) {
if (parsed.data.hasOwnProperty(key)) {
let name = parsed.data[key].name.charAt(0).toLowerCase() + parsed.data[key].name.slice(1);
if (name == "atX0SecondsPastTheMinuteGt20") {
atX0SecondsPastTheMinuteGt20Specified = true;
} else if (name == "atX0MinutesPastTheHourGt20") {
atX0MinutesPastTheHourGt20Specified = true;
}
// Fix coma misspelling
name = name.replace(/coma/g, "comma");
const value = parsed.data[key].value.replace(/\{\d\}/g, "%s");
lines.push(`${name}(): string {
return "${value}";
}`);
methodNamesTranslated.push(name);
}
}
// Add required but optional properties
const methodsToDefaultIfMissing = [
"atX0SecondsPastTheMinuteGt20",
"atX0MinutesPastTheHourGt20",
"commaMonthX0ThroughMonthX1",
"commaYearX0ThroughYearX1"
];
for (let property of methodsToDefaultIfMissing) {
if (!methodNamesTranslated.includes(property)) {
lines.push(`${property}(): string {
return null;
}`);
}
}
// Calculate and add daysOfTheWeek, monthsOfTheYear methods
lines.push(`
daysOfTheWeek() {
return ${JSON.stringify(getDaysOfTheWeek(locale))};
}`);
lines.push(`
monthsOfTheYear() {
return ${JSON.stringify(getMonthsOfTheYear(locale))};
}`);
const localeFileOutput = `\
import { Locale } from "../locale";
export class ${locale} implements Locale {
use24HourTimeFormatByDefault() {
return false;
}
${lines.join("\n")}
}
`;
// Write the locale file
echo(localeFileOutput, targetLocaleFile);
// Add locale file to list of available locales
$(`echo 'export { ${locale} } from \"./locales/${locale}\";' >> ${path.join(__dirname, `../src/i18n/allLocales.ts`)}`)
echo(`Done!`);
function getDaysOfTheWeek(locale) {
var daysOfTheWeek = [];
var monday = new Date();
monday.setDate(monday.getDate() - ((monday.getDay() + 6) % 7));
for (var i = 0; i <= 6; i++) {
var currentDow = new Date();
currentDow.setDate(monday.getDate() + i);
var dowName = currentDow.toLocaleString(locale, { weekday: "long" });
daysOfTheWeek.push(dowName);
}
return daysOfTheWeek;
}
function getMonthsOfTheYear(locale) {
var monthsOfTheYear = [];
var january = new Date(new Date().getFullYear(), 0, 1);
for (var i = 0; i <= 11; i++) {
var currentMonth = new Date();
currentMonth.setMonth(january.getMonth() + i);
var monthName = currentMonth.toLocaleString(locale, { month: "long" });
monthsOfTheYear.push(monthName);
}
return monthsOfTheYear;
}
bradymholt-cRonstrue-71e0a25/src/ 0000775 0000000 0000000 00000000000 14775314346 0016774 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/src/cronParser.ts 0000664 0000000 0000000 00000027033 14775314346 0021467 0 ustar 00root root 0000000 0000000 import RangeValidator from "./rangeValidator";
/**
* Parses and normalizes a cron expression
* @export
* @class CronParser
*/
export class CronParser {
expression: string;
dayOfWeekStartIndexZero: boolean;
monthStartIndexZero: boolean;
constructor(
expression: string,
dayOfWeekStartIndexZero: boolean = true,
monthStartIndexZero: boolean = false
) {
this.expression = expression;
this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;
this.monthStartIndexZero = monthStartIndexZero;
}
/**
* Parses and normalizes a cron expression into an array of strings
* @returns {string[]}
*/
parse(): string[] {
let parsed: string[];
var expression = this.expression ?? '';
if (expression.startsWith('@')) {
var special = this.parseSpecial(this.expression);
parsed = this.extractParts(special);
} else {
parsed = this.extractParts(this.expression);
}
this.normalize(parsed);
this.validate(parsed);
return parsed;
}
parseSpecial(expression: string): string {
const specialExpressions: { [key: string]: string } = {
'@yearly': '0 0 1 1 *',
'@annually': '0 0 1 1 *',
'@monthly': '0 0 1 * *',
'@weekly': '0 0 * * 0',
'@daily': '0 0 * * *',
'@midnight': '0 0 * * *',
'@hourly': '0 * * * *'
};
const special = specialExpressions[expression];
if (!special) {
throw new Error('Unknown special expression.');
}
return special;
}
protected extractParts(expression: string) {
if (!this.expression) {
throw new Error("cron expression is empty");
}
// split on one or more spaces
let parsed: string[] = expression.trim().split(/[ ]+/);
// sort elements with array of numbers
for (let i = 0; i < parsed.length; i++) {
if (parsed[i].includes(",")) {
const arrayElement = parsed[i]
.split(",")
.map((item) => item.trim())
.filter((item) => item !== "")
.map((item) => (!isNaN(Number(item)) ? Number(item) : item))
.filter((item) => item !== null && item !== "");
if (arrayElement.length === 0) {
arrayElement.push("*");
}
arrayElement.sort((a, b) => (a !== null && b !== null ? (a as number) - (b as number) : 0));
parsed[i] = arrayElement.map((item) => (item !== null ? item.toString() : "")).join(",");
}
}
if (parsed.length < 5) {
throw new Error(
`Expression has only ${parsed.length} part${parsed.length == 1 ? "" : "s"}. At least 5 parts are required.`
);
} else if (parsed.length == 5) {
// 5 part cron so shift array past seconds element
parsed.unshift("");
parsed.push("");
} else if (parsed.length == 6) {
/* We will detect if this 6 part expression has a year specified and if so we will shift the parts and treat the
first part as a minute part rather than a second part.
Ways we detect:
1. Last part is a literal year (i.e. 2020)
2. 3rd or 5th part is specified as "?" (DOM or DOW)
*/
const isYearWithNoSecondsPart = /\d{4}$/.test(parsed[5]) || parsed[4] == "?" || parsed[2] == "?";
if (isYearWithNoSecondsPart) {
// year provided; shift parts over by one
parsed.unshift("");
} else {
// seconds provided
parsed.push("");
}
} else if (parsed.length > 7) {
throw new Error(`Expression has ${parsed.length} parts; too many!`);
}
return parsed;
}
protected normalize(expressionParts: string[]): void {
// Convert ? to * for DOM and DOW
expressionParts[3] = expressionParts[3].replace("?", "*");
expressionParts[5] = expressionParts[5].replace("?", "*");
// Convert ? to * for Hour. ? isn't valid for hour position but we can work around it.
expressionParts[2] = expressionParts[2].replace("?", "*");
// Convert 0/, 1/ to */
if (expressionParts[0].indexOf("0/") == 0) {
// Seconds
expressionParts[0] = expressionParts[0].replace("0/", "*/");
}
if (expressionParts[1].indexOf("0/") == 0) {
// Minutes
expressionParts[1] = expressionParts[1].replace("0/", "*/");
}
if (expressionParts[2].indexOf("0/") == 0) {
// Hours
expressionParts[2] = expressionParts[2].replace("0/", "*/");
}
if (expressionParts[3].indexOf("1/") == 0) {
// DOM
expressionParts[3] = expressionParts[3].replace("1/", "*/");
}
if (expressionParts[4].indexOf("1/") == 0) {
// Month
expressionParts[4] = expressionParts[4].replace("1/", "*/");
}
if (expressionParts[6].indexOf("1/") == 0) {
// Years
expressionParts[6] = expressionParts[6].replace("1/", "*/");
}
// Adjust DOW based on dayOfWeekStartIndexZero option
// Normalized DOW: 0=Sunday/6=Saturday
expressionParts[5] = expressionParts[5].replace(/(^\d)|([^#/\s]\d)/g, (t) => {
// skip anything preceeded by # or /
let dowDigits = t.replace(/\D/, ""); // extract digit part (i.e. if "-2" or ",2", just take 2)
let dowDigitsAdjusted: string = dowDigits;
if (this.dayOfWeekStartIndexZero) {
// "7" also means Sunday so we will convert to "0" to normalize it
if (dowDigits == "7") {
dowDigitsAdjusted = "0";
}
} else {
// If dayOfWeekStartIndexZero==false, Sunday is specified as 1 and Saturday is specified as 7.
// To normalize, we will shift the DOW number down so that 1 becomes 0, 2 becomes 1, and so on.
dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString();
}
return t.replace(dowDigits, dowDigitsAdjusted);
});
// Convert DOW 'L' to '6' (Saturday)
if (expressionParts[5] == "L") {
expressionParts[5] = "6";
}
// Convert DOM '?' to '*'
if (expressionParts[3] == "?") {
expressionParts[3] = "*";
}
if (
expressionParts[3].indexOf("W") > -1 &&
(expressionParts[3].indexOf(",") > -1 || expressionParts[3].indexOf("-") > -1)
) {
throw new Error(
"The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days."
);
}
// Convert DOW SUN-SAT format to 0-6 format
var days: { [key: string]: number } = {
SUN: 0,
MON: 1,
TUE: 2,
WED: 3,
THU: 4,
FRI: 5,
SAT: 6,
};
for (let day in days) {
expressionParts[5] = expressionParts[5].replace(new RegExp(day, "gi"), days[day].toString());
}
// Adjust month based on monthStartIndexZero option
// Normalized Month: 1=JAN/12=DEC
expressionParts[4] = expressionParts[4].replace(/(^\d{1,2})|([^#/\s]\d{1,2})/g, (t) => {
// skip anything preceeded by # or /
let dowDigits = t.replace(/\D/, ""); // extract digit part (i.e. if "-2" or ",2", just take 2)
let dowDigitsAdjusted: string = dowDigits;
if (this.monthStartIndexZero) {
// if monthStartIndexZero==true, we will shift month number up so that JAN=1 and DEC=12
dowDigitsAdjusted = (parseInt(dowDigits) + 1).toString();
}
return t.replace(dowDigits, dowDigitsAdjusted);
});
// Convert JAN-DEC format to 1-12 format
var months: { [key: string]: number } = {
JAN: 1,
FEB: 2,
MAR: 3,
APR: 4,
MAY: 5,
JUN: 6,
JUL: 7,
AUG: 8,
SEP: 9,
OCT: 10,
NOV: 11,
DEC: 12,
};
for (let month in months) {
expressionParts[4] = expressionParts[4].replace(new RegExp(month, "gi"), months[month].toString());
}
// Convert 0 second to (empty)
if (expressionParts[0] == "0") {
expressionParts[0] = "";
}
// If time increment or * (every) is specified for seconds or minutes and hours part is single item, make it a "self-range" so
// the expression can be interpreted as an increment / range. This will allow us to easily interpret an hour part as 'between' a second or minute duration.
// For example:
// 0-20/3 9 * * * => 0-20/3 9-9 * * * (9 => 9-9) => Every 3 minutes, minutes 0 through 20 past the hour, between 09:00 AM and 09:59 AM
// */5 3 * * * => */5 3-3 * * * (3 => 3-3) => Every 5 minutes, between 03:00 AM and 03:59 AM
if (
!/\*|\-|\,|\//.test(expressionParts[2]) &&
(/\*|\//.test(expressionParts[1]) || /\*|\//.test(expressionParts[0]))
) {
expressionParts[2] += `-${expressionParts[2]}`;
}
// Loop through all parts and apply global normalization
for (let i = 0; i < expressionParts.length; i++) {
// ignore empty characters around comma
// if nothing left, set it to *
if (expressionParts[i].indexOf(",") != -1) {
expressionParts[i] =
expressionParts[i]
.split(",")
.filter((str) => str !== "")
.join(",") || "*";
}
// convert all '*/1' to '*'
if (expressionParts[i] == "*/1") {
expressionParts[i] = "*";
}
/* Convert Month,DOW,Year step values with a starting value (i.e. not '*') to range expressions.
This allows us to reuse the range expression handling for step values.
For example:
- month part '3/2' will be converted to '3-12/2' (every 2 months between March and December)
- DOW part '3/2' will be converted to '3-6/2' (every 2 days between Tuesday and Saturday)
*/
if (expressionParts[i].indexOf("/") > -1 && !/^\*|\-|\,/.test(expressionParts[i])) {
let stepRangeThrough: string | null = null;
switch (i) {
case 4:
stepRangeThrough = "12";
break;
case 5:
stepRangeThrough = "6";
break;
case 6:
stepRangeThrough = "9999";
break;
default:
stepRangeThrough = null;
break;
}
if (stepRangeThrough !== null) {
let parts: string[] = expressionParts[i].split("/");
expressionParts[i] = `${parts[0]}-${stepRangeThrough}/${parts[1]}`;
}
}
}
}
protected validate(parsed: string[]) {
const standardCronPartCharacters = "0-9,\\-*\/";
this.validateOnlyExpectedCharactersFound(parsed[0], standardCronPartCharacters);
this.validateOnlyExpectedCharactersFound(parsed[1], standardCronPartCharacters);
this.validateOnlyExpectedCharactersFound(parsed[2], standardCronPartCharacters);
// DOM
this.validateOnlyExpectedCharactersFound(parsed[3], "0-9,\\-*\/LW");
this.validateOnlyExpectedCharactersFound(parsed[4], standardCronPartCharacters);
// DOW
this.validateOnlyExpectedCharactersFound(parsed[5], "0-9,\\-*\/L#");
this.validateOnlyExpectedCharactersFound(parsed[6], standardCronPartCharacters);
this.validateAnyRanges(parsed);
}
protected validateAnyRanges(parsed: string[]) {
RangeValidator.secondRange(parsed[0]);
RangeValidator.minuteRange(parsed[1]);
RangeValidator.hourRange(parsed[2]);
RangeValidator.dayOfMonthRange(parsed[3]);
RangeValidator.monthRange(parsed[4], this.monthStartIndexZero);
RangeValidator.dayOfWeekRange(parsed[5], this.dayOfWeekStartIndexZero);
}
protected validateOnlyExpectedCharactersFound(cronPart: string, allowedCharsExpression: string) {
// Write code that will ensure the expression string only contains numbers or any of the following characters , - * /
// If any other characters are found, it is an error.
let invalidChars = cronPart.match(new RegExp(`[^${allowedCharsExpression}]+`, "gi"));
if (invalidChars && invalidChars.length) {
throw new Error(`Expression contains invalid values: '${invalidChars.toString()}'`);
}
}
}
bradymholt-cRonstrue-71e0a25/src/cronstrue-i18n.ts 0000664 0000000 0000000 00000000436 14775314346 0022150 0 ustar 00root root 0000000 0000000 import { ExpressionDescriptor } from "./expressionDescriptor";
import { allLocalesLoader } from "./i18n/allLocalesLoader";
ExpressionDescriptor.initialize(new allLocalesLoader());
export default ExpressionDescriptor;
let toString = ExpressionDescriptor.toString;
export { toString };
bradymholt-cRonstrue-71e0a25/src/cronstrue.ts 0000664 0000000 0000000 00000000430 14775314346 0021365 0 ustar 00root root 0000000 0000000 import { ExpressionDescriptor } from "./expressionDescriptor";
import { enLocaleLoader } from "./i18n/enLocaleLoader";
ExpressionDescriptor.initialize(new enLocaleLoader());
export default ExpressionDescriptor;
let toString = ExpressionDescriptor.toString;
export { toString };
bradymholt-cRonstrue-71e0a25/src/expressionDescriptor.ts 0000664 0000000 0000000 00000062240 14775314346 0023606 0 ustar 00root root 0000000 0000000 import { StringUtilities } from "./stringUtilities";
import { CronParser } from "./cronParser";
import { Options } from "./options";
import { Locale } from "./i18n/locale";
import { LocaleLoader } from "./i18n/localeLoader";
export class ExpressionDescriptor {
static locales: { [name: string]: Locale } = {};
static defaultLocale: string;
static specialCharacters: string[];
expression: string;
expressionParts: string[];
options: Options;
i18n: Locale;
/**
* Converts a cron expression into a description a human can read
* @static
* @param {string} expression - The cron expression
* @param {IOptions} [{
* throwExceptionOnParseError = true,
* casingType = CasingTypeEnum.Sentence,
* verbose = false,
* dayOfWeekStartIndexZero = true,
* monthStartIndexZero = false,
* use24HourTimeFormat = false,
* locale = 'en'
* }={}]
* @returns {string}
*/
static toString(
expression: string,
{
throwExceptionOnParseError = true,
verbose = false,
dayOfWeekStartIndexZero = true,
monthStartIndexZero = false,
use24HourTimeFormat,
locale = null,
tzOffset = 0,
}: Options = {}
): string {
// We take advantage of Destructuring Object Parameters (and defaults) in TS/ES6 and now we will reassemble back to
// an Options type so we can pass around options with ease.
let options = {
throwExceptionOnParseError: throwExceptionOnParseError,
verbose: verbose,
dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,
monthStartIndexZero: monthStartIndexZero,
use24HourTimeFormat: use24HourTimeFormat,
locale: locale,
tzOffset: tzOffset,
};
if (options.tzOffset) {
console.warn(`'tzOffset' option has been deprecated and will be removed in a future release.`);
}
let descripter = new ExpressionDescriptor(expression, options);
return descripter.getFullDescription();
}
static initialize(localesLoader: LocaleLoader, defaultLocale = "en") {
ExpressionDescriptor.specialCharacters = ["/", "-", ",", "*"];
ExpressionDescriptor.defaultLocale = defaultLocale;
// Load locales
localesLoader.load(ExpressionDescriptor.locales);
}
constructor(expression: string, options: Options) {
this.expression = expression;
this.options = options;
this.expressionParts = new Array(5);
if (!this.options.locale && ExpressionDescriptor.defaultLocale) {
this.options.locale = ExpressionDescriptor.defaultLocale;
}
if (!ExpressionDescriptor.locales[this.options!.locale!]) {
const fallBackLocale = Object.keys(ExpressionDescriptor.locales)[0];
// fall back to English
console.warn(`Locale '${this.options.locale}' could not be found; falling back to '${fallBackLocale}'.`);
this.options.locale = fallBackLocale;
}
this.i18n = ExpressionDescriptor.locales[this.options!.locale!];
if (options.use24HourTimeFormat === undefined) {
// if use24HourTimeFormat not specified, set based on locale default
options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault();
}
}
protected getFullDescription() {
let description = "";
try {
let parser = new CronParser(
this.expression,
this.options.dayOfWeekStartIndexZero,
this.options.monthStartIndexZero
);
this.expressionParts = parser.parse();
var timeSegment = this.getTimeOfDayDescription();
var dayOfMonthDesc = this.getDayOfMonthDescription();
var monthDesc = this.getMonthDescription();
var dayOfWeekDesc = this.getDayOfWeekDescription();
var yearDesc = this.getYearDescription();
description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc;
description = this.transformVerbosity(description, !!this.options.verbose);
// uppercase first character
description = description.charAt(0).toLocaleUpperCase() + description.substr(1);
} catch (ex) {
if (!this.options.throwExceptionOnParseError) {
description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();
} else {
throw `${ex}`;
}
}
return description;
}
protected getTimeOfDayDescription() {
let secondsExpression: string = this.expressionParts[0];
let minuteExpression: string = this.expressionParts[1];
let hourExpression: string = this.expressionParts[2];
let description = "";
// handle special cases first
if (
!StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) &&
!StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) &&
!StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)
) {
// specific time of day (i.e. 10 14)
description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression);
} else if (
!secondsExpression &&
minuteExpression.indexOf("-") > -1 &&
!(minuteExpression.indexOf(",") > -1) &&
!(minuteExpression.indexOf("/") > -1) &&
!StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)
) {
// minute range in single hour (i.e. 0-10 11)
let minuteParts: string[] = minuteExpression.split("-");
description += StringUtilities.format(
this.i18n.everyMinuteBetweenX0AndX1(),
this.formatTime(hourExpression, minuteParts[0], ""),
this.formatTime(hourExpression, minuteParts[1], "")
);
} else if (
!secondsExpression &&
hourExpression.indexOf(",") > -1 &&
hourExpression.indexOf("-") == -1 &&
hourExpression.indexOf("/") == -1 &&
!StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)
) {
// hours list with single minute (i.e. 30 6,14,16)
let hourParts: string[] = hourExpression.split(",");
description += this.i18n.at();
for (let i = 0; i < hourParts.length; i++) {
description += " ";
description += this.formatTime(hourParts[i], minuteExpression, "");
if (i < hourParts.length - 2) {
description += ",";
}
if (i == hourParts.length - 2) {
description += this.i18n.spaceAnd();
}
}
} else {
// default time description
let secondsDescription = this.getSecondsDescription();
let minutesDescription = this.getMinutesDescription();
let hoursDescription = this.getHoursDescription();
description += secondsDescription;
if (description && minutesDescription) {
description += ", ";
}
description += minutesDescription;
if (minutesDescription === hoursDescription) {
return description;
}
if (description && hoursDescription) {
description += ", ";
}
description += hoursDescription;
}
return description;
}
protected getSecondsDescription() {
let description: string | null = this.getSegmentDescription(
this.expressionParts[0],
this.i18n.everySecond(),
(s) => {
return s;
},
(s) => {
return StringUtilities.format(this.i18n.everyX0Seconds(s), s);
},
(s) => {
return this.i18n.secondsX0ThroughX1PastTheMinute();
},
(s) => {
return s == "0"
? ""
: parseInt(s) < 20
? this.i18n.atX0SecondsPastTheMinute(s)
: this.i18n.atX0SecondsPastTheMinuteGt20() || this.i18n.atX0SecondsPastTheMinute(s);
}
);
return description;
}
protected getMinutesDescription() {
const secondsExpression = this.expressionParts[0];
const hourExpression = this.expressionParts[2];
let description: string | null = this.getSegmentDescription(
this.expressionParts[1],
this.i18n.everyMinute(),
(s) => {
return s;
},
(s) => {
return StringUtilities.format(this.i18n.everyX0Minutes(s), s);
},
(s) => {
return this.i18n.minutesX0ThroughX1PastTheHour();
},
(s) => {
try {
return s == "0" && hourExpression.indexOf("/") == -1 && secondsExpression == ""
? this.i18n.everyHour()
: parseInt(s) < 20
? this.i18n.atX0MinutesPastTheHour(s)
: this.i18n.atX0MinutesPastTheHourGt20() || this.i18n.atX0MinutesPastTheHour(s);
} catch (e) {
return this.i18n.atX0MinutesPastTheHour(s);
}
}
);
return description;
}
protected getHoursDescription() {
let expression = this.expressionParts[2];
// Collect the end values of hour ranges (e.g., "7-19" -> "19") to determine if ":59" should be used instead of ":00" for the last minute of the range.
let hourIndex = 0;
const rangeEndValues: { value: string; index: number }[] = [];
expression
.split("/")[0] // Ignore step values (e.g., "7-19/2" -> "7-19")
.split(",") // Split multiple ranges or values (e.g., "7-19,20" -> ["7-19", "20"])
.forEach((range) => {
const rangeParts = range.split("-"); // Split ranges into start and end (e.g., "7-19" -> ["7", "19"])
if (rangeParts.length === 2) {
rangeEndValues.push({ value: rangeParts[1], index: hourIndex + 1 });
}
hourIndex += rangeParts.length;
});
let evaluationIndex = 0;
let description = this.getSegmentDescription(
expression,
this.i18n.everyHour(),
(s) => {
const match = rangeEndValues.find((r) => r.value === s && r.index === evaluationIndex);
const isRangeEndWithNonZeroMinute = match && this.expressionParts[1] !== "0";
evaluationIndex++;
return isRangeEndWithNonZeroMinute ? this.formatTime(s, "59", "") : this.formatTime(s, "0", "");
},
(s) => {
return StringUtilities.format(this.i18n.everyX0Hours(s), s);
},
(s) => {
return this.i18n.betweenX0AndX1();
},
(s) => {
return this.i18n.atX0();
}
);
return description;
}
protected getDayOfWeekDescription() {
var daysOfWeekNames = this.i18n.daysOfTheWeek();
let description: string | null = null;
if (this.expressionParts[5] == "*") {
// DOW is specified as * so we will not generate a description and defer to DOM part.
// Otherwise, we could get a contradiction like "on day 1 of the month, every day"
// or a dupe description like "every day, every day".
description = "";
} else {
description = this.getSegmentDescription(
this.expressionParts[5],
this.i18n.commaEveryDay(),
(s, form) => {
let exp: string = s;
if (s.indexOf("#") > -1) {
exp = s.substring(0, s.indexOf("#"));
} else if (s.indexOf("L") > -1) {
exp = exp.replace("L", "");
}
let parsedExp = parseInt(exp);
if (this.options.tzOffset) {
const hourExpression = this.expressionParts[2];
let hour: number = parseInt(hourExpression) + (this.options.tzOffset ? this.options.tzOffset : 0);
if (hour >= 24) {
parsedExp++;
} else if (hour < 0) {
parsedExp--;
}
if (parsedExp > 6) {
parsedExp = 0;
} else if (parsedExp < 0) {
parsedExp = 6;
}
}
let description = this.i18n.daysOfTheWeekInCase
? this.i18n.daysOfTheWeekInCase(form)[parsedExp]
: daysOfWeekNames[parsedExp];
if (s.indexOf("#") > -1) {
let dayOfWeekOfMonthDescription: string | null = null;
let dayOfWeekOfMonthNumber: string = s.substring(s.indexOf("#") + 1);
let dayOfWeekNumber = s.substring(0, s.indexOf("#"));
switch (dayOfWeekOfMonthNumber) {
case "1":
dayOfWeekOfMonthDescription = this.i18n.first(dayOfWeekNumber);
break;
case "2":
dayOfWeekOfMonthDescription = this.i18n.second(dayOfWeekNumber);
break;
case "3":
dayOfWeekOfMonthDescription = this.i18n.third(dayOfWeekNumber);
break;
case "4":
dayOfWeekOfMonthDescription = this.i18n.fourth(dayOfWeekNumber);
break;
case "5":
dayOfWeekOfMonthDescription = this.i18n.fifth(dayOfWeekNumber);
break;
}
description = dayOfWeekOfMonthDescription + " " + description;
}
return description;
},
(s) => {
if (parseInt(s) == 1) {
// rather than "every 1 days" just return empty string
return "";
} else {
return StringUtilities.format(this.i18n.commaEveryX0DaysOfTheWeek(s), s);
}
},
(s) => {
// If both DOM and DOW are specified, the cron will execute at either time.
const beginFrom = s.substring(0, s.indexOf("-"));
const domSpecified = this.expressionParts[3] != "*";
return domSpecified ? this.i18n.commaAndX0ThroughX1(beginFrom) : this.i18n.commaX0ThroughX1(beginFrom);
},
(s) => {
let format: string | null = null;
if (s.indexOf("#") > -1) {
let dayOfWeekOfMonthNumber: string = s.substring(s.indexOf("#") + 1);
let dayOfWeek = s.substring(0, s.indexOf("#"));
format = this.i18n.commaOnThe(dayOfWeekOfMonthNumber, dayOfWeek).trim() + this.i18n.spaceX0OfTheMonth();
} else if (s.indexOf("L") > -1) {
format = this.i18n.commaOnTheLastX0OfTheMonth(s.replace("L", ""));
} else {
// If both DOM and DOW are specified, the cron will execute at either time.
const domSpecified = this.expressionParts[3] != "*";
format = domSpecified ? this.i18n.commaAndOnX0() : this.i18n.commaOnlyOnX0(s);
}
return format;
}
);
}
return description;
}
protected getMonthDescription() {
var monthNames = this.i18n.monthsOfTheYear();
let description: string | null = this.getSegmentDescription(
this.expressionParts[4],
"",
(s, form) => {
return form && this.i18n.monthsOfTheYearInCase
? this.i18n.monthsOfTheYearInCase(form)[parseInt(s) - 1]
: monthNames[parseInt(s) - 1];
},
(s) => {
//
if (parseInt(s) == 1) {
// rather than "every 1 months" just return empty string
return "";
} else {
return StringUtilities.format(this.i18n.commaEveryX0Months(s), s);
}
},
(s) => {
return this.i18n.commaMonthX0ThroughMonthX1() || this.i18n.commaX0ThroughX1();
},
(s) => {
return this.i18n.commaOnlyInMonthX0 ? this.i18n.commaOnlyInMonthX0() : this.i18n.commaOnlyInX0();
}
);
return description;
}
protected getDayOfMonthDescription(): string | null {
let description: string | null = null;
let expression: string = this.expressionParts[3];
switch (expression) {
case "L":
description = this.i18n.commaOnTheLastDayOfTheMonth();
break;
case "WL":
case "LW":
description = this.i18n.commaOnTheLastWeekdayOfTheMonth();
break;
default:
// i.e. 3W or W2
let weekDayNumberMatches = expression.match(/(\d{1,2}W)|(W\d{1,2})/);
if (weekDayNumberMatches) {
let dayNumber: number = parseInt(weekDayNumberMatches[0].replace("W", ""));
let dayString: string =
dayNumber == 1
? this.i18n.firstWeekday()
: StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString());
description = StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString);
break;
} else {
// Handle "last day offset" (i.e. L-5: "5 days before the last day of the month")
let lastDayOffSetMatches = expression.match(/L-(\d{1,2})/);
if (lastDayOffSetMatches) {
let offSetDays = lastDayOffSetMatches[1];
description = StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(offSetDays), offSetDays);
break;
} else if (expression == "*" && this.expressionParts[5] != "*") {
// * dayOfMonth and dayOfWeek specified so use dayOfWeek verbiage instead
return "";
} else {
description = this.getSegmentDescription(
expression,
this.i18n.commaEveryDay(),
(s) => {
return s == "L"
? this.i18n.lastDay()
: this.i18n.dayX0
? StringUtilities.format(this.i18n.dayX0(), s)
: s;
},
(s) => {
return s == "1" ? this.i18n.commaEveryDay() : this.i18n.commaEveryX0Days(s);
},
(s) => {
return this.i18n.commaBetweenDayX0AndX1OfTheMonth(s);
},
(s) => {
return this.i18n.commaOnDayX0OfTheMonth(s);
}
);
}
break;
}
}
return description;
}
protected getYearDescription() {
let description: string | null = this.getSegmentDescription(
this.expressionParts[6],
"",
(s) => {
return /^\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s;
},
(s) => {
return StringUtilities.format(this.i18n.commaEveryX0Years(s), s);
},
(s) => {
return this.i18n.commaYearX0ThroughYearX1() || this.i18n.commaX0ThroughX1();
},
(s) => {
return this.i18n.commaOnlyInYearX0 ? this.i18n.commaOnlyInYearX0() : this.i18n.commaOnlyInX0();
}
);
return description;
}
protected getSegmentDescription(
expression: string,
allDescription: string,
getSingleItemDescription: (t: string, form?: number) => string,
getIncrementDescriptionFormat: (t: string) => string,
getRangeDescriptionFormat: (t: string) => string,
getDescriptionFormat: (t: string) => string
): string | null {
let description: string | null = null;
const doesExpressionContainIncrement = expression.indexOf("/") > -1;
const doesExpressionContainRange = expression.indexOf("-") > -1;
const doesExpressionContainMultipleValues = expression.indexOf(",") > -1;
if (!expression) {
// Empty
description = "";
} else if (expression === "*") {
// * (All)
description = allDescription;
} else if (!doesExpressionContainIncrement && !doesExpressionContainRange && !doesExpressionContainMultipleValues) {
// Simple
description = StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression));
} else if (doesExpressionContainMultipleValues) {
// Multiple Values
let segments: string[] = expression.split(",");
let descriptionContent: string = "";
for (let i = 0; i < segments.length; i++) {
if (i > 0 && segments.length > 2) {
descriptionContent += ",";
if (i < segments.length - 1) {
descriptionContent += " ";
}
}
if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) {
descriptionContent += `${this.i18n.spaceAnd()} `;
}
if (segments[i].indexOf("/") > -1 || segments[i].indexOf("-") > -1) {
// Multiple Values with Increment or Range
const isSegmentRangeWithoutIncrement = segments[i].indexOf("-") > -1 && segments[i].indexOf("/") == -1;
let currentDescriptionContent = this.getSegmentDescription(
segments[i],
allDescription,
getSingleItemDescription,
getIncrementDescriptionFormat,
isSegmentRangeWithoutIncrement ? this.i18n.commaX0ThroughX1 : getRangeDescriptionFormat,
getDescriptionFormat
);
if (isSegmentRangeWithoutIncrement) {
currentDescriptionContent = currentDescriptionContent!.replace(", ", "");
}
descriptionContent += currentDescriptionContent;
} else if (!doesExpressionContainIncrement) {
descriptionContent += getSingleItemDescription(segments[i]);
} else {
descriptionContent += this.getSegmentDescription(
segments[i],
allDescription,
getSingleItemDescription,
getIncrementDescriptionFormat,
getRangeDescriptionFormat,
getDescriptionFormat
);
}
}
if (!doesExpressionContainIncrement) {
description = StringUtilities.format(getDescriptionFormat(expression), descriptionContent);
} else {
description = descriptionContent;
}
} else if (doesExpressionContainIncrement) {
// Increment
let segments: string[] = expression.split("/");
description = StringUtilities.format(getIncrementDescriptionFormat(segments[1]), segments[1]);
if (segments[0].indexOf("-") > -1) {
// Range with Increment (ex: 2-59/3 )
let rangeSegmentDescription: string = this.generateRangeSegmentDescription(
segments[0],
getRangeDescriptionFormat,
getSingleItemDescription
);
if (rangeSegmentDescription.indexOf(", ") != 0) {
description += ", ";
}
description += rangeSegmentDescription;
} else if (segments[0].indexOf("*") == -1) {
let rangeItemDescription: string = StringUtilities.format(
getDescriptionFormat(segments[0]),
getSingleItemDescription(segments[0])
);
// remove any leading comma
rangeItemDescription = rangeItemDescription.replace(", ", "");
description += StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription);
}
} else if (doesExpressionContainRange) {
// Range
description = this.generateRangeSegmentDescription(
expression,
getRangeDescriptionFormat,
getSingleItemDescription
);
}
return description;
}
protected generateRangeSegmentDescription(
rangeExpression: string,
getRangeDescriptionFormat: (t: string) => string,
getSingleItemDescription: (t: string, form?: number) => string
): string {
let description: string = "";
let rangeSegments: string[] = rangeExpression.split("-");
let rangeSegment1Description: string = getSingleItemDescription(rangeSegments[0], 1);
let rangeSegment2Description: string = getSingleItemDescription(rangeSegments[1], 2);
let rangeDescriptionFormat = getRangeDescriptionFormat(rangeExpression);
description += StringUtilities.format(rangeDescriptionFormat, rangeSegment1Description, rangeSegment2Description);
return description;
}
protected formatTime(hourExpression: string, minuteExpression: string, secondExpression: string) {
let hourOffset: number = 0;
let minuteOffset: number = 0;
if (this.options.tzOffset) {
hourOffset = this.options.tzOffset > 0 ? Math.floor(this.options.tzOffset) : Math.ceil(this.options.tzOffset);
minuteOffset = parseFloat((this.options.tzOffset % 1).toFixed(2));
if (minuteOffset != 0) {
minuteOffset *= 60;
}
}
let hour: number = parseInt(hourExpression) + hourOffset;
let minute: number = parseInt(minuteExpression) + minuteOffset;
if (minute >= 60) {
minute -= 60;
hour += 1;
} else if (minute < 0) {
minute += 60;
hour -= 1;
}
if (hour >= 24) {
hour = hour - 24;
} else if (hour < 0) {
hour = 24 + hour;
}
let period: string = "";
let setPeriodBeforeTime: boolean = false;
if (!this.options.use24HourTimeFormat) {
setPeriodBeforeTime = !!(this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime());
period = setPeriodBeforeTime ? `${this.getPeriod(hour)} ` : ` ${this.getPeriod(hour)}`;
if (hour > 12) {
hour -= 12;
}
if (hour === 0) {
hour = 12;
}
}
let second: string = "";
if (secondExpression) {
second = `:${("00" + secondExpression).substring(secondExpression.length)}`;
}
return `${setPeriodBeforeTime ? period : ""}${("00" + hour.toString()).substring(hour.toString().length)}:${(
"00" + minute.toString()
).substring(minute.toString().length)}${second}${!setPeriodBeforeTime ? period : ""}`;
}
protected transformVerbosity(description: string, useVerboseFormat: boolean) {
if (!useVerboseFormat) {
description = description.replace(new RegExp(`, ${this.i18n.everyMinute()}`, "g"), "");
description = description.replace(new RegExp(`, ${this.i18n.everyHour()}`, "g"), "");
description = description.replace(new RegExp(this.i18n.commaEveryDay(), "g"), "");
description = description.replace(/\, ?$/, "");
if (this.i18n.conciseVerbosityReplacements) {
for (const [key, value] of Object.entries(this.i18n.conciseVerbosityReplacements())) {
description = description.replace(new RegExp(key, "g"), value);
}
}
}
return description;
}
private getPeriod(hour: number): string {
return hour >= 12 ? (this.i18n.pm && this.i18n.pm()) || "PM" : (this.i18n.am && this.i18n.am()) || "AM";
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/ 0000775 0000000 0000000 00000000000 14775314346 0017553 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/src/i18n/allLocales.ts 0000664 0000000 0000000 00000003332 14775314346 0022177 0 ustar 00root root 0000000 0000000 export { en } from "./locales/en"; // English
export { da } from "./locales/da"; // Danish
export { de } from "./locales/de"; // German
export { es } from "./locales/es"; // Spanish
export { fr } from "./locales/fr"; // French
export { it } from "./locales/it"; // Italian
export { id } from "./locales/id"; // Indonesia
export { ko } from "./locales/ko"; // Korean
export { nl } from "./locales/nl"; // Dutch
export { nb } from "./locales/nb"; // Norwegian
export { sv } from "./locales/sv"; // Swedish
export { pl } from "./locales/pl"; // Polish
export { pt_BR } from "./locales/pt_BR"; // Portuguese (Brazil)
export { pt_PT } from "./locales/pt_PT"; // Portuguese (Portugal)
export { ro } from "./locales/ro"; // Romanian
export { ru } from "./locales/ru"; // Russian
export { tr } from "./locales/tr"; // Turkish
export { uk } from "./locales/uk"; // Ukrainian
export { zh_CN } from "./locales/zh_CN"; // Chinese (Simplified)
export { zh_TW } from "./locales/zh_TW"; // Chinese (Traditional)
export { ja } from "./locales/ja";
export { he } from "./locales/he"; // Hebrew
export { cs } from "./locales/cs"; // Czech
export { sk } from "./locales/sk"; // Slovakian
export { fi } from "./locales/fi";
export { sl } from "./locales/sl"; // Slovenian
export { sw } from "./locales/sw"; // Swahili
export { fa } from "./locales/fa"; // Farsi
export { ca } from "./locales/ca"; // Catalan
export { be } from "./locales/be"; // Be
export { hu } from "./locales/hu"; // Hungarian
export { af } from "./locales/af"; // Afrikaans
export { th } from "./locales/th"; // Thai
export { ar } from './locales/ar'; // Arabic
export { vi } from './locales/vi'; // Vietnamese
export { my } from './locales/my'; // Malay
export { bg } from './locales/bg'; // Bulgarian
bradymholt-cRonstrue-71e0a25/src/i18n/allLocalesLoader.ts 0000664 0000000 0000000 00000000547 14775314346 0023333 0 ustar 00root root 0000000 0000000 import { Locale } from "./locale";
import * as allLocales from "./allLocales";
export class allLocalesLoader {
load(availableLocales: { [name: string]: Locale }) {
for (var property in allLocales) {
if (allLocales.hasOwnProperty(property)) {
availableLocales[property] = new (allLocales as any)[property]() as Locale;
}
}
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/enLocaleLoader.ts 0000664 0000000 0000000 00000000311 14775314346 0022767 0 ustar 00root root 0000000 0000000 import { Locale } from "./locale";
import { en } from "./locales/en";
export class enLocaleLoader {
load(availableLocales: { [name: string]: Locale }) {
availableLocales["en"] = new en();
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locale.ts 0000664 0000000 0000000 00000006134 14775314346 0021366 0 ustar 00root root 0000000 0000000 export interface Locale {
// TODO: Circle back and use null/undefined aware types for optionals below in TypeScript 2.0: https://github.com/Microsoft/TypeScript/pull/7140
// TODO: These locale translations would be a good use for ES6 template strings except we sometimes concatenate multiple transactions together before
// doing the actual template replacement.
/**
* When `verbose` option is set to `false`, use this array to do any replacements to make the description more concise
* For example:
* return {
"only in January": "in January",
"every weekend day": "weekends",
};
*/
conciseVerbosityReplacements?(): Record;
setPeriodBeforeTime?(): boolean;
pm?(): string;
am?(): string;
use24HourTimeFormatByDefault(): boolean;
anErrorOccuredWhenGeneratingTheExpressionD(): string;
everyMinute(): string;
everyHour(): string;
atSpace(): string;
everyMinuteBetweenX0AndX1(): string;
at(): string;
spaceAnd(): string;
everySecond(): string;
everyX0Seconds(s?: string): string;
secondsX0ThroughX1PastTheMinute(): string;
atX0SecondsPastTheMinute(s?: string): string;
atX0SecondsPastTheMinuteGt20(): string | null; // optional
everyX0Minutes(s?: string): string;
minutesX0ThroughX1PastTheHour(): string;
atX0MinutesPastTheHour(s?: string): string;
atX0MinutesPastTheHourGt20(): string | null; // optional
everyX0Hours(s?: string): string;
betweenX0AndX1(): string;
atX0(): string;
commaEveryDay(): string;
commaEveryX0DaysOfTheWeek(s?: string): string;
commaX0ThroughX1(s?: string): string;
commaAndX0ThroughX1(s?: string): string;
commaMonthX0ThroughMonthX1(): string | null; // optional
commaYearX0ThroughYearX1(): string | null; // optional
first(s?: string): string;
second(s?: string): string;
third(s?: string): string;
fourth(s?: string): string;
fifth(s?: string): string;
commaOnThe(s?: string, day?: string): string;
spaceX0OfTheMonth(): string;
lastDay(): string;
commaOnTheLastX0OfTheMonth(s?: string): string;
commaOnlyOnX0(s?: string): string;
commaAndOnX0(): string;
commaEveryX0Months(s?: string): string;
commaOnlyInX0(): string;
commaOnlyInMonthX0?(): string;
commaOnlyInYearX0?(): string;
commaOnTheLastDayOfTheMonth(): string;
commaOnTheLastWeekdayOfTheMonth(): string;
commaDaysBeforeTheLastDayOfTheMonth(s?: string): string;
firstWeekday(): string;
weekdayNearestDayX0(): string;
commaOnTheX0OfTheMonth(): string;
commaEveryX0Days(s?: string): string;
commaBetweenDayX0AndX1OfTheMonth(s?: string): string;
commaOnDayX0OfTheMonth(s?: string): string;
commaEveryX0Years(s?: string): string;
commaStartingX0(): string;
dayX0?(): string;
daysOfTheWeek(): string[];
/** If multiple forms are needed in "%s through %s"
* @param f 1 for "from", 2 for "through"
* @return {string[]} days of week
*/
daysOfTheWeekInCase?(f?: number): string[];
monthsOfTheYear(): string[];
/** If multiple forms are needed in "%s through %s"
* @param f 1 for "from", 2 for "through"
* @return {string[]} months of year
*/
monthsOfTheYearInCase?(f?: number): string[];
}
bradymholt-cRonstrue-71e0a25/src/i18n/localeLoader.ts 0000664 0000000 0000000 00000000202 14775314346 0022503 0 ustar 00root root 0000000 0000000 import { Locale } from "./locale";
export interface LocaleLoader {
load(availableLocales: { [name: string]: Locale }): void;
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ 0000775 0000000 0000000 00000000000 14775314346 0021175 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/src/i18n/locales/af.ts 0000664 0000000 0000000 00000007014 14775314346 0022135 0 ustar 00root root 0000000 0000000 // Afrikaans
import { Locale } from "../locale";
export class af implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return ", jaar %s na %s";
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Daar was 'n fout om die tydsuitdrukking the genereer. Raadpleeg asb die uitdrukking formaat.";
}
everyMinute() {
return "elke minuut";
}
everyHour() {
return "elke uur";
}
atSpace() {
return "Teen ";
}
everyMinuteBetweenX0AndX1() {
return "Elke minuut tussen %s en %s";
}
at() {
return "Teen";
}
spaceAnd() {
return " en";
}
everySecond() {
return "elke sekonde";
}
everyX0Seconds() {
return "elke %s sekonde";
}
secondsX0ThroughX1PastTheMinute() {
return "sekonde %s deur na %s na die minuut";
}
atX0SecondsPastTheMinute() {
return "teen %s sekondes na die minuut";
}
everyX0Minutes() {
return "elke %s minute";
}
minutesX0ThroughX1PastTheHour() {
return "minute %s deur na %s na die uur";
}
atX0MinutesPastTheHour() {
return "teen %s minute na die uur";
}
everyX0Hours() {
return "elke %s ure";
}
betweenX0AndX1() {
return "tussen %s en %s";
}
atX0() {
return "teen %s";
}
commaEveryDay() {
return ", elke dag";
}
commaEveryX0DaysOfTheWeek() {
return ", elke %s dae van die week";
}
commaX0ThroughX1() {
return ", %s deur na %s";
}
commaAndX0ThroughX1() {
return ", en %s deur na %s";
}
first() {
return "eerste";
}
second() {
return "tweede";
}
third() {
return "derde";
}
fourth() {
return "vierde";
}
fifth() {
return "vyfde";
}
commaOnThe() {
return ", op die ";
}
spaceX0OfTheMonth() {
return " %s van die maand";
}
lastDay() {
return "die laaste dag";
}
commaOnTheLastX0OfTheMonth() {
return ", op die laaste %s van die maand";
}
commaOnlyOnX0() {
return ", net op %s";
}
commaAndOnX0() {
return ", en op %s";
}
commaEveryX0Months() {
return ", elke %s maande";
}
commaOnlyInX0() {
return ", net in %s";
}
commaOnTheLastDayOfTheMonth() {
return ", op die laaste dag van die maand";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", op die laaste weeksdag van die maand";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dae voor die laaste dag van die maand";
}
firstWeekday() {
return "eerste weeksdag";
}
weekdayNearestDayX0() {
return "weeksdag naaste aan dag %s";
}
commaOnTheX0OfTheMonth() {
return ", op die %s van die maande";
}
commaEveryX0Days() {
return ", elke %s dae";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", tussen dag %s en %s van die maand";
}
commaOnDayX0OfTheMonth() {
return ", op dag %s van die maand";
}
commaEveryHour() {
return ", elke uur";
}
commaEveryX0Years() {
return ", elke %s jare";
}
commaStartingX0() {
return ", beginnende %s";
}
daysOfTheWeek() {
return ["Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"];
}
monthsOfTheYear() {
return [
"Januarie",
"Februarie",
"Maart",
"April",
"Mei",
"Junie",
"Julie",
"Augustus",
"September",
"Oktober",
"November",
"Desember",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ar.ts 0000664 0000000 0000000 00000010521 14775314346 0022146 0 ustar 00root root 0000000 0000000 // Arabic
import { Locale } from "../locale";
export class ar implements Locale {
atX0SecondsPastTheMinuteGt20(): string | null {
return null;
}
atX0MinutesPastTheHourGt20(): string | null {
return null;
}
commaMonthX0ThroughMonthX1(): string | null {
return null;
}
commaYearX0ThroughYearX1(): string | null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "حدث خطأ في إنشاء وصف المصطلح٠ تأكد من تركيب مصطلح الكرون"
}
everyMinute() {
return "كل دقيقة";
}
everyHour() {
return "كل ساعة";
}
atSpace() {
return " ";
}
everyMinuteBetweenX0AndX1() {
return "كل دقيقة بين %s و %s";
}
at() {
return "";
}
spaceAnd() {
return " و";
}
everySecond() {
return "كل ثانية";
}
everyX0Seconds() {
return "كل %s ثواني";
}
secondsX0ThroughX1PastTheMinute() {
return "الثواني %s حتى %s من بداية الدقيقة";
}
atX0SecondsPastTheMinute() {
return "الثانية %s من بداية الدقيقة";
}
everyX0Minutes() {
return "كل %s دقائق";
}
minutesX0ThroughX1PastTheHour() {
return "الدقائق %s حتى %s من بداية الساعة"
}
atX0MinutesPastTheHour() {
return "الدقيقة %s من بداية الساعة"
}
everyX0Hours() {
return "كل %s ساعات"
}
betweenX0AndX1() {
return "بين %s و %s";
}
atX0() {
return "%s";
}
commaEveryDay() {
return "، كل يوم";
}
commaEveryX0DaysOfTheWeek() {
return "، كل %s من أيام الأسبوع";
}
commaX0ThroughX1() {
return "، %s حتى %s";
}
commaAndX0ThroughX1() {
return "، و %s حتى %s";
}
first() {
return "أول";
}
second() {
return "ثاني";
}
third() {
return "ثالث";
}
fourth() {
return "رابع";
}
fifth() {
return "خامس";
}
commaOnThe() {
return "، في ال";
}
spaceX0OfTheMonth() {
return " %s من الشهر";
}
lastDay() {
return "اليوم الأخير";
}
commaOnTheLastX0OfTheMonth() {
return "، في اخر %s من الشهر";
}
commaOnlyOnX0() {
return "، %s فقط";
}
commaAndOnX0() {
return "، وفي %s";
}
commaEveryX0Months() {
return "، كل %s أشهر";
}
commaOnlyInX0() {
return "، %s فقط";
}
commaOnTheLastDayOfTheMonth() {
return "، في اخر يوم من الشهر";
}
commaOnTheLastWeekdayOfTheMonth() {
return "، في اخر يوم أسبوع من الشهر";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return "، %s أيام قبل اخر يوم من الشهر";
}
firstWeekday() {
return "اول ايام الأسبوع";
}
weekdayNearestDayX0() {
return "يوم الأسبوع الأقرب ليوم %s";
}
commaOnTheX0OfTheMonth() {
return "، في %s من الشهر";
}
commaEveryX0Days() {
return "، كل %s أيام";
}
commaBetweenDayX0AndX1OfTheMonth() {
return "، بين يوم %s و %s من الشهر";
}
commaOnDayX0OfTheMonth() {
return "، في اليوم %s من الشهر";
}
commaEveryHour() {
return "، كل ساعة";
}
commaEveryX0Years() {
return "، كل %s سنوات";
}
commaStartingX0() {
return "، بداية من %s";
}
daysOfTheWeek() {
return ["الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"];
}
monthsOfTheYear() {
return [
"يناير",
"فبراير",
"مارس",
"ابريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/be.ts 0000664 0000000 0000000 00000007627 14775314346 0022147 0 ustar 00root root 0000000 0000000 // Belarus
import { Locale } from "../locale";
export class be implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return false;
}
everyMinute() {
return "кожную хвіліну";
}
everyHour() {
return "кожную гадзіну";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Адбылася памылка падчас генерацыі апісання выразы. Праверце сінтаксіс крон-выразы.";
}
atSpace() {
return "У ";
}
everyMinuteBetweenX0AndX1() {
return "Кожную хвіліну з %s да %s";
}
at() {
return "У";
}
spaceAnd() {
return " і";
}
everySecond() {
return "кожную секунду";
}
everyX0Seconds() {
return "кожныя %s секунд";
}
secondsX0ThroughX1PastTheMinute() {
return "секунды з %s па %s";
}
atX0SecondsPastTheMinute() {
return "у %s секунд";
}
everyX0Minutes() {
return "кожныя %s хвілін";
}
minutesX0ThroughX1PastTheHour() {
return "хвіліны з %s па %s";
}
atX0MinutesPastTheHour() {
return "у %s хвілін";
}
everyX0Hours() {
return "кожныя %s гадзін";
}
betweenX0AndX1() {
return "з %s па %s";
}
atX0() {
return "у %s";
}
commaEveryDay() {
return ", кожны дзень";
}
commaEveryX0DaysOfTheWeek() {
return ", кожныя %s дзён тыдня";
}
commaX0ThroughX1() {
return ", %s па %s";
}
commaAndX0ThroughX1() {
return ", і %s па %s";
}
first() {
return "першы";
}
second() {
return "другі";
}
third() {
return "трэці";
}
fourth() {
return "чацвёрты";
}
fifth() {
return "пяты";
}
commaOnThe() {
return ", у ";
}
spaceX0OfTheMonth() {
return " %s месяца";
}
lastDay() {
return "апошні дзень";
}
commaOnTheLastX0OfTheMonth() {
return ", у апошні %s месяца";
}
commaOnlyOnX0() {
return ", толькі ў %s";
}
commaAndOnX0() {
return ", і ў %s";
}
commaEveryX0Months() {
return ", кожныя %s месяцаў";
}
commaOnlyInX0() {
return ", толькі ў %s";
}
commaOnTheLastDayOfTheMonth() {
return ", у апошні дзень месяца";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", у апошні будні дзень месяца";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s дзён да апошняга дня месяца";
}
firstWeekday() {
return "першы будны дзень";
}
weekdayNearestDayX0() {
return "найбліжэйшы будны дзень да %s";
}
commaOnTheX0OfTheMonth() {
return ", у %s месяцы";
}
commaEveryX0Days() {
return ", кожныя %s дзён";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", з %s па %s лік месяца";
}
commaOnDayX0OfTheMonth() {
return ", у %s лік месяца";
}
commaEveryX0Years() {
return ", кожныя %s гадоў";
}
commaStartingX0() {
return ", пачатак %s";
}
daysOfTheWeek() {
return ["нядзеля", "панядзелак", "аўторак", "серада", "чацвер", "пятніца", "субота"];
}
monthsOfTheYear() {
return [
"студзень",
"люты",
"сакавік",
"красавік",
"травень",
"чэрвень",
"ліпень",
"жнівень",
"верасень",
"кастрычнік",
"лістапад",
"снежань",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/bg.ts 0000664 0000000 0000000 00000015133 14775314346 0022140 0 ustar 00root root 0000000 0000000 // Bulgarian
import type { Locale } from '../locale';
const getPhraseByPlural = (str: string | undefined, words: string[]): string => {
const strAsNumber = str != null ? Number(str) : 0;
return strAsNumber < 2 ? words[0]! : words[1]!;
};
const getPhraseByDayOfWeek = (str: string | undefined, words: string[]): string => {
const strAsNumber = str != null ? Number(str) : 0;
// weekdays: 0:неделя 1:понеделник 2:вторник 3:сряда 4:четвъртък 5:петък 6:събота
// gender: ж м м ж м м ж
return words[[1, 0, 0, 1, 0, 0, 1][strAsNumber]!]!;
};
const getNumberEnding = (str: string | undefined, gender: 'м' | 'ж' | 'ср'): string => {
let strAsNumber = str != null ? Number(str) : 1;
strAsNumber = Math.max(Math.min(strAsNumber < 10 || (strAsNumber > 20 && strAsNumber % 10 !== 0) ? strAsNumber % 10 : 3, 3), 1) - 1;
const genderIndex = ['м', 'ж', 'ср'].indexOf(gender);
return ['в', 'р', 'т'][strAsNumber]! + ['и', 'а', 'о'][genderIndex];
};
export class bg implements Locale {
public atX0SecondsPastTheMinuteGt20(): string | null {
return null;
}
public atX0MinutesPastTheHourGt20(): string | null {
return null;
}
public commaMonthX0ThroughMonthX1(): string | null {
return null;
}
public commaYearX0ThroughYearX1(): string | null {
return null;
}
public use24HourTimeFormatByDefault(): boolean {
return true;
}
public everyMinute(): string {
return 'всяка минута';
}
public everyHour(): string {
return 'всеки час';
}
public anErrorOccuredWhenGeneratingTheExpressionD(): string {
return 'Възникна грешка при генериране на описанието на израза. Проверете синтаксиса на cron израза.';
}
public atSpace(): string {
return 'В ';
}
public everyMinuteBetweenX0AndX1(): string {
return 'Всяка минута от %s до %s';
}
public at(): string {
return 'В';
}
public spaceAnd(): string {
return ' и';
}
public everySecond(): string {
return 'всяка секунда';
}
public everyX0Seconds(s?: string): string {
return 'всеки %s секунди';
}
public secondsX0ThroughX1PastTheMinute(): string {
return 'секунди от %s до %s';
}
public atX0SecondsPastTheMinute(s?: string): string {
return `%s-${getNumberEnding(s, 'ж')} секунда`;
}
public everyX0Minutes(s?: string): string {
return 'всеки %s минути';
}
public minutesX0ThroughX1PastTheHour(): string {
return 'минути от %s до %s';
}
public atX0MinutesPastTheHour(s?: string): string {
return `%s-${getNumberEnding(s, 'ж')} минутa`;
}
public everyX0Hours(s?: string): string {
return 'всеки %s часа';
}
public betweenX0AndX1(): string {
return 'от %s до %s';
}
public atX0(): string {
return 'в %s';
}
public commaEveryDay(): string {
return ', всеки ден';
}
public commaEveryX0DaysOfTheWeek(s?: string): string {
return getPhraseByPlural(s, [', всеки %s ден от седмицата', ', всеки %s дена от седмицата']);
}
public commaX0ThroughX1(s?: string): string {
return ', от %s до %s';
}
public commaAndX0ThroughX1(s?: string): string {
return ' и от %s до %s';
}
public first(s?: string): string {
return getPhraseByDayOfWeek(s, ['первият', 'первата']);
}
public second(s?: string): string {
return getPhraseByDayOfWeek(s, ['вторият', 'втората']);
}
public third(s?: string): string {
return getPhraseByDayOfWeek(s, ['третият', 'третата']);
}
public fourth(s?: string): string {
return getPhraseByDayOfWeek(s, ['четвертият', 'четвертата']);
}
public fifth(s?: string): string {
return getPhraseByDayOfWeek(s, ['петият', 'петата']);
}
public commaOnThe(s?: string): string {
return ', ';
}
public spaceX0OfTheMonth(): string {
return ' %s на месеца';
}
public lastDay(): string {
return 'последният ден';
}
public commaOnTheLastX0OfTheMonth(s?: string): string {
return getPhraseByDayOfWeek(s, [', в последният %s от месеца', ', в последната %s отмесеца']);
}
public commaOnlyOnX0(s?: string): string {
return ', %s';
}
public commaAndOnX0(): string {
return ' и %s';
}
public commaEveryX0Months(s?: string): string {
return ' всеки %s месеца';
}
public commaOnlyInMonthX0(): string {
return ', %s';
}
public commaOnlyInX0(): string {
return ', в %s';
}
public commaOnTheLastDayOfTheMonth(): string {
return ', в последният ден на месеца';
}
public commaOnTheLastWeekdayOfTheMonth(): string {
return ', в последния делничен ден от месеца';
}
public commaDaysBeforeTheLastDayOfTheMonth(s?: string): string {
return getPhraseByPlural(s, [', %s ден преди края на месеца', ', %s дена преди края на месеца']);
}
public firstWeekday(): string {
return 'първият делничен ден';
}
public weekdayNearestDayX0(): string {
return 'най-близкият делничен ден до %s число';
}
public commaOnTheX0OfTheMonth(): string {
return ', на %s число от месеца';
}
public commaEveryX0Days(s?: string): string {
return getPhraseByPlural(s, [', всеки %s ден', ', всеки %s дена']);
}
public commaBetweenDayX0AndX1OfTheMonth(s?: string): string {
const values = s?.split('-') ?? [];
return `, от %s-${getNumberEnding(values[0], 'ср')} до %s-${getNumberEnding(values[1], 'ср')} число на месеца`;
}
public commaOnDayX0OfTheMonth(s?: string): string {
return `, на %s-${getNumberEnding(s, 'ср')} число от месеца`;
}
public commaEveryX0Years(s?: string): string {
return getPhraseByPlural(s, [', всяка %s година', ', всеки %s години']);
}
public commaStartingX0(): string {
return ', започвайки %s';
}
public daysOfTheWeek(): string[] {
return ['неделя', 'понеделник', 'вторник', 'сряда', 'четвъртък', 'петък', 'събота'];
}
public monthsOfTheYear(): string[] {
return ['януари', 'февруари', 'март', 'април', 'май', 'юни', 'юли', 'август', 'септевмври', 'октомври', 'ноември', 'декември'];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ca.ts 0000664 0000000 0000000 00000006713 14775314346 0022137 0 ustar 00root root 0000000 0000000 // Catalan
import { Locale } from "../locale";
export class ca implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "S'ha produït un error mentres es generava la descripció de l'expressió. Revisi la sintaxi de la expressió de cron.";
}
at() {
return "A les";
}
atSpace() {
return "A les ";
}
atX0() {
return "a les %s";
}
atX0MinutesPastTheHour() {
return "als %s minuts de l'hora";
}
atX0SecondsPastTheMinute() {
return "als %s segonds del minut";
}
betweenX0AndX1() {
return "entre les %s i les %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", entre els dies %s i %s del mes";
}
commaEveryDay() {
return ", cada dia";
}
commaEveryX0Days() {
return ", cada %s dies";
}
commaEveryX0DaysOfTheWeek() {
return ", cada %s dies de la setmana";
}
commaEveryX0Months() {
return ", cada %s mesos";
}
commaOnDayX0OfTheMonth() {
return ", el dia %s del mes";
}
commaOnlyInX0() {
return ", sólo en %s";
}
commaOnlyOnX0() {
return ", només el %s";
}
commaAndOnX0() {
return ", i el %s";
}
commaOnThe() {
return ", en el ";
}
commaOnTheLastDayOfTheMonth() {
return ", en l'últim dia del mes";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", en l'últim dia de la setmana del mes";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dies abans de l'últim dia del mes";
}
commaOnTheLastX0OfTheMonth() {
return ", en l'últim %s del mes";
}
commaOnTheX0OfTheMonth() {
return ", en el %s del mes";
}
commaX0ThroughX1() {
return ", de %s a %s";
}
commaAndX0ThroughX1() {
return ", i de %s a %s";
}
everyHour() {
return "cada hora";
}
everyMinute() {
return "cada minut";
}
everyMinuteBetweenX0AndX1() {
return "cada minut entre les %s i les %s";
}
everySecond() {
return "cada segon";
}
everyX0Hours() {
return "cada %s hores";
}
everyX0Minutes() {
return "cada %s minuts";
}
everyX0Seconds() {
return "cada %s segons";
}
fifth() {
return "cinquè";
}
first() {
return "primer";
}
firstWeekday() {
return "primer dia de la setmana";
}
fourth() {
return "quart";
}
minutesX0ThroughX1PastTheHour() {
return "del minut %s al %s passada l'hora";
}
second() {
return "segon";
}
secondsX0ThroughX1PastTheMinute() {
return "En els segons %s al %s de cada minut";
}
spaceAnd() {
return " i";
}
spaceX0OfTheMonth() {
return " %s del mes";
}
lastDay() {
return "l'últim dia";
}
third() {
return "tercer";
}
weekdayNearestDayX0() {
return "dia de la setmana més proper al %s";
}
commaEveryX0Years() {
return ", cada %s anys";
}
commaStartingX0() {
return ", començant %s";
}
daysOfTheWeek() {
return ["diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"];
}
monthsOfTheYear() {
return [
"gener",
"febrer",
"març",
"abril",
"maig",
"juny",
"juliol",
"agost",
"setembre",
"octubre",
"novembre",
"desembre",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/cs.ts 0000664 0000000 0000000 00000006614 14775314346 0022161 0 ustar 00root root 0000000 0000000 // Czech
import { Locale } from "../locale";
export class cs implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Při vytváření popisu došlo k chybě. Zkontrolujte prosím správnost syntaxe cronu.";
}
everyMinute() {
return "každou minutu";
}
everyHour() {
return "každou hodinu";
}
atSpace() {
return "V ";
}
everyMinuteBetweenX0AndX1() {
return "Každou minutu mezi %s a %s";
}
at() {
return "V";
}
spaceAnd() {
return " a";
}
everySecond() {
return "každou sekundu";
}
everyX0Seconds() {
return "každých %s sekund";
}
secondsX0ThroughX1PastTheMinute() {
return "sekundy od %s do %s";
}
atX0SecondsPastTheMinute() {
return "v %s sekund";
}
everyX0Minutes() {
return "každých %s minut";
}
minutesX0ThroughX1PastTheHour() {
return "minuty od %s do %s";
}
atX0MinutesPastTheHour() {
return "v %s minut";
}
everyX0Hours() {
return "každých %s hodin";
}
betweenX0AndX1() {
return "mezi %s a %s";
}
atX0() {
return "v %s";
}
commaEveryDay() {
return ", každý den";
}
commaEveryX0DaysOfTheWeek() {
return ", každých %s dní v týdnu";
}
commaX0ThroughX1() {
return ", od %s do %s";
}
commaAndX0ThroughX1() {
return ", a od %s do %s";
}
first() {
return "první";
}
second() {
return "druhý";
}
third() {
return "třetí";
}
fourth() {
return "čtvrtý";
}
fifth() {
return "pátý";
}
commaOnThe() {
return ", ";
}
spaceX0OfTheMonth() {
return " %s v měsíci";
}
lastDay() {
return "poslední den";
}
commaOnTheLastX0OfTheMonth() {
return ", poslední %s v měsíci";
}
commaOnlyOnX0() {
return ", pouze v %s";
}
commaAndOnX0() {
return ", a v %s";
}
commaEveryX0Months() {
return ", každých %s měsíců";
}
commaOnlyInX0() {
return ", pouze v %s";
}
commaOnTheLastDayOfTheMonth() {
return ", poslední den v měsíci";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", poslední pracovní den v měsíci";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dní před posledním dnem v měsíci";
}
firstWeekday() {
return "první pracovní den";
}
weekdayNearestDayX0() {
return "pracovní den nejblíže %s. dni";
}
commaOnTheX0OfTheMonth() {
return ", v %s v měsíci";
}
commaEveryX0Days() {
return ", každých %s dnů";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", mezi dny %s a %s v měsíci";
}
commaOnDayX0OfTheMonth() {
return ", %s. den v měsíci";
}
commaEveryX0Years() {
return ", každých %s roků";
}
commaStartingX0() {
return ", začínající %s";
}
daysOfTheWeek() {
return ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"];
}
monthsOfTheYear() {
return [
"Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/da.ts 0000664 0000000 0000000 00000006675 14775314346 0022147 0 ustar 00root root 0000000 0000000 // Danish
import { Locale } from "../locale";
export class da implements Locale {
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Der opstod en fejl ved generering af udtryksbeskrivelsen. Tjek cron-ekspressionssyntaxen.";
}
at() {
return "kl";
}
atSpace() {
return "kl ";
}
atX0() {
return "kl %s";
}
atX0MinutesPastTheHour() {
return "%s minutter efter timeskift";
}
atX0SecondsPastTheMinute() {
return "%s sekunder efter minutskift";
}
betweenX0AndX1() {
return "mellem %s og %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", mellem dag %s og %s i måneden";
}
commaEveryDay() {
return ", hver dag";
}
commaEveryX0Days() {
return ", hver %s. dag";
}
commaEveryX0DaysOfTheWeek() {
return ", hver %s. ugedag";
}
commaEveryX0Months() {
return ", hver %s. måned";
}
commaEveryX0Years() {
return ", hvert %s. år";
}
commaOnDayX0OfTheMonth() {
return ", på dag %s i måneden";
}
commaOnlyInX0() {
return ", kun i %s";
}
commaOnlyOnX0(s?: string) {
return ", på enhver %s";
}
commaAndOnX0() {
return ", og på %s";
}
commaOnThe() {
return ", på den ";
}
commaOnTheLastDayOfTheMonth() {
return ", på den sidste dag i måneden";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", på den sidste hverdag i måneden";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dage før den sidste dag i måneden";
}
commaOnTheLastX0OfTheMonth() {
return ", på den sidste %s i måneden";
}
commaOnTheX0OfTheMonth() {
return ", på den %s i måneden";
}
commaX0ThroughX1() {
return ", %s til og med %s";
}
commaAndX0ThroughX1() {
return ", og %s til og med %s";
}
everyHour() {
return "hver time";
}
everyMinute() {
return "hvert minut";
}
everyMinuteBetweenX0AndX1() {
return "hvert minut mellem %s og %s";
}
everySecond() {
return "hvert sekund";
}
everyX0Hours() {
return "hver %s. time";
}
everyX0Minutes() {
return "hvert %s. minut";
}
everyX0Seconds() {
return "hvert %s. sekund";
}
fifth() {
return "femte";
}
first() {
return "første";
}
firstWeekday() {
return "første hverdag";
}
fourth() {
return "fjerde";
}
minutesX0ThroughX1PastTheHour() {
return "minutterne fra %s til og med %s hver time";
}
second() {
return "anden";
}
secondsX0ThroughX1PastTheMinute() {
return "sekunderne fra %s til og med %s hvert minut";
}
spaceAnd() {
return " og";
}
spaceX0OfTheMonth() {
return " %s i måneden";
}
lastDay() {
return "sidste dag";
}
third() {
return "tredje";
}
weekdayNearestDayX0() {
return "hverdag nærmest dag %s";
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
commaStartingX0() {
return ", startende %s";
}
daysOfTheWeek() {
return ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"];
}
monthsOfTheYear() {
return [
"januar",
"februar",
"marts",
"april",
"maj",
"juni",
"juli",
"august",
"september",
"oktober",
"november",
"december",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/de.ts 0000664 0000000 0000000 00000006616 14775314346 0022146 0 ustar 00root root 0000000 0000000 // German
import { Locale } from "../locale";
export class de implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
everyMinute() {
return "jede Minute";
}
everyHour() {
return "jede Stunde";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Beim Generieren der Ausdrucksbeschreibung ist ein Fehler aufgetreten. Überprüfen Sie die Syntax des Cron-Ausdrucks.";
}
atSpace() {
return "Um ";
}
everyMinuteBetweenX0AndX1() {
return "Jede Minute zwischen %s und %s";
}
at() {
return "Um";
}
spaceAnd() {
return " und";
}
everySecond() {
return "Jede Sekunde";
}
everyX0Seconds() {
return "alle %s Sekunden";
}
secondsX0ThroughX1PastTheMinute() {
return "Sekunden %s bis %s";
}
atX0SecondsPastTheMinute() {
return "bei Sekunde %s";
}
everyX0Minutes() {
return "alle %s Minuten";
}
minutesX0ThroughX1PastTheHour() {
return "Minuten %s bis %s";
}
atX0MinutesPastTheHour() {
return "bei Minute %s";
}
everyX0Hours() {
return "alle %s Stunden";
}
betweenX0AndX1() {
return "zwischen %s und %s";
}
atX0() {
return "um %s";
}
commaEveryDay() {
return ", jeden Tag";
}
commaEveryX0DaysOfTheWeek() {
return ", alle %s Tage der Woche";
}
commaX0ThroughX1() {
return ", %s bis %s";
}
commaAndX0ThroughX1() {
return ", und %s bis %s";
}
first() {
return "ersten";
}
second() {
return "zweiten";
}
third() {
return "dritten";
}
fourth() {
return "vierten";
}
fifth() {
return "fünften";
}
commaOnThe() {
return ", am ";
}
spaceX0OfTheMonth() {
return " %s des Monats";
}
lastDay() {
return "der letzte Tag";
}
commaOnTheLastX0OfTheMonth() {
return ", am letzten %s des Monats";
}
commaOnlyOnX0() {
return ", nur jeden %s";
}
commaAndOnX0() {
return ", und jeden %s";
}
commaEveryX0Months() {
return ", alle %s Monate";
}
commaOnlyInX0() {
return ", nur im %s";
}
commaOnTheLastDayOfTheMonth() {
return ", am letzten Tag des Monats";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", am letzten Werktag des Monats";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s tage vor dem letzten Tag des Monats";
}
firstWeekday() {
return "ersten Werktag";
}
weekdayNearestDayX0() {
return "Werktag am nächsten zum %s Tag";
}
commaOnTheX0OfTheMonth() {
return ", am %s des Monats";
}
commaEveryX0Days() {
return ", alle %s Tage";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", zwischen Tag %s und %s des Monats";
}
commaOnDayX0OfTheMonth() {
return ", an Tag %s des Monats";
}
commaEveryX0Years() {
return ", alle %s Jahre";
}
commaStartingX0() {
return ", beginnend %s";
}
daysOfTheWeek() {
return ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
}
monthsOfTheYear() {
return [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/en.ts 0000664 0000000 0000000 00000006773 14775314346 0022164 0 ustar 00root root 0000000 0000000 // English
import { Locale } from "../locale";
export class en implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return false;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "An error occurred when generating the expression description. Check the cron expression syntax.";
}
everyMinute() {
return "every minute";
}
everyHour() {
return "every hour";
}
atSpace() {
return "At ";
}
everyMinuteBetweenX0AndX1() {
return "Every minute between %s and %s";
}
at() {
return "At";
}
spaceAnd() {
return " and";
}
everySecond() {
return "every second";
}
everyX0Seconds() {
return "every %s seconds";
}
secondsX0ThroughX1PastTheMinute() {
return "seconds %s through %s past the minute";
}
atX0SecondsPastTheMinute() {
return "at %s seconds past the minute";
}
everyX0Minutes() {
return "every %s minutes";
}
minutesX0ThroughX1PastTheHour() {
return "minutes %s through %s past the hour";
}
atX0MinutesPastTheHour() {
return "at %s minutes past the hour";
}
everyX0Hours() {
return "every %s hours";
}
betweenX0AndX1() {
return "between %s and %s";
}
atX0() {
return "at %s";
}
commaEveryDay() {
return ", every day";
}
commaEveryX0DaysOfTheWeek() {
return ", every %s days of the week";
}
commaX0ThroughX1() {
return ", %s through %s";
}
commaAndX0ThroughX1() {
return ", %s through %s";
}
first() {
return "first";
}
second() {
return "second";
}
third() {
return "third";
}
fourth() {
return "fourth";
}
fifth() {
return "fifth";
}
commaOnThe() {
return ", on the ";
}
spaceX0OfTheMonth() {
return " %s of the month";
}
lastDay() {
return "the last day";
}
commaOnTheLastX0OfTheMonth() {
return ", on the last %s of the month";
}
commaOnlyOnX0() {
return ", only on %s";
}
commaAndOnX0() {
return ", and on %s";
}
commaEveryX0Months() {
return ", every %s months";
}
commaOnlyInX0() {
return ", only in %s";
}
commaOnTheLastDayOfTheMonth() {
return ", on the last day of the month";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", on the last weekday of the month";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s days before the last day of the month";
}
firstWeekday() {
return "first weekday";
}
weekdayNearestDayX0() {
return "weekday nearest day %s";
}
commaOnTheX0OfTheMonth() {
return ", on the %s of the month";
}
commaEveryX0Days() {
return ", every %s days";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", between day %s and %s of the month";
}
commaOnDayX0OfTheMonth() {
return ", on day %s of the month";
}
commaEveryHour() {
return ", every hour";
}
commaEveryX0Years() {
return ", every %s years";
}
commaStartingX0() {
return ", starting %s";
}
daysOfTheWeek() {
return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
}
monthsOfTheYear() {
return [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/es.ts 0000664 0000000 0000000 00000006763 14775314346 0022170 0 ustar 00root root 0000000 0000000 // Spanish
import { Locale } from "../locale";
export class es implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Ocurrió un error mientras se generaba la descripción de la expresión. Revise la sintaxis de la expresión de cron.";
}
at() {
return "A las";
}
atSpace() {
return "A las ";
}
atX0() {
return "a las %s";
}
atX0MinutesPastTheHour() {
return "a los %s minutos de la hora";
}
atX0SecondsPastTheMinute() {
return "a los %s segundos del minuto";
}
betweenX0AndX1() {
return "entre las %s y las %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", entre los días %s y %s del mes";
}
commaEveryDay() {
return ", cada día";
}
commaEveryX0Days() {
return ", cada %s días";
}
commaEveryX0DaysOfTheWeek() {
return ", cada %s días de la semana";
}
commaEveryX0Months() {
return ", cada %s meses";
}
commaOnDayX0OfTheMonth() {
return ", el día %s del mes";
}
commaOnlyInX0() {
return ", sólo en %s";
}
commaOnlyOnX0() {
return ", sólo el %s";
}
commaAndOnX0() {
return ", y el %s";
}
commaOnThe() {
return ", en el ";
}
commaOnTheLastDayOfTheMonth() {
return ", en el último día del mes";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", en el último día de la semana del mes";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s días antes del último día del mes";
}
commaOnTheLastX0OfTheMonth() {
return ", en el último %s del mes";
}
commaOnTheX0OfTheMonth() {
return ", en el %s del mes";
}
commaX0ThroughX1() {
return ", de %s a %s";
}
commaAndX0ThroughX1() {
return ", y de %s a %s";
}
everyHour() {
return "cada hora";
}
everyMinute() {
return "cada minuto";
}
everyMinuteBetweenX0AndX1() {
return "cada minuto entre las %s y las %s";
}
everySecond() {
return "cada segundo";
}
everyX0Hours() {
return "cada %s horas";
}
everyX0Minutes() {
return "cada %s minutos";
}
everyX0Seconds() {
return "cada %s segundos";
}
fifth() {
return "quinto";
}
first() {
return "primero";
}
firstWeekday() {
return "primer día de la semana";
}
fourth() {
return "cuarto";
}
minutesX0ThroughX1PastTheHour() {
return "del minuto %s al %s pasada la hora";
}
second() {
return "segundo";
}
secondsX0ThroughX1PastTheMinute() {
return "En los segundos %s al %s de cada minuto";
}
spaceAnd() {
return " y";
}
spaceX0OfTheMonth() {
return " %s del mes";
}
lastDay() {
return "el último día";
}
third() {
return "tercer";
}
weekdayNearestDayX0() {
return "día de la semana más próximo al %s";
}
commaEveryX0Years() {
return ", cada %s años";
}
commaStartingX0() {
return ", comenzando %s";
}
daysOfTheWeek() {
return ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"];
}
monthsOfTheYear() {
return [
"enero",
"febrero",
"marzo",
"abril",
"mayo",
"junio",
"julio",
"agosto",
"septiembre",
"octubre",
"noviembre",
"diciembre",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/fa.ts 0000664 0000000 0000000 00000007222 14775314346 0022136 0 ustar 00root root 0000000 0000000 // Farsi
import { Locale } from "../locale";
export class fa implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "خطایی در نمایش توضیحات این وظیفه رخ داد. لطفا ساختار آن را بررسی کنید.";
}
everyMinute() {
return "هر دقیقه";
}
everyHour() {
return "هر ساعت";
}
atSpace() {
return "در ";
}
everyMinuteBetweenX0AndX1() {
return "هر دقیقه بین %s و %s";
}
at() {
return "در";
}
spaceAnd() {
return " و";
}
everySecond() {
return "هر ثانیه";
}
everyX0Seconds() {
return "هر %s ثانیه";
}
secondsX0ThroughX1PastTheMinute() {
return "ثانیه %s تا %s دقیقه گذشته";
}
atX0SecondsPastTheMinute() {
return "در %s قانیه از دقیقه گذشته";
}
everyX0Minutes() {
return "هر %s دقیقه";
}
minutesX0ThroughX1PastTheHour() {
return "دقیقه %s تا %s ساعت گذشته";
}
atX0MinutesPastTheHour() {
return "در %s دقیقه پس از ساعت";
}
everyX0Hours() {
return "هر %s ساعت";
}
betweenX0AndX1() {
return "بین %s و %s";
}
atX0() {
return "در %s";
}
commaEveryDay() {
return ", هر روز";
}
commaEveryX0DaysOfTheWeek() {
return ", هر %s روز از هفته";
}
commaX0ThroughX1() {
return ", %s تا %s";
}
commaAndX0ThroughX1() {
return ", و %s تا %s";
}
first() {
return "اول";
}
second() {
return "دوم";
}
third() {
return "سوم";
}
fourth() {
return "چهارم";
}
fifth() {
return "پنجم";
}
commaOnThe() {
return ", در ";
}
spaceX0OfTheMonth() {
return " %s ماه";
}
lastDay() {
return "آخرین روز";
}
commaOnTheLastX0OfTheMonth() {
return ", در %s ماه";
}
commaOnlyOnX0() {
return ", فقط در %s";
}
commaAndOnX0() {
return ", و در %s";
}
commaEveryX0Months() {
return ", هر %s ماه";
}
commaOnlyInX0() {
return ", فقط در %s";
}
commaOnTheLastDayOfTheMonth() {
return ", در آخرین روز ماه";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", در آخرین روز ماه";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s روز قبل از آخرین روز ماه";
}
firstWeekday() {
return "اولین روز";
}
weekdayNearestDayX0() {
return "روز نزدیک به روز %s";
}
commaOnTheX0OfTheMonth() {
return ", در %s ماه";
}
commaEveryX0Days() {
return ", هر %s روز";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", بین روز %s و %s ماه";
}
commaOnDayX0OfTheMonth() {
return ", در %s ماه";
}
commaEveryMinute() {
return ", هر minute";
}
commaEveryHour() {
return ", هر ساعت";
}
commaEveryX0Years() {
return ", هر %s سال";
}
commaStartingX0() {
return ", آغاز %s";
}
daysOfTheWeek() {
return ["یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"];
}
monthsOfTheYear() {
return ["ژانویه", "فوریه", "مارس", "آپریل", "مه", "ژوئن", "ژوئیه", "آگوست", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/fi.ts 0000664 0000000 0000000 00000007725 14775314346 0022156 0 ustar 00root root 0000000 0000000 import { Locale } from "../locale";
export class fi implements Locale {
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD(): string {
return "Virhe kuvauksen generoinnissa. Tarkista cron-syntaksi.";
}
at(): string {
return "Klo";
}
atSpace(): string {
return "Klo ";
}
atX0(): string {
return "klo %s";
}
atX0MinutesPastTheHour(): string {
return "%s minuuttia yli";
}
atX0MinutesPastTheHourGt20(): string|null {
return "%s minuuttia yli";
}
atX0SecondsPastTheMinute(): string {
return "%s sekunnnin jälkeen";
}
betweenX0AndX1(): string {
return "%s - %s välillä";
}
commaBetweenDayX0AndX1OfTheMonth(): string {
return ", kuukauden päivien %s ja %s välillä";
}
commaEveryDay(): string {
return ", joka päivä";
}
commaEveryHour(): string {
return ", joka tunti";
}
commaEveryMinute(): string {
return ", joka minuutti";
}
commaEveryX0Days(): string {
return ", joka %s. päivä";
}
commaEveryX0DaysOfTheWeek(): string {
return ", joka %s. viikonpäivä";
}
commaEveryX0Months(): string {
return ", joka %s. kuukausi";
}
commaEveryX0Years(): string {
return ", joka %s. vuosi";
}
commaOnDayX0OfTheMonth(): string {
return ", kuukauden %s päivä";
}
commaOnlyInX0(): string {
return ", vain %s";
}
commaOnlyOnX0(): string {
return ", vain %s";
}
commaOnThe(): string {
return ",";
}
commaOnTheLastDayOfTheMonth(): string {
return ", kuukauden viimeisenä päivänä";
}
commaOnTheLastWeekdayOfTheMonth(): string {
return ", kuukauden viimeisenä viikonpäivänä";
}
commaOnTheLastX0OfTheMonth(): string {
return ", kuukauden viimeinen %s";
}
commaOnTheX0OfTheMonth(): string {
return ", kuukauden %s";
}
commaX0ThroughX1(): string {
return ", %s - %s";
}
commaAndX0ThroughX1() {
return ", %s - %s";
}
commaDaysBeforeTheLastDayOfTheMonth(): string {
return ", %s päivää ennen kuukauden viimeistä päivää";
}
commaStartingX0(): string {
return ", alkaen %s";
}
everyHour(): string {
return "joka tunti";
}
everyMinute(): string {
return "joka minuutti";
}
everyMinuteBetweenX0AndX1(): string {
return "joka minuutti %s - %s välillä";
}
everySecond(): string {
return "joka sekunti";
}
everyX0Hours(): string {
return "joka %s. tunti";
}
everyX0Minutes(): string {
return "joka %s. minuutti";
}
everyX0Seconds(): string {
return "joka %s. sekunti";
}
fifth(): string {
return "viides";
}
first(): string {
return "ensimmäinen";
}
firstWeekday(): string {
return "ensimmäinen viikonpäivä";
}
fourth(): string {
return "neljäs";
}
minutesX0ThroughX1PastTheHour(): string {
return "joka tunti minuuttien %s - %s välillä";
}
second(): string {
return "toinen";
}
secondsX0ThroughX1PastTheMinute(): string {
return "joka minuutti sekunttien %s - %s välillä";
}
spaceAnd(): string {
return " ja";
}
spaceAndSpace(): string {
return " ja ";
}
spaceX0OfTheMonth(): string {
return " %s kuukaudessa";
}
third(): string {
return "kolmas";
}
weekdayNearestDayX0(): string {
return "viikonpäivä lähintä %s päivää";
}
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
lastDay() {
return "viimeinen päivä";
}
commaAndOnX0() {
return ", ja edelleen %s";
}
daysOfTheWeek() {
return ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"];
}
monthsOfTheYear() {
return [
"tammikuu",
"helmikuu",
"maaliskuu",
"huhtikuu",
"toukokuu",
"kesäkuu",
"heinäkuu",
"elokuu",
"syyskuu",
"lokakuu",
"marraskuu",
"joulukuu",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/fr.ts 0000664 0000000 0000000 00000007320 14775314346 0022156 0 ustar 00root root 0000000 0000000 // French
import { Locale } from "../locale";
export class fr implements Locale {
conciseVerbosityReplacements() {
return {
"de le": "du",
};
}
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Une erreur est survenue en générant la description de l'expression cron. Vérifiez sa syntaxe.";
}
everyMinute() {
return "toutes les minutes";
}
everyHour() {
return "toutes les heures";
}
atSpace() {
return "À ";
}
everyMinuteBetweenX0AndX1() {
return "Toutes les minutes entre %s et %s";
}
at() {
return "À";
}
spaceAnd() {
return " et";
}
everySecond() {
return "toutes les secondes";
}
everyX0Seconds() {
return "toutes les %s secondes";
}
secondsX0ThroughX1PastTheMinute() {
return "les secondes entre %s et %s après la minute";
}
atX0SecondsPastTheMinute() {
return "%s secondes après la minute";
}
everyX0Minutes() {
return "toutes les %s minutes";
}
minutesX0ThroughX1PastTheHour() {
return "les minutes entre %s et %s après l'heure";
}
atX0MinutesPastTheHour() {
return "%s minutes après l'heure";
}
everyX0Hours() {
return "toutes les %s heures";
}
betweenX0AndX1() {
return "de %s à %s";
}
atX0() {
return "%s";
}
commaEveryDay() {
return ", tous les jours";
}
commaEveryX0DaysOfTheWeek() {
return ", tous les %s jours de la semaine";
}
commaX0ThroughX1() {
return ", de %s à %s";
}
commaAndX0ThroughX1() {
return ", et de %s à %s";
}
first() {
return "premier";
}
second() {
return "second";
}
third() {
return "troisième";
}
fourth() {
return "quatrième";
}
fifth() {
return "cinquième";
}
commaOnThe() {
return ", le ";
}
spaceX0OfTheMonth() {
return " %s du mois";
}
lastDay() {
return "le dernier jour";
}
commaOnTheLastX0OfTheMonth() {
return ", le dernier %s du mois";
}
commaOnlyOnX0() {
return ", uniquement le %s";
}
commaAndOnX0() {
return ", et %s";
}
commaEveryX0Months() {
return ", tous les %s mois";
}
commaOnlyInX0() {
return ", uniquement en %s";
}
commaOnTheLastDayOfTheMonth() {
return ", le dernier jour du mois";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", le dernier jour ouvrable du mois";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s jours avant le dernier jour du mois";
}
firstWeekday() {
return "premier jour ouvrable";
}
weekdayNearestDayX0() {
return "jour ouvrable le plus proche du %s";
}
commaOnTheX0OfTheMonth() {
return ", le %s du mois";
}
commaEveryX0Days() {
return ", tous les %s jours";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", du %s au %s du mois";
}
commaOnDayX0OfTheMonth() {
return ", le %s du mois";
}
commaEveryHour() {
return ", chaque heure";
}
commaEveryX0Years() {
return ", tous les %s ans";
}
// No longer used?
commaDaysX0ThroughX1() {
return ", du %s au %s";
}
commaStartingX0() {
return ", à partir de %s";
}
daysOfTheWeek() {
return ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];
}
monthsOfTheYear() {
return [
"janvier",
"février",
"mars",
"avril",
"mai",
"juin",
"juillet",
"août",
"septembre",
"octobre",
"novembre",
"décembre",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/he.ts 0000664 0000000 0000000 00000007145 14775314346 0022150 0 ustar 00root root 0000000 0000000 // Hebrew
import { Locale } from "../locale";
export class he implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "אירעה שגיאה בעת יצירת תיאור הביטוי. בדוק את תחביר הביטוי cron.";
}
everyMinute() {
return "כל דקה";
}
everyHour() {
return "כל שעה";
}
atSpace() {
return "ב ";
}
everyMinuteBetweenX0AndX1() {
return "כל דקה %s עד %s";
}
at() {
return "ב";
}
spaceAnd() {
return " ו";
}
everySecond() {
return "כל שניה";
}
everyX0Seconds() {
return "כל %s שניות";
}
secondsX0ThroughX1PastTheMinute() {
return "%s עד %s שניות של הדקה";
}
atX0SecondsPastTheMinute() {
return "ב %s שניות של הדקה";
}
everyX0Minutes() {
return "כל %s דקות";
}
minutesX0ThroughX1PastTheHour() {
return "%s עד %s דקות של השעה";
}
atX0MinutesPastTheHour() {
return "ב %s דקות של השעה";
}
everyX0Hours() {
return "כל %s שעות";
}
betweenX0AndX1() {
return "%s עד %s";
}
atX0() {
return "ב %s";
}
commaEveryDay() {
return ", כל יום";
}
commaEveryX0DaysOfTheWeek() {
return ", כל %s ימים בשבוע";
}
commaX0ThroughX1() {
return ", %s עד %s";
}
commaAndX0ThroughX1() {
return ", ו %s עד %s";
}
first() {
return "ראשון";
}
second() {
return "שני";
}
third() {
return "שלישי";
}
fourth() {
return "רביעי";
}
fifth() {
return "חמישי";
}
commaOnThe() {
return ", ב ";
}
spaceX0OfTheMonth() {
return " %s של החודש";
}
lastDay() {
return "היום האחרון";
}
commaOnTheLastX0OfTheMonth() {
return ", רק ב %s של החודש";
}
commaOnlyOnX0() {
return ", רק ב %s";
}
commaAndOnX0() {
return ", וב %s";
}
commaEveryX0Months() {
return ", כל %s חודשים";
}
commaOnlyInX0() {
return ", רק ב %s";
}
commaOnTheLastDayOfTheMonth() {
return ", ביום האחרון של החודש";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", ביום החול האחרון של החודש";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s ימים לפני היום האחרון בחודש";
}
firstWeekday() {
return "יום החול הראשון";
}
weekdayNearestDayX0() {
return "יום החול הראשון הקרוב אל %s";
}
commaOnTheX0OfTheMonth() {
return ", ביום ה%s של החודש";
}
commaEveryX0Days() {
return ", כל %s ימים";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", בין היום ה%s וה%s של החודש";
}
commaOnDayX0OfTheMonth() {
return ", ביום ה%s של החודש";
}
commaEveryX0Years() {
return ", כל %s שנים";
}
commaStartingX0() {
return ", החל מ %s";
}
daysOfTheWeek() {
return ["יום ראשון", "יום שני", "יום שלישי", "יום רביעי", "יום חמישי", "יום שישי", "יום שבת"];
}
monthsOfTheYear() {
return ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/hu.ts 0000664 0000000 0000000 00000007007 14775314346 0022165 0 ustar 00root root 0000000 0000000 // Hungarian
import { Locale } from "../locale";
export class hu implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Hiba történt a kifejezésleírás generálásakor. Ellenőrizze a cron kifejezés szintaxisát.";
}
everyMinute() {
return "minden percben";
}
everyHour() {
return "minden órában";
}
atSpace() {
return "Ekkor: ";
}
everyMinuteBetweenX0AndX1() {
return "percenként %s és %s között";
}
at() {
return "Ekkor:";
}
spaceAnd() {
return " és";
}
everySecond() {
return "minden másodpercben";
}
everyX0Seconds() {
return "%s másodpercenként";
}
secondsX0ThroughX1PastTheMinute() {
return "%s. másodpercben %s perc után";
}
atX0SecondsPastTheMinute() {
return "%s. másodpercben";
}
everyX0Minutes() {
return "minden %s. percben";
}
minutesX0ThroughX1PastTheHour() {
return "%s. percben %s óra után";
}
atX0MinutesPastTheHour() {
return "%s. percben";
}
everyX0Hours() {
return "minden %s órában";
}
betweenX0AndX1() {
return "%s és %s között";
}
atX0() {
return "ekkor %s";
}
commaEveryDay() {
return ", minden nap";
}
commaEveryX0DaysOfTheWeek() {
return ", a hét minden %s napján";
}
commaX0ThroughX1() {
return ", %s - %s";
}
commaAndX0ThroughX1() {
return ", és %s - %s";
}
first() {
return "első";
}
second() {
return "második";
}
third() {
return "harmadik";
}
fourth() {
return "negyedik";
}
fifth() {
return "ötödik";
}
commaOnThe() {
return ", ";
}
spaceX0OfTheMonth() {
return " %s a hónapban";
}
lastDay() {
return "az utolsó nap";
}
commaOnTheLastX0OfTheMonth() {
return ", a hónap utolsó %s";
}
commaOnlyOnX0() {
return ", csak ekkor: %s";
}
commaAndOnX0() {
return ", és %s";
}
commaEveryX0Months() {
return ", minden %s hónapban";
}
commaOnlyInX0() {
return ", csak ekkor: %s";
}
commaOnTheLastDayOfTheMonth() {
return ", a hónap utolsó napján";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", a hónap utolsó hétköznapján";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s nappal a hónap utolsó napja előtt";
}
firstWeekday() {
return "első hétköznap";
}
weekdayNearestDayX0() {
return "hétköznap legközelebbi nap %s";
}
commaOnTheX0OfTheMonth() {
return ", a hónap %s";
}
commaEveryX0Days() {
return ", %s naponként";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", a hónap %s és %s napja között";
}
commaOnDayX0OfTheMonth() {
return ", a hónap %s napján";
}
commaEveryHour() {
return ", minden órában";
}
commaEveryX0Years() {
return ", %s évente";
}
commaStartingX0() {
return ", %s kezdettel";
}
daysOfTheWeek() {
return ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"];
}
monthsOfTheYear() {
return [
"január",
"február",
"március",
"április",
"május",
"június",
"július",
"augusztus",
"szeptember",
"október",
"november",
"december",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/id.ts 0000664 0000000 0000000 00000007004 14775314346 0022142 0 ustar 00root root 0000000 0000000 // Indonesia
import { Locale } from "../locale";
export class id implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Terjadi kesalahan saat membuat deskripsi ekspresi. Periksa sintaks ekspresi cron.";
}
everyMinute() {
return "setiap menit";
}
everyHour() {
return "setiap jam";
}
atSpace() {
return "Pada ";
}
everyMinuteBetweenX0AndX1() {
return "Setiap menit diantara %s dan %s";
}
at() {
return "Pada";
}
spaceAnd() {
return " dan";
}
everySecond() {
return "setiap detik";
}
everyX0Seconds() {
return "setiap %s detik";
}
secondsX0ThroughX1PastTheMinute() {
return "detik ke %s sampai %s melewati menit";
}
atX0SecondsPastTheMinute() {
return "pada %s detik lewat satu menit";
}
everyX0Minutes() {
return "setiap %s menit";
}
minutesX0ThroughX1PastTheHour() {
return "menit ke %s sampai %s melewati jam";
}
atX0MinutesPastTheHour() {
return "pada %s menit melewati jam";
}
everyX0Hours() {
return "setiap %s jam";
}
betweenX0AndX1() {
return "diantara %s dan %s";
}
atX0() {
return "pada %s";
}
commaEveryDay() {
return ", setiap hari";
}
commaEveryX0DaysOfTheWeek() {
return ", setiap hari %s dalam seminggu";
}
commaX0ThroughX1() {
return ", %s sampai %s";
}
commaAndX0ThroughX1() {
return ", dan %s sampai %s";
}
first() {
return "pertama";
}
second() {
return "kedua";
}
third() {
return "ketiga";
}
fourth() {
return "keempat";
}
fifth() {
return "kelima";
}
commaOnThe() {
return ", di ";
}
spaceX0OfTheMonth() {
return " %s pada bulan";
}
lastDay() {
return "hari terakhir";
}
commaOnTheLastX0OfTheMonth() {
return ", pada %s terakhir bulan ini";
}
commaOnlyOnX0() {
return ", hanya pada %s";
}
commaAndOnX0() {
return ", dan pada %s";
}
commaEveryX0Months() {
return ", setiap bulan %s ";
}
commaOnlyInX0() {
return ", hanya pada %s";
}
commaOnTheLastDayOfTheMonth() {
return ", pada hari terakhir bulan ini";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", pada hari kerja terakhir setiap bulan";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s hari sebelum hari terakhir setiap bulan";
}
firstWeekday() {
return "hari kerja pertama";
}
weekdayNearestDayX0() {
return "hari kerja terdekat %s";
}
commaOnTheX0OfTheMonth() {
return ", pada %s bulan ini";
}
commaEveryX0Days() {
return ", setiap %s hari";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", antara hari %s dan %s dalam sebulan";
}
commaOnDayX0OfTheMonth() {
return ", pada hari %s dalam sebulan";
}
commaEveryHour() {
return ", setiap jam";
}
commaEveryX0Years() {
return ", setiap %s tahun";
}
commaStartingX0() {
return ", mulai pada %s";
}
daysOfTheWeek() {
return ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"];
}
monthsOfTheYear() {
return [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/it.ts 0000664 0000000 0000000 00000006734 14775314346 0022173 0 ustar 00root root 0000000 0000000 // Italian
import { Locale } from "../locale";
export class it implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "È verificato un errore durante la generazione la descrizione espressione. Controllare la sintassi delle espressioni cron.";
}
at() {
return "Alle";
}
atSpace() {
return "Alle ";
}
atX0() {
return "alle %s";
}
atX0MinutesPastTheHour() {
return "al %s minuto passata l'ora";
}
atX0SecondsPastTheMinute() {
return "al %s secondo passato il minuto";
}
betweenX0AndX1() {
return "tra le %s e le %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", tra il giorno %s e %s del mese";
}
commaEveryDay() {
return ", ogni giorno";
}
commaEveryX0Days() {
return ", ogni %s giorni";
}
commaEveryX0DaysOfTheWeek() {
return ", ogni %s giorni della settimana";
}
commaEveryX0Months() {
return ", ogni %s mesi";
}
commaEveryX0Years() {
return ", ogni %s anni";
}
commaOnDayX0OfTheMonth() {
return ", il giorno %s del mese";
}
commaOnlyInX0() {
return ", solo in %s";
}
commaOnlyOnX0() {
return ", solo il %s";
}
commaAndOnX0() {
return ", e il %s";
}
commaOnThe() {
return ", il ";
}
commaOnTheLastDayOfTheMonth() {
return ", l'ultimo giorno del mese";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", nell'ultima settimana del mese";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s giorni prima dell'ultimo giorno del mese";
}
commaOnTheLastX0OfTheMonth() {
return ", l'ultimo %s del mese";
}
commaOnTheX0OfTheMonth() {
return ", il %s del mese";
}
commaX0ThroughX1() {
return ", %s al %s";
}
commaAndX0ThroughX1() {
return ", e %s al %s";
}
everyHour() {
return "ogni ora";
}
everyMinute() {
return "ogni minuto";
}
everyMinuteBetweenX0AndX1() {
return "Ogni minuto tra le %s e le %s";
}
everySecond() {
return "ogni secondo";
}
everyX0Hours() {
return "ogni %s ore";
}
everyX0Minutes() {
return "ogni %s minuti";
}
everyX0Seconds() {
return "ogni %s secondi";
}
fifth() {
return "quinto";
}
first() {
return "primo";
}
firstWeekday() {
return "primo giorno della settimana";
}
fourth() {
return "quarto";
}
minutesX0ThroughX1PastTheHour() {
return "minuti %s al %s dopo l'ora";
}
second() {
return "secondo";
}
secondsX0ThroughX1PastTheMinute() {
return "secondi %s al %s oltre il minuto";
}
spaceAnd() {
return " e";
}
spaceX0OfTheMonth() {
return " %s del mese";
}
lastDay() {
return "l'ultimo giorno";
}
third() {
return "terzo";
}
weekdayNearestDayX0() {
return "giorno della settimana più vicino al %s";
}
commaStartingX0() {
return ", a partire %s";
}
daysOfTheWeek() {
return ["domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"];
}
monthsOfTheYear() {
return [
"gennaio",
"febbraio",
"marzo",
"aprile",
"maggio",
"giugno",
"luglio",
"agosto",
"settembre",
"ottobre",
"novembre",
"dicembre",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ja.ts 0000664 0000000 0000000 00000007636 14775314346 0022153 0 ustar 00root root 0000000 0000000 import { Locale } from "../locale";
export class ja implements Locale {
use24HourTimeFormatByDefault() {
return true;
}
everyMinute(): string {
return "毎分";
}
everyHour(): string {
return "毎時";
}
anErrorOccuredWhenGeneratingTheExpressionD(): string {
return "式の記述を生成する際にエラーが発生しました。Cron 式の構文を確認してください。";
}
atSpace(): string {
return "次において実施";
}
everyMinuteBetweenX0AndX1(): string {
return "%s から %s まで毎分";
}
at(): string {
return "次において実施";
}
spaceAnd(): string {
return "と";
}
everySecond(): string {
return "毎秒";
}
everyX0Seconds(): string {
return "%s 秒ごと";
}
secondsX0ThroughX1PastTheMinute(): string {
return "毎分 %s 秒から %s 秒まで";
}
atX0SecondsPastTheMinute(): string {
return "毎分 %s 秒過ぎ";
}
everyX0Minutes(): string {
return "%s 分ごと";
}
minutesX0ThroughX1PastTheHour(): string {
return "毎時 %s 分から %s 分まで";
}
atX0MinutesPastTheHour(): string {
return "毎時 %s 分過ぎ";
}
everyX0Hours(): string {
return "%s 時間ごと";
}
betweenX0AndX1(): string {
return "%s と %s の間";
}
atX0(): string {
return "次において実施 %s";
}
commaEveryDay(): string {
return "、毎日";
}
commaEveryX0DaysOfTheWeek(): string {
return "、週のうち %s 日ごと";
}
commaX0ThroughX1(): string {
return "、%s から %s まで";
}
commaAndX0ThroughX1() {
return "、%s から %s まで";
}
first(): string {
return "1 番目";
}
second(): string {
return "2 番目";
}
third(): string {
return "3 番目";
}
fourth(): string {
return "4 番目";
}
fifth(): string {
return "5 番目";
}
commaOnThe(): string {
return "次に";
}
spaceX0OfTheMonth(): string {
return "月のうち %s";
}
commaOnTheLastX0OfTheMonth(): string {
return "月の最後の %s に";
}
commaOnlyOnX0(): string {
return "%s にのみ";
}
commaEveryX0Months(): string {
return "、%s か月ごと";
}
commaOnlyInX0(): string {
return "%s でのみ";
}
commaOnTheLastDayOfTheMonth(): string {
return "次の最終日に";
}
commaOnTheLastWeekdayOfTheMonth(): string {
return "月の最後の平日に";
}
firstWeekday(): string {
return "最初の平日";
}
weekdayNearestDayX0(): string {
return "%s 日の直近の平日";
}
commaOnTheX0OfTheMonth(): string {
return "月の %s に";
}
commaEveryX0Days(): string {
return "、%s 日ごと";
}
commaBetweenDayX0AndX1OfTheMonth(): string {
return "、月の %s 日から %s 日の間";
}
commaOnDayX0OfTheMonth(): string {
return "、月の %s 日目";
}
spaceAndSpace(): string {
return "と";
}
commaEveryMinute(): string {
return "、毎分";
}
commaEveryHour(): string {
return "、毎時";
}
commaEveryX0Years(): string {
return "、%s 年ごと";
}
commaStartingX0(): string {
return "、%s に開始";
}
aMPeriod(): string {
return "AM";
}
pMPeriod(): string {
return "PM";
}
commaDaysBeforeTheLastDayOfTheMonth(): string {
return "月の最終日の %s 日前";
}
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
lastDay() {
return "最終日";
}
commaAndOnX0() {
return "、〜と %s";
}
daysOfTheWeek() {
return ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"];
}
monthsOfTheYear() {
return ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ko.ts 0000664 0000000 0000000 00000010111 14775314346 0022150 0 ustar 00root root 0000000 0000000 // Korean
import { Locale } from "../locale";
export class ko implements Locale {
public setPeriodBeforeTime(): boolean {
return true;
}
public pm(): string {
return "오후";
}
public am(): string {
return "오전";
}
public atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
public atX0MinutesPastTheHourGt20(): string|null {
return null;
}
public commaMonthX0ThroughMonthX1(): string|null {
return null;
}
public commaYearX0ThroughYearX1(): string|null {
return null;
}
public use24HourTimeFormatByDefault() {
return false;
}
public anErrorOccuredWhenGeneratingTheExpressionD() {
return "표현식 설명을 생성하는 중 오류가 발생했습니다. cron 표현식 구문을 확인하십시오.";
}
public everyMinute() {
return "1분마다";
}
public everyHour() {
return "1시간마다";
}
public atSpace() {
return "시간 ";
}
public everyMinuteBetweenX0AndX1() {
return "%s 및 %s 사이에 매 분";
}
public at() {
return "시간";
}
public spaceAnd() {
return " 및";
}
public everySecond() {
return "1초마다";
}
public everyX0Seconds() {
return "%s초마다";
}
public secondsX0ThroughX1PastTheMinute() {
return "정분 후 %s초에서 %s초까지";
}
public atX0SecondsPastTheMinute() {
return "정분 후 %s초에서";
}
public everyX0Minutes() {
return "%s분마다";
}
public minutesX0ThroughX1PastTheHour() {
return "정시 후 %s분에서 %s분까지";
}
public atX0MinutesPastTheHour() {
return "정시 후 %s분에서";
}
public everyX0Hours() {
return "%s시간마다";
}
public betweenX0AndX1() {
return "%s에서 %s 사이";
}
public atX0() {
return "%s에서";
}
public commaEveryDay() {
return ", 매일";
}
public commaEveryX0DaysOfTheWeek() {
return ", 주 중 %s일마다";
}
public commaX0ThroughX1() {
return ", %s에서 %s까지";
}
public commaAndX0ThroughX1() {
return ", 및 %s에서 %s까지";
}
public first() {
return "첫 번째";
}
public second() {
return "두 번째";
}
public third() {
return "세 번째";
}
public fourth() {
return "네 번째";
}
public fifth() {
return "다섯 번째";
}
public commaOnThe() {
return ", 해당 ";
}
public spaceX0OfTheMonth() {
return " 해당 월의 %s";
}
public lastDay() {
return "마지막 날";
}
public commaOnTheLastX0OfTheMonth() {
return ", 해당 월의 마지막 %s";
}
public commaOnlyOnX0() {
return ", %s에만";
}
public commaAndOnX0() {
return ", 및 %s에";
}
public commaEveryX0Months() {
return ", %s개월마다";
}
public commaOnlyInX0() {
return ", %s에만";
}
public commaOnTheLastDayOfTheMonth() {
return ", 해당 월의 마지막 날에";
}
public commaOnTheLastWeekdayOfTheMonth() {
return ", 해당 월의 마지막 평일에";
}
public commaDaysBeforeTheLastDayOfTheMonth() {
return ", 해당 월의 마지막 날 %s일 전";
}
public firstWeekday() {
return "첫 번째 평일";
}
public weekdayNearestDayX0() {
return "%s일과 가장 가까운 평일";
}
public commaOnTheX0OfTheMonth() {
return ", 해당 월의 %s에";
}
public commaEveryX0Days() {
return ", %s일마다";
}
public commaBetweenDayX0AndX1OfTheMonth() {
return ", 해당 월의 %s일에서 %s일까지";
}
public commaOnDayX0OfTheMonth() {
return ", 해당 월의 %s일에";
}
public commaEveryMinute() {
return ", 1분마다";
}
public commaEveryHour() {
return ", 1시간마다";
}
public commaEveryX0Years() {
return ", %s년마다";
}
public commaStartingX0() {
return ", %s부터";
}
public daysOfTheWeek() {
return ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"];
}
public monthsOfTheYear() {
return ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/my.ts 0000664 0000000 0000000 00000006743 14775314346 0022204 0 ustar 00root root 0000000 0000000 // Malay
import { Locale } from "../locale";
export class my implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return false;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Terdapat ralat semasa menjana penerangan ungkapan. Sila periksa sintaks ungkapan cron.";
}
everyMinute() {
return "setiap minit";
}
everyHour() {
return "setiap jam";
}
atSpace() {
return "Pada ";
}
everyMinuteBetweenX0AndX1() {
return "Setiap minit antara %s dan %s";
}
at() {
return "Pada";
}
spaceAnd() {
return " dan";
}
everySecond() {
return "setiap saat";
}
everyX0Seconds() {
return "setiap %s saat";
}
secondsX0ThroughX1PastTheMinute() {
return "saat ke %s hingga %s selepas minit";
}
atX0SecondsPastTheMinute() {
return "pada %s saat selepas minit";
}
everyX0Minutes() {
return "setiap %s minit";
}
minutesX0ThroughX1PastTheHour() {
return "minit ke %s hingga %s selepas jam";
}
atX0MinutesPastTheHour() {
return "pada %s minit selepas jam";
}
everyX0Hours() {
return "setiap %s jam";
}
betweenX0AndX1() {
return "antara %s dan %s";
}
atX0() {
return "pada %s";
}
commaEveryDay() {
return ", setiap hari";
}
commaEveryX0DaysOfTheWeek() {
return ", setiap %s hari dalam minggu";
}
commaX0ThroughX1() {
return ", %s hingga %s";
}
commaAndX0ThroughX1() {
return ", dan %s hingga %s";
}
first() {
return "pertama";
}
second() {
return "kedua";
}
third() {
return "ketiga";
}
fourth() {
return "keempat";
}
fifth() {
return "kelima";
}
commaOnThe() {
return ", pada ";
}
spaceX0OfTheMonth() {
return " %s pada bulan";
}
lastDay() {
return "hari terakhir";
}
commaOnTheLastX0OfTheMonth() {
return ", pada %s terakhir bulan";
}
commaOnlyOnX0() {
return ", hanya pada %s";
}
commaAndOnX0() {
return ", dan pada %s";
}
commaEveryX0Months() {
return ", setiap bulan %s";
}
commaOnlyInX0() {
return ", hanya pada %s";
}
commaOnTheLastDayOfTheMonth() {
return ", pada hari terakhir bulan";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", pada minggu terakhir bulan";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s hari sebelum hari terakhir bulan";
}
firstWeekday() {
return "hari pertama minggu bekerja";
}
weekdayNearestDayX0() {
return "hari bekerja yang terdekat dengan %s";
}
commaOnTheX0OfTheMonth() {
return ", pada %s bulan";
}
commaEveryX0Days() {
return ", setiap %s hari";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", antara hari %s dan %s dalam bulan";
}
commaOnDayX0OfTheMonth() {
return ", pada hari %s dalam bulan";
}
commaEveryHour() {
return ", setiap jam";
}
commaEveryX0Years() {
return ", setiap %s tahun";
}
commaStartingX0() {
return ", bermula %s";
}
daysOfTheWeek() {
return ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"];
}
monthsOfTheYear() {
return [
"Januari",
"Februari",
"Mac",
"April",
"Mei",
"Jun",
"Julai",
"Ogos",
"September",
"Oktober",
"November",
"Disember",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/nb.ts 0000664 0000000 0000000 00000006643 14775314346 0022155 0 ustar 00root root 0000000 0000000 // Norwegian
import { Locale } from "../locale";
export class nb implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "En feil inntraff ved generering av uttrykksbeskrivelse. Sjekk cron syntaks.";
}
at() {
return "Kl.";
}
atSpace() {
return "Kl.";
}
atX0() {
return "på %s";
}
atX0MinutesPastTheHour() {
return "på %s minutter etter timen";
}
atX0SecondsPastTheMinute() {
return "på %s sekunder etter minuttet";
}
betweenX0AndX1() {
return "mellom %s og %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", mellom dag %s og %s av måneden";
}
commaEveryDay() {
return ", hver dag";
}
commaEveryX0Days() {
return ", hver %s dag";
}
commaEveryX0DaysOfTheWeek() {
return ", hver %s ukedag";
}
commaEveryX0Months() {
return ", hver %s måned";
}
commaEveryX0Years() {
return ", hvert %s år";
}
commaOnDayX0OfTheMonth() {
return ", på dag %s av måneden";
}
commaOnlyInX0() {
return ", bare i %s";
}
commaOnlyOnX0() {
return ", på %s";
}
commaAndOnX0() {
return ", og på %s";
}
commaOnThe() {
return ", på ";
}
commaOnTheLastDayOfTheMonth() {
return ", på den siste dagen i måneden";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", den siste ukedagen i måneden";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dager før den siste dagen i måneden";
}
commaOnTheLastX0OfTheMonth() {
return ", på den siste %s av måneden";
}
commaOnTheX0OfTheMonth() {
return ", på den %s av måneden";
}
commaX0ThroughX1() {
return ", %s til og med %s";
}
commaAndX0ThroughX1() {
return ", og %s til og med %s";
}
everyHour() {
return "hver time";
}
everyMinute() {
return "hvert minutt";
}
everyMinuteBetweenX0AndX1() {
return "Hvert minutt mellom %s og %s";
}
everySecond() {
return "hvert sekund";
}
everyX0Hours() {
return "hver %s time";
}
everyX0Minutes() {
return "hvert %s minutt";
}
everyX0Seconds() {
return "hvert %s sekund";
}
fifth() {
return "femte";
}
first() {
return "første";
}
firstWeekday() {
return "første ukedag";
}
fourth() {
return "fjerde";
}
minutesX0ThroughX1PastTheHour() {
return "minuttene fra %s til og med %s etter timen";
}
second() {
return "andre";
}
secondsX0ThroughX1PastTheMinute() {
return "sekundene fra %s til og med %s etter minuttet";
}
spaceAnd() {
return " og";
}
spaceX0OfTheMonth() {
return " %s i måneden";
}
lastDay() {
return "den siste dagen";
}
third() {
return "tredje";
}
weekdayNearestDayX0() {
return "ukedag nærmest dag %s";
}
commaStartingX0() {
return ", starter %s";
}
daysOfTheWeek() {
return ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"];
}
monthsOfTheYear() {
return [
"januar",
"februar",
"mars",
"april",
"mai",
"juni",
"juli",
"august",
"september",
"oktober",
"november",
"desember",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/nl.ts 0000664 0000000 0000000 00000006644 14775314346 0022170 0 ustar 00root root 0000000 0000000 // Dutch
import { Locale } from "../locale";
export class nl implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
everyMinute() {
return "elke minuut";
}
everyHour() {
return "elk uur";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Er is een fout opgetreden bij het vertalen van de gegevens. Controleer de gegevens.";
}
atSpace() {
return "Om ";
}
everyMinuteBetweenX0AndX1() {
return "Elke minuut tussen %s en %s";
}
at() {
return "Om";
}
spaceAnd() {
return " en";
}
everySecond() {
return "elke seconde";
}
everyX0Seconds() {
return "elke %s seconden";
}
secondsX0ThroughX1PastTheMinute() {
return "seconden %s t/m %s na de minuut";
}
atX0SecondsPastTheMinute() {
return "op %s seconden na de minuut";
}
everyX0Minutes() {
return "elke %s minuten";
}
minutesX0ThroughX1PastTheHour() {
return "minuut %s t/m %s na het uur";
}
atX0MinutesPastTheHour() {
return "op %s minuten na het uur";
}
everyX0Hours() {
return "elke %s uur";
}
betweenX0AndX1() {
return "tussen %s en %s";
}
atX0() {
return "om %s";
}
commaEveryDay() {
return ", elke dag";
}
commaEveryX0DaysOfTheWeek() {
return ", elke %s dagen van de week";
}
commaX0ThroughX1() {
return ", %s t/m %s";
}
commaAndX0ThroughX1() {
return ", en %s t/m %s";
}
first() {
return "eerste";
}
second() {
return "tweede";
}
third() {
return "derde";
}
fourth() {
return "vierde";
}
fifth() {
return "vijfde";
}
commaOnThe() {
return ", op de ";
}
spaceX0OfTheMonth() {
return " %s van de maand";
}
lastDay() {
return "de laatste dag";
}
commaOnTheLastX0OfTheMonth() {
return ", op de laatste %s van de maand";
}
commaOnlyOnX0() {
return ", alleen op %s";
}
commaAndOnX0() {
return ", en op %s";
}
commaEveryX0Months() {
return ", elke %s maanden";
}
commaOnlyInX0() {
return ", alleen in %s";
}
commaOnTheLastDayOfTheMonth() {
return ", op de laatste dag van de maand";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", op de laatste werkdag van de maand";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dagen vóór de laatste dag van de maand";
}
firstWeekday() {
return "eerste werkdag";
}
weekdayNearestDayX0() {
return "werkdag dichtst bij dag %s";
}
commaOnTheX0OfTheMonth() {
return ", op de %s van de maand";
}
commaEveryX0Days() {
return ", elke %s dagen";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", tussen dag %s en %s van de maand";
}
commaOnDayX0OfTheMonth() {
return ", op dag %s van de maand";
}
commaEveryX0Years() {
return ", elke %s jaren";
}
commaStartingX0() {
return ", beginnend %s";
}
daysOfTheWeek() {
return ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"];
}
monthsOfTheYear() {
return [
"januari",
"februari",
"maart",
"april",
"mei",
"juni",
"juli",
"augustus",
"september",
"oktober",
"november",
"december",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/pl.ts 0000664 0000000 0000000 00000006535 14775314346 0022171 0 ustar 00root root 0000000 0000000 // Polish
import { Locale } from "../locale";
export class pl implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Wystąpił błąd podczas generowania opisu wyrażenia cron. Sprawdź składnię wyrażenia cron.";
}
at() {
return "O";
}
atSpace() {
return "O ";
}
atX0() {
return "o %s";
}
atX0MinutesPastTheHour() {
return "w %s minucie";
}
atX0SecondsPastTheMinute() {
return "w %s sekundzie";
}
betweenX0AndX1() {
return "od %s do %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", od %s-ego do %s-ego dnia miesiąca";
}
commaEveryDay() {
return ", co dzień";
}
commaEveryX0Days() {
return ", co %s dni";
}
commaEveryX0DaysOfTheWeek() {
return ", co %s dni tygodnia";
}
commaEveryX0Months() {
return ", co %s miesięcy";
}
commaEveryX0Years() {
return ", co %s lat";
}
commaOnDayX0OfTheMonth() {
return ", %s-ego dnia miesiąca";
}
commaOnlyInX0() {
return ", tylko %s";
}
commaOnlyOnX0() {
return ", tylko %s";
}
commaAndOnX0() {
return ", i %s";
}
commaOnThe() {
return ", ";
}
commaOnTheLastDayOfTheMonth() {
return ", ostatni dzień miesiąca";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", ostatni dzień roboczy miesiąca";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dni przed ostatnim dniem miesiąca";
}
commaOnTheLastX0OfTheMonth() {
return ", ostatni %s miesiąca";
}
commaOnTheX0OfTheMonth() {
return ", %s miesiąca";
}
commaX0ThroughX1() {
return ", od %s do %s";
}
commaAndX0ThroughX1() {
return ", i od %s do %s";
}
everyHour() {
return "co godzinę";
}
everyMinute() {
return "co minutę";
}
everyMinuteBetweenX0AndX1() {
return "Co minutę od %s do %s";
}
everySecond() {
return "co sekundę";
}
everyX0Hours() {
return "co %s godzin";
}
everyX0Minutes() {
return "co %s minut";
}
everyX0Seconds() {
return "co %s sekund";
}
fifth() {
return "piąty";
}
first() {
return "pierwszy";
}
firstWeekday() {
return "pierwszy dzień roboczy";
}
fourth() {
return "czwarty";
}
minutesX0ThroughX1PastTheHour() {
return "minuty od %s do %s";
}
second() {
return "drugi";
}
secondsX0ThroughX1PastTheMinute() {
return "sekundy od %s do %s";
}
spaceAnd() {
return " i";
}
spaceX0OfTheMonth() {
return " %s miesiąca";
}
lastDay() {
return "ostatni dzień";
}
third() {
return "trzeci";
}
weekdayNearestDayX0() {
return "dzień roboczy najbliższy %s-ego dnia";
}
commaStartingX0() {
return ", startowy %s";
}
daysOfTheWeek() {
return ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"];
}
monthsOfTheYear() {
return [
"styczeń",
"luty",
"marzec",
"kwiecień",
"maj",
"czerwiec",
"lipiec",
"sierpień",
"wrzesień",
"październik",
"listopad",
"grudzień",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/pt_BR.ts 0000664 0000000 0000000 00000007523 14775314346 0022562 0 ustar 00root root 0000000 0000000 // Portuguese
import { Locale } from "../locale";
export class pt_BR implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Ocorreu um erro ao gerar a descrição da expressão Cron.";
}
at() {
return "às";
}
atSpace() {
return "às ";
}
atX0() {
return "Às %s";
}
atX0MinutesPastTheHour() {
return "aos %s minutos da hora";
}
atX0SecondsPastTheMinute() {
return "aos %s segundos do minuto";
}
betweenX0AndX1() {
return "entre %s e %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", entre os dias %s e %s do mês";
}
commaEveryDay() {
return ", a cada dia";
}
commaEveryX0Days() {
return ", a cada %s dias";
}
commaEveryX0DaysOfTheWeek() {
return ", a cada %s dias de semana";
}
commaEveryX0Months() {
return ", a cada %s meses";
}
commaOnDayX0OfTheMonth() {
return ", no dia %s do mês";
}
commaOnlyInX0(s?: string) {
return s && s.length > 1 && s[1] === "-" ? "somente %s" : ", somente em %s";
}
commaOnlyOnX0(s?: string) {
return s && s.length > 1 && s[1] === "-" ? ", somente %s" : ", somente de %s";
}
commaAndOnX0() {
return ", e de %s";
}
commaOnThe(s?: string, day?: string) {
return day === '6' || day === '0' ? ", no" : ", na ";
}
commaOnTheLastDayOfTheMonth() {
return ", no último dia do mês";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", no último dia da semana do mês";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dias antes do último dia do mês";
}
commaOnTheLastX0OfTheMonth() {
return ", na última %s do mês";
}
commaOnTheX0OfTheMonth() {
return ", no %s do mês";
}
commaX0ThroughX1() {
return ", de %s a %s";
}
commaAndX0ThroughX1() {
return ", e de %s a %s";
}
everyHour() {
return "a cada hora";
}
everyMinute() {
return "a cada minuto";
}
everyMinuteBetweenX0AndX1() {
return "a cada minuto entre %s e %s";
}
everySecond() {
return "a cada segundo";
}
everyX0Hours() {
return "a cada %s horas";
}
everyX0Minutes() {
return "a cada %s minutos";
}
everyX0Seconds() {
return "a cada %s segundos";
}
fifth(s?: string) {
return s === '6' || s === '0' ? "quinto" : "quinta";
}
first(s?: string) {
return s === '6' || s === '0' ? "primeiro" : "primeira";
}
firstWeekday() {
return "primeiro dia da semana";
}
fourth(s?: string) {
return s === '6' || s === '0' ? "quarto" : "quarta";
}
minutesX0ThroughX1PastTheHour() {
return "do minuto %s até %s de cada hora";
}
second(s?: string) {
return s === '6' || s === '0' ? "segundo" : "segunda";
}
secondsX0ThroughX1PastTheMinute() {
return "No segundo %s até %s de cada minuto";
}
spaceAnd() {
return " e";
}
spaceX0OfTheMonth() {
return " %s do mês";
}
lastDay() {
return "o último dia";
}
third(s?: string) {
return s === '6' || s === '0' ? "terceiro" : "terceira";
}
weekdayNearestDayX0() {
return "dia da semana mais próximo do dia %s";
}
commaEveryX0Years() {
return ", a cada %s anos";
}
commaStartingX0() {
return ", iniciando %s";
}
daysOfTheWeek() {
return ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"];
}
monthsOfTheYear() {
return [
"janeiro",
"fevereiro",
"março",
"abril",
"maio",
"junho",
"julho",
"agosto",
"setembro",
"outubro",
"novembro",
"dezembro",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/pt_PT.ts 0000664 0000000 0000000 00000007327 14775314346 0022604 0 ustar 00root root 0000000 0000000 // Portuguese
import { Locale } from "../locale";
export class pt_PT implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Ocorreu um erro ao gerar a descrição da expressão Cron.";
}
at() {
return "às";
}
atSpace() {
return "às ";
}
atX0() {
return "Às %s";
}
atX0MinutesPastTheHour() {
return "aos %s minutos da hora";
}
atX0SecondsPastTheMinute() {
return "aos %s segundos do minuto";
}
betweenX0AndX1() {
return "entre %s e %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", entre os dias %s e %s do mês";
}
commaEveryDay() {
return ", a cada dia";
}
commaEveryX0Days() {
return ", a cada %s dias";
}
commaEveryX0DaysOfTheWeek() {
return ", a cada %s dias de semana";
}
commaEveryX0Months() {
return ", a cada %s meses";
}
commaOnDayX0OfTheMonth() {
return ", no dia %s do mês";
}
commaOnlyInX0() {
return ", somente em %s";
}
commaOnlyOnX0() {
return ", somente de %s";
}
commaAndOnX0() {
return ", e de %s";
}
commaOnThe(s?: string, day?: string) {
return day === '6' || day === '0' ? ", no" : ", na ";
}
commaOnTheLastDayOfTheMonth() {
return ", no último dia do mês";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", no último dia da semana do mês";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dias antes do último dia do mês";
}
commaOnTheLastX0OfTheMonth() {
return ", na última %s do mês";
}
commaOnTheX0OfTheMonth() {
return ", no %s do mês";
}
commaX0ThroughX1() {
return ", de %s a %s";
}
commaAndX0ThroughX1() {
return ", e de %s a %s";
}
everyHour() {
return "a cada hora";
}
everyMinute() {
return "a cada minuto";
}
everyMinuteBetweenX0AndX1() {
return "a cada minuto entre %s e %s";
}
everySecond() {
return "a cada segundo";
}
everyX0Hours() {
return "a cada %s horas";
}
everyX0Minutes() {
return "a cada %s minutos";
}
everyX0Seconds() {
return "a cada %s segundos";
}
fifth(s?: string) {
return s === '6' || s === '0' ? "quinto" : "quinta";
}
first(s?: string) {
return s === '6' || s === '0' ? "primeiro" : "primeira";
}
firstWeekday() {
return "primeiro dia da semana";
}
fourth(s?: string) {
return s === '6' || s === '0' ? "quarto" : "quarta";
}
minutesX0ThroughX1PastTheHour() {
return "do minuto %s até %s de cada hora";
}
second(s?: string) {
return s === '6' || s === '0' ? "segundo" : "segunda";
}
secondsX0ThroughX1PastTheMinute() {
return "No segundo %s até %s de cada minuto";
}
spaceAnd() {
return " e";
}
spaceX0OfTheMonth() {
return " %s do mês";
}
lastDay() {
return "o último dia";
}
third(s?: string) {
return s === '6' || s === '0' ? "terceiro" : "terceira";
}
weekdayNearestDayX0() {
return "dia da semana mais próximo do dia %s";
}
commaEveryX0Years() {
return ", a cada %s anos";
}
commaStartingX0() {
return ", iniciando %s";
}
daysOfTheWeek() {
return ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"];
}
monthsOfTheYear() {
return [
"janeiro",
"fevereiro",
"março",
"abril",
"maio",
"junho",
"julho",
"agosto",
"setembro",
"outubro",
"novembro",
"dezembro",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ro.ts 0000664 0000000 0000000 00000006730 14775314346 0022173 0 ustar 00root root 0000000 0000000 // Romanian
import { Locale } from "../locale";
export class ro implements Locale {
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Eroare la generarea descrierii. Verificați sintaxa.";
}
at() {
return "La";
}
atSpace() {
return "La ";
}
atX0() {
return "la %s";
}
atX0MinutesPastTheHour() {
return "la și %s minute";
}
atX0SecondsPastTheMinute() {
return "la și %s secunde";
}
betweenX0AndX1() {
return "între %s și %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", între zilele %s și %s ale lunii";
}
commaEveryDay() {
return ", în fiecare zi";
}
commaEveryX0Days() {
return ", la fiecare %s zile";
}
commaEveryX0DaysOfTheWeek() {
return ", la fiecare a %s-a zi a săptămânii";
}
commaEveryX0Months() {
return ", la fiecare %s luni";
}
commaEveryX0Years() {
return ", o dată la %s ani";
}
commaOnDayX0OfTheMonth() {
return ", în ziua %s a lunii";
}
commaOnlyInX0() {
return ", doar în %s";
}
commaOnlyOnX0() {
return ", doar %s";
}
commaAndOnX0() {
return ", și %s";
}
commaOnThe() {
return ", în ";
}
commaOnTheLastDayOfTheMonth() {
return ", în ultima zi a lunii";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", în ultima zi lucrătoare a lunii";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s zile înainte de ultima zi a lunii";
}
commaOnTheLastX0OfTheMonth() {
return ", în ultima %s a lunii";
}
commaOnTheX0OfTheMonth() {
return ", în %s a lunii";
}
commaX0ThroughX1() {
return ", de %s până %s";
}
commaAndX0ThroughX1() {
return ", și de %s până %s";
}
everyHour() {
return "în fiecare oră";
}
everyMinute() {
return "în fiecare minut";
}
everyMinuteBetweenX0AndX1() {
return "În fiecare minut între %s și %s";
}
everySecond() {
return "în fiecare secundă";
}
everyX0Hours() {
return "la fiecare %s ore";
}
everyX0Minutes() {
return "la fiecare %s minute";
}
everyX0Seconds() {
return "la fiecare %s secunde";
}
fifth() {
return "a cincea";
}
first() {
return "prima";
}
firstWeekday() {
return "prima zi a săptămânii";
}
fourth() {
return "a patra";
}
minutesX0ThroughX1PastTheHour() {
return "între minutele %s și %s";
}
second() {
return "a doua";
}
secondsX0ThroughX1PastTheMinute() {
return "între secunda %s și secunda %s";
}
spaceAnd() {
return " și";
}
spaceX0OfTheMonth() {
return " %s a lunii";
}
lastDay() {
return "ultima zi";
}
third() {
return "a treia";
}
weekdayNearestDayX0() {
return "cea mai apropiată zi a săptămânii de ziua %s";
}
commaMonthX0ThroughMonthX1() {
return ", din %s până în %s";
}
commaYearX0ThroughYearX1() {
return ", din %s până în %s";
}
atX0MinutesPastTheHourGt20() {
return "la și %s de minute";
}
atX0SecondsPastTheMinuteGt20() {
return "la și %s de secunde";
}
commaStartingX0() {
return ", pornire %s";
}
daysOfTheWeek() {
return ["duminică", "luni", "marți", "miercuri", "joi", "vineri", "sâmbătă"];
}
monthsOfTheYear() {
return [
"ianuarie",
"februarie",
"martie",
"aprilie",
"mai",
"iunie",
"iulie",
"august",
"septembrie",
"octombrie",
"noiembrie",
"decembrie",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/ru.ts 0000664 0000000 0000000 00000016023 14775314346 0022175 0 ustar 00root root 0000000 0000000 // Russian
import { Locale } from "../locale";
const getPhraseByNumber = (str: string | undefined, words: Array) => {
const number = Number(str);
return number !== undefined
? words[number % 100 > 4 && number % 100 < 20 ? 2 : [2, 0, 1, 1, 1, 2][number % 10 < 5 ? Math.abs(number) % 10 : 5]]
: words[2];
};
const getPhraseByDayOfWeek = (str: string | undefined, words: Array) => {
const number = Number(str);
return number !== undefined
? words[number === 0 ? 0 : number === 1 || number === 2 || number === 4 ? 1 : 2]
: words[1];
};
export class ru implements Locale {
atX0SecondsPastTheMinuteGt20(): string | null {
return null;
}
atX0MinutesPastTheHourGt20(): string | null {
return null;
}
commaMonthX0ThroughMonthX1(): string | null {
return null;
}
commaYearX0ThroughYearX1(): string | null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
everyMinute() {
return "каждую минуту";
}
everyHour() {
return "каждый час";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Произошла ошибка во время генерации описания выражения. Проверьте синтаксис крон-выражения.";
}
atSpace() {
return "В ";
}
everyMinuteBetweenX0AndX1() {
return "Каждую минуту с %s по %s";
}
at() {
return "В";
}
spaceAnd() {
return " и";
}
everySecond() {
return "каждую секунду";
}
everyX0Seconds(s?: string) {
return getPhraseByNumber(s, ["каждую %s секунду", "каждые %s секунды", "каждые %s секунд"]);
}
secondsX0ThroughX1PastTheMinute() {
return "секунды с %s по %s";
}
atX0SecondsPastTheMinute(s?: string) {
return getPhraseByNumber(s, ["в %s секунду", "в %s секунды", "в %s секунд"]);
}
everyX0Minutes(s?: string) {
return getPhraseByNumber(s, ["каждую %s минуту", "каждые %s минуты", "каждые %s минут"]);
}
minutesX0ThroughX1PastTheHour() {
return "минуты с %s по %s";
}
atX0MinutesPastTheHour(s?: string) {
return getPhraseByNumber(s, ["в %s минуту", "в %s минуты", "в %s минут"]);
}
everyX0Hours(s?: string) {
return getPhraseByNumber(s, ["каждый %s час", "каждые %s часа", "каждые %s часов"]);
}
betweenX0AndX1() {
return "с %s по %s";
}
atX0() {
return "в %s";
}
commaEveryDay() {
return ", каждый день";
}
commaEveryX0DaysOfTheWeek(s?: string) {
return getPhraseByNumber(s, ["", ", каждые %s дня недели", ", каждые %s дней недели"]);
}
commaX0ThroughX1(s?: string) {
return s && (s[0] == "2" || s[0] == "3") ? ", со %s по %s" : ", с %s по %s";
}
commaAndX0ThroughX1(s?: string) {
return s && (s[0] == "2" || s[0] == "3") ? " и со %s по %s" : " и с %s по %s";
}
first(s?: string) {
return getPhraseByDayOfWeek(s, ["первое", "первый", "первую"]);
}
second(s?: string) {
return getPhraseByDayOfWeek(s, ["второе", "второй", "вторую"]);
}
third(s?: string) {
return getPhraseByDayOfWeek(s, ["третье", "третий", "третью"]);
}
fourth(s?: string) {
return getPhraseByDayOfWeek(s, ["четвертое", "четвертый", "четвертую"]);
}
fifth(s?: string) {
return getPhraseByDayOfWeek(s, ["пятое", "пятый", "пятую"]);
}
commaOnThe(s?: string) {
return s === "2" ? ", во " : ", в ";
}
spaceX0OfTheMonth() {
return " %s месяца";
}
lastDay() {
return "последний день";
}
commaOnTheLastX0OfTheMonth(s?: string) {
return getPhraseByDayOfWeek(s, [", в последнее %s месяца", ", в последний %s месяца", ", в последнюю %s месяца"]);
}
commaOnlyOnX0(s?: string) {
return s && s[0] === "2" ? ", только во %s" : ", только в %s";
}
commaAndOnX0() {
return ", и %s";
}
commaEveryX0Months(s?: string) {
return getPhraseByNumber(s, ["", " каждые %s месяца", " каждые %s месяцев"]);
}
commaOnlyInMonthX0() {
return ", только %s";
}
commaOnlyInX0() {
return ", только в %s";
}
commaOnTheLastDayOfTheMonth() {
return ", в последний день месяца";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", в последний будний день месяца";
}
commaDaysBeforeTheLastDayOfTheMonth(s?: string) {
return getPhraseByNumber(s, [
", за %s день до конца месяца",
", за %s дня до конца месяца",
", за %s дней до конца месяца",
]);
}
firstWeekday() {
return "первый будний день";
}
weekdayNearestDayX0() {
return "ближайший будний день к %s числу";
}
commaOnTheX0OfTheMonth() {
return ", в %s месяца";
}
commaEveryX0Days(s?: string) {
return getPhraseByNumber(s, [", каждый %s день", ", каждые %s дня", ", каждые %s дней"]);
}
commaBetweenDayX0AndX1OfTheMonth(s?: string) {
return s && s.substring(0, s.indexOf("-")) == "2" ? ", со %s по %s число месяца" : ", с %s по %s число месяца";
}
commaOnDayX0OfTheMonth(s?: string) {
return s && s[0] == "2" ? ", во %s число месяца" : ", в %s число месяца";
}
commaEveryX0Years(s?: string) {
return getPhraseByNumber(s, [", каждый %s год", ", каждые %s года", ", каждые %s лет"]);
}
commaStartingX0() {
return ", начало %s";
}
daysOfTheWeek() {
return ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"];
}
daysOfTheWeekInCase(f: number = 2) {
return f == 1
? ["воскресенья", "понедельника", "вторника", "среды", "четверга", "пятницы", "субботы"]
: ["воскресенье", "понедельник", "вторник", "среду", "четверг", "пятницу", "субботу"];
}
monthsOfTheYear() {
return [
"январь",
"февраль",
"март",
"апрель",
"май",
"июнь",
"июль",
"август",
"сентябрь",
"октябрь",
"ноябрь",
"декабрь",
];
}
monthsOfTheYearInCase(f?: number) {
return f == 1
? [
"января",
"февраля",
"марта",
"апреля",
"мая",
"июня",
"июля",
"августа",
"сентября",
"октября",
"ноября",
"декабря",
]
: this.monthsOfTheYear();
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/sk.ts 0000664 0000000 0000000 00000006616 14775314346 0022173 0 ustar 00root root 0000000 0000000 // Czech
import { Locale } from "../locale";
export class sk implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Pri vytváraní popisu došlo k chybe. Skontrolujte prosím správnosť syntaxe cronu.";
}
everyMinute() {
return "každú minútu";
}
everyHour() {
return "každú hodinu";
}
atSpace() {
return "V ";
}
everyMinuteBetweenX0AndX1() {
return "Každú minútu medzi %s a %s";
}
at() {
return "V";
}
spaceAnd() {
return " a";
}
everySecond() {
return "každú sekundu";
}
everyX0Seconds() {
return "každých %s sekúnd";
}
secondsX0ThroughX1PastTheMinute() {
return "sekundy od %s do %s";
}
atX0SecondsPastTheMinute() {
return "v %s sekúnd";
}
everyX0Minutes() {
return "každých %s minút";
}
minutesX0ThroughX1PastTheHour() {
return "minúty od %s do %s";
}
atX0MinutesPastTheHour() {
return "v %s minút";
}
everyX0Hours() {
return "každých %s hodín";
}
betweenX0AndX1() {
return "medzi %s a %s";
}
atX0() {
return "v %s";
}
commaEveryDay() {
return ", každý deň";
}
commaEveryX0DaysOfTheWeek() {
return ", každých %s dní v týždni";
}
commaX0ThroughX1() {
return ", od %s do %s";
}
commaAndX0ThroughX1() {
return ", a od %s do %s";
}
first() {
return "prvý";
}
second() {
return "druhý";
}
third() {
return "tretí";
}
fourth() {
return "štvrtý";
}
fifth() {
return "piaty";
}
commaOnThe() {
return ", ";
}
spaceX0OfTheMonth() {
return " %s v mesiaci";
}
lastDay() {
return "posledný deň";
}
commaOnTheLastX0OfTheMonth() {
return ", posledný %s v mesiaci";
}
commaOnlyOnX0() {
return ", iba v %s";
}
commaAndOnX0() {
return ", a v %s";
}
commaEveryX0Months() {
return ", každých %s mesiacov";
}
commaOnlyInX0() {
return ", iba v %s";
}
commaOnTheLastDayOfTheMonth() {
return ", posledný deň v mesiaci";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", posledný pracovný deň v mesiaci";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dní pred posledným dňom v mesiaci";
}
firstWeekday() {
return "prvý pracovný deň";
}
weekdayNearestDayX0() {
return "pracovný deň najbližšie %s. dňu";
}
commaOnTheX0OfTheMonth() {
return ", v %s v mesiaci";
}
commaEveryX0Days() {
return ", každých %s dní";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", medzi dňami %s a %s v mesiaci";
}
commaOnDayX0OfTheMonth() {
return ", %s. deň v mesiaci";
}
commaEveryX0Years() {
return ", každých %s rokov";
}
commaStartingX0() {
return ", začínajúcich %s";
}
daysOfTheWeek() {
return ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"];
}
monthsOfTheYear() {
return [
"Január",
"Február",
"Marec",
"Apríl",
"Máj",
"Jún",
"Júl",
"August",
"September",
"Október",
"November",
"December",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/sl.ts 0000664 0000000 0000000 00000006417 14775314346 0022173 0 ustar 00root root 0000000 0000000 // Slovenian
import { Locale } from "../locale";
export class sl implements Locale {
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Pri generiranju opisa izraza je prišlo do napake. Preverite sintakso izraza cron.";
}
at() {
return "Ob";
}
atSpace() {
return "Ob ";
}
atX0() {
return "ob %s";
}
atX0MinutesPastTheHour() {
return "ob %s.";
}
atX0SecondsPastTheMinute() {
return "ob %s.";
}
betweenX0AndX1() {
return "od %s do %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", od %s. do %s. dne v mesecu";
}
commaEveryDay() {
return ", vsak dan";
}
commaEveryX0Days() {
return ", vsakih %s dni";
}
commaEveryX0DaysOfTheWeek() {
return ", vsakih %s dni v tednu";
}
commaEveryX0Months() {
return ", vsakih %s mesecev";
}
commaEveryX0Years() {
return ", vsakih %s let";
}
commaOnDayX0OfTheMonth() {
return ", %s. dan v mesecu";
}
commaOnlyInX0() {
return ", samo v %s";
}
commaOnlyOnX0() {
return ", samo v %s";
}
commaAndOnX0() {
return "in naprej %s";
}
commaOnThe() {
return ", ";
}
commaOnTheLastDayOfTheMonth() {
return ", zadnji %s v mesecu";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", zadnji delovni dan v mesecu";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dni pred koncem meseca";
}
commaOnTheLastX0OfTheMonth() {
return ", zadnji %s v mesecu";
}
commaOnTheX0OfTheMonth() {
return ", %s v mesecu";
}
commaX0ThroughX1() {
return ", od %s do %s";
}
commaAndX0ThroughX1() {
return ", in od %s do %s";
}
everyHour() {
return "vsako uro";
}
everyMinute() {
return "vsako minuto";
}
everyMinuteBetweenX0AndX1() {
return "Vsako minuto od %s do %s";
}
everySecond() {
return "vsako sekundo";
}
everyX0Hours() {
return "vsakih %s ur";
}
everyX0Minutes() {
return "vsakih %s minut";
}
everyX0Seconds() {
return "vsakih %s sekund";
}
fifth() {
return "peti";
}
first() {
return "prvi";
}
firstWeekday() {
return "prvi delovni dan";
}
fourth() {
return "četrti";
}
minutesX0ThroughX1PastTheHour() {
return "minute od %s do %s";
}
second() {
return "drugi";
}
secondsX0ThroughX1PastTheMinute() {
return "sekunde od %s do %s";
}
spaceAnd() {
return " in";
}
spaceX0OfTheMonth() {
return " %s v mesecu";
}
lastDay() {
return "zadnjič";
}
third() {
return "tretji";
}
weekdayNearestDayX0() {
return "delovni dan, najbližji %s. dnevu";
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
commaStartingX0() {
return ", začenši %s";
}
daysOfTheWeek() {
return ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"];
}
monthsOfTheYear() {
return [
"januar",
"februar",
"marec",
"april",
"maj",
"junij",
"julij",
"avgust",
"september",
"oktober",
"november",
"december",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/sv.ts 0000664 0000000 0000000 00000006702 14775314346 0022202 0 ustar 00root root 0000000 0000000 // Swedish
import { Locale } from "../locale";
export class sv implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Ett fel inträffade vid generering av uttryckets beskrivning. Kontrollera cron-uttryckets syntax.";
}
everyMinute() {
return "varje minut";
}
everyHour() {
return "varje timme";
}
atSpace() {
return "Kl ";
}
everyMinuteBetweenX0AndX1() {
return "Varje minut mellan %s och %s";
}
at() {
return "Kl";
}
spaceAnd() {
return " och";
}
everySecond() {
return "varje sekund";
}
everyX0Seconds() {
return "varje %s sekund";
}
secondsX0ThroughX1PastTheMinute() {
return "sekunderna från %s till och med %s efter minuten";
}
atX0SecondsPastTheMinute() {
return "på %s sekunder efter minuten";
}
everyX0Minutes() {
return "var %s minut";
}
minutesX0ThroughX1PastTheHour() {
return "minuterna från %s till och med %s efter timmen";
}
atX0MinutesPastTheHour() {
return "på %s minuten efter timmen";
}
everyX0Hours() {
return "var %s timme";
}
betweenX0AndX1() {
return "mellan %s och %s";
}
atX0() {
return "kl %s";
}
commaEveryDay() {
return ", varje dag";
}
commaEveryX0DaysOfTheWeek() {
return ", var %s dag i veckan";
}
commaX0ThroughX1() {
return ", %s till %s";
}
commaAndX0ThroughX1() {
return ", och %s till %s";
}
first() {
return "första";
}
second() {
return "andra";
}
third() {
return "tredje";
}
fourth() {
return "fjärde";
}
fifth() {
return "femte";
}
commaOnThe() {
return ", den ";
}
spaceX0OfTheMonth() {
return " %sen av månaden";
}
lastDay() {
return "den sista dagen";
}
commaOnTheLastX0OfTheMonth() {
return ", på sista %s av månaden";
}
commaOnlyOnX0() {
return ", varje %s";
}
commaAndOnX0() {
return ", och på %s";
}
commaEveryX0Months() {
return ", var %s månad";
}
commaOnlyInX0() {
return ", bara på %s";
}
commaOnTheLastDayOfTheMonth() {
return ", på sista dagen av månaden";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", på sista veckodag av månaden";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s dagar före den sista dagen i månaden";
}
firstWeekday() {
return "första veckodag";
}
weekdayNearestDayX0() {
return "veckodagen närmast dag %s";
}
commaOnTheX0OfTheMonth() {
return ", på den %s av månaden";
}
commaEveryX0Days() {
return ", var %s dag";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", mellan dag %s och %s av månaden";
}
commaOnDayX0OfTheMonth() {
return ", på dag %s av månaden";
}
commaEveryX0Years() {
return ", var %s år";
}
commaStartingX0() {
return ", startar %s";
}
daysOfTheWeek() {
return ["söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"];
}
monthsOfTheYear() {
return [
"januari",
"februari",
"mars",
"april",
"maj",
"juni",
"juli",
"augusti",
"september",
"oktober",
"november",
"december",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/sw.ts 0000664 0000000 0000000 00000006745 14775314346 0022212 0 ustar 00root root 0000000 0000000 // Kiswahili
import { Locale } from "../locale";
export class sw implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Kuna tatizo wakati wa kutunga msemo. Angalia cron expression syntax.";
}
everyMinute() {
return "kila dakika";
}
everyHour() {
return "kila saa";
}
atSpace() {
return "Kwa ";
}
everyMinuteBetweenX0AndX1() {
return "Kila dakika kwanzia %s hadi %s";
}
at() {
return "Kwa";
}
spaceAnd() {
return " na";
}
everySecond() {
return "kila sekunde";
}
everyX0Seconds() {
return "kila sekunde %s";
}
secondsX0ThroughX1PastTheMinute() {
return "sekunde ya %s hadi %s baada ya dakika";
}
atX0SecondsPastTheMinute() {
return "sekunde %s baada ya dakika";
}
everyX0Minutes() {
return "kila dakika %s";
}
minutesX0ThroughX1PastTheHour() {
return "minutes %s through %s past the hour";
}
atX0MinutesPastTheHour() {
return "at %s minutes past the hour";
}
everyX0Hours() {
return "every %s hours";
}
betweenX0AndX1() {
return "kati ya %s na %s";
}
atX0() {
return "kwenye %s";
}
commaEveryDay() {
return ", kila siku";
}
commaEveryX0DaysOfTheWeek() {
return ", kila siku %s ya wiki";
}
commaX0ThroughX1() {
return ", %s hadi %s";
}
commaAndX0ThroughX1() {
return ", na %s hadi %s";
}
first() {
return "ya kwanza";
}
second() {
return "ya pili";
}
third() {
return "ya tatu";
}
fourth() {
return "ya nne";
}
fifth() {
return "ya tano";
}
commaOnThe() {
return ", kwenye ";
}
spaceX0OfTheMonth() {
return " siku %s ya mwezi";
}
lastDay() {
return "siku ya mwisho";
}
commaOnTheLastX0OfTheMonth() {
return ", siku ya %s ya mwezi";
}
commaOnlyOnX0() {
// return ", only on %s";
return ", kwa %s tu";
}
commaAndOnX0() {
return ", na pia %s";
}
commaEveryX0Months() {
return ", kila mwezi wa %s";
}
commaOnlyInX0() {
// return ", only in %s";
return ", kwa %s tu";
}
commaOnTheLastDayOfTheMonth() {
return ", siku ya mwisho wa mwezi";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", wikendi ya mwisho wa mwezi";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", siku ya %s kabla ya siku ya mwisho wa mwezi";
}
firstWeekday() {
return "siku za kazi ya kwanza";
}
weekdayNearestDayX0() {
return "siku ya kazi karibu na siku ya %s";
}
commaOnTheX0OfTheMonth() {
return ", siku ya %s ya mwezi";
}
commaEveryX0Days() {
return ", kila siku %s";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", kati ya siku %s na %s ya mwezi";
}
commaOnDayX0OfTheMonth() {
return ", siku ya %s ya mwezi";
}
commaEveryX0Years() {
return ", kila miaka %s";
}
commaStartingX0() {
return ", kwanzia %s";
}
daysOfTheWeek() {
return ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi"];
}
monthsOfTheYear() {
return [
"Januari",
"Februari",
"Machi",
"Aprili",
"Mei",
"Juni",
"Julai",
"Agosti",
"Septemba",
"Oktoba",
"Novemba",
"Desemba",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/th.ts 0000664 0000000 0000000 00000011432 14775314346 0022161 0 ustar 00root root 0000000 0000000 // English
import { Locale } from "../locale";
export class th implements Locale {
atX0SecondsPastTheMinuteGt20(): string | null {
return null;
}
atX0MinutesPastTheHourGt20(): string | null {
return null;
}
commaMonthX0ThroughMonthX1(): string | null {
return null;
}
commaYearX0ThroughYearX1(): string | null {
return null;
}
use24HourTimeFormatByDefault() {
return false;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "เกิดข้อผิดพลาดขณะสร้างคำอธิบายนิพจน์ ตรวจสอบไวยากรณ์นิพจน์ครอน";
}
everyMinute() {
return "ทุกๆ นาที";
}
everyHour() {
return "ทุกๆ ชั่วโมง";
}
atSpace() {
return "เมื่อ ";
}
everyMinuteBetweenX0AndX1() {
return "ทุกๆ นาที %s และ %s";
}
at() {
return "เมื่อ";
}
spaceAnd() {
return " และ";
}
everySecond() {
return "ทุกๆ วินาที";
}
everyX0Seconds() {
return "ทุกๆ %s วินาที";
}
secondsX0ThroughX1PastTheMinute() {
return "วินาที %s ถึง %s นาทีที่ผ่านมา";
}
atX0SecondsPastTheMinute() {
return "เมื่อ %s วินาที นาทีที่ผ่านมา";
}
everyX0Minutes() {
return "ทุกๆ %s นาที";
}
minutesX0ThroughX1PastTheHour() {
return "นาที %s ถึง %s ชั่วโมงที่ผ่านมา";
}
atX0MinutesPastTheHour() {
return "เมื่อ %s นาที ชั่วโมงที่ผ่านมา";
}
everyX0Hours() {
return "ทุกๆ %s ชั่วโมง";
}
betweenX0AndX1() {
return "ระหว่าง %s ถึง %s";
}
atX0() {
return "เมื่อ %s";
}
commaEveryDay() {
return ", ทุกๆ วัน";
}
commaEveryX0DaysOfTheWeek() {
return ", ทุกๆ %s วันของสัปดาห์";
}
commaX0ThroughX1() {
return ", %s ถึง %s";
}
commaAndX0ThroughX1() {
return ", %s ถึง %s";
}
first() {
return "แรก";
}
second() {
return "ที่สอง";
}
third() {
return "ที่สาม";
}
fourth() {
return "ที่สี่";
}
fifth() {
return "ที่ห้า";
}
commaOnThe() {
return ", ในวัน ";
}
spaceX0OfTheMonth() {
return " %s ของเดือน";
}
lastDay() {
return "วันสุดท้าย";
}
commaOnTheLastX0OfTheMonth() {
return ", ณ สุดท้าย %s ของเดือน";
}
commaOnlyOnX0() {
return ", เท่านั้น %s";
}
commaAndOnX0() {
return ", และใน %s";
}
commaEveryX0Months() {
return ", ทุกๆ %s เดือน";
}
commaOnlyInX0() {
return ", เท่านั้น %s";
}
commaOnTheLastDayOfTheMonth() {
return ", ในวันสิ้นเดือน";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", ในวันธรรมดาสุดท้ายของเดือน";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s วันก่อนวันสุดท้ายของเดือน";
}
firstWeekday() {
return "วันธรรมดาวันแรก";
}
weekdayNearestDayX0() {
return "วันธรรมดาที่ใกล้ที่สุด %s";
}
commaOnTheX0OfTheMonth() {
return ", ในวัน %s ของเดือน";
}
commaEveryX0Days() {
return ", ทุกๆ %s วัน";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", ระหว่างวัน %s และ %s ของเดือน";
}
commaOnDayX0OfTheMonth() {
return ", ในวัน %s ของเดือน";
}
commaEveryHour() {
return ", ทุกๆ ชั่วโมง";
}
commaEveryX0Years() {
return ", ทุกๆ %s ปี";
}
commaStartingX0() {
return ", เริ่ม %s";
}
daysOfTheWeek() {
return ["วันอาทิตย์", "วันจันทร์", "วันอังคาร", "วันพุธ", "วันพฤหัสบดี", "วันศุกร์", "วันเสาร์"];
}
monthsOfTheYear() {
return [
"มกราคม",
"กุมภาพันธ์",
"มีนาคม",
"เมษายน",
"พฤษภาคม",
"มิถุนายน",
"กรกฎาคม",
"สิงหาคม",
"กันยายน",
"ตุลาคม",
"พฤศจิกายน",
"ธันวาคม",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/tr.ts 0000664 0000000 0000000 00000006664 14775314346 0022206 0 ustar 00root root 0000000 0000000 // Turkish
import { Locale } from "../locale";
export class tr implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
everyMinute() {
return "her dakika";
}
everyHour() {
return "her saat";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "İfade açıklamasını oluştururken bir hata oluştu. Cron ifadesini gözden geçirin.";
}
atSpace() {
return "Saat ";
}
everyMinuteBetweenX0AndX1() {
return "Saat %s ve %s arasındaki her dakika";
}
at() {
return "Saat";
}
spaceAnd() {
return " ve";
}
everySecond() {
return "her saniye";
}
everyX0Seconds() {
return "her %s saniyede bir";
}
secondsX0ThroughX1PastTheMinute() {
return "dakikaların %s. ve %s. saniyeleri arası";
}
atX0SecondsPastTheMinute() {
return "dakikaların %s. saniyesinde";
}
everyX0Minutes() {
return "her %s dakikada bir";
}
minutesX0ThroughX1PastTheHour() {
return "saatlerin %s. ve %s. dakikaları arası";
}
atX0MinutesPastTheHour() {
return "saatlerin %s. dakikasında";
}
everyX0Hours() {
return "her %s saatte";
}
betweenX0AndX1() {
return "%s ile %s arasında";
}
atX0() {
return "saat %s";
}
commaEveryDay() {
return ", her gün";
}
commaEveryX0DaysOfTheWeek() {
return ", ayın her %s günü";
}
commaX0ThroughX1() {
return ", %s ile %s arasında";
}
commaAndX0ThroughX1() {
return ", ve %s ile %s arasında";
}
first() {
return "ilk";
}
second() {
return "ikinci";
}
third() {
return "üçüncü";
}
fourth() {
return "dördüncü";
}
fifth() {
return "beşinci";
}
commaOnThe() {
return ", ayın ";
}
spaceX0OfTheMonth() {
return " %s günü";
}
lastDay() {
return "son gün";
}
commaOnTheLastX0OfTheMonth() {
return ", ayın son %s günü";
}
commaOnlyOnX0() {
return ", sadece %s günü";
}
commaAndOnX0() {
return ", ve %s";
}
commaEveryX0Months() {
return ", %s ayda bir";
}
commaOnlyInX0() {
return ", sadece %s için";
}
commaOnTheLastDayOfTheMonth() {
return ", ayın son günü";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", ayın son iş günü";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s ayın son gününden önceki günler";
}
firstWeekday() {
return "ilk iş günü";
}
weekdayNearestDayX0() {
return "%s. günü sonrasındaki ilk iş günü";
}
commaOnTheX0OfTheMonth() {
return ", ayın %s";
}
commaEveryX0Days() {
return ", %s günde bir";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", ayın %s. ve %s. günleri arası";
}
commaOnDayX0OfTheMonth() {
return ", ayın %s. günü";
}
commaEveryX0Years() {
return ", %s yılda bir";
}
commaStartingX0() {
return ", başlangıç %s";
}
daysOfTheWeek() {
return ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"];
}
monthsOfTheYear() {
return [
"Ocak",
"Şubat",
"Mart",
"Nisan",
"Mayıs",
"Haziran",
"Temmuz",
"Ağustos",
"Eylül",
"Ekim",
"Kasım",
"Aralık",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/uk.ts 0000664 0000000 0000000 00000007566 14775314346 0022202 0 ustar 00root root 0000000 0000000 // Ukranian
import { Locale } from "../locale";
export class uk implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
everyMinute() {
return "щохвилини";
}
everyHour() {
return "щогодини";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "ВІдбулася помилка підчас генерації опису. Перевірта правильність написання cron виразу.";
}
atSpace() {
return "О ";
}
everyMinuteBetweenX0AndX1() {
return "Щохвилини між %s та %s";
}
at() {
return "О";
}
spaceAnd() {
return " та";
}
everySecond() {
return "Щосекунди";
}
everyX0Seconds() {
return "кожні %s секунд";
}
secondsX0ThroughX1PastTheMinute() {
return "з %s по %s секунду";
}
atX0SecondsPastTheMinute() {
return "о %s секунді";
}
everyX0Minutes() {
return "кожні %s хвилин";
}
minutesX0ThroughX1PastTheHour() {
return "з %s по %s хвилину";
}
atX0MinutesPastTheHour() {
return "о %s хвилині";
}
everyX0Hours() {
return "кожні %s годин";
}
betweenX0AndX1() {
return "між %s та %s";
}
atX0() {
return "о %s";
}
commaEveryDay() {
return ", щоденно";
}
commaEveryX0DaysOfTheWeek() {
return ", кожен %s день тижня";
}
commaX0ThroughX1() {
return ", %s по %s";
}
commaAndX0ThroughX1() {
return ", та %s по %s";
}
first() {
return "перший";
}
second() {
return "другий";
}
third() {
return "третій";
}
fourth() {
return "четвертий";
}
fifth() {
return "п'ятий";
}
commaOnThe() {
return ", в ";
}
spaceX0OfTheMonth() {
return " %s місяця";
}
lastDay() {
return "останній день";
}
commaOnTheLastX0OfTheMonth() {
return ", в останній %s місяця";
}
commaOnlyOnX0() {
return ", тільки в %s";
}
commaAndOnX0() {
return ", і в %s";
}
commaEveryX0Months() {
return ", кожен %s місяць";
}
commaOnlyInX0() {
return ", тільки в %s";
}
commaOnTheLastDayOfTheMonth() {
return ", в останній день місяця";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", в останній будень місяця";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s днів до останнього дня місяця";
}
firstWeekday() {
return "перший будень";
}
weekdayNearestDayX0() {
return "будень найближчий до %s дня";
}
commaOnTheX0OfTheMonth() {
return ", в %s місяця";
}
commaEveryX0Days() {
return ", кожен %s день";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", між %s та %s днями місяця";
}
commaOnDayX0OfTheMonth() {
return ", на %s день місяця";
}
commaEveryX0Years() {
return ", кожні %s роки";
}
commaStartingX0() {
return ", початок %s";
}
daysOfTheWeek() {
return ["неділя", "понеділок", "вівторок", "середа", "четвер", "п'ятниця", "субота"];
}
monthsOfTheYear() {
return [
"січень",
"лютий",
"березень",
"квітень",
"травень",
"червень",
"липень",
"серпень",
"вересень",
"жовтень",
"листопад",
"грудень",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/vi.ts 0000664 0000000 0000000 00000007506 14775314346 0022173 0 ustar 00root root 0000000 0000000 // English
import { Locale } from "../locale";
export class vi implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return null;
}
use24HourTimeFormatByDefault() {
return true;
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "Đã xảy ra lỗi khi tạo mô tả biểu thức. Vui lòng kiểm tra cú pháp biểu thức cron.";
}
everyMinute() {
return "mỗi phút";
}
everyHour() {
return "mỗi giờ";
}
atSpace() {
return "Vào ";
}
everyMinuteBetweenX0AndX1() {
return "Mỗi phút giữa %s and %s";
}
at() {
return "Vào";
}
spaceAnd() {
return " và";
}
everySecond() {
return "mỗi giây";
}
everyX0Seconds() {
return "mỗi %s giây";
}
secondsX0ThroughX1PastTheMinute() {
return "giây thứ %s qua phút thứ %s";
}
atX0SecondsPastTheMinute() {
return "tại giây thứ %s của mỗi phút";
}
everyX0Minutes() {
return "mỗi %s phút";
}
minutesX0ThroughX1PastTheHour() {
return "phút thứ %s qua %s tiếng";
}
atX0MinutesPastTheHour() {
return "vào %s phút của mỗi tiếng";
}
everyX0Hours() {
return "mỗi %s tiếng";
}
betweenX0AndX1() {
return "giữa %s và %s";
}
atX0() {
return "vào %s";
}
commaEveryDay() {
return ", mỗi ngày";
}
commaEveryX0DaysOfTheWeek() {
return ", mỗi %s ngày trong tuần";
}
commaX0ThroughX1() {
return ", %s đến %s";
}
commaAndX0ThroughX1() {
return ", %s đến %s";
}
first() {
return "đầu tiên";
}
second() {
return "thứ 2";
}
third() {
return "thứ 3";
}
fourth() {
return "thứ 4";
}
fifth() {
return "thứ 5";
}
commaOnThe() {
return ", trên ";
}
spaceX0OfTheMonth() {
return " %s của tháng";
}
lastDay() {
return "ngày cuối cùng";
}
commaOnTheLastX0OfTheMonth() {
return ", vào ngày %s cuối cùng của tháng";
}
commaOnlyOnX0() {
return ", chỉ trên %s";
}
commaAndOnX0() {
return ", và hơn %s";
}
commaEveryX0Months() {
return ", mỗi ngày %s tháng";
}
commaOnlyInX0() {
return ", chỉ trong %s";
}
commaOnTheLastDayOfTheMonth() {
return ", vào ngày cuối cùng của tháng";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", vào ngày cuối tuần của tháng";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s ngày trước ngày cuối cùng của tháng";
}
firstWeekday() {
return "ngày đầu tuần";
}
weekdayNearestDayX0() {
return "ngày trong tuần ngày gần nhất %s";
}
commaOnTheX0OfTheMonth() {
return ", vào ngày %s của tháng";
}
commaEveryX0Days() {
return ", mỗi %s ngày";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", giữa ngày %s và %s trong tháng";
}
commaOnDayX0OfTheMonth() {
return ", vào %s ngày trong tháng";
}
commaEveryHour() {
return ", mỗi tiếng";
}
commaEveryX0Years() {
return ", mỗi %s năm";
}
commaStartingX0() {
return ", bắt đầu %s";
}
daysOfTheWeek() {
return ["Chủ nhật", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7"];
}
monthsOfTheYear() {
return [
"Tháng 1",
"Tháng 2",
"Tháng 3",
"Tháng 4",
"Tháng 5",
"Tháng 6",
"Tháng 7",
"Tháng 8",
"Tháng 9",
"Tháng 10",
"Tháng 11",
"Tháng 12",
];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/zh_CN.ts 0000664 0000000 0000000 00000007202 14775314346 0022547 0 ustar 00root root 0000000 0000000 // Chinese (Simplified)
import { Locale } from "../locale";
export class zh_CN implements Locale {
setPeriodBeforeTime(): boolean {
return true;
}
pm(): string {
return "下午";
}
am(): string {
return "上午";
}
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return ", 从%s年至%s年";
}
use24HourTimeFormatByDefault() {
return false;
}
everyMinute() {
return "每分钟";
}
everyHour() {
return "每小时";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "生成表达式描述时发生了错误,请检查cron表达式语法。";
}
atSpace() {
return "在";
}
everyMinuteBetweenX0AndX1() {
return "在 %s 至 %s 之间的每分钟";
}
at() {
return "在";
}
spaceAnd() {
return " 和";
}
everySecond() {
return "每秒";
}
everyX0Seconds() {
return "每隔 %s 秒";
}
secondsX0ThroughX1PastTheMinute() {
return "在一分钟后的第 %s 到 %s 秒";
}
atX0SecondsPastTheMinute() {
return "在一分钟后的第 %s 秒";
}
everyX0Minutes() {
return "每隔 %s 分钟";
}
minutesX0ThroughX1PastTheHour() {
return "在整点后的第 %s 到 %s 分钟";
}
atX0MinutesPastTheHour() {
return "在整点后的第 %s 分钟";
}
everyX0Hours() {
return "每隔 %s 小时";
}
betweenX0AndX1() {
return "在 %s 和 %s 之间";
}
atX0() {
return "在%s";
}
commaEveryDay() {
return ", 每天";
}
commaEveryX0DaysOfTheWeek() {
return ", 每周的每 %s 天";
}
commaX0ThroughX1() {
return ", %s至%s";
}
commaAndX0ThroughX1() {
return ", 和%s至%s";
}
first() {
return "第一个";
}
second() {
return "第二个";
}
third() {
return "第三个";
}
fourth() {
return "第四个";
}
fifth() {
return "第五个";
}
commaOnThe() {
return ", 限每月的";
}
spaceX0OfTheMonth() {
return "%s";
}
lastDay() {
return "本月最后一天";
}
commaOnTheLastX0OfTheMonth() {
return ", 限每月的最后一个%s";
}
commaOnlyOnX0() {
return ", 仅%s";
}
commaAndOnX0() {
return ", 或者为%s";
}
commaEveryX0Months() {
return ", 每隔 %s 个月";
}
commaOnlyInX0() {
return ", 仅限%s";
}
commaOnlyInMonthX0() {
return ", 仅于%s份";
}
commaOnlyInYearX0() {
return ", 仅于 %s 年";
}
commaOnTheLastDayOfTheMonth() {
return ", 限每月的最后一天";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", 限每月的最后一个工作日";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", 限每月最后%s天";
}
firstWeekday() {
return "第一个工作日";
}
weekdayNearestDayX0() {
return "最接近 %s 号的工作日";
}
commaOnTheX0OfTheMonth() {
return ", 限每月的%s";
}
commaEveryX0Days() {
return ", 每隔 %s 天";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", 限每月的 %s 至 %s 之间";
}
commaOnDayX0OfTheMonth() {
return ", 限每月%s";
}
commaEveryX0Years() {
return ", 每隔 %s 年";
}
commaStartingX0() {
return ", %s开始";
}
dayX0() {
return " %s 号";
}
daysOfTheWeek() {
return ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
}
monthsOfTheYear() {
return ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"];
}
}
bradymholt-cRonstrue-71e0a25/src/i18n/locales/zh_TW.ts 0000664 0000000 0000000 00000006740 14775314346 0022607 0 ustar 00root root 0000000 0000000 // Chinese (Traditional)
import { Locale } from "../locale";
export class zh_TW implements Locale {
atX0SecondsPastTheMinuteGt20(): string|null {
return null;
}
atX0MinutesPastTheHourGt20(): string|null {
return null;
}
commaMonthX0ThroughMonthX1(): string|null {
return null;
}
commaYearX0ThroughYearX1(): string|null {
return ", 從 %s 年至 %s 年";
}
use24HourTimeFormatByDefault() {
return true;
}
everyMinute() {
return "每分鐘";
}
everyHour() {
return "每小時";
}
anErrorOccuredWhenGeneratingTheExpressionD() {
return "產生表達式描述時發生了錯誤,請檢查 cron 表達式語法。";
}
atSpace() {
return "在 ";
}
everyMinuteBetweenX0AndX1() {
return "在 %s 和 %s 之間的每分鐘";
}
at() {
return "在";
}
spaceAnd() {
return " 和";
}
everySecond() {
return "每秒";
}
everyX0Seconds() {
return "每 %s 秒";
}
secondsX0ThroughX1PastTheMinute() {
return "在一分鐘後的 %s 到 %s 秒";
}
atX0SecondsPastTheMinute() {
return "在一分鐘後的 %s 秒";
}
everyX0Minutes() {
return "每 %s 分鐘";
}
minutesX0ThroughX1PastTheHour() {
return "在整點後的 %s 到 %s 分鐘";
}
atX0MinutesPastTheHour() {
return "在整點後的 %s 分";
}
everyX0Hours() {
return "每 %s 小時";
}
betweenX0AndX1() {
return "在 %s 和 %s 之間";
}
atX0() {
return "在 %s";
}
commaEveryDay() {
return ", 每天";
}
commaEveryX0DaysOfTheWeek() {
return ", 每週的每 %s 天";
}
commaX0ThroughX1() {
return ", %s 到 %s";
}
commaAndX0ThroughX1() {
return ", 和 %s 到 %s";
}
first() {
return "第一個";
}
second() {
return "第二個";
}
third() {
return "第三個";
}
fourth() {
return "第四個";
}
fifth() {
return "第五個";
}
commaOnThe() {
return ", 在每月 ";
}
spaceX0OfTheMonth() {
return "%s ";
}
lastDay() {
return "最後一天";
}
commaOnTheLastX0OfTheMonth() {
return ", 每月的最後一個 %s ";
}
commaOnlyOnX0() {
return ", 僅在 %s";
}
commaAndOnX0() {
return ", 或 %s";
}
commaEveryX0Months() {
return ", 每 %s 月";
}
commaOnlyInX0() {
return ", 僅在 %s";
}
commaOnlyInMonthX0() {
return ", 僅在 %s";
}
commaOnlyInYearX0() {
return ", 僅在 %s 年";
}
commaOnTheLastDayOfTheMonth() {
return ", 每月的最後一天";
}
commaOnTheLastWeekdayOfTheMonth() {
return ", 每月的最後一個工作日";
}
commaDaysBeforeTheLastDayOfTheMonth() {
return ", %s 這個月的最後一天的前幾天";
}
firstWeekday() {
return "第一個工作日";
}
weekdayNearestDayX0() {
return "最接近 %s 號的工作日";
}
commaOnTheX0OfTheMonth() {
return ", 每月的 %s ";
}
commaEveryX0Days() {
return ", 每 %s 天";
}
commaBetweenDayX0AndX1OfTheMonth() {
return ", 在每月的 %s 和 %s 之間";
}
commaOnDayX0OfTheMonth() {
return ", 每月的 %s";
}
commaEveryX0Years() {
return ", 每 %s 年";
}
commaStartingX0() {
return ", %s 開始";
}
dayX0() {
return " %s 號";
}
daysOfTheWeek() {
return ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
}
monthsOfTheYear() {
return ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"];
}
}
bradymholt-cRonstrue-71e0a25/src/options.ts 0000664 0000000 0000000 00000000452 14775314346 0021040 0 ustar 00root root 0000000 0000000 export interface Options {
throwExceptionOnParseError?: boolean;
verbose?: boolean;
dayOfWeekStartIndexZero?: boolean;
monthStartIndexZero?: boolean;
use24HourTimeFormat?: boolean;
locale?: string | null;
/**
* @deprecated Timezone offset in minutes.
*/
tzOffset?: number;
}
bradymholt-cRonstrue-71e0a25/src/rangeValidator.ts 0000664 0000000 0000000 00000004363 14775314346 0022314 0 ustar 00root root 0000000 0000000 function assert(value: boolean, message: string) {
if (!value) {
throw new Error(message);
}
}
export default class RangeValidator {
static secondRange(parse: string) {
const parsed = parse.split(',');
for (let i = 0; i < parsed.length; i++) {
if (!isNaN(parseInt(parsed[i], 10))) {
const second = parseInt(parsed[i], 10);
assert(second >= 0 && second <= 59, 'seconds part must be >= 0 and <= 59');
}
}
}
static minuteRange(parse: string) {
const parsed = parse.split(',');
for (let i = 0; i < parsed.length; i++) {
if (!isNaN(parseInt(parsed[i], 10))) {
const minute = parseInt(parsed[i], 10);
assert(minute >= 0 && minute <= 59, 'minutes part must be >= 0 and <= 59');
}
}
}
static hourRange(parse: string) {
const parsed = parse.split(',');
for (let i = 0; i < parsed.length; i++) {
if (!isNaN(parseInt(parsed[i], 10))) {
const hour = parseInt(parsed[i], 10);
assert(hour >= 0 && hour <= 23, 'hours part must be >= 0 and <= 23');
}
}
}
static dayOfMonthRange(parse: string) {
const parsed = parse.split(',');
for (let i = 0; i < parsed.length; i++) {
if (!isNaN(parseInt(parsed[i], 10))) {
const dayOfMonth = parseInt(parsed[i], 10);
assert(dayOfMonth >= 1 && dayOfMonth <= 31, 'DOM part must be >= 1 and <= 31');
}
}
}
static monthRange(parse: string, monthStartIndexZero: boolean) {
const parsed = parse.split(',');
for (let i = 0; i < parsed.length; i++) {
if (!isNaN(parseInt(parsed[i], 10))) {
const month = parseInt(parsed[i], 10);
assert(
month >= 1 && month <= 12,
monthStartIndexZero ? 'month part must be >= 0 and <= 11' : 'month part must be >= 1 and <= 12'
);
}
}
}
static dayOfWeekRange(parse: string, dayOfWeekStartIndexZero: boolean) {
const parsed = parse.split(',');
for (let i = 0; i < parsed.length; i++) {
if (!isNaN(parseInt(parsed[i], 10))) {
const dayOfWeek = parseInt(parsed[i], 10);
assert(
dayOfWeek >= 0 && dayOfWeek <= 6,
dayOfWeekStartIndexZero ? 'DOW part must be >= 0 and <= 6' : 'DOW part must be >= 1 and <= 7'
);
}
}
}
} bradymholt-cRonstrue-71e0a25/src/stringUtilities.ts 0000664 0000000 0000000 00000001774 14775314346 0022557 0 ustar 00root root 0000000 0000000 export class StringUtilities {
/**
* Takes a string with '%s' placeholders and replaces them with provided values.
* Works like sprintf in C or string.Format in C#.
* @static
* @param {string} template - The string template with enclosed %s replacements
* @param {...string[]} values - The ordered replacement text
* @returns {string}
*/
static format(template: string, ...values: string[]): string {
return template.replace(/%s/g, function (substring: string, ...args: any[]): string {
return values.shift() as string;
});
}
/**
*
* Given a string and an array of search strings, determines if the string
* contains any value from the array.
* @static
* @param {string} text - The string to search
* @param {string[]} searchStrings - The array of values to search for
* @returns {boolean}
*/
static containsAny(text: string, searchStrings: string[]): boolean {
return searchStrings.some((c) => {
return text.indexOf(c) > -1;
});
}
}
bradymholt-cRonstrue-71e0a25/src/tsconfig.json 0000664 0000000 0000000 00000000440 14775314346 0021501 0 ustar 00root root 0000000 0000000 {
"compilerOptions": {
"module": "commonjs",
"target": "ES5",
"outDir": "../dist",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": false,
"sourceMap": true,
"declaration": true,
"composite":true
},
"include": ["./**/*.ts"]
}
bradymholt-cRonstrue-71e0a25/test/ 0000775 0000000 0000000 00000000000 14775314346 0017164 5 ustar 00root root 0000000 0000000 bradymholt-cRonstrue-71e0a25/test/cronParser.ts 0000664 0000000 0000000 00000004525 14775314346 0021660 0 ustar 00root root 0000000 0000000 import "mocha";
import { assert } from "chai";
import { CronParser } from "../src/cronParser";
describe("CronParser", function () {
describe("parse", function () {
it("should parse 5 part cron", function () {
assert.equal(new CronParser("* * * * *").parse().length, 7);
});
it("should parse 6 part cron with year", function () {
assert.equal(new CronParser("* * * * * 2015").parse()[6], "2015");
assert.equal(new CronParser("* * * * * 2015").parse()[0], "");
assert.equal(new CronParser("0/5 8-17 ? * MON-FRI *").parse()[2], "8-17");
assert.equal(new CronParser("0 8 1 * ? *").parse()[2], "8");
});
it("should error if expression is not a cron schedule", function () {
assert.throws(function () {
new CronParser("sdlksCRAPdlkskl- dds").parse();
}, "Expression has only 2 parts. At least 5 parts are required.");
});
it("should error if DOW part is not valid", function () {
assert.throws(function () {
new CronParser("* * * * MO").parse();
}, `Expression contains invalid values: 'MO'`);
});
it("does not allow unexpected characters or statements in any part", function () {
const maliciousStatement = "\nDROP\tDATABASE\tusers;";
for (let i = 0; i <= 6; i++) {
const cleanCronParts = ["*", "*", "*", "*", "*", "*", "*"];
cleanCronParts[i] = maliciousStatement;
const cronToTest = cleanCronParts.join(" ");
assert.throws(function () {
new CronParser(cronToTest).parse();
}, `Expression contains invalid values:`);
}
});
it("should parse cron with multiple spaces between parts", function () {
assert.equal(new CronParser("30 2 * * *").parse().length, 7);
assert.equal(new CronParser("* * * * * 2015").parse().length, 7);
});
it("should parse cron with multiple commas", function () {
assert.equal(new CronParser("5-45/10,*/5,9 * * * *").parse().length, 7);
});
it("dayOfWeek specified as comma", function () {
assert.equal(new CronParser("*/5 * * * * ,").parse()[5], "*");
});
it("dayOfWeek dangling comma", function () {
assert.equal(new CronParser("*/5 * * * * ,2").parse()[5], "2");
});
it("should parse cron @ expression", function () {
assert.equal(new CronParser("@weekly").parse().length, 7);
});
});
});
bradymholt-cRonstrue-71e0a25/test/cronstrue.ts 0000664 0000000 0000000 00000065355 14775314346 0021576 0 ustar 00root root 0000000 0000000 import "mocha";
import { assert } from "chai";
import cronstrue from "../src/cronstrue";
describe("Cronstrue", function () {
describe("every", function () {
it("* * * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every second");
});
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute");
});
it("0 * * * * (verbose)", function () {
assert.equal(cronstrue.toString("0 * * * *", { verbose: true }), "Every hour, every day");
});
it("* * * * * (verbose)", function () {
assert.equal(cronstrue.toString("* * * * *", { verbose: true }), "Every minute, every hour, every day");
});
it("*/1 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute");
});
it("*/5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every 5 minutes");
});
it("0 0/1 * * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute");
});
it("0 0 * * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour");
});
it("0 0 0/1 * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour");
});
it("* * * 3 *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, only in March");
});
it("* * * 3,6 *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, only in March and June");
});
it("* * * * * * 2013", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every second, only in 2013");
});
it("* * * * * 2013", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, only in 2013");
});
it("* * * * * 2013,2014", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, only in 2013 and 2014");
});
});
describe("interval", function () {
it("*/45 * * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every 45 seconds");
});
it("*/5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every 5 minutes");
});
it("*/10 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every 10 minutes");
});
it("0 */5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every 5 minutes");
});
it("0 9-17 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour, between 09:00 AM and 05:00 PM");
});
it("0 * ? * 2/1 *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour, Tuesday through Saturday");
});
it("0 * ? * 1/1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour, Monday through Saturday");
});
it("0 * ? * 2/1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour, Tuesday through Saturday");
});
it("0 52 13 ? * 3/1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 01:52 PM, Wednesday through Saturday");
});
});
describe("ranges", function () {
it("0 23 ? * MON-FRI", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 11:00 PM, Monday through Friday");
});
it("30 11 * * 1-5", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 11:30 AM, Monday through Friday");
});
it("0-10 11 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute between 11:00 AM and 11:10 AM");
});
it("23 12 * Jan-Mar *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, January through March");
});
it("23 12 * JAN-FEB *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, January through February");
});
it("1 1,3-4 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 1 minutes past the hour, at 01:00 AM and 03:00 AM through 04:59 AM"
);
});
it("* 0 */4 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every second, at 0 minutes past the hour, every 4 hours"
);
});
it("*/10 0 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every 10 seconds, at 0 minutes past the hour");
});
it("* 0 0 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every second, at 0 minutes past the hour, between 12:00 AM and 12:00 AM"
);
});
it("* 0 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, between 12:00 AM and 12:59 AM");
});
it("* 0 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every second, at 0 minutes past the hour");
});
});
describe("at", function () {
it("30 11 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { use24HourTimeFormat: true }), "At 11:30");
});
it("31 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { use24HourTimeFormat: true }), "At 10:31");
});
it("29 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:29 AM");
});
it("30 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:30 AM");
});
it("31 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:31 AM");
});
it("29 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:29 AM");
});
it("30 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:30 AM");
});
it("30 11 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 11:30 AM");
});
it("30 3 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 03:30 AM");
});
it("10 11 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { verbose: true }), "At 11:10 AM, every day");
});
it("30 22 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { use24HourTimeFormat: true }), "At 22:30");
});
it("5 1 * * 1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 01:05 AM, only on Monday");
});
it("5 23 * * 1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 11:05 PM, only on Monday");
});
it("30 11 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 11:30 AM");
});
it("23 12 * * SUN", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, only on Sunday");
});
it("30 02 14 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 02:02:30 PM");
});
it("0 0 6 1/1 * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 06:00 AM");
});
it("0 5 0/1 * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 5 minutes past the hour");
});
it("46 9 * * 1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 09:46 AM, only on Monday");
});
it("46 9 * * 7", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 09:46 AM, only on Sunday",
"7 should mean Sunday"
);
});
it("23 12 15 * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, on day 15 of the month");
});
it("23 12 * JAN *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, only in January");
});
it("23 12 ? JAN *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, only in January");
});
it("0 7 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 07:00 AM", "trailing space");
});
it("30 14,16 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 02:30 PM and 04:30 PM");
});
it("30 6,14,16 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 06:30 AM, 02:30 PM and 04:30 PM");
});
it("0 * 31 * 1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour, on day 31 of the month, and on Monday");
});
it("0 45 12 22,17,6,30,26 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:45 PM, on day 6, 17, 22, 26, and 30 of the month"
);
});
});
describe("weekday", function () {
it("* * LW * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, on the last weekday of the month");
});
it("* * WL * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, on the last weekday of the month");
});
it("* * 1W * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, on the first weekday of the month");
});
it("* * 13W * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every minute, on the weekday nearest day 13 of the month"
);
});
it("* * W1 * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, on the first weekday of the month");
});
it("* * 5W * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every minute, on the weekday nearest day 5 of the month"
);
});
it("* * W5 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every minute, on the weekday nearest day 5 of the month"
);
});
});
describe("last", function () {
it("* * * * 4L", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, on the last Thursday of the month");
});
it("*/5 * L JAN *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 5 minutes, on the last day of the month, only in January"
);
});
it("0 20 15,L * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 08:00 PM, on day 15 and the last day of the month"
);
});
it("0 20 1-10,20-L * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 08:00 PM, on day 1 through 10 and 20 through the last day of the month"
);
});
it("0 15 10 * * L", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:15 AM, only on Saturday");
});
it("0 15 10 L * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:15 AM, on the last day of the month");
});
it("0 0 0 L-5 * ?", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:00 AM, 5 days before the last day of the month"
);
});
});
describe("dayOfWeekStartIndexZero=false", function () {
it("23 12 * * 1#2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { dayOfWeekStartIndexZero: false }),
"At 12:23 PM, on the second Sunday of the month"
);
});
it("* * * ? * 2-6/2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { dayOfWeekStartIndexZero: false }),
"Every second, every 2 days of the week, Monday through Friday"
);
});
it("* * * ? * 7", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { dayOfWeekStartIndexZero: false }),
"Every second, only on Saturday"
);
});
it("* * * ? * 1,2,3,4,5", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { dayOfWeekStartIndexZero: false }),
"Every second, only on Sunday, Monday, Tuesday, Wednesday, and Thursday"
);
});
it("0 * ? * 1/1", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { dayOfWeekStartIndexZero: false }),
"Every hour, Sunday through Saturday"
);
});
it("0 * ? * 2/1", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { dayOfWeekStartIndexZero: false }),
"Every hour, Monday through Saturday"
);
});
});
describe("monthStartIndexZero=true", function () {
it("* * * 7 *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { monthStartIndexZero: true }),
"Every minute, only in August"
);
});
it("30 * * 6-8 *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { monthStartIndexZero: true }),
"At 30 minutes past the hour, July through September"
);
});
it("30 * * 1-10/2 *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { monthStartIndexZero: true }),
"At 30 minutes past the hour, every 2 months, February through November"
);
});
it("30 * * 4,5,6 *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { monthStartIndexZero: true }),
"At 30 minutes past the hour, only in May, June, and July"
);
});
it("30 * * JAN *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { monthStartIndexZero: true }),
"At 30 minutes past the hour, only in January"
);
});
});
describe("non-trivial expressions", function () {
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 5 minutes, between 03:00 PM and 03:59 PM, Monday through Friday"
);
});
it("* * * * MON#3", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every minute, on the third Monday of the month");
});
it("* * * * MON#3,THU#1", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every minute, on the third Monday and first Thursday of the month"
);
});
it("5-10 * * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Seconds 5 through 10 past the minute");
});
it("5-10 30-35 10-12 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Seconds 5 through 10 past the minute, minutes 30 through 35 past the hour, between 10:00 AM and 12:59 PM"
);
});
it("30 */5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 30 seconds past the minute, every 5 minutes");
});
it("10 0/5 * * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10 seconds past the minute, every 5 minutes");
});
it("2-59/3 1,9,22 11-26 1-6 ?", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 3 minutes, minutes 2 through 59 past the hour, at 01:00 AM, 09:00 AM, and 10:00 PM, between day 11 and 26 of the month, January through June"
);
});
it("23 12 * JAN-FEB * 2013-2014", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:23 PM, January through February, 2013 through 2014"
);
});
it("23 12 * JAN-MAR * 2013-2015", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:23 PM, January through March, 2013 through 2015"
);
});
it("12-50 0-10 6 * * * 2022", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Seconds 12 through 50 past the minute, minutes 0 through 10 past the hour, at 06:00 AM, only in 2022"
);
});
it("0 0/30 8-9 5,20 * ?", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 30 minutes, between 08:00 AM and 09:59 AM, on day 5 and 20 of the month"
);
});
it("23 12 * * SUN#2", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:23 PM, on the second Sunday of the month");
});
it("0 25 7-19/8 ? * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 25 minutes past the hour, every 8 hours, between 07:00 AM and 07:59 PM"
);
});
it("0 25 7-20/13 ? * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 25 minutes past the hour, every 13 hours, between 07:00 AM and 08:59 PM"
);
});
it("0 0 8 1/3 * ? *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 08:00 AM, every 3 days");
});
it("0 15 10 ? * */3", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 10:15 AM, every 3 days of the week");
});
it("* * * ? * 1-5/2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every second, every 2 days of the week, Monday through Friday"
);
});
it("0 5 7 2 1/3 ? *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 07:05 AM, on day 2 of the month, every 3 months"
);
});
it("0 15 6 1 1 ? 1/2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 06:15 AM, on day 1 of the month, only in January, every 2 years"
);
});
it("2,4-5 1 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 2 and 4 through 5 minutes past the hour, at 01:00 AM"
);
});
it("2,26-28 18 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 2 and 26 through 28 minutes past the hour, at 06:00 PM"
);
});
it("5/30 * * * * ?", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 30 seconds, starting at 5 seconds past the minute"
);
});
it("0 5/30 * * * ?", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 30 minutes, starting at 5 minutes past the hour"
);
});
it("* * 5/8 * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every second, every 8 hours, starting at 05:00 AM");
});
it("0 5 7 2/3 * ? *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 07:05 AM, every 3 days, starting on day 2 of the month"
);
});
it("0 5 7 ? 3/2 ? *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 07:05 AM, every 2 months, March through December"
);
});
it("0 5 7 ? * 2/3 *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 07:05 AM, every 3 days of the week, Tuesday through Saturday"
);
});
it("0 5 7 ? * ? 2016/4", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 07:05 AM, every 4 years, 2016 through 9999");
});
it("0 30 10-13 ? * wed,FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 30 minutes past the hour, between 10:00 AM and 01:59 PM, only on Wednesday and Friday"
);
});
it("0 00 10 ? * MON-THU,SUN *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 10:00 AM, only on Monday through Thursday and Sunday"
);
});
it("0 0 0 1,2,3 * WED,FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:00 AM, on day 1, 2, and 3 of the month, and on Wednesday and Friday"
);
});
it("0 2,16 1,8,15,22 * 1,2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 02:00 AM and 04:00 PM, on day 1, 8, 15, and 22 of the month, and on Monday and Tuesday"
);
});
it("0 */4,6 * * * ", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 0 minutes past the hour, every 4 hours and at 06:00 AM"
);
});
it("5 30 6,14,16 5 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 5 seconds past the minute, at 30 minutes past the hour, at 06:00 AM, 02:00 PM, and 04:00 PM, on day 5 of the month"
);
});
it("0-20/3 9 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 3 minutes, minutes 0 through 20 past the hour, between 09:00 AM and 09:59 AM"
);
});
it("5-45/10,*/5,9 * * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 10 minutes, minutes 5 through 45 past the hour, every 5 minutes, and at 9 minutes past the hour"
);
});
it("*/5 0-4,6-8 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every 5 minutes, at 12:00 AM through 04:59 AM and 06:00 AM through 08:59 AM"
);
});
it("* 1-2,22-23 * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"Every minute, at 01:00 AM through 02:59 AM and 10:00 PM through 11:59 PM"
);
});
});
describe("@ expressions", function () {
it("@yearly", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:00 AM, on day 1 of the month, only in January"
);
});
it("@annually", function () {
assert.equal(
cronstrue.toString(this.test?.title as string),
"At 12:00 AM, on day 1 of the month, only in January"
);
});
it("@monthly", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:00 AM, on day 1 of the month");
});
it("@weekly", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:00 AM, only on Sunday");
});
it("@daily", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:00 AM");
});
it("@midnight", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "At 12:00 AM");
});
it("@hourly", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Every hour");
});
});
describe("verbose", function () {
it("30 4 1 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { verbose: true }),
"At 04:30 AM, on day 1 of the month"
);
});
it("0 13 * * 1", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { verbose: true }), "At 01:00 PM, only on Monday");
});
});
describe("errors", function () {
it("second out of range", function () {
assert.throws(function () {
cronstrue.toString("61 * * * * *");
}, "seconds part must be >= 0 and <= 59");
});
it("minute out of range", function () {
assert.throws(function () {
cronstrue.toString("0 -1 * * * *");
}, "minutes part must be >= 0 and <= 59");
});
it("hour out of range", function () {
assert.throws(function () {
cronstrue.toString("0 0 24 * * *");
}, "hours part must be >= 0 and <= 23");
});
it("dayOfMonth out of range", function () {
assert.throws(function () {
cronstrue.toString("0 0 0 32 * *");
}, "DOM part must be >= 1 and <= 31");
});
it("month out of range", function () {
assert.throws(function () {
cronstrue.toString("0 0 0 1 13 *", { monthStartIndexZero: false });
}, "month part must be >= 1 and <= 12");
assert.throws(function () {
cronstrue.toString("0 0 0 1 13 *", { monthStartIndexZero: true });
}, "month part must be >= 0 and <= 11");
});
it("dayOfWeek out of range", function () {
assert.throws(function () {
cronstrue.toString("0 0 0 1 12 8", { dayOfWeekStartIndexZero: true });
}, "DOW part must be >= 0 and <= 6");
assert.throws(function () {
cronstrue.toString("0 0 0 1 12 8", { dayOfWeekStartIndexZero: false });
}, "DOW part must be >= 1 and <= 7");
});
it("garbage expression", function () {
assert.throws(function () {
cronstrue.toString("sdlksldksldksd");
}, "Error: Expression has only 1 part. At least 5 parts are required.");
});
it("too many parts", function () {
assert.throws(function () {
cronstrue.toString("* * * * * * * *");
}, "Expression has 8 parts; too many!");
});
it("empty expression", function () {
assert.throws(function () {
cronstrue.toString("");
}, "Error: cron expression is empty");
});
it("null expression", function () {
assert.throws(function () {
cronstrue.toString((null as any) as string);
}, "Error: cron expression is empty");
});
it("undefined expression", function () {
assert.throws(function () {
cronstrue.toString("");
}, "Error: cron expression is empty");
});
it("'W' list is invalid", function () {
assert.throws(function () {
cronstrue.toString("0 30 14 1W,15W * ? *");
}, "Error: The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.");
});
it("garbage expression with option (throwExceptionOnParseError = false)", function () {
assert.equal(
cronstrue.toString("garbage", { throwExceptionOnParseError: false }),
"An error occurred when generating the expression description. Check the cron expression syntax."
);
});
});
});
bradymholt-cRonstrue-71e0a25/test/i18n-fr.ts 0000664 0000000 0000000 00000017373 14775314346 0020733 0 ustar 00root root 0000000 0000000 import "mocha";
import { assert } from "chai";
import cronstrue from "../src/cronstrue-i18n";
import "../src/i18n/locales/fr";
describe("Cronstrue (fr)", function () {
before(function () {
cronstrue.defaultLocale = "fr";
});
describe("every", function () {
it("* * * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les secondes");
});
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes");
});
it("*/1 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes");
});
it("*/5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les 5 minutes");
});
it("0 0/1 * * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes");
});
it("0 0 * * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les heures");
});
it("0 0 0/1 * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les heures");
});
});
describe("interval", function () {
it("*/45 * * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les 45 secondes");
});
it("*/5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les 5 minutes");
});
it("*/10 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les 10 minutes");
});
it("0 */5 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les 5 minutes");
});
it("0 * ? * 2/1 *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les heures, de mardi à samedi");
});
it("0 * ? * 1/1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les heures, de lundi à samedi");
});
it("0 * ? * 2/1", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les heures, de mardi à samedi");
});
});
describe("ranges", function () {
it("23 12 * Jan-Mar *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 12:23, de janvier à mars");
});
it("23 12 * JAN-FEB *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 12:23, de janvier à février");
});
});
describe("at", function () {
it("29 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 10:29");
});
it("30 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 10:30");
});
it("29 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 10:29");
});
it("30 10 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 10:30");
});
it("23 12 * * SUN", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 12:23, uniquement le dimanche");
});
it("30 02 14 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 14:02:30");
});
it("0 0 6 1/1 * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 06:00");
});
it("0 5 0/1 * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "5 minutes après l'heure");
});
it("23 12 * JAN *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 12:23, uniquement en janvier");
});
it("23 12 ? JAN *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 12:23, uniquement en janvier");
});
});
describe("weekday", function () {
it("* * LW * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le dernier jour ouvrable du mois");
});
it("* * WL * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le dernier jour ouvrable du mois");
});
it("* * 1W * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le premier jour ouvrable du mois");
});
it("* * W1 * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le premier jour ouvrable du mois");
});
});
describe("choice", function () {
it("* * 3,8 * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le 3 et 8 du mois");
});
it("* * * * 2,6", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, uniquement le mardi et samedi");
});
it("* * 3 * 2", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le 3 du mois, et mardi");
});
it("* * 3 * 2,6", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le 3 du mois, et mardi et samedi");
});
it("* * 3,8 * 2", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le 3 et 8 du mois, et mardi");
});
it("* * 3,8 * 2,6", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le 3 et 8 du mois, et mardi et samedi");
});
it("* * 1,3,5,7,9 * 2,4,6", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le 1, 3, 5, 7, et 9 du mois, et mardi, jeudi, et samedi");
});
it("0,30,59 0,12,23 1,3,5,7,9 3,6,9,12 2,4,6", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "0, 30, et 59 minutes après l'heure, 00:00, 12:00, et 23:00, le 1, 3, 5, 7, et 9 du mois, et mardi, jeudi, et samedi, uniquement en mars, juin, septembre, et décembre");
});
});
describe("last", function () {
it("* * * * 4L", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le dernier jeudi du mois");
});
it("0 15 10 L * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "À 10:15, le dernier jour du mois");
});
});
describe("non-trivial expressions", function () {
it("* * * * MON#3", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, le troisième lundi du mois");
});
it("* * 5/8 * * ?", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les secondes, toutes les 8 heures, à partir de 05:00");
});
it("3/6 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les 6 minutes, à partir de 3 minutes après l'heure");
});
it("* 3/6 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, toutes les 6 heures, à partir de 03:00");
});
it("* * 3/6 * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, tous les 6 jours, à partir du 3 du mois");
});
it("* * * 3/6 *", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, tous les 6 mois, de mars à décembre");
});
it("* * * * 3/6", function () {
assert.equal(cronstrue.toString(this.test?.title as string), "Toutes les minutes, tous les 6 jours de la semaine, de mercredi à samedi");
});
});
});
bradymholt-cRonstrue-71e0a25/test/i18n.ts 0000664 0000000 0000000 00000042274 14775314346 0020324 0 ustar 00root root 0000000 0000000 import "mocha";
import cronstrue from "../src/cronstrue-i18n";
import chai = require("chai");
let assert = chai.assert;
describe("i18n", function () {
describe("de", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "de" }), "Jede Minute");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "de" }),
"Alle 5 Minuten, zwischen 15:00 und 15:59, Montag bis Freitag"
);
});
});
describe("es", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "es" }), "Cada minuto");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "es" }),
"Cada 5 minutos, entre las 15:00 y las 15:59, de lunes a viernes"
);
});
});
describe("fr", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "fr" }), "Toutes les minutes");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "fr" }),
"Toutes les 5 minutes, de 15:00 à 15:59, de lundi à vendredi"
);
});
});
describe("it", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "it" }), "Ogni minuto");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "it" }),
"Ogni 5 minuti, tra le 15:00 e le 15:59, lunedì al venerdì"
);
});
});
describe("id", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "id" }), "Setiap menit");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "id" }),
"Setiap 5 menit, diantara 15:00 dan 15:59, Senin sampai Jumat"
);
});
});
describe("nb", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "nb" }), "Hvert minutt");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "nb", use24HourTimeFormat: true }),
"Hvert 5 minutt, mellom 15:00 og 15:59, mandag til og med fredag"
);
});
it("0 5 1/1 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "nb", use24HourTimeFormat: true }),
"Kl.05:00"
);
});
it("15 11 * 1/1 MON#1", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "nb", use24HourTimeFormat: true }),
"Kl.11:15, på første mandag i måneden"
);
});
it("15 11 * 1/5 MON#1", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "nb", use24HourTimeFormat: true }),
"Kl.11:15, på første mandag i måneden, hver 5 måned"
);
});
it("0 7 * * MON,TUE,THU,FRI,SUN", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "nb", use24HourTimeFormat: true }),
"Kl.07:00, på mandag, tirsdag, torsdag, fredag, og søndag"
);
});
});
describe("sv", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "sv" }), "Varje minut");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "sv" }),
"Var 5 minut, mellan 15:00 och 15:59, måndag till fredag"
);
});
it("0 12 * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "sv" }), "Kl 12:00");
});
it("0 15 10 ? * 6#3", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "sv" }),
"Kl 10:15, den tredje lördagen av månaden"
);
});
it("0 0 15 ? * MON *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "sv" }), "Kl 15:00, varje måndag");
});
});
describe("nl", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "nl" }), "Elke minuut");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "nl" }),
"Elke 5 minuten, tussen 15:00 en 15:59, maandag t/m vrijdag"
);
});
});
describe("pl", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "pl" }), "Co minutę");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pl" }),
"Co 5 minut, od 15:00 do 15:59, od poniedziałek do piątek"
);
});
});
describe("pt_BR", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }), "A cada minuto");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"A cada 5 minutos, entre 15:00 e 15:59, de segunda-feira a sexta-feira"
);
});
it("*/5 15 * * MON-FRI,SUN", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"A cada 5 minutos, entre 15:00 e 15:59, somente de segunda-feira a sexta-feira e domingo"
);
});
it("45 10 * * 6#2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"Às 10:45, no segundo sábado do mês"
);
});
it("45 10 * * 0#3", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"Às 10:45, no terceiro domingo do mês"
);
});
it("45 10 * * 1#3", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"Às 10:45, na terceira segunda-feira do mês"
);
});
});
describe("pt_PT", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "pt_PT" }), "A cada minuto");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_PT" }),
"A cada 5 minutos, entre 15:00 e 15:59, de segunda-feira a sexta-feira"
);
});
it("45 10 * * 6#2", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"Às 10:45, no segundo sábado do mês"
);
});
it("45 10 * * 0#3", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"Às 10:45, no terceiro domingo do mês"
);
});
it("45 10 * * 1#3", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "pt_BR" }),
"Às 10:45, na terceira segunda-feira do mês"
);
});
});
describe("ro", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ro" }), "În fiecare minut");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "ro" }),
"La fiecare 5 minute, între 15:00 și 15:59, de luni până vineri"
);
});
});
describe("ru", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ru" }), "Каждую минуту");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "ru" }),
"Каждые 5 минут, с 15:00 по 15:59, с понедельника по пятницу"
);
});
});
describe("tr", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "tr" }), "Her dakika");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "tr" }),
"Her 5 dakikada bir, 15:00 ile 15:59 arasında, Pazartesi ile Cuma arasında"
);
});
});
describe("uk", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "uk" }), "Щохвилини");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "uk" }),
"Кожні 5 хвилин, між 15:00 та 15:59, понеділок по п'ятниця"
);
});
});
describe("zh_CN", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "zh_CN" }), "每分钟");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "zh_CN" }),
"每隔 5 分钟, 在 下午 03:00 和 下午 03:59 之间, 星期一至星期五"
);
});
});
describe("zh_TW", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "zh_TW" }), "每分鐘");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "zh_TW" }),
"每 5 分鐘, 在 15:00 和 15:59 之間, 星期一 到 星期五"
);
});
});
describe("he", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "he" }), "כל דקה");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "he" }),
"כל 5 דקות, 15:00 עד 15:59, יום שני עד יום שישי"
);
});
});
describe("da", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "da" }), "Hvert minut");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "da" }),
"Hvert 5. minut, mellem 15:00 og 15:59, mandag til og med fredag"
);
});
it("0 3 * * 4", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "da" }),
"Kl 03:00, på enhver torsdag"
);
});
it("0 3 * * 4,5", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "da" }),
"Kl 03:00, på enhver torsdag og fredag"
);
});
});
describe("fa", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "fa" }), "هر دقیقه");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "fa" }),
"هر 5 دقیقه, بین 15:00 و 15:59, دوشنبه تا جمعه"
);
});
});
describe("sl", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "sl" }), "Vsako minuto");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "sl" }),
"Vsakih 5 minut, od 15:00 do 15:59, od Ponedeljek do Petek"
);
});
});
describe("ca", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ca" }), "Cada minut");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "ca" }),
"Cada 5 minuts, entre les 15:00 i les 15:59, de dilluns a divendres"
);
});
});
describe("ko", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ko" }), "1분마다");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "ko" }),
"5분마다, 오후 03:00에서 오후 03:59 사이, 월요일에서 금요일까지"
);
});
});
describe("hu", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "hu" }), "Minden percben");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "hu" }),
"Minden 5. percben, 15:00 és 15:59 között, hétfő - péntek"
);
});
});
describe("af", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "af" }), "Elke minuut");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "af" }),
"Elke 5 minute, tussen 15:00 en 15:59, Maandag deur na Vrydag"
);
});
});
describe("th", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "th" }), "ทุกๆ นาที");
});
it("0 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "th" }), "ทุกๆ ชั่วโมง");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "th" }),
"ทุกๆ 5 นาที, ระหว่าง 03:00 PM ถึง 03:59 PM, วันจันทร์ ถึง วันศุกร์"
);
});
it("15 14 1 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "th" }),
"เมื่อ 02:15 PM, ในวัน 1 ของเดือน"
);
});
});
describe("ar", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ar" }), "كل دقيقة");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "ar" }),
"كل 5 دقائق, بين 15:00 و 15:59، الإثنين حتى الجمعة"
);
});
});
describe("my", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "my" }), "Setiap minit");
});
it("0 * * * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "my", use24HourTimeFormat: true }),
"Setiap jam"
);
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "my", use24HourTimeFormat: true }),
"Setiap 5 minit, antara 15:00 dan 15:59, Isnin hingga Jumaat"
);
});
it("0 5 1/1 * *", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "my", use24HourTimeFormat: true }),
"Pada 05:00"
);
});
it("15 11 * 1/5 MON", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "my", use24HourTimeFormat: true }),
"Pada 11:15, hanya pada Isnin, setiap bulan 5"
);
});
it("0 7 * * MON,TUE,THU,FRI,SUN", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "my", use24HourTimeFormat: true }),
"Pada 07:00, hanya pada Isnin, Selasa, Khamis, Jumaat, dan Ahad"
);
});
});
describe("bg", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "bg" }), "Всяка минута");
});
it("0 * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "bg" }), "Всеки час");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "bg" }), "Всеки 5 минути, от 15:00 до 15:59, от понеделник до петък");
});
});
describe("be", function () {
it("* * * * *", function () {
assert.equal(cronstrue.toString(this.test?.title as string, { locale: "be" }), "Кожную хвіліну");
});
it("*/5 15 * * MON-FRI", function () {
assert.equal(
cronstrue.toString(this.test?.title as string, { locale: "be" }),
"Кожныя 5 хвілін, з 03:00 PM па 03:59 PM, панядзелак па пятніца"
);
});
});
});
bradymholt-cRonstrue-71e0a25/test/stringUtilities.ts 0000664 0000000 0000000 00000001235 14775314346 0022737 0 ustar 00root root 0000000 0000000 import "mocha";
import { assert } from "chai";
import { StringUtilities } from "../src/stringUtilities";
describe("StringUtilities", function () {
describe("format", function () {
it("should format a string with no replacements", function () {
assert.equal(StringUtilities.format("Test"), "Test");
});
it("should format a string with one replacement", function () {
assert.equal(StringUtilities.format("Test %s", "one"), "Test one");
});
it("should format a string with multiple replacements", function () {
assert.equal(StringUtilities.format("Test %s %s %s", "one", "two", "three"), "Test one two three");
});
});
});
bradymholt-cRonstrue-71e0a25/test/tsconfig.json 0000664 0000000 0000000 00000000303 14775314346 0021667 0 ustar 00root root 0000000 0000000 {
"compilerOptions": {
"module": "CommonJS",
"target": "ES6",
"noImplicitAny": true,
"sourceMap": true
},
"references": [{ "path": "../src" }],
"include": ["./**/*.ts"]
}
bradymholt-cRonstrue-71e0a25/webpack-custom-loader.js 0000664 0000000 0000000 00000000200 14775314346 0022723 0 ustar 00root root 0000000 0000000 module.exports = function (source) {
const options = this.getOptions();
return options.process(this.resourcePath, source);
} bradymholt-cRonstrue-71e0a25/webpack.config.js 0000664 0000000 0000000 00000005120 14775314346 0021421 0 ustar 00root root 0000000 0000000 var webpack = require("webpack");
const TerserJsPlugin = require("terser-webpack-plugin");
var libraryName = require("./package.json").name;
var withLocalesSuffix = "-i18n";
var fs = require("fs");
var path = require("path");
var entryPoints = {
[libraryName]: "./src/cronstrue.ts",
[libraryName + ".min"]: "./src/cronstrue.ts",
[libraryName + withLocalesSuffix]: "./src/cronstrue-i18n.ts",
[libraryName + withLocalesSuffix + ".min"]: "./src/cronstrue-i18n.ts",
};
var localeEntryPoints = {};
for (let locale of fs.readdirSync("./src/i18n/locales")) {
const code = path.basename(locale, path.extname(locale));
localeEntryPoints[`locales/${code}`] = "./src/i18n/locales/" + locale;
localeEntryPoints[`locales/${code}.min`] = "./src/i18n/locales/" + locale;
}
module.exports = [
{
mode: "production",
entry: entryPoints,
output: {
path: __dirname + "/dist",
filename: "[name].js",
library: libraryName,
libraryTarget: "umd",
umdNamedDefine: true,
globalObject: "globalThis",
},
resolve: {
extensions: [".js", ".ts"],
},
module: {
rules: [
{
test: /\.ts$/,
loader: "ts-loader",
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserJsPlugin({
include: /\.min\.js$/,
}),
],
},
},
{
mode: "production",
entry: localeEntryPoints,
output: {
path: __dirname,
filename: "[name].js",
library: "[name]",
libraryTarget: "umd",
umdNamedDefine: true,
globalObject: "globalThis",
},
resolve: {
extensions: [".js", ".ts"],
},
externals: {
cronstrue: "cronstrue",
},
module: {
rules: [
{
test: /i18n[\/\\]locales/,
loader: "custom-loader",
options: {
process: function (resourcePath, source) {
let localeCode = resourcePath.match(/i18n[\/\\]locales[\/\\]([a-zA-Z_]+)\.ts$/)[1];
source = `\
var exports = __webpack_exports__;
${source}
import cronstrue from \"cronstrue\";
cronstrue.locales["${localeCode}"] = new ${localeCode}();
`;
return source;
},
},
},
{
test: /\.ts$/,
loader: "ts-loader",
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserJsPlugin({
include: /\.min\.js$/,
}),
],
},
resolveLoader: {
alias: {
"custom-loader": path.resolve(__dirname, "./webpack-custom-loader"),
},
},
},
];