From b2654a82e64766fb717ca536c2ca3a0b24293753 Mon Sep 17 00:00:00 2001 From: Shavonn Brown Date: Fri, 20 Feb 2026 22:44:55 -0500 Subject: [PATCH] refactor: large initial factor for big fixes and performance --- .changeset/README.md | 8 + .changeset/config.json | 11 + .changeset/loose-seas-share.md | 98 + .eslintignore | 5 - .eslintrc.js | 138 - .github/FUNDING.yml | 2 +- .github/workflows/nodejs.yml | 22 - .github/workflows/release.yml | 47 + .github/workflows/test.yml | 51 + .gitignore | 32 +- .husky/pre-commit | 2 +- .npmrc | 2 + .prettierignore | 8 - .prettierrc.json | 6 - .vscode/launch.json | 27 - LICENCE => LICENSE | 4 +- README.md | 591 ++-- biome.json | 71 + bower.json | 22 - bun.lock | 1106 +++++++ codecov.yml | 6 - index.html | 12 + jest.config.js | 5 - jest.config.ts | 12 + package.json | 115 +- src/cache.ts | 93 +- src/callbackiterresult.ts | 18 +- src/datetime.ts | 181 +- src/dateutil.ts | 210 +- src/datewithzone.ts | 28 +- src/helpers.ts | 122 +- src/index.ts | 22 +- src/iter/index.ts | 159 +- src/iter/poslist.ts | 53 +- src/iterinfo/easter.ts | 34 +- src/iterinfo/index.ts | 132 +- src/iterinfo/monthinfo.ts | 56 +- src/iterinfo/yearinfo.ts | 141 +- src/iterresult.ts | 76 +- src/iterset.ts | 85 +- src/masks.ts | 46 +- src/nlp/i18n.ts | 12 +- src/nlp/index.ts | 59 +- src/nlp/parsetext.ts | 408 +-- src/nlp/totext.ts | 428 +-- src/optionstostring.ts | 90 +- src/parseoptions.ts | 176 +- src/parsestring.ts | 131 +- src/rrule.ts | 230 +- src/rrulebase.ts | 136 + src/rruleset.ts | 190 +- src/rrulestr.ts | 198 +- src/types.ts | 82 +- src/weekday.ts | 28 +- test/cache.test.ts | 68 +- test/dateutil.test.ts | 10 +- test/datewithzone.test.ts | 68 +- test/helpers.test.ts | 158 +- test/lib/utils.ts | 237 +- test/mocha.opts | 2 - test/nlp.test.ts | 119 +- test/optionstostring.test.ts | 25 +- test/parseoptions.test.ts | 56 +- test/parsestring.test.ts | 52 +- test/rrule.test.ts | 1274 ++++---- test/rruleset.test.ts | 1090 ++++--- test/rrulestr.test.ts | 204 +- tsconfig.build.json | 19 - tsconfig.json | 31 +- vite.config.ts | 30 + webpack.config.js | 51 - yarn.lock | 5189 -------------------------------- 72 files changed, 5282 insertions(+), 9428 deletions(-) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json create mode 100644 .changeset/loose-seas-share.md delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100644 .github/workflows/nodejs.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml create mode 100644 .npmrc delete mode 100644 .prettierignore delete mode 100644 .prettierrc.json delete mode 100644 .vscode/launch.json rename LICENCE => LICENSE (96%) create mode 100644 biome.json delete mode 100644 bower.json create mode 100644 bun.lock delete mode 100644 codecov.yml create mode 100644 index.html delete mode 100644 jest.config.js create mode 100644 jest.config.ts create mode 100644 src/rrulebase.ts delete mode 100644 test/mocha.opts delete mode 100644 tsconfig.build.json create mode 100644 vite.config.ts delete mode 100644 webpack.config.js delete mode 100644 yarn.lock diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 000000000..e5b6d8d6a --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 000000000..b8213321c --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.2/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.changeset/loose-seas-share.md b/.changeset/loose-seas-share.md new file mode 100644 index 000000000..7753be0c9 --- /dev/null +++ b/.changeset/loose-seas-share.md @@ -0,0 +1,98 @@ +--- +"@offload-project/rrule": patch +--- + +Refactored the core recurrence-rule implementation to share query/caching logic across RRule and RRuleSet, while also fixing a few correctness/performance issues in iteration and caching behavior. + +## Bug Fixes + +- Fixed removeFilteredDays accumulation bug + - Was overwriting filtered on each iteration instead of accumulating. Only the last day's filter status was returned, causing sub-daily frequencies to + potentially skip the wrong number of days when earlier days in the set were filtered out. + +- Fixed RRuleSet.clone() inverted noCache + - Changed new RRuleSet(!!this._cache) to new RRuleSet(!this._cache). The constructor param is noCache, so the old code was enabling cache on uncached + sets and vice versa. + +- Removed dead lno1wkst = 0 assignment + - The value was assigned inside an if block but never read afterward. Changed declaration from let to const. + +## Architecture + +- Extracted RRuleBase abstract class + - Moved shared query methods (all, between, before, after, count) and caching logic into RRuleBase. + - RRule extends RRuleBase — keeps options, _iter, toString, toText, NLP methods. + - RRuleSet extends RRuleBase — no longer extends RRule or calls super({}, noCache) with fake empty options. + - Exported RRuleBase from src/index.ts so consumers can use instanceof RRuleBase for any rule-like object. + - Updated test utilities to use RRuleBase for shared type checking. + +## Performance + +- rrules()/exrules() — eliminated serialize+reparse + - Was: this._rrule.map((e) => rrulestr(e.toString())) — serializes to RFC string then re-parses. + - Now: this._rrule.map((e) => e.clone()) — direct clone, removed the rrulestr import entirely. + +- _addRule/_addDate — eliminated O(n) array allocation + - Was: collection.map(String).includes(String(rrule)) — allocates a new array on every call. + - Now: collection.some((r) => String(r) === str) — short-circuits without allocating. + - Same pattern for _addDate: .some((d) => d.getTime() === time) instead of .map(Number).includes(Number(date)). + +- Added cache size bounds (src/cache.ts) + - Added MAX_CACHE_SIZE = 64 constant. + - before/after/between caches now evict the oldest entry (FIFO) when the limit is reached, preventing unbounded memory growth on long-lived instances. + +## Type Safety + +- Narrowed bynweekday to tuple type (src/types.ts) + - Changed bynweekday: number[][] | null to bynweekday: [number, number][] | null in ParsedOptions, enabling safe destructuring without ! assertions in + monthinfo.ts and parseoptions.ts. + +- Narrowed toText options to ParsedOptions (src/nlp/totext.ts) + - Changed private options: Partial to private options: ParsedOptions, removing ~40 ! assertions on this.options.freq, this.options.interval, + this.options.bymonthday, etc. + +- Added explicit return types to dateutil helpers (src/dateutil.ts) + - getWeekday(): number, getMonthDays(): number, monthRange(): [number, number]. + - Eliminated downstream ! assertions in datetime.ts and yearinfo.ts where these return values were used. + +- Added explicit return type to extractName (src/rrulestr.ts) + - Typed as { name: string; value: string } with default destructuring values, removing ! assertions on name and value. + +- Added default destructuring values in parseString (src/parsestring.ts) + - const [key = '', value = ''] = attr.split('=') and similar patterns, eliminating undefined-possibility assertions. + +- Fixed Cache.all type (src/cache.ts) + - Was: Date[] | Partial | false — Partial was never stored as all. + - Now: Date[] | false. + +- Clarified cache miss check (src/cache.ts) + - Changed if (!cached && this.all) to if (cached === false && this.all) — makes intent explicit for "not in cache" vs "cached as null". + +## Code Cleanup + +Converted C-style loops to for...of across 7 files +- monthinfo.ts, optionstostring.ts, parseoptions.ts, yearinfo.ts, iterset.ts, iter/index.ts, iter/poslist.ts — eliminates uncertain array-index ! + assertions. + +Removed dead code (src/iter/index.ts) +- Deleted redundant interval === 0 check (already checked at function entry). + +Removed redundant instanceof runtime guards (src/rruleset.ts) +- _addRule had if (!(rrule instanceof RRule)) and _addDate had if (!(date instanceof Date)) — parameters are already typed, so these were always true. + Removed guards and corresponding tests. + +Fixed test parse() null safety (test/lib/utils.ts) +- Added null guard for regex match result before destructuring. Simplified with Number() instead of intermediate variables. + +## Features + +- toText() now includes start date (src/nlp/totext.ts) + - When dtstart is explicitly set in rule options, toText() appends , starting [formatted date] to the output. + - Example: "every 2 months on the 15th, starting February 18, 2026". + - Rules without an explicit dtstart are unaffected. + +## Tooling + +- Updated README (README.md) + - Fixed stale badges, broken code examples, byeaster docs, wkst typo, LICENCE/LICENSE link, dev tooling (Biome), and documented new toText() starting + date behavior. diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index ed3623692..000000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -dist/ -coverage/ -webpack.config.js -.eslintrc.js -jest.config.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 66f393003..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,138 +0,0 @@ -module.exports = { - env: { - browser: true, - node: true, - }, - extends: [ - 'prettier', - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.json', - sourceType: 'module', - }, - plugins: [ - 'eslint-plugin-import', - 'eslint-plugin-jsdoc', - '@typescript-eslint', - ], - root: true, - rules: { - '@typescript-eslint/await-thenable': 'error', - '@typescript-eslint/consistent-type-assertions': 'error', - '@typescript-eslint/member-delimiter-style': [ - 'error', - { - multiline: { - delimiter: 'none', - requireLast: true, - }, - singleline: { - delimiter: 'semi', - requireLast: false, - }, - }, - ], - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-empty-function': 'error', - '@typescript-eslint/no-extra-semi': 'off', - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/no-floating-promises': 'error', - '@typescript-eslint/no-misused-new': 'error', - '@typescript-eslint/no-unnecessary-qualifier': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'error', - '@typescript-eslint/no-unused-expressions': [ - 'error', - { - allowTaggedTemplates: true, - allowShortCircuit: true, - }, - ], - '@typescript-eslint/prefer-namespace-keyword': 'error', - '@typescript-eslint/quotes': [ - 'error', - 'single', - { - avoidEscape: true, - }, - ], - '@typescript-eslint/semi': 'off', - '@typescript-eslint/triple-slash-reference': [ - 'error', - { - path: 'always', - types: 'prefer-import', - lib: 'always', - }, - ], - '@typescript-eslint/type-annotation-spacing': 'error', - '@typescript-eslint/unified-signatures': 'error', - 'brace-style': ['error', '1tbs'], - 'comma-dangle': 'off', - curly: ['error', 'multi-line'], - 'eol-last': 'error', - eqeqeq: ['error', 'smart'], - 'id-denylist': [ - 'error', - 'any', - 'Number', - 'String', - 'string', - 'Boolean', - 'boolean', - 'Undefined', - 'undefined', - ], - 'id-match': 'error', - 'import/no-deprecated': 'error', - 'jsdoc/check-alignment': 'error', - 'jsdoc/check-indentation': 'error', - 'jsdoc/newline-after-description': 'error', - 'new-parens': 'error', - 'no-caller': 'error', - 'no-case-declarations': 'off', - 'no-cond-assign': 'error', - 'no-constant-condition': 'error', - 'no-control-regex': 'error', - 'no-duplicate-imports': 'error', - 'no-empty': 'error', - 'no-empty-function': 'error', - 'no-eval': 'error', - 'no-fallthrough': 'error', - 'no-invalid-regexp': 'error', - 'no-multiple-empty-lines': 'error', - 'no-redeclare': 'error', - 'no-regex-spaces': 'error', - 'no-return-await': 'error', - 'no-throw-literal': 'error', - 'no-trailing-spaces': 'error', - 'no-underscore-dangle': 'off', - 'no-unexpected-multiline': 'off', - 'no-unused-expressions': 'off', - 'no-unused-labels': 'error', - 'no-var': 'error', - 'one-var': ['error', 'never'], - quotes: 'off', - radix: 'error', - semi: 'off', - 'space-in-parens': ['error', 'never'], - 'spaced-comment': [ - 'error', - 'always', - { - markers: ['/'], - }, - ], - 'use-isnan': 'error', - }, - overrides: [ - { - files: ['*.test.*'], - rules: { - '@typescript-eslint/no-unused-expressions': 'off', - }, - }, - ], -} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 5fe1a8c6d..41583fa4e 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -github: [jakubroztocil, davidgoli] +github: [shavonn, jakubroztocil, davidgoli] diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml deleted file mode 100644 index 7cf0f7507..000000000 --- a/.github/workflows/nodejs.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Node CI -on: [push, pull_request] -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [14.x, 16.x, 18.x] - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: ${{ matrix.node-version }} - - run: npm install -g codecov nyc - - run: yarn install - - run: yarn build - - run: LANG=en_CA TZ=America/Vancouver yarn test - - run: LANG=en_US TZ=America/Los_Angeles yarn test - - run: LANG=sw_KE TZ=Africa/Nairobi yarn test - - run: LANG=en_KI TZ=Pacific/Kiritimati yarn test - - run: LANG=jp_JP TZ=Asia/Tokyo yarn test-ci - - run: nyc report --reporter=json && codecov -t ${{ secrets.CODECOV_REPO_TOKEN }} -f coverage/*.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..c7f8af3c4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,47 @@ +name: Release + +on: + push: + branches: + - main + +permissions: + contents: write + issues: write + pull-requests: write + packages: write + id-token: write + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + name: Release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + - uses: oven-sh/setup-bun@v2 + - uses: actions/setup-node@v4 + + - name: Install Dependencies + shell: bash + run: bun install + + - name: Capture New Release Version + run: | + bun changeset status --output=release.json + echo "NEW_VERSION=$(jq -r '.releases | map(.name+"@"+.newVersion) | join(",")' release.json)" >> "$GITHUB_ENV" + rm release.json + + - name: Create Release Pull Request or Publish to GitHub Packages + id: changesets + uses: changesets/action@v1 + with: + publish: bun publish-package + title: "Release version ${{env.NEW_VERSION}}" + commit: "Update version ${{env.NEW_VERSION}}" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..2126da3f6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,51 @@ +name: Test + +on: + push: + branches: + - main + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + test: + name: Test + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [20.x, 22.x, 24.x] + + steps: + - uses: actions/checkout@v6 + - uses: oven-sh/setup-bun@v2 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Dependencies + shell: bash + run: bun install + + - name: Build + run: bun run build + + - name: Run Unit Tests - Canada + run: LANG=en_CA TZ=America/Vancouver bun test + + - name: Run Unit Tests - US + run: LANG=en_US TZ=America/Los_Angeles bun test + + - name: Run Unit Tests - Kenya + run: LANG=sw_KE TZ=Africa/Nairobi bun test + + - name: Run Unit Tests - Christmas + run: LANG=en_KI TZ=Pacific/Kiritimati bun test + + - name: Run Unit Tests - Japan + run: LANG=jp_JP TZ=Asia/Tokyo bun test diff --git a/.gitignore b/.gitignore index 0e9e81066..93c859f05 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,26 @@ -node_modules/ -bower_components/ -.idea -.vscode +# Logs +logs *.log -coverage -.nyc_output -dist/ \ No newline at end of file +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +coverage \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index b946a2c59..1d67559db 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -yarn lint-staged \ No newline at end of file +bun lint-staged diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..0152c50ca --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +@offload-project:registry=https://npm.pkg.github.com +//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN} \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 0e9e81066..000000000 --- a/.prettierignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules/ -bower_components/ -.idea -.vscode -*.log -coverage -.nyc_output -dist/ \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index f3c020ecc..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "semi": false, - "tabWidth": 2, - "useTabs": false, - "singleQuote": true -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index fb1a5d9a7..000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "node", - "request": "launch", - "env": { "TS_NODE_PROJECT": "tsconfig.test.json" }, - "name": "Mocha All", - "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", - "args": [ - "-r", - "ts-node/register", - "--timeout", - "999999", - "--colors", - "${workspaceFolder}/test/**/*.test.ts", - ], - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "protocol": "inspector" - } - ] -} \ No newline at end of file diff --git a/LICENCE b/LICENSE similarity index 96% rename from LICENCE rename to LICENSE index a68f31d00..fb0417089 100644 --- a/LICENCE +++ b/LICENSE @@ -2,6 +2,7 @@ rrule.js: Library for working with recurrence rules for calendar dates. ======================================================================= Copyright 2010, Jakub Roztocil and Lars Schöning +Copyright 2026, Shavonn Brown Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -30,13 +31,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -./rrule.js and ./test/tests.js is based on python-dateutil. LICENCE: +./rrule.js and ./test/tests.js is based on python-dateutil. LICENSE: python-dateutil - Extensions to the standard Python datetime module. ==================================================================== Copyright (c) 2003-2011 - Gustavo Niemeyer Copyright (c) 2012 - Tomi Pieviläinen +Copyright (c) 2026 - Shavonn Brown All rights reserved. diff --git a/README.md b/README.md index 344bcc5c4..99df6b0bd 100644 --- a/README.md +++ b/README.md @@ -2,49 +2,49 @@ **Library for working with recurrence rules for calendar dates.** -[![NPM version][npm-image]][npm-url] -[![Build Status][ci-image]][ci-url] -[![js-standard-style][js-standard-image]][js-standard-url] -[![Downloads][downloads-image]][downloads-url] -[![Gitter][gitter-image]][gitter-url] -[![codecov.io](http://codecov.io/github/jkbrzt/rrule/coverage.svg?branch=master)](http://codecov.io/github/jkbrzt/rrule?branch=master) - -rrule.js supports recurrence rules as defined in the [iCalendar -RFC](https://tools.ietf.org/html/rfc5545), with a few important -[differences](#differences-from-icalendar-rfc). It is a partial port of the -`rrule` module from the excellent -[python-dateutil](http://labix.org/python-dateutil/) library. On top of -that, it supports parsing and serialization of recurrence rules from and -to natural language. +

+ npm version + GitHub Actions Release Workflow Status + GitHub Actions Test Workflow Status + license +

+ +rrule.js supports recurrence rules as defined in the [iCalendar RFC](https://tools.ietf.org/html/rfc5545), with a few +important [differences](#differences-from-icalendar-rfc). It is a partial port of the `rrule` module from the excellent +[python-dateutil](http://labix.org/python-dateutil/) library. On top of that, it supports parsing and serialization of +recurrence rules from and to natural language. --- +### Requirements + +Node 20.19+ + ### Quick Start -- [Demo app](http://jkbrzt.github.io/rrule/) -- # For contributors and maintainers: the code for the demo app is only on `gh-pages` branch +- [Demo app](http://offload-project.github.io/rrule/) #### Client Side ```bash -$ yarn add rrule +$ bun i @offload-project/rrule ``` #### Server Side -Includes optional TypeScript types +Includes TypeScript types. ```bash -$ yarn add rrule +$ bun i @offload-project/rrule # or -$ npm install rrule +$ npm install @offload-project/rrule ``` #### Usage **RRule:** -```es6 +```js import { datetime, RRule, RRuleSet, rrulestr } from 'rrule' // Create a rule: @@ -58,30 +58,30 @@ const rule = new RRule({ // Get all occurrence dates (Date instances): rule.all() -[ '2012-02-03T10:30:00.000Z', +[ + '2012-02-03T10:30:00.000Z', '2012-03-05T10:30:00.000Z', '2012-03-09T10:30:00.000Z', '2012-04-09T10:30:00.000Z', '2012-04-13T10:30:00.000Z', '2012-05-14T10:30:00.000Z', '2012-05-18T10:30:00.000Z', - - /* … */] + /* … */ +] // Get a slice: rule.between(datetime(2012, 8, 1), datetime(2012, 9, 1)) -['2012-08-27T10:30:00.000Z', - '2012-08-31T10:30:00.000Z'] +['2012-08-27T10:30:00.000Z', '2012-08-31T10:30:00.000Z'] // Get an iCalendar RRULE string representation: // The output can be used with RRule.fromString(). rule.toString() -"DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;UNTIL=20130130T230000Z;BYDAY=MO,FR" +// "DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;UNTIL=20130130T230000Z;BYDAY=MO,FR" // Get a human-friendly text representation: // The output can be used with RRule.fromText(). rule.toText() -"every 5 weeks on Monday, Friday until January 31, 2013" +// "every 5 weeks on Monday, Friday until December 31, 2012, starting February 1, 2012" ``` **RRuleSet:** @@ -104,7 +104,7 @@ rruleSet.rdate(datetime(2012, 7, 1, 10, 30)) // Add another date to rruleSet rruleSet.rdate(datetime(2012, 7, 2, 10, 30)) -// Add a exclusion rrule to rruleSet +// Add an exclusion rrule to rruleSet rruleSet.exrule( new RRule({ freq: RRule.MONTHLY, @@ -113,34 +113,35 @@ rruleSet.exrule( }) ) -// Add a exclusion date to rruleSet +// Add an exclusion date to rruleSet rruleSet.exdate(datetime(2012, 5, 1, 10, 30)) // Get all occurrence dates (Date instances): -rruleSet.all()[ - ('2012-02-01T10:30:00.000Z', +rruleSet.all() +[ + '2012-02-01T10:30:00.000Z', '2012-05-01T10:30:00.000Z', '2012-07-01T10:30:00.000Z', - '2012-07-02T10:30:00.000Z') + '2012-07-02T10:30:00.000Z', ] // Get a slice: -rruleSet.between(datetime(2012, 2, 1), datetime(2012, 6, 2))[ - ('2012-05-01T10:30:00.000Z', '2012-07-01T10:30:00.000Z') -] +rruleSet.between(datetime(2012, 2, 1), datetime(2012, 6, 2)) +['2012-05-01T10:30:00.000Z', '2012-07-01T10:30:00.000Z'] // To string -rruleSet.valueOf()[ - ('DTSTART:20120201T023000Z', +rruleSet.valueOf() +[ + 'DTSTART:20120201T023000Z', 'RRULE:FREQ=MONTHLY;COUNT=5', 'RDATE:20120701T023000Z,20120702T023000Z', 'EXRULE:FREQ=MONTHLY;COUNT=2', - 'EXDATE:20120601T023000Z') + 'EXDATE:20120601T023000Z', ] // To string rruleSet.toString() -;('["DTSTART:20120201T023000Z","RRULE:FREQ=MONTHLY;COUNT=5","RDATE:20120701T023000Z,20120702T023000Z","EXRULE:FREQ=MONTHLY;COUNT=2","EXDATE:20120601T023000Z"]') +// "DTSTART:20120201T023000Z\nRRULE:FREQ=MONTHLY;COUNT=5\nRDATE:20120701T023000Z,20120702T023000Z\nEXRULE:FREQ=MONTHLY;COUNT=2\nEXDATE:20120601T023000Z" ``` **rrulestr:** @@ -162,14 +163,20 @@ rrulestr( ### Important: Use UTC dates -Dates in JavaScript are tricky. `RRule` tries to support as much flexibility as possible without adding any large required 3rd party dependencies, but that means we also have some special rules. +Dates in JavaScript are tricky. `RRule` tries to support as much flexibility as possible without adding any large +required 3rd party dependencies, but that means we also have some special rules. -By default, `RRule` deals in ["floating" times or UTC timezones](https://tools.ietf.org/html/rfc5545#section-3.2.19). If you want results in a specific timezone, `RRule` also provides [timezone support](#timezone-support). Either way, JavaScript's built-in "timezone" offset tends to just get in the way, so this library simply doesn't use it at all. All times are returned with zero offset, as though it didn't exist in JavaScript. +By default, `RRule` deals in ["floating" times or UTC timezones](https://tools.ietf.org/html/rfc5545#section-3.2.19). +If you want results in a specific timezone, `RRule` also provides [timezone support](#timezone-support). Either way, +JavaScript's built-in "timezone" offset tends to just get in the way, so this library simply doesn't use it at all. +All times are returned with zero offset, as though it didn't exist in JavaScript. -**THE BOTTOM LINE: Returned "UTC" dates are always meant to be interpreted as dates in your local timezone. This may mean you have to do additional conversion to get the "correct" local time with offset applied.** +**THE BOTTOM LINE: Returned "UTC" dates are always meant to be interpreted as dates in your local timezone. This may +mean you have to do additional conversion to get the "correct" local time with offset applied.** -For this reason, it is highly recommended to use timestamps in UTC eg. `new Date(Date.UTC(...))`. Returned dates will likewise be in UTC (except on Chrome, which always returns dates with a timezone offset). It's recommended to use the provided `datetime()` helper, which -creates dates in the correct format using a 1-based month. +For this reason, it is highly recommended to use timestamps in UTC eg. `new Date(Date.UTC(...))`. Returned dates will +likewise be in UTC (except on Chrome, which always returns dates with a timezone offset). It's recommended to use the +provided `datetime()` helper, which creates dates in the correct format using a 1-based month. For example: @@ -185,7 +192,7 @@ rule.all() 2018-11-05T18:00:00.000Z, 2018-11-07T18:00:00.000Z ] // Even though the given offset is `Z` (UTC), these are local times, not UTC times. -// Each of these this is the correct local Pacific time of each recurrence in +// Each of these is the correct local Pacific time of each recurrence in // America/Los_Angeles when it is 19:00 in America/Denver, including the DST shift. // You can get the local components by using the getUTC* methods eg: @@ -197,10 +204,10 @@ If you want to get the same times in true UTC, you may do so (e.g., using [Luxon ```ts rule.all().map(date => -DateTime.fromJSDate(date) - .toUTC() - .setZone('local', { keepLocalTime: true }) - .toJSDate() + DateTime.fromJSDate(date) + .toUTC() + .setZone('local', { keepLocalTime: true }) + .toJSDate() ) [ 2018-11-02T01:00:00.000Z, @@ -209,18 +216,16 @@ DateTime.fromJSDate(date) // These times are in true UTC; you can see the hours shift ``` -For more examples see -[python-dateutil](http://labix.org/python-dateutil/) documentation. +For more examples see [python-dateutil](http://labix.org/python-dateutil/) documentation. --- ### Timezone Support -Rrule also supports use of the `TZID` parameter in the -[RFC](https://tools.ietf.org/html/rfc5545#section-3.2.19) using the -[Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl). -Support matrix for the Intl API applies. If you need to support additional environments, -please consider using a [polyfill](https://formatjs.io/docs/polyfills/). +Rrule also supports use of the `TZID` parameter in the [RFC](https://tools.ietf.org/html/rfc5545#section-3.2.19) using +the [Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl). +Support matrix for the Intl API applies. If you need to support additional environments, please consider using a +[polyfill](https://formatjs.io/docs/polyfills/). Example with `TZID`: @@ -229,15 +234,14 @@ new RRule({ dtstart: datetime(2018, 2, 1, 10, 30), count: 1, tzid: 'Asia/Tokyo', -}).all()[ - // assuming the system timezone is set to America/Los_Angeles, you get: - '2018-01-31T17:30:00.000Z' -] +}).all() +// assuming the system timezone is set to America/Los_Angeles, you get: +// ['2018-01-31T17:30:00.000Z'] // which is the time in Los Angeles when it's 2018-02-01T10:30:00 in Tokyo. ``` -Whether or not you use the `TZID` param, make sure to only use JS `Date` objects that are -represented in UTC to avoid unexpected timezone offsets being applied, for example: +Whether or not you use the `TZID` param, make sure to only use JS `Date` objects that are represented in UTC to avoid +unexpected timezone offsets being applied, for example: ```js // WRONG: Will produce dates with TZ offsets added @@ -245,26 +249,28 @@ new RRule({ freq: RRule.MONTHLY, dtstart: new Date(2018, 1, 1, 10, 30), until: new Date(2018, 2, 31), -}).all()[('2018-02-01T18:30:00.000Z', '2018-03-01T18:30:00.000Z')] +}).all() +// ['2018-02-01T18:30:00.000Z', '2018-03-01T18:30:00.000Z'] // RIGHT: Will produce dates with recurrences at the correct time new RRule({ freq: RRule.MONTHLY, dtstart: datetime(2018, 2, 1, 10, 30), until: datetime(2018, 3, 31), -}).all()[('2018-02-01T10:30:00.000Z', '2018-03-01T10:30:00.000Z')] +}).all() +// ['2018-02-01T10:30:00.000Z', '2018-03-01T10:30:00.000Z'] ``` ### API #### `RRule` Constructor -```javascript +```js new RRule(options[, noCache=false]) ``` -The `options` argument mostly corresponds to the properties defined for `RRULE` in the -iCalendar RFC. Only `freq` is required. +The `options` argument mostly corresponds to the properties defined for `RRULE` in the iCalendar RFC. Only `freq` is +required. @@ -292,30 +298,27 @@ iCalendar RFC. Only `freq` is required. - - - @@ -324,114 +327,108 @@ iCalendar RFC. Only `freq` is required. - - - - - - - - - - - -
dtstartThe recurrence start. Besides being the base for the - recurrence, missing parameters in the final recurrence - instances will also be extracted from this date. If not - given, new Date will be used instead. - **IMPORTANT:** See the discussion under timezone support + + The recurrence start. Besides being the base for the recurrence, missing parameters in the final recurrence + instances will also be extracted from this date. If not given, new Date will be used instead. + IMPORTANT: See the discussion under timezone support
intervalThe interval between each freq iteration. For example, - when using RRule.YEARLY, an interval of 2 means - once every - two years, but with RRule.HOURLY, it means once every two + + The interval between each freq iteration. For example, when using RRule.YEARLY, an interval of + 2 means once every two years, but with RRule.HOURLY, it means once every two hours. The default interval is 1.
wkstThe week start day. Must be one of the RRule.MO, - RRule.TU, RRule.WE constants, or an integer, - specifying - the first day of the week. This will affect recurrences based - on weekly periods. The default week start is RRule.MO. + + The week start day. Must be one of the RRule.MO, RRule.TU, RRule.WE + constants, or an integer, specifying the first day of the week. This will affect recurrences based on weekly + periods. The default week start is RRule.MO.
untilIf given, this must be a Date instance, that will specify - the limit of the recurrence. If a recurrence instance happens - to be the same as the Date instance given in the - until + + If given, this must be a Date instance, that will specify the limit of the recurrence. If a + recurrence instance happens to be the same as the Date instance given in the until argument, this will be the last occurrence.
tzidIf given, this must be a IANA string recognized by the Intl API. See - discussion under Timezone support. + + If given, this must be a IANA string recognized by the Intl API. See discussion under + Timezone support.
bysetposIf given, it must be either an integer, or an array of - integers, positive or negative. Each given integer will specify - an occurrence number, corresponding to the nth occurrence of - the rule inside the frequency period. For example, a - bysetpos of -1 if combined with a RRule.MONTHLY - frequency, and a byweekday of (RRule.MO, RRule.TU, - RRule.WE, RRule.TH, RRule.FR), will result in - the last - work day of every month. + + If given, it must be either an integer, or an array of integers, positive or negative. Each given integer + will specify an occurrence number, corresponding to the nth occurrence of the rule inside the frequency + period. For example, a bysetpos of -1 if combined with a RRule.MONTHLY + frequency, and a byweekday of (RRule.MO, RRule.TU, RRule.WE, + RRule.TH, RRule.FR), will result in the last work day of every month.
bymonthIf given, it must be either an integer, or an array of - integers, meaning the months to apply the recurrence to. + + If given, it must be either an integer, or an array of integers, meaning the months to apply the recurrence + to.
bymonthdayIf given, it must be either an integer, or an array of - integers, meaning the month days to apply the recurrence to. + + If given, it must be either an integer, or an array of integers, meaning the month days to apply the + recurrence to.
byyeardayIf given, it must be either an integer, or an array of - integers, meaning the year days to apply the recurrence to. + + If given, it must be either an integer, or an array of integers, meaning the year days to apply the + recurrence to.
byweeknoIf given, it must be either an integer, or an array of - integers, meaning the week numbers to apply the recurrence to. - Week numbers have the meaning described in ISO8601, that is, - the first week of the year is that containing at least four - days of the new year. + + If given, it must be either an integer, or an array of integers, meaning the week numbers to apply the + recurrence to. Week numbers have the meaning described in ISO8601, that is, the first week of the year is + that containing at least four days of the new year.
byweekdayIf given, it must be either an integer (0 == RRule.MO), an - array of integers, one of the weekday constants - (RRule.MO, - RRule.TU, etc), or an array of these constants. When - given, - these variables will define the weekdays where the recurrence - will be applied. It's also possible to use an argument n for - the weekday instances, which will mean the nth occurrence of - this weekday in the period. For example, with - RRule.MONTHLY, - or with RRule.YEARLY and BYMONTH, using - RRule.FR.nth(+1) or RRule.FR.nth(-1) in byweekday - will specify the first or last friday of the month where the - recurrence happens. - Notice - that the RFC documentation, this is specified as BYDAY, - but was renamed to avoid the ambiguity of that argument. + + If given, it must be either an integer (0 == RRule.MO), an array of integers, one of the + weekday constants (RRule.MO, RRule.TU, etc), or an array of these constants. When + given, these variables will define the weekdays where the recurrence will be applied. It's also possible to + use an argument n for the weekday instances, which will mean the nth occurrence of this weekday in the + period. For example, with RRule.MONTHLY, or with RRule.YEARLY and + BYMONTH, using RRule.FR.nth(+1) or RRule.FR.nth(-1) in + byweekday will specify the first or last friday of the month where the recurrence happens. + Notice that the RFC documentation, this is specified as BYDAY, but was renamed to avoid the + ambiguity of that argument.
byhourIf given, it must be either an integer, or an array of - integers, meaning the hours to apply the recurrence to. + + If given, it must be either an integer, or an array of integers, meaning the hours to apply the recurrence + to.
byminuteIf given, it must be either an integer, or an array of - integers, meaning the minutes to apply the recurrence to. + + If given, it must be either an integer, or an array of integers, meaning the minutes to apply the recurrence + to.
bysecondIf given, it must be either an integer, or an array of - integers, meaning the seconds to apply the recurrence to. + + If given, it must be either an integer, or an array of integers, meaning the seconds to apply the recurrence + to.
byeasterThis is an extension to the RFC specification which the Python - implementation provides. - Not implemented in the JavaScript version. + + This is an extension to the RFC specification which the Python implementation provides. The value is a + number of days relative to Easter Sunday. For example, byeaster: 0 is Easter itself, + byeaster: 1 is the day after Easter, and byeaster: -2 is Good Friday.
-`noCache`: Set to `true` to disable caching of results. If you will use the -same rrule instance multiple times, enabling caching will improve the -performance considerably. Enabled by default. +`noCache`: Set to `true` to disable caching of results. If you use the same rrule instance multiple times, enabling +caching will improve the performance considerably. Enabled by default. -See also [python-dateutil](http://labix.org/python-dateutil/) -documentation. +See also [python-dateutil](http://labix.org/python-dateutil/) documentation. --- @@ -439,14 +436,15 @@ documentation.
rule.options
-
Processed options applied to the rule. Includes default options - (such us wkstart). Currently, - rule.options.byweekday isn't equal - to rule.origOptions.byweekday (which is an inconsistency). +
+ Processed options applied to the rule. Includes default options (such as wkst). Currently, + rule.options.byweekday isn't equal to rule.origOptions.byweekday (which is an + inconsistency).
rule.origOptions
-
The original options argument passed to - the constructor.
+
+ The original options argument passed to the constructor. +
--- @@ -455,61 +453,52 @@ documentation. ##### `RRule.prototype.all([iterator])` -Returns all dates matching the rule. It is a replacement for the -iterator protocol this class implements in the Python version. +Returns all dates matching the rule. It is a replacement for the iterator protocol this class implements in the Python +version. -As rules without `until` or `count` represent infinite date series, you -can optionally pass `iterator`, which is a function that is called for -each date matched by the rule. It gets two parameters `date` (the `Date` -instance being added), and `i` (zero-indexed position of `date` in the -result). Dates are being added to the result as long as the iterator -returns `true`. If a `false`-y value is returned, `date` isn't added to -the result and the iteration is interrupted (possibly prematurely). +As rules without `until` or `count` represent infinite date series, you can optionally pass `iterator`, which is a +function that is called for each date matched by the rule. It gets two parameters `date` (the `Date` instance being +added), and `i` (zero-indexed position of `date` in the result). Dates are being added to the result as long as the +iterator returns `true`. If a `false`-y value is returned, `date` isn't added to the result and the iteration is +interrupted (possibly prematurely). -```javascript -rule.all()[ - ('2012-02-01T10:30:00.000Z', +```js +rule.all() +[ + '2012-02-01T10:30:00.000Z', '2012-05-01T10:30:00.000Z', '2012-07-01T10:30:00.000Z', - '2012-07-02T10:30:00.000Z') + '2012-07-02T10:30:00.000Z', ] -rule.all(function (date, i) { - return i < 2 -})[('2012-02-01T10:30:00.000Z', '2012-05-01T10:30:00.000Z')] +rule.all((date, i) => i < 2) +['2012-02-01T10:30:00.000Z', '2012-05-01T10:30:00.000Z'] ``` ##### `RRule.prototype.between(after, before, inc=false [, iterator])` Returns all the occurrences of the rrule between `after` and `before`. -The `inc` keyword defines what happens if `after` and/or `before` are -themselves occurrences. With `inc == true`, they will be included in the -list, if they are found in the recurrence set. +The `inc` keyword defines what happens if `after` and/or `before` are themselves occurrences. With `inc == true`, they +will be included in the list, if they are found in the recurrence set. -Optional `iterator` has the same function as it has with -`RRule.prototype.all()`. +Optional `iterator` has the same function as it has with `RRule.prototype.all()`. -```javascript -rule.between(datetime(2012, 8, 1), datetime(2012, 9, 1))[ - ('2012-08-27T10:30:00.000Z', '2012-08-31T10:30:00.000Z') -] +```js +rule.between(datetime(2012, 8, 1), datetime(2012, 9, 1)) +['2012-08-27T10:30:00.000Z', '2012-08-31T10:30:00.000Z'] ``` ##### `RRule.prototype.before(dt, inc=false)` -Returns the last recurrence before the given `Date` instance. The `inc` -argument defines what happens if `dt` is an occurrence. With -`inc == true`, if `dt` itself is an occurrence, it will be returned. +Returns the last recurrence before the given `Date` instance. The `inc` argument defines what happens if `dt` is an +occurrence. With `inc == true`, if `dt` itself is an occurrence, it will be returned. ##### `RRule.prototype.after(dt, inc=false)` -Returns the first recurrence -after the given `Date` instance. The `inc` argument defines what happens -if `dt` is an occurrence. With `inc == true`, if `dt` itself is an -occurrence, it will be returned. +Returns the first recurrence after the given `Date` instance. The `inc` argument defines what happens if `dt` is an +occurrence. With `inc == true`, if `dt` itself is an occurrence, it will be returned. -See also [python-dateutil](http://labix.org/python-dateutil/) -documentation. +See also [python-dateutil](http://labix.org/python-dateutil/) documentation. --- @@ -520,41 +509,41 @@ documentation. Returns a string representation of the rule as per the iCalendar RFC. Only properties explicitly specified in `options` are included: -```javascript +```js rule.toString() -;('DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;UNTIL=20130130T230000Z;BYDAY=MO,FR') +// "DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;UNTIL=20130130T230000Z;BYDAY=MO,FR" rule.toString() == RRule.optionsToString(rule.origOptions) -true +// true ``` ##### `RRule.optionsToString(options)` Converts `options` to iCalendar RFC `RRULE` string: -```javascript -// Get full a string representation of all options, +```js +// Get a full string representation of all options, // including the default and inferred ones. RRule.optionsToString(rule.options) -;('DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;WKST=0;UNTIL=20130130T230000Z;BYDAY=MO,FR;BYHOUR=10;BYMINUTE=30;BYSECOND=0') +// "DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;WKST=0;UNTIL=20130130T230000Z;BYDAY=MO,FR;BYHOUR=10;BYMINUTE=30;BYSECOND=0" // Cherry-pick only some options from an rrule: RRule.optionsToString({ freq: rule.options.freq, dtstart: rule.options.dtstart, }) -;('DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;') +// "DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;" ``` ##### `RRule.fromString(rfcString)` Constructs an `RRule` instance from a complete `rfcString`: -```javascript -var rule = RRule.fromString('DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;') +```js +const rule = RRule.fromString('DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY;') // This is equivalent -var rule = new RRule( +const rule = new RRule( RRule.parseString('DTSTART:20120201T093000Z\nRRULE:FREQ=WEEKLY') ) ``` @@ -563,73 +552,81 @@ var rule = new RRule( Only parse RFC string and return `options`. -```javascript -var options = RRule.parseString('FREQ=DAILY;INTERVAL=6') +```js +const options = RRule.parseString('FREQ=DAILY;INTERVAL=6') options.dtstart = datetime(2000, 2, 1) -var rule = new RRule(options) +const rule = new RRule(options) ``` --- #### Natural Language Text Methods -These methods provide an incomplete support for text→`RRule` and -`RRule`→text conversion. You should test them with your input to see -whether the result is acceptable. +These methods provide an incomplete support for text-to-`RRule` and `RRule`-to-text conversion. You should test them +with your input to see whether the result is acceptable. + +##### `RRule.prototype.toText([gettext, [language, [dateFormatter]]])` -##### `RRule.prototype.toText([gettext, [language]])` +Returns a textual representation of `rule`. The `gettext` callback, if provided, will be called for each text token and +its return value used instead. The optional `language` argument is a language definition to be used (defaults to +`ENGLISH`). The optional `dateFormatter` callback controls how dates (for `until` and `starting` clauses) are formatted. -Returns a textual representation of `rule`. The `gettext` callback, if -provided, will be called for each text token and its return value used -instead. The optional `language` argument is a language definition to be -used (defaults to `rrule/nlp.js:ENGLISH`). +If `dtstart` is explicitly set in the rule options, it will be included as a ", starting [date]" suffix in the output. -```javascript -var rule = new RRule({ +```js +const rule = new RRule({ freq: RRule.WEEKLY, count: 23, }) rule.toText() -;('every week for 23 times') +// "every week for 23 times" + +const rule2 = new RRule({ + freq: RRule.MONTHLY, + bymonthday: 15, + interval: 2, + dtstart: datetime(2026, 2, 18), +}) +rule2.toText() +// "every 2 months on the 15th, starting February 18, 2026" ``` ##### `RRule.prototype.isFullyConvertibleToText()` -Provides a hint on whether all the options the rule has are convertible -to text. +Provides a hint on whether all the options the rule has can be converted to text. ##### `RRule.fromText(text[, language])` Constructs an `RRule` instance from `text`. -```javascript -rule = RRule.fromText('every day for 3 times') +```js +const rule = RRule.fromText('every day for 3 times') ``` ##### `RRule.parseText(text[, language])` Parse `text` into `options`: -```javascript -options = RRule.parseText('every day for 3 times') +```js +const options = RRule.parseText('every day for 3 times') // {freq: 3, count: "3"} options.dtstart = datetime(2000, 2, 1) -var rule = new RRule(options) +const rule = new RRule(options) ``` --- #### `RRuleSet` Constructor -```javascript +```js new RRuleSet([(noCache = false)]) ``` -The `RRuleSet` instance allows more complex recurrence setups, mixing multiple -rules, dates, exclusion rules, and exclusion dates. +The `RRuleSet` instance allows more complex recurrence setups, mixing multiple rules, dates, exclusion rules, and +exclusion dates. -Default `noCache` argument is `false`, caching of results will be enabled, -improving performance of multiple queries considerably. +Default `noCache` argument is `false`, caching of results will be enabled, improving performance of multiple queries +considerably. ##### `RRuleSet.prototype.rrule(rrule)` @@ -641,22 +638,24 @@ Include the given datetime instance `dt` in the recurrence set generation. ##### `RRuleSet.prototype.exrule(rrule)` -Include the given `rrule` instance in the recurrence set exclusion list. Dates -which are part of the given recurrence rules will not be generated, even if -some inclusive rrule or rdate matches them. **NOTE:** `EXRULE` has been (deprecated -in RFC 5545)[https://icalendar.org/iCalendar-RFC-5545/a-3-deprecated-features.html] +Include the given `rrule` instance in the recurrence set exclusion list. Dates which are part of the given recurrence +rules will not be generated, even if some inclusive rrule or rdate matches them. + +**NOTE:** `EXRULE` has been [deprecated in RFC 5545](https://icalendar.org/iCalendar-RFC-5545/a-3-deprecated-features.html) and does not support a `DTSTART` property. ##### `RRuleSet.prototype.exdate(dt)` -Include the given datetime instance `dt` in the recurrence set exclusion list. Dates -included that way will not be generated, even if some inclusive `rrule` or -`rdate` matches them. +Include the given datetime instance `dt` in the recurrence set exclusion list. Dates included that way will not be +generated, even if some inclusive `rrule` or `rdate` matches them. + +##### `RRuleSet.prototype.dtstart(dt?)` + +Sets or gets the start date for the recurrence set. ##### `RRuleSet.prototype.tzid(tz?)` -Sets or overrides the timezone identifier. Useful if there are no rrules in this -`RRuleSet` and thus no `DTSTART`. +Sets or gets the timezone identifier. Useful if there are no rrules in this `RRuleSet` and thus no `DTSTART`. ##### `RRuleSet.prototype.all([iterator])` @@ -698,77 +697,67 @@ Get list of excluded datetimes in this recurrence set. rrulestr(rruleStr[, options]) ``` -The `rrulestr` function is a parser for RFC-like syntaxes. The string passed -as parameter may be a multiple line string, a single line string, or just the -`RRULE` property value. +The `rrulestr` function is a parser for RFC-like syntaxes. The string passed as parameter may be a multiple line string, +a single line string, or just the `RRULE` property value. Additionally, it accepts the following keyword arguments:
- -
cache
-
-If true, the rruleset or rrule created instance -will cache its results. -Default is not to cache. -
- -
dtstart
-
-If given, it must be a datetime instance that will be used when no -DTSTART property is found in the parsed string. -If it is not given, and the property is not found, -datetime.now() will be used instead. -
- -
unfold
-
-If set to true, lines will be unfolded following the RFC specification. -It defaults to false, meaning that spaces before every line will be stripped. -
- -
forceset
-
-If set to true, an rruleset instance will be returned, -even if only a single rule is found. -The default is to return an rrule if possible, and -an rruleset if necessary. -
- -
compatible
-
-If set to true, the parser will operate in RFC-compatible mode. -Right now it means that unfold will be turned on, and if a DTSTART is found, -it will be considered the first recurrence instance, as documented in the RFC. -
- -
tzid
-
-If given, it must be a string that will be used when no TZID -property is found in the parsed string. -If it is not given, and the property is not found, 'UTC' will -be used by default. -
- +
cache
+
+ If true, the rruleset or rrule created instance will cache its results. + Default is not to cache. +
+ +
dtstart
+
+ If given, it must be a datetime instance that will be used when no DTSTART property is found in the + parsed string. + If it is not given, and the property is not found, datetime.now() will be used instead. +
+ +
unfold
+
+ If set to true, lines will be unfolded following the RFC specification. + It defaults to false, meaning that spaces before every line will be stripped. +
+ +
forceset
+
+ If set to true, an rruleset instance will be returned, even if only a single rule is found. + The default is to return an rrule if possible, and an rruleset if necessary. +
+ +
compatible
+
+ If set to true, the parser will operate in RFC-compatible mode. + Right now it means that unfold will be turned on, and if a DTSTART is found, it will be considered the + first recurrence instance, as documented in the RFC. +
+ +
tzid
+
+ If given, it must be a string that will be used when no TZID property is found in the parsed string. + If it is not given, and the property is not found, 'UTC' will be used by default. +
--- ### Differences From iCalendar RFC -- `RRule` has no `byday` keyword. The equivalent keyword has been replaced by - the `byweekday` keyword, to remove the ambiguity present in the original - keyword. -- Unlike documented in the RFC, the starting datetime, `dtstart`, is - not the first recurrence instance, unless it does fit in the specified rules. - This is in part due to this project being a port of - [python-dateutil](https://labix.org/python-dateutil#head-a65103993a21b717f6702063f3717e6e75b4ba66), - which has the same non-compliant functionality. Note that you can get the - original behavior by using a `RRuleSet` and adding the `dtstart` as an `rdate`. +- `RRule` has no `byday` keyword. The equivalent keyword has been replaced by the `byweekday` keyword, to remove the + ambiguity present in the original keyword. +- Unlike documented in the RFC, the starting datetime, `dtstart`, is not the first recurrence instance, unless it does + fit in the specified rules. + This is in part due to this project being a port of + [python-dateutil](https://labix.org/python-dateutil#head-a65103993a21b717f6702063f3717e6e75b4ba66), which has the + same non-compliant functionality. Note that you can get the original behavior by using a `RRuleSet` and adding the + `dtstart` as an `rdate`. -```javascript -var rruleSet = new RRuleSet() -var start = datetime(2012, 2, 1, 10, 30) +```js +const rruleSet = new RRuleSet() +const start = datetime(2012, 2, 1, 10, 30) // Add a rrule to rruleSet rruleSet.rrule( @@ -783,55 +772,39 @@ rruleSet.rrule( rruleSet.rdate(start) ``` -- Unlike documented in the RFC, every keyword is valid on every frequency. (The - RFC documents that `byweekno` is only valid on yearly frequencies, for example.) +- Unlike documented in the RFC, every keyword is valid on every frequency. (The RFC documents that `byweekno` is only + valid on yearly frequencies, for example.) ### Development -rrule.js is implemented in Typescript. It uses [JavaScript Standard Style](https://github.com/feross/standard) coding style. +rrule.js is implemented in TypeScript. It uses [Biome](https://biomejs.dev/) for linting and formatting. To run the code, checkout this repository and run: ``` -$ yarn +$ bun i ``` To run the tests, run: ``` -$ yarn test +$ bun run test ``` To build files for distribution, run: ``` -$ yarn build +$ bun run build ``` #### Authors +- [Shavonn Brown](http://www.offloadproject.com) - [Jakub Roztocil](http://roztocil.co) ([@jkbrzt](http://twitter.com/jkbrzt)) - Lars Schöning ([@lyschoening](http://twitter.com/lyschoening)) - David Golightly ([@davigoli](http://twitter.com/davigoli)) -Python `dateutil` is written by [Gustavo -Niemeyer](http://niemeyer.net). - -See [LICENCE](https://github.com/jkbrzt/rrule/blob/master/LICENCE) for -more details. - -[npm-url]: https://npmjs.org/package/rrule -[npm-image]: http://img.shields.io/npm/v/rrule.svg -[ci-url]: https://github.com/jkbrzt/rrule/actions -[ci-image]: https://github.com/jkbrzt/rrule/workflows/Node%20CI/badge.svg -[downloads-url]: https://npmjs.org/package/rrule -[downloads-image]: http://img.shields.io/npm/dm/rrule.svg?style=flat-square -[js-standard-url]: https://github.com/feross/standard -[js-standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat -[gitter-url]: https://gitter.im/rrule-js/Lobby -[gitter-image]: https://img.shields.io/gitter/room/nwjs/nw.js.svg - -#### Related projects +Python `dateutil` is written by [Gustavo Niemeyer](http://niemeyer.net). -- https://rrules.com — RESTful API to get back occurrences of RRULEs that conform to RFC 5545. +See [LICENSE](https://github.com/offload-project/rrule/blob/main/LICENSE) for more details. diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..5e140cc60 --- /dev/null +++ b/biome.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.4/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "includes": ["**", "!package.json"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "noUnusedImports": { + "fix": "safe", + "level": "warn", + "options": {} + } + }, + "style": { + "useImportType": { + "fix": "safe", + "level": "warn", + "options": {} + }, + "useTemplate": { + "fix": "safe", + "level": "warn" + }, + "noNonNullAssertion": "off" + }, + "complexity": { + "useOptionalChain": { + "fix": "safe", + "level": "warn" + }, + "noUselessSwitchCase": { + "fix": "safe", + "level": "warn" + } + }, + "suspicious": { + "useIsArray": { + "fix": "safe", + "level": "warn" + } + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + } +} diff --git a/bower.json b/bower.json deleted file mode 100644 index c2b8a50e7..000000000 --- a/bower.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "rrule", - "version": "2.3.0", - "description": "JavaScript library for working with recurrence rules for calendar dates.", - "homepage": "http://jakubroztocil.github.io/rrule/", - "keywords": ["dates", "recurrences", "calendar", "icalendar", "rfc"], - "repository": { - "type": "git", - "url": "git://github.com/jakubroztocil/rrule.git" - }, - "authors": [ - { - "name": "Jakub Roztočil", - "homepage": "http://subtleapps.com/" - }, - { - "name": "Lars Schöning" - } - ], - "main": "dist/es5/rrule.js", - "ignore": ["**/.*", "node_modules", "components"] -} diff --git a/bun.lock b/bun.lock new file mode 100644 index 000000000..f3b4028e1 --- /dev/null +++ b/bun.lock @@ -0,0 +1,1106 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "@offload-project/rrule", + "devDependencies": { + "@biomejs/biome": "^2.4.4", + "@changesets/cli": "^2.29.8", + "@microsoft/api-extractor": "^7.57.2", + "@types/jest": "^30.0.0", + "@types/node": "^25.3.0", + "jest": "^30.2.0", + "mockdate": "^3.0.5", + "terser": "^5.46.0", + "ts-jest": "^29.4.6", + "typescript": "^5.9.3", + "unplugin-dts": "^1.0.0-beta.6", + "vite": "^7.3.1", + }, + }, + }, + "packages": { + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + + "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], + + "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], + + "@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + + "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], + + "@babel/plugin-syntax-bigint": ["@babel/plugin-syntax-bigint@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg=="], + + "@babel/plugin-syntax-class-properties": ["@babel/plugin-syntax-class-properties@7.12.13", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="], + + "@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="], + + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw=="], + + "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + + "@babel/plugin-syntax-json-strings": ["@babel/plugin-syntax-json-strings@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], + + "@babel/plugin-syntax-logical-assignment-operators": ["@babel/plugin-syntax-logical-assignment-operators@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="], + + "@babel/plugin-syntax-nullish-coalescing-operator": ["@babel/plugin-syntax-nullish-coalescing-operator@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="], + + "@babel/plugin-syntax-numeric-separator": ["@babel/plugin-syntax-numeric-separator@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="], + + "@babel/plugin-syntax-object-rest-spread": ["@babel/plugin-syntax-object-rest-spread@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="], + + "@babel/plugin-syntax-optional-catch-binding": ["@babel/plugin-syntax-optional-catch-binding@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="], + + "@babel/plugin-syntax-optional-chaining": ["@babel/plugin-syntax-optional-chaining@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="], + + "@babel/plugin-syntax-private-property-in-object": ["@babel/plugin-syntax-private-property-in-object@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="], + + "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], + + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], + + "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + + "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], + + "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], + + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], + + "@biomejs/biome": ["@biomejs/biome@2.4.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.4", "@biomejs/cli-darwin-x64": "2.4.4", "@biomejs/cli-linux-arm64": "2.4.4", "@biomejs/cli-linux-arm64-musl": "2.4.4", "@biomejs/cli-linux-x64": "2.4.4", "@biomejs/cli-linux-x64-musl": "2.4.4", "@biomejs/cli-win32-arm64": "2.4.4", "@biomejs/cli-win32-x64": "2.4.4" }, "bin": { "biome": "bin/biome" } }, "sha512-tigwWS5KfJf0cABVd52NVaXyAVv4qpUXOWJ1rxFL8xF1RVoeS2q/LK+FHgYoKMclJCuRoCWAPy1IXaN9/mS61Q=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jZ+Xc6qvD6tTH5jM6eKX44dcbyNqJHssfl2nnwT6vma6B1sj7ZLTGIk6N5QwVBs5xGN52r3trk5fgd3sQ9We9A=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-Dh1a/+W+SUCXhEdL7TiX3ArPTFCQKJTI1mGncZNWfO+6suk+gYA4lNyJcBB+pwvF49uw0pEbUS49BgYOY4hzUg=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-V/NFfbWhsUU6w+m5WYbBenlEAz8eYnSqRMDMAW3K+3v0tYVkNyZn8VU0XPxk/lOqNXLSCCrV7FmV/u3SjCBShg=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+sPAXq3bxmFwhVFJnSwkSF5Rw2ZAJMH3MF6C9IveAEOdSpgajPhoQhbbAK12SehN9j2QrHpk4J/cHsa/HqWaYQ=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.4", "", { "os": "linux", "cpu": "x64" }, "sha512-R4+ZCDtG9kHArasyBO+UBD6jr/FcFCTH8QkNTOCu0pRJzCWyWC4EtZa2AmUZB5h3e0jD7bRV2KvrENcf8rndBg=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gGvFTGpOIQDb5CQ2VC0n9Z2UEqlP46c4aNgHmAMytYieTGEcfqhfCFnhs6xjt0S3igE6q5GLuIXtdQt3Izok+g=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-trzCqM7x+Gn832zZHgr28JoYagQNX4CZkUZhMUac2YxvvyDRLJDrb5m9IA7CaZLlX6lTQmADVfLEKP1et1Ma4Q=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.4", "", { "os": "win32", "cpu": "x64" }, "sha512-gnOHKVPFAAPrpoPt2t+Q6FZ7RPry/FDV3GcpU53P3PtLNnQjBmKyN2Vh/JtqXet+H4pme8CC76rScwdjDcT1/A=="], + + "@changesets/apply-release-plan": ["@changesets/apply-release-plan@7.0.14", "", { "dependencies": { "@changesets/config": "^3.1.2", "@changesets/get-version-range-type": "^0.4.0", "@changesets/git": "^3.0.4", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", "lodash.startcase": "^4.4.0", "outdent": "^0.5.0", "prettier": "^2.7.1", "resolve-from": "^5.0.0", "semver": "^7.5.3" } }, "sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA=="], + + "@changesets/assemble-release-plan": ["@changesets/assemble-release-plan@6.0.9", "", { "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "semver": "^7.5.3" } }, "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ=="], + + "@changesets/changelog-git": ["@changesets/changelog-git@0.2.1", "", { "dependencies": { "@changesets/types": "^6.1.0" } }, "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q=="], + + "@changesets/cli": ["@changesets/cli@2.29.8", "", { "dependencies": { "@changesets/apply-release-plan": "^7.0.14", "@changesets/assemble-release-plan": "^6.0.9", "@changesets/changelog-git": "^0.2.1", "@changesets/config": "^3.1.2", "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", "@changesets/get-release-plan": "^4.0.14", "@changesets/git": "^3.0.4", "@changesets/logger": "^0.1.1", "@changesets/pre": "^2.0.2", "@changesets/read": "^0.6.6", "@changesets/should-skip-package": "^0.1.2", "@changesets/types": "^6.1.0", "@changesets/write": "^0.4.0", "@inquirer/external-editor": "^1.0.2", "@manypkg/get-packages": "^1.1.3", "ansi-colors": "^4.1.3", "ci-info": "^3.7.0", "enquirer": "^2.4.1", "fs-extra": "^7.0.1", "mri": "^1.2.0", "p-limit": "^2.2.0", "package-manager-detector": "^0.2.0", "picocolors": "^1.1.0", "resolve-from": "^5.0.0", "semver": "^7.5.3", "spawndamnit": "^3.0.1", "term-size": "^2.1.0" }, "bin": { "changeset": "bin.js" } }, "sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA=="], + + "@changesets/config": ["@changesets/config@3.1.2", "", { "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/get-dependents-graph": "^2.1.3", "@changesets/logger": "^0.1.1", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", "micromatch": "^4.0.8" } }, "sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog=="], + + "@changesets/errors": ["@changesets/errors@0.2.0", "", { "dependencies": { "extendable-error": "^0.1.5" } }, "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow=="], + + "@changesets/get-dependents-graph": ["@changesets/get-dependents-graph@2.1.3", "", { "dependencies": { "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "picocolors": "^1.1.0", "semver": "^7.5.3" } }, "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ=="], + + "@changesets/get-release-plan": ["@changesets/get-release-plan@4.0.14", "", { "dependencies": { "@changesets/assemble-release-plan": "^6.0.9", "@changesets/config": "^3.1.2", "@changesets/pre": "^2.0.2", "@changesets/read": "^0.6.6", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3" } }, "sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g=="], + + "@changesets/get-version-range-type": ["@changesets/get-version-range-type@0.4.0", "", {}, "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ=="], + + "@changesets/git": ["@changesets/git@3.0.4", "", { "dependencies": { "@changesets/errors": "^0.2.0", "@manypkg/get-packages": "^1.1.3", "is-subdir": "^1.1.1", "micromatch": "^4.0.8", "spawndamnit": "^3.0.1" } }, "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw=="], + + "@changesets/logger": ["@changesets/logger@0.1.1", "", { "dependencies": { "picocolors": "^1.1.0" } }, "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg=="], + + "@changesets/parse": ["@changesets/parse@0.4.2", "", { "dependencies": { "@changesets/types": "^6.1.0", "js-yaml": "^4.1.1" } }, "sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA=="], + + "@changesets/pre": ["@changesets/pre@2.0.2", "", { "dependencies": { "@changesets/errors": "^0.2.0", "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1" } }, "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug=="], + + "@changesets/read": ["@changesets/read@0.6.6", "", { "dependencies": { "@changesets/git": "^3.0.4", "@changesets/logger": "^0.1.1", "@changesets/parse": "^0.4.2", "@changesets/types": "^6.1.0", "fs-extra": "^7.0.1", "p-filter": "^2.1.0", "picocolors": "^1.1.0" } }, "sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg=="], + + "@changesets/should-skip-package": ["@changesets/should-skip-package@0.1.2", "", { "dependencies": { "@changesets/types": "^6.1.0", "@manypkg/get-packages": "^1.1.3" } }, "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw=="], + + "@changesets/types": ["@changesets/types@6.1.0", "", {}, "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA=="], + + "@changesets/write": ["@changesets/write@0.4.0", "", { "dependencies": { "@changesets/types": "^6.1.0", "fs-extra": "^7.0.1", "human-id": "^4.1.1", "prettier": "^2.7.1" } }, "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q=="], + + "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + + "@inquirer/external-editor": ["@inquirer/external-editor@1.0.3", "", { "dependencies": { "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@istanbuljs/load-nyc-config": ["@istanbuljs/load-nyc-config@1.1.0", "", { "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" } }, "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="], + + "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], + + "@jest/console": ["@jest/console@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0" } }, "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ=="], + + "@jest/core": ["@jest/core@30.2.0", "", { "dependencies": { "@jest/console": "30.2.0", "@jest/pattern": "30.0.1", "@jest/reporters": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-changed-files": "30.2.0", "jest-config": "30.2.0", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-resolve-dependencies": "30.2.0", "jest-runner": "30.2.0", "jest-runtime": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "jest-watcher": "30.2.0", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ=="], + + "@jest/diff-sequences": ["@jest/diff-sequences@30.0.1", "", {}, "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw=="], + + "@jest/environment": ["@jest/environment@30.2.0", "", { "dependencies": { "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0" } }, "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g=="], + + "@jest/expect": ["@jest/expect@30.2.0", "", { "dependencies": { "expect": "30.2.0", "jest-snapshot": "30.2.0" } }, "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA=="], + + "@jest/expect-utils": ["@jest/expect-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0" } }, "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA=="], + + "@jest/fake-timers": ["@jest/fake-timers@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw=="], + + "@jest/get-type": ["@jest/get-type@30.1.0", "", {}, "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA=="], + + "@jest/globals": ["@jest/globals@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/types": "30.2.0", "jest-mock": "30.2.0" } }, "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw=="], + + "@jest/pattern": ["@jest/pattern@30.0.1", "", { "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" } }, "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA=="], + + "@jest/reporters": ["@jest/reporters@30.2.0", "", { "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "jest-worker": "30.2.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ=="], + + "@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], + + "@jest/snapshot-utils": ["@jest/snapshot-utils@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" } }, "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug=="], + + "@jest/source-map": ["@jest/source-map@30.0.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "callsites": "^3.1.0", "graceful-fs": "^4.2.11" } }, "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg=="], + + "@jest/test-result": ["@jest/test-result@30.2.0", "", { "dependencies": { "@jest/console": "30.2.0", "@jest/types": "30.2.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" } }, "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg=="], + + "@jest/test-sequencer": ["@jest/test-sequencer@30.2.0", "", { "dependencies": { "@jest/test-result": "30.2.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "slash": "^3.0.0" } }, "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q=="], + + "@jest/transform": ["@jest/transform@30.2.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-regex-util": "30.0.1", "jest-util": "30.2.0", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" } }, "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA=="], + + "@jest/types": ["@jest/types@30.2.0", "", { "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", "@types/yargs": "^17.0.33", "chalk": "^4.1.2" } }, "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@manypkg/find-root": ["@manypkg/find-root@1.1.0", "", { "dependencies": { "@babel/runtime": "^7.5.5", "@types/node": "^12.7.1", "find-up": "^4.1.0", "fs-extra": "^8.1.0" } }, "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA=="], + + "@manypkg/get-packages": ["@manypkg/get-packages@1.1.3", "", { "dependencies": { "@babel/runtime": "^7.5.5", "@changesets/types": "^4.0.1", "@manypkg/find-root": "^1.1.0", "fs-extra": "^8.1.0", "globby": "^11.0.0", "read-yaml-file": "^1.1.0" } }, "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A=="], + + "@microsoft/api-extractor": ["@microsoft/api-extractor@7.57.2", "", { "dependencies": { "@microsoft/api-extractor-model": "7.33.1", "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.20.1", "@rushstack/rig-package": "0.7.1", "@rushstack/terminal": "0.22.1", "@rushstack/ts-command-line": "5.3.1", "diff": "~8.0.2", "lodash": "~4.17.23", "minimatch": "10.2.1", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.8.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-Dih58xLlG+M6k2qVSksk9xJx8HvmJEyK3LcHrcqXE7eK/U7pg/8cTT8j1TKijU4P4639wvCy1zhDuvtjRy+02Q=="], + + "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.33.1", "", { "dependencies": { "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.20.1" } }, "sha512-KX0LI6xzI0gcBOXXmr5mnnbdhsK2W93pqvJo8OgJgWvRRh+wMEp0Ccj38h1XKeJ29E1tuAZKSUOfHUQ1WA8fZg=="], + + "@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], + + "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.18.0", "", { "dependencies": { "@microsoft/tsdoc": "0.16.0", "ajv": "~8.12.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.57.1", "", { "os": "android", "cpu": "arm" }, "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.57.1", "", { "os": "android", "cpu": "arm64" }, "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.57.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.57.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.57.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.57.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.57.1", "", { "os": "linux", "cpu": "arm" }, "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.57.1", "", { "os": "linux", "cpu": "arm" }, "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.57.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.57.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.57.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.57.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.57.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.57.1", "", { "os": "linux", "cpu": "x64" }, "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.57.1", "", { "os": "linux", "cpu": "x64" }, "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.57.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.57.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.57.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.57.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.57.1", "", { "os": "win32", "cpu": "x64" }, "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.57.1", "", { "os": "win32", "cpu": "x64" }, "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA=="], + + "@rushstack/node-core-library": ["@rushstack/node-core-library@5.20.1", "", { "dependencies": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", "semver": "~7.5.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg=="], + + "@rushstack/problem-matcher": ["@rushstack/problem-matcher@0.2.1", "", { "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog=="], + + "@rushstack/rig-package": ["@rushstack/rig-package@0.7.1", "", { "dependencies": { "resolve": "~1.22.1", "strip-json-comments": "~3.1.1" } }, "sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA=="], + + "@rushstack/terminal": ["@rushstack/terminal@0.22.1", "", { "dependencies": { "@rushstack/node-core-library": "5.20.1", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw=="], + + "@rushstack/ts-command-line": ["@rushstack/ts-command-line@5.3.1", "", { "dependencies": { "@rushstack/terminal": "0.22.1", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.48", "", {}, "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA=="], + + "@sinonjs/commons": ["@sinonjs/commons@3.0.1", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ=="], + + "@sinonjs/fake-timers": ["@sinonjs/fake-timers@13.0.5", "", { "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@types/argparse": ["@types/argparse@1.0.38", "", {}, "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], + + "@types/istanbul-lib-report": ["@types/istanbul-lib-report@3.0.3", "", { "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA=="], + + "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], + + "@types/jest": ["@types/jest@30.0.0", "", { "dependencies": { "expect": "^30.0.0", "pretty-format": "^30.0.0" } }, "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA=="], + + "@types/node": ["@types/node@25.3.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A=="], + + "@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="], + + "@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="], + + "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], + + "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], + + "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="], + + "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="], + + "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="], + + "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="], + + "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="], + + "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="], + + "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="], + + "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="], + + "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="], + + "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="], + + "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="], + + "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="], + + "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="], + + "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="], + + "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="], + + "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="], + + "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], + + "@volar/language-core": ["@volar/language-core@2.4.28", "", { "dependencies": { "@volar/source-map": "2.4.28" } }, "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ=="], + + "@volar/source-map": ["@volar/source-map@2.4.28", "", {}, "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ=="], + + "@volar/typescript": ["@volar/typescript@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "ajv": ["ajv@8.12.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA=="], + + "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], + + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + + "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], + + "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + + "babel-jest": ["babel-jest@30.2.0", "", { "dependencies": { "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw=="], + + "babel-plugin-istanbul": ["babel-plugin-istanbul@7.0.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA=="], + + "babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.2.0", "", { "dependencies": { "@types/babel__core": "^7.20.5" } }, "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA=="], + + "babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "", { "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="], + + "babel-preset-jest": ["babel-preset-jest@30.2.0", "", { "dependencies": { "babel-plugin-jest-hoist": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ=="], + + "balanced-match": ["balanced-match@4.0.3", "", {}, "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.0", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="], + + "better-path-resolve": ["better-path-resolve@1.0.0", "", { "dependencies": { "is-windows": "^1.0.0" } }, "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g=="], + + "brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "bs-logger": ["bs-logger@0.2.6", "", { "dependencies": { "fast-json-stable-stringify": "2.x" } }, "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog=="], + + "bser": ["bser@2.1.1", "", { "dependencies": { "node-int64": "^0.4.0" } }, "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001770", "", {}, "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], + + "chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="], + + "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + + "cjs-module-lexer": ["cjs-module-lexer@2.2.0", "", {}, "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "co": ["co@4.6.0", "", {}, "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ=="], + + "collect-v8-coverage": ["collect-v8-coverage@1.0.3", "", {}, "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "compare-versions": ["compare-versions@6.1.1", "", {}, "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "dedent": ["dedent@1.7.1", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "detect-indent": ["detect-indent@6.1.0", "", {}, "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA=="], + + "detect-newline": ["detect-newline@3.1.0", "", {}, "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="], + + "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], + + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="], + + "emittery": ["emittery@0.13.1", "", {}, "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "enquirer": ["enquirer@2.4.1", "", { "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" } }, "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ=="], + + "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], + + "esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], + + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "execa": ["execa@5.1.1", "", { "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" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], + + "exit-x": ["exit-x@0.2.2", "", {}, "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ=="], + + "expect": ["expect@30.2.0", "", { "dependencies": { "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-util": "30.2.0" } }, "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw=="], + + "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], + + "extendable-error": ["extendable-error@0.1.7", "", {}, "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + + "fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "fs-extra": ["fs-extra@7.0.1", "", { "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-package-type": ["get-package-type@0.1.0", "", {}, "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="], + + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + + "glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], + + "human-id": ["human-id@4.1.3", "", { "bin": { "human-id": "dist/cli.js" } }, "sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q=="], + + "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], + + "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "import-lazy": ["import-lazy@4.0.0", "", {}, "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw=="], + + "import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-generator-fn": ["is-generator-fn@2.1.0", "", {}, "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + + "is-subdir": ["is-subdir@1.2.0", "", { "dependencies": { "better-path-resolve": "1.0.0" } }, "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw=="], + + "is-windows": ["is-windows@1.0.2", "", {}, "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="], + + "istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="], + + "istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="], + + "istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="], + + "istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="], + + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jest": ["jest@30.2.0", "", { "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", "import-local": "^3.2.0", "jest-cli": "30.2.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": "./bin/jest.js" }, "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A=="], + + "jest-changed-files": ["jest-changed-files@30.2.0", "", { "dependencies": { "execa": "^5.1.1", "jest-util": "30.2.0", "p-limit": "^3.1.0" } }, "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ=="], + + "jest-circus": ["jest-circus@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/expect": "30.2.0", "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-runtime": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "p-limit": "^3.1.0", "pretty-format": "30.2.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg=="], + + "jest-cli": ["jest-cli@30.2.0", "", { "dependencies": { "@jest/core": "30.2.0", "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", "jest-config": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "yargs": "^17.7.2" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "./bin/jest.js" } }, "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA=="], + + "jest-config": ["jest-config@30.2.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", "@jest/test-sequencer": "30.2.0", "@jest/types": "30.2.0", "babel-jest": "30.2.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-circus": "30.2.0", "jest-docblock": "30.2.0", "jest-environment-node": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-runner": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "peerDependencies": { "@types/node": "*", "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "esbuild-register", "ts-node"] }, "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA=="], + + "jest-diff": ["jest-diff@30.2.0", "", { "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.2.0" } }, "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A=="], + + "jest-docblock": ["jest-docblock@30.2.0", "", { "dependencies": { "detect-newline": "^3.1.0" } }, "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA=="], + + "jest-each": ["jest-each@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "chalk": "^4.1.2", "jest-util": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ=="], + + "jest-environment-node": ["jest-environment-node@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "jest-mock": "30.2.0", "jest-util": "30.2.0", "jest-validate": "30.2.0" } }, "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA=="], + + "jest-haste-map": ["jest-haste-map@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.2.0", "jest-worker": "30.2.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, "optionalDependencies": { "fsevents": "^2.3.3" } }, "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw=="], + + "jest-leak-detector": ["jest-leak-detector@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "pretty-format": "30.2.0" } }, "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ=="], + + "jest-matcher-utils": ["jest-matcher-utils@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "jest-diff": "30.2.0", "pretty-format": "30.2.0" } }, "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg=="], + + "jest-message-util": ["jest-message-util@30.2.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" } }, "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw=="], + + "jest-mock": ["jest-mock@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "jest-util": "30.2.0" } }, "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw=="], + + "jest-pnp-resolver": ["jest-pnp-resolver@1.2.3", "", { "peerDependencies": { "jest-resolve": "*" }, "optionalPeers": ["jest-resolve"] }, "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w=="], + + "jest-regex-util": ["jest-regex-util@30.0.1", "", {}, "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA=="], + + "jest-resolve": ["jest-resolve@30.2.0", "", { "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.2.0", "jest-validate": "30.2.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" } }, "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A=="], + + "jest-resolve-dependencies": ["jest-resolve-dependencies@30.2.0", "", { "dependencies": { "jest-regex-util": "30.0.1", "jest-snapshot": "30.2.0" } }, "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w=="], + + "jest-runner": ["jest-runner@30.2.0", "", { "dependencies": { "@jest/console": "30.2.0", "@jest/environment": "30.2.0", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.2.0", "jest-environment-node": "30.2.0", "jest-haste-map": "30.2.0", "jest-leak-detector": "30.2.0", "jest-message-util": "30.2.0", "jest-resolve": "30.2.0", "jest-runtime": "30.2.0", "jest-util": "30.2.0", "jest-watcher": "30.2.0", "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ=="], + + "jest-runtime": ["jest-runtime@30.2.0", "", { "dependencies": { "@jest/environment": "30.2.0", "@jest/fake-timers": "30.2.0", "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", "@jest/test-result": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", "jest-resolve": "30.2.0", "jest-snapshot": "30.2.0", "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg=="], + + "jest-snapshot": ["jest-snapshot@30.2.0", "", { "dependencies": { "@babel/core": "^7.27.4", "@babel/generator": "^7.27.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", "@jest/snapshot-utils": "30.2.0", "@jest/transform": "30.2.0", "@jest/types": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", "expect": "30.2.0", "graceful-fs": "^4.2.11", "jest-diff": "30.2.0", "jest-matcher-utils": "30.2.0", "jest-message-util": "30.2.0", "jest-util": "30.2.0", "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" } }, "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA=="], + + "jest-util": ["jest-util@30.2.0", "", { "dependencies": { "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", "graceful-fs": "^4.2.11", "picomatch": "^4.0.2" } }, "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA=="], + + "jest-validate": ["jest-validate@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.2.0" } }, "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw=="], + + "jest-watcher": ["jest-watcher@30.2.0", "", { "dependencies": { "@jest/test-result": "30.2.0", "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", "jest-util": "30.2.0", "string-length": "^4.0.2" } }, "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg=="], + + "jest-worker": ["jest-worker@30.2.0", "", { "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" } }, "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g=="], + + "jju": ["jju@1.4.0", "", {}, "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], + + "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "local-pkg": ["local-pkg@1.1.2", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A=="], + + "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + + "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], + + "lodash.startcase": ["lodash.startcase@4.4.0", "", {}, "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg=="], + + "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="], + + "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], + + "makeerror": ["makeerror@1.0.12", "", { "dependencies": { "tmpl": "1.0.5" } }, "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg=="], + + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "minimatch": ["minimatch@10.2.1", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + + "mockdate": ["mockdate@3.0.5", "", {}, "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ=="], + + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], + + "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], + + "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "outdent": ["outdent@0.5.0", "", {}, "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q=="], + + "p-filter": ["p-filter@2.1.0", "", { "dependencies": { "p-map": "^2.0.0" } }, "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw=="], + + "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "p-map": ["p-map@2.1.0", "", {}, "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="], + + "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "package-manager-detector": ["package-manager-detector@0.2.11", "", { "dependencies": { "quansync": "^0.2.7" } }, "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ=="], + + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "pify": ["pify@4.0.1", "", {}, "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="], + + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], + + "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], + + "pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "pure-rand": ["pure-rand@7.0.1", "", {}, "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ=="], + + "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + + "read-yaml-file": ["read-yaml-file@1.1.0", "", { "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", "pify": "^4.0.1", "strip-bom": "^3.0.0" } }, "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + + "resolve-cwd": ["resolve-cwd@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="], + + "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@4.57.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.1", "@rollup/rollup-android-arm64": "4.57.1", "@rollup/rollup-darwin-arm64": "4.57.1", "@rollup/rollup-darwin-x64": "4.57.1", "@rollup/rollup-freebsd-arm64": "4.57.1", "@rollup/rollup-freebsd-x64": "4.57.1", "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", "@rollup/rollup-linux-arm-musleabihf": "4.57.1", "@rollup/rollup-linux-arm64-gnu": "4.57.1", "@rollup/rollup-linux-arm64-musl": "4.57.1", "@rollup/rollup-linux-loong64-gnu": "4.57.1", "@rollup/rollup-linux-loong64-musl": "4.57.1", "@rollup/rollup-linux-ppc64-gnu": "4.57.1", "@rollup/rollup-linux-ppc64-musl": "4.57.1", "@rollup/rollup-linux-riscv64-gnu": "4.57.1", "@rollup/rollup-linux-riscv64-musl": "4.57.1", "@rollup/rollup-linux-s390x-gnu": "4.57.1", "@rollup/rollup-linux-x64-gnu": "4.57.1", "@rollup/rollup-linux-x64-musl": "4.57.1", "@rollup/rollup-openbsd-x64": "4.57.1", "@rollup/rollup-openharmony-arm64": "4.57.1", "@rollup/rollup-win32-arm64-msvc": "4.57.1", "@rollup/rollup-win32-ia32-msvc": "4.57.1", "@rollup/rollup-win32-x64-gnu": "4.57.1", "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "spawndamnit": ["spawndamnit@3.0.1", "", { "dependencies": { "cross-spawn": "^7.0.5", "signal-exit": "^4.0.1" } }, "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg=="], + + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + + "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], + + "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], + + "string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], + + "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + + "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "synckit": ["synckit@0.11.12", "", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ=="], + + "term-size": ["term-size@2.2.1", "", {}, "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="], + + "terser": ["terser@5.46.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg=="], + + "test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tmpl": ["tmpl@1.0.5", "", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "ts-jest": ["ts-jest@29.4.6", "", { "dependencies": { "bs-logger": "^0.2.6", "fast-json-stable-stringify": "^2.1.0", "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.3", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@jest/transform": "^29.0.0 || ^30.0.0", "@jest/types": "^29.0.0 || ^30.0.0", "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "optionalPeers": ["@babel/core", "@jest/transform", "@jest/types", "babel-jest", "jest-util"], "bin": { "ts-jest": "cli.js" } }, "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "type-detect": ["type-detect@4.0.8", "", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="], + + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], + + "unplugin-dts": ["unplugin-dts@1.0.0-beta.6", "", { "dependencies": { "@rollup/pluginutils": "^5.1.4", "@volar/typescript": "^2.4.17", "compare-versions": "^6.1.1", "debug": "^4.4.0", "kolorist": "^1.8.0", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "unplugin": "^2.3.2" }, "peerDependencies": { "@microsoft/api-extractor": ">=7", "@rspack/core": "^1", "@vue/language-core": "~3.0.1", "esbuild": "*", "rolldown": "*", "rollup": ">=3", "typescript": ">=4", "vite": ">=3", "webpack": "^4 || ^5" }, "optionalPeers": ["@microsoft/api-extractor", "@rspack/core", "@vue/language-core", "esbuild", "rolldown", "rollup", "vite", "webpack"] }, "sha512-+xbFv5aVFtLZFNBAKI4+kXmd2h+T42/AaP8Bsp0YP/je/uOTN94Ame2Xt3e9isZS+Z7/hrLCLbsVJh+saqFMfQ=="], + + "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], + + "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="], + + "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + + "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], + + "walker": ["walker@1.0.8", "", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="], + + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "write-file-atomic": ["write-file-atomic@5.0.1", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "@istanbuljs/load-nyc-config/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + + "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + + "@jest/core/ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + + "@manypkg/find-root/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="], + + "@manypkg/find-root/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "@manypkg/get-packages/@changesets/types": ["@changesets/types@4.1.0", "", {}, "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw=="], + + "@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "@microsoft/api-extractor/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + + "@microsoft/api-extractor/typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], + + "@rushstack/node-core-library/ajv": ["ajv@8.13.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.4.1" } }, "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA=="], + + "@rushstack/node-core-library/fs-extra": ["fs-extra@11.3.3", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg=="], + + "@rushstack/node-core-library/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], + + "ajv-formats/ajv": ["ajv@8.13.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.4.1" } }, "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA=="], + + "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "jest-changed-files/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "jest-circus/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "jest-config/ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + + "jest-runner/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "jest-runner/source-map-support": ["source-map-support@0.5.13", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="], + + "jest-runtime/strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], + + "jest-util/ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + + "js-yaml/argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "read-yaml-file/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + + "test-exclude/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "test-exclude/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "@rushstack/node-core-library/fs-extra/jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + + "@rushstack/node-core-library/fs-extra/universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "test-exclude/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "test-exclude/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + } +} diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index 9c01dea24..000000000 --- a/codecov.yml +++ /dev/null @@ -1,6 +0,0 @@ -ignore: - - 'dist/' - - 'test/' - - 'node_modules/' - - '.github/' - - 'webpack.config.js' diff --git a/index.html b/index.html new file mode 100644 index 000000000..11b498c41 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + @offload-project/rrule + + +
+ + + diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 8bb37208d..000000000 --- a/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', -} diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 000000000..3ec3cfefd --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,12 @@ +import type { Config } from '@jest/types'; + +const config: Config.InitialOptions = { + preset: 'ts-jest', + testEnvironment: 'node', + coverageProvider: 'v8', + moduleNameMapper: { + '^@/(.*)$': '/src/$1', + }, +}; + +export default config; diff --git a/package.json b/package.json index a31a11168..d9c5999d7 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "rrule", + "name": "@offload-project/rrule", "version": "2.8.0", "description": "JavaScript library for working with recurrence rules for calendar dates.", - "homepage": "http://jakubroztocil.github.io/rrule/", + "homepage": "http://offload-project.github.io/rrule/", "license": "BSD-3-Clause", "keywords": [ "dates", @@ -11,81 +11,58 @@ "icalendar", "rfc" ], - "author": "Jakub Roztocil, Lars Schöning, and David Golightly", - "main": "dist/es5/rrule.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", + "author": "Shavonn Brown, Jakub Roztocil, Lars Schöning, and David Golightly", + "type": "module", + "main": "./dist/rrule.cjs", + "module": "./dist/rrule.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/rrule.js" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/rrule.cjs" + } + } + }, + "files": [ + "dist" + ], "repository": { "type": "git", - "url": "git://github.com/jakubroztocil/rrule.git" + "url": "git://github.com/offload-project/rrule.git" }, "scripts": { - "prebuild": "yarn clean", - "prepublish": "yarn build", - "build": "yarn lint && yarn format-check && tsc -b tsconfig.build.json && webpack && tsc dist/esm/**/*.d.ts", - "clean": "rm -rf dist/", - "lint": "yarn eslint . --fix --config .eslintrc.js", - "format": "yarn prettier --write .", - "format-check": "yarn prettier --check .", - "run-ts": "TS_NODE_PROJECT=tsconfig.json node --loader ts-node/esm", + "dev": "vite", + "lint": "biome check .", + "check": "biome check --write .", + "format": "biome format --write .", + "build": "tsc && vite build", + "preview": "vite preview", "test": "jest **/*.test.ts", - "test-ci": "yarn run-ts ./node_modules/.bin/nyc jest **/*.test.ts" - }, - "nyc": { - "extension": [ - ".ts", - ".tsx" - ], - "exclude": [ - "**/*.d.ts" - ], - "reporter": [ - "html" - ], - "all": true + "change": "changeset", + "publish-package": "changeset version && changeset publish" }, - "lint-staged": { - "*.ts": [ - "yarn lint", - "yarn format" - ] + "publishConfig": { + "access": "public", + "registry": "https://npm.pkg.github.com", + "@offload-project:registry": "https://npm.pkg.github.com" }, "devDependencies": { - "@types/assert": "^1.4.3", - "@types/jest": "^29.5.8", - "@types/mockdate": "^3.0.0", - "@types/node": "^17.0.41", - "@typescript-eslint/eslint-plugin": "^5.27.1", - "@typescript-eslint/parser": "^5.27.1", - "coverage": "^0.4.1", - "eslint": "^8.17.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.2", - "eslint-plugin-prettier": "^4.0.0", - "husky": "^8.0.1", - "jest": "^29.7.0", - "lint-staged": "^13.0.1", + "@biomejs/biome": "^2.4.4", + "@changesets/cli": "^2.29.8", + "@microsoft/api-extractor": "^7.57.2", + "@types/jest": "^30.0.0", + "@types/node": "^25.3.0", + "jest": "^30.2.0", "mockdate": "^3.0.5", - "nyc": "^15.1.0", - "prettier": "^2.6.2", - "source-map-loader": "^3.0.1", - "source-map-support": "^0.5.16", - "terser-webpack-plugin": "^5.3.3", - "ts-jest": "^29.1.1", - "ts-loader": "^9.3.0", - "ts-node": "^10.8.1", - "typescript": "^4.7.3", - "unminified-webpack-plugin": "^3.0.0", - "webpack": "^5.73.0", - "webpack-cli": "^4.9.2" - }, - "files": [ - "dist", - "README.md" - ], - "peerDependencies": {}, - "dependencies": { - "tslib": "^2.4.0" + "terser": "^5.46.0", + "ts-jest": "^29.4.6", + "typescript": "^5.9.3", + "unplugin-dts": "^1.0.0-beta.6", + "vite": "^7.3.1" } } diff --git a/src/cache.ts b/src/cache.ts index 02ed58e32..966d56632 100644 --- a/src/cache.ts +++ b/src/cache.ts @@ -1,31 +1,34 @@ -import IterResult, { IterArgs } from './iterresult' -import { clone, cloneDates } from './dateutil' -import { isArray } from './helpers' +import { clone, cloneDates } from './dateutil'; +import { isArray } from './helpers'; +import IterResult, { type IterArgs } from './iterresult'; -export type CacheKeys = 'before' | 'after' | 'between' +export type CacheKeys = 'before' | 'after' | 'between'; + +/** Max cached entries per query method (before/after/between) */ +const MAX_CACHE_SIZE = 64; function argsMatch( left: IterArgs[keyof IterArgs] | undefined, - right: IterArgs[keyof IterArgs] | undefined + right: IterArgs[keyof IterArgs] | undefined, ) { if (Array.isArray(left)) { - if (!Array.isArray(right)) return false - if (left.length !== right.length) return false - return left.every((date, i) => date.getTime() === right[i].getTime()) + if (!Array.isArray(right)) return false; + if (left.length !== right.length) return false; + return left.every((date, i) => date.getTime() === right[i]!.getTime()); } if (left instanceof Date) { - return right instanceof Date && left.getTime() === right.getTime() + return right instanceof Date && left.getTime() === right.getTime(); } - return left === right + return left === right; } export class Cache { - all: Date[] | Partial | false = false - before: IterArgs[] = [] - after: IterArgs[] = [] - between: IterArgs[] = [] + all: Date[] | false = false; + before: IterArgs[] = []; + after: IterArgs[] = []; + between: IterArgs[] = []; /** * @param {String} what - all/before/after/between @@ -35,17 +38,21 @@ export class Cache { public _cacheAdd( what: CacheKeys | 'all', value: Date[] | Date | null, - args?: Partial + args?: Partial, ) { if (value) { - value = value instanceof Date ? clone(value) : cloneDates(value) + value = value instanceof Date ? clone(value) : cloneDates(value); } if (what === 'all') { - this.all = value as Date[] + this.all = value as Date[]; } else { - args._value = value - this[what].push(args as IterArgs) + args!._value = value; + // Evict oldest entry if cache is full + if (this[what].length > MAX_CACHE_SIZE) { + this[what].shift(); + } + this[what].push(args as IterArgs); } } @@ -58,49 +65,47 @@ export class Cache { */ public _cacheGet( what: CacheKeys | 'all', - args?: Partial + args?: Partial, ): Date | Date[] | false | null { - let cached: Date | Date[] | false | null = false - const argsKeys = args ? (Object.keys(args) as (keyof IterArgs)[]) : [] - const findCacheDiff = function (item: IterArgs) { + let cached: Date | Date[] | false | null = false; + const argsKeys = args ? (Object.keys(args) as (keyof IterArgs)[]) : []; + const findCacheDiff = (item: IterArgs) => { for (let i = 0; i < argsKeys.length; i++) { - const key = argsKeys[i] - if (!argsMatch(args[key], item[key])) { - return true + const key = argsKeys[i]!; + if (!argsMatch(args![key], item[key])) { + return true; } } - return false - } + return false; + }; - const cachedObject = this[what] if (what === 'all') { - cached = this.all as Date[] - } else if (isArray(cachedObject)) { + cached = this.all as Date[]; + } else { // Let's see whether we've already called the // 'what' method with the same 'args' - for (let i = 0; i < cachedObject.length; i++) { - const item = cachedObject[i] as IterArgs - if (argsKeys.length && findCacheDiff(item)) continue - cached = item._value - break + for (const item of this[what]) { + if (argsKeys.length && findCacheDiff(item)) continue; + cached = item._value; + break; } } - if (!cached && this.all) { + if (cached === false && this.all) { // Not in the cache, but we already know all the occurrences, // so we can find the correct dates from the cached ones. - const iterResult = new IterResult(what, args) - for (let i = 0; i < (this.all as Date[]).length; i++) { - if (!iterResult.accept((this.all as Date[])[i])) break + const iterResult = new IterResult(what, args!); + for (const date of this.all) { + if (!iterResult.accept(date)) break; } - cached = iterResult.getValue() as Date - this._cacheAdd(what, cached, args) + cached = iterResult.getValue() as Date; + this._cacheAdd(what, cached, args); } return isArray(cached) ? cloneDates(cached) : cached instanceof Date - ? clone(cached) - : cached + ? clone(cached) + : cached; } } diff --git a/src/callbackiterresult.ts b/src/callbackiterresult.ts index 67c57d711..160782729 100644 --- a/src/callbackiterresult.ts +++ b/src/callbackiterresult.ts @@ -1,29 +1,29 @@ -import IterResult, { IterArgs } from './iterresult' +import IterResult, { type IterArgs } from './iterresult'; -type Iterator = (d: Date, len: number) => boolean +type Iterator = (d: Date, len: number) => boolean; /** * IterResult subclass that calls a callback function on each add, * and stops iterating when the callback returns false. */ export default class CallbackIterResult extends IterResult<'all' | 'between'> { - private iterator: Iterator + private iterator: Iterator; constructor( method: 'all' | 'between', args: Partial, - iterator: Iterator + iterator: Iterator, ) { - super(method, args) + super(method, args); - this.iterator = iterator + this.iterator = iterator; } add(date: Date) { if (this.iterator(date, this._result.length)) { - this._result.push(date) - return true + this._result.push(date); + return true; } - return false + return false; } } diff --git a/src/datetime.ts b/src/datetime.ts index a542047ce..8f168128a 100644 --- a/src/datetime.ts +++ b/src/datetime.ts @@ -1,64 +1,64 @@ -import { ParsedOptions, Frequency } from './types' -import { pymod, divmod, empty, includes } from './helpers' -import { getWeekday, MAXYEAR, monthRange } from './dateutil' +import { getWeekday, MAXYEAR, monthRange } from './dateutil'; +import { divmod, empty, pymod } from './helpers'; +import { Frequency, type ParsedOptions } from './types'; export class Time { - public hour: number - public minute: number - public second: number - public millisecond: number + public hour: number; + public minute: number; + public second: number; + public millisecond: number; constructor( hour: number, minute: number, second: number, - millisecond: number + millisecond: number, ) { - this.hour = hour - this.minute = minute - this.second = second - this.millisecond = millisecond || 0 + this.hour = hour; + this.minute = minute; + this.second = second; + this.millisecond = millisecond || 0; } getHours() { - return this.hour + return this.hour; } getMinutes() { - return this.minute + return this.minute; } getSeconds() { - return this.second + return this.second; } getMilliseconds() { - return this.millisecond + return this.millisecond; } getTime() { return ( (this.hour * 60 * 60 + this.minute * 60 + this.second) * 1000 + this.millisecond - ) + ); } } export class DateTime extends Time { - public day: number - public month: number - public year: number + public day: number; + public month: number; + public year: number; static fromDate(date: Date) { - return new this( + return new DateTime( date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), - date.valueOf() % 1000 - ) + date.valueOf() % 1000, + ); } constructor( @@ -68,16 +68,16 @@ export class DateTime extends Time { hour: number, minute: number, second: number, - millisecond: number + millisecond: number, ) { - super(hour, minute, second, millisecond) - this.year = year - this.month = month - this.day = day + super(hour, minute, second, millisecond); + this.year = year; + this.month = month; + this.day = day; } getWeekday() { - return getWeekday(new Date(this.getTime())) + return getWeekday(new Date(this.getTime())); } getTime() { @@ -89,71 +89,70 @@ export class DateTime extends Time { this.hour, this.minute, this.second, - this.millisecond - ) - ).getTime() + this.millisecond, + ), + ).getTime(); } getDay() { - return this.day + return this.day; } getMonth() { - return this.month + return this.month; } getYear() { - return this.year + return this.year; } public addYears(years: number) { - this.year += years + this.year += years; } public addMonths(months: number) { - this.month += months + this.month += months; if (this.month > 12) { - const yearDiv = Math.floor(this.month / 12) - const monthMod = pymod(this.month, 12) - this.month = monthMod - this.year += yearDiv + const yearDiv = Math.floor(this.month / 12); + this.month = pymod(this.month, 12); + this.year += yearDiv; if (this.month === 0) { - this.month = 12 - --this.year + this.month = 12; + --this.year; } } } public addWeekly(days: number, wkst: number) { if (wkst > this.getWeekday()) { - this.day += -(this.getWeekday() + 1 + (6 - wkst)) + days * 7 + this.day += -(this.getWeekday() + 1 + (6 - wkst)) + days * 7; } else { - this.day += -(this.getWeekday() - wkst) + days * 7 + this.day += -(this.getWeekday() - wkst) + days * 7; } - this.fixDay() + this.fixDay(); } public addDaily(days: number) { - this.day += days - this.fixDay() + this.day += days; + this.fixDay(); } public addHours(hours: number, filtered: boolean, byhour: number[]) { if (filtered) { // Jump to one iteration before next day - this.hour += Math.floor((23 - this.hour) / hours) * hours + this.hour += Math.floor((23 - this.hour) / hours) * hours; } for (;;) { - this.hour += hours - const { div: dayDiv, mod: hourMod } = divmod(this.hour, 24) + this.hour += hours; + const { div: dayDiv, mod: hourMod } = divmod(this.hour, 24); if (dayDiv) { - this.hour = hourMod - this.addDaily(dayDiv) + this.hour = hourMod; + this.addDaily(dayDiv); } - if (empty(byhour) || includes(byhour, this.hour)) break + if (empty(byhour) || byhour.includes(this.hour)) break; } } @@ -161,27 +160,27 @@ export class DateTime extends Time { minutes: number, filtered: boolean, byhour: number[], - byminute: number[] + byminute: number[], ) { if (filtered) { // Jump to one iteration before next day this.minute += - Math.floor((1439 - (this.hour * 60 + this.minute)) / minutes) * minutes + Math.floor((1439 - (this.hour * 60 + this.minute)) / minutes) * minutes; } for (;;) { - this.minute += minutes - const { div: hourDiv, mod: minuteMod } = divmod(this.minute, 60) + this.minute += minutes; + const { div: hourDiv, mod: minuteMod } = divmod(this.minute, 60); if (hourDiv) { - this.minute = minuteMod - this.addHours(hourDiv, false, byhour) + this.minute = minuteMod; + this.addHours(hourDiv, false, byhour); } if ( - (empty(byhour) || includes(byhour, this.hour)) && - (empty(byminute) || includes(byminute, this.minute)) + (empty(byhour) || byhour.includes(this.hour)) && + (empty(byminute) || byminute.includes(this.minute)) ) { - break + break; } } } @@ -191,78 +190,78 @@ export class DateTime extends Time { filtered: boolean, byhour: number[], byminute: number[], - bysecond: number[] + bysecond: number[], ) { if (filtered) { // Jump to one iteration before next day this.second += Math.floor( (86399 - (this.hour * 3600 + this.minute * 60 + this.second)) / - seconds - ) * seconds + seconds, + ) * seconds; } for (;;) { - this.second += seconds - const { div: minuteDiv, mod: secondMod } = divmod(this.second, 60) + this.second += seconds; + const { div: minuteDiv, mod: secondMod } = divmod(this.second, 60); if (minuteDiv) { - this.second = secondMod - this.addMinutes(minuteDiv, false, byhour, byminute) + this.second = secondMod; + this.addMinutes(minuteDiv, false, byhour, byminute); } if ( - (empty(byhour) || includes(byhour, this.hour)) && - (empty(byminute) || includes(byminute, this.minute)) && - (empty(bysecond) || includes(bysecond, this.second)) + (empty(byhour) || byhour.includes(this.hour)) && + (empty(byminute) || byminute.includes(this.minute)) && + (empty(bysecond) || bysecond.includes(this.second)) ) { - break + break; } } } public fixDay() { if (this.day <= 28) { - return + return; } - let daysinmonth = monthRange(this.year, this.month - 1)[1] + let daysinmonth = monthRange(this.year, this.month - 1)[1]; if (this.day <= daysinmonth) { - return + return; } while (this.day > daysinmonth) { - this.day -= daysinmonth - ++this.month + this.day -= daysinmonth; + ++this.month; if (this.month === 13) { - this.month = 1 - ++this.year + this.month = 1; + ++this.year; if (this.year > MAXYEAR) { - return + return; } } - daysinmonth = monthRange(this.year, this.month - 1)[1] + daysinmonth = monthRange(this.year, this.month - 1)[1]; } } public add(options: ParsedOptions, filtered: boolean) { - const { freq, interval, wkst, byhour, byminute, bysecond } = options + const { freq, interval, wkst, byhour, byminute, bysecond } = options; switch (freq) { case Frequency.YEARLY: - return this.addYears(interval) + return this.addYears(interval); case Frequency.MONTHLY: - return this.addMonths(interval) + return this.addMonths(interval); case Frequency.WEEKLY: - return this.addWeekly(interval, wkst) + return this.addWeekly(interval, wkst); case Frequency.DAILY: - return this.addDaily(interval) + return this.addDaily(interval); case Frequency.HOURLY: - return this.addHours(interval, filtered, byhour) + return this.addHours(interval, filtered, byhour); case Frequency.MINUTELY: - return this.addMinutes(interval, filtered, byhour, byminute) + return this.addMinutes(interval, filtered, byhour, byminute); case Frequency.SECONDLY: - return this.addSeconds(interval, filtered, byhour, byminute, bysecond) + return this.addSeconds(interval, filtered, byhour, byminute, bysecond); } } } diff --git a/src/dateutil.ts b/src/dateutil.ts index b2cd176a3..810c60925 100644 --- a/src/dateutil.ts +++ b/src/dateutil.ts @@ -1,142 +1,129 @@ -import { padStart } from './helpers' -import { Time } from './datetime' +import type { Time } from './datetime'; -type Datelike = Pick +type Datelike = Pick; -export const datetime = function ( +export const datetime = ( y: number, m: number, d: number, h = 0, i = 0, - s = 0 -) { - return new Date(Date.UTC(y, m - 1, d, h, i, s)) -} + s = 0, +) => new Date(Date.UTC(y, m - 1, d, h, i, s)); /** * General date-related utilities. * Also handles several incompatibilities between JavaScript and Python * */ -export const MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] +export const MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; /** * Number of milliseconds of one day */ -export const ONE_DAY = 1000 * 60 * 60 * 24 +export const ONE_DAY = 1000 * 60 * 60 * 24; /** * @see: */ -export const MAXYEAR = 9999 +export const MAXYEAR = 9999; /** * Python uses 1-Jan-1 as the base for calculating ordinals but we don't * want to confuse the JS engine with milliseconds > Number.MAX_NUMBER, * therefore we use 1-Jan-1970 instead */ -export const ORDINAL_BASE = datetime(1970, 1, 1) +export const ORDINAL_BASE = datetime(1970, 1, 1); /** * Python: MO-SU: 0 - 6 * JS: SU-SAT 0 - 6 */ -export const PY_WEEKDAYS = [6, 0, 1, 2, 3, 4, 5] +export const PY_WEEKDAYS = [6, 0, 1, 2, 3, 4, 5]; /** * py_date.timetuple()[7] */ -export const getYearDay = function (date: Date) { +export const getYearDay = (date: Date) => { const dateNoTime = new Date( date.getUTCFullYear(), date.getUTCMonth(), - date.getUTCDate() - ) + date.getUTCDate(), + ); return ( Math.ceil( (dateNoTime.valueOf() - new Date(date.getUTCFullYear(), 0, 1).valueOf()) / - ONE_DAY + ONE_DAY, ) + 1 - ) -} + ); +}; -export const isLeapYear = function (year: number) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 -} +export const isLeapYear = (year: number) => + (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; -export const isDate = function (value: unknown): value is Date { - return value instanceof Date -} +export const isDate = (value: unknown): value is Date => value instanceof Date; -export const isValidDate = function (value: unknown): value is Date { - return isDate(value) && !isNaN(value.getTime()) -} +export const isValidDate = (value: unknown): value is Date => + isDate(value) && !Number.isNaN(value.getTime()); /** * @return {Number} the date's timezone offset in ms */ -export const tzOffset = function (date: Date) { - return date.getTimezoneOffset() * 60 * 1000 -} +export const tzOffset = (date: Date) => date.getTimezoneOffset() * 60 * 1000; /** * @see: */ -export const daysBetween = function (date1: Date, date2: Date) { +export const daysBetween = (date1: Date, date2: Date) => { // The number of milliseconds in one day // Convert both dates to milliseconds - const date1ms = date1.getTime() - const date2ms = date2.getTime() + const date1ms = date1.getTime(); + const date2ms = date2.getTime(); // Calculate the difference in milliseconds - const differencems = date1ms - date2ms + const differencems = date1ms - date2ms; // Convert back to days and return - return Math.round(differencems / ONE_DAY) -} + return Math.round(differencems / ONE_DAY); +}; /** * @see: */ -export const toOrdinal = function (date: Date) { - return daysBetween(date, ORDINAL_BASE) -} +export const toOrdinal = (date: Date) => daysBetween(date, ORDINAL_BASE); /** * @see - */ -export const fromOrdinal = function (ordinal: number) { - return new Date(ORDINAL_BASE.getTime() + ordinal * ONE_DAY) -} +export const fromOrdinal = (ordinal: number) => + new Date(ORDINAL_BASE.getTime() + ordinal * ONE_DAY); -export const getMonthDays = function (date: Date) { - const month = date.getUTCMonth() +export const getMonthDays = (date: Date): number => { + const month = date.getUTCMonth(); return month === 1 && isLeapYear(date.getUTCFullYear()) ? 29 - : MONTH_DAYS[month] -} + : MONTH_DAYS[month]!; +}; /** * @return {Number} python-like weekday */ -export const getWeekday = function (date: Date) { - return PY_WEEKDAYS[date.getUTCDay()] -} +export const getWeekday = (date: Date): number => + PY_WEEKDAYS[date.getUTCDay()]!; /** * @see: */ -export const monthRange = function (year: number, month: number) { - const date = datetime(year, month + 1, 1) - return [getWeekday(date), getMonthDays(date)] -} +export const monthRange = (year: number, month: number): [number, number] => { + const date = datetime(year, month + 1, 1); + return [getWeekday(date), getMonthDays(date)]; +}; /** * @see: */ -export const combine = function (date: Date, time: Date | Time) { - time = time || date +export const combine = (date: Date, time: Date | Time) => { + time = time || date; return new Date( Date.UTC( date.getUTCFullYear(), @@ -145,78 +132,75 @@ export const combine = function (date: Date, time: Date | Time) { time.getHours(), time.getMinutes(), time.getSeconds(), - time.getMilliseconds() - ) - ) -} - -export const clone = function (date: Date | Time) { - const dolly = new Date(date.getTime()) - return dolly -} - -export const cloneDates = function (dates: Date[] | Time[]) { - const clones = [] - for (let i = 0; i < dates.length; i++) { - clones.push(clone(dates[i])) + time.getMilliseconds(), + ), + ); +}; + +export const clone = (date: Date | Time) => { + return new Date(date.getTime()); +}; + +export const cloneDates = (dates: Date[] | Time[]) => { + const clones = []; + for (const date of dates) { + clones.push(clone(date)); } - return clones -} + return clones; +}; /** * Sorts an array of Date or Time objects */ -export const sort = function (dates: T[]) { - dates.sort(function (a, b) { - return a.getTime() - b.getTime() - }) -} - -export const timeToUntilString = function (time: number, utc = true) { - const date = new Date(time) +export const sort = (dates: T[]) => { + dates.sort((a, b) => a.getTime() - b.getTime()); +}; + +export const timeToUntilString = (time: number, utc = true) => { + const date = new Date(time); return [ - padStart(date.getUTCFullYear().toString(), 4, '0'), - padStart(date.getUTCMonth() + 1, 2, '0'), - padStart(date.getUTCDate(), 2, '0'), + String(date.getUTCFullYear()).padStart(4, '0'), + String(date.getUTCMonth() + 1).padStart(2, '0'), + String(date.getUTCDate()).padStart(2, '0'), 'T', - padStart(date.getUTCHours(), 2, '0'), - padStart(date.getUTCMinutes(), 2, '0'), - padStart(date.getUTCSeconds(), 2, '0'), + String(date.getUTCHours()).padStart(2, '0'), + String(date.getUTCMinutes()).padStart(2, '0'), + String(date.getUTCSeconds()).padStart(2, '0'), utc ? 'Z' : '', - ].join('') -} + ].join(''); +}; -export const untilStringToDate = function (until: string) { - const re = /^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z?)?$/ - const bits = re.exec(until) +export const untilStringToDate = (until: string) => { + const re = /^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z?)?$/; + const bits = re.exec(until); - if (!bits) throw new Error(`Invalid UNTIL value: ${until}`) + if (!bits) throw new Error(`Invalid UNTIL value: ${until}`); return new Date( Date.UTC( - parseInt(bits[1], 10), - parseInt(bits[2], 10) - 1, - parseInt(bits[3], 10), - parseInt(bits[5], 10) || 0, - parseInt(bits[6], 10) || 0, - parseInt(bits[7], 10) || 0 - ) - ) -} - -const dateTZtoISO8601 = function (date: Date, timeZone: string) { + parseInt(bits[1]!, 10), + parseInt(bits[2]!, 10) - 1, + parseInt(bits[3]!, 10), + parseInt(bits[5]!, 10) || 0, + parseInt(bits[6]!, 10) || 0, + parseInt(bits[7]!, 10) || 0, + ), + ); +}; + +const dateTZtoISO8601 = (date: Date, timeZone: string) => { // date format for sv-SE is almost ISO8601 - const dateStr = date.toLocaleString('sv-SE', { timeZone }) + const dateStr = date.toLocaleString('sv-SE', { timeZone }); // '2023-02-07 10:41:36' - return dateStr.replace(' ', 'T') + 'Z' -} + return `${dateStr.replace(' ', 'T')}Z`; +}; -export const dateInTimeZone = function (date: Date, timeZone: string) { - const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone +export const dateInTimeZone = (date: Date, timeZone: string) => { + const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; // Date constructor can only reliably parse dates in ISO8601 format - const dateInLocalTZ = new Date(dateTZtoISO8601(date, localTimeZone)) - const dateInTargetTZ = new Date(dateTZtoISO8601(date, timeZone ?? 'UTC')) - const tzOffset = dateInTargetTZ.getTime() - dateInLocalTZ.getTime() + const dateInLocalTZ = new Date(dateTZtoISO8601(date, localTimeZone)); + const dateInTargetTZ = new Date(dateTZtoISO8601(date, timeZone ?? 'UTC')); + const tzOffset = dateInTargetTZ.getTime() - dateInLocalTZ.getTime(); - return new Date(date.getTime() - tzOffset) -} + return new Date(date.getTime() - tzOffset); +}; diff --git a/src/datewithzone.ts b/src/datewithzone.ts index e05fcc2e0..4645b2802 100644 --- a/src/datewithzone.ts +++ b/src/datewithzone.ts @@ -1,39 +1,39 @@ -import { dateInTimeZone, timeToUntilString } from './dateutil' +import { dateInTimeZone, timeToUntilString } from './dateutil'; export class DateWithZone { - public date: Date - public tzid?: string | null + public date: Date; + public tzid?: string | null; constructor(date: Date, tzid?: string | null) { - if (isNaN(date.getTime())) { - throw new RangeError('Invalid date passed to DateWithZone') + if (Number.isNaN(date.getTime())) { + throw new RangeError('Invalid date passed to DateWithZone'); } - this.date = date - this.tzid = tzid + this.date = date; + this.tzid = tzid; } private get isUTC() { - return !this.tzid || this.tzid.toUpperCase() === 'UTC' + return !this.tzid || this.tzid.toUpperCase() === 'UTC'; } public toString() { - const datestr = timeToUntilString(this.date.getTime(), this.isUTC) + const datestr = timeToUntilString(this.date.getTime(), this.isUTC); if (!this.isUTC) { - return `;TZID=${this.tzid}:${datestr}` + return `;TZID=${this.tzid}:${datestr}`; } - return `:${datestr}` + return `:${datestr}`; } public getTime() { - return this.date.getTime() + return this.date.getTime(); } public rezonedDate() { if (this.isUTC) { - return this.date + return this.date; } - return dateInTimeZone(this.date, this.tzid) + return dateInTimeZone(this.date, this.tzid!); } } diff --git a/src/helpers.ts b/src/helpers.ts index 37c3ac0be..6e936b23b 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -2,89 +2,61 @@ // Helper functions // ============================================================================= -import { ALL_WEEKDAYS, WeekdayStr } from './weekday' +import { ALL_WEEKDAYS, type WeekdayStr } from './weekday'; -export const isPresent = function ( - value?: T | null | undefined -): value is T { - return value !== null && value !== undefined -} +export const isPresent = (value?: T | null | undefined): value is T => + value !== null && value !== undefined; -export const isNumber = function (value: unknown): value is number { - return typeof value === 'number' -} +export const isNumber = (value: unknown): value is number => + typeof value === 'number'; -export const isWeekdayStr = function (value: unknown): value is WeekdayStr { - return typeof value === 'string' && ALL_WEEKDAYS.includes(value as WeekdayStr) -} +export const isWeekdayStr = (value: unknown): value is WeekdayStr => + typeof value === 'string' && ALL_WEEKDAYS.includes(value as WeekdayStr); -export const isArray = Array.isArray +export const isArray = Array.isArray; /** * Simplified version of python's range() */ -export const range = function (start: number, end: number = start): number[] { - if (arguments.length === 1) { - end = start - start = 0 +export const range = (start: number, end?: number): number[] => { + if (end === undefined) { + end = start; + start = 0; } - const rang = [] - for (let i = start; i < end; i++) rang.push(i) - return rang -} + const rang = []; + for (let i = start; i < end; i++) rang.push(i); + return rang; +}; -export const clone = function (array: T[]): T[] { - return ([] as T[]).concat(array) -} - -export const repeat = function (value: T | T[], times: number): (T | T[])[] { - let i = 0 - const array: (T | T[])[] = [] +export const repeat = (value: T | T[], times: number): (T | T[])[] => { + let i = 0; + const array: (T | T[])[] = []; if (isArray(value)) { - for (; i < times; i++) array[i] = ([] as T[]).concat(value) + for (; i < times; i++) array[i] = ([] as T[]).concat(value); } else { - for (; i < times; i++) array[i] = value + for (; i < times; i++) array[i] = value; } - return array -} + return array; +}; -export const toArray = function (item: T | T[]): T[] { +export const toArray = (item: T | T[]): T[] => { if (isArray(item)) { - return item + return item; } - return [item] -} - -export function padStart( - item: string | number, - targetLength: number, - padString = ' ' -) { - const str = String(item) - targetLength = targetLength >> 0 - if (str.length > targetLength) { - return String(str) - } - - targetLength = targetLength - str.length - if (targetLength > padString.length) { - padString += repeat(padString, targetLength / padString.length) - } - - return padString.slice(0, targetLength) + String(str) -} + return [item]; +}; /** * Python like split */ -export const split = function (str: string, sep: string, num: number) { - const splits = str.split(sep) +export const split = (str: string, sep: string, num: number) => { + const splits = str.split(sep); return num ? splits.slice(0, num).concat([splits.slice(num).join(sep)]) - : splits -} + : splits; +}; /** * closure/goog/math/math.js:modulo @@ -101,22 +73,22 @@ export const split = function (str: string, sep: string, num: number) { * @return {number} a % b where the result is between 0 and b (either 0 <= x < b * or b < x <= 0, depending on the sign of b). */ -export const pymod = function (a: number, b: number) { - const r = a % b +export const pymod = (a: number, b: number) => { + const r = a % b; // If r and b differ in sign, add b to wrap the result to the correct sign. - return r * b < 0 ? r + b : r -} + return r * b < 0 ? r + b : r; +}; /** * @see: */ -export const divmod = function (a: number, b: number) { - return { div: Math.floor(a / b), mod: pymod(a, b) } -} +export const divmod = (a: number, b: number) => ({ + div: Math.floor(a / b), + mod: pymod(a, b), +}); -export const empty = function (obj: T[] | null | undefined) { - return !isPresent(obj) || obj.length === 0 -} +export const empty = (obj: T[] | null | undefined) => + !isPresent(obj) || obj.length === 0; /** * Python-like boolean @@ -125,13 +97,5 @@ export const empty = function (obj: T[] | null | undefined) { * the fact that in Python an empty list's/tuple's * boolean value is False, whereas in JS it's true */ -export const notEmpty = function (obj: T[] | null | undefined): obj is T[] { - return !empty(obj) -} - -/** - * Return true if a value is in an array - */ -export const includes = function (arr: T[] | null | undefined, val: T) { - return notEmpty(arr) && arr.indexOf(val) !== -1 -} +export const notEmpty = (obj: T[] | null | undefined): obj is T[] => + !empty(obj); diff --git a/src/index.ts b/src/index.ts index 237a275fd..17e697e8e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,24 +1,24 @@ /* ! * rrule.js - Library for working with recurrence rules for calendar dates. - * https://github.com/jakubroztocil/rrule + * https://github.com/offload-project/rrule * * Copyright 2010, Jakub Roztocil and Lars Schoning + * Copyright 2026, Shavonn Brown * Licenced under the BSD licence. - * https://github.com/jakubroztocil/rrule/blob/master/LICENCE + * https://github.com/offload-project/rrule/blob/main/LICENSE * * Based on: * python-dateutil - Extensions to the standard Python datetime module. * Copyright (c) 2003-2011 - Gustavo Niemeyer * Copyright (c) 2012 - Tomi Pieviläinen - * https://github.com/jakubroztocil/rrule/blob/master/LICENCE + * https://github.com/offload-project/rrule/blob/main/LICENSE * */ -export { RRule } from './rrule' -export { RRuleSet } from './rruleset' - -export { rrulestr } from './rrulestr' -export { Frequency, ByWeekday, Options } from './types' -export { Weekday, WeekdayStr, ALL_WEEKDAYS } from './weekday' -export { RRuleStrOptions } from './rrulestr' -export { datetime } from './dateutil' +export { datetime } from './dateutil'; +export { RRule } from './rrule'; +export { RRuleBase } from './rrulebase'; +export { RRuleSet } from './rruleset'; +export { type RRuleStrOptions, rrulestr } from './rrulestr'; +export { type ByWeekday, Frequency, type Options } from './types'; +export { ALL_WEEKDAYS, Weekday, type WeekdayStr } from './weekday'; diff --git a/src/iter/index.ts b/src/iter/index.ts index 8fd6bc26b..3800ce65f 100644 --- a/src/iter/index.ts +++ b/src/iter/index.ts @@ -1,104 +1,102 @@ -import IterResult from '../iterresult' -import { ParsedOptions, freqIsDailyOrGreater, QueryMethodTypes } from '../types' -import { combine, fromOrdinal, MAXYEAR } from '../dateutil' -import Iterinfo from '../iterinfo/index' -import { RRule } from '../rrule' -import { buildTimeset } from '../parseoptions' -import { notEmpty, includes, isPresent } from '../helpers' -import { DateWithZone } from '../datewithzone' -import { buildPoslist } from './poslist' -import { Time, DateTime } from '../datetime' +import { DateTime, type Time } from '../datetime'; +import { combine, fromOrdinal, MAXYEAR } from '../dateutil'; +import { DateWithZone } from '../datewithzone'; +import { isPresent, notEmpty } from '../helpers'; +import Iterinfo from '../iterinfo/index'; +import type IterResult from '../iterresult'; +import { buildTimeset } from '../parseoptions'; +import { RRule } from '../rrule'; +import { + freqIsDailyOrGreater, + type ParsedOptions, + type QueryMethodTypes, +} from '../types'; +import { buildPoslist } from './poslist'; export function iter( iterResult: IterResult, - options: ParsedOptions + options: ParsedOptions, ) { - const { dtstart, freq, interval, until, bysetpos } = options + const { dtstart, freq, interval, until, bysetpos } = options; - let count = options.count + let count = options.count; if (count === 0 || interval === 0) { - return emitResult(iterResult) + return emitResult(iterResult); } - const counterDate = DateTime.fromDate(dtstart) + const counterDate = DateTime.fromDate(dtstart); - const ii = new Iterinfo(options) - ii.rebuild(counterDate.year, counterDate.month) + const ii = new Iterinfo(options); + ii.rebuild(counterDate.year, counterDate.month); - let timeset = makeTimeset(ii, counterDate, options) + let timeset = makeTimeset(ii, counterDate, options); for (;;) { const [dayset, start, end] = ii.getdayset(freq)( counterDate.year, counterDate.month, - counterDate.day - ) + counterDate.day, + ); - const filtered = removeFilteredDays(dayset, start, end, ii, options) + const filtered = removeFilteredDays(dayset, start, end, ii, options); if (notEmpty(bysetpos)) { - const poslist = buildPoslist(bysetpos, timeset, start, end, ii, dayset) + const poslist = buildPoslist(bysetpos, timeset!, start, end, ii, dayset); - for (let j = 0; j < poslist.length; j++) { - const res = poslist[j] + for (const res of poslist) { if (until && res > until) { - return emitResult(iterResult) + return emitResult(iterResult); } if (res >= dtstart) { - const rezonedDate = rezoneIfNeeded(res, options) + const rezonedDate = rezoneIfNeeded(res, options); if (!iterResult.accept(rezonedDate)) { - return emitResult(iterResult) + return emitResult(iterResult); } if (count) { - --count + --count; if (!count) { - return emitResult(iterResult) + return emitResult(iterResult); } } } } } else { for (let j = start; j < end; j++) { - const currentDay = dayset[j] + const currentDay = dayset[j]; if (!isPresent(currentDay)) { - continue + continue; } - const date = fromOrdinal(ii.yearordinal + currentDay) - for (let k = 0; k < timeset.length; k++) { - const time = timeset[k] - const res = combine(date, time) + const date = fromOrdinal(ii.yearordinal + currentDay); + for (const time of timeset!) { + const res = combine(date, time); if (until && res > until) { - return emitResult(iterResult) + return emitResult(iterResult); } if (res >= dtstart) { - const rezonedDate = rezoneIfNeeded(res, options) + const rezonedDate = rezoneIfNeeded(res, options); if (!iterResult.accept(rezonedDate)) { - return emitResult(iterResult) + return emitResult(iterResult); } if (count) { - --count + --count; if (!count) { - return emitResult(iterResult) + return emitResult(iterResult); } } } } } } - if (options.interval === 0) { - return emitResult(iterResult) - } - // Handle frequency and interval - counterDate.add(options, filtered) + counterDate.add(options, filtered); if (counterDate.year > MAXYEAR) { - return emitResult(iterResult) + return emitResult(iterResult); } if (!freqIsDailyOrGreater(freq)) { @@ -106,18 +104,18 @@ export function iter( counterDate.hour, counterDate.minute, counterDate.second, - 0 - ) + 0, + ); } - ii.rebuild(counterDate.year, counterDate.month) + ii.rebuild(counterDate.year, counterDate.month); } } function isFiltered( ii: Iterinfo, currentDay: number, - options: ParsedOptions + options: ParsedOptions, ): boolean { const { bymonth, @@ -127,33 +125,33 @@ function isFiltered( bymonthday, bynmonthday, byyearday, - } = options + } = options; return ( - (notEmpty(bymonth) && !includes(bymonth, ii.mmask[currentDay])) || - (notEmpty(byweekno) && !ii.wnomask[currentDay]) || - (notEmpty(byweekday) && !includes(byweekday, ii.wdaymask[currentDay])) || + (notEmpty(bymonth) && !bymonth.includes(ii.mmask[currentDay]!)) || + (notEmpty(byweekno) && !ii.wnomask![currentDay]) || + (notEmpty(byweekday) && !byweekday.includes(ii.wdaymask[currentDay]!)) || (notEmpty(ii.nwdaymask) && !ii.nwdaymask[currentDay]) || - (byeaster !== null && !includes(ii.eastermask, currentDay)) || + (byeaster !== null && !ii.eastermask?.includes(currentDay)) || ((notEmpty(bymonthday) || notEmpty(bynmonthday)) && - !includes(bymonthday, ii.mdaymask[currentDay]) && - !includes(bynmonthday, ii.nmdaymask[currentDay])) || + !bymonthday.includes(ii.mdaymask[currentDay]!) && + !bynmonthday.includes(ii.nmdaymask[currentDay]!)) || (notEmpty(byyearday) && ((currentDay < ii.yearlen && - !includes(byyearday, currentDay + 1) && - !includes(byyearday, -ii.yearlen + currentDay)) || + !byyearday.includes(currentDay + 1) && + !byyearday.includes(-ii.yearlen + currentDay)) || (currentDay >= ii.yearlen && - !includes(byyearday, currentDay + 1 - ii.yearlen) && - !includes(byyearday, -ii.nextyearlen + currentDay - ii.yearlen)))) - ) + !byyearday.includes(currentDay + 1 - ii.yearlen) && + !byyearday.includes(-ii.nextyearlen + currentDay - ii.yearlen)))) + ); } function rezoneIfNeeded(date: Date, options: ParsedOptions) { - return new DateWithZone(date, options.tzid).rezonedDate() + return new DateWithZone(date, options.tzid).rezonedDate(); } function emitResult(iterResult: IterResult) { - return iterResult.getValue() + return iterResult.getValue(); } function removeFilteredDays( @@ -161,49 +159,50 @@ function removeFilteredDays( start: number, end: number, ii: Iterinfo, - options: ParsedOptions + options: ParsedOptions, ) { - let filtered = false + let filtered = false; for (let dayCounter = start; dayCounter < end; dayCounter++) { - const currentDay = dayset[dayCounter] + const currentDay = dayset[dayCounter]!; - filtered = isFiltered(ii, currentDay, options) - - if (filtered) dayset[currentDay] = null + if (isFiltered(ii, currentDay, options)) { + filtered = true; + dayset[currentDay] = null; + } } - return filtered + return filtered; } function makeTimeset( ii: Iterinfo, counterDate: DateTime, - options: ParsedOptions + options: ParsedOptions, ): Time[] | null { - const { freq, byhour, byminute, bysecond } = options + const { freq, byhour, byminute, bysecond } = options; if (freqIsDailyOrGreater(freq)) { - return buildTimeset(options) + return buildTimeset(options); } if ( (freq >= RRule.HOURLY && notEmpty(byhour) && - !includes(byhour, counterDate.hour)) || + !byhour.includes(counterDate.hour)) || (freq >= RRule.MINUTELY && notEmpty(byminute) && - !includes(byminute, counterDate.minute)) || + !byminute.includes(counterDate.minute)) || (freq >= RRule.SECONDLY && notEmpty(bysecond) && - !includes(bysecond, counterDate.second)) + !bysecond.includes(counterDate.second)) ) { - return [] + return []; } return ii.gettimeset(freq)( counterDate.hour, counterDate.minute, counterDate.second, - counterDate.millisecond - ) + counterDate.millisecond, + ); } diff --git a/src/iter/poslist.ts b/src/iter/poslist.ts index 6abf7e5d8..4d97f899a 100644 --- a/src/iter/poslist.ts +++ b/src/iter/poslist.ts @@ -1,7 +1,7 @@ -import { combine, fromOrdinal, sort } from '../dateutil' -import Iterinfo from '../iterinfo/index' -import { pymod, isPresent, includes } from '../helpers' -import { Time } from '../datetime' +import type { Time } from '../datetime'; +import { combine, fromOrdinal, sort } from '../dateutil'; +import { isPresent, pymod } from '../helpers'; +import type Iterinfo from '../iterinfo/index'; export function buildPoslist( bysetpos: number[], @@ -9,45 +9,44 @@ export function buildPoslist( start: number, end: number, ii: Iterinfo, - dayset: (number | null)[] + dayset: (number | null)[], ) { - const poslist: Date[] = [] + const poslist: Date[] = []; - for (let j = 0; j < bysetpos.length; j++) { - let daypos: number - let timepos: number - const pos = bysetpos[j] + for (const pos of bysetpos) { + let daypos: number; + let timepos: number; if (pos < 0) { - daypos = Math.floor(pos / timeset.length) - timepos = pymod(pos, timeset.length) + daypos = Math.floor(pos / timeset.length); + timepos = pymod(pos, timeset.length); } else { - daypos = Math.floor((pos - 1) / timeset.length) - timepos = pymod(pos - 1, timeset.length) + daypos = Math.floor((pos - 1) / timeset.length); + timepos = pymod(pos - 1, timeset.length); } - const tmp = [] + const tmp = []; for (let k = start; k < end; k++) { - const val = dayset[k] - if (!isPresent(val)) continue - tmp.push(val) + const val = dayset[k]; + if (!isPresent(val)) continue; + tmp.push(val); } - let i: number + let i: number; if (daypos < 0) { - i = tmp.slice(daypos)[0] + i = tmp.slice(daypos)[0]!; } else { - i = tmp[daypos] + i = tmp[daypos]!; } - const time = timeset[timepos] - const date = fromOrdinal(ii.yearordinal + i) - const res = combine(date, time) + const time = timeset[timepos]!; + const date = fromOrdinal(ii.yearordinal + i); + const res = combine(date, time); // XXX: can this ever be in the array? // - compare the actual date instead? - if (!includes(poslist, res)) poslist.push(res) + if (!poslist.includes(res)) poslist.push(res); } - sort(poslist) + sort(poslist); - return poslist + return poslist; } diff --git a/src/iterinfo/easter.ts b/src/iterinfo/easter.ts index 271efea28..4684e4710 100644 --- a/src/iterinfo/easter.ts +++ b/src/iterinfo/easter.ts @@ -1,20 +1,20 @@ export function easter(y: number, offset = 0) { - const a = y % 19 - const b = Math.floor(y / 100) - const c = y % 100 - const d = Math.floor(b / 4) - const e = b % 4 - const f = Math.floor((b + 8) / 25) - const g = Math.floor((b - f + 1) / 3) - const h = Math.floor(19 * a + b - d - g + 15) % 30 - const i = Math.floor(c / 4) - const k = c % 4 - const l = Math.floor(32 + 2 * e + 2 * i - h - k) % 7 - const m = Math.floor((a + 11 * h + 22 * l) / 451) - const month = Math.floor((h + l - 7 * m + 114) / 31) - const day = ((h + l - 7 * m + 114) % 31) + 1 - const date = Date.UTC(y, month - 1, day + offset) - const yearStart = Date.UTC(y, 0, 1) + const a = y % 19; + const b = Math.floor(y / 100); + const c = y % 100; + const d = Math.floor(b / 4); + const e = b % 4; + const f = Math.floor((b + 8) / 25); + const g = Math.floor((b - f + 1) / 3); + const h = Math.floor(19 * a + b - d - g + 15) % 30; + const i = Math.floor(c / 4); + const k = c % 4; + const l = Math.floor(32 + 2 * e + 2 * i - h - k) % 7; + const m = Math.floor((a + 11 * h + 22 * l) / 451); + const month = Math.floor((h + l - 7 * m + 114) / 31); + const day = ((h + l - 7 * m + 114) % 31) + 1; + const date = Date.UTC(y, month - 1, day + offset); + const yearStart = Date.UTC(y, 0, 1); - return [Math.ceil((date - yearStart) / (1000 * 60 * 60 * 24))] + return [Math.ceil((date - yearStart) / (1000 * 60 * 60 * 24))]; } diff --git a/src/iterinfo/index.ts b/src/iterinfo/index.ts index ac3cec3a4..b08120d63 100644 --- a/src/iterinfo/index.ts +++ b/src/iterinfo/index.ts @@ -1,180 +1,180 @@ -import { notEmpty, repeat, range, isPresent } from '../helpers' -import { ParsedOptions, Frequency } from '../types' -import { YearInfo, rebuildYear } from './yearinfo' -import { rebuildMonth, MonthInfo } from './monthinfo' -import { easter } from './easter' -import { Time } from '../datetime' -import { datetime, sort, toOrdinal } from '../dateutil' +import { Time } from '../datetime'; +import { datetime, sort, toOrdinal } from '../dateutil'; +import { isPresent, notEmpty, range, repeat } from '../helpers'; +import { Frequency, type ParsedOptions } from '../types'; +import { easter } from './easter'; +import { type MonthInfo, rebuildMonth } from './monthinfo'; +import { rebuildYear, type YearInfo } from './yearinfo'; -export type DaySet = [(number | null)[], number, number] -export type GetDayset = () => DaySet +export type DaySet = [(number | null)[], number, number]; +export type GetDayset = () => DaySet; // ============================================================================= // Iterinfo // ============================================================================= export default class Iterinfo { - public yearinfo: YearInfo - public monthinfo: MonthInfo - public eastermask: number[] | null + public yearinfo!: YearInfo; + public monthinfo!: MonthInfo; + public eastermask!: number[] | null; // eslint-disable-next-line no-empty-function constructor(private options: ParsedOptions) {} rebuild(year: number, month: number) { - const options = this.options + const options = this.options; if (year !== this.lastyear) { - this.yearinfo = rebuildYear(year, options) + this.yearinfo = rebuildYear(year, options); } if ( notEmpty(options.bynweekday) && (month !== this.lastmonth || year !== this.lastyear) ) { - const { yearlen, mrange, wdaymask } = this.yearinfo + const { yearlen, mrange, wdaymask } = this.yearinfo; this.monthinfo = rebuildMonth( year, month, yearlen, mrange, wdaymask, - options - ) + options, + ); } if (isPresent(options.byeaster)) { - this.eastermask = easter(year, options.byeaster) + this.eastermask = easter(year, options.byeaster); } } get lastyear() { - return this.monthinfo ? this.monthinfo.lastyear : null + return this.monthinfo ? this.monthinfo.lastyear : null; } get lastmonth() { - return this.monthinfo ? this.monthinfo.lastmonth : null + return this.monthinfo ? this.monthinfo.lastmonth : null; } get yearlen() { - return this.yearinfo.yearlen + return this.yearinfo.yearlen; } get yearordinal() { - return this.yearinfo.yearordinal + return this.yearinfo.yearordinal; } get mrange() { - return this.yearinfo.mrange + return this.yearinfo.mrange; } get wdaymask() { - return this.yearinfo.wdaymask + return this.yearinfo.wdaymask; } get mmask() { - return this.yearinfo.mmask + return this.yearinfo.mmask; } get wnomask() { - return this.yearinfo.wnomask + return this.yearinfo.wnomask; } get nwdaymask() { - return this.monthinfo ? this.monthinfo.nwdaymask : [] + return this.monthinfo ? this.monthinfo.nwdaymask : []; } get nextyearlen() { - return this.yearinfo.nextyearlen + return this.yearinfo.nextyearlen; } get mdaymask() { - return this.yearinfo.mdaymask + return this.yearinfo.mdaymask; } get nmdaymask() { - return this.yearinfo.nmdaymask + return this.yearinfo.nmdaymask; } ydayset() { - return [range(this.yearlen), 0, this.yearlen] + return [range(this.yearlen), 0, this.yearlen] as DaySet; } mdayset(_: unknown, month: number) { - const start = this.mrange[month - 1] - const end = this.mrange[month] - const set = repeat(null, this.yearlen) - for (let i = start; i < end; i++) set[i] = i - return [set, start, end] + const start = this.mrange[month - 1]!; + const end = this.mrange[month]!; + const set = repeat(null, this.yearlen); + for (let i = start; i < end; i++) set[i] = i; + return [set, start, end] as DaySet; } wdayset(year: number, month: number, day: number) { // We need to handle cross-year weeks here. - const set = repeat(null, this.yearlen + 7) - let i = toOrdinal(datetime(year, month, day)) - this.yearordinal - const start = i + const set = repeat(null, this.yearlen + 7); + let i = toOrdinal(datetime(year, month, day)) - this.yearordinal; + const start = i; for (let j = 0; j < 7; j++) { - set[i] = i - ++i - if (this.wdaymask[i] === this.options.wkst) break + set[i] = i; + ++i; + if (this.wdaymask[i] === this.options.wkst) break; } - return [set, start, i] + return [set, start, i] as DaySet; } ddayset(year: number, month: number, day: number) { - const set = repeat(null, this.yearlen) as (number | null)[] - const i = toOrdinal(datetime(year, month, day)) - this.yearordinal - set[i] = i - return [set, i, i + 1] + const set = repeat(null, this.yearlen) as (number | null)[]; + const i = toOrdinal(datetime(year, month, day)) - this.yearordinal; + set[i] = i; + return [set, i, i + 1] as DaySet; } htimeset(hour: number, _: number, second: number, millisecond: number) { - let set: Time[] = [] + let set: Time[] = []; this.options.byminute.forEach((minute) => { - set = set.concat(this.mtimeset(hour, minute, second, millisecond)) - }) - sort(set) - return set + set = set.concat(this.mtimeset(hour, minute, second, millisecond)); + }); + sort(set); + return set; } mtimeset(hour: number, minute: number, _: number, millisecond: number) { const set = this.options.bysecond.map( - (second) => new Time(hour, minute, second, millisecond) - ) + (second) => new Time(hour, minute, second, millisecond), + ); - sort(set) - return set + sort(set); + return set; } stimeset(hour: number, minute: number, second: number, millisecond: number) { - return [new Time(hour, minute, second, millisecond)] + return [new Time(hour, minute, second, millisecond)]; } getdayset(freq: Frequency): (y: number, m: number, d: number) => DaySet { switch (freq) { case Frequency.YEARLY: - return this.ydayset.bind(this) + return this.ydayset.bind(this); case Frequency.MONTHLY: - return this.mdayset.bind(this) + return this.mdayset.bind(this); case Frequency.WEEKLY: - return this.wdayset.bind(this) + return this.wdayset.bind(this); case Frequency.DAILY: - return this.ddayset.bind(this) + return this.ddayset.bind(this); default: - return this.ddayset.bind(this) + return this.ddayset.bind(this); } } gettimeset( - freq: Frequency.HOURLY | Frequency.MINUTELY | Frequency.SECONDLY + freq: Frequency.HOURLY | Frequency.MINUTELY | Frequency.SECONDLY, ): (h: number, m: number, s: number, ms: number) => Time[] { switch (freq) { case Frequency.HOURLY: - return this.htimeset.bind(this) + return this.htimeset.bind(this); case Frequency.MINUTELY: - return this.mtimeset.bind(this) + return this.mtimeset.bind(this); case Frequency.SECONDLY: - return this.stimeset.bind(this) + return this.stimeset.bind(this); } } } diff --git a/src/iterinfo/monthinfo.ts b/src/iterinfo/monthinfo.ts index 96dea4711..42129ade3 100644 --- a/src/iterinfo/monthinfo.ts +++ b/src/iterinfo/monthinfo.ts @@ -1,11 +1,11 @@ -import { ParsedOptions } from '../types' -import { RRule } from '../rrule' -import { empty, repeat, pymod } from '../helpers' +import { empty, pymod, repeat } from '../helpers'; +import { RRule } from '../rrule'; +import type { ParsedOptions } from '../types'; export interface MonthInfo { - lastyear: number - lastmonth: number - nwdaymask: number[] + lastyear: number; + lastmonth: number; + nwdaymask: number[]; } export function rebuildMonth( @@ -14,54 +14,52 @@ export function rebuildMonth( yearlen: number, mrange: number[], wdaymask: number[], - options: ParsedOptions + options: ParsedOptions, ) { const result: MonthInfo = { lastyear: year, lastmonth: month, nwdaymask: [], - } + }; - let ranges: number[][] = [] + let ranges: [number, number][] = []; if (options.freq === RRule.YEARLY) { if (empty(options.bymonth)) { - ranges = [[0, yearlen]] + ranges = [[0, yearlen]]; } else { - for (let j = 0; j < options.bymonth.length; j++) { - month = options.bymonth[j] - ranges.push(mrange.slice(month - 1, month + 1)) + for (const m of options.bymonth) { + month = m; + ranges.push(mrange.slice(month - 1, month + 1) as [number, number]); } } } else if (options.freq === RRule.MONTHLY) { - ranges = [mrange.slice(month - 1, month + 1)] + ranges = [mrange.slice(month - 1, month + 1) as [number, number]]; } if (empty(ranges)) { - return result + return result; } // Weekly frequency won't get here, so we may not // care about cross-year weekly periods. - result.nwdaymask = repeat(0, yearlen) as number[] + result.nwdaymask = repeat(0, yearlen) as number[]; - for (let j = 0; j < ranges.length; j++) { - const rang = ranges[j] - const first = rang[0] - const last = rang[1] - 1 + for (const rang of ranges) { + const [first, last_] = rang; + const last = last_ - 1; - for (let k = 0; k < options.bynweekday.length; k++) { - let i - const [wday, n] = options.bynweekday[k] + for (const [wday, n] of options.bynweekday!) { + let i: number; if (n < 0) { - i = last + (n + 1) * 7 - i -= pymod(wdaymask[i] - wday, 7) + i = last + (n + 1) * 7; + i -= pymod(wdaymask[i]! - wday, 7); } else { - i = first + (n - 1) * 7 - i += pymod(7 - wdaymask[i] + wday, 7) + i = first + (n - 1) * 7; + i += pymod(7 - wdaymask[i]! + wday, 7); } - if (first <= i && i <= last) result.nwdaymask[i] = 1 + if (first <= i && i <= last) result.nwdaymask[i] = 1; } } - return result + return result; } diff --git a/src/iterinfo/yearinfo.ts b/src/iterinfo/yearinfo.ts index a34d20707..ca33df140 100644 --- a/src/iterinfo/yearinfo.ts +++ b/src/iterinfo/yearinfo.ts @@ -1,38 +1,38 @@ -import { ParsedOptions } from '../types' -import { datetime, getWeekday, isLeapYear, toOrdinal } from '../dateutil' -import { empty, repeat, pymod, includes } from '../helpers' +import { datetime, getWeekday, isLeapYear, toOrdinal } from '../dateutil'; +import { empty, pymod, repeat } from '../helpers'; import { M365MASK, - MDAY365MASK, - NMDAY365MASK, - WDAYMASK, M365RANGE, M366MASK, + M366RANGE, + MDAY365MASK, MDAY366MASK, + NMDAY365MASK, NMDAY366MASK, - M366RANGE, -} from '../masks' + WDAYMASK, +} from '../masks'; +import type { ParsedOptions } from '../types'; export interface YearInfo { - yearlen: 365 | 366 - nextyearlen: 365 | 366 - yearordinal: number - yearweekday: number - mmask: number[] - mrange: number[] - mdaymask: number[] - nmdaymask: number[] - wdaymask: number[] - wnomask: number[] | null + yearlen: 365 | 366; + nextyearlen: 365 | 366; + yearordinal: number; + yearweekday: number; + mmask: number[]; + mrange: number[]; + mdaymask: number[]; + nmdaymask: number[]; + wdaymask: number[]; + wnomask: number[] | null; } export function rebuildYear(year: number, options: ParsedOptions) { - const firstyday = datetime(year, 1, 1) + const firstyday = datetime(year, 1, 1); - const yearlen = isLeapYear(year) ? 366 : 365 - const nextyearlen = isLeapYear(year + 1) ? 366 : 365 - const yearordinal = toOrdinal(firstyday) - const yearweekday = getWeekday(firstyday) + const yearlen = isLeapYear(year) ? 366 : 365; + const nextyearlen = isLeapYear(year + 1) ? 366 : 365; + const yearordinal = toOrdinal(firstyday); + const yearweekday = getWeekday(firstyday); const result: YearInfo = { yearlen, @@ -41,70 +41,70 @@ export function rebuildYear(year: number, options: ParsedOptions) { yearweekday, ...baseYearMasks(year), wnomask: null, - } + }; if (empty(options.byweekno)) { - return result + return result; } - result.wnomask = repeat(0, yearlen + 7) as number[] - let firstwkst: number - let wyearlen: number - let no1wkst = (firstwkst = pymod(7 - yearweekday + options.wkst, 7)) + result.wnomask = repeat(0, yearlen + 7) as number[]; + let firstwkst: number; + let wyearlen: number; + firstwkst = pymod(7 - yearweekday + options.wkst, 7); + let no1wkst = firstwkst; if (no1wkst >= 4) { - no1wkst = 0 + no1wkst = 0; // Number of days in the year, plus the days we got // from last year. - wyearlen = result.yearlen + pymod(yearweekday - options.wkst, 7) + wyearlen = result.yearlen + pymod(yearweekday - options.wkst, 7); } else { // Number of days in the year, minus the days we // left in last year. - wyearlen = yearlen - no1wkst + wyearlen = yearlen - no1wkst; } - const div = Math.floor(wyearlen / 7) - const mod = pymod(wyearlen, 7) - const numweeks = Math.floor(div + mod / 4) + const div = Math.floor(wyearlen / 7); + const mod = pymod(wyearlen, 7); + const numweeks = Math.floor(div + mod / 4); - for (let j = 0; j < options.byweekno.length; j++) { - let n = options.byweekno[j] + for (let n of options.byweekno) { if (n < 0) { - n += numweeks + 1 + n += numweeks + 1; } if (!(n > 0 && n <= numweeks)) { - continue + continue; } - let i: number + let i: number; if (n > 1) { - i = no1wkst + (n - 1) * 7 + i = no1wkst + (n - 1) * 7; if (no1wkst !== firstwkst) { - i -= 7 - firstwkst + i -= 7 - firstwkst; } } else { - i = no1wkst + i = no1wkst; } for (let k = 0; k < 7; k++) { - result.wnomask[i] = 1 - i++ - if (result.wdaymask[i] === options.wkst) break + result.wnomask[i] = 1; + i++; + if (result.wdaymask[i] === options.wkst) break; } } - if (includes(options.byweekno, 1)) { + if (options.byweekno.includes(1)) { // Check week number 1 of next year as well // orig-TODO : Check -numweeks for next year. - let i = no1wkst + numweeks * 7 - if (no1wkst !== firstwkst) i -= 7 - firstwkst + let i = no1wkst + numweeks * 7; + if (no1wkst !== firstwkst) i -= 7 - firstwkst; if (i < yearlen) { // If week starts in next year, we // don't care about it. for (let j = 0; j < 7; j++) { - result.wnomask[i] = 1 - i += 1 - if (result.wdaymask[i] === options.wkst) break + result.wnomask[i] = 1; + i += 1; + if (result.wdaymask[i] === options.wkst) break; } } } @@ -116,38 +116,37 @@ export function rebuildYear(year: number, options: ParsedOptions) { // got days from last year, so there are no // days from last year's last week number in // this year. - let lnumweeks: number - if (!includes(options.byweekno, -1)) { - const lyearweekday = getWeekday(datetime(year - 1, 1, 1)) + let lnumweeks: number; + if (!options.byweekno.includes(-1)) { + const lyearweekday = getWeekday(datetime(year - 1, 1, 1)); - let lno1wkst = pymod(7 - lyearweekday.valueOf() + options.wkst, 7) + const lno1wkst = pymod(7 - lyearweekday.valueOf() + options.wkst, 7); - const lyearlen = isLeapYear(year - 1) ? 366 : 365 - let weekst: number + const lyearlen = isLeapYear(year - 1) ? 366 : 365; + let weekst: number; if (lno1wkst >= 4) { - lno1wkst = 0 - weekst = lyearlen + pymod(lyearweekday - options.wkst, 7) + weekst = lyearlen + pymod(lyearweekday - options.wkst, 7); } else { - weekst = yearlen - no1wkst + weekst = yearlen - no1wkst; } - lnumweeks = Math.floor(52 + pymod(weekst, 7) / 4) + lnumweeks = Math.floor(52 + pymod(weekst, 7) / 4); } else { - lnumweeks = -1 + lnumweeks = -1; } - if (includes(options.byweekno, lnumweeks)) { - for (let i = 0; i < no1wkst; i++) result.wnomask[i] = 1 + if (options.byweekno.includes(lnumweeks)) { + for (let i = 0; i < no1wkst; i++) result.wnomask[i] = 1; } } - return result + return result; } function baseYearMasks(year: number) { - const yearlen = isLeapYear(year) ? 366 : 365 - const firstyday = datetime(year, 1, 1) - const wday = getWeekday(firstyday) + const yearlen = isLeapYear(year) ? 366 : 365; + const firstyday = datetime(year, 1, 1); + const wday = getWeekday(firstyday); if (yearlen === 365) { return { @@ -156,7 +155,7 @@ function baseYearMasks(year: number) { nmdaymask: NMDAY365MASK, wdaymask: WDAYMASK.slice(wday), mrange: M365RANGE, - } + }; } return { @@ -165,5 +164,5 @@ function baseYearMasks(year: number) { nmdaymask: NMDAY366MASK, wdaymask: WDAYMASK.slice(wday), mrange: M366RANGE, - } + }; } diff --git a/src/iterresult.ts b/src/iterresult.ts index 49650c717..88a4fd08b 100644 --- a/src/iterresult.ts +++ b/src/iterresult.ts @@ -1,41 +1,43 @@ -import { QueryMethodTypes, IterResultType } from './types' +import type { IterResultType, QueryMethodTypes } from './types'; // ============================================================================= // Results // ============================================================================= export interface IterArgs { - inc: boolean - before: Date - after: Date - dt: Date - _value: Date | Date[] | null + inc: boolean; + before: Date; + after: Date; + dt: Date; + _value: Date | Date[] | null; } /** * This class helps us to emulate python's generators, sorta. */ export default class IterResult { - public readonly method: M - public readonly args: Partial - public readonly minDate: Date | null = null - public readonly maxDate: Date | null = null - public _result: Date[] = [] - public total = 0 + public readonly method: M; + public readonly args: Partial; + public readonly minDate: Date | null = null; + public readonly maxDate: Date | null = null; + public _result: Date[] = []; + public total = 0; constructor(method: M, args: Partial) { - this.method = method - this.args = args + this.method = method; + this.args = args; if (method === 'between') { - this.maxDate = args.inc - ? args.before - : new Date(args.before.getTime() - 1) - this.minDate = args.inc ? args.after : new Date(args.after.getTime() + 1) + this.maxDate = args.inc! + ? args.before! + : new Date(args.before!.getTime() - 1); + this.minDate = args.inc! + ? args.after! + : new Date(args.after!.getTime() + 1); } else if (method === 'before') { - this.maxDate = args.inc ? args.dt : new Date(args.dt.getTime() - 1) + this.maxDate = args.inc! ? args.dt! : new Date(args.dt!.getTime() - 1); } else if (method === 'after') { - this.minDate = args.inc ? args.dt : new Date(args.dt.getTime() + 1) + this.minDate = args.inc! ? args.dt! : new Date(args.dt!.getTime() + 1); } } @@ -48,22 +50,22 @@ export default class IterResult { * false if we're done. */ accept(date: Date) { - ++this.total - const tooEarly = this.minDate && date < this.minDate - const tooLate = this.maxDate && date > this.maxDate + ++this.total; + const tooEarly = this.minDate && date < this.minDate; + const tooLate = this.maxDate && date > this.maxDate; if (this.method === 'between') { - if (tooEarly) return true - if (tooLate) return false + if (tooEarly) return true; + if (tooLate) return false; } else if (this.method === 'before') { - if (tooLate) return false + if (tooLate) return false; } else if (this.method === 'after') { - if (tooEarly) return true - this.add(date) - return false + if (tooEarly) return true; + this.add(date); + return false; } - return this.add(date) + return this.add(date); } /** @@ -72,8 +74,8 @@ export default class IterResult { * @return {Boolean} whether we are interested in more values. */ add(date: Date) { - this._result.push(date) - return true + this._result.push(date); + return true; } /** @@ -83,19 +85,17 @@ export default class IterResult { * @return {Date,Array?} */ getValue(): IterResultType { - const res = this._result + const res = this._result; switch (this.method) { case 'all': case 'between': - return res as IterResultType - case 'before': - case 'after': + return res as IterResultType; default: - return (res.length ? res[res.length - 1] : null) as IterResultType + return (res.length ? res[res.length - 1] : null) as IterResultType; } } clone() { - return new IterResult(this.method, this.args) + return new IterResult(this.method, this.args); } } diff --git a/src/iterset.ts b/src/iterset.ts index 793951890..5cbcb8594 100644 --- a/src/iterset.ts +++ b/src/iterset.ts @@ -1,9 +1,9 @@ -import IterResult from './iterresult' -import { RRule } from './rrule' -import { DateWithZone } from './datewithzone' -import { iter } from './iter' -import { sort } from './dateutil' -import { QueryMethodTypes, IterResultType } from './types' +import { sort } from './dateutil'; +import { DateWithZone } from './datewithzone'; +import { iter } from './iter'; +import type IterResult from './iterresult'; +import type { RRule } from './rrule'; +import type { IterResultType, QueryMethodTypes } from './types'; export function iterSet( iterResult: IterResult, @@ -11,68 +11,67 @@ export function iterSet( _exrule: RRule[], _rdate: Date[], _exdate: Date[], - tzid: string | undefined + tzid: string | undefined, ) { - const _exdateHash: { [k: number]: boolean } = {} - const _accept = iterResult.accept + const _exdateHash: { [k: number]: boolean } = {}; + const _accept = iterResult.accept; function evalExdate(after: Date, before: Date) { - _exrule.forEach(function (rrule) { - rrule.between(after, before, true).forEach(function (date) { - _exdateHash[Number(date)] = true - }) - }) + _exrule.forEach((rrule) => { + rrule.between(after, before, true).forEach((date) => { + _exdateHash[Number(date)] = true; + }); + }); } - _exdate.forEach(function (date) { - const zonedDate = new DateWithZone(date, tzid).rezonedDate() - _exdateHash[Number(zonedDate)] = true - }) + _exdate.forEach((date) => { + const zonedDate = new DateWithZone(date, tzid).rezonedDate(); + _exdateHash[Number(zonedDate)] = true; + }); iterResult.accept = function (date) { - const dt = Number(date) - if (isNaN(dt)) return _accept.call(this, date) + const dt = Number(date); + if (Number.isNaN(dt)) return _accept.call(this, date); if (!_exdateHash[dt]) { - evalExdate(new Date(dt - 1), new Date(dt + 1)) + evalExdate(new Date(dt - 1), new Date(dt + 1)); if (!_exdateHash[dt]) { - _exdateHash[dt] = true - return _accept.call(this, date) + _exdateHash[dt] = true; + return _accept.call(this, date); } } - return true - } + return true; + }; if (iterResult.method === 'between') { - evalExdate(iterResult.args.after, iterResult.args.before) + evalExdate(iterResult.args.after!, iterResult.args.before!); iterResult.accept = function (date) { - const dt = Number(date) + const dt = Number(date); if (!_exdateHash[dt]) { - _exdateHash[dt] = true - return _accept.call(this, date) + _exdateHash[dt] = true; + return _accept.call(this, date); } - return true - } + return true; + }; } - for (let i = 0; i < _rdate.length; i++) { - const zonedDate = new DateWithZone(_rdate[i], tzid).rezonedDate() - if (!iterResult.accept(new Date(zonedDate.getTime()))) break + for (const rdate of _rdate) { + const zonedDate = new DateWithZone(rdate, tzid).rezonedDate(); + if (!iterResult.accept(new Date(zonedDate.getTime()))) break; } - _rrule.forEach(function (rrule) { - iter(iterResult, rrule.options) - }) + _rrule.forEach((rrule) => { + iter(iterResult, rrule.options); + }); - const res = iterResult._result - sort(res) + const res = iterResult._result; + sort(res); switch (iterResult.method) { case 'all': case 'between': - return res as IterResultType + return res as IterResultType; case 'before': - return ((res.length && res[res.length - 1]) || null) as IterResultType - case 'after': + return ((res.length && res[res.length - 1]) || null) as IterResultType; default: - return ((res.length && res[0]) || null) as IterResultType + return ((res.length && res[0]) || null) as IterResultType; } } diff --git a/src/masks.ts b/src/masks.ts index 9f522e77c..37e8c285f 100644 --- a/src/masks.ts +++ b/src/masks.ts @@ -1,4 +1,4 @@ -import { range, repeat } from './helpers' +import { range, repeat } from './helpers'; // ============================================================================= // Date masks @@ -20,7 +20,7 @@ const M365MASK = [ ...repeat(11, 30), ...repeat(12, 31), ...repeat(1, 7), -] +]; const M366MASK = [ ...repeat(1, 31), @@ -36,12 +36,12 @@ const M366MASK = [ ...repeat(11, 30), ...repeat(12, 31), ...repeat(1, 7), -] +]; -const M28 = range(1, 29) -const M29 = range(1, 30) -const M30 = range(1, 31) -const M31 = range(1, 32) +const M28 = range(1, 29); +const M29 = range(1, 30); +const M30 = range(1, 31); +const M31 = range(1, 32); const MDAY366MASK = [ ...M31, @@ -57,7 +57,7 @@ const MDAY366MASK = [ ...M30, ...M31, ...M31.slice(0, 7), -] +]; const MDAY365MASK = [ ...M31, @@ -73,12 +73,12 @@ const MDAY365MASK = [ ...M30, ...M31, ...M31.slice(0, 7), -] +]; -const NM28 = range(-28, 0) -const NM29 = range(-29, 0) -const NM30 = range(-30, 0) -const NM31 = range(-31, 0) +const NM28 = range(-28, 0); +const NM29 = range(-29, 0); +const NM30 = range(-30, 0); +const NM31 = range(-31, 0); const NMDAY366MASK = [ ...NM31, @@ -94,7 +94,7 @@ const NMDAY366MASK = [ ...NM30, ...NM31, ...NM31.slice(0, 7), -] +]; const NMDAY365MASK = [ ...NM31, @@ -110,16 +110,16 @@ const NMDAY365MASK = [ ...NM30, ...NM31, ...NM31.slice(0, 7), -] +]; -const M366RANGE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366] -const M365RANGE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365] +const M366RANGE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]; +const M365RANGE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]; -const WDAYMASK = (function () { - let wdaymask: number[] = [] - for (let i = 0; i < 55; i++) wdaymask = wdaymask.concat(range(7)) - return wdaymask -})() +const WDAYMASK = (() => { + let wdaymask: number[] = []; + for (let i = 0; i < 55; i++) wdaymask = wdaymask.concat(range(7)); + return wdaymask; +})(); export { WDAYMASK, @@ -131,4 +131,4 @@ export { MDAY366MASK, NMDAY365MASK, NMDAY366MASK, -} +}; diff --git a/src/nlp/i18n.ts b/src/nlp/i18n.ts index 1b2e39535..58c38a9a5 100644 --- a/src/nlp/i18n.ts +++ b/src/nlp/i18n.ts @@ -3,11 +3,11 @@ // ============================================================================= export interface Language { - dayNames: string[] - monthNames: string[] + dayNames: string[]; + monthNames: string[]; tokens: { - [k: string]: RegExp - } + [k: string]: RegExp; + }; } const ENGLISH: Language = { @@ -78,6 +78,6 @@ const ENGLISH: Language = { december: /^dec(ember)?/i, comma: /^(,\s*|(and|or)\s*)+/i, }, -} +}; -export default ENGLISH +export default ENGLISH; diff --git a/src/nlp/index.ts b/src/nlp/index.ts index f420d72c3..2f21eea50 100644 --- a/src/nlp/index.ts +++ b/src/nlp/index.ts @@ -1,16 +1,17 @@ -import ToText, { DateFormatter, GetText } from './totext' -import parseText from './parsetext' -import { RRule } from '../rrule' -import { Frequency } from '../types' -import ENGLISH, { Language } from './i18n' +import { RRule } from '../rrule'; +import { Frequency } from '../types'; +import ENGLISH, { type Language } from './i18n'; +import parseText from './parsetext'; +import ToText, { type DateFormatter, type GetText } from './totext'; /* ! * rrule.js - Library for working with recurrence rules for calendar dates. - * https://github.com/jakubroztocil/rrule + * https://github.com/offload-project/rrule * * Copyright 2010, Jakub Roztocil and Lars Schoning - * Licenced under the BSD licence. - * https://github.com/jakubroztocil/rrule/blob/master/LICENCE + * Copyright 2026, Shavonn Brown + * Licenced under the BSD license. + * https://github.com/offload-project/rrule/blob/main/LICENSE * */ @@ -93,11 +94,11 @@ import ENGLISH, { Language } from './i18n' * [yearday]: first, 1., 2., 1st, 2nd, second, ... 366th, last day, 2nd last day, .. * * @param {String} text + * @param language * @return {Object, Boolean} the rule, or null. */ -const fromText = function (text: string, language: Language = ENGLISH) { - return new RRule(parseText(text, language) || undefined) -} +const fromText = (text: string, language: Language = ENGLISH) => + new RRule(parseText(text, language) || undefined); const common = [ 'count', @@ -106,36 +107,34 @@ const common = [ 'byweekday', 'bymonthday', 'bymonth', -] +]; -ToText.IMPLEMENTED = [] -ToText.IMPLEMENTED[Frequency.HOURLY] = common -ToText.IMPLEMENTED[Frequency.MINUTELY] = common -ToText.IMPLEMENTED[Frequency.DAILY] = ['byhour'].concat(common) -ToText.IMPLEMENTED[Frequency.WEEKLY] = common -ToText.IMPLEMENTED[Frequency.MONTHLY] = common -ToText.IMPLEMENTED[Frequency.YEARLY] = ['byweekno', 'byyearday'].concat(common) +ToText.IMPLEMENTED = []; +ToText.IMPLEMENTED[Frequency.HOURLY] = common; +ToText.IMPLEMENTED[Frequency.MINUTELY] = common; +ToText.IMPLEMENTED[Frequency.DAILY] = ['byhour'].concat(common); +ToText.IMPLEMENTED[Frequency.WEEKLY] = common; +ToText.IMPLEMENTED[Frequency.MONTHLY] = common; +ToText.IMPLEMENTED[Frequency.YEARLY] = ['byweekno', 'byyearday'].concat(common); // ============================================================================= // Export // ============================================================================= -const toText = function ( +const toText = ( rrule: RRule, gettext?: GetText, language?: Language, - dateFormatter?: DateFormatter -) { - return new ToText(rrule, gettext, language, dateFormatter).toString() -} + dateFormatter?: DateFormatter, +) => new ToText(rrule, gettext, language, dateFormatter).toString(); -const { isFullyConvertible } = ToText +const { isFullyConvertible } = ToText; export interface Nlp { - fromText: typeof fromText - parseText: typeof parseText - isFullyConvertible: typeof isFullyConvertible - toText: typeof toText + fromText: typeof fromText; + parseText: typeof parseText; + isFullyConvertible: typeof isFullyConvertible; + toText: typeof toText; } -export { fromText, parseText, isFullyConvertible, toText } +export { fromText, parseText, isFullyConvertible, toText }; diff --git a/src/nlp/parsetext.ts b/src/nlp/parsetext.ts index fbaeccf99..9e96df32a 100644 --- a/src/nlp/parsetext.ts +++ b/src/nlp/parsetext.ts @@ -1,175 +1,175 @@ -import ENGLISH, { Language } from './i18n' -import { RRule } from '../rrule' -import { ByWeekday, Options } from '../types' -import { WeekdayStr } from '../weekday' +import { RRule } from '../rrule'; +import type { ByWeekday, Options } from '../types'; +import type { WeekdayStr } from '../weekday'; +import ENGLISH, { type Language } from './i18n'; // ============================================================================= // Parser // ============================================================================= class Parser { - private readonly rules: { [k: string]: RegExp } - public text: string - public symbol: string | null - public value: RegExpExecArray | null - private done = true + private readonly rules: { [k: string]: RegExp }; + public text!: string; + public symbol!: string | null; + public value!: RegExpExecArray | null; + private done = true; constructor(rules: { [k: string]: RegExp }) { - this.rules = rules + this.rules = rules; } start(text: string) { - this.text = text - this.done = false - return this.nextSymbol() + this.text = text; + this.done = false; + return this.nextSymbol(); } isDone() { - return this.done && this.symbol === null + return this.done && this.symbol === null; } nextSymbol() { - let best: RegExpExecArray | null - let bestSymbol: string + let best: RegExpExecArray | null; + let bestSymbol: string | null = null; - this.symbol = null - this.value = null + this.symbol = null; + this.value = null; do { - if (this.done) return false + if (this.done) return false; - let rule: RegExp - best = null + let rule: RegExp; + best = null; for (const name in this.rules) { - rule = this.rules[name] - const match = rule.exec(this.text) + rule = this.rules[name]!; + const match = rule.exec(this.text); if (match) { if (best === null || match[0].length > best[0].length) { - best = match - bestSymbol = name + best = match; + bestSymbol = name; } } } if (best != null) { - this.text = this.text.substr(best[0].length) + this.text = this.text.substr(best[0].length); - if (this.text === '') this.done = true + if (this.text === '') this.done = true; } if (best == null) { - this.done = true - this.symbol = null - this.value = null - return + this.done = true; + this.symbol = null; + this.value = null; + return; } - } while (bestSymbol === 'SKIP') + } while (bestSymbol === 'SKIP'); - this.symbol = bestSymbol - this.value = best - return true + this.symbol = bestSymbol; + this.value = best; + return true; } accept(name: string) { if (this.symbol === name) { if (this.value) { - const v = this.value - this.nextSymbol() - return v + const v = this.value; + this.nextSymbol(); + return v; } - this.nextSymbol() - return true + this.nextSymbol(); + return true; } - return false + return false; } acceptNumber() { - return this.accept('number') as RegExpExecArray + return this.accept('number') as RegExpExecArray; } expect(name: string) { - if (this.accept(name)) return true + if (this.accept(name)) return true; - throw new Error('expected ' + name + ' but found ' + this.symbol) + throw new Error(`expected ${name} but found ${this.symbol}`); } } export default function parseText(text: string, language: Language = ENGLISH) { - const options: Partial = {} - const ttr = new Parser(language.tokens) + const options: Partial = {}; + const ttr = new Parser(language.tokens); - if (!ttr.start(text)) return null + if (!ttr.start(text)) return null; - S() - return options + S(); + return options; function S() { // every [n] - ttr.expect('every') - const n = ttr.acceptNumber() - if (n) options.interval = parseInt(n[0], 10) - if (ttr.isDone()) throw new Error('Unexpected end') + ttr.expect('every'); + const n = ttr.acceptNumber(); + if (n) options.interval = parseInt(n[0], 10); + if (ttr.isDone()) throw new Error('Unexpected end'); switch (ttr.symbol) { case 'day(s)': - options.freq = RRule.DAILY + options.freq = RRule.DAILY; if (ttr.nextSymbol()) { - AT() - F() + AT(); + F(); } - break + break; // FIXME Note: every 2 weekdays != every two weeks on weekdays. // DAILY on weekdays is not a valid rule case 'weekday(s)': - options.freq = RRule.WEEKLY - options.byweekday = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR] - ttr.nextSymbol() - AT() - F() - break + options.freq = RRule.WEEKLY; + options.byweekday = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR]; + ttr.nextSymbol(); + AT(); + F(); + break; case 'week(s)': - options.freq = RRule.WEEKLY + options.freq = RRule.WEEKLY; if (ttr.nextSymbol()) { - ON() - AT() - F() + ON(); + AT(); + F(); } - break + break; case 'hour(s)': - options.freq = RRule.HOURLY + options.freq = RRule.HOURLY; if (ttr.nextSymbol()) { - ON() - F() + ON(); + F(); } - break + break; case 'minute(s)': - options.freq = RRule.MINUTELY + options.freq = RRule.MINUTELY; if (ttr.nextSymbol()) { - ON() - F() + ON(); + F(); } - break + break; case 'month(s)': - options.freq = RRule.MONTHLY + options.freq = RRule.MONTHLY; if (ttr.nextSymbol()) { - ON() - F() + ON(); + F(); } - break + break; case 'year(s)': - options.freq = RRule.YEARLY + options.freq = RRule.YEARLY; if (ttr.nextSymbol()) { - ON() - F() + ON(); + F(); } - break + break; case 'monday': case 'tuesday': @@ -177,33 +177,34 @@ export default function parseText(text: string, language: Language = ENGLISH) { case 'thursday': case 'friday': case 'saturday': - case 'sunday': - options.freq = RRule.WEEKLY + case 'sunday': { + options.freq = RRule.WEEKLY; const key: WeekdayStr = ttr.symbol .substr(0, 2) - .toUpperCase() as WeekdayStr - options.byweekday = [RRule[key]] + .toUpperCase() as WeekdayStr; + options.byweekday = [RRule[key]]; - if (!ttr.nextSymbol()) return + if (!ttr.nextSymbol()) return; // TODO check for duplicates while (ttr.accept('comma')) { - if (ttr.isDone()) throw new Error('Unexpected end') + if (ttr.isDone()) throw new Error('Unexpected end'); - const wkd = decodeWKD() as keyof typeof RRule + const wkd = decodeWKD() as keyof typeof RRule; if (!wkd) { throw new Error( - 'Unexpected symbol ' + ttr.symbol + ', expected weekday' - ) + `Unexpected symbol ${ttr.symbol}, expected weekday`, + ); } - options.byweekday.push(RRule[wkd] as ByWeekday) - ttr.nextSymbol() + options.byweekday.push(RRule[wkd] as ByWeekday); + ttr.nextSymbol(); } - AT() - MDAYs() - F() - break + AT(); + MDAYs(); + F(); + break; + } case 'january': case 'february': @@ -217,146 +218,150 @@ export default function parseText(text: string, language: Language = ENGLISH) { case 'october': case 'november': case 'december': - options.freq = RRule.YEARLY - options.bymonth = [decodeM() as number] + options.freq = RRule.YEARLY; + options.bymonth = [decodeM() as number]; - if (!ttr.nextSymbol()) return + if (!ttr.nextSymbol()) return; // TODO check for duplicates while (ttr.accept('comma')) { - if (ttr.isDone()) throw new Error('Unexpected end') + if (ttr.isDone()) throw new Error('Unexpected end'); - const m = decodeM() + const m = decodeM(); if (!m) { - throw new Error( - 'Unexpected symbol ' + ttr.symbol + ', expected month' - ) + throw new Error(`Unexpected symbol ${ttr.symbol}, expected month`); } - options.bymonth.push(m) - ttr.nextSymbol() + options.bymonth.push(m); + ttr.nextSymbol(); } - ON() - F() - break + ON(); + F(); + break; default: - throw new Error('Unknown symbol') + throw new Error('Unknown symbol'); } } function ON() { - const on = ttr.accept('on') - const the = ttr.accept('the') - if (!(on || the)) return + const on = ttr.accept('on'); + const the = ttr.accept('the'); + if (!(on || the)) return; do { - const nth = decodeNTH() - const wkd = decodeWKD() - const m = decodeM() + const nth = decodeNTH(); + const wkd = decodeWKD(); + const m = decodeM(); // nth | if (nth) { // ttr.nextSymbol() if (wkd) { - ttr.nextSymbol() - if (!options.byweekday) options.byweekday = [] as ByWeekday[] - ;(options.byweekday as ByWeekday[]).push( - RRule[wkd as WeekdayStr].nth(nth) - ) + ttr.nextSymbol(); + if (!options.byweekday) options.byweekday = [] as ByWeekday[]; + (options.byweekday as ByWeekday[]).push( + RRule[wkd as WeekdayStr].nth(nth), + ); } else { - if (!options.bymonthday) options.bymonthday = [] as number[] - ;(options.bymonthday as number[]).push(nth) - ttr.accept('day(s)') + if (!options.bymonthday) options.bymonthday = [] as number[]; + (options.bymonthday as number[]).push(nth); + ttr.accept('day(s)'); } // } else if (wkd) { - ttr.nextSymbol() - if (!options.byweekday) options.byweekday = [] as ByWeekday[] - ;(options.byweekday as ByWeekday[]).push(RRule[wkd as WeekdayStr]) + ttr.nextSymbol(); + if (!options.byweekday) options.byweekday = [] as ByWeekday[]; + (options.byweekday as ByWeekday[]).push(RRule[wkd as WeekdayStr]); } else if (ttr.symbol === 'weekday(s)') { - ttr.nextSymbol() + ttr.nextSymbol(); if (!options.byweekday) { - options.byweekday = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR] + options.byweekday = [ + RRule.MO, + RRule.TU, + RRule.WE, + RRule.TH, + RRule.FR, + ]; } } else if (ttr.symbol === 'week(s)') { - ttr.nextSymbol() - let n = ttr.acceptNumber() + ttr.nextSymbol(); + let n = ttr.acceptNumber(); if (!n) { throw new Error( - 'Unexpected symbol ' + ttr.symbol + ', expected week number' - ) + `Unexpected symbol ${ttr.symbol}, expected week number`, + ); } - options.byweekno = [parseInt(n[0], 10)] + options.byweekno = [parseInt(n[0], 10)]; while (ttr.accept('comma')) { - n = ttr.acceptNumber() + n = ttr.acceptNumber(); if (!n) { throw new Error( - 'Unexpected symbol ' + ttr.symbol + '; expected monthday' - ) + `Unexpected symbol ${ttr.symbol}; expected monthday`, + ); } - options.byweekno.push(parseInt(n[0], 10)) + options.byweekno.push(parseInt(n[0], 10)); } } else if (m) { - ttr.nextSymbol() - if (!options.bymonth) options.bymonth = [] as number[] - ;(options.bymonth as number[]).push(m) + ttr.nextSymbol(); + if (!options.bymonth) options.bymonth = [] as number[]; + (options.bymonth as number[]).push(m); } else { - return + return; } - } while (ttr.accept('comma') || ttr.accept('the') || ttr.accept('on')) + } while (ttr.accept('comma') || ttr.accept('the') || ttr.accept('on')); } function AT() { - const at = ttr.accept('at') - if (!at) return + const at = ttr.accept('at'); + if (!at) return; do { - let n = ttr.acceptNumber() + let n = ttr.acceptNumber(); if (!n) { - throw new Error('Unexpected symbol ' + ttr.symbol + ', expected hour') + throw new Error(`Unexpected symbol ${ttr.symbol}, expected hour`); } - options.byhour = [parseInt(n[0], 10)] + options.byhour = [parseInt(n[0], 10)]; while (ttr.accept('comma')) { - n = ttr.acceptNumber() + n = ttr.acceptNumber(); if (!n) { - throw new Error('Unexpected symbol ' + ttr.symbol + '; expected hour') + throw new Error(`Unexpected symbol ${ttr.symbol}; expected hour`); } - options.byhour.push(parseInt(n[0], 10)) + options.byhour.push(parseInt(n[0], 10)); } - } while (ttr.accept('comma') || ttr.accept('at')) + } while (ttr.accept('comma') || ttr.accept('at')); } function decodeM() { switch (ttr.symbol) { case 'january': - return 1 + return 1; case 'february': - return 2 + return 2; case 'march': - return 3 + return 3; case 'april': - return 4 + return 4; case 'may': - return 5 + return 5; case 'june': - return 6 + return 6; case 'july': - return 7 + return 7; case 'august': - return 8 + return 8; case 'september': - return 9 + return 9; case 'october': - return 10 + return 10; case 'november': - return 11 + return 11; case 'december': - return 12 + return 12; default: - return false + return false; } } @@ -369,70 +374,69 @@ export default function parseText(text: string, language: Language = ENGLISH) { case 'friday': case 'saturday': case 'sunday': - return ttr.symbol.substr(0, 2).toUpperCase() + return ttr.symbol.substr(0, 2).toUpperCase(); default: - return false + return false; } } function decodeNTH() { switch (ttr.symbol) { case 'last': - ttr.nextSymbol() - return -1 + ttr.nextSymbol(); + return -1; case 'first': - ttr.nextSymbol() - return 1 + ttr.nextSymbol(); + return 1; case 'second': - ttr.nextSymbol() - return ttr.accept('last') ? -2 : 2 + ttr.nextSymbol(); + return ttr.accept('last') ? -2 : 2; case 'third': - ttr.nextSymbol() - return ttr.accept('last') ? -3 : 3 - case 'nth': - const v = parseInt(ttr.value[1], 10) - if (v < -366 || v > 366) throw new Error('Nth out of range: ' + v) - - ttr.nextSymbol() - return ttr.accept('last') ? -v : v + ttr.nextSymbol(); + return ttr.accept('last') ? -3 : 3; + case 'nth': { + const v = parseInt(ttr.value![1]!, 10); + if (v < -366 || v > 366) throw new Error(`Nth out of range: ${v}`); + + ttr.nextSymbol(); + return ttr.accept('last') ? -v : v; + } default: - return false + return false; } } function MDAYs() { - ttr.accept('on') - ttr.accept('the') + ttr.accept('on'); + ttr.accept('the'); - let nth = decodeNTH() - if (!nth) return + let nth = decodeNTH(); + if (!nth) return; - options.bymonthday = [nth] - ttr.nextSymbol() + options.bymonthday = [nth]; + ttr.nextSymbol(); while (ttr.accept('comma')) { - nth = decodeNTH() + nth = decodeNTH(); if (!nth) { - throw new Error( - 'Unexpected symbol ' + ttr.symbol + '; expected monthday' - ) + throw new Error(`Unexpected symbol ${ttr.symbol}; expected monthday`); } - options.bymonthday.push(nth) - ttr.nextSymbol() + options.bymonthday.push(nth); + ttr.nextSymbol(); } } function F() { if (ttr.symbol === 'until') { - const date = Date.parse(ttr.text) + const date = Date.parse(ttr.text); - if (!date) throw new Error('Cannot parse until date:' + ttr.text) - options.until = new Date(date) + if (!date) throw new Error(`Cannot parse until date:${ttr.text}`); + options.until = new Date(date); } else if (ttr.accept('for')) { - options.count = parseInt(ttr.value[0], 10) - ttr.expect('number') + options.count = parseInt(ttr.value![0]!, 10); + ttr.expect('number'); // ttr.expect('times') } } diff --git a/src/nlp/totext.ts b/src/nlp/totext.ts index e77fd123c..89ffb85b7 100644 --- a/src/nlp/totext.ts +++ b/src/nlp/totext.ts @@ -1,8 +1,8 @@ -import ENGLISH, { Language } from './i18n' -import { RRule } from '../rrule' -import { Options, ByWeekday } from '../types' -import { Weekday } from '../weekday' -import { isArray, isNumber, isPresent } from '../helpers' +import { isArray, isNumber, isPresent } from '../helpers'; +import { RRule } from '../rrule'; +import type { ByWeekday, Options, ParsedOptions } from '../types'; +import type { Weekday } from '../weekday'; +import ENGLISH, { type Language } from './i18n'; // ============================================================================= // Helper functions @@ -11,25 +11,27 @@ import { isArray, isNumber, isPresent } from '../helpers' /** * Return true if a value is in an array */ -const contains = function (arr: string[], val: string) { - return arr.indexOf(val) !== -1 -} +const contains = (arr: string[], val: string) => arr.indexOf(val) !== -1; // ============================================================================= // ToText // ============================================================================= -export type GetText = (id: string | number | Weekday) => string +export type GetText = (id: string | number | Weekday) => string; -const defaultGetText: GetText = (id) => id.toString() +const defaultGetText: GetText = (id) => id.toString(); -export type DateFormatter = (year: number, month: string, day: number) => string +export type DateFormatter = ( + year: number, + month: string, + day: number, +) => string; const defaultDateFormatter: DateFormatter = ( year: number, month: string, - day: number -) => `${month} ${day}, ${year}` + day: number, +) => `${month} ${day}, ${year}`; /** * @@ -40,60 +42,60 @@ const defaultDateFormatter: DateFormatter = ( * @constructor */ export default class ToText { - static IMPLEMENTED: string[][] - private rrule: RRule - private text: string[] - private gettext: GetText - private dateFormatter: DateFormatter - private language: Language - private options: Partial - private origOptions: Partial - private bymonthday: Options['bymonthday'] | null + static IMPLEMENTED: string[][]; + private rrule: RRule; + private text: string[]; + private gettext: GetText; + private dateFormatter: DateFormatter; + private language: Language; + private options: ParsedOptions; + private origOptions: Partial; + private bymonthday!: Options['bymonthday'] | null; private byweekday: { - allWeeks: ByWeekday[] | null - someWeeks: ByWeekday[] | null - isWeekdays: boolean - isEveryDay: boolean - } | null + allWeeks: ByWeekday[] | null; + someWeeks: ByWeekday[] | null; + isWeekdays: boolean; + isEveryDay: boolean; + } | null; constructor( rrule: RRule, gettext: GetText = defaultGetText, language: Language = ENGLISH, - dateFormatter: DateFormatter = defaultDateFormatter + dateFormatter: DateFormatter = defaultDateFormatter, ) { - this.text = [] - this.language = language || ENGLISH - this.gettext = gettext - this.dateFormatter = dateFormatter - this.rrule = rrule - this.options = rrule.options - this.origOptions = rrule.origOptions + this.text = []; + this.language = language || ENGLISH; + this.gettext = gettext; + this.dateFormatter = dateFormatter; + this.rrule = rrule; + this.options = rrule.options; + this.origOptions = rrule.origOptions; if (this.origOptions.bymonthday) { - const bymonthday = ([] as number[]).concat(this.options.bymonthday) - const bynmonthday = ([] as number[]).concat(this.options.bynmonthday) + const bymonthday = ([] as number[]).concat(this.options.bymonthday); + const bynmonthday = ([] as number[]).concat(this.options.bynmonthday); - bymonthday.sort((a, b) => a - b) - bynmonthday.sort((a, b) => b - a) + bymonthday.sort((a, b) => a - b); + bynmonthday.sort((a, b) => b - a); // 1, 2, 3, .., -5, -4, -3, .. - this.bymonthday = bymonthday.concat(bynmonthday) - if (!this.bymonthday.length) this.bymonthday = null + this.bymonthday = bymonthday.concat(bynmonthday); + if (!this.bymonthday.length) this.bymonthday = null; } if (isPresent(this.origOptions.byweekday)) { const byweekday = !isArray(this.origOptions.byweekday) ? [this.origOptions.byweekday] - : this.origOptions.byweekday - const days = String(byweekday) + : this.origOptions.byweekday; + const days = String(byweekday); this.byweekday = { - allWeeks: byweekday.filter(function (weekday: Weekday) { - return !weekday.n - }), - someWeeks: byweekday.filter(function (weekday: Weekday) { - return Boolean(weekday.n) - }), + allWeeks: byweekday.filter( + (weekday: ByWeekday) => !(weekday as Weekday).n, + ), + someWeeks: byweekday.filter((weekday: ByWeekday) => + Boolean((weekday as Weekday).n), + ), isWeekdays: days.indexOf('MO') !== -1 && days.indexOf('TU') !== -1 && @@ -110,19 +112,18 @@ export default class ToText { days.indexOf('FR') !== -1 && days.indexOf('SA') !== -1 && days.indexOf('SU') !== -1, - } + }; - const sortWeekDays = function (a: Weekday, b: Weekday) { - return a.weekday - b.weekday - } + const sortWeekDays = (a: ByWeekday, b: ByWeekday) => + (a as Weekday).weekday - (b as Weekday).weekday; - this.byweekday.allWeeks.sort(sortWeekDays) - this.byweekday.someWeeks.sort(sortWeekDays) + this.byweekday.allWeeks!.sort(sortWeekDays); + this.byweekday.someWeeks!.sort(sortWeekDays); - if (!this.byweekday.allWeeks.length) this.byweekday.allWeeks = null - if (!this.byweekday.someWeeks.length) this.byweekday.someWeeks = null + if (!this.byweekday.allWeeks!.length) this.byweekday.allWeeks = null; + if (!this.byweekday.someWeeks!.length) this.byweekday.someWeeks = null; } else { - this.byweekday = null + this.byweekday = null; } } @@ -133,21 +134,21 @@ export default class ToText { * @return {Boolean} */ static isFullyConvertible(rrule: RRule) { - const canConvert = true + const canConvert = true; - if (!(rrule.options.freq in ToText.IMPLEMENTED)) return false - if (rrule.origOptions.until && rrule.origOptions.count) return false + if (!(rrule.options.freq in ToText.IMPLEMENTED)) return false; + if (rrule.origOptions.until && rrule.origOptions.count) return false; for (const key in rrule.origOptions) { - if (contains(['dtstart', 'tzid', 'wkst', 'freq'], key)) return true - if (!contains(ToText.IMPLEMENTED[rrule.options.freq], key)) return false + if (contains(['dtstart', 'tzid', 'wkst', 'freq'], key)) return true; + if (!contains(ToText.IMPLEMENTED[rrule.options.freq]!, key)) return false; } - return canConvert + return canConvert; } isFullyConvertible() { - return ToText.isFullyConvertible(this.rrule) + return ToText.isFullyConvertible(this.rrule); } /** @@ -158,196 +159,215 @@ export default class ToText { * @return {*} */ toString() { - const gettext = this.gettext + const gettext = this.gettext; if (!(this.options.freq in ToText.IMPLEMENTED)) { - return gettext('RRule error: Unable to fully convert this rrule to text') + return gettext('RRule error: Unable to fully convert this rrule to text'); } - this.text = [gettext('every')] + this.text = [gettext('every')]; // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - this[RRule.FREQUENCIES[this.options.freq]]() + // @ts-expect-error + this[RRule.FREQUENCIES[this.options.freq]](); if (this.options.until) { - this.add(gettext('until')) - const until = this.options.until + this.add(gettext('until')); + const until = this.options.until; this.add( this.dateFormatter( until.getUTCFullYear(), - this.language.monthNames[until.getUTCMonth()], - until.getUTCDate() - ) - ) + this.language.monthNames[until.getUTCMonth()]!, + until.getUTCDate(), + ), + ); } else if (this.options.count) { this.add(gettext('for')) .add(this.options.count.toString()) .add( - this.plural(this.options.count) ? gettext('times') : gettext('time') - ) + this.plural(this.options.count) ? gettext('times') : gettext('time'), + ); + } + + if (this.origOptions.dtstart) { + this.text.push(','); + this.add(gettext('starting')); + const dtstart = this.origOptions.dtstart; + this.add( + this.dateFormatter( + dtstart.getUTCFullYear(), + this.language.monthNames[dtstart.getUTCMonth()]!, + dtstart.getUTCDate(), + ), + ); } - if (!this.isFullyConvertible()) this.add(gettext('(~ approximate)')) + if (!this.isFullyConvertible()) this.add(gettext('(~ approximate)')); - return this.text.join('') + return this.text.join(''); } HOURLY() { - const gettext = this.gettext + const gettext = this.gettext; - if (this.options.interval !== 1) this.add(this.options.interval.toString()) + if (this.options.interval !== 1) this.add(this.options.interval.toString()); this.add( - this.plural(this.options.interval) ? gettext('hours') : gettext('hour') - ) + this.plural(this.options.interval) ? gettext('hours') : gettext('hour'), + ); } MINUTELY() { - const gettext = this.gettext + const gettext = this.gettext; - if (this.options.interval !== 1) this.add(this.options.interval.toString()) + if (this.options.interval !== 1) this.add(this.options.interval.toString()); this.add( this.plural(this.options.interval) ? gettext('minutes') - : gettext('minute') - ) + : gettext('minute'), + ); } DAILY() { - const gettext = this.gettext + const gettext = this.gettext; - if (this.options.interval !== 1) this.add(this.options.interval.toString()) + if (this.options.interval !== 1) this.add(this.options.interval.toString()); - if (this.byweekday && this.byweekday.isWeekdays) { + if (this.byweekday?.isWeekdays) { this.add( this.plural(this.options.interval) ? gettext('weekdays') - : gettext('weekday') - ) + : gettext('weekday'), + ); } else { this.add( - this.plural(this.options.interval) ? gettext('days') : gettext('day') - ) + this.plural(this.options.interval) ? gettext('days') : gettext('day'), + ); } if (this.origOptions.bymonth) { - this.add(gettext('in')) - this._bymonth() + this.add(gettext('in')); + this._bymonth(); } if (this.bymonthday) { - this._bymonthday() + this._bymonthday(); } else if (this.byweekday) { - this._byweekday() + this._byweekday(); } else if (this.origOptions.byhour) { - this._byhour() + this._byhour(); } } WEEKLY() { - const gettext = this.gettext + const gettext = this.gettext; if (this.options.interval !== 1) { this.add(this.options.interval.toString()).add( - this.plural(this.options.interval) ? gettext('weeks') : gettext('week') - ) + this.plural(this.options.interval) ? gettext('weeks') : gettext('week'), + ); } - if (this.byweekday && this.byweekday.isWeekdays) { + if (this.byweekday?.isWeekdays) { if (this.options.interval === 1) { this.add( this.plural(this.options.interval) ? gettext('weekdays') - : gettext('weekday') - ) + : gettext('weekday'), + ); } else { - this.add(gettext('on')).add(gettext('weekdays')) + this.add(gettext('on')).add(gettext('weekdays')); } - } else if (this.byweekday && this.byweekday.isEveryDay) { + } else if (this.byweekday?.isEveryDay) { this.add( - this.plural(this.options.interval) ? gettext('days') : gettext('day') - ) + this.plural(this.options.interval) ? gettext('days') : gettext('day'), + ); } else { - if (this.options.interval === 1) this.add(gettext('week')) + if (this.options.interval === 1) this.add(gettext('week')); if (this.origOptions.bymonth) { - this.add(gettext('in')) - this._bymonth() + this.add(gettext('in')); + this._bymonth(); } if (this.bymonthday) { - this._bymonthday() + this._bymonthday(); } else if (this.byweekday) { - this._byweekday() + this._byweekday(); } if (this.origOptions.byhour) { - this._byhour() + this._byhour(); } } } MONTHLY() { - const gettext = this.gettext + const gettext = this.gettext; if (this.origOptions.bymonth) { if (this.options.interval !== 1) { - this.add(this.options.interval.toString()).add(gettext('months')) - if (this.plural(this.options.interval)) this.add(gettext('in')) + this.add(this.options.interval.toString()).add(gettext('months')); + if (this.plural(this.options.interval)) this.add(gettext('in')); } else { // this.add(gettext('MONTH')) } - this._bymonth() + this._bymonth(); } else { if (this.options.interval !== 1) { - this.add(this.options.interval.toString()) + this.add(this.options.interval.toString()); } this.add( this.plural(this.options.interval) ? gettext('months') - : gettext('month') - ) + : gettext('month'), + ); } if (this.bymonthday) { - this._bymonthday() - } else if (this.byweekday && this.byweekday.isWeekdays) { - this.add(gettext('on')).add(gettext('weekdays')) + this._bymonthday(); + } else if (this.byweekday?.isWeekdays) { + this.add(gettext('on')).add(gettext('weekdays')); } else if (this.byweekday) { - this._byweekday() + this._byweekday(); } } YEARLY() { - const gettext = this.gettext + const gettext = this.gettext; if (this.origOptions.bymonth) { if (this.options.interval !== 1) { - this.add(this.options.interval.toString()) - this.add(gettext('years')) + this.add(this.options.interval.toString()); + this.add(gettext('years')); } else { // this.add(gettext('YEAR')) } - this._bymonth() + this._bymonth(); } else { if (this.options.interval !== 1) { - this.add(this.options.interval.toString()) + this.add(this.options.interval.toString()); } this.add( - this.plural(this.options.interval) ? gettext('years') : gettext('year') - ) + this.plural(this.options.interval) ? gettext('years') : gettext('year'), + ); } if (this.bymonthday) { - this._bymonthday() + this._bymonthday(); } else if (this.byweekday) { - this._byweekday() + this._byweekday(); } if (this.options.byyearday) { this.add(gettext('on the')) - .add(this.list(this.options.byyearday, this.nth, gettext('and'))) - .add(gettext('day')) + .add( + this.list( + this.options.byyearday, + this.nth as GetText, + gettext('and'), + ), + ) + .add(gettext('day')); } if (this.options.byweekno) { @@ -355,154 +375,162 @@ export default class ToText { .add( this.plural((this.options.byweekno as number[]).length) ? gettext('weeks') - : gettext('week') + : gettext('week'), ) - .add(this.list(this.options.byweekno, undefined, gettext('and'))) + .add(this.list(this.options.byweekno, undefined, gettext('and'))); } } private _bymonthday() { - const gettext = this.gettext - if (this.byweekday && this.byweekday.allWeeks) { + const gettext = this.gettext; + if (this.byweekday?.allWeeks) { this.add(gettext('on')) .add( - this.list(this.byweekday.allWeeks, this.weekdaytext, gettext('or')) + this.list( + this.byweekday.allWeeks, + this.weekdaytext as GetText, + gettext('or'), + ), ) .add(gettext('the')) - .add(this.list(this.bymonthday, this.nth, gettext('or'))) + .add(this.list(this.bymonthday!, this.nth as GetText, gettext('or'))); } else { this.add(gettext('on the')).add( - this.list(this.bymonthday, this.nth, gettext('and')) - ) + this.list(this.bymonthday!, this.nth as GetText, gettext('and')), + ); } // this.add(gettext('DAY')) } private _byweekday() { - const gettext = this.gettext - if (this.byweekday.allWeeks && !this.byweekday.isWeekdays) { + const gettext = this.gettext; + if (this.byweekday!.allWeeks && !this.byweekday!.isWeekdays) { this.add(gettext('on')).add( - this.list(this.byweekday.allWeeks, this.weekdaytext) - ) + this.list(this.byweekday!.allWeeks, this.weekdaytext as GetText), + ); } - if (this.byweekday.someWeeks) { - if (this.byweekday.allWeeks) this.add(gettext('and')) + if (this.byweekday!.someWeeks) { + if (this.byweekday!.allWeeks) this.add(gettext('and')); this.add(gettext('on the')).add( - this.list(this.byweekday.someWeeks, this.weekdaytext, gettext('and')) - ) + this.list( + this.byweekday!.someWeeks, + this.weekdaytext as GetText, + gettext('and'), + ), + ); } } private _byhour() { - const gettext = this.gettext + const gettext = this.gettext; this.add(gettext('at')).add( - this.list(this.origOptions.byhour, undefined, gettext('and')) - ) + this.list(this.origOptions.byhour!, undefined, gettext('and')), + ); } private _bymonth() { this.add( - this.list(this.options.bymonth, this.monthtext, this.gettext('and')) - ) + this.list( + this.options.bymonth, + this.monthtext as unknown as GetText, + this.gettext('and'), + ), + ); } nth(n: number | string) { - n = parseInt(n.toString(), 10) - let nth: string - const gettext = this.gettext + n = parseInt(n.toString(), 10); + let nth: string; + const gettext = this.gettext; - if (n === -1) return gettext('last') + if (n === -1) return gettext('last'); - const npos = Math.abs(n) + const npos = Math.abs(n); switch (npos) { case 1: case 21: case 31: - nth = npos + gettext('st') - break + nth = npos + gettext('st'); + break; case 2: case 22: - nth = npos + gettext('nd') - break + nth = npos + gettext('nd'); + break; case 3: case 23: - nth = npos + gettext('rd') - break + nth = npos + gettext('rd'); + break; default: - nth = npos + gettext('th') + nth = npos + gettext('th'); } - return n < 0 ? nth + ' ' + gettext('last') : nth + return n < 0 ? `${nth} ${gettext('last')}` : nth; } monthtext(m: number) { - return this.language.monthNames[m - 1] + return this.language.monthNames[m - 1]; } weekdaytext(wday: Weekday | number) { - const weekday = isNumber(wday) ? (wday + 1) % 7 : wday.getJsWeekday() + const weekday = isNumber(wday) ? (wday + 1) % 7 : wday.getJsWeekday(); return ( - ((wday as Weekday).n ? this.nth((wday as Weekday).n) + ' ' : '') + + ((wday as Weekday).n ? `${this.nth((wday as Weekday).n!)} ` : '') + this.language.dayNames[weekday] - ) + ); } plural(n: number) { - return n % 100 !== 1 + return n % 100 !== 1; } add(s: string) { - this.text.push(' ') - this.text.push(s) - return this + this.text.push(' '); + this.text.push(s); + return this; } list( arr: ByWeekday | ByWeekday[], callback?: GetText, finalDelim?: string, - delim = ',' + delim = ',', ) { if (!isArray(arr)) { - arr = [arr] + arr = [arr]; } - const delimJoin = function ( + const delimJoin = ( array: string[], delimiter: string, - finalDelimiter: string - ) { - let list = '' + finalDelimiter: string, + ) => { + let list = ''; for (let i = 0; i < array.length; i++) { if (i !== 0) { if (i === array.length - 1) { - list += ' ' + finalDelimiter + ' ' + list += ` ${finalDelimiter} `; } else { - list += delimiter + ' ' + list += `${delimiter} `; } } - list += array[i] + list += array[i]; } - return list - } + return list; + }; - callback = - callback || - function (o) { - return o.toString() - } + callback = callback || ((o) => o.toString()); const realCallback = (arg: ByWeekday) => { - return callback && callback.call(this, arg) - } + return callback?.call(this, arg); + }; if (finalDelim) { - return delimJoin(arr.map(realCallback), delim, finalDelim) + return delimJoin(arr.map(realCallback), delim, finalDelim); } else { - return arr.map(realCallback).join(delim + ' ') + return arr.map(realCallback).join(`${delim} `); } } } diff --git a/src/optionstostring.ts b/src/optionstostring.ts index 100866927..ab6594ce0 100644 --- a/src/optionstostring.ts +++ b/src/optionstostring.ts @@ -1,37 +1,37 @@ -import { Options } from './types' -import { RRule, DEFAULT_OPTIONS } from './rrule' -import { includes, isPresent, isArray, isNumber, toArray } from './helpers' -import { Weekday } from './weekday' -import { timeToUntilString } from './dateutil' -import { DateWithZone } from './datewithzone' +import { timeToUntilString } from './dateutil'; +import { DateWithZone } from './datewithzone'; +import { isArray, isNumber, isPresent, toArray } from './helpers'; +import { DEFAULT_OPTIONS, RRule } from './rrule'; +import type { Options } from './types'; +import { Weekday } from './weekday'; export function optionsToString(options: Partial) { - const rrule: string[][] = [] - let dtstart = '' - const keys: (keyof Options)[] = Object.keys(options) as (keyof Options)[] - const defaultKeys = Object.keys(DEFAULT_OPTIONS) + const rrule: string[][] = []; + let dtstart = ''; + const keys: (keyof Options)[] = Object.keys(options) as (keyof Options)[]; + const defaultKeys = Object.keys(DEFAULT_OPTIONS); - for (let i = 0; i < keys.length; i++) { - if (keys[i] === 'tzid') continue - if (!includes(defaultKeys, keys[i])) continue + for (const optKey of keys) { + if (optKey === 'tzid') continue; + if (!defaultKeys.includes(optKey)) continue; - let key = keys[i].toUpperCase() - const value = options[keys[i]] - let outValue = '' + let key = optKey.toUpperCase(); + const value = options[optKey]; + let outValue = ''; - if (!isPresent(value) || (isArray(value) && !value.length)) continue + if (!isPresent(value) || (isArray(value) && !value.length)) continue; switch (key) { case 'FREQ': - outValue = RRule.FREQUENCIES[options.freq] - break + outValue = RRule.FREQUENCIES[options.freq!]!; + break; case 'WKST': if (isNumber(value)) { - outValue = new Weekday(value).toString() + outValue = new Weekday(value).toString(); } else { - outValue = value.toString() + outValue = value.toString(); } - break + break; case 'BYWEEKDAY': /* NOTE: BYWEEKDAY is a special case. @@ -44,64 +44,62 @@ export function optionsToString(options: Partial) { Also, BYWEEKDAY (used by RRule) vs. BYDAY (RFC) */ - key = 'BYDAY' + key = 'BYDAY'; outValue = toArray( - value as Weekday | number[] | number + value as Weekday | number[] | number, ) .map((wday) => { if (wday instanceof Weekday) { - return wday + return wday; } if (isArray(wday)) { - return new Weekday(wday[0], wday[1]) + return new Weekday(wday[0]!, wday[1]!); } - return new Weekday(wday) + return new Weekday(wday); }) - .toString() + .toString(); - break + break; case 'DTSTART': - dtstart = buildDtstart(value as number, options.tzid) - break + dtstart = buildDtstart(value as number, options.tzid); + break; case 'UNTIL': - outValue = timeToUntilString(value as number, !options.tzid) - break + outValue = timeToUntilString(value as number, !options.tzid); + break; default: if (isArray(value)) { - const strValues: string[] = [] + const strValues: string[] = []; for (let j = 0; j < value.length; j++) { - strValues[j] = String(value[j]) + strValues[j] = String(value[j]); } - outValue = strValues.toString() + outValue = strValues.toString(); } else { - outValue = String(value) + outValue = String(value); } } if (outValue) { - rrule.push([key, outValue]) + rrule.push([key, outValue]); } } - const rules = rrule - .map(([key, value]) => `${key}=${value.toString()}`) - .join(';') - let ruleString = '' + const rules = rrule.map(([key, value]) => `${key}=${value}`).join(';'); + let ruleString = ''; if (rules !== '') { - ruleString = `RRULE:${rules}` + ruleString = `RRULE:${rules}`; } - return [dtstart, ruleString].filter((x) => !!x).join('\n') + return [dtstart, ruleString].filter((x) => !!x).join('\n'); } function buildDtstart(dtstart?: number, tzid?: string | null) { if (!dtstart) { - return '' + return ''; } - return 'DTSTART' + new DateWithZone(new Date(dtstart), tzid).toString() + return `DTSTART${new DateWithZone(new Date(dtstart), tzid).toString()}`; } diff --git a/src/parseoptions.ts b/src/parseoptions.ts index 60e2567f6..b70cc2d01 100644 --- a/src/parseoptions.ts +++ b/src/parseoptions.ts @@ -1,64 +1,66 @@ -import { Options, ParsedOptions, freqIsDailyOrGreater } from './types' +import { Time } from './datetime'; +import { getWeekday, isDate, isValidDate } from './dateutil'; import { - includes, - notEmpty, - isPresent, - isNumber, isArray, + isNumber, + isPresent, isWeekdayStr, -} from './helpers' -import { RRule, defaultKeys, DEFAULT_OPTIONS } from './rrule' -import { getWeekday, isDate, isValidDate } from './dateutil' -import { Weekday } from './weekday' -import { Time } from './datetime' + notEmpty, +} from './helpers'; +import { DEFAULT_OPTIONS, defaultKeys, RRule } from './rrule'; +import { + freqIsDailyOrGreater, + type Options, + type ParsedOptions, +} from './types'; +import { Weekday } from './weekday'; export function initializeOptions(options: Partial) { - const invalid: string[] = [] - const keys = Object.keys(options) as (keyof Options)[] + const invalid: string[] = []; + const keys = Object.keys(options) as (keyof Options)[]; // Shallow copy for options and origOptions and check for invalid for (const key of keys) { - if (!includes(defaultKeys, key)) invalid.push(key) + if (!defaultKeys.includes(key)) invalid.push(key); if (isDate(options[key]) && !isValidDate(options[key])) { - invalid.push(key) + invalid.push(key); } } if (invalid.length) { - throw new Error('Invalid options: ' + invalid.join(', ')) + throw new Error(`Invalid options: ${invalid.join(', ')}`); } - return { ...options } + return { ...options }; } export function parseOptions(options: Partial) { - const opts = { ...DEFAULT_OPTIONS, ...initializeOptions(options) } + const opts = { ...DEFAULT_OPTIONS, ...initializeOptions(options) }; - if (isPresent(opts.byeaster)) opts.freq = RRule.YEARLY + if (isPresent(opts.byeaster)) opts.freq = RRule.YEARLY; if (!(isPresent(opts.freq) && RRule.FREQUENCIES[opts.freq])) { - throw new Error(`Invalid frequency: ${opts.freq} ${options.freq}`) + throw new Error(`Invalid frequency: ${opts.freq} ${options.freq}`); } - if (!opts.dtstart) opts.dtstart = new Date(new Date().setMilliseconds(0)) + if (!opts.dtstart) opts.dtstart = new Date(new Date().setMilliseconds(0)); if (!isPresent(opts.wkst)) { - opts.wkst = RRule.MO.weekday + opts.wkst = RRule.MO.weekday; } else if (isNumber(opts.wkst)) { // cool, just keep it like that } else { - opts.wkst = opts.wkst.weekday + opts.wkst = opts.wkst.weekday; } if (isPresent(opts.bysetpos)) { - if (isNumber(opts.bysetpos)) opts.bysetpos = [opts.bysetpos] + if (isNumber(opts.bysetpos)) opts.bysetpos = [opts.bysetpos]; - for (let i = 0; i < opts.bysetpos.length; i++) { - const v = opts.bysetpos[i] + for (const v of opts.bysetpos) { if (v === 0 || !(v >= -366 && v <= 366)) { throw new Error( - 'bysetpos must be between 1 and 366,' + ' or between -366 and -1' - ) + 'bysetpos must be between 1 and 366,' + ' or between -366 and -1', + ); } } } @@ -76,21 +78,21 @@ export function parseOptions(options: Partial) { ) { switch (opts.freq) { case RRule.YEARLY: - if (!opts.bymonth) opts.bymonth = opts.dtstart.getUTCMonth() + 1 - opts.bymonthday = opts.dtstart.getUTCDate() - break + if (!opts.bymonth) opts.bymonth = opts.dtstart.getUTCMonth() + 1; + opts.bymonthday = opts.dtstart.getUTCDate(); + break; case RRule.MONTHLY: - opts.bymonthday = opts.dtstart.getUTCDate() - break + opts.bymonthday = opts.dtstart.getUTCDate(); + break; case RRule.WEEKLY: - opts.byweekday = [getWeekday(opts.dtstart)] - break + opts.byweekday = [getWeekday(opts.dtstart)!]; + break; } } // bymonth if (isPresent(opts.bymonth) && !isArray(opts.bymonth)) { - opts.bymonth = [opts.bymonth] + opts.bymonth = [opts.bymonth]; } // byyearday @@ -99,122 +101,120 @@ export function parseOptions(options: Partial) { !isArray(opts.byyearday) && isNumber(opts.byyearday) ) { - opts.byyearday = [opts.byyearday] + opts.byyearday = [opts.byyearday]; } // bymonthday if (!isPresent(opts.bymonthday)) { - opts.bymonthday = [] - opts.bynmonthday = [] + opts.bymonthday = []; + opts.bynmonthday = []; } else if (isArray(opts.bymonthday)) { - const bymonthday = [] - const bynmonthday = [] + const bymonthday: number[] = []; + const bynmonthday: number[] = []; - for (let i = 0; i < opts.bymonthday.length; i++) { - const v = opts.bymonthday[i] + for (const v of opts.bymonthday) { if (v > 0) { - bymonthday.push(v) + bymonthday.push(v); } else if (v < 0) { - bynmonthday.push(v) + bynmonthday.push(v); } } - opts.bymonthday = bymonthday - opts.bynmonthday = bynmonthday + opts.bymonthday = bymonthday; + opts.bynmonthday = bynmonthday; } else if (opts.bymonthday < 0) { - opts.bynmonthday = [opts.bymonthday] - opts.bymonthday = [] + opts.bynmonthday = [opts.bymonthday]; + opts.bymonthday = []; } else { - opts.bynmonthday = [] - opts.bymonthday = [opts.bymonthday] + opts.bynmonthday = []; + opts.bymonthday = [opts.bymonthday]; } // byweekno if (isPresent(opts.byweekno) && !isArray(opts.byweekno)) { - opts.byweekno = [opts.byweekno] + opts.byweekno = [opts.byweekno]; } // byweekday / bynweekday if (!isPresent(opts.byweekday)) { - opts.bynweekday = null + opts.bynweekday = null; } else if (isNumber(opts.byweekday)) { - opts.byweekday = [opts.byweekday] - opts.bynweekday = null + opts.byweekday = [opts.byweekday]; + opts.bynweekday = null; } else if (isWeekdayStr(opts.byweekday)) { - opts.byweekday = [Weekday.fromStr(opts.byweekday).weekday] - opts.bynweekday = null + opts.byweekday = [Weekday.fromStr(opts.byweekday).weekday]; + opts.bynweekday = null; } else if (opts.byweekday instanceof Weekday) { if (!opts.byweekday.n || opts.freq > RRule.MONTHLY) { - opts.byweekday = [opts.byweekday.weekday] - opts.bynweekday = null + opts.byweekday = [opts.byweekday.weekday]; + opts.bynweekday = null; } else { - opts.bynweekday = [[opts.byweekday.weekday, opts.byweekday.n]] - opts.byweekday = null + opts.bynweekday = [[opts.byweekday.weekday, opts.byweekday.n]]; + opts.byweekday = null; } } else { - const byweekday: number[] = [] - const bynweekday = [] - - for (let i = 0; i < opts.byweekday.length; i++) { - const wday = opts.byweekday[i] + const byweekday: number[] = []; + const bynweekday: [number, number][] = []; + for (const wday of opts.byweekday) { if (isNumber(wday)) { - byweekday.push(wday) - continue + byweekday.push(wday); + continue; } else if (isWeekdayStr(wday)) { - byweekday.push(Weekday.fromStr(wday).weekday) - continue + byweekday.push(Weekday.fromStr(wday).weekday); + continue; } if (!wday.n || opts.freq > RRule.MONTHLY) { - byweekday.push(wday.weekday) + byweekday.push(wday.weekday); } else { - bynweekday.push([wday.weekday, wday.n]) + bynweekday.push([wday.weekday, wday.n]); } } - opts.byweekday = notEmpty(byweekday) ? byweekday : null - opts.bynweekday = notEmpty(bynweekday) ? bynweekday : null + opts.byweekday = notEmpty(byweekday) ? byweekday : null; + opts.bynweekday = notEmpty(bynweekday) ? bynweekday : null; } // byhour if (!isPresent(opts.byhour)) { - opts.byhour = opts.freq < RRule.HOURLY ? [opts.dtstart.getUTCHours()] : null + opts.byhour = + opts.freq < RRule.HOURLY ? [opts.dtstart.getUTCHours()] : null; } else if (isNumber(opts.byhour)) { - opts.byhour = [opts.byhour] + opts.byhour = [opts.byhour]; } // byminute if (!isPresent(opts.byminute)) { opts.byminute = - opts.freq < RRule.MINUTELY ? [opts.dtstart.getUTCMinutes()] : null + opts.freq < RRule.MINUTELY ? [opts.dtstart.getUTCMinutes()] : null; } else if (isNumber(opts.byminute)) { - opts.byminute = [opts.byminute] + opts.byminute = [opts.byminute]; } // bysecond if (!isPresent(opts.bysecond)) { opts.bysecond = - opts.freq < RRule.SECONDLY ? [opts.dtstart.getUTCSeconds()] : null + opts.freq < RRule.SECONDLY ? [opts.dtstart.getUTCSeconds()] : null; } else if (isNumber(opts.bysecond)) { - opts.bysecond = [opts.bysecond] + opts.bysecond = [opts.bysecond]; } - return { parsedOptions: opts as ParsedOptions } + return { parsedOptions: opts as ParsedOptions }; } export function buildTimeset(opts: ParsedOptions) { - const millisecondModulo = opts.dtstart.getTime() % 1000 + const millisecondModulo = opts.dtstart.getTime() % 1000; if (!freqIsDailyOrGreater(opts.freq)) { - return [] + return []; } - const timeset: Time[] = [] + const timeset: Time[] = []; opts.byhour.forEach((hour) => { opts.byminute.forEach((minute) => { opts.bysecond.forEach((second) => { - timeset.push(new Time(hour, minute, second, millisecondModulo)) - }) - }) - }) + timeset.push(new Time(hour, minute, second, millisecondModulo)); + }); + }); + }); - return timeset + return timeset; } diff --git a/src/parsestring.ts b/src/parsestring.ts index 049de8188..1d75acdcb 100644 --- a/src/parsestring.ts +++ b/src/parsestring.ts @@ -1,72 +1,72 @@ -import { Options, Frequency } from './types' -import { Weekday } from './weekday' -import { untilStringToDate } from './dateutil' -import { Days } from './rrule' +import { untilStringToDate } from './dateutil'; +import { Days } from './rrule'; +import { Frequency, type Options } from './types'; +import { Weekday } from './weekday'; export function parseString(rfcString: string): Partial { const options = rfcString .split('\n') .map(parseLine) - .filter((x) => x !== null) - return { ...options[0], ...options[1] } + .filter((x) => x !== null); + return { ...options[0], ...options[1] }; } export function parseDtstart(line: string) { - const options: Partial = {} + const options: Partial = {}; const dtstartWithZone = /DTSTART(?:;TZID=([^:=]+?))?(?::|=)([^;\s]+)/i.exec( - line - ) + line, + ); if (!dtstartWithZone) { - return options + return options; } - const [, tzid, dtstart] = dtstartWithZone + const [, tzid, dtstart = ''] = dtstartWithZone; if (tzid) { - options.tzid = tzid + options.tzid = tzid; } - options.dtstart = untilStringToDate(dtstart) - return options + options.dtstart = untilStringToDate(dtstart); + return options; } function parseLine(rfcString: string) { - rfcString = rfcString.replace(/^\s+|\s+$/, '') - if (!rfcString.length) return null + rfcString = rfcString.replace(/^\s+|\s+$/, ''); + if (!rfcString.length) return null; - const header = /^([A-Z]+?)[:;]/.exec(rfcString.toUpperCase()) + const header = /^([A-Z]+?)[:;]/.exec(rfcString.toUpperCase()); if (!header) { - return parseRrule(rfcString) + return parseRrule(rfcString); } - const [, key] = header + const key = header[1]!; switch (key.toUpperCase()) { case 'RRULE': case 'EXRULE': - return parseRrule(rfcString) + return parseRrule(rfcString); case 'DTSTART': - return parseDtstart(rfcString) + return parseDtstart(rfcString); default: - throw new Error(`Unsupported RFC prop ${key} in ${rfcString}`) + throw new Error(`Unsupported RFC prop ${key} in ${rfcString}`); } } function parseRrule(line: string) { - const strippedLine = line.replace(/^RRULE:/i, '') - const options = parseDtstart(strippedLine) + const strippedLine = line.replace(/^RRULE:/i, ''); + const options = parseDtstart(strippedLine); - const attrs = line.replace(/^(?:RRULE|EXRULE):/i, '').split(';') + const attrs = line.replace(/^(?:RRULE|EXRULE):/i, '').split(';'); attrs.forEach((attr) => { - const [key, value] = attr.split('=') + const [key = '', value = ''] = attr.split('='); switch (key.toUpperCase()) { case 'FREQ': - options.freq = Frequency[value.toUpperCase() as keyof typeof Frequency] - break + options.freq = Frequency[value.toUpperCase() as keyof typeof Frequency]; + break; case 'WKST': - options.wkst = Days[value.toUpperCase() as keyof typeof Days] - break + options.wkst = Days[value.toUpperCase() as keyof typeof Days]; + break; case 'COUNT': case 'INTERVAL': case 'BYSETPOS': @@ -76,72 +76,73 @@ function parseRrule(line: string) { case 'BYWEEKNO': case 'BYHOUR': case 'BYMINUTE': - case 'BYSECOND': - const num = parseNumber(value) - const optionKey = key.toLowerCase() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - options[optionKey] = num - break + case 'BYSECOND': { + const num = parseNumber(value); + const optionKey = key.toLowerCase(); + // @ts-expect-error dynamic key assignment + options[optionKey] = num; + break; + } case 'BYWEEKDAY': case 'BYDAY': - options.byweekday = parseWeekday(value) - break + options.byweekday = parseWeekday(value); + break; case 'DTSTART': - case 'TZID': + case 'TZID': { // for backwards compatibility - const dtstart = parseDtstart(line) - options.tzid = dtstart.tzid - options.dtstart = dtstart.dtstart - break + const dtstart = parseDtstart(line); + options.tzid = dtstart.tzid; + options.dtstart = dtstart.dtstart; + break; + } case 'UNTIL': - options.until = untilStringToDate(value) - break + options.until = untilStringToDate(value); + break; case 'BYEASTER': - options.byeaster = Number(value) - break + options.byeaster = Number(value); + break; default: - throw new Error("Unknown RRULE property '" + key + "'") + throw new Error(`Unknown RRULE property '${key}'`); } - }) + }); - return options + return options; } function parseNumber(value: string) { if (value.indexOf(',') !== -1) { - const values = value.split(',') - return values.map(parseIndividualNumber) + const values = value.split(','); + return values.map(parseIndividualNumber); } - return parseIndividualNumber(value) + return parseIndividualNumber(value); } function parseIndividualNumber(value: string) { if (/^[+-]?\d+$/.test(value)) { - return Number(value) + return Number(value); } - return value + return value; } function parseWeekday(value: string) { - const days = value.split(',') + const days = value.split(','); return days.map((day) => { if (day.length === 2) { // MO, TU, ... - return Days[day as keyof typeof Days] // wday instanceof Weekday + return Days[day as keyof typeof Days]; // wday instanceof Weekday } // -1MO, +3FR, 1SO, 13TU ... - const parts = day.match(/^([+-]?\d{1,2})([A-Z]{2})$/) + const parts = day.match(/^([+-]?\d{1,2})([A-Z]{2})$/); if (!parts || parts.length < 3) { - throw new SyntaxError(`Invalid weekday string: ${day}`) + throw new SyntaxError(`Invalid weekday string: ${day}`); } - const n = Number(parts[1]) - const wdaypart = parts[2] as keyof typeof Days - const wday = Days[wdaypart].weekday - return new Weekday(wday, n) - }) + const n = Number(parts[1]); + const wdaypart = parts[2] as keyof typeof Days; + const wday = Days[wdaypart].weekday; + return new Weekday(wday, n); + }); } diff --git a/src/rrule.ts b/src/rrule.ts index cab2d1dd8..30f8e500a 100644 --- a/src/rrule.ts +++ b/src/rrule.ts @@ -1,24 +1,20 @@ -import { isValidDate } from './dateutil' - -import IterResult, { IterArgs } from './iterresult' -import CallbackIterResult from './callbackiterresult' -import { Language } from './nlp/i18n' -import { fromText, parseText, toText, isFullyConvertible } from './nlp/index' -import { DateFormatter, GetText } from './nlp/totext' +import { iter } from './iter/index'; +import type IterResult from './iterresult'; +import type { Language } from './nlp/i18n'; +import { fromText, isFullyConvertible, parseText, toText } from './nlp/index'; +import type { DateFormatter, GetText } from './nlp/totext'; +import { optionsToString } from './optionstostring'; +import { initializeOptions, parseOptions } from './parseoptions'; +import { parseString } from './parsestring'; +import { RRuleBase } from './rrulebase'; import { - ParsedOptions, - Options, Frequency, - QueryMethods, - QueryMethodTypes, - IterResultType, -} from './types' -import { parseOptions, initializeOptions } from './parseoptions' -import { parseString } from './parsestring' -import { optionsToString } from './optionstostring' -import { Cache, CacheKeys } from './cache' -import { Weekday } from './weekday' -import { iter } from './iter/index' + type IterResultType, + type Options, + type ParsedOptions, + type QueryMethodTypes, +} from './types'; +import { Weekday } from './weekday'; // ============================================================================= // RRule @@ -32,7 +28,7 @@ export const Days = { FR: new Weekday(4), SA: new Weekday(5), SU: new Weekday(6), -} +}; export const DEFAULT_OPTIONS: Options = { freq: Frequency.YEARLY, @@ -54,9 +50,9 @@ export const DEFAULT_OPTIONS: Options = { byminute: null, bysecond: null, byeaster: null, -} +}; -export const defaultKeys = Object.keys(DEFAULT_OPTIONS) as (keyof Options)[] +export const defaultKeys = Object.keys(DEFAULT_OPTIONS) as (keyof Options)[]; /** * @@ -64,10 +60,9 @@ export const defaultKeys = Object.keys(DEFAULT_OPTIONS) as (keyof Options)[] * - The only required option is `freq`, one of RRule.YEARLY, RRule.MONTHLY, ... * @constructor */ -export class RRule implements QueryMethods { - public _cache: Cache | null - public origOptions: Partial - public options: ParsedOptions +export class RRule extends RRuleBase { + public origOptions: Partial; + public options: ParsedOptions; // RRule class 'constants' @@ -79,170 +74,53 @@ export class RRule implements QueryMethods { 'HOURLY', 'MINUTELY', 'SECONDLY', - ] - - static readonly YEARLY = Frequency.YEARLY - static readonly MONTHLY = Frequency.MONTHLY - static readonly WEEKLY = Frequency.WEEKLY - static readonly DAILY = Frequency.DAILY - static readonly HOURLY = Frequency.HOURLY - static readonly MINUTELY = Frequency.MINUTELY - static readonly SECONDLY = Frequency.SECONDLY - - static readonly MO = Days.MO - static readonly TU = Days.TU - static readonly WE = Days.WE - static readonly TH = Days.TH - static readonly FR = Days.FR - static readonly SA = Days.SA - static readonly SU = Days.SU + ]; + + static readonly YEARLY = Frequency.YEARLY; + static readonly MONTHLY = Frequency.MONTHLY; + static readonly WEEKLY = Frequency.WEEKLY; + static readonly DAILY = Frequency.DAILY; + static readonly HOURLY = Frequency.HOURLY; + static readonly MINUTELY = Frequency.MINUTELY; + static readonly SECONDLY = Frequency.SECONDLY; + + static readonly MO = Days.MO; + static readonly TU = Days.TU; + static readonly WE = Days.WE; + static readonly TH = Days.TH; + static readonly FR = Days.FR; + static readonly SA = Days.SA; + static readonly SU = Days.SU; constructor(options: Partial = {}, noCache = false) { - // RFC string - this._cache = noCache ? null : new Cache() + super(noCache); // used by toString() - this.origOptions = initializeOptions(options) - const { parsedOptions } = parseOptions(options) - this.options = parsedOptions + this.origOptions = initializeOptions(options); + const { parsedOptions } = parseOptions(options); + this.options = parsedOptions; } static parseText(text: string, language?: Language) { - return parseText(text, language) + return parseText(text, language); } static fromText(text: string, language?: Language) { - return fromText(text, language) + return fromText(text, language); } - static parseString = parseString + static parseString = parseString; static fromString(str: string) { - return new RRule(RRule.parseString(str) || undefined) + return new RRule(RRule.parseString(str) || undefined); } - static optionsToString = optionsToString + static optionsToString = optionsToString; protected _iter( - iterResult: IterResult + iterResult: IterResult, ): IterResultType { - return iter(iterResult, this.options) - } - - private _cacheGet(what: CacheKeys | 'all', args?: Partial) { - if (!this._cache) return false - return this._cache._cacheGet(what, args) - } - - public _cacheAdd( - what: CacheKeys | 'all', - value: Date[] | Date | null, - args?: Partial - ) { - if (!this._cache) return - return this._cache._cacheAdd(what, value, args) - } - - /** - * @param {Function} iterator - optional function that will be called - * on each date that is added. It can return false - * to stop the iteration. - * @return Array containing all recurrences. - */ - all(iterator?: (d: Date, len: number) => boolean): Date[] { - if (iterator) { - return this._iter(new CallbackIterResult('all', {}, iterator)) - } - - let result = this._cacheGet('all') as Date[] | false - if (result === false) { - result = this._iter(new IterResult('all', {})) - this._cacheAdd('all', result) - } - return result - } - - /** - * Returns all the occurrences of the rrule between after and before. - * The inc keyword defines what happens if after and/or before are - * themselves occurrences. With inc == True, they will be included in the - * list, if they are found in the recurrence set. - * - * @return Array - */ - between( - after: Date, - before: Date, - inc = false, - iterator?: (d: Date, len: number) => boolean - ): Date[] { - if (!isValidDate(after) || !isValidDate(before)) { - throw new Error('Invalid date passed in to RRule.between') - } - const args = { - before, - after, - inc, - } - - if (iterator) { - return this._iter(new CallbackIterResult('between', args, iterator)) - } - - let result = this._cacheGet('between', args) - if (result === false) { - result = this._iter(new IterResult('between', args)) - this._cacheAdd('between', result, args) - } - return result as Date[] - } - - /** - * Returns the last recurrence before the given datetime instance. - * The inc keyword defines what happens if dt is an occurrence. - * With inc == True, if dt itself is an occurrence, it will be returned. - * - * @return Date or null - */ - before(dt: Date, inc = false): Date | null { - if (!isValidDate(dt)) { - throw new Error('Invalid date passed in to RRule.before') - } - const args = { dt: dt, inc: inc } - let result = this._cacheGet('before', args) - if (result === false) { - result = this._iter(new IterResult('before', args)) - this._cacheAdd('before', result, args) - } - return result as Date | null - } - - /** - * Returns the first recurrence after the given datetime instance. - * The inc keyword defines what happens if dt is an occurrence. - * With inc == True, if dt itself is an occurrence, it will be returned. - * - * @return Date or null - */ - after(dt: Date, inc = false): Date | null { - if (!isValidDate(dt)) { - throw new Error('Invalid date passed in to RRule.after') - } - const args = { dt: dt, inc: inc } - let result = this._cacheGet('after', args) - if (result === false) { - result = this._iter(new IterResult('after', args)) - this._cacheAdd('after', result, args) - } - return result as Date | null - } - - /** - * Returns the number of recurrences in this set. It will have go trough - * the whole recurrence, if this hasn't been done before. - */ - count(): number { - return this.all().length + return iter(iterResult, this.options); } /** @@ -252,7 +130,7 @@ export class RRule implements QueryMethods { * @return String */ toString() { - return optionsToString(this.origOptions) + return optionsToString(this.origOptions); } /** @@ -262,13 +140,13 @@ export class RRule implements QueryMethods { toText( gettext?: GetText, language?: Language, - dateFormatter?: DateFormatter + dateFormatter?: DateFormatter, ) { - return toText(this, gettext, language, dateFormatter) + return toText(this, gettext, language, dateFormatter); } isFullyConvertibleToText() { - return isFullyConvertible(this) + return isFullyConvertible(this); } /** @@ -276,6 +154,6 @@ export class RRule implements QueryMethods { * as this one (cache is not cloned) */ clone(): RRule { - return new RRule(this.origOptions) + return new RRule(this.origOptions); } } diff --git a/src/rrulebase.ts b/src/rrulebase.ts new file mode 100644 index 000000000..9f9c09777 --- /dev/null +++ b/src/rrulebase.ts @@ -0,0 +1,136 @@ +import { Cache, type CacheKeys } from './cache'; +import CallbackIterResult from './callbackiterresult'; +import { isValidDate } from './dateutil'; +import IterResult, { type IterArgs } from './iterresult'; +import type { IterResultType, QueryMethods, QueryMethodTypes } from './types'; + +export abstract class RRuleBase implements QueryMethods { + public _cache: Cache | null; + + constructor(noCache = false) { + this._cache = noCache ? null : new Cache(); + } + + protected abstract _iter( + iterResult: IterResult, + ): IterResultType; + + private _cacheGet(what: CacheKeys | 'all', args?: Partial) { + if (!this._cache) return false; + return this._cache._cacheGet(what, args); + } + + public _cacheAdd( + what: CacheKeys | 'all', + value: Date[] | Date | null, + args?: Partial, + ) { + if (!this._cache) return; + return this._cache._cacheAdd(what, value, args); + } + + /** + * @param {Function} iterator - optional function that will be called + * on each date that is added. It can return false + * to stop the iteration. + * @return Array containing all recurrences. + */ + all(iterator?: (d: Date, len: number) => boolean): Date[] { + if (iterator) { + return this._iter(new CallbackIterResult('all', {}, iterator)); + } + + let result = this._cacheGet('all') as Date[] | false; + if (result === false) { + result = this._iter(new IterResult('all', {})); + this._cacheAdd('all', result); + } + return result; + } + + /** + * Returns all the occurrences of the rrule between after and before. + * The inc keyword defines what happens if after and/or before are + * themselves occurrences. With inc == True, they will be included in the + * list, if they are found in the recurrence set. + * + * @return Array + */ + between( + after: Date, + before: Date, + inc = false, + iterator?: (d: Date, len: number) => boolean, + ): Date[] { + if (!isValidDate(after) || !isValidDate(before)) { + throw new Error('Invalid date passed in to RRule.between'); + } + const args = { + before, + after, + inc, + }; + + if (iterator) { + return this._iter(new CallbackIterResult('between', args, iterator)); + } + + let result = this._cacheGet('between', args); + if (result === false) { + result = this._iter(new IterResult('between', args)); + this._cacheAdd('between', result, args); + } + return result as Date[]; + } + + /** + * Returns the last recurrence before the given datetime instance. + * The inc keyword defines what happens if dt is an occurrence. + * With inc == True, if dt itself is an occurrence, it will be returned. + * + * @return Date or null + */ + before(dt: Date, inc = false): Date | null { + if (!isValidDate(dt)) { + throw new Error('Invalid date passed in to RRule.before'); + } + const args = { dt: dt, inc: inc }; + let result = this._cacheGet('before', args); + if (result === false) { + result = this._iter(new IterResult('before', args)); + this._cacheAdd('before', result, args); + } + return result as Date | null; + } + + /** + * Returns the first recurrence after the given datetime instance. + * The inc keyword defines what happens if dt is an occurrence. + * With inc == True, if dt itself is an occurrence, it will be returned. + * + * @return Date or null + */ + after(dt: Date, inc = false): Date | null { + if (!isValidDate(dt)) { + throw new Error('Invalid date passed in to RRule.after'); + } + const args = { dt: dt, inc: inc }; + let result = this._cacheGet('after', args); + if (result === false) { + result = this._iter(new IterResult('after', args)); + this._cacheAdd('after', result, args); + } + return result as Date | null; + } + + /** + * Returns the number of recurrences in this set. It will have go trough + * the whole recurrence, if this hasn't been done before. + */ + count(): number { + return this.all().length; + } + + abstract clone(): RRuleBase; + abstract toString(): string; +} diff --git a/src/rruleset.ts b/src/rruleset.ts index ebf9d01d4..1f473571e 100644 --- a/src/rruleset.ts +++ b/src/rruleset.ts @@ -1,60 +1,63 @@ -import { RRule } from './rrule' -import { sort, timeToUntilString } from './dateutil' -import { includes } from './helpers' -import IterResult from './iterresult' -import { iterSet } from './iterset' -import { QueryMethodTypes, IterResultType } from './types' -import { rrulestr } from './rrulestr' -import { optionsToString } from './optionstostring' - -function createGetterSetter(fieldName: string) { - return (field?: T) => { - if (field !== undefined) { - this[`_${fieldName}`] = field - } - - if (this[`_${fieldName}`] !== undefined) { - return this[`_${fieldName}`] - } - - for (let i = 0; i < this._rrule.length; i++) { - const field: T = this._rrule[i].origOptions[fieldName] - if (field) { - return field - } - } - } -} - -export class RRuleSet extends RRule { - public readonly _rrule: RRule[] - public readonly _rdate: Date[] - public readonly _exrule: RRule[] - public readonly _exdate: Date[] - - private _dtstart?: Date | null | undefined - private _tzid?: string +import { sort, timeToUntilString } from './dateutil'; +import type IterResult from './iterresult'; +import { iterSet } from './iterset'; +import { optionsToString } from './optionstostring'; +import { RRule } from './rrule'; +import { RRuleBase } from './rrulebase'; +import type { IterResultType, QueryMethodTypes } from './types'; + +export class RRuleSet extends RRuleBase { + public readonly _rrule: RRule[]; + public readonly _rdate: Date[]; + public readonly _exrule: RRule[]; + public readonly _exdate: Date[]; + + private _dtstart?: Date | null; + private _tzid?: string; /** * * @param {Boolean?} noCache - * The same stratagy as RRule on cache, default to false + * The same strategy as RRule on cache, default to false * @constructor */ constructor(noCache = false) { - super({}, noCache) + super(noCache); - this._rrule = [] - this._rdate = [] - this._exrule = [] - this._exdate = [] + this._rrule = []; + this._rdate = []; + this._exrule = []; + this._exdate = []; } - dtstart = createGetterSetter.apply(this, ['dtstart']) - tzid = createGetterSetter.apply(this, ['tzid']) + dtstart(value?: Date | null): Date | null | undefined { + if (value !== undefined) { + this._dtstart = value; + } + if (this._dtstart !== undefined) { + return this._dtstart; + } + for (const rule of this._rrule) { + if (rule.origOptions.dtstart) return rule.origOptions.dtstart; + } + return undefined; + } + + tzid(value?: string): string | undefined { + if (value !== undefined) { + this._tzid = value; + } + if (this._tzid !== undefined) { + return this._tzid; + } + for (const rule of this._rrule) { + if (rule.origOptions.tzid) return rule.origOptions.tzid; + } + return undefined; + } _iter( - iterResult: IterResult + iterResult: IterResult, ): IterResultType { return iterSet( iterResult, @@ -62,44 +65,44 @@ export class RRuleSet extends RRule { this._exrule, this._rdate, this._exdate, - this.tzid() - ) + this.tzid(), + ); } /** * Adds an RRule to the set * - * @param {RRule} + * @param rrule */ rrule(rrule: RRule) { - _addRule(rrule, this._rrule) + _addRule(rrule, this._rrule); } /** * Adds an EXRULE to the set * - * @param {RRule} + * @param rrule */ exrule(rrule: RRule) { - _addRule(rrule, this._exrule) + _addRule(rrule, this._exrule); } /** * Adds an RDate to the set * - * @param {Date} + * @param date */ rdate(date: Date) { - _addDate(date, this._rdate) + _addDate(date, this._rdate); } /** * Adds an EXDATE to the set * - * @param {Date} + * @param date */ exdate(date: Date) { - _addDate(date, this._exdate) + _addDate(date, this._exdate); } /** @@ -107,8 +110,8 @@ export class RRuleSet extends RRule { * * @return List of rrules */ - rrules() { - return this._rrule.map((e) => rrulestr(e.toString())) + rrules(): RRule[] { + return this._rrule.map((e) => e.clone()); } /** @@ -116,8 +119,8 @@ export class RRuleSet extends RRule { * * @return List of exrules */ - exrules() { - return this._exrule.map((e) => rrulestr(e.toString())) + exrules(): RRule[] { + return this._exrule.map((e) => e.clone()); } /** @@ -126,7 +129,7 @@ export class RRuleSet extends RRule { * @return List of rdates */ rdates() { - return this._rdate.map((e) => new Date(e.getTime())) + return this._rdate.map((e) => new Date(e.getTime())); } /** @@ -135,39 +138,39 @@ export class RRuleSet extends RRule { * @return List of exdates */ exdates() { - return this._exdate.map((e) => new Date(e.getTime())) + return this._exdate.map((e) => new Date(e.getTime())); } valueOf() { - let result: string[] = [] + let result: string[] = []; if (!this._rrule.length && this._dtstart) { - result = result.concat(optionsToString({ dtstart: this._dtstart })) + result = result.concat(optionsToString({ dtstart: this._dtstart })); } - this._rrule.forEach(function (rrule) { - result = result.concat(rrule.toString().split('\n')) - }) + this._rrule.forEach((rrule) => { + result = result.concat(rrule.toString().split('\n')); + }); - this._exrule.forEach(function (exrule) { + this._exrule.forEach((exrule) => { result = result.concat( exrule .toString() .split('\n') .map((line) => line.replace(/^RRULE:/, 'EXRULE:')) - .filter((line) => !/^DTSTART/.test(line)) - ) - }) + .filter((line) => !/^DTSTART/.test(line)), + ); + }); if (this._rdate.length) { - result.push(rdatesToString('RDATE', this._rdate, this.tzid())) + result.push(rdatesToString('RDATE', this._rdate, this.tzid())); } if (this._exdate.length) { - result.push(rdatesToString('EXDATE', this._exdate, this.tzid())) + result.push(rdatesToString('EXDATE', this._exdate, this.tzid())); } - return result + return result; } /** @@ -177,55 +180,58 @@ export class RRuleSet extends RRule { * RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH */ toString() { - return this.valueOf().join('\n') + return this.valueOf().join('\n'); } /** * Create a new RRuleSet Object completely base on current instance */ clone(): RRuleSet { - const rrs = new RRuleSet(!!this._cache) + const rrs = new RRuleSet(!this._cache); - this._rrule.forEach((rule) => rrs.rrule(rule.clone())) - this._exrule.forEach((rule) => rrs.exrule(rule.clone())) - this._rdate.forEach((date) => rrs.rdate(new Date(date.getTime()))) - this._exdate.forEach((date) => rrs.exdate(new Date(date.getTime()))) + for (const rule of this._rrule) rrs.rrule(rule.clone()); + for (const rule of this._exrule) rrs.exrule(rule.clone()); + for (const date of this._rdate) rrs.rdate(new Date(date.getTime())); + for (const date of this._exdate) rrs.exdate(new Date(date.getTime())); - return rrs + return rrs; } } function _addRule(rrule: RRule, collection: RRule[]) { if (!(rrule instanceof RRule)) { - throw new TypeError(String(rrule) + ' is not RRule instance') + throw new TypeError(`${String(rrule)} is not an instance of RRule`); } - if (!includes(collection.map(String), String(rrule))) { - collection.push(rrule) + const str = String(rrule); + if (!collection.some((r) => String(r) === str)) { + collection.push(rrule); } } function _addDate(date: Date, collection: Date[]) { if (!(date instanceof Date)) { - throw new TypeError(String(date) + ' is not Date instance') + throw new TypeError(`${String(date)} is not an instance of Date`); } - if (!includes(collection.map(Number), Number(date))) { - collection.push(date) - sort(collection) + + const time = date.getTime(); + if (!collection.some((d) => d.getTime() === time)) { + collection.push(date); + sort(collection); } } function rdatesToString( param: string, rdates: Date[], - tzid: string | undefined + tzid: string | undefined, ) { - const isUTC = !tzid || tzid.toUpperCase() === 'UTC' - const header = isUTC ? `${param}:` : `${param};TZID=${tzid}:` + const isUTC = !tzid || tzid.toUpperCase() === 'UTC'; + const header = isUTC ? `${param}:` : `${param};TZID=${tzid}:`; const dateString = rdates .map((rdate) => timeToUntilString(rdate.valueOf(), isUTC)) - .join(',') + .join(','); - return `${header}${dateString}` + return `${header}${dateString}`; } diff --git a/src/rrulestr.ts b/src/rrulestr.ts index 61f3707d7..123042220 100644 --- a/src/rrulestr.ts +++ b/src/rrulestr.ts @@ -1,17 +1,17 @@ -import { RRule } from './rrule' -import { RRuleSet } from './rruleset' -import { untilStringToDate } from './dateutil' -import { includes, split } from './helpers' -import { Options } from './types' -import { parseString, parseDtstart } from './parsestring' +import { untilStringToDate } from './dateutil'; +import { split } from './helpers'; +import { parseDtstart, parseString } from './parsestring'; +import { RRule } from './rrule'; +import { RRuleSet } from './rruleset'; +import type { Options } from './types'; export interface RRuleStrOptions { - dtstart: Date | null - cache: boolean - unfold: boolean - forceset: boolean - compatible: boolean - tzid: string | null + dtstart: Date | null; + cache: boolean; + unfold: boolean; + forceset: boolean; + compatible: boolean; + tzid: string | null; } /** @@ -25,60 +25,61 @@ const DEFAULT_OPTIONS: RRuleStrOptions = { forceset: false, compatible: false, tzid: null, -} +}; export function parseInput(s: string, options: Partial) { - const rrulevals: Partial[] = [] - let rdatevals: Date[] = [] - const exrulevals: Partial[] = [] - let exdatevals: Date[] = [] + const rrulevals: Partial[] = []; + let rdatevals: Date[] = []; + const exrulevals: Partial[] = []; + let exdatevals: Date[] = []; - const parsedDtstart = parseDtstart(s) - const { dtstart } = parsedDtstart - let { tzid } = parsedDtstart + const parsedDtstart = parseDtstart(s); + const { dtstart } = parsedDtstart; + let { tzid } = parsedDtstart; - const lines = splitIntoLines(s, options.unfold) + const lines = splitIntoLines(s, options.unfold); lines.forEach((line) => { - if (!line) return - const { name, parms, value } = breakDownLine(line) + if (!line) return; + const { name, parms, value } = breakDownLine(line); switch (name.toUpperCase()) { case 'RRULE': if (parms.length) { - throw new Error(`unsupported RRULE parm: ${parms.join(',')}`) + throw new Error(`unsupported RRULE parm: ${parms.join(',')}`); } - rrulevals.push(parseString(line)) - break + rrulevals.push(parseString(line)); + break; - case 'RDATE': - const [, rdateTzid] = /RDATE(?:;TZID=([^:=]+))?/i.exec(line) ?? [] + case 'RDATE': { + const [, rdateTzid] = /RDATE(?:;TZID=([^:=]+))?/i.exec(line) ?? []; if (rdateTzid && !tzid) { - tzid = rdateTzid + tzid = rdateTzid; } - rdatevals = rdatevals.concat(parseRDate(value, parms)) - break + rdatevals = rdatevals.concat(parseRDate(value, parms)); + break; + } case 'EXRULE': if (parms.length) { - throw new Error(`unsupported EXRULE parm: ${parms.join(',')}`) + throw new Error(`unsupported EXRULE parm: ${parms.join(',')}`); } - exrulevals.push(parseString(value)) - break + exrulevals.push(parseString(value)); + break; case 'EXDATE': - exdatevals = exdatevals.concat(parseRDate(value, parms)) - break + exdatevals = exdatevals.concat(parseRDate(value, parms)); + break; case 'DTSTART': - break + break; default: - throw new Error('unsupported property: ' + name) + throw new Error(`unsupported property: ${name}`); } - }) + }); return { dtstart, @@ -87,18 +88,18 @@ export function parseInput(s: string, options: Partial) { rdatevals, exrulevals, exdatevals, - } + }; } function buildRule(s: string, options: Partial) { const { rrulevals, rdatevals, exrulevals, exdatevals, dtstart, tzid } = - parseInput(s, options) + parseInput(s, options); - const noCache = options.cache === false + const noCache = options.cache === false; if (options.compatible) { - options.forceset = true - options.unfold = true + options.forceset = true; + options.unfold = true; } if ( @@ -108,144 +109,145 @@ function buildRule(s: string, options: Partial) { exrulevals.length || exdatevals.length ) { - const rset = new RRuleSet(noCache) + const rset = new RRuleSet(noCache); - rset.dtstart(dtstart) - rset.tzid(tzid || undefined) + rset.dtstart(dtstart); + rset.tzid(tzid || undefined); rrulevals.forEach((val) => { - rset.rrule(new RRule(groomRruleOptions(val, dtstart, tzid), noCache)) - }) + rset.rrule(new RRule(groomRruleOptions(val, dtstart, tzid), noCache)); + }); rdatevals.forEach((date) => { - rset.rdate(date) - }) + rset.rdate(date); + }); exrulevals.forEach((val) => { - rset.exrule(new RRule(groomRruleOptions(val, dtstart, tzid), noCache)) - }) + rset.exrule(new RRule(groomRruleOptions(val, dtstart, tzid), noCache)); + }); exdatevals.forEach((date) => { - rset.exdate(date) - }) + rset.exdate(date); + }); - if (options.compatible && options.dtstart) rset.rdate(dtstart) - return rset + if (options.compatible && options.dtstart) rset.rdate(dtstart!); + return rset; } - const val = rrulevals[0] || {} + const val = rrulevals[0] || {}; return new RRule( groomRruleOptions( val, val.dtstart || options.dtstart || dtstart, - val.tzid || options.tzid || tzid + val.tzid || options.tzid || tzid, ), - noCache - ) + noCache, + ); } export function rrulestr( s: string, - options: Partial = {} + options: Partial = {}, ): RRule | RRuleSet { - return buildRule(s, initializeOptions(options)) + return buildRule(s, initializeOptions(options)); } function groomRruleOptions( val: Partial, dtstart?: Date | null, - tzid?: string | null + tzid?: string | null, ) { return { ...val, dtstart, tzid, - } + }; } function initializeOptions(options: Partial) { - const invalid: string[] = [] - const keys = Object.keys(options) as (keyof typeof options)[] + const invalid: string[] = []; + const keys = Object.keys(options) as (keyof typeof options)[]; const defaultKeys = Object.keys( - DEFAULT_OPTIONS - ) as (keyof typeof DEFAULT_OPTIONS)[] + DEFAULT_OPTIONS, + ) as (keyof typeof DEFAULT_OPTIONS)[]; - keys.forEach(function (key) { - if (!includes(defaultKeys, key)) invalid.push(key) - }) + keys.forEach((key) => { + if (!defaultKeys.includes(key)) invalid.push(key); + }); if (invalid.length) { - throw new Error('Invalid options: ' + invalid.join(', ')) + throw new Error(`Invalid options: ${invalid.join(', ')}`); } - return { ...DEFAULT_OPTIONS, ...options } + return { ...DEFAULT_OPTIONS, ...options }; } -function extractName(line: string) { +function extractName(line: string): { name: string; value: string } { if (line.indexOf(':') === -1) { return { name: 'RRULE', value: line, - } + }; } - const [name, value] = split(line, ':', 1) + const [name = '', value = ''] = split(line, ':', 1); return { name, value, - } + }; } function breakDownLine(line: string) { - const { name, value } = extractName(line) - const parms = name.split(';') - if (!parms) throw new Error('empty property name') + const { name, value } = extractName(line); + const parms = name.split(';'); + if (!parms) throw new Error('empty property name'); return { - name: parms[0].toUpperCase(), + name: parms[0]!.toUpperCase(), parms: parms.slice(1), value, - } + }; } function splitIntoLines(s: string, unfold = false) { - s = s && s.trim() - if (!s) throw new Error('Invalid empty string') + s = s?.trim(); + if (!s) throw new Error('Invalid empty string'); // More info about 'unfold' option // Go head to http://www.ietf.org/rfc/rfc2445.txt if (!unfold) { - return s.split(/\s/) + return s.split(/\s/); } - const lines = s.split('\n') - let i = 0 + const lines = s.split('\n'); + let i = 0; while (i < lines.length) { // TODO - const line = (lines[i] = lines[i].replace(/\s+$/g, '')) + lines[i] = lines[i]!.replace(/\s+$/g, ''); + const line = lines[i]; if (!line) { - lines.splice(i, 1) + lines.splice(i, 1); } else if (i > 0 && line[0] === ' ') { - lines[i - 1] += line.slice(1) - lines.splice(i, 1) + lines[i - 1] += line.slice(1); + lines.splice(i, 1); } else { - i += 1 + i += 1; } } - return lines + return lines; } function validateDateParm(parms: string[]) { parms.forEach((parm) => { if (!/(VALUE=DATE(-TIME)?)|(TZID=)/.test(parm)) { - throw new Error('unsupported RDATE/EXDATE parm: ' + parm) + throw new Error(`unsupported RDATE/EXDATE parm: ${parm}`); } - }) + }); } function parseRDate(rdateval: string, parms: string[]) { - validateDateParm(parms) + validateDateParm(parms); - return rdateval.split(',').map((datestr) => untilStringToDate(datestr)) + return rdateval.split(',').map((datestr) => untilStringToDate(datestr)); } diff --git a/src/types.ts b/src/types.ts index 817851421..abfa9d62f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,18 +1,18 @@ -import { Weekday, WeekdayStr } from './weekday' +import type { Weekday, WeekdayStr } from './weekday'; export interface QueryMethods { - all(): Date[] - between(after: Date, before: Date, inc: boolean): Date[] - before(date: Date, inc: boolean): Date | null - after(date: Date, inc: boolean): Date | null + all(): Date[]; + between(after: Date, before: Date, inc: boolean): Date[]; + before(date: Date, inc: boolean): Date | null; + after(date: Date, inc: boolean): Date | null; } -export type QueryMethodTypes = keyof QueryMethods +export type QueryMethodTypes = keyof QueryMethods; export type IterResultType = M extends | 'all' | 'between' ? Date[] - : Date | null + : Date | null; export enum Frequency { YEARLY = 0, @@ -25,50 +25,50 @@ export enum Frequency { } export function freqIsDailyOrGreater( - freq: Frequency + freq: Frequency, ): freq is | Frequency.YEARLY | Frequency.MONTHLY | Frequency.WEEKLY | Frequency.DAILY { - return freq < Frequency.HOURLY + return freq < Frequency.HOURLY; } export interface Options { - freq: Frequency - dtstart: Date | null - interval: number - wkst: Weekday | number | null - count: number | null - until: Date | null - tzid: string | null - bysetpos: number | number[] | null - bymonth: number | number[] | null - bymonthday: number | number[] | null - bynmonthday: number[] | null - byyearday: number | number[] | null - byweekno: number | number[] | null - byweekday: ByWeekday | ByWeekday[] | null - bynweekday: number[][] | null - byhour: number | number[] | null - byminute: number | number[] | null - bysecond: number | number[] | null - byeaster: number | null + freq: Frequency; + dtstart: Date | null; + interval: number; + wkst: Weekday | number | null; + count: number | null; + until: Date | null; + tzid: string | null; + bysetpos: number | number[] | null; + bymonth: number | number[] | null; + bymonthday: number | number[] | null; + bynmonthday: number[] | null; + byyearday: number | number[] | null; + byweekno: number | number[] | null; + byweekday: ByWeekday | ByWeekday[] | null; + bynweekday: [number, number][] | null; + byhour: number | number[] | null; + byminute: number | number[] | null; + bysecond: number | number[] | null; + byeaster: number | null; } export interface ParsedOptions extends Options { - dtstart: Date - wkst: number - bysetpos: number[] - bymonth: number[] - bymonthday: number[] - bynmonthday: number[] - byyearday: number[] - byweekno: number[] - byweekday: number[] - byhour: number[] - byminute: number[] - bysecond: number[] + dtstart: Date; + wkst: number; + bysetpos: number[]; + bymonth: number[]; + bymonthday: number[]; + bynmonthday: number[]; + byyearday: number[]; + byweekno: number[]; + byweekday: number[]; + byhour: number[]; + byminute: number[]; + bysecond: number[]; } -export type ByWeekday = WeekdayStr | number | Weekday +export type ByWeekday = WeekdayStr | number | Weekday; diff --git a/src/weekday.ts b/src/weekday.ts index dc4d61c6c..7fc1f0563 100644 --- a/src/weekday.ts +++ b/src/weekday.ts @@ -2,7 +2,7 @@ // Weekday // ============================================================================= -export type WeekdayStr = 'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU' +export type WeekdayStr = 'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU'; export const ALL_WEEKDAYS: WeekdayStr[] = [ 'MO', 'TU', @@ -11,41 +11,41 @@ export const ALL_WEEKDAYS: WeekdayStr[] = [ 'FR', 'SA', 'SU', -] +]; export class Weekday { - public readonly weekday: number - public readonly n?: number + public readonly weekday: number; + public readonly n?: number; constructor(weekday: number, n?: number) { - if (n === 0) throw new Error("Can't create weekday with n == 0") - this.weekday = weekday - this.n = n + if (n === 0) throw new Error("Can't create weekday with n == 0"); + this.weekday = weekday; + this.n = n; } static fromStr(str: WeekdayStr): Weekday { - return new Weekday(ALL_WEEKDAYS.indexOf(str)) + return new Weekday(ALL_WEEKDAYS.indexOf(str)); } // __call__ - Cannot call the object directly, do it through // e.g. RRule.TH.nth(-1) instead, nth(n: number) { - return this.n === n ? this : new Weekday(this.weekday, n) + return this.n === n ? this : new Weekday(this.weekday, n); } // __eq__ equals(other: Weekday) { - return this.weekday === other.weekday && this.n === other.n + return this.weekday === other.weekday && this.n === other.n; } // __repr__ toString() { - let s: string = ALL_WEEKDAYS[this.weekday] - if (this.n) s = (this.n > 0 ? '+' : '') + String(this.n) + s - return s + let s: string = ALL_WEEKDAYS[this.weekday]!; + if (this.n) s = (this.n > 0 ? '+' : '') + String(this.n) + s; + return s; } getJsWeekday() { - return this.weekday === 6 ? 0 : this.weekday + 1 + return this.weekday === 6 ? 0 : this.weekday + 1; } } diff --git a/test/cache.test.ts b/test/cache.test.ts index 5bc6075e9..1f0e6ec03 100644 --- a/test/cache.test.ts +++ b/test/cache.test.ts @@ -1,5 +1,5 @@ -import { Cache } from '../src/cache' -import { IterArgs } from '../src/iterresult' +import { Cache } from '../src/cache'; +import type { IterArgs } from '../src/iterresult'; const dates = [ new Date('2021-01-01T00:00:00.000+00:00'), @@ -9,92 +9,92 @@ const dates = [ new Date('2021-01-05T00:00:00.000+00:00'), new Date('2021-01-06T00:00:00.000+00:00'), new Date('2021-01-07T00:00:00.000+00:00'), -] +]; describe('Cache', () => { it('returns false for an empty cache', () => { - const cache = new Cache() + const cache = new Cache(); const args: Partial = { after: new Date('2021-01-01T00:00:00.000+00:00'), before: new Date('2021-01-08T00:00:00.000+00:00'), inc: true, - } + }; - expect(cache._cacheGet('between', args)).toBe(false) - }) + expect(cache._cacheGet('between', args)).toBe(false); + }); it('returns an empty array for a cached but empty set', () => { - const cache = new Cache() + const cache = new Cache(); const args: Partial = { after: new Date('2021-01-01T00:00:00.000+00:00'), before: new Date('2021-01-08T00:00:00.000+00:00'), inc: true, - } + }; - cache._cacheAdd('between', [], args) + cache._cacheAdd('between', [], args); - expect(cache._cacheGet('between', args)).toEqual([]) - }) + expect(cache._cacheGet('between', args)).toEqual([]); + }); it('returns cached entries if the "what" and the args both match', () => { - const cache = new Cache() + const cache = new Cache(); const args: Partial = { after: new Date('2021-01-01T00:00:00.000+00:00'), before: new Date('2021-01-08T00:00:00.000+00:00'), inc: true, - } + }; - cache._cacheAdd('between', dates, args) + cache._cacheAdd('between', dates, args); - expect(cache._cacheGet('between', args)).toEqual(dates) - }) + expect(cache._cacheGet('between', args)).toEqual(dates); + }); it('does not return cached entries if the "what" matches but the args do not', () => { - const cache = new Cache() + const cache = new Cache(); const args: Partial = { after: new Date('2021-01-01T00:00:00.000+00:00'), before: new Date('2021-01-08T00:00:00.000+00:00'), inc: true, - } + }; - cache._cacheAdd('between', dates, args) + cache._cacheAdd('between', dates, args); expect( cache._cacheGet('between', { ...args, /** 1ms later than the args used for the insert */ after: new Date('2021-01-01T00:00:00.001+00:00'), - }) - ).toBe(false) - }) + }), + ).toBe(false); + }); it('does not return cached entries if args match but the "what" does not', () => { - const cache = new Cache() + const cache = new Cache(); const args: Partial = { after: new Date('2021-01-01T00:00:00.000+00:00'), before: new Date('2021-01-08T00:00:00.000+00:00'), inc: true, - } + }; - cache._cacheAdd('between', dates, args) + cache._cacheAdd('between', dates, args); - expect(cache._cacheGet('after', args)).toBe(false) - }) + expect(cache._cacheGet('after', args)).toBe(false); + }); it('reuses dates cached for the "all" method when querying using another method', () => { - const cache = new Cache() + const cache = new Cache(); const args: Partial = { after: new Date('2021-01-04T00:00:00.000+00:00'), before: new Date('2021-01-06T00:00:00.000+00:00'), inc: true, - } + }; - cache._cacheAdd('all', dates) + cache._cacheAdd('all', dates); expect(cache._cacheGet('between', args)).toEqual([ new Date('2021-01-04T00:00:00.000+00:00'), new Date('2021-01-05T00:00:00.000+00:00'), new Date('2021-01-06T00:00:00.000+00:00'), - ]) - }) -}) + ]); + }); +}); diff --git a/test/dateutil.test.ts b/test/dateutil.test.ts index b7787dd32..25ae72d5c 100644 --- a/test/dateutil.test.ts +++ b/test/dateutil.test.ts @@ -1,8 +1,8 @@ -import { datetime, untilStringToDate } from '../src/dateutil' +import { datetime, untilStringToDate } from '../src/dateutil'; describe('untilStringToDate', () => { it('parses a date string', () => { - const date = untilStringToDate('19970902T090000') - expect(date.getTime()).toBe(datetime(1997, 9, 2, 9, 0, 0).getTime()) - }) -}) + const date = untilStringToDate('19970902T090000'); + expect(date.getTime()).toBe(datetime(1997, 9, 2, 9, 0, 0).getTime()); + }); +}); diff --git a/test/datewithzone.test.ts b/test/datewithzone.test.ts index 2e13774c2..e38609213 100644 --- a/test/datewithzone.test.ts +++ b/test/datewithzone.test.ts @@ -1,56 +1,56 @@ -import { DateWithZone } from '../src/datewithzone' -import { set as setMockDate, reset as resetMockDate } from 'mockdate' -import { datetime, expectedDate } from './lib/utils' +import { reset as resetMockDate, set as setMockDate } from 'mockdate'; +import { DateWithZone } from '../src/datewithzone'; +import { datetime, expectedDate } from './lib/utils'; describe('toString', () => { it('returns the date when no tzid is present', () => { - const dt = new DateWithZone(datetime(2010, 10, 5, 11, 0, 0)) - expect(dt.toString()).toBe(':20101005T110000Z') + const dt = new DateWithZone(datetime(2010, 10, 5, 11, 0, 0)); + expect(dt.toString()).toBe(':20101005T110000Z'); - const dt2 = new DateWithZone(datetime(2010, 10, 5, 11, 0, 0), 'UTC') - expect(dt2.toString()).toBe(':20101005T110000Z') - }) + const dt2 = new DateWithZone(datetime(2010, 10, 5, 11, 0, 0), 'UTC'); + expect(dt2.toString()).toBe(':20101005T110000Z'); + }); it('returns the date with tzid when present', () => { - const dt = new DateWithZone(datetime(2010, 10, 5, 11, 0, 0), 'Asia/Tokyo') - expect(dt.toString()).toBe(';TZID=Asia/Tokyo:20101005T110000') - }) -}) + const dt = new DateWithZone(datetime(2010, 10, 5, 11, 0, 0), 'Asia/Tokyo'); + expect(dt.toString()).toBe(';TZID=Asia/Tokyo:20101005T110000'); + }); +}); it('returns the time of the date', () => { - const d = datetime(2010, 10, 5, 11, 0, 0) - const dt = new DateWithZone(d) - expect(dt.getTime()).toBe(d.getTime()) -}) + const d = datetime(2010, 10, 5, 11, 0, 0); + const dt = new DateWithZone(d); + expect(dt.getTime()).toBe(d.getTime()); +}); it('rejects invalid dates', () => { expect(() => new DateWithZone(new Date(undefined))).toThrow( - 'Invalid date passed to DateWithZone' - ) -}) + 'Invalid date passed to DateWithZone', + ); +}); describe('rezonedDate', () => { it('returns the original date when no zone is given', () => { - const d = datetime(2010, 10, 5, 11, 0, 0) - const dt = new DateWithZone(d) - expect(dt.rezonedDate()).toEqual(d) - }) + const d = datetime(2010, 10, 5, 11, 0, 0); + const dt = new DateWithZone(d); + expect(dt.rezonedDate()).toEqual(d); + }); it('returns the date in the correct zone when given', () => { - const targetZone = 'America/New_York' - const currentLocalDate = new Date(2000, 1, 6, 1, 0, 0) - setMockDate(currentLocalDate) + const targetZone = 'America/New_York'; + const currentLocalDate = new Date(2000, 1, 6, 1, 0, 0); + setMockDate(currentLocalDate); - const d = new Date(Date.parse('2010-10-05T11:00:00')) - const dt = new DateWithZone(d, targetZone) + const d = new Date(Date.parse('2010-10-05T11:00:00')); + const dt = new DateWithZone(d, targetZone); expect(dt.rezonedDate()).toEqual( expectedDate( new Date(Date.parse('2010-10-05T11:00:00')), currentLocalDate, - targetZone - ) - ) + targetZone, + ), + ); - resetMockDate() - }) -}) + resetMockDate(); + }); +}); diff --git a/test/helpers.test.ts b/test/helpers.test.ts index 91f84cae0..14aca7ff3 100644 --- a/test/helpers.test.ts +++ b/test/helpers.test.ts @@ -1,142 +1,120 @@ import { + divmod, empty, - includes, + isArray, + isNumber, + isPresent, pymod, - divmod, - split, - clone, range, repeat, - isPresent, - isArray, -} from '../src/helpers' -import { isNumber } from 'util' + split, +} from '../src/helpers'; describe('isPresent', () => { it('is false if object is null', () => { - expect(isPresent(null)).toBe(false) - }) + expect(isPresent(null)).toBe(false); + }); it('is false if object is undefined', () => { - expect(isPresent(undefined)).toBe(false) - }) + expect(isPresent(undefined)).toBe(false); + }); it('is true if object is non-null and not undefined', () => { - expect(isPresent(0)).toBe(true) - expect(isPresent('')).toBe(true) - expect(isPresent('foo')).toBe(true) - expect(isPresent(123)).toBe(true) - expect(isPresent([])).toBe(true) - }) -}) + expect(isPresent(0)).toBe(true); + expect(isPresent('')).toBe(true); + expect(isPresent('foo')).toBe(true); + expect(isPresent(123)).toBe(true); + expect(isPresent([])).toBe(true); + }); +}); describe('isArray', () => { it('is true if it is an array', () => { - expect(isArray([])).toBe(true) - expect(isArray([1])).toBe(true) - expect(isArray(['foo'])).toBe(true) - }) + expect(isArray([])).toBe(true); + expect(isArray([1])).toBe(true); + expect(isArray(['foo'])).toBe(true); + }); it('is false if it is empty', () => { - expect(isArray('foo')).toBe(false) - expect(isArray(null)).toBe(false) - expect(isArray(0)).toBe(false) - expect(isArray(undefined)).toBe(false) - }) -}) + expect(isArray('foo')).toBe(false); + expect(isArray(null)).toBe(false); + expect(isArray(0)).toBe(false); + expect(isArray(undefined)).toBe(false); + }); +}); describe('isNumber', () => { it('is true if it is a number', () => { - expect(isNumber(0)).toBe(true) - }) + expect(isNumber(0)).toBe(true); + }); it('is false if it is not a number', () => { - expect(isNumber('1')).toBe(false) - expect(isNumber(null)).toBe(false) - }) -}) + expect(isNumber('1')).toBe(false); + expect(isNumber(null)).toBe(false); + }); +}); describe('empty', () => { it('is empty if object is null', () => { - expect(empty(null)).toBe(true) - }) + expect(empty(null)).toBe(true); + }); it('is empty if object is undefined', () => { - expect(empty(undefined)).toBe(true) - }) + expect(empty(undefined)).toBe(true); + }); it('is empty if object is an empty array', () => { - expect(empty([])).toBe(true) - }) + expect(empty([])).toBe(true); + }); it('is not empty if object is a non-empty array', () => { - expect(empty(['foo'])).toBe(false) - expect(empty([0])).toBe(false) - }) -}) - -describe('includes', () => { - it('is true if the object is found', () => { - expect(includes(['foo'], 'foo')).toBe(true) - expect(includes([0], 0)).toBe(true) - }) - - it('is false if the object is not found', () => { - expect(includes(['foo'], 'bar')).toBe(false) - expect(includes([0], 1)).toBe(false) - }) -}) + expect(empty(['foo'])).toBe(false); + expect(empty([0])).toBe(false); + }); +}); describe('pymod', () => { it('returns the wrapped result', () => { - expect(pymod(1, 8)).toBe(1) - expect(pymod(-1, -8)).toBe(-1) - expect(pymod(-1, 8)).toBe(7) - }) -}) + expect(pymod(1, 8)).toBe(1); + expect(pymod(-1, -8)).toBe(-1); + expect(pymod(-1, 8)).toBe(7); + }); +}); describe('divmod', () => { it('returns the divided result', () => { - expect(divmod(1, 8)).toEqual({ div: 0, mod: 1 }) - expect(divmod(-1, -8)).toEqual({ div: 0, mod: -1 }) - expect(divmod(-1, 8)).toEqual({ div: -1, mod: 7 }) - }) -}) + expect(divmod(1, 8)).toEqual({ div: 0, mod: 1 }); + expect(divmod(-1, -8)).toEqual({ div: 0, mod: -1 }); + expect(divmod(-1, 8)).toEqual({ div: -1, mod: 7 }); + }); +}); describe('split', () => { it('splits on the separator', () => { - expect(split('one-two-three', '-', 0)).toEqual(['one', 'two', 'three']) - }) + expect(split('one-two-three', '-', 0)).toEqual(['one', 'two', 'three']); + }); it('only splits the specified number when nonzero', () => { - expect(split('one-two-three', '-', 1)).toEqual(['one', 'two-three']) - }) -}) - -describe('clone', () => { - it('copies an array', () => { - const a = ['a', 'b', 'c'] - expect(clone(a)).not.toBe(a) - expect(clone(a)).toEqual(a) - }) -}) + expect(split('one-two-three', '-', 1)).toEqual(['one', 'two-three']); + }); +}); describe('range', () => { it('generates a range', () => { - expect(range(3, 7)).toEqual([3, 4, 5, 6]) - }) + expect(range(3, 7)).toEqual([3, 4, 5, 6]); + }); it('generates to the first argument if no second argument is given', () => { - expect(range(7)).toEqual([0, 1, 2, 3, 4, 5, 6]) - }) -}) + expect(range(7)).toEqual([0, 1, 2, 3, 4, 5, 6]); + }); +}); describe('repeat', () => { it('repeats a single item', () => { - expect(repeat('foo', 3)).toEqual(['foo', 'foo', 'foo']) - }) + expect(repeat('foo', 3)).toEqual(['foo', 'foo', 'foo']); + }); it('repeats an array', () => { - expect(repeat(['foo'], 3)).toEqual([['foo'], ['foo'], ['foo']]) - }) -}) + expect(repeat(['foo'], 3)).toEqual([['foo'], ['foo'], ['foo']]); + }); +}); diff --git a/test/lib/utils.ts b/test/lib/utils.ts index 6bb2b93fb..0c75f81d7 100644 --- a/test/lib/utils.ts +++ b/test/lib/utils.ts @@ -1,85 +1,89 @@ -export { datetime } from '../../src/dateutil' -import { dateInTimeZone, datetime } from '../../src/dateutil' -import { RRule, RRuleSet } from '../../src' +export { datetime } from '../../src/dateutil'; + +import { RRule, RRuleBase } from '../../src'; +import { dateInTimeZone, datetime } from '../../src/dateutil'; export const TEST_CTX = { ALSO_TESTSTRING_FUNCTIONS: false, ALSO_TESTNLP_FUNCTIONS: false, ALSO_TESTBEFORE_AFTER_BETWEEN: false, ALSO_TESTSUBSECOND_PRECISION: false, -} +}; -const assertDatesEqual = function ( - actual: Date | Date[], - expected: Date | Date[] -) { - if (!(actual instanceof Array)) actual = [actual] - if (!(expected instanceof Array)) expected = [expected] +const assertDatesEqual = ( + actual: Date | Date[] | null, + expected: Date | Date[], +) => { + if (actual === null) actual = []; + if (!Array.isArray(actual)) actual = [actual]; + if (!Array.isArray(expected)) expected = [expected]; if (expected.length > 1) { - expect(actual).toHaveLength(expected.length) + expect(actual).toHaveLength(expected.length); } for (let i = 0; i < expected.length; i++) { - const act = actual[i] - const exp = expected[i] - expect(exp instanceof Date ? exp.toString() : exp).toBe(act.toString()) + const act = actual[i]; + const exp = expected[i]; + expect(exp instanceof Date ? exp.toString() : exp).toBe(act?.toString()); } -} +}; -const extractTime = function (date: Date) { - return date != null ? date.getTime() : void 0 -} +const extractTime = (date: Date) => (date != null ? date.getTime() : void 0); /** * dateutil.parser.parse */ -export const parse = function (str: string) { - const parts = str.match(/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/) - const [, y, m, d, h, i, s] = parts - const year = Number(y) - const month = Number(m[0] === '0' ? m[1] : m) - const day = Number(d[0] === '0' ? d[1] : d) - const hour = Number(h[0] === '0' ? h[1] : h) - const minute = Number(i[0] === '0' ? i[1] : i) - const second = Number(s[0] === '0' ? s[1] : s) - return datetime(year, month, day, hour, minute, second) -} +export const parse = (str: string) => { + const parts = str.match(/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/); + if (!parts) { + throw new Error(`Invalid date string: ${str}`); + } + + return datetime( + Number(parts[1]), + Number(parts[2]), + Number(parts[3]), + Number(parts[4]), + Number(parts[5]), + Number(parts[6]), + ); +}; interface TestRecurring { - (m: string, testObj: unknown, expectedDates: Date | Date[]): void - only: (...args: unknown[]) => void - skip: (...args: unknown[]) => void + (m: string, testObj: unknown, expectedDates: Date | Date[]): void; + only: (...args: unknown[]) => void; + skip: (...args: unknown[]) => void; } interface TestObj { - rrule: RRule - method: 'all' | 'between' | 'before' | 'after' - args: unknown[] + rrule: RRule; + method: 'all' | 'between' | 'before' | 'after'; + args: unknown[]; } -export const testRecurring = function ( +export const testRecurring = (( msg: string, testObj: TestObj | RRule | (() => TestObj), expectedDates: Date | Date[], - itFunc: jest.Func = it -) { - let rule: RRule - let method: 'all' | 'before' | 'between' | 'after' - let args: unknown[] + itFunc: jest.Func = it, +) => { + let rule: RRuleBase; + let method: 'all' | 'before' | 'between' | 'after'; + let args: unknown[]; if (typeof testObj === 'function') { - testObj = testObj() + testObj = testObj(); } - if (testObj instanceof RRule || testObj instanceof RRuleSet) { - rule = testObj - method = 'all' - args = [] + if (testObj instanceof RRuleBase) { + rule = testObj; + method = 'all'; + args = []; } else { - rule = testObj.rrule - method = testObj.method - args = testObj.args ?? [] + rule = testObj.rrule; + method = testObj.method; + args = testObj.args ?? []; } // Use text and string representation of the rrule as the message. @@ -91,130 +95,127 @@ export const testRecurring = function ( ']' + ' [' + rule.toString() + - ']' + ']'; } else { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - msg = msg + ' ' + rule.toString() + msg = `${msg} ${rule.toString()}`; } - itFunc(msg, function () { - let time = Date.now() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - let actualDates = rule[method](...args) - time = Date.now() - time + itFunc(msg, () => { + let time = Date.now(); + // @ts-expect-error - dynamic method dispatch + let actualDates = rule[method](...args); + time = Date.now() - time; - const maxTestDuration = 200 - expect(time).toBeLessThan(maxTestDuration) + const maxTestDuration = 200; + expect(time).toBeLessThan(maxTestDuration); - if (!(actualDates instanceof Array)) actualDates = [actualDates] - if (!(expectedDates instanceof Array)) expectedDates = [expectedDates] + if (!Array.isArray(actualDates)) + actualDates = actualDates ? [actualDates] : []; + if (!Array.isArray(expectedDates)) expectedDates = [expectedDates]; - assertDatesEqual(actualDates, expectedDates) + assertDatesEqual(actualDates, expectedDates); // Additional tests using the expected dates // ========================================================== if (TEST_CTX.ALSO_TESTSUBSECOND_PRECISION) { expect(actualDates.map(extractTime)).toEqual( - expectedDates.map(extractTime) - ) + expectedDates.map(extractTime), + ); } if (TEST_CTX.ALSO_TESTSTRING_FUNCTIONS) { // Test toString()/fromString() - const str = rule.toString() - const rrule2 = RRule.fromString(str) - const string2 = rrule2.toString() - expect(str).toBe(string2) + const str = rule.toString(); + const rrule2 = RRule.fromString(str); + const string2 = rrule2.toString(); + expect(str).toBe(string2); if (method === 'all') { - assertDatesEqual(rrule2.all(), expectedDates) + assertDatesEqual(rrule2.all(), expectedDates); } } if ( TEST_CTX.ALSO_TESTNLP_FUNCTIONS && - rule.isFullyConvertibleToText && + rule instanceof RRule && rule.isFullyConvertibleToText() ) { // Test fromText()/toText(). - const str = rule.toString() - const text = rule.toText() - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const rrule2 = RRule.fromText(text, rule.options.dtstart) - const text2 = rrule2.toText() - expect(text2).toBe(text) + const str = rule.toString(); + const text = rule.toText(); + // @ts-expect-error - dtstart as second arg + const rrule2 = RRule.fromText(text, rule.options.dtstart); + const text2 = rrule2.toText(); + expect(text2).toBe(text); // Test fromText()/toString(). - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const rrule3 = RRule.fromText(text, rule.options.dtstart) - expect(rrule3.toString()).toBe(str) + // @ts-expect-error - dtstart as second arg + const rrule3 = RRule.fromText(text, rule.options.dtstart); + expect(rrule3.toString()).toBe(str); } if (method === 'all' && TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN) { // Test before, after, and between - use the expected dates. // create a clean copy of the rrule object to bypass caching - rule = rule.clone() + rule = rule.clone(); if (expectedDates.length > 2) { // Test between() assertDatesEqual( rule.between( - expectedDates[0], - expectedDates[expectedDates.length - 1], - true + expectedDates[0]!, + expectedDates[expectedDates.length - 1]!, + true, ), - expectedDates - ) + expectedDates, + ); assertDatesEqual( rule.between( - expectedDates[0], - expectedDates[expectedDates.length - 1], - false + expectedDates[0]!, + expectedDates[expectedDates.length - 1]!, + false, ), - expectedDates.slice(1, expectedDates.length - 1) - ) + expectedDates.slice(1, expectedDates.length - 1), + ); } if (expectedDates.length > 1) { - let date - let next - let prev for (let i = 0; i < expectedDates.length; i++) { - date = expectedDates[i] - next = expectedDates[i + 1] - prev = expectedDates[i - 1] + const date = expectedDates[i]!; + const next = expectedDates[i + 1]; + const prev = expectedDates[i - 1]; // Test after() and before() with inc=true. - assertDatesEqual(rule.after(date, true), date) - assertDatesEqual(rule.before(date, true), date) + assertDatesEqual(rule.after(date, true), date); + assertDatesEqual(rule.before(date, true), date); // Test after() and before() with inc=false. - next && assertDatesEqual(rule.after(date, false), next) - prev && assertDatesEqual(rule.before(date, false), prev) + if (next) assertDatesEqual(rule.after(date, false), next); + if (prev) assertDatesEqual(rule.before(date, false), prev); } } } - }) -} as TestRecurring - -testRecurring.only = function (...args) { - testRecurring.apply(it, [...args, it.only]) -} - -testRecurring.skip = function ([description]: [string]) { - // eslint-disable-next-line @typescript-eslint/no-empty-function, no-empty-function - it.skip(description, () => {}) -} + }); +}) as TestRecurring; + +testRecurring.only = (...args) => { + testRecurring.apply(it, [...args, it.only] as unknown as [ + string, + unknown, + Date | Date[], + ]); +}; + +testRecurring.skip = (...args) => { + const [description] = args as [string]; + it.skip(description, () => {}); +}; export function expectedDate( startDate: Date, - currentLocalDate: Date, - targetZone: string + _currentLocalDate: Date, + targetZone: string, ): Date { - return dateInTimeZone(startDate, targetZone) + return dateInTimeZone(startDate, targetZone); } diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index d30c6eea8..000000000 --- a/test/mocha.opts +++ /dev/null @@ -1,2 +0,0 @@ ---require ts-node/register ---require source-map-support/register \ No newline at end of file diff --git a/test/nlp.test.ts b/test/nlp.test.ts index 8948616ca..ddee9a25c 100644 --- a/test/nlp.test.ts +++ b/test/nlp.test.ts @@ -1,7 +1,6 @@ -import { RRule } from '../src' -import { optionsToString } from '../src/optionstostring' -import { DateFormatter } from '../src/nlp/totext' -import { datetime } from './lib/utils' +import { datetime, RRule } from '../src'; +import type { DateFormatter } from '../src/nlp/totext'; +import { optionsToString } from '../src/optionstostring'; const texts = [ ['Every day', 'RRULE:FREQ=DAILY'], @@ -30,58 +29,58 @@ const texts = [ ['Every month on the 2nd last Friday', 'RRULE:FREQ=MONTHLY;BYDAY=-2FR'], // ['Every week until January 1, 2007', 'RRULE:FREQ=WEEKLY;UNTIL=20070101T080000Z'], ['Every week for 20 times', 'RRULE:FREQ=WEEKLY;COUNT=20'], -] +]; const toTexts = [ ...texts, [ - 'Every week on monday', + 'Every week on monday, starting June 1, 2022', 'DTSTART;TZID=America/New_York:20220601T000000\nRRULE:INTERVAL=1;FREQ=WEEKLY;BYDAY=MO', ], -] +]; describe('NLP', () => { - it('fromText()', function () { - texts.forEach(function (item) { - const text = item[0] - const str = item[1] - expect(RRule.fromText(text).toString()).toBe(str) - }) - }) - - it('toText()', function () { - toTexts.forEach(function (item) { - const text = item[0] - const str = item[1] + it('fromText()', () => { + texts.forEach((item) => { + const text = item[0]; + const str = item[1]; + expect(RRule.fromText(text).toString()).toBe(str); + }); + }); + + it('toText()', () => { + toTexts.forEach((item) => { + const text = item[0]; + const str = item[1]; expect(RRule.fromString(str).toText().toLowerCase()).toBe( - text.toLowerCase() - ) - }) - }) - - it('parseText()', function () { - texts.forEach(function (item) { - const text = item[0] - const str = item[1] - expect(optionsToString(RRule.parseText(text))).toBe(str) - }) - }) + text.toLowerCase(), + ); + }); + }); + + it('parseText()', () => { + texts.forEach((item) => { + const text = item[0]; + const str = item[1]; + expect(optionsToString(RRule.parseText(text))).toBe(str); + }); + }); it('permits integers in byweekday (#153)', () => { const rrule = new RRule({ freq: RRule.WEEKLY, byweekday: 0, - }) + }); - expect(rrule.toText()).toBe('every week on Monday') - expect(rrule.toString()).toBe('RRULE:FREQ=WEEKLY;BYDAY=MO') - }) + expect(rrule.toText()).toBe('every week on Monday'); + expect(rrule.toString()).toBe('RRULE:FREQ=WEEKLY;BYDAY=MO'); + }); it('sorts monthdays correctly (#101)', () => { - const options = { freq: 2, bymonthday: [3, 10, 17, 24] } - const rule = new RRule(options) - expect(rule.toText()).toBe('every week on the 3rd, 10th, 17th and 24th') - }) + const options = { freq: 2, bymonthday: [3, 10, 17, 24] }; + const rule = new RRule(options); + expect(rule.toText()).toBe('every week on the 3rd, 10th, 17th and 24th'); + }); it('shows correct text for every day', () => { const options = { @@ -95,43 +94,43 @@ describe('NLP', () => { RRule.SA, RRule.SU, ], - } - const rule = new RRule(options) - expect(rule.toText()).toBe('every day') - }) + }; + const rule = new RRule(options); + expect(rule.toText()).toBe('every day'); + }); it('shows correct text for every minute', () => { - const options = { freq: RRule.MINUTELY } - const rule = new RRule(options) - expect(rule.toText()).toBe('every minute') - }) + const options = { freq: RRule.MINUTELY }; + const rule = new RRule(options); + expect(rule.toText()).toBe('every minute'); + }); it('shows correct text for every (plural) minutes', () => { - const options = { freq: RRule.MINUTELY, interval: 2 } - const rule = new RRule(options) - expect(rule.toText()).toBe('every 2 minutes') - }) + const options = { freq: RRule.MINUTELY, interval: 2 }; + const rule = new RRule(options); + expect(rule.toText()).toBe('every 2 minutes'); + }); it("by default formats 'until' correctly", () => { const rrule = new RRule({ freq: RRule.WEEKLY, until: datetime(2012, 11, 10), - }) + }); - expect(rrule.toText()).toBe('every week until November 10, 2012') - }) + expect(rrule.toText()).toBe('every week until November 10, 2012'); + }); it("formats 'until' as desired if asked", () => { const rrule = new RRule({ freq: RRule.WEEKLY, until: datetime(2012, 11, 10), - }) + }); const dateFormatter: DateFormatter = (year, month, day) => - `${day}. ${month}, ${year}` + `${day}. ${month}, ${year}`; expect(rrule.toText(undefined, undefined, dateFormatter)).toBe( - 'every week until 10. November, 2012' - ) - }) -}) + 'every week until 10. November, 2012', + ); + }); +}); diff --git a/test/optionstostring.test.ts b/test/optionstostring.test.ts index b502622e9..5c92c93b2 100644 --- a/test/optionstostring.test.ts +++ b/test/optionstostring.test.ts @@ -1,10 +1,9 @@ -import { Options } from '../src/types' -import { RRule } from '../src/rrule' -import { optionsToString } from '../src/optionstostring' -import { datetime } from './lib/utils' +import type { Options } from '../src'; +import { datetime, RRule } from '../src'; +import { optionsToString } from '../src/optionstostring'; describe('optionsToString', () => { - it('serializes valid single lines of rrules', function () { + it('serializes valid single lines of rrules', () => { const expectations: [Partial, string][] = [ [ { freq: RRule.WEEKLY, until: datetime(2010, 1, 1, 0, 0, 0) }, @@ -32,13 +31,13 @@ describe('optionsToString', () => { }, 'DTSTART;TZID=America/New_York:19970902T090000\n' + 'RRULE:FREQ=WEEKLY', ], - ] + ]; - expectations.forEach(function (item) { - const s = item[0] - const s2 = item[1] + expectations.forEach((item) => { + const s = item[0]; + const s2 = item[1]; // JSON.stringify(s) - expect(optionsToString(s)).toEqual(s2) - }) - }) -}) + expect(optionsToString(s)).toEqual(s2); + }); + }); +}); diff --git a/test/parseoptions.test.ts b/test/parseoptions.test.ts index 487f164e6..bf0ae15bb 100644 --- a/test/parseoptions.test.ts +++ b/test/parseoptions.test.ts @@ -1,46 +1,46 @@ -import { parseOptions } from '../src/parseoptions' -import { RRule } from '../src' +import { RRule } from '../src'; +import { parseOptions } from '../src/parseoptions'; describe('TZID', () => { it('leaves null when null', () => { - const options = parseOptions({ tzid: null }) - expect(options.parsedOptions.tzid).toBeNull() - }) + const options = parseOptions({ tzid: null }); + expect(options.parsedOptions.tzid).toBeNull(); + }); it('uses a string when passed in', () => { - const options = parseOptions({ tzid: 'America/Los_Angeles' }) - expect(options.parsedOptions.tzid).toBe('America/Los_Angeles') - }) -}) + const options = parseOptions({ tzid: 'America/Los_Angeles' }); + expect(options.parsedOptions.tzid).toBe('America/Los_Angeles'); + }); +}); describe('byweekday', () => { it('works with a single numeric day', () => { - const options = parseOptions({ byweekday: 1 }) - expect(options.parsedOptions.byweekday).toEqual([1]) - }) + const options = parseOptions({ byweekday: 1 }); + expect(options.parsedOptions.byweekday).toEqual([1]); + }); it('works with a single Weekday day', () => { - const options = parseOptions({ byweekday: RRule.TU }) - expect(options.parsedOptions.byweekday).toEqual([1]) - }) + const options = parseOptions({ byweekday: RRule.TU }); + expect(options.parsedOptions.byweekday).toEqual([1]); + }); it('works with a single string day', () => { - const options = parseOptions({ byweekday: 'TU' }) - expect(options.parsedOptions.byweekday).toEqual([1]) - }) + const options = parseOptions({ byweekday: 'TU' }); + expect(options.parsedOptions.byweekday).toEqual([1]); + }); it('works with a multiple numeric days', () => { - const options = parseOptions({ byweekday: [1, 2] }) - expect(options.parsedOptions.byweekday).toEqual([1, 2]) - }) + const options = parseOptions({ byweekday: [1, 2] }); + expect(options.parsedOptions.byweekday).toEqual([1, 2]); + }); it('works with a multiple Weekday days', () => { - const options = parseOptions({ byweekday: [RRule.TU, RRule.WE] }) - expect(options.parsedOptions.byweekday).toEqual([1, 2]) - }) + const options = parseOptions({ byweekday: [RRule.TU, RRule.WE] }); + expect(options.parsedOptions.byweekday).toEqual([1, 2]); + }); it('works with a multiple string days', () => { - const options = parseOptions({ byweekday: ['TU', 'WE'] }) - expect(options.parsedOptions.byweekday).toEqual([1, 2]) - }) -}) + const options = parseOptions({ byweekday: ['TU', 'WE'] }); + expect(options.parsedOptions.byweekday).toEqual([1, 2]); + }); +}); diff --git a/test/parsestring.test.ts b/test/parsestring.test.ts index d96e86e7c..3d91841d2 100644 --- a/test/parsestring.test.ts +++ b/test/parsestring.test.ts @@ -1,10 +1,8 @@ -import { RRule } from '../src/rrule' -import { parseString } from '../src/parsestring' -import { Options, Frequency } from '../src/types' -import { datetime } from './lib/utils' +import { datetime, Frequency, type Options, RRule } from '../src'; +import { parseString } from '../src/parsestring'; describe('parseString', () => { - it('parses valid single lines of rrules', function () { + it('parses valid single lines of rrules', () => { const expectations: [string, Partial][] = [ [ 'FREQ=WEEKLY;UNTIL=20100101T000000Z', @@ -30,15 +28,15 @@ describe('parseString', () => { tzid: 'America/New_York', }, ], - ] + ]; - expectations.forEach(function (item) { - const s = item[0] - const s2 = item[1] + expectations.forEach((item) => { + const s = item[0]; + const s2 = item[1]; // s - expect(parseString(s)).toEqual(s2) - }) - }) + expect(parseString(s)).toEqual(s2); + }); + }); it('parses multiline rules', () => { const expectations: [string, Partial][] = [ @@ -59,15 +57,15 @@ describe('parseString', () => { count: 3, }, ], - ] + ]; - expectations.forEach(function (item) { - const s = item[0] - const s2 = item[1] + expectations.forEach((item) => { + const s = item[0]; + const s2 = item[1]; // s - expect(parseString(s)).toEqual(s2) - }) - }) + expect(parseString(s)).toEqual(s2); + }); + }); it('parses legacy dtstart in rrule', () => { const expectations: [string, Partial][] = [ @@ -79,13 +77,13 @@ describe('parseString', () => { tzid: 'America/New_York', }, ], - ] + ]; - expectations.forEach(function (item) { - const s = item[0] - const s2 = item[1] + expectations.forEach((item) => { + const s = item[0]; + const s2 = item[1]; // s - expect(parseString(s)).toEqual(s2) - }) - }) -}) + expect(parseString(s)).toEqual(s2); + }); + }); +}); diff --git a/test/rrule.test.ts b/test/rrule.test.ts index 4269413d1..ef8e0bbb9 100644 --- a/test/rrule.test.ts +++ b/test/rrule.test.ts @@ -1,77 +1,77 @@ +import { reset as resetMockDate, set as setMockDate } from 'mockdate'; +import { Frequency, RRule, rrulestr } from '../src'; import { - parse, datetime, - testRecurring, expectedDate, + parse, TEST_CTX, -} from './lib/utils' -import { RRule, rrulestr, Frequency } from '../src/index' -import { set as setMockDate, reset as resetMockDate } from 'mockdate' + testRecurring, +} from './lib/utils'; -describe('RRule', function () { +describe('RRule', () => { beforeAll(() => { // Enable additional toString() / fromString() tests // for each testRecurring(). - TEST_CTX.ALSO_TESTSTRING_FUNCTIONS = true + TEST_CTX.ALSO_TESTSTRING_FUNCTIONS = true; // Enable additional toText() / fromText() tests // for each testRecurring(). // Many of the tests fail because the conversion is only approximate, // but it gives an idea about how well or bad it converts. - TEST_CTX.ALSO_TESTNLP_FUNCTIONS = false + TEST_CTX.ALSO_TESTNLP_FUNCTIONS = false; // Thorough after()/before()/between() tests. // NOTE: can take a longer time. - TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN = true + TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN = true; - TEST_CTX.ALSO_TESTSUBSECOND_PRECISION = true - }) + TEST_CTX.ALSO_TESTSUBSECOND_PRECISION = true; + }); - it('rrulestr https://github.com/jkbrzt/rrule/pull/164', function () { - const s1 = 'RRULE:FREQ=WEEKLY;WKST=WE' - const s2 = rrulestr(s1).toString() - expect(s1).toBe(s2) - }) + it('rrulestr - correctly handles WKST condition statement', () => { + const s1 = 'RRULE:FREQ=WEEKLY;WKST=WE'; + const s2 = rrulestr(s1).toString(); + expect(s1).toBe(s2); + }); - it('rrulestr itteration not infinite when interval 0', function () { - ;[ + it('rrulestr itteration not infinite when interval 0', () => { + [ 'FREQ=YEARLY;INTERVAL=0;BYSETPOS=1;BYDAY=MO', 'FREQ=MONTHLY;INTERVAL=0;BYSETPOS=1;BYDAY=MO', 'FREQ=DAILY;INTERVAL=0;BYSETPOS=1;BYDAY=MO', 'FREQ=HOURLY;INTERVAL=0;BYSETPOS=1;BYDAY=MO', 'FREQ=MINUTELY;INTERVAL=0;BYSETPOS=1;BYDAY=MO', 'FREQ=SECONDLY;INTERVAL=0;BYSETPOS=1;BYDAY=MO', - ].map((s) => expect(rrulestr(s).count()).toBe(0)) - }) + ].map((s) => expect(rrulestr(s).count()).toBe(0)); + }); - it('does not mutate the passed-in options object', function () { + it('does not mutate the passed-in options object', () => { const options = { freq: RRule.MONTHLY, dtstart: new Date(2013, 0, 1), count: 3, bymonthday: [28], - } - const rule = new RRule(options) + }; + const rule = new RRule(options); expect(options).toEqual({ freq: RRule.MONTHLY, dtstart: new Date(2013, 0, 1), count: 3, bymonthday: [28], - }) - expect(rule.origOptions).toEqual(options) - }) + }); + expect(rule.origOptions).toEqual(options); + }); testRecurring( - 'missing Feb 28 https://github.com/jakubroztocil/rrule/issues/21', + 'missing Feb 28', new RRule({ freq: RRule.MONTHLY, dtstart: datetime(2013, 1, 1), count: 3, bymonthday: [28], }), - [datetime(2013, 1, 28), datetime(2013, 2, 28), datetime(2013, 3, 28)] - ) + [datetime(2013, 1, 28), datetime(2013, 2, 28), datetime(2013, 3, 28)], + ); // ============================================================================= // The original `dateutil.rrule` test suite converted from Py to JS. @@ -87,8 +87,8 @@ describe('RRule', function () { method: 'before', args: [parse('19970905T090000')], }, - datetime(1997, 9, 4, 9, 0) - ) + datetime(1997, 9, 4, 9, 0), + ); testRecurring( 'testBeforeInc', @@ -100,8 +100,8 @@ describe('RRule', function () { method: 'before', args: [parse('19970905T090000'), true], }, - datetime(1997, 9, 5, 9, 0) - ) + datetime(1997, 9, 5, 9, 0), + ); testRecurring( 'testAfter', @@ -113,8 +113,8 @@ describe('RRule', function () { method: 'after', args: [parse('19970904T090000')], }, - datetime(1997, 9, 5, 9, 0) - ) + datetime(1997, 9, 5, 9, 0), + ); testRecurring( 'testAfterInc', @@ -126,8 +126,8 @@ describe('RRule', function () { method: 'after', args: [parse('19970904T090000'), true], }, - datetime(1997, 9, 4, 9, 0) - ) + datetime(1997, 9, 4, 9, 0), + ); testRecurring( 'testBetween', @@ -143,8 +143,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0), - ] - ) + ], + ); testRecurring( 'testBetweenInc', @@ -162,8 +162,8 @@ describe('RRule', function () { datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 5, 9, 0), datetime(1997, 9, 6, 9, 0), - ] - ) + ], + ); testRecurring( 'testBetweenWithTZ', @@ -183,8 +183,8 @@ describe('RRule', function () { expectedDate(datetime(2022, 6, 28, 9, 0), undefined, 'Europe/London'), expectedDate(datetime(2022, 7, 5, 9, 0), undefined, 'Europe/London'), expectedDate(datetime(2022, 7, 12, 9, 0), undefined, 'Europe/London'), - ] - ) + ], + ); testRecurring( 'testYearly', @@ -197,8 +197,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyInterval', @@ -212,8 +212,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), datetime(2001, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyIntervalLarge', @@ -227,8 +227,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(2097, 9, 2, 9, 0), datetime(2197, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonth', @@ -242,8 +242,8 @@ describe('RRule', function () { datetime(1998, 1, 2, 9, 0), datetime(1998, 3, 2, 9, 0), datetime(1999, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthDay', @@ -257,8 +257,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndMonthDay', @@ -273,8 +273,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByWeekDay', @@ -288,8 +288,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByNWeekDay', @@ -303,8 +303,8 @@ describe('RRule', function () { datetime(1997, 12, 25, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 12, 31, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByNWeekDayLarge', @@ -318,8 +318,8 @@ describe('RRule', function () { datetime(1997, 10, 2, 9, 0), datetime(1998, 3, 31, 9, 0), datetime(1998, 10, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndWeekDay', @@ -334,8 +334,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndNWeekDay', @@ -350,8 +350,8 @@ describe('RRule', function () { datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 29, 9, 0), datetime(1998, 3, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndNWeekDayLarge', @@ -366,8 +366,8 @@ describe('RRule', function () { datetime(1998, 1, 15, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 3, 12, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthDayAndWeekDay', @@ -382,8 +382,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndMonthDayAndWeekDay', @@ -399,8 +399,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByYearDay', @@ -415,8 +415,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByYearDayNeg', @@ -431,8 +431,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndYearDay', @@ -448,8 +448,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMonthAndYearDayNeg', @@ -465,8 +465,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByWeekNo', @@ -480,8 +480,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByWeekNoAndWeekDay', @@ -498,8 +498,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByWeekNoAndWeekDayLarge', @@ -516,8 +516,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByWeekNoAndWeekDayLast', @@ -532,8 +532,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByEaster', @@ -542,8 +542,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByEasterPos', @@ -557,8 +557,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByEasterNeg', @@ -572,8 +572,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByWeekNoAndWeekDay53', @@ -588,8 +588,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByHour', @@ -603,8 +603,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1998, 9, 2, 6, 0), datetime(1998, 9, 2, 18, 0), - ] - ) + ], + ); testRecurring( 'testYearlyByMinute', @@ -618,8 +618,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1998, 9, 2, 9, 6), - ] - ) + ], + ); testRecurring( 'testYearlyBySecond', @@ -633,8 +633,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1998, 9, 2, 9, 0, 6), - ] - ) + ], + ); testRecurring( 'testYearlyByHourAndMinute', @@ -649,8 +649,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1998, 9, 2, 6, 6), - ] - ) + ], + ); testRecurring( 'testYearlyByHourAndSecond', @@ -665,8 +665,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1998, 9, 2, 6, 0, 6), - ] - ) + ], + ); testRecurring( 'testYearlyByMinuteAndSecond', @@ -681,8 +681,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testYearlyByHourAndMinuteAndSecond', @@ -698,8 +698,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testYearlyBySetPos', @@ -715,8 +715,8 @@ describe('RRule', function () { datetime(1997, 11, 15, 18, 0), datetime(1998, 2, 15, 6, 0), datetime(1998, 11, 15, 18, 0), - ] - ) + ], + ); testRecurring( 'testYearlyBetweenInc', @@ -728,8 +728,8 @@ describe('RRule', function () { method: 'between', args: [parse('20160101T000000'), parse('20160101T000000'), true], }, - [datetime(2016, 1, 1)] - ) + [datetime(2016, 1, 1)], + ); testRecurring( 'testYearlyBetweenIncLargeSpan', @@ -741,8 +741,8 @@ describe('RRule', function () { method: 'between', args: [parse('20160101T000000'), parse('20160101T000000'), true], }, - [datetime(2016, 1, 1)] - ) + [datetime(2016, 1, 1)], + ); testRecurring( 'testMonthly', @@ -755,8 +755,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 10, 2, 9, 0), datetime(1997, 11, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyInterval', @@ -770,8 +770,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 11, 2, 9, 0), datetime(1998, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyIntervalLarge', @@ -785,8 +785,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1999, 3, 2, 9, 0), datetime(2000, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonth', @@ -800,8 +800,8 @@ describe('RRule', function () { datetime(1998, 1, 2, 9, 0), datetime(1998, 3, 2, 9, 0), datetime(1999, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthDay', @@ -815,8 +815,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndMonthDay', @@ -831,8 +831,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByWeekDay', @@ -846,8 +846,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByNWeekDay', @@ -861,8 +861,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 25, 9, 0), datetime(1997, 10, 7, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByNWeekDayLarge', @@ -876,8 +876,8 @@ describe('RRule', function () { datetime(1997, 9, 11, 9, 0), datetime(1997, 9, 16, 9, 0), datetime(1997, 10, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndWeekDay', @@ -892,8 +892,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndNWeekDay', @@ -908,8 +908,8 @@ describe('RRule', function () { datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 29, 9, 0), datetime(1998, 3, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndNWeekDayLarge', @@ -924,8 +924,8 @@ describe('RRule', function () { datetime(1998, 1, 15, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 3, 12, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthDayAndWeekDay', @@ -940,8 +940,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndMonthDayAndWeekDay', @@ -957,8 +957,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByYearDay', @@ -973,8 +973,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByYearDayNeg', @@ -989,8 +989,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndYearDay', @@ -1006,8 +1006,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMonthAndYearDayNeg', @@ -1023,8 +1023,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 4, 10, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByWeekNo', @@ -1038,8 +1038,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByWeekNoAndWeekDay', @@ -1056,8 +1056,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByWeekNoAndWeekDayLarge', @@ -1074,8 +1074,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByWeekNoAndWeekDayLast', @@ -1090,8 +1090,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByWeekNoAndWeekDay53', @@ -1106,8 +1106,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByEaster', @@ -1121,8 +1121,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByEasterPos', @@ -1136,8 +1136,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByEasterNeg', @@ -1151,8 +1151,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByHour', @@ -1166,8 +1166,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1997, 10, 2, 6, 0), datetime(1997, 10, 2, 18, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyByMinute', @@ -1181,8 +1181,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 10, 2, 9, 6), - ] - ) + ], + ); testRecurring( 'testMonthlyBySecond', @@ -1196,8 +1196,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 10, 2, 9, 0, 6), - ] - ) + ], + ); testRecurring( 'testMonthlyByHourAndMinute', @@ -1212,8 +1212,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 10, 2, 6, 6), - ] - ) + ], + ); testRecurring( 'testMonthlyByHourAndSecond', @@ -1228,8 +1228,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 10, 2, 6, 0, 6), - ] - ) + ], + ); testRecurring( 'testMonthlyByMinuteAndSecond', @@ -1244,8 +1244,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testMonthlyByHourAndMinuteAndSecond', @@ -1261,8 +1261,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testMonthlyBySetPos', @@ -1278,8 +1278,8 @@ describe('RRule', function () { datetime(1997, 9, 13, 18, 0), datetime(1997, 9, 17, 6, 0), datetime(1997, 10, 13, 18, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyNegByMonthDayJanFebForNonLeapYear', @@ -1294,8 +1294,8 @@ describe('RRule', function () { datetime(2014, 1, 31, 9, 0), datetime(2014, 2, 28, 9, 0), datetime(2014, 3, 31, 9, 0), - ] - ) + ], + ); testRecurring( 'testMonthlyNegByMonthDayJanFebForLeapYear', @@ -1310,8 +1310,8 @@ describe('RRule', function () { datetime(2016, 1, 31, 9, 0), datetime(2016, 2, 29, 9, 0), datetime(2016, 3, 31, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeekly', @@ -1324,8 +1324,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyInterval', @@ -1339,8 +1339,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 16, 9, 0), datetime(1997, 9, 30, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyIntervalLarge', @@ -1354,8 +1354,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 1, 20, 9, 0), datetime(1998, 6, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonth', @@ -1369,8 +1369,8 @@ describe('RRule', function () { datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 13, 9, 0), datetime(1998, 1, 20, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthDay', @@ -1384,8 +1384,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthAndMonthDay', @@ -1400,8 +1400,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByWeekDay', @@ -1415,8 +1415,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByNWeekDay', @@ -1430,8 +1430,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthAndWeekDay', @@ -1449,8 +1449,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthAndNWeekDay', @@ -1465,8 +1465,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthDayAndWeekDay', @@ -1481,8 +1481,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthAndMonthDayAndWeekDay', @@ -1498,8 +1498,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByYearDay', @@ -1514,8 +1514,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByYearDayNeg', @@ -1530,8 +1530,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthAndYearDay', @@ -1547,8 +1547,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMonthAndYearDayNeg', @@ -1564,8 +1564,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByWeekNo', @@ -1579,8 +1579,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByWeekNoAndWeekDay', @@ -1597,8 +1597,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByWeekNoAndWeekDayLarge', @@ -1615,8 +1615,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByWeekNoAndWeekDayLast', @@ -1631,8 +1631,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByWeekNoAndWeekDay53', @@ -1647,8 +1647,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByEaster', @@ -1662,8 +1662,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByEasterPos', @@ -1677,8 +1677,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByEasterNeg', @@ -1692,8 +1692,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByHour', @@ -1707,8 +1707,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 9, 6, 0), datetime(1997, 9, 9, 18, 0), - ] - ) + ], + ); testRecurring( 'testWeeklyByMinute', @@ -1722,8 +1722,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 9, 9, 6), - ] - ) + ], + ); testRecurring( 'testWeeklyBySecond', @@ -1737,8 +1737,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 9, 9, 0, 6), - ] - ) + ], + ); testRecurring( 'testWeeklyByHourAndMinute', @@ -1753,8 +1753,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 9, 6, 6), - ] - ) + ], + ); testRecurring( 'testWeeklyByHourAndSecond', @@ -1769,8 +1769,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 9, 6, 0, 6), - ] - ) + ], + ); testRecurring( 'testWeeklyByMinuteAndSecond', @@ -1785,8 +1785,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testWeeklyByHourAndMinuteAndSecond', @@ -1802,8 +1802,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testWeeklyBySetPos', @@ -1819,8 +1819,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 4, 6, 0), datetime(1997, 9, 9, 18, 0), - ] - ) + ], + ); testRecurring( 'testDaily', @@ -1833,8 +1833,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyInterval', @@ -1848,8 +1848,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 6, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyIntervalLarge', @@ -1863,8 +1863,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 12, 3, 9, 0), datetime(1998, 3, 5, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonth', @@ -1878,8 +1878,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 2, 9, 0), datetime(1998, 1, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthDay', @@ -1893,8 +1893,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 9, 0), datetime(1997, 10, 1, 9, 0), datetime(1997, 10, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthAndMonthDay', @@ -1909,8 +1909,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 9, 0), datetime(1998, 1, 7, 9, 0), datetime(1998, 3, 5, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByWeekDay', @@ -1924,8 +1924,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByNWeekDay', @@ -1939,8 +1939,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthAndWeekDay', @@ -1955,8 +1955,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthAndNWeekDay', @@ -1971,8 +1971,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 1, 8, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthDayAndWeekDay', @@ -1987,8 +1987,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 2, 3, 9, 0), datetime(1998, 3, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthAndMonthDayAndWeekDay', @@ -2004,8 +2004,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 3, 3, 9, 0), datetime(2001, 3, 1, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByYearDay', @@ -2020,8 +2020,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByYearDayNeg', @@ -2036,8 +2036,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 9, 0), datetime(1998, 4, 10, 9, 0), datetime(1998, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthAndYearDay', @@ -2053,8 +2053,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMonthAndYearDayNeg', @@ -2070,8 +2070,8 @@ describe('RRule', function () { datetime(1998, 7, 19, 9, 0), datetime(1999, 1, 1, 9, 0), datetime(1999, 7, 19, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByWeekNo', @@ -2085,8 +2085,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 9, 0), datetime(1998, 5, 12, 9, 0), datetime(1998, 5, 13, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByWeekNoAndWeekDay', @@ -2103,8 +2103,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 9, 0), datetime(1999, 1, 4, 9, 0), datetime(2000, 1, 3, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByWeekNoAndWeekDayLarge', @@ -2121,8 +2121,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1998, 12, 27, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByWeekNoAndWeekDayLast', @@ -2137,8 +2137,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 9, 0), datetime(1999, 1, 3, 9, 0), datetime(2000, 1, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByWeekNoAndWeekDay53', @@ -2153,8 +2153,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 9, 0), datetime(2004, 12, 27, 9, 0), datetime(2009, 12, 28, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByEaster', @@ -2168,8 +2168,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 9, 0), datetime(1999, 4, 4, 9, 0), datetime(2000, 4, 23, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByEasterPos', @@ -2183,8 +2183,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 9, 0), datetime(1999, 4, 5, 9, 0), datetime(2000, 4, 24, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByEasterNeg', @@ -2198,8 +2198,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 9, 0), datetime(1999, 4, 3, 9, 0), datetime(2000, 4, 22, 9, 0), - ] - ) + ], + ); testRecurring( 'testDailyByHour', @@ -2213,8 +2213,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 3, 6, 0), datetime(1997, 9, 3, 18, 0), - ] - ) + ], + ); testRecurring( 'testDailyByMinute', @@ -2228,8 +2228,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 3, 9, 6), - ] - ) + ], + ); testRecurring( 'testDailyBySecond', @@ -2243,8 +2243,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 3, 9, 0, 6), - ] - ) + ], + ); testRecurring( 'testDailyByHourAndMinute', @@ -2259,8 +2259,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 3, 6, 6), - ] - ) + ], + ); testRecurring( 'testDailyByHourAndSecond', @@ -2275,8 +2275,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 3, 6, 0, 6), - ] - ) + ], + ); testRecurring( 'testDailyByMinuteAndSecond', @@ -2291,8 +2291,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testDailyByHourAndMinuteAndSecond', @@ -2308,8 +2308,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testDailyBySetPos', @@ -2325,8 +2325,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 15), datetime(1997, 9, 3, 6, 45), datetime(1997, 9, 3, 18, 15), - ] - ) + ], + ); testRecurring( 'testHourly', @@ -2339,8 +2339,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 10, 0), datetime(1997, 9, 2, 11, 0), - ] - ) + ], + ); testRecurring( 'testHourlyInterval', @@ -2354,8 +2354,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 11, 0), datetime(1997, 9, 2, 13, 0), - ] - ) + ], + ); testRecurring( 'testHourlyIntervalLarge', @@ -2369,8 +2369,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 10, 4, 10, 0), datetime(1997, 11, 5, 11, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonth', @@ -2384,8 +2384,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthDay', @@ -2399,8 +2399,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 0, 0), datetime(1997, 9, 3, 1, 0), datetime(1997, 9, 3, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthAndMonthDay', @@ -2415,8 +2415,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 0, 0), datetime(1998, 1, 5, 1, 0), datetime(1998, 1, 5, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByWeekDay', @@ -2430,8 +2430,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 10, 0), datetime(1997, 9, 2, 11, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByNWeekDay', @@ -2445,8 +2445,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 10, 0), datetime(1997, 9, 2, 11, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthAndWeekDay', @@ -2461,8 +2461,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthAndNWeekDay', @@ -2477,8 +2477,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthDayAndWeekDay', @@ -2493,8 +2493,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthAndMonthDayAndWeekDay', @@ -2510,8 +2510,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 1, 0), datetime(1998, 1, 1, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByYearDay', @@ -2526,8 +2526,8 @@ describe('RRule', function () { datetime(1997, 12, 31, 1, 0), datetime(1997, 12, 31, 2, 0), datetime(1997, 12, 31, 3, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByYearDayNeg', @@ -2542,8 +2542,8 @@ describe('RRule', function () { datetime(1997, 12, 31, 1, 0), datetime(1997, 12, 31, 2, 0), datetime(1997, 12, 31, 3, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthAndYearDay', @@ -2559,8 +2559,8 @@ describe('RRule', function () { datetime(1998, 4, 10, 1, 0), datetime(1998, 4, 10, 2, 0), datetime(1998, 4, 10, 3, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMonthAndYearDayNeg', @@ -2576,8 +2576,8 @@ describe('RRule', function () { datetime(1998, 4, 10, 1, 0), datetime(1998, 4, 10, 2, 0), datetime(1998, 4, 10, 3, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByWeekNo', @@ -2591,8 +2591,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 0, 0), datetime(1998, 5, 11, 1, 0), datetime(1998, 5, 11, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByWeekNoAndWeekDay', @@ -2607,8 +2607,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 0, 0), datetime(1997, 12, 29, 1, 0), datetime(1997, 12, 29, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByWeekNoAndWeekDayLarge', @@ -2623,8 +2623,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 1, 0), datetime(1997, 12, 28, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByWeekNoAndWeekDayLast', @@ -2639,8 +2639,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 1, 0), datetime(1997, 12, 28, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByWeekNoAndWeekDay53', @@ -2655,8 +2655,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 0, 0), datetime(1998, 12, 28, 1, 0), datetime(1998, 12, 28, 2, 0), - ] - ) + ], + ); testRecurring.skip( 'testHourlyByEaster', @@ -2670,8 +2670,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 0, 0), datetime(1998, 4, 12, 1, 0), datetime(1998, 4, 12, 2, 0), - ] - ) + ], + ); testRecurring.skip( 'testHourlyByEasterPos', @@ -2685,8 +2685,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 0, 0), datetime(1998, 4, 13, 1, 0), datetime(1998, 4, 13, 2, 0), - ] - ) + ], + ); testRecurring.skip( 'testHourlyByEasterNeg', @@ -2700,8 +2700,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 0, 0), datetime(1998, 4, 11, 1, 0), datetime(1998, 4, 11, 2, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByHour', @@ -2715,8 +2715,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 3, 6, 0), datetime(1997, 9, 3, 18, 0), - ] - ) + ], + ); testRecurring( 'testHourlyByMinute', @@ -2730,8 +2730,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 2, 10, 6), - ] - ) + ], + ); testRecurring( 'testHourlyBySecond', @@ -2745,8 +2745,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 2, 10, 0, 6), - ] - ) + ], + ); testRecurring( 'testHourlyByHourAndMinute', @@ -2761,8 +2761,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 3, 6, 6), - ] - ) + ], + ); testRecurring( 'testHourlyByHourAndSecond', @@ -2777,8 +2777,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 3, 6, 0, 6), - ] - ) + ], + ); testRecurring( 'testHourlyByMinuteAndSecond', @@ -2793,8 +2793,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testHourlyByHourAndMinuteAndSecond', @@ -2810,8 +2810,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testHourlyBySetPos', @@ -2827,8 +2827,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 15, 45), datetime(1997, 9, 2, 9, 45, 15), datetime(1997, 9, 2, 10, 15, 45), - ] - ) + ], + ); testRecurring( 'testMinutely', @@ -2841,8 +2841,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 1), datetime(1997, 9, 2, 9, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyInterval', @@ -2856,8 +2856,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 2), datetime(1997, 9, 2, 9, 4), - ] - ) + ], + ); testRecurring( 'testMinutelyIntervalLarge', @@ -2871,8 +2871,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 10, 1), datetime(1997, 9, 4, 11, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonth', @@ -2886,8 +2886,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthDay', @@ -2901,8 +2901,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 0, 0), datetime(1997, 9, 3, 0, 1), datetime(1997, 9, 3, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthAndMonthDay', @@ -2917,8 +2917,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 0, 0), datetime(1998, 1, 5, 0, 1), datetime(1998, 1, 5, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByWeekDay', @@ -2932,8 +2932,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 1), datetime(1997, 9, 2, 9, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByNWeekDay', @@ -2947,8 +2947,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 2, 9, 1), datetime(1997, 9, 2, 9, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthAndWeekDay', @@ -2963,8 +2963,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthAndNWeekDay', @@ -2979,8 +2979,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthDayAndWeekDay', @@ -2995,8 +2995,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthAndMonthDayAndWeekDay', @@ -3012,8 +3012,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0), datetime(1998, 1, 1, 0, 1), datetime(1998, 1, 1, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByYearDay', @@ -3028,8 +3028,8 @@ describe('RRule', function () { datetime(1997, 12, 31, 0, 1), datetime(1997, 12, 31, 0, 2), datetime(1997, 12, 31, 0, 3), - ] - ) + ], + ); testRecurring( 'testMinutelyByYearDayNeg', @@ -3044,8 +3044,8 @@ describe('RRule', function () { datetime(1997, 12, 31, 0, 1), datetime(1997, 12, 31, 0, 2), datetime(1997, 12, 31, 0, 3), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthAndYearDay', @@ -3061,8 +3061,8 @@ describe('RRule', function () { datetime(1998, 4, 10, 0, 1), datetime(1998, 4, 10, 0, 2), datetime(1998, 4, 10, 0, 3), - ] - ) + ], + ); testRecurring( 'testMinutelyByMonthAndYearDayNeg', @@ -3078,8 +3078,8 @@ describe('RRule', function () { datetime(1998, 4, 10, 0, 1), datetime(1998, 4, 10, 0, 2), datetime(1998, 4, 10, 0, 3), - ] - ) + ], + ); testRecurring( 'testMinutelyByWeekNo', @@ -3093,8 +3093,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 0, 0), datetime(1998, 5, 11, 0, 1), datetime(1998, 5, 11, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByWeekNoAndWeekDay', @@ -3109,8 +3109,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 0, 0), datetime(1997, 12, 29, 0, 1), datetime(1997, 12, 29, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByWeekNoAndWeekDayLarge', @@ -3125,8 +3125,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 0, 1), datetime(1997, 12, 28, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByWeekNoAndWeekDayLast', @@ -3141,8 +3141,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 0, 0), datetime(1997, 12, 28, 0, 1), datetime(1997, 12, 28, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByWeekNoAndWeekDay53', @@ -3157,8 +3157,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 0, 0), datetime(1998, 12, 28, 0, 1), datetime(1998, 12, 28, 0, 2), - ] - ) + ], + ); testRecurring.skip( 'testMinutelyByEaster', @@ -3172,8 +3172,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 0, 0), datetime(1998, 4, 12, 0, 1), datetime(1998, 4, 12, 0, 2), - ] - ) + ], + ); testRecurring.skip( 'testMinutelyByEasterPos', @@ -3187,8 +3187,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 0, 0), datetime(1998, 4, 13, 0, 1), datetime(1998, 4, 13, 0, 2), - ] - ) + ], + ); testRecurring.skip( 'testMinutelyByEasterNeg', @@ -3202,8 +3202,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 0, 0), datetime(1998, 4, 11, 0, 1), datetime(1998, 4, 11, 0, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByHour', @@ -3217,8 +3217,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0), datetime(1997, 9, 2, 18, 1), datetime(1997, 9, 2, 18, 2), - ] - ) + ], + ); testRecurring( 'testMinutelyByMinute', @@ -3232,8 +3232,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6), datetime(1997, 9, 2, 9, 18), datetime(1997, 9, 2, 10, 6), - ] - ) + ], + ); testRecurring( 'testMinutelyBySecond', @@ -3247,8 +3247,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 2, 9, 1, 6), - ] - ) + ], + ); testRecurring( 'testMinutelyByHourAndMinute', @@ -3263,8 +3263,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6), datetime(1997, 9, 2, 18, 18), datetime(1997, 9, 3, 6, 6), - ] - ) + ], + ); testRecurring( 'testMinutelyByHourAndSecond', @@ -3279,8 +3279,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 2, 18, 1, 6), - ] - ) + ], + ); testRecurring( 'testMinutelyByMinuteAndSecond', @@ -3295,8 +3295,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testMinutelyByHourAndMinuteAndSecond', @@ -3312,8 +3312,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testMinutelyBySetPos', @@ -3328,8 +3328,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 15), datetime(1997, 9, 2, 9, 0, 45), datetime(1997, 9, 2, 9, 1, 15), - ] - ) + ], + ); testRecurring( 'testSecondly', @@ -3342,8 +3342,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 1), datetime(1997, 9, 2, 9, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyInterval', @@ -3357,8 +3357,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 2), datetime(1997, 9, 2, 9, 0, 4), - ] - ) + ], + ); testRecurring( 'testSecondlyIntervalLarge', @@ -3372,8 +3372,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 3, 10, 1, 1), datetime(1997, 9, 4, 11, 2, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonth', @@ -3387,8 +3387,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthDay', @@ -3402,8 +3402,8 @@ describe('RRule', function () { datetime(1997, 9, 3, 0, 0, 0), datetime(1997, 9, 3, 0, 0, 1), datetime(1997, 9, 3, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthAndMonthDay', @@ -3418,8 +3418,8 @@ describe('RRule', function () { datetime(1998, 1, 5, 0, 0, 0), datetime(1998, 1, 5, 0, 0, 1), datetime(1998, 1, 5, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByWeekDay', @@ -3433,8 +3433,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 1), datetime(1997, 9, 2, 9, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByNWeekDay', @@ -3448,8 +3448,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 0), datetime(1997, 9, 2, 9, 0, 1), datetime(1997, 9, 2, 9, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthAndWeekDay', @@ -3464,8 +3464,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthAndNWeekDay', @@ -3480,8 +3480,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthDayAndWeekDay', @@ -3496,8 +3496,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthAndMonthDayAndWeekDay', @@ -3513,8 +3513,8 @@ describe('RRule', function () { datetime(1998, 1, 1, 0, 0, 0), datetime(1998, 1, 1, 0, 0, 1), datetime(1998, 1, 1, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByYearDay', @@ -3529,8 +3529,8 @@ describe('RRule', function () { datetime(1997, 12, 31, 0, 0, 1), datetime(1997, 12, 31, 0, 0, 2), datetime(1997, 12, 31, 0, 0, 3), - ] - ) + ], + ); testRecurring( 'testSecondlyByYearDayNeg', @@ -3545,8 +3545,8 @@ describe('RRule', function () { datetime(1997, 12, 31, 0, 0, 1), datetime(1997, 12, 31, 0, 0, 2), datetime(1997, 12, 31, 0, 0, 3), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthAndYearDay', @@ -3562,8 +3562,8 @@ describe('RRule', function () { datetime(1998, 4, 10, 0, 0, 1), datetime(1998, 4, 10, 0, 0, 2), datetime(1998, 4, 10, 0, 0, 3), - ] - ) + ], + ); testRecurring( 'testSecondlyByMonthAndYearDayNeg', @@ -3579,8 +3579,8 @@ describe('RRule', function () { datetime(1998, 4, 10, 0, 0, 1), datetime(1998, 4, 10, 0, 0, 2), datetime(1998, 4, 10, 0, 0, 3), - ] - ) + ], + ); testRecurring( 'testSecondlyByWeekNo', @@ -3594,8 +3594,8 @@ describe('RRule', function () { datetime(1998, 5, 11, 0, 0, 0), datetime(1998, 5, 11, 0, 0, 1), datetime(1998, 5, 11, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByWeekNoAndWeekDay', @@ -3610,8 +3610,8 @@ describe('RRule', function () { datetime(1997, 12, 29, 0, 0, 0), datetime(1997, 12, 29, 0, 0, 1), datetime(1997, 12, 29, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByWeekNoAndWeekDayLarge', @@ -3626,8 +3626,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 0, 0, 0), datetime(1997, 12, 28, 0, 0, 1), datetime(1997, 12, 28, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByWeekNoAndWeekDayLast', @@ -3642,8 +3642,8 @@ describe('RRule', function () { datetime(1997, 12, 28, 0, 0, 0), datetime(1997, 12, 28, 0, 0, 1), datetime(1997, 12, 28, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByWeekNoAndWeekDay53', @@ -3658,8 +3658,8 @@ describe('RRule', function () { datetime(1998, 12, 28, 0, 0, 0), datetime(1998, 12, 28, 0, 0, 1), datetime(1998, 12, 28, 0, 0, 2), - ] - ) + ], + ); testRecurring.skip( 'testSecondlyByEaster', @@ -3673,8 +3673,8 @@ describe('RRule', function () { datetime(1998, 4, 12, 0, 0, 0), datetime(1998, 4, 12, 0, 0, 1), datetime(1998, 4, 12, 0, 0, 2), - ] - ) + ], + ); testRecurring.skip( 'testSecondlyByEasterPos', @@ -3688,8 +3688,8 @@ describe('RRule', function () { datetime(1998, 4, 13, 0, 0, 0), datetime(1998, 4, 13, 0, 0, 1), datetime(1998, 4, 13, 0, 0, 2), - ] - ) + ], + ); testRecurring.skip( 'testSecondlyByEasterNeg', @@ -3703,8 +3703,8 @@ describe('RRule', function () { datetime(1998, 4, 11, 0, 0, 0), datetime(1998, 4, 11, 0, 0, 1), datetime(1998, 4, 11, 0, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByHour', @@ -3718,8 +3718,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 0), datetime(1997, 9, 2, 18, 0, 1), datetime(1997, 9, 2, 18, 0, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByMinute', @@ -3733,8 +3733,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 0), datetime(1997, 9, 2, 9, 6, 1), datetime(1997, 9, 2, 9, 6, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyBySecond', @@ -3748,8 +3748,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0, 6), datetime(1997, 9, 2, 9, 0, 18), datetime(1997, 9, 2, 9, 1, 6), - ] - ) + ], + ); testRecurring( 'testSecondlyByHourAndMinute', @@ -3764,8 +3764,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 0), datetime(1997, 9, 2, 18, 6, 1), datetime(1997, 9, 2, 18, 6, 2), - ] - ) + ], + ); testRecurring( 'testSecondlyByHourAndSecond', @@ -3780,8 +3780,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 0, 6), datetime(1997, 9, 2, 18, 0, 18), datetime(1997, 9, 2, 18, 1, 6), - ] - ) + ], + ); testRecurring( 'testSecondlyByMinuteAndSecond', @@ -3796,8 +3796,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 6, 6), datetime(1997, 9, 2, 9, 6, 18), datetime(1997, 9, 2, 9, 18, 6), - ] - ) + ], + ); testRecurring( 'testSecondlyByHourAndMinuteAndSecond', @@ -3813,8 +3813,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 18, 6, 6), datetime(1997, 9, 2, 18, 6, 18), datetime(1997, 9, 2, 18, 18, 6), - ] - ) + ], + ); testRecurring( 'testUntilNotMatching', @@ -3828,8 +3828,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), - ] - ) + ], + ); testRecurring( 'testUntilMatching', @@ -3843,8 +3843,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), - ] - ) + ], + ); testRecurring( 'testUntilSingle', @@ -3854,8 +3854,8 @@ describe('RRule', function () { dtstart: parse('19970902T090000'), until: parse('19970902T090000'), }), - [datetime(1997, 9, 2, 9, 0)] - ) + [datetime(1997, 9, 2, 9, 0)], + ); testRecurring( 'testUntilEmpty', @@ -3865,8 +3865,8 @@ describe('RRule', function () { dtstart: parse('19970902T090000'), until: parse('19970901T090000'), }), - [] - ) + [], + ); testRecurring( 'testUntilWithDate', @@ -3880,8 +3880,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), - ] - ) + ], + ); testRecurring( 'testWkStIntervalMO', @@ -3897,8 +3897,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 7, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testWkStIntervalSU', @@ -3914,8 +3914,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 14, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testDTStartIsDate', @@ -3924,8 +3924,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 0, 0), datetime(1997, 9, 3, 0, 0), datetime(1997, 9, 4, 0, 0), - ] - ) + ], + ); testRecurring( 'testDTStartWithMicroseconds', @@ -3938,8 +3938,8 @@ describe('RRule', function () { datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 3, 9, 0), datetime(1997, 9, 4, 9, 0), - ] - ) + ], + ); testRecurring( 'testMaxYear', @@ -3950,8 +3950,8 @@ describe('RRule', function () { bymonthday: 31, dtstart: parse('99970902T090000'), }), - [] - ) + [], + ); testRecurring( 'testSubsecondStartYearly', @@ -3960,8 +3960,8 @@ describe('RRule', function () { count: 1, dtstart: new Date(1420063200001), }), - [new Date(1420063200001)] - ) + [new Date(1420063200001)], + ); testRecurring( 'testSubsecondStartMonthlyByMonthDay', @@ -3971,30 +3971,30 @@ describe('RRule', function () { bysetpos: [-1, 1], dtstart: new Date(1356991200001), }), - [new Date(1356991200001)] - ) + [new Date(1356991200001)], + ); - it('testAfterBefore', function () { - ;( + it('testAfterBefore', () => { + ( ['YEARLY', 'MONTHLY', 'DAILY', 'HOURLY', 'MINUTELY', 'SECONDLY'] as const - ).forEach(function (freqStr: keyof typeof Frequency) { - const date = new Date(1356991200001) + ).forEach((freqStr: keyof typeof Frequency) => { + const date = new Date(1356991200001); const rr = new RRule({ freq: RRule[freqStr], dtstart: date, - }) + }); - expect(date.getTime()).toBe(rr.options.dtstart.getTime()) - const res: Date = rr.before(rr.after(rr.options.dtstart)) + expect(date.getTime()).toBe(rr.options.dtstart.getTime()); + const res: Date = rr.before(rr.after(rr.options.dtstart)); - let resTimestamp: number - if (res != null) resTimestamp = res.getTime() - expect(resTimestamp).toBe(rr.options.dtstart.getTime()) - }) - }) + let resTimestamp: number; + if (res != null) resTimestamp = res.getTime(); + expect(resTimestamp).toBe(rr.options.dtstart.getTime()); + }); + }); - it('testConvertAndBack', function () { - ;[6, RRule.SU].forEach(function (wkst) { + it('testConvertAndBack', () => { + [6, RRule.SU].forEach((wkst) => { const rr = new RRule({ dtstart: datetime(2017, 10, 17, 0, 30, 0), until: datetime(2017, 12, 22, 1, 30, 0), @@ -4014,19 +4014,19 @@ describe('RRule', function () { byhour: 11, byminute: 0, bysecond: 0, - }) + }); - const rrstr = rr.toString() + const rrstr = rr.toString(); expect(rrstr).toBe( - 'DTSTART:20171017T003000Z\nRRULE:UNTIL=20171222T013000Z;FREQ=MONTHLY;INTERVAL=1;BYSETPOS=17;BYDAY=SU,MO,TU,WE,TH,FR,SA;WKST=SU;BYHOUR=11;BYMINUTE=0;BYSECOND=0' - ) - const newrr = RRule.fromString(rrstr) - expect(rrstr).toBe(newrr.toString()) - }) - }) - - it('testByHourValues', function () { - ;[ + 'DTSTART:20171017T003000Z\nRRULE:UNTIL=20171222T013000Z;FREQ=MONTHLY;INTERVAL=1;BYSETPOS=17;BYDAY=SU,MO,TU,WE,TH,FR,SA;WKST=SU;BYHOUR=11;BYMINUTE=0;BYSECOND=0', + ); + const newrr = RRule.fromString(rrstr); + expect(rrstr).toBe(newrr.toString()); + }); + }); + + it('testByHourValues', () => { + [ [ 'DTSTART:20171101T010000Z\nRRULE:UNTIL=20171214T013000Z;FREQ=DAILY;INTERVAL=2;WKST=MO;BYHOUR=11,12;BYMINUTE=30;BYSECOND=0', 'every 2 days at 11 and 12 until December 13, 2017', @@ -4035,18 +4035,18 @@ describe('RRule', function () { 'DTSTART:20171101T010000Z\nRRULE:UNTIL=20171214T013000Z;FREQ=DAILY;INTERVAL=2;WKST=MO;BYHOUR=11;BYMINUTE=30;BYSECOND=0', 'every 2 days at 11 until December 13, 2017', ], - ].forEach(function (pair) { - const rule = pair[0] - const rr = RRule.fromString(rule) - expect(rr.toText()).toBeTruthy() + ].forEach((pair) => { + const rule = pair[0]; + const rr = RRule.fromString(rule); + expect(rr.toText()).toBeTruthy(); // assert.equal(rr.toText(), pair[1]) -- can't test this because it reports in local time which varies by machine - }) - }) + }); + }); it('calculates daily recurrences correctly across DST boundaries', () => { const rrule = RRule.fromString( - 'DTSTART=20181101T110000Z;UNTIL=20181106T110000Z;FREQ=DAILY' - ) + 'DTSTART=20181101T110000Z;UNTIL=20181106T110000Z;FREQ=DAILY', + ); expect(rrule.all()).toEqual([ new Date('2018-11-01T11:00:00.000Z'), new Date('2018-11-02T11:00:00.000Z'), @@ -4054,19 +4054,19 @@ describe('RRule', function () { new Date('2018-11-04T11:00:00.000Z'), new Date('2018-11-05T11:00:00.000Z'), new Date('2018-11-06T11:00:00.000Z'), - ]) - }) + ]); + }); it('calculates weekly recurrences correctly across DST boundaries', () => { const rrule = RRule.fromString( - 'DTSTART=20181031T180000Z\nRRULE:FREQ=WEEKLY;UNTIL=20181115T050000Z' - ) + 'DTSTART=20181031T180000Z\nRRULE:FREQ=WEEKLY;UNTIL=20181115T050000Z', + ); expect(rrule.all()).toEqual([ new Date('2018-10-31T18:00:00.000Z'), new Date('2018-11-07T18:00:00.000Z'), new Date('2018-11-14T18:00:00.000Z'), - ]) - }) + ]); + }); it('calculates byweekday recurrences correctly across DST boundaries', () => { const rule = new RRule({ @@ -4075,25 +4075,25 @@ describe('RRule', function () { interval: 1, byweekday: [RRule.SU, RRule.WE], until: datetime(2018, 10, 9, 0, 0, 0), - }) + }); expect(rule.all()).toEqual([ new Date('2018-09-30T00:00:00.000Z'), new Date('2018-10-03T00:00:00.000Z'), new Date('2018-10-07T00:00:00.000Z'), - ]) - }) + ]); + }); it('generates weekly events (#247)', () => { - const startEvent = 1533895200000 - const endSearch = 1543618799999 + const startEvent = 1533895200000; + const endSearch = 1543618799999; const rrule = new RRule({ freq: RRule.WEEKLY, interval: 1, dtstart: new Date(startEvent), until: new Date(endSearch), - }) + }); expect(rrule.all()).toEqual([ new Date('2018-08-10T10:00:00.000Z'), @@ -4113,137 +4113,137 @@ describe('RRule', function () { new Date('2018-11-16T10:00:00.000Z'), new Date('2018-11-23T10:00:00.000Z'), new Date('2018-11-30T10:00:00.000Z'), - ]) - }) + ]); + }); it('generates monthly (#233)', () => { - const start = new Date(Date.parse('Mon Aug 06 2018 10:30:00 GMT+0530')) - const end = new Date(Date.parse('Mon Oct 08 2018 11:00:00 GMT+0530')) + const start = new Date(Date.parse('Mon Aug 06 2018 10:30:00 GMT+0530')); + const end = new Date(Date.parse('Mon Oct 08 2018 11:00:00 GMT+0530')); const rrule = new RRule({ freq: RRule.MONTHLY, interval: 1, dtstart: start, until: end, - }) + }); expect(rrule.all()).toEqual([ new Date('2018-08-06T05:00:00.000Z'), new Date('2018-09-06T05:00:00.000Z'), new Date('2018-10-06T05:00:00.000Z'), - ]) - }) + ]); + }); it('generates around dst (#249)', () => { const ruleString = - 'DTSTART:20181101T120000Z\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR;COUNT=4;WKST=SU' - const rrule = RRule.fromString(ruleString) + 'DTSTART:20181101T120000Z\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR;COUNT=4;WKST=SU'; + const rrule = RRule.fromString(ruleString); expect(rrule.all()).toEqual([ new Date('2018-11-02T12:00:00.000Z'), new Date('2018-11-05T12:00:00.000Z'), new Date('2018-11-07T12:00:00.000Z'), new Date('2018-11-09T12:00:00.000Z'), - ]) - }) + ]); + }); it('handles 3-digit years properly (#202)', () => { const rrule = new RRule({ count: 1, dtstart: datetime(990, 1, 1, 0, 0, 0), - }) - const ruleString = rrule.toString() - const rrule2 = RRule.fromString(ruleString) + }); + const ruleString = rrule.toString(); + const rrule2 = RRule.fromString(ruleString); - expect(ruleString).toBe('DTSTART:09900101T000000Z\nRRULE:COUNT=1') - expect(rrule2.count()).toBe(1) - expect(rrule2.all()).toEqual([datetime(990, 1, 1, 0, 0, 0)]) - }) + expect(ruleString).toBe('DTSTART:09900101T000000Z\nRRULE:COUNT=1'); + expect(rrule2.count()).toBe(1); + expect(rrule2.all()).toEqual([datetime(990, 1, 1, 0, 0, 0)]); + }); describe('time zones, when recurrence is in dst', () => { - const targetZone = 'America/Los_Angeles' - const startDate = datetime(2013, 8, 6, 11, 0, 0) - const dtstart = startDate + const targetZone = 'America/Los_Angeles'; + const startDate = datetime(2013, 8, 6, 11, 0, 0); + const dtstart = startDate; it('generates correct recurrences when current time is standard time', () => { - const currentLocalDate = new Date(2013, 1, 6, 11, 0, 0) - setMockDate(currentLocalDate) + const currentLocalDate = new Date(2013, 1, 6, 11, 0, 0); + setMockDate(currentLocalDate); const rule = new RRule({ dtstart, count: 1, tzid: targetZone, - }) - const recurrence = rule.all()[0] - const expected = expectedDate(startDate, currentLocalDate, targetZone) + }); + const recurrence = rule.all()[0]; + const expected = expectedDate(startDate, currentLocalDate, targetZone); - expect(recurrence).toEqual(expected) + expect(recurrence).toEqual(expected); - resetMockDate() - }) + resetMockDate(); + }); it('generates correct recurrences when current time is dst', () => { - const currentLocalDate = new Date(2013, 7, 6, 11, 0, 0) - setMockDate(currentLocalDate) + const currentLocalDate = new Date(2013, 7, 6, 11, 0, 0); + setMockDate(currentLocalDate); const rule = new RRule({ dtstart, count: 1, tzid: targetZone, - }) - const recurrence = rule.all()[0] - const expected = expectedDate(startDate, currentLocalDate, targetZone) + }); + const recurrence = rule.all()[0]; + const expected = expectedDate(startDate, currentLocalDate, targetZone); - expect(recurrence).toEqual(expected) + expect(recurrence).toEqual(expected); - resetMockDate() - }) + resetMockDate(); + }); it('generates correct recurrences using after and current time is standard time', () => { - const currentLocalDate = new Date(2013, 1, 6, 11, 0, 0) - setMockDate(currentLocalDate) + const currentLocalDate = new Date(2013, 1, 6, 11, 0, 0); + setMockDate(currentLocalDate); const rule = new RRule({ dtstart, count: 1, tzid: targetZone, - }) - const recurrence = rule.after(new Date(0)) - const expected = expectedDate(startDate, currentLocalDate, targetZone) + }); + const recurrence = rule.after(new Date(0)); + const expected = expectedDate(startDate, currentLocalDate, targetZone); - expect(recurrence).toEqual(expected) + expect(recurrence).toEqual(expected); - resetMockDate() - }) - }) + resetMockDate(); + }); + }); it('throws an error when dtstart is invalid', () => { - const invalidDate = new Date(undefined) - const validDate = datetime(2017, 1, 1) + const invalidDate = new Date(undefined); + const validDate = datetime(2017, 1, 1); expect(() => new RRule({ dtstart: invalidDate })).toThrow( - 'Invalid options: dtstart' - ) + 'Invalid options: dtstart', + ); expect(() => new RRule({ dtstart: validDate, until: invalidDate })).toThrow( - 'Invalid options: until' - ) + 'Invalid options: until', + ); const rule = new RRule({ dtstart: datetime(2017, 1, 1), freq: Frequency.DAILY, interval: 1, - }) + }); expect(() => rule.after(invalidDate)).toThrow( - 'Invalid date passed in to RRule.after' - ) + 'Invalid date passed in to RRule.after', + ); expect(() => rule.before(invalidDate)).toThrow( - 'Invalid date passed in to RRule.before' - ) + 'Invalid date passed in to RRule.before', + ); expect(() => rule.between(invalidDate, validDate)).toThrow( - 'Invalid date passed in to RRule.between' - ) + 'Invalid date passed in to RRule.between', + ); expect(() => rule.between(validDate, invalidDate)).toThrow( - 'Invalid date passed in to RRule.between' - ) - }) -}) + 'Invalid date passed in to RRule.between', + ); + }); +}); diff --git a/test/rruleset.test.ts b/test/rruleset.test.ts index 1534d9b77..867eab133 100644 --- a/test/rruleset.test.ts +++ b/test/rruleset.test.ts @@ -1,463 +1,403 @@ +import { reset as resetMockDate, set as setMockDate } from 'mockdate'; +import { Frequency, RRule, RRuleSet, rrulestr } from '../src'; import { - parse, datetime, - testRecurring, expectedDate, + parse, TEST_CTX, -} from './lib/utils' -import { RRule, RRuleSet, rrulestr, Frequency } from '../src' -import { set as setMockDate, reset as resetMockDate } from 'mockdate' + testRecurring, +} from './lib/utils'; -describe('RRuleSet', function () { +describe('RRuleSet', () => { beforeAll(() => { // Enable additional toString() / fromString() tests // for each testRecurring(). - TEST_CTX.ALSO_TESTSTRING_FUNCTIONS = false + TEST_CTX.ALSO_TESTSTRING_FUNCTIONS = false; // Enable additional toText() / fromText() tests // for each testRecurring(). // Many of the tests fail because the conversion is only approximate, // but it gives an idea about how well or bad it converts. - TEST_CTX.ALSO_TESTNLP_FUNCTIONS = false + TEST_CTX.ALSO_TESTNLP_FUNCTIONS = false; // Thorough after()/before()/between() tests. // NOTE: can take a longer time. - TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN = false - - TEST_CTX.ALSO_TESTSUBSECOND_PRECISION = false - }) + TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN = false; - testRecurring( - 'testSet', - function () { - const set = new RRuleSet() + TEST_CTX.ALSO_TESTSUBSECOND_PRECISION = false; + }); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 2, - byweekday: RRule.TU, - dtstart: parse('19970902T090000'), - }) - ) - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 1, - byweekday: RRule.TH, - dtstart: parse('19970902T090000'), - }) - ) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 4, 9, 0), - datetime(1997, 9, 9, 9, 0), - ] - ) - - testRecurring( - 'testSetDate', - function () { - const set = new RRuleSet() + testRecurring('testSet', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 1, - byweekday: RRule.TU, - dtstart: parse('19970902T090000'), - }) - ) - set.rdate(datetime(1997, 9, 4, 9)) - set.rdate(datetime(1997, 9, 9, 9)) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 4, 9, 0), - datetime(1997, 9, 9, 9, 0), - ] - ) - - testRecurring( - 'testSetExRule', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 2, + byweekday: RRule.TU, + dtstart: parse('19970902T090000'), + }), + ); + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 1, + byweekday: RRule.TH, + dtstart: parse('19970902T090000'), + }), + ); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0), + ]); + + testRecurring('testSetDate', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 6, - byweekday: [RRule.TU, RRule.TH], - dtstart: parse('19970902T090000'), - }) - ) - set.exrule( - new RRule({ - freq: RRule.YEARLY, - count: 3, - byweekday: RRule.TH, - dtstart: parse('19970902T090000'), - }) - ) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 9, 9, 0), - datetime(1997, 9, 16, 9, 0), - ] - ) - - testRecurring( - 'testSetExDate', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 1, + byweekday: RRule.TU, + dtstart: parse('19970902T090000'), + }), + ); + set.rdate(datetime(1997, 9, 4, 9)); + set.rdate(datetime(1997, 9, 9, 9)); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0), + ]); + + testRecurring('testSetExRule', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 6, - byweekday: [RRule.TU, RRule.TH], - dtstart: parse('19970902T090000'), - }) - ) - set.exdate(datetime(1997, 9, 4, 9)) - set.exdate(datetime(1997, 9, 11, 9)) - set.exdate(datetime(1997, 9, 18, 9)) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 9, 9, 0), - datetime(1997, 9, 16, 9, 0), - ] - ) - - testRecurring( - 'testSetExDateRevOrder', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 6, + byweekday: [RRule.TU, RRule.TH], + dtstart: parse('19970902T090000'), + }), + ); + set.exrule( + new RRule({ + freq: RRule.YEARLY, + count: 3, + byweekday: RRule.TH, + dtstart: parse('19970902T090000'), + }), + ); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0), + ]); + + testRecurring('testSetExDate', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.MONTHLY, - count: 5, - bymonthday: 10, - dtstart: parse('20040101T090000'), - }) - ) - set.exdate(datetime(2004, 4, 10, 9, 0)) - set.exdate(datetime(2004, 2, 10, 9, 0)) - return set - }, - [ - datetime(2004, 1, 10, 9, 0), - datetime(2004, 3, 10, 9, 0), - datetime(2004, 5, 10, 9, 0), - ] - ) - - testRecurring( - 'testSetDateAndExDate', - function () { - const set = new RRuleSet() - - set.rdate(datetime(1997, 9, 2, 9)) - set.rdate(datetime(1997, 9, 4, 9)) - set.rdate(datetime(1997, 9, 9, 9)) - set.rdate(datetime(1997, 9, 11, 9)) - set.rdate(datetime(1997, 9, 16, 9)) - set.rdate(datetime(1997, 9, 18, 9)) - set.exdate(datetime(1997, 9, 4, 9)) - set.exdate(datetime(1997, 9, 11, 9)) - set.exdate(datetime(1997, 9, 18, 9)) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 9, 9, 0), - datetime(1997, 9, 16, 9, 0), - ] - ) - - testRecurring( - 'testSetDateAndExRule', - function () { - const set = new RRuleSet() - - set.rdate(datetime(1997, 9, 2, 9)) - set.rdate(datetime(1997, 9, 4, 9)) - set.rdate(datetime(1997, 9, 9, 9)) - set.rdate(datetime(1997, 9, 11, 9)) - set.rdate(datetime(1997, 9, 16, 9)) - set.rdate(datetime(1997, 9, 18, 9)) - set.exrule( - new RRule({ - freq: RRule.YEARLY, - count: 3, - byweekday: RRule.TH, - dtstart: parse('19970902T090000'), - }) - ) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 9, 9, 0), - datetime(1997, 9, 16, 9, 0), - ] - ) - - testRecurring( - 'testSetCachePre', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 6, + byweekday: [RRule.TU, RRule.TH], + dtstart: parse('19970902T090000'), + }), + ); + set.exdate(datetime(1997, 9, 4, 9)); + set.exdate(datetime(1997, 9, 11, 9)); + set.exdate(datetime(1997, 9, 18, 9)); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0), + ]); + + testRecurring('testSetExDateRevOrder', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 2, - byweekday: RRule.TU, - dtstart: parse('19970902T090000'), - }) - ) - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 1, - byweekday: RRule.TH, - dtstart: parse('19970902T090000'), - }) - ) - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 4, 9, 0), - datetime(1997, 9, 9, 9, 0), - ] - ) - - testRecurring( - 'testSetCachePost', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.MONTHLY, + count: 5, + bymonthday: 10, + dtstart: parse('20040101T090000'), + }), + ); + set.exdate(datetime(2004, 4, 10, 9, 0)); + set.exdate(datetime(2004, 2, 10, 9, 0)); + return set; + }, [ + datetime(2004, 1, 10, 9, 0), + datetime(2004, 3, 10, 9, 0), + datetime(2004, 5, 10, 9, 0), + ]); + + testRecurring('testSetDateAndExDate', () => { + const set = new RRuleSet(); + + set.rdate(datetime(1997, 9, 2, 9)); + set.rdate(datetime(1997, 9, 4, 9)); + set.rdate(datetime(1997, 9, 9, 9)); + set.rdate(datetime(1997, 9, 11, 9)); + set.rdate(datetime(1997, 9, 16, 9)); + set.rdate(datetime(1997, 9, 18, 9)); + set.exdate(datetime(1997, 9, 4, 9)); + set.exdate(datetime(1997, 9, 11, 9)); + set.exdate(datetime(1997, 9, 18, 9)); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0), + ]); + + testRecurring('testSetDateAndExRule', () => { + const set = new RRuleSet(); + + set.rdate(datetime(1997, 9, 2, 9)); + set.rdate(datetime(1997, 9, 4, 9)); + set.rdate(datetime(1997, 9, 9, 9)); + set.rdate(datetime(1997, 9, 11, 9)); + set.rdate(datetime(1997, 9, 16, 9)); + set.rdate(datetime(1997, 9, 18, 9)); + set.exrule( + new RRule({ + freq: RRule.YEARLY, + count: 3, + byweekday: RRule.TH, + dtstart: parse('19970902T090000'), + }), + ); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 9, 9, 0), + datetime(1997, 9, 16, 9, 0), + ]); + + testRecurring('testSetCachePre', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 2, - byweekday: RRule.TU, - dtstart: parse('19970902T090000'), - }) - ) - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 1, - byweekday: RRule.TH, - dtstart: parse('19970902T090000'), - }) - ) - set.all() - return set - }, - [ - datetime(1997, 9, 2, 9, 0), - datetime(1997, 9, 4, 9, 0), - datetime(1997, 9, 9, 9, 0), - ] - ) - - testRecurring( - 'testSetInfiniteAll', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 2, + byweekday: RRule.TU, + dtstart: parse('19970902T090000'), + }), + ); + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 1, + byweekday: RRule.TH, + dtstart: parse('19970902T090000'), + }), + ); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0), + ]); + + testRecurring('testSetCachePost', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - dtstart: parse('19970902T090000'), - }) - ) - set.exrule( - new RRule({ - freq: RRule.YEARLY, - count: 10, - dtstart: parse('19970902T090000'), - }) - ) + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 2, + byweekday: RRule.TU, + dtstart: parse('19970902T090000'), + }), + ); + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 1, + byweekday: RRule.TH, + dtstart: parse('19970902T090000'), + }), + ); + set.all(); + return set; + }, [ + datetime(1997, 9, 2, 9, 0), + datetime(1997, 9, 4, 9, 0), + datetime(1997, 9, 9, 9, 0), + ]); + + testRecurring('testSetInfiniteAll', () => { + const set = new RRuleSet(); - return { - rrule: set, - method: 'all', - args: [ - function (_: unknown, count: number) { - return count < 3 - }, - ], - } - }, - [ - datetime(2007, 9, 2, 9, 0), - datetime(2008, 9, 2, 9, 0), - datetime(2009, 9, 2, 9, 0), - ] - ) - - testRecurring( - 'testSetInfiniteBetween', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + dtstart: parse('19970902T090000'), + }), + ); + set.exrule( + new RRule({ + freq: RRule.YEARLY, + count: 10, + dtstart: parse('19970902T090000'), + }), + ); + + return { + rrule: set, + method: 'all', + args: [(_: unknown, count: number) => count < 3], + }; + }, [ + datetime(2007, 9, 2, 9, 0), + datetime(2008, 9, 2, 9, 0), + datetime(2009, 9, 2, 9, 0), + ]); + + testRecurring('testSetInfiniteBetween', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - dtstart: parse('19970902T090000'), - }) - ) - set.exrule( - new RRule({ - freq: RRule.YEARLY, - count: 10, - dtstart: parse('19970902T090000'), - }) - ) - return { - rrule: set, - method: 'between', - args: [datetime(2000, 9, 2, 9, 0), datetime(2010, 9, 2, 9, 0)], - } - }, - [ - datetime(2007, 9, 2, 9, 0), - datetime(2008, 9, 2, 9, 0), - datetime(2009, 9, 2, 9, 0), - ] - ) - - testRecurring( - 'testSetInfiniteBefore', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + dtstart: parse('19970902T090000'), + }), + ); + set.exrule( + new RRule({ + freq: RRule.YEARLY, + count: 10, + dtstart: parse('19970902T090000'), + }), + ); + return { + rrule: set, + method: 'between', + args: [datetime(2000, 9, 2, 9, 0), datetime(2010, 9, 2, 9, 0)], + }; + }, [ + datetime(2007, 9, 2, 9, 0), + datetime(2008, 9, 2, 9, 0), + datetime(2009, 9, 2, 9, 0), + ]); + + testRecurring('testSetInfiniteBefore', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - dtstart: parse('19970902T090000'), - }) - ) - set.exrule( - new RRule({ - freq: RRule.YEARLY, - count: 10, - dtstart: parse('19970902T090000'), - }) - ) - return { - rrule: set, - method: 'before', - args: [datetime(2015, 9, 2, 9, 0), false], - } - }, - [datetime(2014, 9, 2, 9, 0)] - ) - - testRecurring( - 'testSetInfiniteAfter', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + dtstart: parse('19970902T090000'), + }), + ); + set.exrule( + new RRule({ + freq: RRule.YEARLY, + count: 10, + dtstart: parse('19970902T090000'), + }), + ); + return { + rrule: set, + method: 'before', + args: [datetime(2015, 9, 2, 9, 0), false], + }; + }, [datetime(2014, 9, 2, 9, 0)]); + + testRecurring('testSetInfiniteAfter', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - dtstart: parse('19970902T090000'), - }) - ) - set.exrule( - new RRule({ - freq: RRule.YEARLY, - count: 10, - dtstart: parse('19970902T090000'), - }) - ) - return { - rrule: set, - method: 'after', - args: [datetime(2000, 9, 2, 9, 0), false], - } - }, - [datetime(2007, 9, 2, 9, 0)] - ) - - testRecurring( - 'testBefore70', - function () { - const set = new RRuleSet() + set.rrule( + new RRule({ + freq: RRule.YEARLY, + dtstart: parse('19970902T090000'), + }), + ); + set.exrule( + new RRule({ + freq: RRule.YEARLY, + count: 10, + dtstart: parse('19970902T090000'), + }), + ); + return { + rrule: set, + method: 'after', + args: [datetime(2000, 9, 2, 9, 0), false], + }; + }, [datetime(2007, 9, 2, 9, 0)]); + + testRecurring('testBefore70', () => { + const set = new RRuleSet(); - set.rrule( - new RRule({ - freq: RRule.YEARLY, - count: 2, - dtstart: parse('19600101T090000'), - }) - ) - return { - rrule: set, - method: 'all', - } - }, - [datetime(1960, 1, 1, 9, 0), datetime(1961, 1, 1, 9, 0)] - ) + set.rrule( + new RRule({ + freq: RRule.YEARLY, + count: 2, + dtstart: parse('19600101T090000'), + }), + ); + return { + rrule: set, + method: 'all', + }; + }, [datetime(1960, 1, 1, 9, 0), datetime(1961, 1, 1, 9, 0)]); describe('valueOf', () => { it('generates rrule strings correctly', () => { - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ freq: RRule.YEARLY, count: 2, dtstart: parse('19600101T090000'), - }) - ) + }), + ); expect(set.valueOf()).toEqual([ 'DTSTART:19600101T090000Z', 'RRULE:FREQ=YEARLY;COUNT=2', - ]) - }) + ]); + }); it('generates multiline rules', () => { - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ freq: RRule.YEARLY, count: 2, dtstart: parse('19600101T090000'), - }) - ) + }), + ); set.rrule( new RRule({ freq: RRule.WEEKLY, count: 3, - }) - ) + }), + ); expect(set.valueOf()).toEqual([ 'DTSTART:19600101T090000Z', 'RRULE:FREQ=YEARLY;COUNT=2', 'RRULE:FREQ=WEEKLY;COUNT=3', - ]) - }) + ]); + }); it('generates rules with tzid', () => { - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ @@ -465,25 +405,25 @@ describe('RRuleSet', function () { count: 2, dtstart: parse('19600101T090000'), tzid: 'America/New_York', - }) - ) + }), + ); set.rrule( new RRule({ freq: RRule.WEEKLY, count: 3, - }) - ) + }), + ); expect(set.valueOf()).toEqual([ 'DTSTART;TZID=America/New_York:19600101T090000', 'RRULE:FREQ=YEARLY;COUNT=2', 'RRULE:FREQ=WEEKLY;COUNT=3', - ]) - }) + ]); + }); it('generates a value with RDATE with tzid', () => { - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ @@ -491,56 +431,56 @@ describe('RRuleSet', function () { count: 2, dtstart: parse('19600101T090000'), tzid: 'America/New_York', - }) - ) + }), + ); - set.rdate(parse('19610201T090000')) + set.rdate(parse('19610201T090000')); - set.rdate(parse('19610301T090000')) + set.rdate(parse('19610301T090000')); expect(set.valueOf()).toEqual([ 'DTSTART;TZID=America/New_York:19600101T090000', 'RRULE:FREQ=YEARLY;COUNT=2', 'RDATE;TZID=America/New_York:19610201T090000,19610301T090000', - ]) - }) + ]); + }); it('generates a string with RDATE with TZID when no RRULE is present', () => { - const set = new RRuleSet() + const set = new RRuleSet(); - set.tzid('America/New_York') + set.tzid('America/New_York'); - set.rdate(parse('19610201T090000')) + set.rdate(parse('19610201T090000')); - set.rdate(parse('19610301T090000')) + set.rdate(parse('19610301T090000')); expect(set.toString()).toEqual( - 'RDATE;TZID=America/New_York:19610201T090000,19610301T090000' - ) - }) + 'RDATE;TZID=America/New_York:19610201T090000,19610301T090000', + ); + }); it('generates a string with RDATE in UTC when no RRULE is present', () => { - const set = new RRuleSet() + const set = new RRuleSet(); - set.tzid('UTC') + set.tzid('UTC'); - set.rdate(parse('19610201T090000')) + set.rdate(parse('19610201T090000')); - set.rdate(parse('19610301T090000')) + set.rdate(parse('19610301T090000')); - expect(set.toString()).toEqual('RDATE:19610201T090000Z,19610301T090000Z') - }) + expect(set.toString()).toEqual('RDATE:19610201T090000Z,19610301T090000Z'); + }); it('parses RDATE strings without an RRULE', () => { const set = rrulestr( - 'RDATE;TZID=America/New_York:19610201T090000,19610301T090000' - ) as RRuleSet - expect(set).toBeInstanceOf(RRuleSet) - expect(set.tzid()).toBe('America/New_York') - }) + 'RDATE;TZID=America/New_York:19610201T090000,19610301T090000', + ) as RRuleSet; + expect(set).toBeInstanceOf(RRuleSet); + expect(set.tzid()).toBe('America/New_York'); + }); it('generates EXDATE with tzid', () => { - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ @@ -548,26 +488,26 @@ describe('RRuleSet', function () { count: 2, dtstart: parse('19600101T090000'), tzid: 'America/New_York', - }) - ) + }), + ); - set.exdate(parse('19610201T090000')) + set.exdate(parse('19610201T090000')); - set.exdate(parse('19610301T090000')) + set.exdate(parse('19610301T090000')); expect(set.valueOf()).toEqual([ 'DTSTART;TZID=America/New_York:19600101T090000', 'RRULE:FREQ=YEARLY;COUNT=2', 'EXDATE;TZID=America/New_York:19610201T090000,19610301T090000', - ]) - }) + ]); + }); it('generates correcty zoned recurrences when a tzid is present', () => { - const targetZone = 'America/New_York' - const currentLocalDate = new Date(2000, 1, 6, 11, 0, 0) - setMockDate(currentLocalDate) + const targetZone = 'America/New_York'; + const currentLocalDate = new Date(2000, 1, 6, 11, 0, 0); + setMockDate(currentLocalDate); - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ @@ -575,170 +515,176 @@ describe('RRuleSet', function () { count: 4, dtstart: datetime(2000, 1, 1, 9, 0, 0), tzid: targetZone, - }) - ) + }), + ); - set.exdate(datetime(2001, 1, 1, 9, 0, 0)) + set.exdate(datetime(2001, 1, 1, 9, 0, 0)); - set.rdate(datetime(2002, 3, 1, 9, 0, 0)) + set.rdate(datetime(2002, 3, 1, 9, 0, 0)); expect(set.all()).toEqual([ expectedDate( datetime(2000, 1, 1, 9, 0, 0), currentLocalDate, - targetZone + targetZone, ), expectedDate( datetime(2002, 1, 1, 9, 0, 0), currentLocalDate, - targetZone + targetZone, ), expectedDate( datetime(2002, 3, 1, 9, 0, 0), currentLocalDate, - targetZone + targetZone, ), expectedDate( datetime(2003, 1, 1, 9, 0, 0), currentLocalDate, - targetZone + targetZone, ), - ]) + ]); - resetMockDate() - }) + resetMockDate(); + }); it('permits only an rdate with a timezone', () => { - const set = new RRuleSet() - set.tzid('America/Los_Angeles') - set.rdate(datetime(2010, 11, 10, 10, 0, 0)) + const set = new RRuleSet(); + set.tzid('America/Los_Angeles'); + set.rdate(datetime(2010, 11, 10, 10, 0, 0)); expect(set.valueOf()).toEqual([ 'RDATE;TZID=America/Los_Angeles:20101110T100000', - ]) + ]); expect(set.toString()).toBe( - 'RDATE;TZID=America/Los_Angeles:20101110T100000' - ) + 'RDATE;TZID=America/Los_Angeles:20101110T100000', + ); - const set2 = rrulestr(set.toString()) + const set2 = rrulestr(set.toString()); expect(set2.toString()).toBe( - 'RDATE;TZID=America/Los_Angeles:20101110T100000' - ) - }) + 'RDATE;TZID=America/Los_Angeles:20101110T100000', + ); + }); it('generates correcty zoned recurrences when a tzid is present but no rrule is present', () => { - const targetZone = 'America/New_York' - const currentLocalDate = new Date(2000, 1, 6, 11, 0, 0) - setMockDate(currentLocalDate) + const targetZone = 'America/New_York'; + const currentLocalDate = new Date(2000, 1, 6, 11, 0, 0); + setMockDate(currentLocalDate); - const set = new RRuleSet() + const set = new RRuleSet(); - set.tzid(targetZone) + set.tzid(targetZone); - set.rdate(new Date(Date.parse('2002-03-01T09:00:00'))) + set.rdate(new Date(Date.parse('2002-03-01T09:00:00'))); expect(set.all()).toEqual([ expectedDate( new Date(Date.parse('2002-03-01T09:00:00')), currentLocalDate, - targetZone + targetZone, ), - ]) + ]); - resetMockDate() - }) - }) + resetMockDate(); + }); + }); describe('with end date', () => { - let cursor: Date + let cursor: Date; beforeEach(() => { - cursor = datetime(2017, 12, 25, 16, 0, 0) - }) + cursor = datetime(2017, 12, 25, 16, 0, 0); + }); it('updates the ruleset to exclude recurrence date', () => { - const legacy = ['RRULE:DTSTART=19990104T110000Z;FREQ=DAILY;INTERVAL=1'] - const repeat = ['DTSTART:19990104T110000Z', 'RRULE:FREQ=DAILY;INTERVAL=1'] + const legacy = ['RRULE:DTSTART=19990104T110000Z;FREQ=DAILY;INTERVAL=1']; + const repeat = [ + 'DTSTART:19990104T110000Z', + 'RRULE:FREQ=DAILY;INTERVAL=1', + ]; - const recurrenceDate = datetime(2017, 8, 21, 16, 0, 0) + const recurrenceDate = datetime(2017, 8, 21, 16, 0, 0); expectRecurrence([repeat, legacy]).toAmendExdate(recurrenceDate, [ 'DTSTART:19990104T110000Z', 'RRULE:FREQ=DAILY;INTERVAL=1', 'EXDATE:20170821T160000Z', - ]) - }) + ]); + }); it('updates the ruleset to exclude recurrence rule', () => { - const legacy = ['RRULE:DTSTART=19990104T110000Z;FREQ=DAILY;INTERVAL=1'] - const repeat = ['DTSTART:19990104T110000Z', 'RRULE:FREQ=DAILY;INTERVAL=1'] + const legacy = ['RRULE:DTSTART=19990104T110000Z;FREQ=DAILY;INTERVAL=1']; + const repeat = [ + 'DTSTART:19990104T110000Z', + 'RRULE:FREQ=DAILY;INTERVAL=1', + ]; const exrule = new RRule({ dtstart: datetime(1999, 1, 4, 11, 0, 0), freq: Frequency.WEEKLY, interval: 2, count: 1, - }) + }); expectRecurrence([repeat, legacy]).toAmendExrule(exrule, [ 'DTSTART:19990104T110000Z', 'RRULE:FREQ=DAILY;INTERVAL=1', 'EXRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=1', - ]) - }) + ]); + }); it('updates a never-ending recurrence with an end date', () => { - const legacy = ['RRULE:DTSTART=20171201T080000Z;FREQ=WEEKLY'] - const original = ['DTSTART:20171201T080000Z', 'RRULE:FREQ=WEEKLY'] + const legacy = ['RRULE:DTSTART=20171201T080000Z;FREQ=WEEKLY']; + const original = ['DTSTART:20171201T080000Z', 'RRULE:FREQ=WEEKLY']; expectRecurrence([original, legacy]).toBeUpdatedWithEndDate( [ 'DTSTART:20171201T080000Z', 'RRULE:FREQ=WEEKLY;UNTIL=20171224T235959Z', - ].join('\n') - ) - }) + ].join('\n'), + ); + }); it('replaces an existing end date with a new one', () => { const legacy = [ 'RRULE:DTSTART=20171201T080000Z;FREQ=WEEKLY;UNTIL=20180301T080000Z', - ] + ]; const original = [ 'DTSTART:20171201T080000Z', 'RRULE:FREQ=WEEKLY;UNTIL=20180301T080000Z', - ] + ]; expectRecurrence([original, legacy]).toBeUpdatedWithEndDate( [ 'DTSTART:20171201T080000Z', 'RRULE:FREQ=WEEKLY;UNTIL=20171224T235959Z', - ].join('\n') - ) - }) + ].join('\n'), + ); + }); it('handles rule in a timezone', () => { const legacy = [ 'RRULE:DTSTART;TZID=America/New_York:20171201T080000;FREQ=WEEKLY', - ] + ]; const original = [ 'DTSTART;TZID=America/New_York:20171201T080000', 'RRULE:FREQ=WEEKLY', - ] + ]; expectRecurrence([original, legacy]).toBeUpdatedWithEndDate( [ 'DTSTART;TZID=America/New_York:20171201T080000', 'RRULE:FREQ=WEEKLY;UNTIL=20171224T235959', - ].join('\n') - ) - }) + ].join('\n'), + ); + }); const updateWithEndDate = ( recurrence: string[], - updatedCursor: Date + updatedCursor: Date, ): string => { - const oneDay = 24 * 60 * 60 * 1000 - const oneDayEarlier = new Date(updatedCursor.getTime() - oneDay) + const oneDay = 24 * 60 * 60 * 1000; + const oneDayEarlier = new Date(updatedCursor.getTime() - oneDay); const newEndDate = new Date( Date.UTC( oneDayEarlier.getUTCFullYear(), @@ -746,138 +692,140 @@ describe('RRuleSet', function () { oneDayEarlier.getUTCDate(), 23, 59, - 59 - ) - ) + 59, + ), + ); - const rrule = rrulestr(recurrence.join('\n')) + const rrule = rrulestr(recurrence.join('\n')); - const newRuleSet = new RRuleSet() + const newRuleSet = new RRuleSet(); const rule = new RRule({ ...rrule.origOptions, until: newEndDate, - }) + }); - newRuleSet.rrule(rule) + newRuleSet.rrule(rule); - return newRuleSet.toString() - } + return newRuleSet.toString(); + }; const amendRuleSetWithExceptionDate = ( recurrence: string[], - cursor: Date + cursor: Date, ): string => { const ruleSet = rrulestr(recurrence.join('\n'), { forceset: true, - }) as RRuleSet - ruleSet.exdate(cursor) - return ruleSet.toString() - } + }) as RRuleSet; + ruleSet.exdate(cursor); + return ruleSet.toString(); + }; const amendRuleSetWithExceptionRule = ( recurrence: string[], - exrule: RRule + exrule: RRule, ): string => { const ruleSet = rrulestr(recurrence.join('\n'), { forceset: true, - }) as RRuleSet - ruleSet.exrule(exrule) - return ruleSet.toString() - } + }) as RRuleSet; + ruleSet.exrule(exrule); + return ruleSet.toString(); + }; function expectRecurrence(recurrences: string[][]) { return { toAmendExrule(excluded: RRule, expected: string[]) { recurrences.forEach((recurrence) => { - const actual = amendRuleSetWithExceptionRule(recurrence, excluded) - expect(actual).toBe(expected.join('\n')) - }) + const actual = amendRuleSetWithExceptionRule(recurrence, excluded); + expect(actual).toBe(expected.join('\n')); + }); }, toAmendExdate(excluded: Date, expected: string[]) { recurrences.forEach((recurrence) => { - const actual = amendRuleSetWithExceptionDate(recurrence, excluded) - expect(actual).toBe(expected.join('\n')) - }) + const actual = amendRuleSetWithExceptionDate(recurrence, excluded); + expect(actual).toBe(expected.join('\n')); + }); }, toBeUpdatedWithEndDate(expected: string) { recurrences.forEach((recurrence) => { - const actual = updateWithEndDate(recurrence, cursor) - expect(actual).toBe(expected) - }) + const actual = updateWithEndDate(recurrence, cursor); + expect(actual).toBe(expected); + }); }, - } + }; } - }) + }); it('throws a RangeError on an rruleset with invalid TZID and exdate', () => { - const set = new RRuleSet() + const set = new RRuleSet(); set.rrule( new RRule({ count: 1, dtstart: parse('19970902T090000'), tzid: 'America/Unknown', - }) - ) - set.exdate(parse('19970902T090000')) + }), + ); + set.exdate(parse('19970902T090000')); - expect(() => set.all().map(String)).toThrow(RangeError) - }) + expect(() => set.all().map(String)).toThrow(RangeError); + }); - it('throws an error if non-rrules are added via rrule or exrule', () => { - const set = new RRuleSet() + it('throws a TypeError if non-rrules are added via rrule or exrule', () => { + const set = new RRuleSet(); - expect(() => set.rrule('foo' as unknown as RRule)).toThrow() - expect(() => set.exrule('foo' as unknown as RRule)).toThrow() - }) + expect(() => set.rrule('foo' as unknown as RRule)).toThrow(TypeError); + expect(() => set.exrule('foo' as unknown as RRule)).toThrow(TypeError); + }); - it('throws an error if non-dates are added via rdate or exdate', () => { - const set = new RRuleSet() + it('throws a TypeError if non-dates are added via rdate or exdate', () => { + const set = new RRuleSet(); - expect(() => set.rdate('foo' as unknown as Date)).toThrow() - expect(() => set.exdate('foo' as unknown as Date)).toThrow() - }) + expect(() => set.rdate('foo' as unknown as Date)).toThrow(TypeError); + expect(() => set.exdate('foo' as unknown as Date)).toThrow(TypeError); + }); describe('getters', () => { it('rrules()', () => { - const set = new RRuleSet() + const set = new RRuleSet(); const rrule = new RRule({ freq: RRule.YEARLY, count: 2, dtstart: parse('19600101T090000'), tzid: 'America/New_York', - }) - set.rrule(rrule) + }); + set.rrule(rrule); - expect(set.rrules().map((e) => e.toString())).toEqual([rrule.toString()]) - }) + expect(set.rrules().map((e) => e.toString())).toEqual([rrule.toString()]); + }); it('exrules()', () => { - const set = new RRuleSet() + const set = new RRuleSet(); const rrule = new RRule({ freq: RRule.YEARLY, count: 2, dtstart: parse('19600101T090000'), tzid: 'America/New_York', - }) - set.exrule(rrule) + }); + set.exrule(rrule); - expect(set.exrules().map((e) => e.toString())).toEqual([rrule.toString()]) - }) + expect(set.exrules().map((e) => e.toString())).toEqual([ + rrule.toString(), + ]); + }); it('rdates()', () => { - const set = new RRuleSet() - const dt = parse('19610201T090000') - set.rdate(dt) + const set = new RRuleSet(); + const dt = parse('19610201T090000'); + set.rdate(dt); - expect(set.rdates()).toEqual([dt]) - }) + expect(set.rdates()).toEqual([dt]); + }); it('exdates()', () => { - const set = new RRuleSet() - const dt = parse('19610201T090000') - set.exdate(dt) - - expect(set.exdates()).toEqual([dt]) - }) - }) -}) + const set = new RRuleSet(); + const dt = parse('19610201T090000'); + set.exdate(dt); + + expect(set.exdates()).toEqual([dt]); + }); + }); +}); diff --git a/test/rrulestr.test.ts b/test/rrulestr.test.ts index 66b5604df..d86bbddac 100644 --- a/test/rrulestr.test.ts +++ b/test/rrulestr.test.ts @@ -1,59 +1,61 @@ -import { parse, datetime, testRecurring, TEST_CTX } from './lib/utils' -import { RRule, RRuleSet, rrulestr, Frequency } from '../src' -import { Days } from '../src/rrule' -import { parseInput } from '../src/rrulestr' +import { Frequency, RRule, RRuleSet, rrulestr } from '../src'; +import { Days } from '../src/rrule'; +import { parseInput } from '../src/rrulestr'; +import { datetime, parse, TEST_CTX, testRecurring } from './lib/utils'; -describe('rrulestr', function () { +describe('rrulestr', () => { beforeAll(() => { // Enable additional toString() / fromString() tests // for each testRecurring(). - TEST_CTX.ALSO_TESTSTRING_FUNCTIONS = false + TEST_CTX.ALSO_TESTSTRING_FUNCTIONS = false; // Enable additional toText() / fromText() tests // for each testRecurring(). // Many of the tests fail because the conversion is only approximate, // but it gives an idea about how well or bad it converts. - TEST_CTX.ALSO_TESTNLP_FUNCTIONS = false + TEST_CTX.ALSO_TESTNLP_FUNCTIONS = false; // Thorough after()/before()/between() tests. // NOTE: can take a longer time. - TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN = true + TEST_CTX.ALSO_TESTBEFORE_AFTER_BETWEEN = true; - TEST_CTX.ALSO_TESTSUBSECOND_PRECISION = false - }) + TEST_CTX.ALSO_TESTSUBSECOND_PRECISION = false; + }); it('parses an rrule', () => { expect( - rrulestr('DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=3\n') - ).toBeInstanceOf(RRule) - }) + rrulestr('DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=3\n'), + ).toBeInstanceOf(RRule); + }); it('parses an rrule without frequency', () => { - const rRuleString = 'DTSTART:19970902T090000Z' - const parsedRRuleSet = rrulestr(rRuleString, { forceset: true }) as RRuleSet - expect(parsedRRuleSet.toString()).toBe(rRuleString) + const rRuleString = 'DTSTART:19970902T090000Z'; + const parsedRRuleSet = rrulestr(rRuleString, { + forceset: true, + }) as RRuleSet; + expect(parsedRRuleSet.toString()).toBe(rRuleString); - const parsedRRule = rrulestr(rRuleString) as RRule - expect(parsedRRule.toString()).toBe(rRuleString) - }) + const parsedRRule = rrulestr(rRuleString) as RRule; + expect(parsedRRule.toString()).toBe(rRuleString); + }); it('parses an rruleset when forceset=true', () => { expect( rrulestr('DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=3\n', { forceset: true, - }) - ).toBeInstanceOf(RRuleSet) - }) + }), + ).toBeInstanceOf(RRuleSet); + }); it('parses an rruleset when there are multiple rrules', () => { expect( rrulestr( 'DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n' + - 'RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n' - ) - ).toBeInstanceOf(RRuleSet) - }) + 'RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n', + ), + ).toBeInstanceOf(RRuleSet); + }); testRecurring( 'testStr', @@ -62,8 +64,8 @@ describe('rrulestr', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrCase', @@ -72,8 +74,8 @@ describe('rrulestr', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSpaces', @@ -82,20 +84,20 @@ describe('rrulestr', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSpacesAndLines', rrulestr( - ' DTSTART:19970902T090000Z \n' + ' \n RRULE:FREQ=YEARLY;COUNT=3 \n' + ' DTSTART:19970902T090000Z \n' + ' \n RRULE:FREQ=YEARLY;COUNT=3 \n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrNoDTStart', @@ -106,8 +108,8 @@ describe('rrulestr', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrValueOnly', @@ -118,8 +120,8 @@ describe('rrulestr', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrUnfold', @@ -131,22 +133,22 @@ describe('rrulestr', function () { datetime(1997, 9, 2, 9, 0), datetime(1998, 9, 2, 9, 0), datetime(1999, 9, 2, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSet', rrulestr( 'DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU\n' + - 'RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n' + 'RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH\n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSetDate', @@ -154,28 +156,28 @@ describe('rrulestr', function () { 'DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TU\n' + 'RDATE:19970904T090000Z\n' + - 'RDATE:19970909T090000Z\n' + 'RDATE:19970909T090000Z\n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 4, 9, 0), datetime(1997, 9, 9, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSetExRule', rrulestr( 'DTSTART:19970902T090000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n' + - 'EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n' + 'EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSetExDate', @@ -184,14 +186,14 @@ describe('rrulestr', function () { 'RRULE:FREQ=YEARLY;COUNT=6;BYDAY=TU,TH\n' + 'EXDATE:19970904T090000Z\n' + 'EXDATE:19970911T090000Z\n' + - 'EXDATE:19970918T090000Z\n' + 'EXDATE:19970918T090000Z\n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSetDateAndExDate', @@ -205,14 +207,14 @@ describe('rrulestr', function () { 'RDATE:19970918T090000Z\n' + 'EXDATE:19970904T090000Z\n' + 'EXDATE:19970911T090000Z\n' + - 'EXDATE:19970918T090000Z\n' + 'EXDATE:19970918T090000Z\n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrSetDateAndExRule', @@ -224,14 +226,14 @@ describe('rrulestr', function () { 'RDATE:19970911T090000Z\n' + 'RDATE:19970916T090000Z\n' + 'RDATE:19970918T090000Z\n' + - 'EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n' + 'EXRULE:FREQ=YEARLY;COUNT=3;BYDAY=TH\n', ), [ datetime(1997, 9, 2, 9, 0), datetime(1997, 9, 9, 9, 0), datetime(1997, 9, 16, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrKeywords', @@ -239,81 +241,81 @@ describe('rrulestr', function () { 'DTSTART:19970902T030000Z\n' + 'RRULE:FREQ=YEARLY;COUNT=3;INTERVAL=3;' + 'BYMONTH=3;byweekday=TH;BYMONTHDAY=3;' + - 'BYHOUR=3;BYMINUTE=3;BYSECOND=3\n' + 'BYHOUR=3;BYMINUTE=3;BYSECOND=3\n', ), [ datetime(2033, 3, 3, 3, 3, 3), datetime(2039, 3, 3, 3, 3, 3), datetime(2072, 3, 3, 3, 3, 3), - ] - ) + ], + ); testRecurring( 'testStrNWeekDay', rrulestr( 'DTSTART:19970902T090000Z\n' + - 'RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n' + 'RRULE:FREQ=YEARLY;COUNT=3;BYDAY=1TU,-1TH\n', ), [ datetime(1997, 12, 25, 9, 0), datetime(1998, 1, 6, 9, 0), datetime(1998, 12, 31, 9, 0), - ] - ) + ], + ); testRecurring( 'testStrNWeekDayLarge', rrulestr( 'DTSTART:19970902T090000Z\n' + - 'RRULE:FREQ=YEARLY;COUNT=3;BYDAY=13TU,-13TH\n' + 'RRULE:FREQ=YEARLY;COUNT=3;BYDAY=13TU,-13TH\n', ), [ datetime(1997, 10, 2, 9, 0), datetime(1998, 3, 31, 9, 0), datetime(1998, 10, 8, 9, 0), - ] - ) + ], + ); it('parses without TZID', () => { - const rrule = rrulestr('DTSTART:19970902T090000\nRRULE:FREQ=WEEKLY') + const rrule = rrulestr('DTSTART:19970902T090000\nRRULE:FREQ=WEEKLY'); expect(rrule.origOptions).toMatchObject({ freq: Frequency.WEEKLY, dtstart: datetime(1997, 9, 2, 9, 0, 0), - }) - }) + }); + }); it('parses TZID', () => { const rrule = rrulestr( 'DTSTART;TZID=America/New_York:19970902T090000\n' + - 'RRULE:FREQ=DAILY;UNTIL=19980902T090000' - ) + 'RRULE:FREQ=DAILY;UNTIL=19980902T090000', + ); expect(rrule.origOptions).toMatchObject({ tzid: 'America/New_York', freq: Frequency.DAILY, dtstart: datetime(1997, 9, 2, 9, 0, 0), until: datetime(1998, 9, 2, 9, 0, 0), - }) - }) + }); + }); it('parses a DTSTART inside an RRULE', () => { const rrule = rrulestr( - 'RRULE:UNTIL=19990404T110000Z;DTSTART=19990104T110000Z;FREQ=WEEKLY;BYDAY=TU,WE' - ) + 'RRULE:UNTIL=19990404T110000Z;DTSTART=19990104T110000Z;FREQ=WEEKLY;BYDAY=TU,WE', + ); expect(rrule.options).toMatchObject({ until: datetime(1999, 4, 4, 11, 0, 0), dtstart: datetime(1999, 1, 4, 11, 0, 0), freq: Frequency.WEEKLY, byweekday: [Days.TU.weekday, Days.WE.weekday], - }) - }) + }); + }); it('parses a DTSTART with a TZID inside an RRULE', () => { const rrule = rrulestr( - 'RRULE:UNTIL=19990404T110000Z;DTSTART;TZID=America/New_York:19990104T110000Z;FREQ=WEEKLY;BYDAY=TU,WE' - ) + 'RRULE:UNTIL=19990404T110000Z;DTSTART;TZID=America/New_York:19990104T110000Z;FREQ=WEEKLY;BYDAY=TU,WE', + ); expect(rrule.options).toMatchObject({ until: datetime(1999, 4, 4, 11, 0, 0), @@ -321,54 +323,54 @@ describe('rrulestr', function () { freq: Frequency.WEEKLY, tzid: 'America/New_York', byweekday: [Days.TU.weekday, Days.WE.weekday], - }) - }) + }); + }); it('parses a DTSTART if it is the first param', () => { const rrule = rrulestr( - 'RRULE:DTSTART;TZID=America/Los_Angeles:20180719T111500;FREQ=DAILY;INTERVAL=1' - ) + 'RRULE:DTSTART;TZID=America/Los_Angeles:20180719T111500;FREQ=DAILY;INTERVAL=1', + ); expect(rrule.options).toMatchObject({ dtstart: datetime(2018, 7, 19, 11, 15, 0), freq: Frequency.DAILY, interval: 1, tzid: 'America/Los_Angeles', - }) - }) + }); + }); it('parses an RDATE with no TZID param', () => { const rruleset = rrulestr( 'DTSTART:20180719T111500Z\n' + 'RRULE:FREQ=DAILY;INTERVAL=1\n' + 'RDATE:20180720T111500Z\n' + - 'EXDATE:20180721T111500Z' - ) as RRuleSet + 'EXDATE:20180721T111500Z', + ) as RRuleSet; expect(rruleset.valueOf()).toEqual([ 'DTSTART:20180719T111500Z', 'RRULE:FREQ=DAILY;INTERVAL=1', 'RDATE:20180720T111500Z', 'EXDATE:20180721T111500Z', - ]) - }) + ]); + }); it('parses an RDATE with a TZID param', () => { const rruleset = rrulestr( 'DTSTART;TZID=America/Los_Angeles:20180719T111500\n' + 'RRULE:FREQ=DAILY;INTERVAL=1\n' + 'RDATE;TZID=America/Los_Angeles:20180720T111500\n' + - 'EXDATE;TZID=America/Los_Angeles:20180721T111500' - ) as RRuleSet + 'EXDATE;TZID=America/Los_Angeles:20180721T111500', + ) as RRuleSet; expect(rruleset.valueOf()).toEqual([ 'DTSTART;TZID=America/Los_Angeles:20180719T111500', 'RRULE:FREQ=DAILY;INTERVAL=1', 'RDATE;TZID=America/Los_Angeles:20180720T111500', 'EXDATE;TZID=America/Los_Angeles:20180721T111500', - ]) - }) -}) + ]); + }); +}); describe('parseInput', () => { it('parses an input into a structure', () => { @@ -379,8 +381,8 @@ describe('parseInput', () => { 'RDATE:19970904T090000Z\n' + 'EXDATE:19970904T090000Z\n' + 'EXRULE:FREQ=WEEKLY;INTERVAL=2\n', - {} - ) + {}, + ); expect(output).toMatchObject({ dtstart: datetime(1997, 9, 2, 9, 0, 0), tzid: 'America/New_York', @@ -399,6 +401,6 @@ describe('parseInput', () => { freq: Frequency.WEEKLY, }, ], - }) - }) -}) + }); + }); +}); diff --git a/tsconfig.build.json b/tsconfig.build.json deleted file mode 100644 index d014c0459..000000000 --- a/tsconfig.build.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./dist/esm", - "outDir": "./dist/esm", - "declaration": true, - "declarationMap": true, - "noImplicitAny": true, - "sourceMap": true, - "module": "es2015", - "moduleResolution": "node", - "noEmitOnError": true, - "target": "es5", - "importHelpers": true, - "esModuleInterop": true, - "rootDirs": ["./src/"] - }, - "include": ["./src/**/*"], - "exclude": ["node_modules", "./test/**/*"] -} diff --git a/tsconfig.json b/tsconfig.json index d89ed13ab..73ae8aa9e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,28 @@ { "compilerOptions": { - "noEmit": true, - "noImplicitAny": true, - "sourceMap": true, - "module": "commonjs", - "noEmitOnError": true, + "target": "ES2022", + "lib": ["ES2023", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", "esModuleInterop": true, - "target": "es6", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, "baseUrl": ".", - "rootDirs": ["./src/", "./test/"] + "paths": { + "@/*": ["./src/*"] + }, + "declaration": true, + "declarationMap": true, + "outDir": "./dist" }, - "include": ["./src/**/*", "./test/**/*"], - "exclude": ["node_modules"] + "include": ["src", "vite.config.ts", "tests"] } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 000000000..57b98e807 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,30 @@ +import { resolve } from 'node:path'; +import dts from 'unplugin-dts/vite'; +import { defineConfig } from 'vite'; + +const __dirname = import.meta.dirname; + +export default defineConfig({ + plugins: [ + dts({ + outDirs: ['dist'], + insertTypesEntry: true, + bundleTypes: true, + exclude: ['vite.config.ts', 'test'], + }), + ], + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, + build: { + lib: { + entry: resolve(__dirname, 'src/index.ts'), + fileName: 'rrule', + formats: ['es', 'cjs'], + }, + sourcemap: true, + minify: 'terser', + }, +}); diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 5601263c2..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,51 +0,0 @@ -const path = require('path') -const TerserPlugin = require('terser-webpack-plugin') -const UnminifiedWebpackPlugin = require('unminified-webpack-plugin') - -const paths = { - source: path.resolve(__dirname, 'src'), - es5: path.resolve(__dirname, 'dist', 'es5'), -} - -const commonConfig = { - output: { - filename: '[name].min.js', - path: paths.es5, - library: 'rrule', - libraryTarget: 'umd', - globalObject: "typeof self !== 'undefined' ? self : this", - }, - devtool: 'source-map', - mode: 'production', - resolve: { - extensions: ['.js', '.ts'], - }, - module: { - rules: [ - { - exclude: /node_modules/, - loader: 'ts-loader', - test: /\.ts$/, - options: { - configFile: 'tsconfig.build.json', - }, - }, - ], - }, - optimization: { - minimize: true, - minimizer: [new TerserPlugin()], - }, - plugins: [new UnminifiedWebpackPlugin()], -} - -const rruleConfig = Object.assign( - { - entry: { - rrule: path.join(paths.source, 'index.ts'), - }, - }, - commonConfig -) - -module.exports = [rruleConfig] diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 1e1781bdb..000000000 --- a/yarn.lock +++ /dev/null @@ -1,5189 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== - -"@babel/compat-data@^7.22.9": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" - integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" - integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.3" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.3" - "@babel/types" "^7.23.3" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.7.5": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.2.tgz#87b2fcd7cce9becaa7f5acebdc4f09f3dd19d876" - integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== - dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/generator@^7.23.3", "@babel/generator@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" - integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== - dependencies: - "@babel/types" "^7.23.3" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-simple-access@^7.17.7": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== - dependencies: - "@babel/types" "^7.18.2" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - -"@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" - integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== - -"@babel/parser@^7.16.7", "@babel/parser@^7.18.0": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef" - integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.2.tgz#b77a52604b5cc836a9e1e08dca01cba67a12d2e8" - integrity sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.0" - "@babel/types" "^7.18.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" - integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.3" - "@babel/types" "^7.23.3" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.3.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" - integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.0", "@babel/types@^7.18.2": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@es-joy/jsdoccomment@~0.31.0": - version "0.31.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz#dbc342cc38eb6878c12727985e693eaef34302bc" - integrity sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ== - dependencies: - comment-parser "1.3.1" - esquery "^1.4.0" - jsdoc-type-pratt-parser "~3.1.0" - -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== - -"@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== - -"@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== - -"@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== - -"@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== - -"@types/assert@^1.4.3": - version "1.5.6" - resolved "https://registry.yarnpkg.com/@types/assert/-/assert-1.5.6.tgz#a8b5a94ce5fb8f4ba65fdc37fc9507609114189e" - integrity sha512-Y7gDJiIqb9qKUHfBQYOWGngUpLORtirAVPuj/CWJrU2C6ZM4/y3XLwuwfGMF8s7QzW746LQZx23m0+1FSgjfug== - -"@types/babel__core@^7.1.14": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0" - integrity sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.7" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" - integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" - integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== - dependencies: - "@babel/types" "^7.20.7" - -"@types/eslint-scope@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.2.tgz#48f2ac58ab9c631cb68845c3d956b28f79fad575" - integrity sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/is-windows@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@types/is-windows/-/is-windows-0.2.0.tgz#6f24ee48731d31168ea510610d6dd15e5fc9c6ff" - integrity sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8= - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-coverage@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.8": - version "29.5.8" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.8.tgz#ed5c256fe2bc7c38b1915ee5ef1ff24a3427e120" - integrity sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/mockdate@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/mockdate/-/mockdate-3.0.0.tgz#ed140c46c4542964621e553d181faf62cadc973a" - integrity sha512-p2mDrXSBlcpz1JFRTzeF12g4yGpHgh8HKoOWUw6gE/+W/s+oXPfip/n1Z+qLyE7wU1NSWCslexEEd1FAlNCWPQ== - dependencies: - mockdate "*" - -"@types/node@*", "@types/node@^17.0.41": - version "17.0.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.41.tgz#1607b2fd3da014ae5d4d1b31bc792a39348dfb9b" - integrity sha512-xA6drNNeqb5YyV5fO3OAEsnXLfO7uF0whiOfPTz5AeDo8KeZFmODKnvwPymMNO8qE/an8pVY/O50tig2SQCrGw== - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.31" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.31.tgz#8fd0089803fd55d8a285895a18b88cb71a99683c" - integrity sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.27.1.tgz#fdf59c905354139046b41b3ed95d1609913d0758" - integrity sha512-6dM5NKT57ZduNnJfpY81Phe9nc9wolnMCnknb1im6brWi1RYv84nbMS3olJa27B6+irUVV1X/Wb+Am0FjJdGFw== - dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/type-utils" "5.27.1" - "@typescript-eslint/utils" "5.27.1" - debug "^4.3.4" - functional-red-black-tree "^1.0.1" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.27.1.tgz#3a4dcaa67e45e0427b6ca7bb7165122c8b569639" - integrity sha512-7Va2ZOkHi5NP+AZwb5ReLgNF6nWLGTeUJfxdkVUAPPSaAdbWNnFZzLZ4EGGmmiCTg+AwlbE1KyUYTBglosSLHQ== - dependencies: - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz#4d1504392d01fe5f76f4a5825991ec78b7b7894d" - integrity sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg== - dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" - -"@typescript-eslint/type-utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz#369f695199f74c1876e395ebea202582eb1d4166" - integrity sha512-+UC1vVUWaDHRnC2cQrCJ4QtVjpjjCgjNFpg8b03nERmkHv9JV9X5M19D7UFMd+/G7T/sgFwX2pGmWK38rqyvXw== - dependencies: - "@typescript-eslint/utils" "5.27.1" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.27.1.tgz#34e3e629501349d38be6ae97841298c03a6ffbf1" - integrity sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg== - -"@typescript-eslint/typescript-estree@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz#7621ee78607331821c16fffc21fc7a452d7bc808" - integrity sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw== - dependencies: - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/visitor-keys" "5.27.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.27.1.tgz#b4678b68a94bc3b85bf08f243812a6868ac5128f" - integrity sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.27.1" - "@typescript-eslint/types" "5.27.1" - "@typescript-eslint/typescript-estree" "5.27.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/visitor-keys@5.27.1": - version "5.27.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz#05a62666f2a89769dac2e6baa48f74e8472983af" - integrity sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ== - dependencies: - "@typescript-eslint/types" "5.27.1" - eslint-visitor-keys "^3.3.0" - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - 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" - -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - 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" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - 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" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@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@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - 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" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" - integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== - -"@webpack-cli/info@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" - integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" - integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" - integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== - dependencies: - default-require-extensions "^3.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-includes@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.14.5, browserslist@^4.20.2: - version "4.20.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.4.tgz#98096c9042af689ee1e0271333dbc564b8ce4477" - integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw== - dependencies: - caniuse-lite "^1.0.30001349" - electron-to-chromium "^1.4.147" - escalade "^3.1.1" - node-releases "^2.0.5" - picocolors "^1.0.0" - -browserslist@^4.21.9: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -c8@^5.0.1: - version "5.0.4" - resolved "https://registry.yarnpkg.com/c8/-/c8-5.0.4.tgz#a247fd6a4cbc19b33dae17178a7d903a8dd7fa79" - integrity sha512-MgWIJ3HYe4NTtqwD+v16OdHvfqSzSLOmsptMuUxkzsYMoZzEeUv3yVep2d84qFjgio/3WbVEd9bkYQCFSDKeMw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - find-up "^4.0.0" - foreground-child "^2.0.0" - furi "^1.3.0" - istanbul-lib-coverage "^2.0.5" - istanbul-lib-report "^2.0.8" - istanbul-reports "^2.2.6" - rimraf "^3.0.0" - test-exclude "^5.2.3" - v8-to-istanbul "^3.2.3" - yargs "^14.0.0" - yargs-parser "^14.0.0" - -caching-transform@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" - integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== - dependencies: - hasha "^5.0.0" - make-dir "^3.0.0" - package-hash "^4.0.0" - write-file-atomic "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001349: - version "1.0.30001350" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001350.tgz#f0acc6472469d066a4357765eb73be5973eda918" - integrity sha512-NZBql38Pzd+rAu5SPXv+qmTWGQuFsRiemHCJCAPvkoDxWV19/xqL2YHF32fDJ9SDLdLqfax8+S0CO3ncDCp9Iw== - -caniuse-lite@^1.0.30001541: - version "1.0.30001561" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" - integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== - -chalk@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.14, colorette@^2.0.16, colorette@^2.0.17: - version "2.0.17" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.17.tgz#5dd4c0d15e2984b7433cb4a9f2ead45063b80c47" - integrity sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g== - -commander@^2.20.0, commander@~2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" - integrity sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw== - -comment-parser@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" - integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -convert-source-map@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -coverage@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/coverage/-/coverage-0.4.1.tgz#71297733f6f54af749f64a58520dbae8d81ca966" - integrity sha512-Nwe6RSpwaUR6R++b5QukGrbu3rpeSOGZ805f6IXwG63pIaJZ7NV5osfDgJ43Fz0B9IwXha+jwArWB8Tpngi8lA== - dependencies: - c8 "^5.0.1" - foreground-child "^1.5.6" - normalize-package-data "^2.5.0" - slash "^3.0.0" - test-exclude "^5.2.3" - which "^1.3.1" - yargs-parser "^13.1.1" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^4: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-require-extensions@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" - integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== - dependencies: - strip-bom "^4.0.0" - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.4.147: - version "1.4.148" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.148.tgz#437430e03c58ccd1d05701f66980afe54d2253ec" - integrity sha512-8MJk1bcQUAYkuvCyWZxaldiwoDG0E0AMzBGA6cv3WfuvJySiPgfidEPBFCRRH3cZm6SVZwo/oRlK1ehi1QNEIQ== - -electron-to-chromium@^1.4.535: - version "1.4.580" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.580.tgz#2f8f70f70733a6be1fb6f31de1224e6dc4bb196d" - integrity sha512-T5q3pjQon853xxxHUq3ZP68ZpvJHuSMY2+BZaW3QzjS4HvNuvsMmZ/+lU+nCrftre1jFZ+OSlExynXWBihnXzw== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -enhanced-resolve@^5.0.0, enhanced-resolve@^5.9.3: - version "5.9.3" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" - integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== - dependencies: - debug "^3.2.7" - find-up "^2.1.0" - -eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jsdoc@^39.3.2: - version "39.3.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.2.tgz#b9c3becdbd860a75b8bd07bd04a0eaaad7c79403" - integrity sha512-RSGN94RYzIJS/WfW3l6cXzRLfJWxvJgNQZ4w0WCaxJWDJMigtwTsILEAfKqmmPkT2rwMH/s3C7G5ChDE6cwPJg== - dependencies: - "@es-joy/jsdoccomment" "~0.31.0" - comment-parser "1.3.1" - debug "^4.3.4" - escape-string-regexp "^4.0.0" - esquery "^1.4.0" - semver "^7.3.7" - spdx-expression-parse "^3.0.1" - -eslint-plugin-prettier@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" - integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.17.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== - dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== - dependencies: - acorn "^8.7.1" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - 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" - -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -foreground-child@^1.5.6: - version "1.5.6" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" - dependencies: - cross-spawn "^4" - signal-exit "^3.0.0" - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - -fromentries@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -furi@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/furi/-/furi-1.3.0.tgz#5fd4186d805ae80a3acd29efaf954761003391f8" - integrity sha512-TYoXEeRLKHXNWcCBP0VH1psPktQ9G8Y0GfZwMXCvwVbhbfNx7JItKWhB5mMBYufNjqxEHq+Ivd1nLtr5vQyVoQ== - dependencies: - "@types/is-windows" "^0.2.0" - is-windows "^1.0.2" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" - -globals@^13.15.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -handlebars@^4.1.2: - version "4.5.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" - integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasha@^5.0.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" - integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== - dependencies: - is-stream "^2.0.0" - type-fest "^0.8.0" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - -husky@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" - integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== - -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-hook@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" - integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== - dependencies: - append-transform "^2.0.0" - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-processinfo@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169" - integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== - dependencies: - archy "^1.0.0" - cross-spawn "^7.0.3" - istanbul-lib-coverage "^3.2.0" - p-map "^3.0.0" - rimraf "^3.0.0" - uuid "^8.3.2" - -istanbul-lib-report@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== - dependencies: - handlebars "^4.1.2" - -istanbul-reports@^3.0.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdoc-type-pratt-parser@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz#a4a56bdc6e82e5865ffd9febc5b1a227ff28e67e" - integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== - -jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lint-staged@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.1.tgz#899e78065ab29b88fdd922482411121664ef66be" - integrity sha512-Ykaf4QTi0a02BF7cnq7JIPGOJxH4TkNMWhSlJdH9wOekd0X+gog47Jfh/0L31DqZe5AiydLGC7LkPqpaNm+Kvg== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.17" - commander "^9.3.0" - debug "^4.3.4" - execa "^6.1.0" - lilconfig "2.0.5" - listr2 "^4.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.1.1" - -listr2@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" - integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.5" - through "^2.3.8" - wrap-ansi "^7.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -lru-cache@^4.0.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -mockdate@*, mockdate@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-3.0.5.tgz#789be686deb3149e7df2b663d2bc4392bc3284fb" - integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-preload@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" - integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== - dependencies: - process-on-spawn "^1.0.0" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== - -normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -nyc@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" - integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== - dependencies: - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - caching-transform "^4.0.0" - convert-source-map "^1.7.0" - decamelize "^1.2.0" - find-cache-dir "^3.2.0" - find-up "^4.1.0" - foreground-child "^2.0.0" - get-package-type "^0.1.0" - glob "^7.1.6" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-hook "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-processinfo "^2.0.2" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - make-dir "^3.0.0" - node-preload "^0.2.1" - p-map "^3.0.0" - process-on-spawn "^1.0.0" - resolve-from "^5.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - spawn-wrap "^2.0.0" - test-exclude "^6.0.0" - yargs "^15.0.2" - -object-inspect@^1.12.0, object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== - dependencies: - p-try "^2.0.0" - -p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -process-on-spawn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" - integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== - dependencies: - fromentries "^1.2.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= - dependencies: - es6-error "^4.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.10.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -"semver@2 || 3 || 4 || 5": - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.4, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -source-map-js@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" - integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.3" - source-map-js "^1.0.1" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.16, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -spawn-wrap@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" - integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== - dependencies: - foreground-child "^2.0.0" - is-windows "^1.0.2" - make-dir "^3.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - which "^2.0.1" - -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-parse@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" - integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.7" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.7.2" - -terser@^5.7.2: - version "5.14.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.0.tgz#eefeec9af5153f55798180ee2617f390bdd285e2" - integrity sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -ts-jest@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" - integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - -ts-loader@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.0.tgz#980f4dbfb60e517179e15e10ed98e454b132159f" - integrity sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - -ts-node@^10.8.1: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== - dependencies: - "@cspotcode/source-map-support" "^0.8.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.1" - yn "3.1.1" - -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -tslib@^2.1.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.8.0: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.7.3: - version "4.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" - integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== - -uglify-js@^3.1.4: - version "3.7.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" - integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unminified-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unminified-webpack-plugin/-/unminified-webpack-plugin-3.0.0.tgz#7b67a052cb8ea408334ff4301bc9526e28ce8797" - integrity sha512-XUUzicg2OMIrxYYJPfFBXU3wvmQL9SXDY+OCEHTB1FFoy6Im9vfFcO6tz29IUtGc8QdLvyqb0o7ua0YQ4P2+oQ== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-3.2.6.tgz#42333fe6b2a9849b108ff781af6faa1a61390eac" - integrity sha512-M6zzkVjsr+6sFdWPCuq7fjg9oCOXlssin05Yhobt9jMqHlEhw8AQ4/ClDiLCVWzXjpS2ezik53mhgSivw0XwmQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -v8-to-istanbul@^9.0.1: - version "9.1.3" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" - integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webpack-cli@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" - integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== - 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" - -webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.73.0: - version "5.73.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" - integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== - 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.9.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-even-better-errors "^2.3.1" - 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" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" - integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== - -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-14.0.0.tgz#42e25777b06718ec99eac2c3a98ad3de73b6818f" - integrity sha512-zn/Mnx+tbFjkCFUodEpjXckNS65NfpB5oyqOkDDEG/8uxlfLZJu2IoBLQFjukUkn9rBbGkVYNzrDh6qy4NUd3g== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.0.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^14.0.0: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.0" - -yargs@^15.0.2: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==