pax_global_header00006660000000000000000000000064143437114530014517gustar00rootroot0000000000000052 comment=1d716245d1a5d2face0be7cc0a793d6778b84c5d cRonstrue-2.21.0/000077500000000000000000000000001434371145300135655ustar00rootroot00000000000000cRonstrue-2.21.0/.editorconfig000066400000000000000000000002231434371145300162370ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true end_of_line = lf charset = utf-8 cRonstrue-2.21.0/.github/000077500000000000000000000000001434371145300151255ustar00rootroot00000000000000cRonstrue-2.21.0/.github/FUNDING.yml000066400000000000000000000000251434371145300167370ustar00rootroot00000000000000github: [bradymholt] cRonstrue-2.21.0/.github/workflows/000077500000000000000000000000001434371145300171625ustar00rootroot00000000000000cRonstrue-2.21.0/.github/workflows/build.yml000066400000000000000000000010751434371145300210070ustar00rootroot00000000000000name: Build on: workflow_dispatch: push: branches: - master pull_request: # Base branches for PR branches: - master jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: [16, 18] steps: - uses: actions/checkout@v1 - name: Install Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - name: npm install run: npm install - name: npm test run: npm test env: CI: true cRonstrue-2.21.0/.github/workflows/publish.yml000066400000000000000000000032501434371145300213530ustar00rootroot00000000000000name: 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@v1 with: ref: refs/heads/master - 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}:${{secrets.PUBLISH_GITHUB_TOKEN}}@github.com/${GITHUB_REPOSITORY}.git - 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:master --tags echo "::set-output name=tag-name::$(git describe --tags --abbrev=0)" - name: Publish to npm run: | npm set //registry.npmjs.org/:_authToken ${{ secrets.NODE_AUTH_TOKEN }} npm publish - uses: actions/upload-artifact@v2 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 uses: softprops/action-gh-release@v1 with: tag_name: ${{ steps.push.outputs.tag-name }} generate_release_notes: true files: assets.zip cRonstrue-2.21.0/.gitignore000066400000000000000000000013551434371145300155610ustar00rootroot00000000000000# 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 cRonstrue-2.21.0/.tool-versions000066400000000000000000000000171434371145300164070ustar00rootroot00000000000000nodejs 16.14.2 cRonstrue-2.21.0/.vscode/000077500000000000000000000000001434371145300151265ustar00rootroot00000000000000cRonstrue-2.21.0/.vscode/launch.json000066400000000000000000000006431434371145300172760ustar00rootroot00000000000000{ "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 } ] } cRonstrue-2.21.0/.vscode/settings.json000066400000000000000000000000361434371145300176600ustar00rootroot00000000000000{ "files.exclude": { } } cRonstrue-2.21.0/.vscode/tasks.json000066400000000000000000000007151434371145300171510ustar00rootroot00000000000000{ "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" } ] } cRonstrue-2.21.0/CHANGELOG.md000066400000000000000000000002161434371145300153750ustar00rootroot00000000000000To see what has changed in a release version, see the release notes on the [Releases](https://github.com/bradymholt/cRonstrue/releases) page. cRonstrue-2.21.0/CONTRIBUTING.md000066400000000000000000000014671434371145300160260ustar00rootroot00000000000000Hello 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` cRonstrue-2.21.0/LICENSE000066400000000000000000000020651434371145300145750ustar00rootroot00000000000000The 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. cRonstrue-2.21.0/README.md000066400000000000000000000232551434371145300150530ustar00rootroot00000000000000# cRonstrue ![Build Status](https://github.com/bradymholt/cRonstrue/workflows/Build/badge.svg) [![NPM Package](https://img.shields.io/npm/v/cronstrue.svg)](https://www.npmjs.com/package/cronstrue) 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 - Supports [Quartz Job Scheduler](http://www.quartz-scheduler.org/) cron expressions - i18n support with 34 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" ``` 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/master/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 > 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-validator](https://www.npmjs.com/package/cron-validator) or [cron-parser](https://www.npmjs.com/package/cron-parser). > 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 - en - English ([Brady Holt](https://github.com/bradymholt)) - ar - Arabic ([Mohamed Nehad Shalabi](https://github.com/mohamednehad450)) - 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)) - 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)) - 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)) - zh_CN - Chinese (Simplified) ([Star Peng](https://github.com/starpeng)) - zh_TW - Chinese (Traditional) ([Ricky Chiang](https://github.com/metavige)) - be - Belarusian ([Kirill Mikulich](https://github.com/KirillMikulich)) - hu - Hungarian ([Orcsity Norbert](https://github.com/Northber), Szabó Dániel) - af - Afrikaans (Michael van Niekerk(https://github.com/mvniekerk)) ## License cRonstrue is freely distributable under the terms of the [MIT license](https://github.com/bradymholt/cronstrue/blob/master/LICENSE). cRonstrue-2.21.0/RELEASING.md000066400000000000000000000004231434371145300154170ustar00rootroot00000000000000The [.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. cRonstrue-2.21.0/bin/000077500000000000000000000000001434371145300143355ustar00rootroot00000000000000cRonstrue-2.21.0/bin/cli.js000077500000000000000000000014361434371145300154510ustar00rootroot00000000000000#!/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)); cRonstrue-2.21.0/bower.json000066400000000000000000000012411434371145300155740ustar00rootroot00000000000000{ "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"] } cRonstrue-2.21.0/docs/000077500000000000000000000000001434371145300145155ustar00rootroot00000000000000cRonstrue-2.21.0/docs/assets/000077500000000000000000000000001434371145300160175ustar00rootroot00000000000000cRonstrue-2.21.0/docs/assets/body-bg.jpg000066400000000000000000000043511434371145300200470ustar00rootroot00000000000000JFIFC C      ] TaG:r!ƭe#CDKJYX25BIVHTI4#BUC#Q0ƲXHMD0ЍQBՙ4HZ*bCQUM$6tk5T0*fr4 sJf49bMf,!1AQaq"2Bb?Ufo*r}e3xV/npkDgof޹O1"/OψN~EُڨAt79u8b]L߈A׼oNYsˎUe]-Lt MeZ|G7a#9\\S˜َT aoq[ơuE6My' @?Ӓ1IJ;0̇'KsΗPO"7J}̥^#;[?K358'"cԸ&.KQY!.ɴ1tg< x4 !5`P)xC]7,Sy5=u22Į !5ppKޥ٬jBAo9;N:lYnW{jkcT .n.f8@Aak?4`YdeFjy*-퓡'"/׼G3ssۨ@v%shnzP)tFNdӀ*%Zx΋E/<Ġ.b@uhB\kncQfoUp+Ebc_l~4 +8w##%].c`]{e;8fֆ ܲF3ɠb\'CUs(xc?hNbCs uq`Ch=R*:s83[>!%[~9v}e߁ hO1MK S2!'[+PZP) >P*xJ2~$wfZxjN / /"68hD1l%CSVNgwgN> s? q zk֖y}_u #N[>Q{uu@}, pMGb,G E,Ob#ֶa*!Z,Fga̗"XXK>t}2P`\=3Dޡ(/o0U!@<;7zۆ&⻀ Df =M{7-rk$Yo0y3c?遯yj C?xk? ̠N8lʼыCz_1o^kFY&ȩľ- XQ?r?rcRonstrue-2.21.0/docs/assets/body-bg.png000066400000000000000000000045411434371145300200540ustar00rootroot00000000000000PNG  IHDR=M (IDATx %W E?{CO-}3hWam|;ݞ^MU$ljj+L+T-e"Em|9u| A0谙K Eݱih-zqQ+{w[AۛiKWkn):^^"7m-Ԧ>PQ-vH%|ңM3yz CChӶ70XvP ߞWr$D#zIVq!s p~\M L﯊CWnp6v,58}JiQ;8Px1*B67iz6kvjn$0`#:A_T!l i C#967;dZeQdjpr-O#yOMü.O6t7̓vx'>$ÞY x^'΢ ^M.w4 @nt荢>h/݆8V u՜5>d&^jf\ÀnYm;e6A۲qNrv Noa1md̉paz[6}lsKGp+s?̚i$ C n_|1YYXQ3(=Vnό֐x`Qr{'c`\BƵZ4-Bv Z{:ȡW.zf4)HѬ \Sevw=)B]ƱgƑ(#G bq6vHv\hh-׺cR8~(kS t\s1zW `i V!z.&xzMec&lT=3ΫE糛Boo3㼒 R伒6S`p0%P*ݽxt..5/Nmmks&~f53KOaeq38ܪQLOZrVkoŝie1IQ1=08tR &^5tr'_6όSrݪk{ٛ$tDsUBo0PSBƛmhq,55WxJ3MKv-VUUW +A6+#bό֎5Mɘ%vɼj#KǕxUAڙK[e II(8Segznk<3ΫǦ];CWPC56\Ri\'^J\bʚܚvmL3LٌQِ)n Di"EǠj|3*4SI7-lMȭi Qy˽"NQ#LA#f g03?rL=+ɷ |;BaٙU7niuCCVfGn0qfq5x3jƗ?5R8g,&rWn݄|fWH؅BN`?[sNp"6ĵY+A;t{V=e]%57X3?:}&Sq^9&_֬gyugy5 hveꛛXL$|>p8Y~ܜD(2vό#h*?0WӺ:ODLf`GyeD3/̎jHm}(vRbBwUf>3N] `C;o]IA)jdܨR`5uMf~fWVrqL\Z(~3^u_هgm T-e8,/q9:43=)h$<3Ϋ½kECE弲 _ؗՙr$wٻ/wό1=T0{M%V++s)h{**|#̎l[>#o\̪Ve>q^]Ej;Cmzd{K06XR%Zհt3fqNJ3 5~?3Ϋy]aMC-};<;z;T3neriL ό\GHyWU׍M|fwW/ό*ؙJ$yfvwrOm2RΔiE7LSREW!όq^NS=W{PyUzq^ FdOvl0;vd `Pv> W.K.K.K.KҒ]bإ#c\IENDB`cRonstrue-2.21.0/docs/assets/download-button.png000066400000000000000000000650171434371145300216560ustar00rootroot00000000000000PNG  IHDRNaDfiIDATxۏUp侻P$l\ F" (JH (p08pL8 =>lر7v|>e{]rxOU]ﻎzj⍮zOkK\; ÷z}\[\(+>.w6gos1y<\ {a%}lXݽF^6ntX_ 뷯6Z'aw>,?w+'0yﵾY~%{eO.ڵ3rtX=aNκy]xk{y͹y]dX&O[ڹ#Dw",?z9sc'd}g(rFtz_>ȹ9kݳs36޸u1dQ`;˗A1_n9v%rt`>WdG GGMN<]ž2f@cyYNtٍ; 9s+]VM#4;7#ڌ}潄:@uWO@-H"ݶ&z r5{ IђeIT o(Pݑ+2|,22'u-_H%HJ#h^EJ$z$|w—tR|I萳CRPUߢh2{tW˟)<_퉭DWWe>Q$Jvv.2QLL@J$.UGrKK>G_\z)JM𳉞&ſ OCJ|UCu%! h* dX=/J:ȨĕL3PTbg(3;N@g,=k\ARTd:T0vS e9EohtG)WU1mNot;Ln!gYAޯ[͠^G:* I2TGbk`(z+nG\PQ&gA^3p%k6Qqqu6*W`[Z]>nFÄ 0(wTa  dG`&fhW_+Z8cԏ}.2KSuD5@]'27+gxY'61jP|9$|$qG6PR9MaЦ)m6 2wxeOpe1^lk8CmU(̼J12Q@) N3h(1Ji@E zAN=ŎII:LrPU5*dWQɽ(j^UɊ~@dY9b}܃a$PXg>eݪ]A$LPIιU#>ȹ;h ?$֗}TEl6 (!= h4ch:H&r%O<[@"F% wt+}G>"ߪ؆o0>$|ǾŽ4 ٤qo\;94DZDЖ@b92NƏ!A@eT2Y e~*)~@_ѪX( c^pF4Hx2y}?Ɲ+ʅzL&n*Kw HAtՁ_tN%؞,&KBwEn`i-TaN'>cӫ7N Y$`^ &lU,kCj 7@A^/^}N @ Ѱsb^"*)JTގ*},^L߆y>Jt.6z7]òٮV مZ@'K,Gէ0㕊 ÏcųYenc;N1d\B)uhqO&J`UA5%2͕^DE@(D-0{tl,C=?kzZmd>?SP EwF>($;n1΅-hitqi{H.-;n)E~c^2{AQWε䂘GZ!r9:Jl?daTY߽$Rp lyI!:֤( 4FVs6^e| g7̀%|b*pZSŘfS}/dQV.㑥E1p!Kyz%Q Q3B}dJ14F8*J*1&|o`#(KJh)S5G A0KD4BKR)ES33rs5fsUBw"'ȡԳ0qϡ<, /AOC43rZa%vC8?@Ǧ (^qlsȊ_<`AG$TQjE_πj uvɸ_5+еG(34[_%=;I\h%>P⏱*IĊ{(`52[/T86,7wҪ*v:$zC/@ͮruh=Ǩ4:6FTR9Se*]I?Mq"\&4OJǜJ$TjڨMXFUQ&%d8oϨKqJS9YG.M''Q땚Z)z"4k%BA]~h9U !nʱ4c(ٚlNG_~ֶōu:Iy/ȭs1Dv,%kr|akg9?yH#֢PyZ}Pt1GbG4`éĕmҏGGW6j5=: F!2FS9e} 8P_~bzl&9PQ## (Sȣb TyϟM @r+PN$f( U4phR3Z4NAŁ+lfvM%*o8z J(i^F5쑹ll:]Tt; %8$$V%㸂zEWbI0>ӳD/AM}UKq5gxIČWh'FVQ=Z*$p *gbECgQ7q܌@)J+ޱilTqf7 #>?9$ g4%3(T[`Ws>zA>Ǣ'`]dl6D ),5 eIl?f|o?8V⠐=헳/":$\/@$IbDљF-y]ۿ_٧@^Aׄ JzƖdqJUk^na{c1gy\yTpg@үdN\j@!!5)j2F+tSM:ك}eS,z` ML4U@ev( g6tE?G8c_^.>k1_I4<$" H5!':AaMLfy ѥu]׬ X \F^vq|<$-κ)Fy O *+O17ckr(M|z,*C.4ǯ{{5PW4mj6aR5$hQdg&Q,bdO`i:&lGmydyOPYzۀ'@(cߚʹ_<d*Tr5M3e#*2J @\vrΫ)|I_).IVhh.Q6Aâ2QW2/ }%q?7 ,@9ƒީstҪ1tЩxQSvSW}=RaDEP4ɗg()_'"8SrIQeuH^LЫɦq}f@½*2~v?SQ/s>TD 8 aqcU0w>L`b\^}֯7L/~׺WK_~ESFjh>(F.DUBU b"<Ldx9x5hP<|9d2AT$ T=g""RW5$g Ja=3\DϦ9в? 5*JcAKE@@Vɘ?xS*ҫZsd, %Cz=Ts?`s^UjZE'_ٻ:EC!*?Jջ$f (! {\ TD<E+j7JrOU>E_?L 6=қbv>?=&.Fh3Z.-eWy x`.<ߒn?әX/Vh-2Ia]C_ ͟(!U@.s 3Iz#Tj* (Y;5+8rҘ"YAΆx?_~YC+ՓS*n[6`82pt'2=#az5dĩ8 1%Ǫ(;XqJ2sRW-Qz'2gzi5G W=PxhC>F&d4ق~'Q? ptq^gV ԭs"! :{^^f?8*Vr87|2xr4 x /0@>dZrJA!*b@:1 d+F\+PP :֫7`8-!!Y#LӦ8h:!Jj/69B6k,l|}Q<0 HpEn NgCl^GA& 3'܈'3G pW"[L0s"צOͲ`JT[xP fO3kc0 V1:8뛌U~U!Y'ݎ5?go1,$.(6'Y5=@h+>.,0 M6_0Vq|O3d%'ѐDEx z]i}ÏG𧯭Ѓ ?O?/3F8N0 I]|~SghĎab Nfx$ӭC}PzpJ#X!FSʬ?wJFW@Зy)ϝ"tE0s0.&ٌ];~< rƟꡙʚ͞wMBQE~qI-b`l@_l*ɎЛoJ':0{Ѕjf*N|B TלUT obȦ9[iZ^ H؟z|ͿM:IU}&Q:kpg6]ɦ8!jUcCN~]3fA=(U Nqo]_@kT$VF3tghKk{?$ߍz).1*fi(z(Jp "0L{rJ ~h~7D;ͪ299h)r`'{&3,Ҫm (HdIZ%ukQa=(Шs$$*gdL<8fTP>;l\lb|* 2X(*+1큲IVU ۭ %=;$_"SDduO0EήG@~5 ov2K{A$gGrBb)&0{ÿBq[y-:mϞ Uk&Q f ϬAΛ] (cWAgrF\go2g/tƐ.۰W“F!z1RQd٨lWSݬIN܂@=' Zg Gfgڗ!tlBN(Q|_GqR9#Y`a nvnCXߤV>mEMTÜOnbJE>ʻ~6ߪ60P5n:WMJO>`7xj# ϡ"M}*0ƞO@SUF80sQ6f0>W:LJY>'8&(Pʖ8L H^/:@$GM:N qD;-yUʸSq$B%kv!b YѱMT~ Ýr\ex-*sږ9?|ho&IoKZ%XBܴN^Q^2Ƹ>d7O%oSPIPZ?BSn '2ka7(*ꈵ콁e5%TY@4rT|xuˑ}p5ڏU\1#CY64Y:#8wH?r }J:lI,Ȋ_~?kK;1?|z|Щ F PG&'FU@ k#N剌W P 6[U`n4>HZr^d !F!4l9rLc?CrԂ5jJ4Gf 55PI |qaٽ_ ]P=t5$Hb/$ɮJTυ 8vV)z۽JEcS_)OOx/vG\c#v͊| V$IP^Ith(AkM}&QPx Sq`J8N= @ǣDNԙB 7K<<\̚1  <9imί&;2po_(d4KJ~NtZAw# ?I@@/PَVAx*Ys}{GV., @dG=9rάB0G7,.dTYd+e 2H k8{]y3{(@:yT\~@aU*`JDCANP9BU^_Ϗ"6ZVFОqϫһ@ߑ/#93r$H5Gպ4F]"g=zܱK.mԦ{P,I,MupT Cxaz(.Ynhtnbn?r:w\e,Ϣo@"[ ' ~q<2C!OËd*n@ürx3!MM؄ h>Dw{ϥk_Iɿg%P]o0HiH2IWO1y%ښ/PRIN( J  f.`ѣW6Ё]#.rٙЮ*gDs{b$N_<5 ;/GUZ`ջU~$IBD2"d>[ھ*@K AD][8?tZIGĪj n1[Hb $ό^?yfxOѰRU w D6IE-0%y~&~荤f;0r=QdUf?+W9h0e#Xl?MQt?8GvY1(({|ZIb,cNwF(^@3ߡ$ Z$<xr nj|+S)n<USH2{ ?{~O;Q ÿ'Ο ߱{Օ8H{=-{S~ߺsOH* ];4􉃋$/h}F"[ άכrv%F 4CRA,$}ئhY>c85gl~KrC?D+Tܷ@Oc8KP٪ܑ*A7I`NA[]:6*ǢunV^l.)ѢM fA舆b, oUsF%iYUVX`M/Gya)OG-xޓ@Fe@$E/4ٔu/KtƩP|y` YW~?ٿk/Ƹy,J03H7ąwݺLEYutZNl1КQ'V*:'ܫUe?ȬQ\E?fFַg߭!* ɒК.AD_/4K ;8=gv`Mk[4z8'p`@'#322"#+Feh@pP[75tTԱ% (fx1ї[xh !TU"1xTшCE5Q@n4ytaEF鼩2cnk Ⴤu흁Cv$942hvOB\||}6Qv`SE_Xspr~N(PTIvU` Gapnݺ|Bd;2xY ړ?*h?>eOA 9Bئf*Y y9jƹEMF$t3G(o3v@W DtJ?nH@R"SsAM9{A͹#ʜ`)pć]m!21w"='yGg_jBH}*4n~P^tFrܽGy( nyϷ+]x#aΡ5 `qo-P0M)ؓ.%Nk#>}R$8L$4%kklNwdo»"/㼽vh =K~z֠z<7I|Dkӳg$GeK4D t}]pk{ ,W4z dȞ{ھ׳|6Da;/I=9m9M1:E-ӣؠ`\~{g'B<_9={8 A'" 3Q.~+ِY+h\,Q"iֈ]›nS%&7"deeBrjz׋ǍJЫW"ڇ$=@Cc{.AÌNwMӳe]-꨷P$9Srhodz29X2[2t!DmFC{{%#왖ً<%4=Q /^?|*}uD$Gɼ=/v]W1@ (^:f7 x=$lj"%H (OSDP} ʋre@J f ?}h*woNN&%Juy E~`0D]%N*|p!0L\:*'!>l9gpJ0g@ RJ (LI WuYnHvLbT D}pEK>4EB{ɞMvۥ`@ϑʞÿl4UBvO{h'WtRwIW\z84Ň~5Roa^c}q^Q|/?:I/3W` z`Dޝm=Sr?m>jx:~tA Y1ݷ*2NƺO 11[TC>=J6L%l5P~0 >F~dhC@qOG5INl-` {WU w^&0Q%!iL{a,z % & {(YA)YU PH|[/4]dh>@e@2]cevՍH2zr0+ʃpܪr=.JV⫽.Tɩk#i|JB!Ypҁ g'yvӏdS̿F;@o&]|K=iM' oh>+$q;6S`EIɯ]OUW}{ 8Q%J}W5ʼH1XԦP Zͳޔ:\J'AI8gwGb{82`EA('@ ň跾Wdؗ ȈZP33ݓl Ng t@?z${#%N%y4awJPs{'pɧ&K@ )={Np+&8i0vu!*'gD#GIMߣ_L$()Ėx|V72hj Z'*)"?KZeoS915 ?h9zJ3`Y%Ib^\'w},A=NLu4uЌCs0 2FDW!K4C4fR* _ߥ=MKp'K9TB1}x؞NVJ iF01ju$'vt1d"Jn}"T[(~TqgH֯؊L4yFC>JdBх 'hszmU%2X=9hʄҩd~({Ȥ$jM~b2y6>[$kKX~5;dRI O-@Em'IU1J 4C);q656/LbIrs=eq3/;% JםC.$=A+<Bܵ[=2a?X({ #N2JJHhq3I6UJ$j\S/LO ɼ\@؅g2AY ѽsZ ]84*G:Cb+ЗSȂTYAE(<Ǚϡ3sA'f=DQC~ MoK>:Wŕ$z2IR줿lD;GSNPzgK .%bTYBCU>"oC]^R{$欒v~s@H*UŴJ 2e$@D';4g2?(UޞH -c5w 9g$}? elYCۣiC*c:EUh%{ə}o=@bd;420 {[Hi9szd·p钪!؁t`>j!WN%- .֣As}QP;;2S3MB!5?|}iPe(I^;jNB" wސ.(q^.JՃI\80ZLT(U407}?ڋ Ĵpr6%^E-e4e#6 ] 5IB'LG&ʏ s]!˭qЬ֦ dY b*1 $MY2.cz rBM'ɚ.,o'3|kw&&t@L~c̾LTNPT5>H $+Ut.y@2 s jvH_ &Bc$tC{~6ުЭk@}`&qwh(%Fe(9n=1e@.mM6;}ɑهv+a`ή|DӒ{t5h='fs +vND t3xa-*F.@W =?j*YdXʢ )xVr&,q QwR¶j˾KPF#Dl~Gx.숳ft>3W-ʷP cz3T(N~7 qvQI<8wQt%2@=Na;+ j, 9\Y/6`.%Z66D; vv[z'YCOC6Ko>} TAܿ\b"/\r @g vzL%$^xɮ* Ȗ[E!p%<LUl(h[l96=ͶE@G"UN@=[PqU:ɁBcG9@MCZ tA aQ@JFvX-*$p!jku# KI]Xc:ipld`*FL~?7_\`4]bAdP|3}5|Sa=>{6$?Yw * iWMc<&CX|qBG0z}z/̟r&4[I(C@v/$SBU^hʐ#^@ֻ>8AˏEqA;JB @_( <=ٓ IA5xPślɎ`@֨t޷ Os(& :޹:i*G\8d'wGе7X( ~X8QWTQMBxa*L>:CbPJ$6أk2KC7,AÑTJAL}{K)ҷ02? 2bgE-xee|UP+'$ '~Mɜ娝JVEPa8N뻊;e[)Qe,F59Cϔ(%D* Ty9[i@^۽t.h/F=N㙄{VQ*ϡ,ЯȐ K?ձsTu>An`w#E5o/}.rd{U7_?A!15IWL 󎂙o%%Д\7P@z$[A n,p+ѥΝ|%74?I ʶ147?}G/4tywLrd+'fT!a0|W6ރ ԬPMa}3I(2.Qo5i*vPglU|/~4$>F);-YrP4=vO,!gk-%nD iInUYq=tf[E+s'(UW4;$s/P%o Iӛ;l*X j`FQF}S ߸>5!Q_!$pdo;dr~}Urw* K1Km Xz+~.K7V'#&ѹCߧګrA8phF ,#6J.e?SQvCW 6eޡ{OR` ЕnJNf4s# Dy{Ai lJ:z"i-$Kעwk0\`!|WDE|6. ԅ z F(̲=<3鞜Ge){oz $63,#@X&^*c%n$OI`r2v3xᆪ/<~ T Puzm~8k9 :q~ 1C>%̀@!Mh1"JgMĬm^{&=T>w5hz<,}>Aمf9})cxg;dT@GD/<#L]`uIAҠZOz\okQS#f2_\KMS <(Dׅ%H3h/Z> *V#);sUͪVNzwj$zItF _sC_{ 3@_vDe@dN#[c;=6ʼލ%u%bD9=U;ٙ7@cl5/WyŇe_8((K(F Y pfZ㴟/_ߺ\=?8ٿ~ ތL禑U1$ gL;B83ґ= AcM9=o!.4chT* ,w4L7[%ǶPYcJu%eNbԵu >b>DvùّzΞ1Jׄ]{wH4Ogn/0'8Uh,:l>c3{%;EF Uh@vw36uIS=1l)YXs!t+S&Ú͘7A3D*Q0&z8߾_2(m]Iy\`t<,/Erp[`CCh795aXosI SI۵3P_%Cz*t [TPUf a]t A!ю^*~cSEw/V֪%T&`Z8YcKdeU1 +zغ7ݱΗ[ "|bOHP$|Β{c0UQDvCfC< `$Rn ("{~|P d"5t1 꺆XԽ]> Rr. fiFוhZsC ev|Ksݵ-p"LpVdܰb t!fZ*IW7b*B^kNMHPHF2/MLazST74 @i%Pwk4_dzoLE[+wh^ t4YgS%j~<3I>A 8:^6y`:-p.|1,gD B#My wYugߑ(O׋x1x6z'|@#$dꀧ}qLH(pOS e(J bdCg#be}P0c5x8*H*݌xĿ''rȬQXd\ &? ˸lMvH%h/f "(4NF:9}Q);d'ȋfZ7*I8Ѷ͢1mJAtsݺTLzl'ђIv^8fB2>@0@U|Ci\'AvAF2sʉ X{JtMg Py=eip*~wU0R [IOϦ2} Ă᪓كi!&!JIAri QHY[ƀ8Slr{O!("3dSYT; @[Zmci0b#s ^5pճthk+_@II~CT T88VցB =Z*4f *)`Y+ّM;;zJ nH wOwϻ6.r>@`5(1(Y੸<( d1 ǡz&z%d[U +7pQ5P"zi'Ogk]`]C @5A)y ykn@PϱIR쏞 ]&P̡@lC1C.n PhW Lq(9&5WU〫iJ+w˘2Q!E @KݧקgTٝ*#f`h9vwQЩH,ȣ D w/!o*ֹ; )q uT$0R;ӂSHz  /ço Ek3ϞRD(I4Vɇz:>-@-`Z"L/( |P|[%@*Uz9:gG?Cx%VL pK]ņi~^GbdWz6ɐ/20֯/[-p)WN} ϡܘ& Qle^;h'r0P,tᢜ/dЉլDH \gFxO-8{Fw6(P ?5dPi2Hž@݃(YN%TKrl@)x|W-SPdڪ|J:4xti Ѓ$ !+TY= -hM؈}Wo`To8  ѧ%T*gLpS| 6bp:hL8a;}{{Η $Ǐ7?&+鬍qrDh]Ϝd5bAH_5Ym UbpD/~Hyp\[@jØʒ^d0@d*-<3uIóW ͕W{aʡgП>_ 6$lӡ fr&(pfqz'09„ *K U);$Mj}ǔPMahODoߜ }Y=DGT=Ş>U7` fwA/ݧ7z84{>/ ڭ ۙZrJz6)`g T˱{WZ> GK:N'GT w}:ScAMJЃ9oI1y9]U>HWJ;Ao[VCAea\ !W󎒴*S!azcpeZA iښ(8kBҚIJ9%#*q~*BzVڈz 75a\(IR5 ш.^|9SLtĨ6Yщ Qm^Nive,z&SW//^`j{;*V8&} 43>)Jhd.Փ/n`v^)d>{WX~*!߶V"kfd $&$Ѳt٪dѧ!&>j3۫n+>ʫ?$$Q/__|p{*/]UL'T$3Ie4pnkxdN{(8* )񞃎}U`7jSbF Bfd 3tA9 T^d,([Ƈv3W4u$ԫM $TI~I@ŸUpCtД^Ζ$OM.S!aCݣ TRL"p [f}[IFO I#p4p} %QUcQ!QV ŕ PܧO{t/EAUx,@mHPGǡ^V{%W:W%+H`fJ늱o_ I+~o2 I bB*F.^1Y/Y C^vzK.!7*')`ЧRhTcYg LP~]34&$0;eO$1v:q~k9Xea 5&5 l B/x$Nc_׈ B FPpg P(L J|[z+ԑIZcvHZsM[&@Qx)^3fq`Mn".Iѵ3ґ6hQd$pE&д[;YD܌Gk6!w /+ߑe^]Qȿ!-Lwx+kUx^' oǁs=^CwO<+xZ>C:&chtB7xuXޛ5>O A^#}ђ-IR@@͚Qd hݍО$2@'{n}P[2 vss@*RgC]yhMQ)s &YLЧHf'poO7ᄃf/_Y+:]$MxEiz|L~g(Ș4e#Y4gLھ6:9C.)69PQ[延u_/uzhrHNrGA+7 @eM<5fP)ݼB(]:Y#d~î3o 1KV2?LmO?W)SQֽں~#?ʌ&}67gu$H^ќlƌ#k]vV W{u& #Z$:VlguNe;#X }LwAwjrFU*9rʽ^ +ℴ IJipF+w2@%omUgeok$#58B%֙ F1l;.4X?N RdǴX&Slu[nj],Ǥ(HFgjpūͶ#Wz5d qicVD>vu86LqA2Fk_V/iHÂMQ#/5L5R( ._F_&JFߓęgLH#/2*IA.?~ҔK6,IACר 4ƙ}*9g4e rXv~D:tLZ!V/ԽfÝ!meso{P V@lTDc]aARZԩu~~lY(B-謧͑!ʫY+Bͦe@u@2S5IX2e:  Gymŧ$v$H0juUgE9jFABQJJw,$[Է Em$,7OPJ  E$<ꇂ!+Ej ?&au`hZiV H2u(O4CLbjEJ҂W@aAEn5=YջkPj݂TJ8ut) 2T)bMj*pPeHĦ{A{-[tY)IYiKsl/ R`cN&+Aү G~!J`U)T{N9,Inu:m=d6x#Z (%4DoO8W\&e5A|coM9U}x$./"[L}$/١26֛{y YJ=cתbM[ \s P`I3BٵFI 9jM"@ЛoHIENDB`cRonstrue-2.21.0/docs/assets/github-dark.css000066400000000000000000000060751434371145300207420ustar00rootroot00000000000000/* The MIT License (MIT) Copyright (c) 2016 GitHub, Inc. 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. */ .pl-c /* comment */ { color: #969896; } .pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */, .pl-s .pl-v /* string variable */ { color: #0099cd; } .pl-e /* entity */, .pl-en /* entity.name */ { color: #9774cb; } .pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */, .pl-s .pl-s1 /* string source */ { color: #ddd; } .pl-ent /* entity.name.tag */ { color: #7bcc72; } .pl-k /* keyword, storage, storage.type */ { color: #cc2372; } .pl-s /* string */, .pl-pds /* punctuation.definition.string, string.regexp.character-class */, .pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */, .pl-sr /* string.regexp */, .pl-sr .pl-cce /* string.regexp constant.character.escape */, .pl-sr .pl-sre /* string.regexp source.ruby.embedded */, .pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ { color: #3c66e2; } .pl-v /* variable */ { color: #fb8764; } .pl-id /* invalid.deprecated */ { color: #e63525; } .pl-ii /* invalid.illegal */ { color: #f8f8f8; background-color: #e63525; } .pl-sr .pl-cce /* string.regexp constant.character.escape */ { font-weight: bold; color: #7bcc72; } .pl-ml /* markup.list */ { color: #c26b2b; } .pl-mh /* markup.heading */, .pl-mh .pl-en /* markup.heading entity.name */, .pl-ms /* meta.separator */ { font-weight: bold; color: #264ec5; } .pl-mq /* markup.quote */ { color: #00acac; } .pl-mi /* markup.italic */ { font-style: italic; color: #ddd; } .pl-mb /* markup.bold */ { font-weight: bold; color: #ddd; } .pl-md /* markup.deleted, meta.diff.header.from-file */ { color: #bd2c00; background-color: #ffecec; } .pl-mi1 /* markup.inserted, meta.diff.header.to-file */ { color: #55a532; background-color: #eaffea; } .pl-mdr /* meta.diff.range */ { font-weight: bold; color: #9774cb; } .pl-mo /* meta.output */ { color: #264ec5; } cRonstrue-2.21.0/docs/assets/header-bg.jpg000066400000000000000000000223651434371145300203470ustar00rootroot00000000000000JFIFC   C  PAet⢑lQ"òTSGfjnvkB;aDqdFQ2m5`m{yAFy4fMP g ("8yĸvGl,#Q(6XJ0R%54`eea鉣mhL%% F e(6Q(6XJ0R%&Fw% F DbQ(6Y1SFFw% F DbQ(6Y1SFFw% F DbQ(6Y1SFFw% F DbQ(6Y1SFFw% F DbQ(6Y0/ lL3)$a&jrMUYؒHUL0PEI"HP4CHj3C "0 RH0E 4TMYqDJ5ThUQLUQFЪ;5Th%!DFUQJCQUF R4UIT3Ϥ%!DB"$5Th=gHJCQUF) EUD4IHj*U&z" P>R5hUQLD}!) EU$5Tj%!ET%!:HUT5 H5 DYj$hR4U$%SUDj)&*bFfβUUMj)$tThrU )Q#P)NXQ"REUF‰5•5 SP)Q#P)Nd4UTo5•5”F$j) $I4h*j*$j)̍BH# SHhUQT# TH# SF,($ѢxFF25 #P)NXQ"IEUFSP)Q#P)NdjFREMC#!"21B#3A7?)'{9;;ҭ5OQQ^AHԑo 2HA9VA%=:3y5d9}=2LX%dNO 'Ԗ$@D0A?ck+2y'ĠI0@uCP=ߤò@0t<8<7Mm샭?~Oda H?ybdFQ;(rhL4LՃb!$<=Yhޟ$N$XQh#(@f|ѕA#Dd\rv*}?C%ߢ=?R[ռ:9k-|% k'{w+t7F@>Np (+D䷇hI^d@] y$yV tb<- o#/ $hhgDdLhҭ3'EZdt$hL2dr5,(' [Խ vG,K&]#@$䃡$2f8/otwwZkhٱ?>?9EFM>Fd3@e5JyקF{~r9^ts<g9Ok{r ^ϣKO@HԢф^A3Bifz~ck#Uw=SS̉z9FhSx&^^d /3}OTWuOoO2%s]OM:xzގ:ieKG/C(\O)jֹ+W|rrO3&hM,Oyyzzj{xy/G(zoԾt3L-_x&^QɡH.L^2iD4kGOoR'T3,}]-==#KRFy9Yz( !$d#krẇ'+\_//C2fǗקF{~r96c6kA6pʱ*yFP6O֕p2q\=0n!Xya4zI¡'H&cnu $_`_3 lQ\k P&gҫQ{)X(wd> y{% e{opb3.®߅aӳ{`txCV|&5؃{7 _tWĮ~G?=$rђ,~w2'ѬĢ={^pxC^ӥSRk('I"e6ߕDߔdh{AɹhmTI?NL6,PGӥP@Cq* ]7k( F|XAg63YċtNΓue<Q䱉Mi;oDzx< =0 /<pbQbd-jo3s-jT1,mFF?(Ż|&kj%l.R\C3^{eۥUQgD_Dŵ/:U}[Gr:(077?YciS:F ϝ,ٯFN|iV.~+tɛJFbU=oL{<&5W<Įr"fQ~ȉf =. Ŷ쿙{įc*iggҬtϦĔ{ƎӼo#ʦLUoʢO(07$܍ Uo7ߔmqSC6/K~*m[E6k`5UpbΨ.8E"¦rs\&n4}}%CL`fbAiJ.~*)'Ԫh=TUu:zCUUTL0st67UCląH5?؏qUɘߙ]7%c~TpB6ToeUyk 3kjn~BFg=g7 nDs®^vpoqB J|iU |.q/#ݝš$OTJZ*9Gشulj*;"y^ƘJf?u_g<̪;skȉC,.&Ъyșhǝq*78u_q6F'fP7-쮜q \5 >ksEoEBZPsEtYo}+Kr,ʒŜ𫃹ڡO&F O8>4 OWU45TÅWS֫Y#]UUUPI6 ~roU~LJٙDs$9\\U|9a+uM5Riz^ യcL_hvťSyfUGDۋ^̗hUvdLec]וLTIx{~P|wU}WNKڐ.X mU\ ʢo7qfmpMèUHչڢㇺ,ҁ-Ȑ0nsUN rq2>AOYύ*υӂ%ec]וLTIx{~P|wU}WNKڐ.X mU\ ʢo7qfmpMèUHչڢㇺ,ҁ-Ȑ0nsUN rq2>AOYύ*υӂ%{S[ĉW^%Q3(q3C.<͕M_G~DO(M{V 矺gT5#F1?W&'[U8@ԪhasWSWԨꪪަm[TזʡLn%w wڽLD!^*6r=~uRi4M@T!dec]וLTIx{~P|wU}WNKڐ.X mU\ ʢo7qfmpMèUHչڢㇺ,ҁ-Ȑ0nsUN rq2>AOYύ*υӂ%{S[ĉW^%Q3(q3C.<͕M_G~DO(CH,*d\*KjEr| {Z*FU#RWL{~o}(܉ S?\t'/#Ҫ]8._zG;5H.}Us2{?d;iߓTq:TwD1}ۋO~yTv6%בn/4o>N ޑMo'{~%_-xGẉZx6U5N7ʇqhMWoet仈mᬅmpU[-, f :T[,8{~o}(܉ S?\t'/#Ҫ]8._zG;5H.}Us2{?d;iߓTq:TwD$4"q¦EBv^G(@ǵ\jR5 et\\,ҁ-Ȑ0nsUN rq2>AOYύ*υӂ%{S[ĉW^%Q3(q3C.<͕M_G~DO+iTl癕GcnbQy(vŗ%]/2}<&CǝoRe}rrCY71LLmnZ3U>WCsUM4SU0U]NS_R; KzMnNS^ZO*51(5j1$ez^ЪI5IHz5P>;Yv^U2np>mQ%1BOnZ3uU]9.j@k!`\*}Up2*a5…µ7?U#Vj3ߛJ"CxTW/;]87E8!?ǥf>4o>N ޑMo'{~%_-xGẉZx6U5N< #hH\ps/-!21k9TH]3!=Kr$7LprӃx\C_zVnsJnft້}"x'U׉Twq=\Lŧ~O3eSWQߑ4n/AOYύ*υӂ%{S[ĉW^%Q3(q3C.<͕M_G~DO(CH,*d\*KjEr| {Z*FU#RWL{~o}(܉ S?\t'/#Ҫ]8._zG;5H.}Us2{?d;iߓTq:TwD1}ۋO~yTv6%בn/mQ%1BOnZ3uU]9.k!!1A 0aQ?I,QE!QJkQMB1z_E=?5Pz%27I)a"+QQ5%^^*T&ؒXM"pez)fF΋Ӛ(ĺ~Yy(q^>%QCHT}|U ; RlsӒ? g%K5+P+f*THE ^bIi-TYT.VԭCRlrfjlJ+g%K1B+EKm%يE&R,IrfjlJ+g%K1[/.VJ=9(crT[9XZ0-Re"ϴ+fjVVTrrTC+RlsӒ? g%K%يE&R,IrfjlJ+g%K1[/.VJ=9(crT[9XZ0-Re"ϴ+fjVVTrrTC+RlsӒ? g%K%يE&R,IrfjlJ+g%K1[/.VJ=9(crT[3R g !1A0?mG%unC!Ϗ88d9a {LOt>}NR/Ɔ BX C 0< 4-,"56O[Ə \^mu ,ҳMN74&(e^VC$q>^Te#D6olv4Ż>-X\9OM,kC;`v8oN 5M-8K2 l 8K_XXCU!xt4uP8La6hmqPymq8؇mpg.5(/# ~E5qPkp'Kg]\,1ec8l8M\%;&h0J4&ɲ<77 ?ҳM$ɲm& 4D(?8"HN74&=XDsO VC,"q0x"HN74Od>g|G>rg"jg$6g$6rd7 84ZŇNpɓ @5f? (.8./ }~S 9.=?1陁4Q_xHݨAs!rgLZG17D.w?K=!6Hl X3eGQSyU2829yYe5ON!l@|u#uU?eF n,wH%k)}` 5Up!(ۼIee/P `Cqw\J`ǙgzKvO9qo>eΠ` z`+V7wcfPE50#]JoBek:yj6Rc1[rup@c P@`fAPuQE_Ga1\'{ô|\bX&,=G,P<ǟlRUF kte I=)QAp2M`zCX'C-шSDkG`t%u;: ;3Zlh@s,׏0kZX1O)35}s}{! Pt T,NP~qK=!s %΅BGxuA!L |J0>n$v]̢2Uy-+LXkj$ bw_Aiٛ}ΐ ,qġ:[!(Ь2d7,`;yOs0QI͏ʤǙI+鞊 #у3`^go_GL3?C;+0Eu 㱁>!g L%pX?!!5״#+0uo)_ƟqVQ4RFtA= ܽnk9G%\cg(fP .O3hD)ަ4~xچR83Cj4!<+AZAAf&08 Fz3A>9^~n# 4T9HE g'2(۩Y"jq]h~FP!0 ցzLk='~ӝ`2a$6B|n6p`&PY"E` $:۷nߤD sÖ@j #t*˄g99`7E<0jJ I]FE-WS#1} ĵɚCG(X#b%=w64xZc5=71G߼V^HV 6{BA~ImuHS9Ev70dsrcGpewtuôx;E(.7]qt1qmGUw{5 ~: a C5p5>:Bw?x9s'EӪ h%ee]uFˇ%-`WQZ'X)c;Iܟ3#7A HTϗ5? 8 azO'q0 +!"OC=!O!:BX1O7MrB }6cPrk/db1SI+u p;|*/>e@AL_Yz|h9d{8IXY?@`?~f>8sIK dBFS:taX y+m[~<Ä7%gD=!W-}e "XߥvZ g)QՔ"!V(2 Ee{1D6+ψQϴ 9S:raO#}%㧴|y/).&2X}@ ```Φ`AQg~/V!V=0"ǜ2{%A]9w>ҁsix,z!wb㧰=^%Pd&h{`opUlz%1܌D w1JσyK6Oñ,2(5Sϗo~^֔='GE ^gq˂1cf~~C e7:{a_XDM;0;l(FBr|BCK(5xYp%JSlfgWXA% ʴ3&(!0: Q-!l! x@6,q0n{-ާs_8^O}% #P^}{AfQO~{k>g_X&b*t_AQ?s?7>5XJ/{N%aHCcѼjudK  h$uiIH"ڪ3( 0hVM`g$au = Yk/̯l"xPk4PX>ǘ1ޔӀpm~6 h(81`QQ?MB~fC7טH}O!μK .B +4WD&&Ӽ]0&ؠh'mD^~"7^eAT4:t9u?{9AE׉`ؘ=LZvpcCOoJη}4Ǥec:[0cAz=f pff澘??g.)aCǩ#f<]L : ?C7Ӥ5`ž(iq8߉d$^ @TEu1kx20/!,*@^ӈ+:` ` 1` ^Sa>!5qp(NxqZ=bIWκpAҠ^L1:j k>!W#S>)r§Jgfu<:PWμN)b}58Bh>:8>Q0|B`hBuPG=aiLP:a~f-`Y0EBQ${x$ ͅGh4 : X 豘ϗ9˂檼DME@`Fp qmvGߺ V!;~Hɼ@b#69ǝ#+ ?o 7pc2y׬5ae}C0=f~U A27ÉY lCxOT|(VHt.*޶BE(@!^@P}_jo;0*tU̶49r'iDiy"@ 1Sgx771_B~g [9/eEҏuM}z?1 Yv ?x^o'>Ҳ ; ^r4;k8x1Ô-@[]cf1bz פ'tv +g9rㆠMqQ@e@(0ט@.?( @P4Ba _A(# GLAЅs-oΫZ.]QhK@`f!PjllJE50#FaOt פ F_MC֣e/K &G9: 0\*> 7W??T ?#0*Oxpjup=' ;kQW3X X(IߣP1fpB uє(gC7 uv I&0=L!Ӎ)^Z/ @wtwnuPf@Exwg]JcuGs*$ck3̿`;>'aA:A}GOo?_s#?Bnv8hBn]L=+hfuxfu*{z7OP0cVsn/|d v&0li@ڦ{d?h'yM`)zq]6Apv]E`'+YC#l @I~` Ps>?ῩW~T%: % BUt?lFL^Fz@U3Y?g"P dBGxbBa}6l3gaWw;.Qz*".Q(,յ(UF Cb #M>t^vX(B{(hV#2y7_ k: Q[}"=+]j@[0YCX=zJcQy0|ߤs |Gu0??Oхg3C}+!;#O>g$=,GΡGc}>VQ4P ?R 0;`- {(+tew4 E0bqY@8S뚁txƌІA[qk:Ӄz#pP /`΋{6} ~yx'|F8qĸ SG_S::mɔn/Yzƌ0|IJ`bevE,p!&KOe0A88Dzbt5 ClԢ^lw2M x:}}#GT h눺:x۷0uߤQ ]ZxXq'Zv81bˌ Ouہn52HR`P@Dl<9u>yJ\o&#/ 5\o!?RO¡#,r 2O3N~! W g^!$Ԡ;ܡfx(iמ {r>n5G\$ m2E9hA~I2<soaȝ7eB;g+Ԟp!{= cߤ-pdL C4]{bShFuKG,PKA3z?3Z8qcק.%C8:C =']̖RaǴÀ@B;uyΡ7xȏ@"'Eە3xHB/\a]q1ѵ:˹Mu%-`WQZ'X̧> f?}!]ʥ3РH9zCy*B. 7N y'U=^~#rV}Ϲqlx( (QghDX !-%@pm:~:=" ;0, pt]HP?qKZ/f`ekA ?%*t/ΡFg?`SSK&`'8/9?Ps/;9L:}]ǟ^~ߝC`{G'LJ4Cj,ڌh|/Oӱ;v}aodXLdS%ѭB+_hJ`Цrk/d^/=&(W: 5`xEzV5hcDb];.H[E(Vm<~,un!E pr{?!:7˫>""  ,@~!6CaA9C=\7:$j~<7]^%,o jW\_sAWNX~0`S :A&.8=~q3zΓJ&|_SЛЛ/⅍8(JȾ>3_M[^Q+e]x0rKP,W0s;{ILGG=!r1_|L;N?7v(|XH] c&!EQ0^eAT;(r=8Yo8dX&N5 ״6/h ݒg%IͳݘLgD(  ʴ3&(!0:"m/-!Bl>Fg]n_٩ѕ>?WVuXOq qfYiNBPYk0q +u =$BPleÛr&@%Y&c?ofs X&Z ȧɡ`dy{3qQ78C<<0Qz~arCh`8eI!:U) μzALj}X'8G!sxsĽ K9T3:8?ߧq\o1S% 4-c1CG((p􇟴gt!c 0~笭у{#,rUz#^p- OC#\wv~ J$sǬZ oa#>г~hzIߘ1Ƽ3JFuǼǘ>kφu}8^Gy60H?eG3!:>zan =/J>upF2%zJ× y'ɭWL%y4%9ˆPzJo- B%?q PO1$dyvt.*pamtY^+!E '8F.[DQz>v߼Z0Oqj߼ۭ\|}!CBΦ,D:r>\-\!chR A#,Ik둡-a^N#*#x7>|B~g  *~#g:ӏ WG cp\czb0Htz*bx}!Xlg Xbpo0Z04..CMBۮVNF7*tU' O]BGѕ@cp =-@[x71 םC P :Cg`ؿ߼97yaO4qjf,p:{pN!ظh7ڔ4?P+Zĵ֯YV^k1ȍ.}oH dN"o#hk9®`Ww Hayw1]o75Y}ɨz0#owQO=ci uXg3=ug3ak{!/'~b4q WʲGH_}X~1.ퟙU.r2D%fYndnu)怎-VvIhv  i: 0cbjPd`KDYV^k1<.xaydu b 9eP,RpbP ;>N l WA%Uw0:>CRX{~ R2#FI^_1br=~ݡ$Opd]q I!d 9h257@eRF=>uNjzA(Lw9A:6(n?hMDfs/t㰄Cr4Le?9:by u ޱ]#oL7 Jr!v_h " p/_;B@;70J~rB@ x]?ϯP=V+לD0R2#FI^|\W۴1@<@E ]$vF!6`# [dc2M&N*֋C`_:3BJ"GSMWxa=cc8я 7imtKrstOyAa &WomJH'GG?XX @w I>|G K5' >О3CЎ`B0>5> ɟ.=BCj?1 hCJud}X]_$&@@!>1(@09 `ۈNw=_= Xi(GVᱽ9̥nc-$k0 ʴk0BFhK( sdqd? s]@A9ܲ$C @|uQ>Y`ؾ}#`X 7nc<=3$s=𕒎=}S@<=֫2[5rqƣ',DƁ?@AԱ^dagk7RYWX=oyƣFOˀq3NG麍Xp\}cƌ}JOJVQI?.Dc8t`FXwOX.c>=j|BO$@<#BVJܳk6[5@WMFH/cT!&FϘc7^|zqH%YDofQbucBH,ݻ̒('GxJG\82u̖#Ss@4*N|tx&fCՍfBN#M%!)*XP>@An(gC7'aQ Y5t?BwfάBrYp_Ʊ9zJ Ә./@H&p2 ; %SYk@F=#wPuDd ֮^x~>!zF3wPu f/'V!?؏5zGU#DԲ*5, #hnЕ!^3a%ј< dZ I&0= o y: Y? \ 7X/&=CՍfBN#M%!)*XP>@An(gC7'`SQAp2M`zCX'C-шSDkG?8I]NNuhKO'0]ǘcq*{gb>Ö4͸/@l k*;Ȩ5}#ܺ;Ne#٬@M>wvks6ЖXY1kn ǙיjGlƬϹ|1qqrc g8Σ;7@;:3>_53wx} 1C +=(7ZARYZ;y>rƑ9=x*7g^a*b/,q?:Y~ah8ތ*P9 @ t%u;: ;ֆgPm, # 3jvAGe/C%Vw[eQ~"׈(U@Cb uqR"i6 l-1dV?yhvgz#3|`ZH9~?Pru0Zb6P GCx/wx 8o1#h\cz#ʌ.=j?|T`KP 0ߌFL}ǃ6C\|ĠШY4/X?b1 V뛉b0_U2 GAd0X2%.2J _-!PvO62͘$U3!e1X 8<ƖC 5&Ml0`rs( Ydo5GA 4t^ ^ad; 4?;He8t,DP MWκ+lJU@He+FϬz&w=ICdƮ0pr "@:pF 7)cgj>! )̆ [6n0 x_ult=2t?'"۬?Jc=:C x&& XOsgךy31(v4 g:Bg}|4N_\Bۤ=lOnc? c4vz5+d;uy=u6v;mMm:@/;,qKe Ь2d/oZu@XCfV:rG-QX/6}c4EOH 5q.{^ `D;ug}!4Ȱd ] b؄Y$i>!:(M1`.!tϺX?D9k;?;@k_1oe9G<8v?S=)rs@@oW3dp`>_p$9ZwɏfrƜ1Qw,CBeKr(Iۼ$ddX?A"!Ϩva8H>7 {GxYG@rn{X`wP׸rJ 7"h{EefptM1`.!tPAűI~]|Bxx|ˆ+Xvi"4.bI'-%f* <>Y/9t9@`x0MښW(O07{‚\YWJCĢej> sHsq)G򌔎ED6q>Rݸ z@k&g0bvʅ7N`'|‡ RsFُ<[G|_ܥ_]ʥ(i(o= 53N$+,42 ޡ_HQoQ[֫L|i\[O G򀒈:^!ENeAYD󰴖cB@B{Lע!3ؼwgpYO&K'0Фh@g^~#~-?ÉX=99" %tJ,s(B!!%IJ.MO]SǤDcVoqh}8q c'O]{(Uig\@h g&BIUCb%s#X]~;(xx$)Y,2BFI - ."(c8G8%@FAO|4 >(Hg:BI_+t$:p?n p#wS$!#֣$*6N4a]`#8F7tW #;O%> T}ww{B$^!%ı mߩ-;J?zPOާagGSLcg&&x5|(Q+yJ1iK{=$/%ns6Pt]P@D՛"~Dy1,zih 0~A6yޯ`d:u +]p pۙt1A!F-0iv|dmxt_?0 5wx8(X B C{uVo)V|DE7<@%߾$YGBm: xdr擼b5}+؋;]^?27 }cLprE~%rt+[d׌B e՟M wȲLc Q t0XA˸ W.=;Ή1u:kyeO \u5 c˚NpHtIlCb.lyux"XP6<]2™y}e?HU' (Eet=a$5lWE0,JG 3K.L#*'Dwfl酈Zt&'/⁡Q>eB2HHظEU omr0i@ZD*"gq ,d5 ,V,}N`407h͞q#@a, G>;nJ re]Xn pl;A]|@@$)ѮEiqلaoLٛ8Ĵt+;x1HL(ЅdZ>a'[:ι+ew=`/p86{ɐA]|F5d)Ѯr>a\UratP7gXP맰=79x?  * Dh0Gv-k{h3JՔ"!V(&ϼ;l3A]|@@$(90.*h0:z!h`wqЛМIFۄ`F;ez;duS 1+6"BX0pupK/(rP4=ل{H:X.r C=1,Da# MLĎK9e.W>&Bx" IN*!6jnvq",Y!yi Sq(r#)Al׈y~ XO\VH +k40"C&uIǧ4DPr:1kx20/%_C.mTTsHt Sq(r#)Al׈y~ XO\VH +k40"I,y{8h#Odȡ%|`XC/h6J*9th^:U˶-׈}L Vd q3gqTEu7Ӽ鑊Y9sGBUQP~yH a!Ӭ5N4:kX靜]hB] _b~x(z@^1[X8147 >?pO/f` =?Q*"Öy^;Ł1},f=qsh8CXjwFC0 01@!L dC3LB~x(z@^1[X8147 >?pO/f` =?Q*"Öy^;Ł1} 1aUdDǡH1\0ŀ7 yOC[k *Vc8 (È0@7ϴ,ߚ8VkDDƋwC @#j*г~hk16]BJdQ]/COpD#e~|@G pbT::~Th{g^f,0 (Fɴ7V>~D[?@Xtq`G$ h)DKAy30nT6AX'< PmP Qb[$E44B6P7'r%@^ӯ#F|u`" ҄lCqUc4I@l/D ͅG~@”@-L{34nTv+vQX  ihloO؂is/iC>:0d`YiB6M$r6H㰰e<G%L:,fa|eBmc>Â-pK+!]S"@ @߼#X{N8י#L2+Jm U$k@76w<Z# Q~^GE/ە EV0 kX!w )G!t =M q;PaQy0pD,&UXFlP$ saay,e0 , gtXd;3 Wt p}J?0,;`YJ"+^g"O06_o9^S[≮w5^^kݓR|g.O0]s+HRg{ ߞc!ٞ H[_{{QaQ] 9}9~ beù'/jWh_Z݋8v|yzyǤ8f^( W G*oYJ%'%beùs%?)_*ǘ{3\ô/~}d;3 Wt p}J?0,;`YJ"+^g"O06_o9^S[≮w5^^kݓR|g.O0]s+HRg{ ߞc!ٞ H[_{{QaQ] 9}9~ beù'/jWh_Z݋8v|y??cRonstrue-2.21.0/docs/assets/hr.png000066400000000000000000000002021434371145300171300ustar00rootroot00000000000000PNG  IHDR6ݤIIDATx1 <8PLt)'i-\I1Ҟ9W$|k&ӻ^}7m%I׆IENDB`cRonstrue-2.21.0/docs/assets/octocat-icon.png000066400000000000000000000007351434371145300211140ustar00rootroot00000000000000PNG  IHDR/WIDATHǵJBQ/ =B}hQA ʠEil#(ǢiZઅA24]f3z:/zԁ?g~9^ @Q3P/Ğ"XWTMɉjUrVb%Fm{(oZQnlJYx9p pO=( пV~ ~vwܟPˑC.9*n/:͓@%G^9:ڞ# \ \]P^NR|byN57ab-_=wMOipG;FΥWeO3Nhڰ[|0ju擩oʚCް-,*aHkqM4cKU/W'S.k F5a0CT.f?QkIIENDB`cRonstrue-2.21.0/docs/assets/sidebar-bg.jpg000066400000000000000000000043361434371145300205260ustar00rootroot00000000000000JFIFC   C f@,y {X|>_OH /,Y@^ 'U Rq,bU,XY,7F 4ҠTe"P2( Z /:TXdz /KՋVX2fN5=XZ2u= +R,ԫF^,e +eFf 3J烾,mYbŜ=+ؤ} `9@sXX*>?xYe£ ,x _01!A@?hhhhm[Vյm[FѴnp38[ g'˳2 3( 3(fP3(fPq@̠fPqAe2@̠2 g3Lg(62jڶVյhh'!1AQaq ?Kd!]Hqe;YȦ&F&cO([0jRVHܕr4., tq(-S%68"9Sv|)΅HG; 0HBY:.Jc"&41`E'm#ޜ3܏Y_b%G#bY%$ydw.ǒ7ъX#Dz"|. A]w:'֊" .ɞtV%NtX#wBG؛ rzY}^E0UQ7/ 2|Ev)99[=P(o"aϴ+6=M$fؚا9b DM'اHwb2`D3qօUR䔡O[O*QEOĜQ,rEß'ZM;ꘑAk܉ZVi0hQt*hs(J YB+ $y*'ބgt<+OfD dL)"Ɖdtm"΅EIHѝadM)[+%=BvTZ'+EO 92`_u%R<.Z @H Q^d8Kub.t)q8SЬP}u4rr,}FC-l7zO(Who"aϴ+6=(#W%C0.֞9HDD|tv,Jz!c&4"b8BJPQIDQEOĜQ-:s"p~QIb_lz nD+4ޘ]K:dX9ΎrPRЬ!\QUJzδ dY=""FEcDVQ2:6gBm]FDћ!|ngvTZ'+E|XTf0A/Fc3 H Q^d8KubRW:I =A.v BAȉ"VfO?L?LcRonstrue-2.21.0/docs/assets/stylesheet.css000066400000000000000000000170361434371145300207310ustar00rootroot00000000000000/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { padding: 0; margin: 0; font: inherit; font-size: 100%; vertical-align: baseline; border: 0; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-spacing: 0; border-collapse: collapse; } /* LAYOUT STYLES */ body { font-family: 'Helvetica Neue', Helvetica, Arial, serif; font-size: 1em; line-height: 1.5; color: #6d6d6d; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); background: #e7e7e7 url(./body-bg.png) 0 0 repeat; } a { color: #d5000d; } a:hover { color: #c5000c; } header { padding-top: 35px; padding-bottom: 25px; } header h1 { font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-size: 48px; font-weight: 900; line-height: 1.2; color: #303030; letter-spacing: -1px; } header h2 { font-size: 24px; font-weight: normal; line-height: 1.3; color: #aaa; letter-spacing: -1px; } #container { min-height: 595px; background: transparent url(./highlight-bg.jpg) 50% 0 no-repeat; } .inner { width: 620px; margin: 0 auto; } #container .inner img { max-width: 100%; } #downloads { margin-bottom: 40px; } a.button { display: block; float: left; width: 179px; padding: 12px 8px 12px 8px; margin-right: 14px; font-size: 15px; font-weight: bold; line-height: 25px; color: #303030; background: #fdfdfd; /* Old browsers */ background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */ background: linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */ border-top: solid 1px #cbcbcb; border-right: solid 1px #b7b7b7; border-bottom: solid 1px #b3b3b3; border-left: solid 1px #b7b7b7; border-radius: 30px; -webkit-box-shadow: 10px 10px 5px #888; -moz-box-shadow: 10px 10px 5px #888; box-shadow: 0px 1px 5px #e8e8e8; -moz-border-radius: 30px; -webkit-border-radius: 30px; } a.button:hover { background: #fafafa; /* Old browsers */ background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */ background: linear-gradient(top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */ border-top: solid 1px #b7b7b7; border-right: solid 1px #b3b3b3; border-bottom: solid 1px #b3b3b3; border-left: solid 1px #b3b3b3; } a.button span { display: block; height: 23px; padding-left: 50px; } #download-zip span { background: transparent url(./zip-icon.png) 12px 50% no-repeat; } #download-tar-gz span { background: transparent url(./tar-gz-icon.png) 12px 50% no-repeat; } #view-on-github span { background: transparent url(./octocat-icon.png) 12px 50% no-repeat; } #view-on-github { margin-right: 0; } code, pre { margin-bottom: 30px; font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; font-size: 14px; color: #222; } code { padding: 0 3px; background-color: #f2f2f2; border: solid 1px #ddd; } pre { padding: 20px; overflow: auto; color: #f2f2f2; text-shadow: none; background: #303030; } pre code { padding: 0; color: #f2f2f2; background-color: #303030; border: none; } ul, ol, dl { margin-bottom: 20px; } /* COMMON STYLES */ hr { height: 1px; padding-bottom: 1em; margin-top: 1em; line-height: 1px; background: transparent url('./hr.png') 50% 0 no-repeat; border: none; } strong { font-weight: bold; } em { font-style: italic; } table { width: 100%; border: 1px solid #ebebeb; } th { font-weight: 500; } td { font-weight: 300; text-align: center; border: 1px solid #ebebeb; } form { padding: 20px; background: #f2f2f2; } /* GENERAL ELEMENT TYPE STYLES */ h1 { font-size: 32px; } h2 { margin-bottom: 8px; font-size: 22px; font-weight: bold; color: #303030; } h3 { margin-bottom: 8px; font-size: 18px; font-weight: bold; color: #d5000d; } h4 { font-size: 16px; font-weight: bold; color: #303030; } h5 { font-size: 1em; color: #303030; } h6 { font-size: .8em; color: #303030; } p { margin-bottom: 20px; font-weight: 300; } a { text-decoration: none; } p a { font-weight: 400; } blockquote { padding: 0 0 0 30px; margin-bottom: 20px; font-size: 1.6em; border-left: 10px solid #e9e9e9; } ul li { list-style-position: inside; list-style: disc; padding-left: 20px; } ol li { list-style-position: inside; list-style: decimal; padding-left: 3px; } dl dt { color: #303030; } footer { padding-top: 20px; padding-bottom: 30px; margin-top: 40px; font-size: 13px; color: #aaa; background: transparent url('./hr.png') 0 0 no-repeat; } footer a { color: #666; } footer a:hover { color: #444; } /* MISC */ .clearfix:after { display: block; height: 0; clear: both; visibility: hidden; content: '.'; } .jumbotron { background-color: #E7E7E7; border-radius: .3rem; margin-bottom: 10px; padding: 25px; border: solid 1px #878787; } .clearfix {display: inline-block;} * html .clearfix {height: 1%;} .clearfix {display: block;} /* #Media Queries ================================================== */ /* Smaller than standard 960 (devices and browsers) */ @media only screen and (max-width: 959px) { } /* Tablet Portrait size to standard 960 (devices and browsers) */ @media only screen and (min-width: 768px) and (max-width: 959px) { } /* All Mobile Sizes (devices and browser) */ @media only screen and (max-width: 767px) { header { padding-top: 10px; padding-bottom: 10px; } #downloads { margin-bottom: 25px; } #download-zip, #download-tar-gz { display: none; } .inner { width: 94%; margin: 0 auto; } } /* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ @media only screen and (min-width: 480px) and (max-width: 767px) { } /* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ @media only screen and (max-width: 479px) { } cRonstrue-2.21.0/docs/assets/tar-gz-icon.png000066400000000000000000000013451434371145300206620ustar00rootroot00000000000000PNG  IHDRTIDATxڭKHTQϹ7򑢠Dm۷6$!4#{6AY>&C3^hYf& 'Km|%MBQHSL,Fu=8{ιq^%8e֒O{E̖ݮt~WbTkJ)Yd v=Cs֔,&e)@2.ߣò'啟GQ$tq\J%,2eO9sJxjIi*e92̹Y//(GKn^E)MpKtYe`}zXrB/oM4!i3kh9> O?E$ȶΤjo@x,j`%dǒf*ڠcǚj)XCvluif 㭧yIr x/LQY F2(HrLW6h uiZΣ@@Њ`'רCXΨOLdXaWPIz'yB* a,FPW7r' IENDB`cRonstrue-2.21.0/docs/index.html000066400000000000000000000430051434371145300165140ustar00rootroot00000000000000 cRonstrue by Brady Holt

cRonstrue

Convert cron expressions into human readable descriptions

Download .zip Download .tar.gz View on GitHub

Demo

Every 5 minutes

cRonstrue Build Status NPM Package

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 and is also available in a few other languages.

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
  • Supports Quartz Job Scheduler cron expressions
  • i18n support with 34 languages

Demo

A demo is available here.

Installation

cRonstrue is exported as an UMD module so it will work in an AMD, 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

const cronstrue = require('cronstrue');

ESM / webpack / TypeScript

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 <script> tag.

<script src="cronstrue.min.js" type="text/javascript"></script>
<script>
  var cronstrue = window.cronstrue;
</script>

CDN

A simple way to load the library in a browser is by using the unpkg 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:

<script src="https://unpkg.com/cronstrue@latest/dist/cronstrue.min.js" async></script>

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

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"

For more usage examples, including a demonstration of how cRonstrue can handle some very complex cron expressions, you can reference the unit tests.

CLI Usage

$ 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 (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.

// Node / CommonJS
const cronstrue = require('cronstrue/i18n');

// ESM / webpack / TypeScript
import cronstrue from 'cronstrue/i18n';

// Browser
<script src="https://unpkg.com/cronstrue@latest/cronstrue-i18n.min.js" async></script>

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.

// 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
<script src="https://unpkg.com/cronstrue@latest/dist/cronstrue.min.js" async></script>
<script src="https://unpkg.com/cronstrue@latest/locales/fr.min.js" async></script>
<script src="https://unpkg.com/cronstrue@latest/locales/es.min.js" async></script>

cronstrue.toString("*/5 * * * *", { locale: "fr" }); // => Toutes les 5 minutes
cronstrue.toString("*/5 * * * *", { locale: "es" }); // => Cada 5 minutos

Frequently Asked Questions

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-validator or cron-parser.

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

License

cRonstrue is freely distributable under the terms of the MIT license.

cRonstrue-2.21.0/docs/template.hbs.html000066400000000000000000000123271434371145300177760ustar00rootroot00000000000000 {{config.title}} by {{config.author}}

{{config.title}}

{{config.description}}

Download .zip Download .tar.gz View on GitHub

Demo

Every 5 minutes
{{{content}}}
cRonstrue-2.21.0/i18n.d.ts000066400000000000000000000002651434371145300151410ustar00rootroot00000000000000// 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"; cRonstrue-2.21.0/i18n.js000066400000000000000000000003361434371145300147040ustar00rootroot00000000000000// 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; cRonstrue-2.21.0/package-lock.json000066400000000000000000005536121434371145300170150ustar00rootroot00000000000000{ "name": "cronstrue", "version": "2.21.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "cronstrue", "version": "2.21.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.4.23" } }, "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.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.14", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "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/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "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.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/helper-wasm-section": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-opt": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.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.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "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/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "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 }, "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": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.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.19.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", "dev": true, "dependencies": { "caniuse-lite": "^1.0.30001312", "electron-to-chromium": "^1.4.71", "escalade": "^3.1.1", "node-releases": "^2.0.2", "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, "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.30001312", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, "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/chalk/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/chalk/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/chalk/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/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/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "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.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": 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.4.75", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", "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.9.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "node_modules/enhanced-resolve/node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "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": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "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.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "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 }, "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": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "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/glob/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "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/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/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==", "dev": true, "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 }, "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-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "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/micromatch/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/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.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/minimatch/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, "dependencies": { "balanced-match": "^1.0.0" } }, "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.1.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha.js" }, "engines": { "node": ">= 14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "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/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "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.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "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, "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-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "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.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "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/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "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-color/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/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.14.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "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.1", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "dependencies": { "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.2" }, "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/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "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/terser-webpack-plugin/node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "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/uglify-js/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, "optional": true }, "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.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { "node": ">=10.13.0" } }, "node_modules/webpack": { "version": "5.69.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.1.tgz", "integrity": "sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.3.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/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/webpack/node_modules/enhanced-resolve": { "version": "5.9.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "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/webpack/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "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/webpack/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/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.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "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 }, "node_modules/xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "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.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "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.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, "@jridgewell/source-map": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.14", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@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/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "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.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/helper-wasm-section": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-opt": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.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.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "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" } }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "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": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.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.19.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001312", "electron-to-chromium": "^1.4.71", "escalade": "^3.1.1", "node-releases": "^2.0.2", "picocolors": "^1.0.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.30001312", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", "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" }, "dependencies": { "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" } }, "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 } } }, "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 }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "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.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" }, "dependencies": { "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "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.4.75", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", "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.9.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "dependencies": { "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true } } }, "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": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "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.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "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": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "dependencies": { "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } } } }, "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.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "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" } }, "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 }, "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-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "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" }, "dependencies": { "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true } } }, "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.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" }, "dependencies": { "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" } } } }, "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.1.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "requires": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "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 }, "nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "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.2", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "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-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "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.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "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 }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "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" }, "dependencies": { "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 } } }, "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.14.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" } }, "terser-webpack-plugin": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "requires": { "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.2" }, "dependencies": { "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": {} }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.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" }, "dependencies": { "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, "optional": true } } }, "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.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "webpack": { "version": "5.69.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.69.1.tgz", "integrity": "sha512-+VyvOSJXZMT2V5vLzOnDuMz5GxEqLk7hKWQ56YxPW/PQRUuKimPqmEIJOx8jHYeyo65pKbapbW464mvsKbaj4A==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.3.1", "webpack-sources": "^3.2.3" }, "dependencies": { "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": {} }, "enhanced-resolve": { "version": "5.9.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz", "integrity": "sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "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 }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "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.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "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.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "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.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "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 } } } cRonstrue-2.21.0/package.json000066400000000000000000000033711434371145300160570ustar00rootroot00000000000000{ "name": "cronstrue", "title": "cRonstrue", "version": "2.21.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.4.23" }, "scripts": { "start": "npm run build", "build": "npx tsc -p ./src --emitDeclarationOnly", "test": "npx mocha --reporter spec --require ts-node/register \"./test/**/*.ts\"", "prepublish": "rm -rf ./dist && ./node_modules/webpack-cli/bin/cli.js && npx jbash ./scripts/generate-docs.js && git add -A" }, "dependencies": {} } cRonstrue-2.21.0/scripts/000077500000000000000000000000001434371145300152545ustar00rootroot00000000000000cRonstrue-2.21.0/scripts/convert-ced-locale.js000077500000000000000000000060771434371145300212750ustar00rootroot00000000000000#!/usr/bin/env npx jbash /* 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 */ const xmlHelper = require("pixl-xml"); const xmlContent = cat($1); const parsed = xmlHelper.parse(xmlContent); const locale = $1 .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; } cRonstrue-2.21.0/scripts/custom-loader.js000066400000000000000000000002001434371145300203600ustar00rootroot00000000000000module.exports = function (source) { const options = this.getOptions(); return options.process(this.resourcePath, source); }cRonstrue-2.21.0/scripts/generate-docs.js000077500000000000000000000013271434371145300203400ustar00rootroot00000000000000#!/usr/bin/env npx jbash // Generates documention index.html from README.md const fs = require("fs"); const path = require("path"); const handlebars = require("handlebars"); const marked = require("marked"); const config = require("../package.json"); const readmeFile = path.join(__dirname, "../README.md"); const templateFile = path.join(__dirname, "../docs/template.hbs.html"); const outputFile = path.join(__dirname, "../docs/index.html"); let readmeContent = cat(readmeFile); let readmeHtml = marked.parse(readmeContent); let templateContent = cat(templateFile); let templateCompiled = handlebars.compile(templateContent); let html = templateCompiled({ config: config, content: readmeHtml }); echo(html, outputFile); cRonstrue-2.21.0/src/000077500000000000000000000000001434371145300143545ustar00rootroot00000000000000cRonstrue-2.21.0/src/cronParser.ts000066400000000000000000000227271434371145300170540ustar00rootroot00000000000000import 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 = this.extractParts(this.expression); this.normalize(parsed); this.validate(parsed); return parsed; } protected extractParts(expression: string) { if (!this.expression) { throw new Error("Expression is empty"); } // split on one or more spaces let parsed: string[] = expression.trim().split(/[ ]+/); 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[]) { this.assertNoInvalidCharacters("DOW", parsed[5]); this.assertNoInvalidCharacters("DOM", parsed[3]); this.validateRange(parsed); } protected validateRange(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 assertNoInvalidCharacters(partDescription: string, expression: string) { // No characters other than 'L' or 'W' should remain after normalization let invalidChars = expression.match(/[A-KM-VX-Z]+/gi); if (invalidChars && invalidChars.length) { throw new Error(`${partDescription} part contains invalid values: '${invalidChars.toString()}'`); } } } cRonstrue-2.21.0/src/cronstrue-i18n.ts000066400000000000000000000004361434371145300175300ustar00rootroot00000000000000import { ExpressionDescriptor } from "./expressionDescriptor"; import { allLocalesLoader } from "./i18n/allLocalesLoader"; ExpressionDescriptor.initialize(new allLocalesLoader()); export default ExpressionDescriptor; let toString = ExpressionDescriptor.toString; export { toString }; cRonstrue-2.21.0/src/cronstrue.ts000066400000000000000000000004301434371145300167450ustar00rootroot00000000000000import { ExpressionDescriptor } from "./expressionDescriptor"; import { enLocaleLoader } from "./i18n/enLocaleLoader"; ExpressionDescriptor.initialize(new enLocaleLoader()); export default ExpressionDescriptor; let toString = ExpressionDescriptor.toString; export { toString }; cRonstrue-2.21.0/src/expressionDescriptor.ts000066400000000000000000000556311434371145300211740ustar00rootroot00000000000000import { 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, }: 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, }; 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]; let description = this.getSegmentDescription( expression, this.i18n.everyHour(), (s) => { return this.formatTime(s, "0", ""); }, (s) => { return StringUtilities.format(this.i18n.everyX0Hours(s), s); }, (s) => { return this.i18n.betweenX0AndX1(); }, (s) => { return this.i18n.atX0(); } ); // If this is an hour range and minute segment is not "on the hour" (0), we'll change the second hour part from :00 to :59 if (description && expression.includes("-") && this.expressionParts[1] != "0") { const atTheHourMatches = Array.from(description.matchAll(/:00/g)); if (atTheHourMatches.length > 1) { const lastAtTheHourMatchIndex = atTheHourMatches[atTheHourMatches.length - 1].index; description = description.substring(0, lastAtTheHourMatchIndex) + ":59" + description.substring(lastAtTheHourMatchIndex! + 3); } } 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.substr(0, s.indexOf("#")); } else if (s.indexOf("L") > -1) { exp = exp.replace("L", ""); } return this.i18n.daysOfTheWeekInCase ? this.i18n.daysOfTheWeekInCase(form)[parseInt(exp)] : daysOfWeekNames[parseInt(exp)]; }, (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 dayOfWeekNumber = s.substring(0, s.indexOf("#")); let dayOfWeekOfMonthDescription: string | null = null; 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; } format = this.i18n.commaOnThe(dayOfWeekOfMonthNumber) + dayOfWeekOfMonthDescription + 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 hour: number = parseInt(hourExpression); 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; } } const minute = minuteExpression; 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(/\, ?$/, ""); } return description; } private getPeriod(hour: number): string { return hour >= 12 ? (this.i18n.pm && this.i18n.pm()) || "PM" : (this.i18n.am && this.i18n.am()) || "AM"; } } cRonstrue-2.21.0/src/i18n/000077500000000000000000000000001434371145300151335ustar00rootroot00000000000000cRonstrue-2.21.0/src/i18n/allLocales.ts000066400000000000000000000031151434371145300175560ustar00rootroot00000000000000export { 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 cRonstrue-2.21.0/src/i18n/allLocalesLoader.ts000066400000000000000000000005471434371145300207130ustar00rootroot00000000000000import { 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; } } } } cRonstrue-2.21.0/src/i18n/enLocaleLoader.ts000066400000000000000000000003111434371145300203470ustar00rootroot00000000000000import { Locale } from "./locale"; import { en } from "./locales/en"; export class enLocaleLoader { load(availableLocales: { [name: string]: Locale }) { availableLocales["en"] = new en(); } } cRonstrue-2.21.0/src/i18n/locale.ts000066400000000000000000000054321434371145300167460ustar00rootroot00000000000000export 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. 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): 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[]; } cRonstrue-2.21.0/src/i18n/localeLoader.ts000066400000000000000000000002021434371145300200630ustar00rootroot00000000000000import { Locale } from "./locale"; export interface LocaleLoader { load(availableLocales: { [name: string]: Locale }): void; } cRonstrue-2.21.0/src/i18n/locales/000077500000000000000000000000001434371145300165555ustar00rootroot00000000000000cRonstrue-2.21.0/src/i18n/locales/af.ts000066400000000000000000000070141434371145300175150ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/ar.ts000066400000000000000000000105221434371145300175270ustar00rootroot00000000000000// 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 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 [ "يناير", "فبراير", "مارس", "ابريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر", ]; } } cRonstrue-2.21.0/src/i18n/locales/be.ts000066400000000000000000000076261434371145300175260ustar00rootroot00000000000000// 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 true; } 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 [ "студзень", "люты", "сакавік", "красавік", "травень", "чэрвень", "ліпень", "жнівень", "верасень", "кастрычнік", "лістапад", "снежань", ]; } } cRonstrue-2.21.0/src/i18n/locales/ca.ts000066400000000000000000000067141434371145300175200ustar00rootroot00000000000000// 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 false; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/cs.ts000066400000000000000000000066141434371145300175410ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/da.ts000066400000000000000000000066601434371145300175210ustar00rootroot00000000000000// 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() { return ", kun på %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", ]; } } cRonstrue-2.21.0/src/i18n/locales/de.ts000066400000000000000000000066161434371145300175260ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/en.ts000066400000000000000000000067731434371145300175440ustar00rootroot00000000000000// 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 occured 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/es.ts000066400000000000000000000067641434371145300175510ustar00rootroot00000000000000// 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 false; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/fa.ts000066400000000000000000000072221434371145300175160ustar00rootroot00000000000000// 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 ["ژانویه", "فوریه", "مارس", "آپریل", "مه", "ژوئن", "ژوئیه", "آگوست", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"]; } } cRonstrue-2.21.0/src/i18n/locales/fi.ts000066400000000000000000000077261434371145300175370ustar00rootroot00000000000000import { Locale } from "../locale"; export class fi implements Locale { use24HourTimeFormatByDefault() { return false; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/fr.ts000066400000000000000000000070661434371145300175450ustar00rootroot00000000000000// French import { Locale } from "../locale"; export class fr 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 "toutes les minutes"; } everyHour() { return "toutes les heures"; } anErrorOccuredWhenGeneratingTheExpressionD() { return "Une erreur est survenue en générant la description de l'expression cron. Vérifiez sa syntaxe."; } 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"; } commaEveryX0Years() { return ", tous les %s ans"; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/he.ts000066400000000000000000000071451434371145300175300ustar00rootroot00000000000000// 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 ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"]; } } cRonstrue-2.21.0/src/i18n/locales/hu.ts000066400000000000000000000070101434371145300175370ustar00rootroot00000000000000// 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 false; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/id.ts000066400000000000000000000070051434371145300175230ustar00rootroot00000000000000// 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 false; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/it.ts000066400000000000000000000067341434371145300175530ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/ja.ts000066400000000000000000000076371434371145300175340ustar00rootroot00000000000000import { Locale } from "../locale"; export class ja implements Locale { use24HourTimeFormatByDefault() { return false; } 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月"]; } } cRonstrue-2.21.0/src/i18n/locales/ko.ts000066400000000000000000000101061434371145300175340ustar00rootroot00000000000000// 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월"]; } } cRonstrue-2.21.0/src/i18n/locales/nb.ts000066400000000000000000000066451434371145300175370ustar00rootroot00000000000000// 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 false; } 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 "sekund"; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/nl.ts000066400000000000000000000066451434371145300175510ustar00rootroot00000000000000// 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 false; } 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 "Op "; } everyMinuteBetweenX0AndX1() { return "Elke minuut tussen %s en %s"; } at() { return "Op"; } 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 "op %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", ]; } } cRonstrue-2.21.0/src/i18n/locales/pl.ts000066400000000000000000000065351434371145300175510ustar00rootroot00000000000000// 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ń", ]; } } cRonstrue-2.21.0/src/i18n/locales/pt_BR.ts000066400000000000000000000066571434371145300201510ustar00rootroot00000000000000// 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 false; } 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() { return ", 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() { return "quinta"; } first() { return "primeira"; } firstWeekday() { return "primeiro dia da semana"; } fourth() { return "quarta"; } minutesX0ThroughX1PastTheHour() { return "do minuto %s até %s de cada hora"; } second() { return "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() { return "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", ]; } } cRonstrue-2.21.0/src/i18n/locales/pt_PT.ts000066400000000000000000000066561434371145300201700ustar00rootroot00000000000000// 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() { return ", 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() { return "quinta"; } first() { return "primeira"; } firstWeekday() { return "primeiro dia da semana"; } fourth() { return "quarta"; } minutesX0ThroughX1PastTheHour() { return "do minuto %s até %s de cada hora"; } second() { return "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() { return "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", ]; } } cRonstrue-2.21.0/src/i18n/locales/ro.ts000066400000000000000000000067301434371145300175530ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/ru.ts000066400000000000000000000160231434371145300175550ustar00rootroot00000000000000// 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(); } } cRonstrue-2.21.0/src/i18n/locales/sk.ts000066400000000000000000000066161434371145300175530ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/sl.ts000066400000000000000000000064171434371145300175530ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/sv.ts000066400000000000000000000067021434371145300175620ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/sw.ts000066400000000000000000000067461434371145300175730ustar00rootroot00000000000000// 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 false; } 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/th.ts000066400000000000000000000114321434371145300175410ustar00rootroot00000000000000// 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 [ "มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม", ]; } } cRonstrue-2.21.0/src/i18n/locales/tr.ts000066400000000000000000000066641434371145300175660ustar00rootroot00000000000000// 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", ]; } } cRonstrue-2.21.0/src/i18n/locales/uk.ts000066400000000000000000000075661434371145300175620ustar00rootroot00000000000000// 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 [ "січень", "лютий", "березень", "квітень", "травень", "червень", "липень", "серпень", "вересень", "жовтень", "листопад", "грудень", ]; } } cRonstrue-2.21.0/src/i18n/locales/zh_CN.ts000066400000000000000000000071741434371145300201370ustar00rootroot00000000000000// 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 ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]; } } cRonstrue-2.21.0/src/i18n/locales/zh_TW.ts000066400000000000000000000067341434371145300201720ustar00rootroot00000000000000// 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 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 ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]; } } cRonstrue-2.21.0/src/options.ts000066400000000000000000000003331434371145300164160ustar00rootroot00000000000000export interface Options { throwExceptionOnParseError?: boolean; verbose?: boolean; dayOfWeekStartIndexZero?: boolean; monthStartIndexZero?: boolean; use24HourTimeFormat?: boolean; locale?: string | null; } cRonstrue-2.21.0/src/rangeValidator.ts000066400000000000000000000043631434371145300176740ustar00rootroot00000000000000function 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' ); } } } }cRonstrue-2.21.0/src/stringUtilities.ts000066400000000000000000000017741434371145300201370ustar00rootroot00000000000000export 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; }); } } cRonstrue-2.21.0/src/tsconfig.json000066400000000000000000000004401434371145300170610ustar00rootroot00000000000000{ "compilerOptions": { "module": "commonjs", "target": "ES5", "outDir": "../dist", "noImplicitAny": true, "removeComments": true, "preserveConstEnums": false, "sourceMap": true, "declaration": true, "composite":true }, "include": ["./**/*.ts"] } cRonstrue-2.21.0/test/000077500000000000000000000000001434371145300145445ustar00rootroot00000000000000cRonstrue-2.21.0/test/cronParser.ts000066400000000000000000000033621434371145300172360ustar00rootroot00000000000000import 'mocha'; import chai = require("chai"); import { CronParser } from "../src/cronParser"; let assert = chai.assert; 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(); }, `DOW part contains invalid values: 'MO'`); }); 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"); }); }); }); cRonstrue-2.21.0/test/cronstrue.ts000066400000000000000000000546541434371145300171560ustar00rootroot00000000000000import 'mocha'; import chai = require("chai"); import cronstrue from "../src/cronstrue"; let assert = chai.assert; 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), "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"); }); }); 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("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" ); }); }); 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("empty expression", function () { assert.throws(function () { cronstrue.toString(""); }, "Error: Expression is empty"); }); it("null expression", function () { assert.throws(function () { cronstrue.toString(null as any as string); }, "Error: Expression is empty"); }); it("undefined expression", function () { assert.throws(function () { cronstrue.toString(""); }, "Error: 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 occured when generating the expression description. Check the cron expression syntax." ); }); }); }); cRonstrue-2.21.0/test/i18n.ts000066400000000000000000000260621434371145300157010ustar00rootroot00000000000000import "mocha"; import chai = require("chai"); import cronstrue from "../src/cronstrue-i18n"; 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 03:00 PM y las 03:59 PM, 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 03:00 PM à 03:59 PM, 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"); }); }); 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 03:00 PM en 03:59 PM, 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 03:00 PM e 03:59 PM, de segunda-feira a sexta-feira" ); }); }); 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" ); }); }); 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 分鐘, 在 03:00 PM 和 03:59 PM 之間, 星期一 到 星期五" ); }); }); 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"); }); }); describe("fa", function () { it("* * * * *", function () { assert.equal(cronstrue.toString(this.test?.title as string, { locale: "fa" }), "هر دقیقه"); }); }); describe("sl", function () { it("* * * * *", function () { assert.equal(cronstrue.toString(this.test?.title as string, { locale: "sl" }), "Vsako minuto"); }); }); describe("ca", function () { it("* * * * *", function () { assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ca" }), "Cada minut"); }); }); describe("ko", function () { it("* * * * *", function () { assert.equal(cronstrue.toString(this.test?.title as string, { locale: "ko" }), "1분마다"); }); }); describe("hu", function () { it("* * * * *", function () { assert.equal(cronstrue.toString(this.test?.title as string, { locale: "hu" }), "Minden percben"); }); }); describe("af", function () { it("* * * * *", function () { assert.equal(cronstrue.toString(this.test?.title as string, { locale: "af" }), "Elke minuut"); }); }); 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" }), "كل دقيقة"); }); }); }); cRonstrue-2.21.0/test/stringUtilities.ts000066400000000000000000000012671434371145300203240ustar00rootroot00000000000000import 'mocha'; import chai = require("chai"); import { StringUtilities } from "../src/stringUtilities"; let assert = chai.assert; 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"); }); }); }); cRonstrue-2.21.0/test/tsconfig.json000066400000000000000000000003031434371145300172470ustar00rootroot00000000000000{ "compilerOptions": { "module": "CommonJS", "target": "ES6", "noImplicitAny": true, "sourceMap": true }, "references": [{ "path": "../src" }], "include": ["./**/*.ts"] } cRonstrue-2.21.0/webpack.config.js000066400000000000000000000051161434371145300170060ustar00rootroot00000000000000var 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, "scripts/custom-loader"), }, }, }, ];